diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs index eecdd768..cd6c6d67 100644 --- a/SabreTools.Library/DatFiles/DatFile.cs +++ b/SabreTools.Library/DatFiles/DatFile.cs @@ -1796,8 +1796,8 @@ namespace SabreTools.Library.DatFiles intDat.Parse(path, 1, 1, keep: true, clean: clean, remUnicode: remUnicode, descAsName: descAsName); // If we are matching based on hashes of any sort - if ((replaceMode & ReplaceMode.Names) != 0 - || (replaceMode & ReplaceMode.Hashes) != 0) + if ((replaceMode & ReplaceMode.ItemName) != 0 + || (replaceMode & ReplaceMode.Hash) != 0) { // For comparison's sake, we want to use CRC as the base ordering BucketBy(SortedBy.CRC, DedupeType.Full); @@ -1824,13 +1824,13 @@ namespace SabreTools.Library.DatFiles if (dupes.Count > 0) { // If we're updating names, replace using the first found name - if ((replaceMode & ReplaceMode.Names) != 0) + if ((replaceMode & ReplaceMode.ItemName) != 0) { newDatItem.Name = dupes[0].Name; } // If we're updating hashes, only replace if the current item doesn't have them - if ((replaceMode & ReplaceMode.Hashes) != 0) + if ((replaceMode & ReplaceMode.Hash) != 0) { if (newDatItem.Type == ItemType.Rom) { @@ -1901,7 +1901,9 @@ namespace SabreTools.Library.DatFiles } // If we are matching based on names of any sort - if ((replaceMode & ReplaceMode.Descriptions) != 0) + if ((replaceMode & ReplaceMode.Description) != 0 + || (replaceMode & ReplaceMode.Year) != 0 + || (replaceMode & ReplaceMode.Manufacturer) != 0) { // For comparison's sake, we want to use Machine Name as the base ordering BucketBy(SortedBy.Game, DedupeType.Full); @@ -1918,7 +1920,18 @@ namespace SabreTools.Library.DatFiles DatItem newDatItem = (DatItem)datItem.Clone(); if (Contains(key) && this[key].Count() > 0) { - newDatItem.MachineDescription = this[key][0].MachineDescription; + if ((replaceMode & ReplaceMode.Description) != 0) + { + newDatItem.MachineDescription = this[key][0].MachineDescription; + } + if ((replaceMode & ReplaceMode.Year) != 0) + { + newDatItem.Year = this[key][0].Year; + } + if ((replaceMode & ReplaceMode.Manufacturer) != 0) + { + newDatItem.Manufacturer = this[key][0].Manufacturer; + } } newDatItems.Add(newDatItem); diff --git a/SabreTools.Library/Data/Flags.cs b/SabreTools.Library/Data/Flags.cs index 02f3131f..1b06e652 100644 --- a/SabreTools.Library/Data/Flags.cs +++ b/SabreTools.Library/Data/Flags.cs @@ -249,9 +249,15 @@ namespace SabreTools.Library.Data public enum ReplaceMode { None = 0x0, - Names = 0x1, - Hashes = Names << 1, - Descriptions = Hashes << 1, + + // Sorted by hash + ItemName = 0x1, + Hash = ItemName << 1, + + // Sorted by machine name + Description = Hash << 1, + Year = Description << 1, + Manufacturer = Year << 1, } /// diff --git a/SabreTools.Library/README.1ST b/SabreTools.Library/README.1ST index 69bf0ebd..31443600 100644 --- a/SabreTools.Library/README.1ST +++ b/SabreTools.Library/README.1ST @@ -1159,12 +1159,20 @@ Options: -un, --update-names Update item names from base DATs This flag enables updating of item names from base DATs. + -uh, --update-hashes Update hashes from base DATs + This flag enables updating of hashes from base DATs. + -udd, --update-desc Update machine descriptions from base DATs This flag enables updating of machine descriptions from base DATs - - -uh, --update-hashes Update hashes from base DATs - This flag enables updating of hashes from base DATs. + + -udd, --update-years Update machine years from base DATs + This flag enables updating of machine years from base + DATs + + -udd, --update-manu Update machine manufacturers from base DATs + This flag enables updating of machine manufacturers from base + DATs -gn=, --not-game= Filter by game name -ngn=, --game-name= Exclude by game name diff --git a/SabreTools/SabreTools.Help.cs b/SabreTools/SabreTools.Help.cs index 9f61453a..d02a2f5c 100644 --- a/SabreTools/SabreTools.Help.cs +++ b/SabreTools/SabreTools.Help.cs @@ -1275,14 +1275,24 @@ namespace SabreTools "Update item names from base DATs", FeatureType.Flag, null)); + update["base-replace"].AddFeature("update-hashes", new Feature( + new List() { "-uh", "--update-hashes" }, + "Update hashes from base DATs", + FeatureType.Flag, + null)); update["base-replace"].AddFeature("update-desc", new Feature( new List() { "-udd", "--update-desc" }, "Update machine descriptions from base DATs", FeatureType.Flag, null)); - update["base-replace"].AddFeature("update-hashes", new Feature( - new List() { "-uh", "--update-hashes" }, - "Update hashes from base DATs", + update["base-replace"].AddFeature("update-year", new Feature( + new List() { "-uy", "--update-year" }, + "Update machine years from base DATs", + FeatureType.Flag, + null)); + update["base-replace"].AddFeature("update-manu", new Feature( + new List() { "-um", "--update-manu" }, + "Update machine manufacturers from base DATs", FeatureType.Flag, null)); update.AddFeature("reverse-base-replace", new Feature( @@ -1297,7 +1307,7 @@ namespace SabreTools null)); update["reverse-base-replace"].AddFeature("update-names", new Feature( new List() { "-un", "--update-names" }, - "Update names from base DATs", + "Update item names from base DATs", FeatureType.Flag, null)); update["reverse-base-replace"].AddFeature("update-hashes", new Feature( @@ -1305,6 +1315,21 @@ namespace SabreTools "Update hashes from base DATs", FeatureType.Flag, null)); + update["reverse-base-replace"].AddFeature("update-desc", new Feature( + new List() { "-udd", "--update-desc" }, + "Update machine descriptions from base DATs", + FeatureType.Flag, + null)); + update["reverse-base-replace"].AddFeature("update-years", new Feature( + new List() { "-uy", "--update-years" }, + "Update machine years from base DATs", + FeatureType.Flag, + null)); + update["reverse-base-replace"].AddFeature("update-manu", new Feature( + new List() { "-um", "--update-manu" }, + "Update machine manufacturers from base DATs", + FeatureType.Flag, + null)); update.AddFeature("game-name", new Feature( new List() { "-gn", "--game-name" }, "Filter by game name", diff --git a/SabreTools/SabreTools.Inits.cs b/SabreTools/SabreTools.Inits.cs index 5549b505..50dcb60f 100644 --- a/SabreTools/SabreTools.Inits.cs +++ b/SabreTools/SabreTools.Inits.cs @@ -303,7 +303,7 @@ namespace SabreTools // If no replacement mode is set, default to Names if (replaceMode == ReplaceMode.None) { - replaceMode = ReplaceMode.Names; + replaceMode = ReplaceMode.ItemName; } // Populate the DatData object diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index 7b391b46..3ed97d7c 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -254,6 +254,9 @@ namespace SabreTools case "dat-split": splitType = SplitType.Split; break; + case "exclude-of": + datHeader.ExcludeOf = true; + break; case "ext": splittingMode |= SplittingMode.Extension; break; @@ -489,16 +492,19 @@ namespace SabreTools updateDat = true; break; case "update-desc": - replaceMode |= ReplaceMode.Descriptions; + replaceMode |= ReplaceMode.Description; break; case "update-hashes": - replaceMode |= ReplaceMode.Hashes; + replaceMode |= ReplaceMode.Hash; + break; + case "update-manu": + replaceMode |= ReplaceMode.Manufacturer; break; case "update-names": - replaceMode |= ReplaceMode.Names; + replaceMode |= ReplaceMode.ItemName; break; - case "exclude-of": - datHeader.ExcludeOf = true; + case "update-years": + replaceMode |= ReplaceMode.Year; break; // User inputs