diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs
index 207a1604..dfc2d643 100644
--- a/SabreTools.Library/DatFiles/DatFile.cs
+++ b/SabreTools.Library/DatFiles/DatFile.cs
@@ -1563,7 +1563,6 @@ namespace SabreTools.Library.DatFiles
/// Names of the input files and/or folders
/// Names of base files and/or folders
/// Optional param for output directory
- /// True if input files should be merged into a single file, false otherwise
/// Non-zero flag for diffing mode, zero otherwise
/// True if the output files should overwrite their inputs, false otherwise
/// True if the first cascaded diff file should be skipped on output, false otherwise
@@ -1576,64 +1575,62 @@ namespace SabreTools.Library.DatFiles
/// True if we are supposed to trim names to NTFS length, false otherwise
/// True if all games should be replaced by '!', false otherwise
/// String representing root directory to compare against for length calculation
- public void DetermineUpdateType(List inputPaths, List basePaths, string outDir, bool merge, UpdateMode updateMode, bool inplace, bool skip,
+ public void DetermineUpdateType(List inputPaths, List basePaths, string outDir, UpdateMode updateMode, bool inplace, bool skip,
bool bare, bool clean, bool remUnicode, bool descAsName, Filter filter, SplitType splitType, bool trim, bool single, string root)
{
- // If we're in merging or diffing mode, use the full list of inputs
- if (merge || (updateMode != UpdateMode.None
- && (updateMode & UpdateMode.DiffAgainst) == 0)
- && (updateMode & UpdateMode.BaseReplace) == 0
- && (updateMode & UpdateMode.ReverseBaseReplace) == 0)
+ // If we're in standard update mode, run through all of the inputs
+ if (updateMode == UpdateMode.None)
+ {
+ Update(inputPaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root);
+ }
+ // Otherwise, we're in one of the special modes
+ else
{
// Make sure there are no folders in inputs
List newInputFileNames = Utilities.GetOnlyFilesFromInputs(inputPaths, appendparent: true);
- // Reverse if we have to
+ // Reverse if we're in a required mode
if ((updateMode & UpdateMode.DiffReverseCascade) != 0)
{
newInputFileNames.Reverse();
}
- // Create a dictionary of all ROMs from the input DATs
+ // Populate the combined data and get the headers
List datHeaders = PopulateUserData(newInputFileNames, inplace, clean,
- remUnicode, descAsName, outDir, filter, splitType, trim, single, root);
+ remUnicode, descAsName, outDir, filter, splitType, trim, single, root);
- // Modify the Dictionary if necessary and output the results
- if (updateMode != 0 && updateMode < UpdateMode.DiffCascade)
- {
- DiffNoCascade(updateMode, outDir, newInputFileNames);
- }
- // If we're in cascade and diff, output only cascaded diffs
- else if (updateMode != 0 && updateMode >= UpdateMode.DiffCascade)
- {
- DiffCascade(outDir, inplace, newInputFileNames, datHeaders, skip);
- }
- // Output all entries with user-defined merge
- else
+ // If we're in merging mode
+ if ((updateMode & UpdateMode.Merge) != 0)
{
MergeNoDiff(outDir, newInputFileNames, datHeaders);
}
+ // If we have one of the standard diffing modes
+ else if ((updateMode & UpdateMode.DiffDupesOnly) != 0
+ || (updateMode & UpdateMode.DiffNoDupesOnly) != 0
+ || (updateMode & UpdateMode.DiffIndividualsOnly) != 0)
+ {
+ DiffNoCascade(updateMode, outDir, newInputFileNames);
+ }
+ // If we have one of the cascaded diffing modes
+ else if ((updateMode & UpdateMode.DiffCascade) != 0
+ || (updateMode & UpdateMode.DiffReverseCascade) != 0)
+ {
+ DiffCascade(outDir, inplace, newInputFileNames, datHeaders, skip);
+ }
+ // If we have diff against mode
+ else if ((updateMode & UpdateMode.DiffAgainst) != 0)
+ {
+ DiffAgainst(inputPaths, basePaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root);
+ }
+ // If we have one of the base replacement modes
+ else if ((updateMode & UpdateMode.BaseReplace) != 0
+ || (updateMode & UpdateMode.ReverseBaseReplace) != 0)
+ {
+ bool brrev = (updateMode & UpdateMode.ReverseBaseReplace) != 0;
+ BaseReplace(inputPaths, basePaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root, brrev);
+ }
}
- // If we're in "diff against" mode, we treat the inputs differently
- else if ((updateMode & UpdateMode.DiffAgainst) != 0)
- {
- DiffAgainst(inputPaths, basePaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root);
- }
- // If we're in "base replacement" mode, we treat the inputs differently
- else if ((updateMode & UpdateMode.BaseReplace) != 0)
- {
- BaseReplace(inputPaths, basePaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root, false);
- }
- // If we're in "reverse base replacement" mode, we treat the inputs differently
- else if ((updateMode & UpdateMode.ReverseBaseReplace) != 0)
- {
- BaseReplace(inputPaths, basePaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root, true);
- }
- // Otherwise, loop through all of the inputs individually
- else
- {
- Update(inputPaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root);
- }
+
return;
}
diff --git a/SabreTools.Library/Data/Flags.cs b/SabreTools.Library/Data/Flags.cs
index 6c851e4b..8ad200df 100644
--- a/SabreTools.Library/Data/Flags.cs
+++ b/SabreTools.Library/Data/Flags.cs
@@ -293,7 +293,8 @@ namespace SabreTools.Library.Data
DiffAgainst = DiffReverseCascade << 1,
// Special update modes
- BaseReplace = DiffAgainst << 1,
+ Merge = DiffAgainst << 1,
+ BaseReplace = Merge << 1,
ReverseBaseReplace = BaseReplace << 1,
}
diff --git a/SabreTools/SabreTools.Inits.cs b/SabreTools/SabreTools.Inits.cs
index 340beac7..4cab77df 100644
--- a/SabreTools/SabreTools.Inits.cs
+++ b/SabreTools/SabreTools.Inits.cs
@@ -300,8 +300,7 @@ namespace SabreTools
/// Add the dat name as a directory prefix
/// Output files in romba format
/// /* Merging and Diffing info */
- /// True if input files should be merged into a single file, false otherwise
- /// Non-zero flag for diffing mode, zero otherwise
+ /// Non-zero flag for diffing mode, zero otherwise
/// True if the cascade-diffed files should overwrite their inputs, false otherwise
/// True if the first cascaded diff file should be skipped on output, false otherwise
/// True if the date should not be appended to the default name, false otherwise [OBSOLETE]
@@ -357,8 +356,7 @@ namespace SabreTools
bool romba,
/* Merging and Diffing info */
- bool merge,
- UpdateMode diffMode,
+ UpdateMode updateMode,
bool inplace,
bool skip,
bool bare,
@@ -389,8 +387,8 @@ namespace SabreTools
addext = (addext == "" || addext.StartsWith(".") ? addext : "." + addext);
repext = (repext == "" || repext.StartsWith(".") ? repext : "." + repext);
- // If we're in merge or diff mode and the names aren't set, set defaults
- if (merge || diffMode != 0)
+ // If we're in a special update mode and the names aren't set, set defaults
+ if (updateMode != 0)
{
// Get the values that will be used
if (date == "")
@@ -399,17 +397,17 @@ namespace SabreTools
}
if (name == "")
{
- name = (diffMode != 0 ? "DiffDAT" : "MergeDAT") + (superdat ? "-SuperDAT" : "") + (dedup != DedupeType.None ? "-deduped" : "");
+ name = (updateMode != 0 ? "DiffDAT" : "MergeDAT") + (superdat ? "-SuperDAT" : "") + (dedup != DedupeType.None ? "-deduped" : "");
}
if (description == "")
{
- description = (diffMode != 0 ? "DiffDAT" : "MergeDAT") + (superdat ? "-SuperDAT" : "") + (dedup != DedupeType.None ? " - deduped" : "");
+ description = (updateMode != 0 ? "DiffDAT" : "MergeDAT") + (superdat ? "-SuperDAT" : "") + (dedup != DedupeType.None ? " - deduped" : "");
if (!bare)
{
description += " (" + date + ")";
}
}
- if (category == "" && diffMode != 0)
+ if (category == "" && updateMode != 0)
{
category = "DiffDAT";
}
@@ -456,7 +454,7 @@ namespace SabreTools
Romba = romba,
};
- userInputDat.DetermineUpdateType(inputPaths, basePaths, outDir, merge, diffMode, inplace, skip, bare, clean,
+ userInputDat.DetermineUpdateType(inputPaths, basePaths, outDir, updateMode, inplace, skip, bare, clean,
remUnicode, descAsName, filter, splitType, trim, single, root);
}
diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs
index 4c5d397d..668b774f 100644
--- a/SabreTools/SabreTools.cs
+++ b/SabreTools/SabreTools.cs
@@ -98,7 +98,6 @@ namespace SabreTools
hashOnly = false,
inplace = false,
inverse = false,
- merge = false,
nostore = false,
quickScan = false,
quotes = false,
@@ -398,7 +397,7 @@ namespace SabreTools
break;
case "-m":
case "--merge":
- merge = true;
+ updateMode |= UpdateMode.Merge;
break;
case "-nc":
case "--nodump-col":
@@ -1302,7 +1301,7 @@ namespace SabreTools
{
InitUpdate(inputs, basePaths, filename, name, description, rootdir, category, version, date, author, email, homepage, url, comment, header,
superdat, forcemerge, forcend, forcepack, excludeOf, sceneDateStrip, datFormat, usegame, prefix, postfix, quotes, repext, addext, remext,
- datPrefix, romba, merge, updateMode, inplace, skip, removeDateFromAutomaticName, filter, splitType, trim, single, root, outDir,
+ datPrefix, romba, updateMode, inplace, skip, removeDateFromAutomaticName, filter, splitType, trim, single, root, outDir,
cleanGameNames, removeUnicode, descAsName, dedup, stripHash);
}