diff --git a/SabreTools.DatItems/DatItemTool.cs b/SabreTools.DatItems/DatItemTool.cs
index b1225371..d9e53c10 100644
--- a/SabreTools.DatItems/DatItemTool.cs
+++ b/SabreTools.DatItems/DatItemTool.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
using SabreTools.Core;
@@ -9,1053 +8,10 @@ using SabreTools.Core.Tools;
namespace SabreTools.DatItems
{
///
- /// Manipulate DatItems
+ /// Set fields on DatItems
///
public static class DatItemTool
{
- #region Field Replacement
-
- ///
- /// Replace fields with given values
- ///
- /// DatItem to replace fields in
- /// DatItem to pull new information from
- /// List of fields representing what should be updated
- public static void ReplaceFields(DatItem datItem, DatItem repDatItem, List datItemFields)
- {
- if (datItem == null || repDatItem == null || datItemFields == null)
- return;
-
- #region Common
-
- if (datItem.ItemType != repDatItem.ItemType)
- return;
-
- if (datItemFields.Contains(DatItemField.Name))
- datItem.SetName(repDatItem.GetName());
-
- #endregion
-
- #region Item-Specific
-
- if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields);
- else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields);
- else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields);
- else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields);
- else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields);
- else if (datItem is Configuration) ReplaceFields(datItem as Configuration, repDatItem as Configuration, datItemFields);
- else if (datItem is Control) ReplaceFields(datItem as Control, repDatItem as Control, datItemFields);
- else if (datItem is DataArea) ReplaceFields(datItem as DataArea, repDatItem as DataArea, datItemFields);
- else if (datItem is Device) ReplaceFields(datItem as Device, repDatItem as Device, datItemFields);
- else if (datItem is DipSwitch) ReplaceFields(datItem as DipSwitch, repDatItem as DipSwitch, datItemFields);
- else if (datItem is Disk) ReplaceFields(datItem as Disk, repDatItem as Disk, datItemFields);
- else if (datItem is DiskArea) ReplaceFields(datItem as DiskArea, repDatItem as DiskArea, datItemFields);
- else if (datItem is Display) ReplaceFields(datItem as Display, repDatItem as Display, datItemFields);
- else if (datItem is Driver) ReplaceFields(datItem as Driver, repDatItem as Driver, datItemFields);
- else if (datItem is Extension) ReplaceFields(datItem as Extension, repDatItem as Extension, datItemFields);
- else if (datItem is Feature) ReplaceFields(datItem as Feature, repDatItem as Feature, datItemFields);
- else if (datItem is Info) ReplaceFields(datItem as Info, repDatItem as Info, datItemFields);
- else if (datItem is Input) ReplaceFields(datItem as Input, repDatItem as Input, datItemFields);
- else if (datItem is Instance) ReplaceFields(datItem as Instance, repDatItem as Instance, datItemFields);
- else if (datItem is Location) ReplaceFields(datItem as Location, repDatItem as Location, datItemFields);
- else if (datItem is Media) ReplaceFields(datItem as Media, repDatItem as Media, datItemFields);
- else if (datItem is Part) ReplaceFields(datItem as Part, repDatItem as Part, datItemFields);
- else if (datItem is PartFeature) ReplaceFields(datItem as PartFeature, repDatItem as PartFeature, datItemFields);
- else if (datItem is Port) ReplaceFields(datItem as Port, repDatItem as Port, datItemFields);
- else if (datItem is RamOption) ReplaceFields(datItem as RamOption, repDatItem as RamOption, datItemFields);
- else if (datItem is Release) ReplaceFields(datItem as Release, repDatItem as Release, datItemFields);
- else if (datItem is Rom) ReplaceFields(datItem as Rom, repDatItem as Rom, datItemFields);
- else if (datItem is Setting) ReplaceFields(datItem as Setting, repDatItem as Setting, datItemFields);
- else if (datItem is SharedFeature) ReplaceFields(datItem as SharedFeature, repDatItem as SharedFeature, datItemFields);
- else if (datItem is Slot) ReplaceFields(datItem as Slot, repDatItem as Slot, datItemFields);
- else if (datItem is SlotOption) ReplaceFields(datItem as SlotOption, repDatItem as SlotOption, datItemFields);
- else if (datItem is SoftwareList) ReplaceFields(datItem as SoftwareList, repDatItem as SoftwareList, datItemFields);
- else if (datItem is Sound) ReplaceFields(datItem as Sound, repDatItem as Sound, datItemFields);
-
- #endregion
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Machine to replace fields in
- /// Machine to pull new information from
- /// List of fields representing what should be updated
- /// True if descriptions should only be replaced if the game name is the same, false otherwise
- public static void ReplaceFields(Machine machine, Machine repMachine, List machineFields, bool onlySame)
- {
- #region Common
-
- if (machineFields.Contains(MachineField.Name))
- machine.Name = repMachine.Name;
-
- if (machineFields.Contains(MachineField.Comment))
- machine.Comment = repMachine.Comment;
-
- if (machineFields.Contains(MachineField.Description))
- {
- if (!onlySame || (onlySame && machine.Name == machine.Description))
- machine.Description = repMachine.Description;
- }
-
- if (machineFields.Contains(MachineField.Year))
- machine.Year = repMachine.Year;
-
- if (machineFields.Contains(MachineField.Manufacturer))
- machine.Manufacturer = repMachine.Manufacturer;
-
- if (machineFields.Contains(MachineField.Publisher))
- machine.Publisher = repMachine.Publisher;
-
- if (machineFields.Contains(MachineField.Category))
- machine.Category = repMachine.Category;
-
- if (machineFields.Contains(MachineField.RomOf))
- machine.RomOf = repMachine.RomOf;
-
- if (machineFields.Contains(MachineField.CloneOf))
- machine.CloneOf = repMachine.CloneOf;
-
- if (machineFields.Contains(MachineField.SampleOf))
- machine.SampleOf = repMachine.SampleOf;
-
- if (machineFields.Contains(MachineField.Type))
- machine.MachineType = repMachine.MachineType;
-
- #endregion
-
- #region AttractMode
-
- if (machineFields.Contains(MachineField.Players))
- machine.Players = repMachine.Players;
-
- if (machineFields.Contains(MachineField.Rotation))
- machine.Rotation = repMachine.Rotation;
-
- if (machineFields.Contains(MachineField.Control))
- machine.Control = repMachine.Control;
-
- if (machineFields.Contains(MachineField.Status))
- machine.Status = repMachine.Status;
-
- if (machineFields.Contains(MachineField.DisplayCount))
- machine.DisplayCount = repMachine.DisplayCount;
-
- if (machineFields.Contains(MachineField.DisplayType))
- machine.DisplayType = repMachine.DisplayType;
-
- if (machineFields.Contains(MachineField.Buttons))
- machine.Buttons = repMachine.Buttons;
-
- #endregion
-
- #region ListXML
-
- if (machineFields.Contains(MachineField.History))
- machine.History = repMachine.History;
-
- if (machineFields.Contains(MachineField.SourceFile))
- machine.SourceFile = repMachine.SourceFile;
-
- if (machineFields.Contains(MachineField.Runnable))
- machine.Runnable = repMachine.Runnable;
-
- #endregion
-
- #region Logiqx
-
- if (machineFields.Contains(MachineField.Board))
- machine.Board = repMachine.Board;
-
- if (machineFields.Contains(MachineField.RebuildTo))
- machine.RebuildTo = repMachine.RebuildTo;
-
- #endregion
-
- #region Logiqx EmuArc
-
- if (machineFields.Contains(MachineField.TitleID))
- machine.TitleID = repMachine.TitleID;
-
- if (machineFields.Contains(MachineField.Developer))
- machine.Developer = repMachine.Developer;
-
- if (machineFields.Contains(MachineField.Genre))
- machine.Genre = repMachine.Genre;
-
- if (machineFields.Contains(MachineField.Subgenre))
- machine.Subgenre = repMachine.Subgenre;
-
- if (machineFields.Contains(MachineField.Ratings))
- machine.Ratings = repMachine.Ratings;
-
- if (machineFields.Contains(MachineField.Score))
- machine.Score = repMachine.Score;
-
- if (machineFields.Contains(MachineField.Enabled))
- machine.Enabled = repMachine.Enabled;
-
- if (machineFields.Contains(MachineField.CRC))
- machine.Crc = repMachine.Crc;
-
- if (machineFields.Contains(MachineField.RelatedTo))
- machine.RelatedTo = repMachine.RelatedTo;
-
- #endregion
-
- #region OpenMSX
-
- if (machineFields.Contains(MachineField.GenMSXID))
- machine.GenMSXID = repMachine.GenMSXID;
-
- if (machineFields.Contains(MachineField.System))
- machine.System = repMachine.System;
-
- if (machineFields.Contains(MachineField.Country))
- machine.Country = repMachine.Country;
-
- #endregion
-
- #region SoftwareList
-
- if (machineFields.Contains(MachineField.Supported))
- machine.Supported = repMachine.Supported;
-
- #endregion
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Adjuster to remove replace fields in
- /// Adjuster to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Adjuster adjuster, Adjuster newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Default))
- adjuster.Default = newItem.Default;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Analog to remove replace fields in
- /// Analog to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Analog analog, Analog newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Analog_Mask))
- analog.Mask = newItem.Mask;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// BiosSet to remove replace fields in
- /// BiosSet to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(BiosSet biosSet, BiosSet newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Description))
- biosSet.Description = newItem.Description;
-
- if (datItemFields.Contains(DatItemField.Default))
- biosSet.Default = newItem.Default;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Chip to remove replace fields in
- /// Chip to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Chip chip, Chip newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Tag))
- chip.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.ChipType))
- chip.ChipType = newItem.ChipType;
-
- if (datItemFields.Contains(DatItemField.Clock))
- chip.Clock = newItem.Clock;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Condition to remove replace fields in
- /// Condition to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Condition condition, Condition newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Tag))
- condition.Tag = newItem.Tag;
- else if (datItemFields.Contains(DatItemField.Condition_Tag))
- condition.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.Mask))
- condition.Mask = newItem.Mask;
- else if (datItemFields.Contains(DatItemField.Condition_Mask))
- condition.Mask = newItem.Mask;
-
- if (datItemFields.Contains(DatItemField.Relation))
- condition.Relation = newItem.Relation;
- else if (datItemFields.Contains(DatItemField.Condition_Relation))
- condition.Relation = newItem.Relation;
-
- if (datItemFields.Contains(DatItemField.Value))
- condition.Value = newItem.Value;
- else if (datItemFields.Contains(DatItemField.Condition_Value))
- condition.Value = newItem.Value;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Configuration to remove replace fields in
- /// Configuration to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Configuration configuration, Configuration newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Tag))
- configuration.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.Mask))
- configuration.Mask = newItem.Mask;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
-
- // Location_* doesn't make sense here
- // since not every location under the other item
- // can replace every location under this item
-
- // Setting_* doesn't make sense here
- // since not every setting under the other item
- // can replace every setting under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Control to remove replace fields in
- /// Control to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Control control, Control newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Control_Type))
- control.ControlType = newItem.ControlType;
-
- if (datItemFields.Contains(DatItemField.Control_Player))
- control.Player = newItem.Player;
-
- if (datItemFields.Contains(DatItemField.Control_Buttons))
- control.Buttons = newItem.Buttons;
-
- if (datItemFields.Contains(DatItemField.Control_RequiredButtons))
- control.RequiredButtons = newItem.RequiredButtons;
-
- if (datItemFields.Contains(DatItemField.Control_Minimum))
- control.Minimum = newItem.Minimum;
-
- if (datItemFields.Contains(DatItemField.Control_Maximum))
- control.Maximum = newItem.Maximum;
-
- if (datItemFields.Contains(DatItemField.Control_Sensitivity))
- control.Sensitivity = newItem.Sensitivity;
-
- if (datItemFields.Contains(DatItemField.Control_KeyDelta))
- control.KeyDelta = newItem.KeyDelta;
-
- if (datItemFields.Contains(DatItemField.Control_Reverse))
- control.Reverse = newItem.Reverse;
-
- if (datItemFields.Contains(DatItemField.Control_Ways))
- control.Ways = newItem.Ways;
-
- if (datItemFields.Contains(DatItemField.Control_Ways2))
- control.Ways2 = newItem.Ways2;
-
- if (datItemFields.Contains(DatItemField.Control_Ways3))
- control.Ways3 = newItem.Ways3;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// DataArea to remove replace fields in
- /// DataArea to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(DataArea dataArea, DataArea newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.AreaName))
- dataArea.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.AreaSize))
- dataArea.Size = newItem.Size;
-
- if (datItemFields.Contains(DatItemField.AreaWidth))
- dataArea.Width = newItem.Width;
-
- if (datItemFields.Contains(DatItemField.AreaEndianness))
- dataArea.Endianness = newItem.Endianness;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Device to remove replace fields in
- /// Device to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Device device, Device newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.DeviceType))
- device.DeviceType = newItem.DeviceType;
-
- if (datItemFields.Contains(DatItemField.Tag))
- device.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.FixedImage))
- device.FixedImage = newItem.FixedImage;
-
- if (datItemFields.Contains(DatItemField.Mandatory))
- device.Mandatory = newItem.Mandatory;
-
- if (datItemFields.Contains(DatItemField.Interface))
- device.Interface = newItem.Interface;
-
- // Instance_* doesn't make sense here
- // since not every instance under the other item
- // can replace every instance under this item
-
- // Extension_* doesn't make sense here
- // since not every extension under the other item
- // can replace every extension under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// DipSwitch to remove replace fields in
- /// DipSwitch to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(DipSwitch dipSwitch, DipSwitch newItem, List datItemFields)
- {
- #region Common
-
- if (datItemFields.Contains(DatItemField.Tag))
- dipSwitch.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.Mask))
- dipSwitch.Mask = newItem.Mask;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
-
- // Location_* doesn't make sense here
- // since not every location under the other item
- // can replace every location under this item
-
- // Setting_* doesn't make sense here
- // since not every value under the other item
- // can replace every value under this item
-
- #endregion
-
- #region SoftwareList
-
- if (dipSwitch.PartSpecified && newItem.PartSpecified)
- ReplaceFields(dipSwitch.Part, newItem.Part, datItemFields);
-
- #endregion
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Disk to remove replace fields in
- /// Disk to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Disk disk, Disk newItem, List datItemFields)
- {
- #region Common
-
- if (datItemFields.Contains(DatItemField.MD5))
- {
- if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5))
- disk.MD5 = newItem.MD5;
- }
-
- if (datItemFields.Contains(DatItemField.SHA1))
- {
- if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
- disk.SHA1 = newItem.SHA1;
- }
-
- if (datItemFields.Contains(DatItemField.Merge))
- disk.MergeTag = newItem.MergeTag;
-
- if (datItemFields.Contains(DatItemField.Region))
- disk.Region = newItem.Region;
-
- if (datItemFields.Contains(DatItemField.Index))
- disk.Index = newItem.Index;
-
- if (datItemFields.Contains(DatItemField.Writable))
- disk.Writable = newItem.Writable;
-
- if (datItemFields.Contains(DatItemField.Status))
- disk.ItemStatus = newItem.ItemStatus;
-
- if (datItemFields.Contains(DatItemField.Optional))
- disk.Optional = newItem.Optional;
-
- #endregion
-
- #region SoftwareList
-
- if (disk.DiskAreaSpecified && newItem.DiskAreaSpecified)
- ReplaceFields(disk.DiskArea, newItem.DiskArea, datItemFields);
-
- if (disk.PartSpecified && newItem.PartSpecified)
- ReplaceFields(disk.Part, newItem.Part, datItemFields);
-
- #endregion
- }
-
- ///
- /// Replace fields with given values
- ///
- /// DiskArea to remove replace fields in
- /// DiskArea to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(DiskArea diskArea, DiskArea newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.AreaName))
- diskArea.Name = newItem.Name;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Display to remove replace fields in
- /// Display to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Display display, Display newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Tag))
- display.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.DisplayType))
- display.DisplayType = newItem.DisplayType;
-
- if (datItemFields.Contains(DatItemField.Rotate))
- display.Rotate = newItem.Rotate;
-
- if (datItemFields.Contains(DatItemField.FlipX))
- display.FlipX = newItem.FlipX;
-
- if (datItemFields.Contains(DatItemField.Width))
- display.Width = newItem.Width;
-
- if (datItemFields.Contains(DatItemField.Height))
- display.Height = newItem.Height;
-
- if (datItemFields.Contains(DatItemField.Refresh))
- display.Refresh = newItem.Refresh;
-
- if (datItemFields.Contains(DatItemField.PixClock))
- display.PixClock = newItem.PixClock;
-
- if (datItemFields.Contains(DatItemField.HTotal))
- display.HTotal = newItem.HTotal;
-
- if (datItemFields.Contains(DatItemField.HBEnd))
- display.HBEnd = newItem.HBEnd;
-
- if (datItemFields.Contains(DatItemField.HBStart))
- display.HBStart = newItem.HBStart;
-
- if (datItemFields.Contains(DatItemField.VTotal))
- display.VTotal = newItem.VTotal;
-
- if (datItemFields.Contains(DatItemField.VBEnd))
- display.VBEnd = newItem.VBEnd;
-
- if (datItemFields.Contains(DatItemField.VBStart))
- display.VBStart = newItem.VBStart;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Driver to remove replace fields in
- /// Driver to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Driver driver, Driver newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.SupportStatus))
- driver.Status = newItem.Status;
-
- if (datItemFields.Contains(DatItemField.EmulationStatus))
- driver.Emulation = newItem.Emulation;
-
- if (datItemFields.Contains(DatItemField.CocktailStatus))
- driver.Cocktail = newItem.Cocktail;
-
- if (datItemFields.Contains(DatItemField.SaveStateStatus))
- driver.SaveState = newItem.SaveState;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Extension to remove replace fields in
- /// Extension to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Extension extension, Extension newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Extension_Name))
- extension.Name = newItem.Name;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Feature to remove replace fields in
- /// Feature to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Feature feature, Feature newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.FeatureType))
- feature.Type = newItem.Type;
-
- if (datItemFields.Contains(DatItemField.FeatureStatus))
- feature.Status = newItem.Status;
-
- if (datItemFields.Contains(DatItemField.FeatureOverall))
- feature.Overall = newItem.Overall;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Info to remove replace fields in
- /// Info to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Info info, Info newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Value))
- info.Value = newItem.Value;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Input to remove replace fields in
- /// Input to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Input input, Input newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Service))
- input.Service = newItem.Service;
-
- if (datItemFields.Contains(DatItemField.Tilt))
- input.Tilt = newItem.Tilt;
-
- if (datItemFields.Contains(DatItemField.Players))
- input.Players = newItem.Players;
-
- if (datItemFields.Contains(DatItemField.Coins))
- input.Coins = newItem.Coins;
-
- // Control_* doesn't make sense here
- // since not every control under the other item
- // can replace every control under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Instance to remove replace fields in
- /// Instance to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Instance instance, Instance newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Instance_Name))
- instance.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Instance_BriefName))
- instance.BriefName = newItem.BriefName;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Location to remove replace fields in
- /// Location to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Location location, Location newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Location_Name))
- location.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Location_Number))
- location.Number = newItem.Number;
-
- if (datItemFields.Contains(DatItemField.Location_Inverted))
- location.Inverted = newItem.Inverted;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Media to remove replace fields in
- /// Media to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Media media, Media newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.MD5))
- {
- if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5))
- media.MD5 = newItem.MD5;
- }
-
- if (datItemFields.Contains(DatItemField.SHA1))
- {
- if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
- media.SHA1 = newItem.SHA1;
- }
-
- if (datItemFields.Contains(DatItemField.SHA256))
- {
- if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
- media.SHA256 = newItem.SHA256;
- }
-
- if (datItemFields.Contains(DatItemField.SpamSum))
- {
- if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
- media.SpamSum = newItem.SpamSum;
- }
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Part to remove replace fields in
- /// Part to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Part part, Part newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Part_Name))
- part.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Part_Interface))
- part.Interface = newItem.Interface;
-
- // Part_Feature_* doesn't make sense here
- // since not every part feature under the other item
- // can replace every part feature under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// PartFeature to remove replace fields in
- /// PartFeature to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(PartFeature partFeature, PartFeature newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Part_Feature_Name))
- partFeature.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Part_Feature_Value))
- partFeature.Value = newItem.Value;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Port to remove replace fields in
- /// Port to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Port port, Port newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Tag))
- port.Tag = newItem.Tag;
-
- // Analog_* doesn't make sense here
- // since not every analog under the other item
- // can replace every analog under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// RamOption to remove replace fields in
- /// RamOption to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(RamOption ramOption, RamOption newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Default))
- ramOption.Default = newItem.Default;
-
- if (datItemFields.Contains(DatItemField.Content))
- ramOption.Content = newItem.Content;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Release to remove replace fields in
- /// Release to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Release release, Release newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Region))
- release.Region = newItem.Region;
-
- if (datItemFields.Contains(DatItemField.Language))
- release.Language = newItem.Language;
-
- if (datItemFields.Contains(DatItemField.Date))
- release.Date = newItem.Date;
-
- if (datItemFields.Contains(DatItemField.Default))
- release.Default = newItem.Default;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Rom to remove replace fields in
- /// Rom to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Rom rom, Rom newItem, List datItemFields)
- {
- #region Common
-
- if (datItemFields.Contains(DatItemField.Bios))
- rom.Bios = newItem.Bios;
-
- if (datItemFields.Contains(DatItemField.Size))
- rom.Size = newItem.Size;
-
- if (datItemFields.Contains(DatItemField.CRC))
- {
- if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC))
- rom.CRC = newItem.CRC;
- }
-
- if (datItemFields.Contains(DatItemField.MD5))
- {
- if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5))
- rom.MD5 = newItem.MD5;
- }
-
- if (datItemFields.Contains(DatItemField.SHA1))
- {
- if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
- rom.SHA1 = newItem.SHA1;
- }
-
- if (datItemFields.Contains(DatItemField.SHA256))
- {
- if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
- rom.SHA256 = newItem.SHA256;
- }
-
- if (datItemFields.Contains(DatItemField.SHA384))
- {
- if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
- rom.SHA384 = newItem.SHA384;
- }
-
- if (datItemFields.Contains(DatItemField.SHA512))
- {
- if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
- rom.SHA512 = newItem.SHA512;
- }
-
- if (datItemFields.Contains(DatItemField.SpamSum))
- {
- if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
- rom.SpamSum = newItem.SpamSum;
- }
-
- if (datItemFields.Contains(DatItemField.Merge))
- rom.MergeTag = newItem.MergeTag;
-
- if (datItemFields.Contains(DatItemField.Region))
- rom.Region = newItem.Region;
-
- if (datItemFields.Contains(DatItemField.Offset))
- rom.Offset = newItem.Offset;
-
- if (datItemFields.Contains(DatItemField.Date))
- rom.Date = newItem.Date;
-
- if (datItemFields.Contains(DatItemField.Status))
- rom.ItemStatus = newItem.ItemStatus;
-
- if (datItemFields.Contains(DatItemField.Optional))
- rom.Optional = newItem.Optional;
-
- if (datItemFields.Contains(DatItemField.Inverted))
- rom.Inverted = newItem.Inverted;
-
- #endregion
-
- #region AttractMode
-
- if (datItemFields.Contains(DatItemField.AltName))
- rom.AltName = newItem.AltName;
-
- if (datItemFields.Contains(DatItemField.AltTitle))
- rom.AltTitle = newItem.AltTitle;
-
- #endregion
-
- #region OpenMSX
-
- if (datItemFields.Contains(DatItemField.Original))
- rom.Original = newItem.Original;
-
- if (datItemFields.Contains(DatItemField.OpenMSXSubType))
- rom.OpenMSXSubType = newItem.OpenMSXSubType;
-
- if (datItemFields.Contains(DatItemField.OpenMSXType))
- rom.OpenMSXType = newItem.OpenMSXType;
-
- if (datItemFields.Contains(DatItemField.Remark))
- rom.Remark = newItem.Remark;
-
- if (datItemFields.Contains(DatItemField.Boot))
- rom.Boot = newItem.Boot;
-
- #endregion
-
- #region SoftwareList
-
- if (datItemFields.Contains(DatItemField.LoadFlag))
- rom.LoadFlag = newItem.LoadFlag;
-
- if (datItemFields.Contains(DatItemField.Value))
- rom.Value = newItem.Value;
-
- if (rom.DataAreaSpecified && newItem.DataAreaSpecified)
- ReplaceFields(rom.DataArea, newItem.DataArea, datItemFields);
-
- if (rom.PartSpecified && newItem.PartSpecified)
- ReplaceFields(rom.Part, newItem.Part, datItemFields);
-
- #endregion
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Setting to remove replace fields in
- /// Setting to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Setting setting, Setting newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Setting_Name))
- setting.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Setting_Value))
- setting.Value = newItem.Value;
-
- if (datItemFields.Contains(DatItemField.Setting_Default))
- setting.Default = newItem.Default;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// SharedFeature to remove replace fields in
- /// SharedFeature to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(SharedFeature sharedFeature, SharedFeature newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Value))
- sharedFeature.Value = newItem.Value;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Slot to remove replace fields in
- /// Slot to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Slot slot, Slot newItem, List datItemFields)
- {
- // SlotOption_* doesn't make sense here
- // since not every slot option under the other item
- // can replace every slot option under this item
- }
-
- ///
- /// Replace fields with given values
- ///
- /// SlotOption to remove replace fields in
- /// SlotOption to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(SlotOption slotOption, SlotOption newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.SlotOption_Name))
- slotOption.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.SlotOption_DeviceName))
- slotOption.DeviceName = newItem.DeviceName;
-
- if (datItemFields.Contains(DatItemField.SlotOption_Default))
- slotOption.Default = newItem.Default;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// SoftwareList to remove replace fields in
- /// SoftwareList to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(SoftwareList softwareList, SoftwareList newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.SoftwareListStatus))
- softwareList.Status = newItem.Status;
-
- if (datItemFields.Contains(DatItemField.Filter))
- softwareList.Filter = newItem.Filter;
- }
-
- ///
- /// Replace fields with given values
- ///
- /// Sound to remove replace fields in
- /// Sound to pull new information from
- /// List of fields representing what should be updated
- private static void ReplaceFields(Sound sound, Sound newItem, List datItemFields)
- {
- if (datItemFields.Contains(DatItemField.Channels))
- sound.Channels = newItem.Channels;
- }
-
- #endregion
-
- #region Field Setting
-
///
/// Set fields with given values
///
@@ -2102,21 +1058,5 @@ namespace SabreTools.DatItems
if (datItemMappings.Keys.Contains(DatItemField.Channels))
sound.Channels = Utilities.CleanLong(datItemMappings[DatItemField.Channels]);
}
-
- #endregion
-
- ///
- /// Set internal names to match One Rom Per Game (ORPG) logic
- ///
- /// DatItem to run logic on
- public static void SetOneRomPerGame(DatItem datItem)
- {
- if (datItem.GetName() == null)
- return;
-
- string[] splitname = datItem.GetName().Split('.');
- datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}";
- datItem.SetName(Path.GetFileName(datItem.GetName()));
- }
}
}
\ No newline at end of file
diff --git a/SabreTools.DatTools/DatFileTool.cs b/SabreTools.DatTools/DatFileTool.cs
index 5fc48dfa..1f7aa898 100644
--- a/SabreTools.DatTools/DatFileTool.cs
+++ b/SabreTools.DatTools/DatFileTool.cs
@@ -95,7 +95,7 @@ namespace SabreTools.DatTools
// Replace fields from the first duplicate, if we have one
if (dupes.Count > 0)
- DatItemTool.ReplaceFields(newDatItem, dupes.First(), datItemFields);
+ Replacer.ReplaceFields(newDatItem, dupes.First(), datItemFields);
newDatItems.Add(newDatItem);
}
@@ -122,7 +122,7 @@ namespace SabreTools.DatTools
{
DatItem newDatItem = datItem.Clone() as DatItem;
if (datFile.Items.ContainsKey(key) && datFile.Items[key].Count() > 0)
- DatItemTool.ReplaceFields(newDatItem.Machine, datFile.Items[key][0].Machine, machineFields, onlySame);
+ Replacer.ReplaceFields(newDatItem.Machine, datFile.Items[key][0].Machine, machineFields, onlySame);
newDatItems.Add(newDatItem);
}
diff --git a/SabreTools.DatTools/Replacer.cs b/SabreTools.DatTools/Replacer.cs
new file mode 100644
index 00000000..6d6570eb
--- /dev/null
+++ b/SabreTools.DatTools/Replacer.cs
@@ -0,0 +1,1050 @@
+using System.Collections.Generic;
+
+using SabreTools.Core;
+using SabreTools.DatItems;
+
+namespace SabreTools.DatTools
+{
+ ///
+ /// Replace fields in DatItems
+ ///
+ public static class Replacer
+ {
+ ///
+ /// Replace fields with given values
+ ///
+ /// DatItem to replace fields in
+ /// DatItem to pull new information from
+ /// List of fields representing what should be updated
+ public static void ReplaceFields(DatItem datItem, DatItem repDatItem, List datItemFields)
+ {
+ if (datItem == null || repDatItem == null || datItemFields == null)
+ return;
+
+ #region Common
+
+ if (datItem.ItemType != repDatItem.ItemType)
+ return;
+
+ if (datItemFields.Contains(DatItemField.Name))
+ datItem.SetName(repDatItem.GetName());
+
+ #endregion
+
+ #region Item-Specific
+
+ if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields);
+ else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields);
+ else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields);
+ else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields);
+ else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields);
+ else if (datItem is Configuration) ReplaceFields(datItem as Configuration, repDatItem as Configuration, datItemFields);
+ else if (datItem is Control) ReplaceFields(datItem as Control, repDatItem as Control, datItemFields);
+ else if (datItem is DataArea) ReplaceFields(datItem as DataArea, repDatItem as DataArea, datItemFields);
+ else if (datItem is Device) ReplaceFields(datItem as Device, repDatItem as Device, datItemFields);
+ else if (datItem is DipSwitch) ReplaceFields(datItem as DipSwitch, repDatItem as DipSwitch, datItemFields);
+ else if (datItem is Disk) ReplaceFields(datItem as Disk, repDatItem as Disk, datItemFields);
+ else if (datItem is DiskArea) ReplaceFields(datItem as DiskArea, repDatItem as DiskArea, datItemFields);
+ else if (datItem is Display) ReplaceFields(datItem as Display, repDatItem as Display, datItemFields);
+ else if (datItem is Driver) ReplaceFields(datItem as Driver, repDatItem as Driver, datItemFields);
+ else if (datItem is Extension) ReplaceFields(datItem as Extension, repDatItem as Extension, datItemFields);
+ else if (datItem is Feature) ReplaceFields(datItem as Feature, repDatItem as Feature, datItemFields);
+ else if (datItem is Info) ReplaceFields(datItem as Info, repDatItem as Info, datItemFields);
+ else if (datItem is Input) ReplaceFields(datItem as Input, repDatItem as Input, datItemFields);
+ else if (datItem is Instance) ReplaceFields(datItem as Instance, repDatItem as Instance, datItemFields);
+ else if (datItem is Location) ReplaceFields(datItem as Location, repDatItem as Location, datItemFields);
+ else if (datItem is Media) ReplaceFields(datItem as Media, repDatItem as Media, datItemFields);
+ else if (datItem is Part) ReplaceFields(datItem as Part, repDatItem as Part, datItemFields);
+ else if (datItem is PartFeature) ReplaceFields(datItem as PartFeature, repDatItem as PartFeature, datItemFields);
+ else if (datItem is Port) ReplaceFields(datItem as Port, repDatItem as Port, datItemFields);
+ else if (datItem is RamOption) ReplaceFields(datItem as RamOption, repDatItem as RamOption, datItemFields);
+ else if (datItem is Release) ReplaceFields(datItem as Release, repDatItem as Release, datItemFields);
+ else if (datItem is Rom) ReplaceFields(datItem as Rom, repDatItem as Rom, datItemFields);
+ else if (datItem is Setting) ReplaceFields(datItem as Setting, repDatItem as Setting, datItemFields);
+ else if (datItem is SharedFeature) ReplaceFields(datItem as SharedFeature, repDatItem as SharedFeature, datItemFields);
+ else if (datItem is Slot) ReplaceFields(datItem as Slot, repDatItem as Slot, datItemFields);
+ else if (datItem is SlotOption) ReplaceFields(datItem as SlotOption, repDatItem as SlotOption, datItemFields);
+ else if (datItem is SoftwareList) ReplaceFields(datItem as SoftwareList, repDatItem as SoftwareList, datItemFields);
+ else if (datItem is Sound) ReplaceFields(datItem as Sound, repDatItem as Sound, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Machine to replace fields in
+ /// Machine to pull new information from
+ /// List of fields representing what should be updated
+ /// True if descriptions should only be replaced if the game name is the same, false otherwise
+ public static void ReplaceFields(Machine machine, Machine repMachine, List machineFields, bool onlySame)
+ {
+ #region Common
+
+ if (machineFields.Contains(MachineField.Name))
+ machine.Name = repMachine.Name;
+
+ if (machineFields.Contains(MachineField.Comment))
+ machine.Comment = repMachine.Comment;
+
+ if (machineFields.Contains(MachineField.Description))
+ {
+ if (!onlySame || (onlySame && machine.Name == machine.Description))
+ machine.Description = repMachine.Description;
+ }
+
+ if (machineFields.Contains(MachineField.Year))
+ machine.Year = repMachine.Year;
+
+ if (machineFields.Contains(MachineField.Manufacturer))
+ machine.Manufacturer = repMachine.Manufacturer;
+
+ if (machineFields.Contains(MachineField.Publisher))
+ machine.Publisher = repMachine.Publisher;
+
+ if (machineFields.Contains(MachineField.Category))
+ machine.Category = repMachine.Category;
+
+ if (machineFields.Contains(MachineField.RomOf))
+ machine.RomOf = repMachine.RomOf;
+
+ if (machineFields.Contains(MachineField.CloneOf))
+ machine.CloneOf = repMachine.CloneOf;
+
+ if (machineFields.Contains(MachineField.SampleOf))
+ machine.SampleOf = repMachine.SampleOf;
+
+ if (machineFields.Contains(MachineField.Type))
+ machine.MachineType = repMachine.MachineType;
+
+ #endregion
+
+ #region AttractMode
+
+ if (machineFields.Contains(MachineField.Players))
+ machine.Players = repMachine.Players;
+
+ if (machineFields.Contains(MachineField.Rotation))
+ machine.Rotation = repMachine.Rotation;
+
+ if (machineFields.Contains(MachineField.Control))
+ machine.Control = repMachine.Control;
+
+ if (machineFields.Contains(MachineField.Status))
+ machine.Status = repMachine.Status;
+
+ if (machineFields.Contains(MachineField.DisplayCount))
+ machine.DisplayCount = repMachine.DisplayCount;
+
+ if (machineFields.Contains(MachineField.DisplayType))
+ machine.DisplayType = repMachine.DisplayType;
+
+ if (machineFields.Contains(MachineField.Buttons))
+ machine.Buttons = repMachine.Buttons;
+
+ #endregion
+
+ #region ListXML
+
+ if (machineFields.Contains(MachineField.History))
+ machine.History = repMachine.History;
+
+ if (machineFields.Contains(MachineField.SourceFile))
+ machine.SourceFile = repMachine.SourceFile;
+
+ if (machineFields.Contains(MachineField.Runnable))
+ machine.Runnable = repMachine.Runnable;
+
+ #endregion
+
+ #region Logiqx
+
+ if (machineFields.Contains(MachineField.Board))
+ machine.Board = repMachine.Board;
+
+ if (machineFields.Contains(MachineField.RebuildTo))
+ machine.RebuildTo = repMachine.RebuildTo;
+
+ #endregion
+
+ #region Logiqx EmuArc
+
+ if (machineFields.Contains(MachineField.TitleID))
+ machine.TitleID = repMachine.TitleID;
+
+ if (machineFields.Contains(MachineField.Developer))
+ machine.Developer = repMachine.Developer;
+
+ if (machineFields.Contains(MachineField.Genre))
+ machine.Genre = repMachine.Genre;
+
+ if (machineFields.Contains(MachineField.Subgenre))
+ machine.Subgenre = repMachine.Subgenre;
+
+ if (machineFields.Contains(MachineField.Ratings))
+ machine.Ratings = repMachine.Ratings;
+
+ if (machineFields.Contains(MachineField.Score))
+ machine.Score = repMachine.Score;
+
+ if (machineFields.Contains(MachineField.Enabled))
+ machine.Enabled = repMachine.Enabled;
+
+ if (machineFields.Contains(MachineField.CRC))
+ machine.Crc = repMachine.Crc;
+
+ if (machineFields.Contains(MachineField.RelatedTo))
+ machine.RelatedTo = repMachine.RelatedTo;
+
+ #endregion
+
+ #region OpenMSX
+
+ if (machineFields.Contains(MachineField.GenMSXID))
+ machine.GenMSXID = repMachine.GenMSXID;
+
+ if (machineFields.Contains(MachineField.System))
+ machine.System = repMachine.System;
+
+ if (machineFields.Contains(MachineField.Country))
+ machine.Country = repMachine.Country;
+
+ #endregion
+
+ #region SoftwareList
+
+ if (machineFields.Contains(MachineField.Supported))
+ machine.Supported = repMachine.Supported;
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Adjuster to remove replace fields in
+ /// Adjuster to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Adjuster adjuster, Adjuster newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Default))
+ adjuster.Default = newItem.Default;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Analog to remove replace fields in
+ /// Analog to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Analog analog, Analog newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Analog_Mask))
+ analog.Mask = newItem.Mask;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// BiosSet to remove replace fields in
+ /// BiosSet to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(BiosSet biosSet, BiosSet newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Description))
+ biosSet.Description = newItem.Description;
+
+ if (datItemFields.Contains(DatItemField.Default))
+ biosSet.Default = newItem.Default;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Chip to remove replace fields in
+ /// Chip to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Chip chip, Chip newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ chip.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.ChipType))
+ chip.ChipType = newItem.ChipType;
+
+ if (datItemFields.Contains(DatItemField.Clock))
+ chip.Clock = newItem.Clock;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Condition to remove replace fields in
+ /// Condition to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Condition condition, Condition newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ condition.Tag = newItem.Tag;
+ else if (datItemFields.Contains(DatItemField.Condition_Tag))
+ condition.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.Mask))
+ condition.Mask = newItem.Mask;
+ else if (datItemFields.Contains(DatItemField.Condition_Mask))
+ condition.Mask = newItem.Mask;
+
+ if (datItemFields.Contains(DatItemField.Relation))
+ condition.Relation = newItem.Relation;
+ else if (datItemFields.Contains(DatItemField.Condition_Relation))
+ condition.Relation = newItem.Relation;
+
+ if (datItemFields.Contains(DatItemField.Value))
+ condition.Value = newItem.Value;
+ else if (datItemFields.Contains(DatItemField.Condition_Value))
+ condition.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Configuration to remove replace fields in
+ /// Configuration to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Configuration configuration, Configuration newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ configuration.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.Mask))
+ configuration.Mask = newItem.Mask;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+
+ // Location_* doesn't make sense here
+ // since not every location under the other item
+ // can replace every location under this item
+
+ // Setting_* doesn't make sense here
+ // since not every setting under the other item
+ // can replace every setting under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Control to remove replace fields in
+ /// Control to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Control control, Control newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Control_Type))
+ control.ControlType = newItem.ControlType;
+
+ if (datItemFields.Contains(DatItemField.Control_Player))
+ control.Player = newItem.Player;
+
+ if (datItemFields.Contains(DatItemField.Control_Buttons))
+ control.Buttons = newItem.Buttons;
+
+ if (datItemFields.Contains(DatItemField.Control_RequiredButtons))
+ control.RequiredButtons = newItem.RequiredButtons;
+
+ if (datItemFields.Contains(DatItemField.Control_Minimum))
+ control.Minimum = newItem.Minimum;
+
+ if (datItemFields.Contains(DatItemField.Control_Maximum))
+ control.Maximum = newItem.Maximum;
+
+ if (datItemFields.Contains(DatItemField.Control_Sensitivity))
+ control.Sensitivity = newItem.Sensitivity;
+
+ if (datItemFields.Contains(DatItemField.Control_KeyDelta))
+ control.KeyDelta = newItem.KeyDelta;
+
+ if (datItemFields.Contains(DatItemField.Control_Reverse))
+ control.Reverse = newItem.Reverse;
+
+ if (datItemFields.Contains(DatItemField.Control_Ways))
+ control.Ways = newItem.Ways;
+
+ if (datItemFields.Contains(DatItemField.Control_Ways2))
+ control.Ways2 = newItem.Ways2;
+
+ if (datItemFields.Contains(DatItemField.Control_Ways3))
+ control.Ways3 = newItem.Ways3;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// DataArea to remove replace fields in
+ /// DataArea to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(DataArea dataArea, DataArea newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.AreaName))
+ dataArea.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.AreaSize))
+ dataArea.Size = newItem.Size;
+
+ if (datItemFields.Contains(DatItemField.AreaWidth))
+ dataArea.Width = newItem.Width;
+
+ if (datItemFields.Contains(DatItemField.AreaEndianness))
+ dataArea.Endianness = newItem.Endianness;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Device to remove replace fields in
+ /// Device to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Device device, Device newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.DeviceType))
+ device.DeviceType = newItem.DeviceType;
+
+ if (datItemFields.Contains(DatItemField.Tag))
+ device.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.FixedImage))
+ device.FixedImage = newItem.FixedImage;
+
+ if (datItemFields.Contains(DatItemField.Mandatory))
+ device.Mandatory = newItem.Mandatory;
+
+ if (datItemFields.Contains(DatItemField.Interface))
+ device.Interface = newItem.Interface;
+
+ // Instance_* doesn't make sense here
+ // since not every instance under the other item
+ // can replace every instance under this item
+
+ // Extension_* doesn't make sense here
+ // since not every extension under the other item
+ // can replace every extension under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// DipSwitch to remove replace fields in
+ /// DipSwitch to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(DipSwitch dipSwitch, DipSwitch newItem, List datItemFields)
+ {
+ #region Common
+
+ if (datItemFields.Contains(DatItemField.Tag))
+ dipSwitch.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.Mask))
+ dipSwitch.Mask = newItem.Mask;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+
+ // Location_* doesn't make sense here
+ // since not every location under the other item
+ // can replace every location under this item
+
+ // Setting_* doesn't make sense here
+ // since not every value under the other item
+ // can replace every value under this item
+
+ #endregion
+
+ #region SoftwareList
+
+ if (dipSwitch.PartSpecified && newItem.PartSpecified)
+ ReplaceFields(dipSwitch.Part, newItem.Part, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Disk to remove replace fields in
+ /// Disk to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Disk disk, Disk newItem, List datItemFields)
+ {
+ #region Common
+
+ if (datItemFields.Contains(DatItemField.MD5))
+ {
+ if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5))
+ disk.MD5 = newItem.MD5;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA1))
+ {
+ if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
+ disk.SHA1 = newItem.SHA1;
+ }
+
+ if (datItemFields.Contains(DatItemField.Merge))
+ disk.MergeTag = newItem.MergeTag;
+
+ if (datItemFields.Contains(DatItemField.Region))
+ disk.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Index))
+ disk.Index = newItem.Index;
+
+ if (datItemFields.Contains(DatItemField.Writable))
+ disk.Writable = newItem.Writable;
+
+ if (datItemFields.Contains(DatItemField.Status))
+ disk.ItemStatus = newItem.ItemStatus;
+
+ if (datItemFields.Contains(DatItemField.Optional))
+ disk.Optional = newItem.Optional;
+
+ #endregion
+
+ #region SoftwareList
+
+ if (disk.DiskAreaSpecified && newItem.DiskAreaSpecified)
+ ReplaceFields(disk.DiskArea, newItem.DiskArea, datItemFields);
+
+ if (disk.PartSpecified && newItem.PartSpecified)
+ ReplaceFields(disk.Part, newItem.Part, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// DiskArea to remove replace fields in
+ /// DiskArea to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(DiskArea diskArea, DiskArea newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.AreaName))
+ diskArea.Name = newItem.Name;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Display to remove replace fields in
+ /// Display to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Display display, Display newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ display.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.DisplayType))
+ display.DisplayType = newItem.DisplayType;
+
+ if (datItemFields.Contains(DatItemField.Rotate))
+ display.Rotate = newItem.Rotate;
+
+ if (datItemFields.Contains(DatItemField.FlipX))
+ display.FlipX = newItem.FlipX;
+
+ if (datItemFields.Contains(DatItemField.Width))
+ display.Width = newItem.Width;
+
+ if (datItemFields.Contains(DatItemField.Height))
+ display.Height = newItem.Height;
+
+ if (datItemFields.Contains(DatItemField.Refresh))
+ display.Refresh = newItem.Refresh;
+
+ if (datItemFields.Contains(DatItemField.PixClock))
+ display.PixClock = newItem.PixClock;
+
+ if (datItemFields.Contains(DatItemField.HTotal))
+ display.HTotal = newItem.HTotal;
+
+ if (datItemFields.Contains(DatItemField.HBEnd))
+ display.HBEnd = newItem.HBEnd;
+
+ if (datItemFields.Contains(DatItemField.HBStart))
+ display.HBStart = newItem.HBStart;
+
+ if (datItemFields.Contains(DatItemField.VTotal))
+ display.VTotal = newItem.VTotal;
+
+ if (datItemFields.Contains(DatItemField.VBEnd))
+ display.VBEnd = newItem.VBEnd;
+
+ if (datItemFields.Contains(DatItemField.VBStart))
+ display.VBStart = newItem.VBStart;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Driver to remove replace fields in
+ /// Driver to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Driver driver, Driver newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.SupportStatus))
+ driver.Status = newItem.Status;
+
+ if (datItemFields.Contains(DatItemField.EmulationStatus))
+ driver.Emulation = newItem.Emulation;
+
+ if (datItemFields.Contains(DatItemField.CocktailStatus))
+ driver.Cocktail = newItem.Cocktail;
+
+ if (datItemFields.Contains(DatItemField.SaveStateStatus))
+ driver.SaveState = newItem.SaveState;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Extension to remove replace fields in
+ /// Extension to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Extension extension, Extension newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Extension_Name))
+ extension.Name = newItem.Name;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Feature to remove replace fields in
+ /// Feature to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Feature feature, Feature newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.FeatureType))
+ feature.Type = newItem.Type;
+
+ if (datItemFields.Contains(DatItemField.FeatureStatus))
+ feature.Status = newItem.Status;
+
+ if (datItemFields.Contains(DatItemField.FeatureOverall))
+ feature.Overall = newItem.Overall;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Info to remove replace fields in
+ /// Info to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Info info, Info newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Value))
+ info.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Input to remove replace fields in
+ /// Input to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Input input, Input newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Service))
+ input.Service = newItem.Service;
+
+ if (datItemFields.Contains(DatItemField.Tilt))
+ input.Tilt = newItem.Tilt;
+
+ if (datItemFields.Contains(DatItemField.Players))
+ input.Players = newItem.Players;
+
+ if (datItemFields.Contains(DatItemField.Coins))
+ input.Coins = newItem.Coins;
+
+ // Control_* doesn't make sense here
+ // since not every control under the other item
+ // can replace every control under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Instance to remove replace fields in
+ /// Instance to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Instance instance, Instance newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Instance_Name))
+ instance.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Instance_BriefName))
+ instance.BriefName = newItem.BriefName;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Location to remove replace fields in
+ /// Location to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Location location, Location newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Location_Name))
+ location.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Location_Number))
+ location.Number = newItem.Number;
+
+ if (datItemFields.Contains(DatItemField.Location_Inverted))
+ location.Inverted = newItem.Inverted;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Media to remove replace fields in
+ /// Media to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Media media, Media newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.MD5))
+ {
+ if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5))
+ media.MD5 = newItem.MD5;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA1))
+ {
+ if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
+ media.SHA1 = newItem.SHA1;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA256))
+ {
+ if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
+ media.SHA256 = newItem.SHA256;
+ }
+
+ if (datItemFields.Contains(DatItemField.SpamSum))
+ {
+ if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
+ media.SpamSum = newItem.SpamSum;
+ }
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Part to remove replace fields in
+ /// Part to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Part part, Part newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Part_Name))
+ part.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Part_Interface))
+ part.Interface = newItem.Interface;
+
+ // Part_Feature_* doesn't make sense here
+ // since not every part feature under the other item
+ // can replace every part feature under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// PartFeature to remove replace fields in
+ /// PartFeature to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(PartFeature partFeature, PartFeature newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Part_Feature_Name))
+ partFeature.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Part_Feature_Value))
+ partFeature.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Port to remove replace fields in
+ /// Port to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Port port, Port newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ port.Tag = newItem.Tag;
+
+ // Analog_* doesn't make sense here
+ // since not every analog under the other item
+ // can replace every analog under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// RamOption to remove replace fields in
+ /// RamOption to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(RamOption ramOption, RamOption newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Default))
+ ramOption.Default = newItem.Default;
+
+ if (datItemFields.Contains(DatItemField.Content))
+ ramOption.Content = newItem.Content;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Release to remove replace fields in
+ /// Release to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Release release, Release newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Region))
+ release.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Language))
+ release.Language = newItem.Language;
+
+ if (datItemFields.Contains(DatItemField.Date))
+ release.Date = newItem.Date;
+
+ if (datItemFields.Contains(DatItemField.Default))
+ release.Default = newItem.Default;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Rom to remove replace fields in
+ /// Rom to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Rom rom, Rom newItem, List datItemFields)
+ {
+ #region Common
+
+ if (datItemFields.Contains(DatItemField.Bios))
+ rom.Bios = newItem.Bios;
+
+ if (datItemFields.Contains(DatItemField.Size))
+ rom.Size = newItem.Size;
+
+ if (datItemFields.Contains(DatItemField.CRC))
+ {
+ if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC))
+ rom.CRC = newItem.CRC;
+ }
+
+ if (datItemFields.Contains(DatItemField.MD5))
+ {
+ if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5))
+ rom.MD5 = newItem.MD5;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA1))
+ {
+ if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
+ rom.SHA1 = newItem.SHA1;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA256))
+ {
+ if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
+ rom.SHA256 = newItem.SHA256;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA384))
+ {
+ if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
+ rom.SHA384 = newItem.SHA384;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA512))
+ {
+ if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
+ rom.SHA512 = newItem.SHA512;
+ }
+
+ if (datItemFields.Contains(DatItemField.SpamSum))
+ {
+ if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
+ rom.SpamSum = newItem.SpamSum;
+ }
+
+ if (datItemFields.Contains(DatItemField.Merge))
+ rom.MergeTag = newItem.MergeTag;
+
+ if (datItemFields.Contains(DatItemField.Region))
+ rom.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Offset))
+ rom.Offset = newItem.Offset;
+
+ if (datItemFields.Contains(DatItemField.Date))
+ rom.Date = newItem.Date;
+
+ if (datItemFields.Contains(DatItemField.Status))
+ rom.ItemStatus = newItem.ItemStatus;
+
+ if (datItemFields.Contains(DatItemField.Optional))
+ rom.Optional = newItem.Optional;
+
+ if (datItemFields.Contains(DatItemField.Inverted))
+ rom.Inverted = newItem.Inverted;
+
+ #endregion
+
+ #region AttractMode
+
+ if (datItemFields.Contains(DatItemField.AltName))
+ rom.AltName = newItem.AltName;
+
+ if (datItemFields.Contains(DatItemField.AltTitle))
+ rom.AltTitle = newItem.AltTitle;
+
+ #endregion
+
+ #region OpenMSX
+
+ if (datItemFields.Contains(DatItemField.Original))
+ rom.Original = newItem.Original;
+
+ if (datItemFields.Contains(DatItemField.OpenMSXSubType))
+ rom.OpenMSXSubType = newItem.OpenMSXSubType;
+
+ if (datItemFields.Contains(DatItemField.OpenMSXType))
+ rom.OpenMSXType = newItem.OpenMSXType;
+
+ if (datItemFields.Contains(DatItemField.Remark))
+ rom.Remark = newItem.Remark;
+
+ if (datItemFields.Contains(DatItemField.Boot))
+ rom.Boot = newItem.Boot;
+
+ #endregion
+
+ #region SoftwareList
+
+ if (datItemFields.Contains(DatItemField.LoadFlag))
+ rom.LoadFlag = newItem.LoadFlag;
+
+ if (datItemFields.Contains(DatItemField.Value))
+ rom.Value = newItem.Value;
+
+ if (rom.DataAreaSpecified && newItem.DataAreaSpecified)
+ ReplaceFields(rom.DataArea, newItem.DataArea, datItemFields);
+
+ if (rom.PartSpecified && newItem.PartSpecified)
+ ReplaceFields(rom.Part, newItem.Part, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Setting to remove replace fields in
+ /// Setting to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Setting setting, Setting newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Setting_Name))
+ setting.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Setting_Value))
+ setting.Value = newItem.Value;
+
+ if (datItemFields.Contains(DatItemField.Setting_Default))
+ setting.Default = newItem.Default;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// SharedFeature to remove replace fields in
+ /// SharedFeature to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(SharedFeature sharedFeature, SharedFeature newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Value))
+ sharedFeature.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Slot to remove replace fields in
+ /// Slot to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Slot slot, Slot newItem, List datItemFields)
+ {
+ // SlotOption_* doesn't make sense here
+ // since not every slot option under the other item
+ // can replace every slot option under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// SlotOption to remove replace fields in
+ /// SlotOption to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(SlotOption slotOption, SlotOption newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.SlotOption_Name))
+ slotOption.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.SlotOption_DeviceName))
+ slotOption.DeviceName = newItem.DeviceName;
+
+ if (datItemFields.Contains(DatItemField.SlotOption_Default))
+ slotOption.Default = newItem.Default;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// SoftwareList to remove replace fields in
+ /// SoftwareList to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(SoftwareList softwareList, SoftwareList newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.SoftwareListStatus))
+ softwareList.Status = newItem.Status;
+
+ if (datItemFields.Contains(DatItemField.Filter))
+ softwareList.Filter = newItem.Filter;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Sound to remove replace fields in
+ /// Sound to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Sound sound, Sound newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Channels))
+ sound.Channels = newItem.Channels;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs
index f182ffca..dbca758d 100644
--- a/SabreTools.Filtering/Cleaner.cs
+++ b/SabreTools.Filtering/Cleaner.cs
@@ -540,11 +540,25 @@ namespace SabreTools.Filtering
List items = datFile.Items[key];
for (int i = 0; i < items.Count; i++)
{
- DatItemTool.SetOneRomPerGame(items[i]);
+ SetOneRomPerGame(items[i]);
}
});
}
+ ///
+ /// Set internal names to match One Rom Per Game (ORPG) logic
+ ///
+ /// DatItem to run logic on
+ internal void SetOneRomPerGame(DatItem datItem)
+ {
+ if (datItem.GetName() == null)
+ return;
+
+ string[] splitname = datItem.GetName().Split('.');
+ datItem.Machine.Name += $"/{string.Join(".", splitname.Take(splitname.Length > 1 ? splitname.Length - 1 : 1))}";
+ datItem.SetName(Path.GetFileName(datItem.GetName()));
+ }
+
///
/// Strip the dates from the beginning of scene-style set names
///
diff --git a/SabreTools.Filtering/Filter.cs b/SabreTools.Filtering/Filter.cs
index 1b73d4ab..9adf52c8 100644
--- a/SabreTools.Filtering/Filter.cs
+++ b/SabreTools.Filtering/Filter.cs
@@ -396,7 +396,7 @@ namespace SabreTools.Filtering
continue;
// If the rom doesn't pass the filter, mark for removal
- if (!PassesFilters(item))
+ if (!PassesAllFilters(item))
{
item.Remove = true;
@@ -436,7 +436,7 @@ namespace SabreTools.Filtering
///
/// DatItem to check
/// True if the item passed the filter, false otherwise
- internal bool PassesFilters(DatItem datItem)
+ internal bool PassesAllFilters(DatItem datItem)
{
// Null item means it will never pass
if (datItem == null)
diff --git a/SabreTools.Test/DatItems/DatItemToolTests.cs b/SabreTools.Test/DatItems/DatItemToolTests.cs
index cc0cf8b0..10ac93d2 100644
--- a/SabreTools.Test/DatItems/DatItemToolTests.cs
+++ b/SabreTools.Test/DatItems/DatItemToolTests.cs
@@ -8,28 +8,6 @@ namespace SabreTools.Test.DatItems
{
public class DatItemToolTests
{
- [Fact]
- public void ReplaceFieldsDatItemTest()
- {
- var datItem = CreateDatItem();
- var repDatItem = CreateDatItem();
- repDatItem.SetName("bar");
- var fields = new List { DatItemField.Name };
- DatItemTool.ReplaceFields(datItem, repDatItem, fields);
- Assert.Equal("bar", datItem.GetName());
- }
-
- [Fact]
- public void ReplaceFieldsMachineTest()
- {
- var datItem = CreateDatItem();
- var repDatItem = CreateDatItem();
- repDatItem.Machine.Name = "foo";
- var fields = new List { MachineField.Name };
- DatItemTool.ReplaceFields(datItem.Machine, repDatItem.Machine, fields, false);
- Assert.Equal("foo", datItem.Machine.Name);
- }
-
[Fact]
public void SetFieldsDatItemTest()
{
@@ -48,16 +26,6 @@ namespace SabreTools.Test.DatItems
Assert.Equal("foo", datItem.Machine.Name);
}
- [Fact]
- public void SetOneRomPerGameTest()
- {
- var datItem = CreateDatItem();
- datItem.SetName("foo.bin");
- DatItemTool.SetOneRomPerGame(datItem);
- Assert.Equal("foo.bin", datItem.GetName());
- Assert.Equal("bar/foo", datItem.Machine.Name);
- }
-
///
/// Generate a consistent DatItem for testing
///
diff --git a/SabreTools.Test/DatTools/ReplacerTests.cs b/SabreTools.Test/DatTools/ReplacerTests.cs
new file mode 100644
index 00000000..30e0f449
--- /dev/null
+++ b/SabreTools.Test/DatTools/ReplacerTests.cs
@@ -0,0 +1,50 @@
+using System.Collections.Generic;
+
+using SabreTools.Core;
+using SabreTools.DatItems;
+using SabreTools.DatTools;
+using Xunit;
+
+namespace SabreTools.Test.DatTools
+{
+ public class ReplacerTests
+ {
+ [Fact]
+ public void ReplaceFieldsDatItemTest()
+ {
+ var datItem = CreateDatItem();
+ var repDatItem = CreateDatItem();
+ repDatItem.SetName("bar");
+ var fields = new List { DatItemField.Name };
+ Replacer.ReplaceFields(datItem, repDatItem, fields);
+ Assert.Equal("bar", datItem.GetName());
+ }
+
+ [Fact]
+ public void ReplaceFieldsMachineTest()
+ {
+ var datItem = CreateDatItem();
+ var repDatItem = CreateDatItem();
+ repDatItem.Machine.Name = "foo";
+ var fields = new List { MachineField.Name };
+ Replacer.ReplaceFields(datItem.Machine, repDatItem.Machine, fields, false);
+ Assert.Equal("foo", datItem.Machine.Name);
+ }
+
+ ///
+ /// Generate a consistent DatItem for testing
+ ///
+ private DatItem CreateDatItem()
+ {
+ return new Rom
+ {
+ Name = "foo",
+ Machine = new Machine
+ {
+ Name = "bar",
+ Description = "bar",
+ }
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Test/Filtering/CleaningTests.cs b/SabreTools.Test/Filtering/CleaningTests.cs
index 174162e0..ebf0fae3 100644
--- a/SabreTools.Test/Filtering/CleaningTests.cs
+++ b/SabreTools.Test/Filtering/CleaningTests.cs
@@ -95,6 +95,26 @@ namespace SabreTools.Test.Filtering
Assert.Equal("name-3", datItem.Machine.Description);
}
+ [Fact]
+ public void SetOneRomPerGameTest()
+ {
+ // Setup cleaner
+ var cleaner = new Cleaner
+ {
+ OneRomPerGame = true,
+ };
+
+ // Setup DatItem
+ var datItem = CreateDatItem("name", "name-2", "name-3");
+
+ // Run cleaning
+ cleaner.SetOneRomPerGame(datItem);
+
+ // Check the fields
+ Assert.Equal("name", datItem.GetName());
+ Assert.Equal("name-2/name", datItem.Machine.Name);
+ }
+
///
/// Generate a consistent DatItem for testing
///
diff --git a/SabreTools.Test/Filtering/FilteringTests.cs b/SabreTools.Test/Filtering/FilteringTests.cs
index 6bf5e48a..e348348f 100644
--- a/SabreTools.Test/Filtering/FilteringTests.cs
+++ b/SabreTools.Test/Filtering/FilteringTests.cs
@@ -19,7 +19,7 @@ namespace SabreTools.Test.Filtering
var datItem = CreateDatItem();
// Run filters
- bool actual = filter.PassesFilters(datItem);
+ bool actual = filter.PassesAllFilters(datItem);
Assert.True(actual);
}
@@ -34,7 +34,7 @@ namespace SabreTools.Test.Filtering
var datItem = CreateDatItem();
// Run filters
- bool actual = filter.PassesFilters(datItem);
+ bool actual = filter.PassesAllFilters(datItem);
Assert.False(actual);
}
@@ -49,7 +49,7 @@ namespace SabreTools.Test.Filtering
var datItem = CreateDatItem();
// Run filters
- bool actual = filter.PassesFilters(datItem);
+ bool actual = filter.PassesAllFilters(datItem);
Assert.True(actual);
}
@@ -64,7 +64,7 @@ namespace SabreTools.Test.Filtering
var datItem = CreateDatItem();
// Run filters
- bool actual = filter.PassesFilters(datItem);
+ bool actual = filter.PassesAllFilters(datItem);
Assert.False(actual);
}