diff --git a/SabreTools.Library/DatFiles/DatFile.cs b/SabreTools.Library/DatFiles/DatFile.cs
index a2ee3acd..1dc417b2 100644
--- a/SabreTools.Library/DatFiles/DatFile.cs
+++ b/SabreTools.Library/DatFiles/DatFile.cs
@@ -1592,7 +1592,7 @@ namespace SabreTools.Library.DatFiles
/// 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
+ /// 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
/// True if the date should not be appended to the default name, false otherwise [OBSOLETE]
@@ -1604,20 +1604,20 @@ 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, DiffMode diff, bool inplace, bool skip,
+ public void DetermineUpdateType(List inputPaths, List basePaths, string outDir, bool merge, 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 || (diff != 0
- && (diff & DiffMode.Against) == 0)
- && (diff & DiffMode.BaseReplace) == 0
- && (diff & DiffMode.ReverseBaseReplace) == 0)
+ if (merge || (updateMode != UpdateMode.None
+ && (updateMode & UpdateMode.Against) == 0)
+ && (updateMode & UpdateMode.BaseReplace) == 0
+ && (updateMode & UpdateMode.ReverseBaseReplace) == 0)
{
// Make sure there are no folders in inputs
List newInputFileNames = FileTools.GetOnlyFilesFromInputs(inputPaths, appendparent: true);
// Reverse if we have to
- if ((diff & DiffMode.ReverseCascade) != 0)
+ if ((updateMode & UpdateMode.ReverseCascade) != 0)
{
newInputFileNames.Reverse();
}
@@ -1627,12 +1627,12 @@ namespace SabreTools.Library.DatFiles
remUnicode, descAsName, outDir, filter, splitType, trim, single, root);
// Modify the Dictionary if necessary and output the results
- if (diff != 0 && diff < DiffMode.Cascade)
+ if (updateMode != 0 && updateMode < UpdateMode.Cascade)
{
- DiffNoCascade(diff, outDir, newInputFileNames);
+ DiffNoCascade(updateMode, outDir, newInputFileNames);
}
// If we're in cascade and diff, output only cascaded diffs
- else if (diff != 0 && diff >= DiffMode.Cascade)
+ else if (updateMode != 0 && updateMode >= UpdateMode.Cascade)
{
DiffCascade(outDir, inplace, newInputFileNames, datHeaders, skip);
}
@@ -1643,17 +1643,17 @@ namespace SabreTools.Library.DatFiles
}
}
// If we're in "diff against" mode, we treat the inputs differently
- else if ((diff & DiffMode.Against) != 0)
+ else if ((updateMode & UpdateMode.Against) != 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 ((diff & DiffMode.BaseReplace) != 0)
+ 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 ((diff & DiffMode.ReverseBaseReplace) != 0)
+ else if ((updateMode & UpdateMode.ReverseBaseReplace) != 0)
{
BaseReplace(inputPaths, basePaths, outDir, inplace, clean, remUnicode, descAsName, filter, splitType, trim, single, root, true);
}
@@ -2056,7 +2056,7 @@ namespace SabreTools.Library.DatFiles
/// Non-zero flag for diffing mode, zero otherwise
/// Output directory to write the DATs to
/// List of inputs to write out from
- public void DiffNoCascade(DiffMode diff, string outDir, List inputs)
+ public void DiffNoCascade(UpdateMode diff, string outDir, List inputs)
{
InternalStopwatch watch = new InternalStopwatch("Initializing all output DATs");
@@ -2080,7 +2080,7 @@ namespace SabreTools.Library.DatFiles
}
// Don't have External dupes
- if ((diff & DiffMode.NoDupes) != 0)
+ if ((diff & UpdateMode.NoDupes) != 0)
{
post = " (No Duplicates)";
outerDiffData = new DatFile(this);
@@ -2091,7 +2091,7 @@ namespace SabreTools.Library.DatFiles
}
// Have External dupes
- if ((diff & DiffMode.Dupes) != 0)
+ if ((diff & UpdateMode.Dupes) != 0)
{
post = " (Duplicates)";
dupeData = new DatFile(this);
@@ -2105,7 +2105,7 @@ namespace SabreTools.Library.DatFiles
List outDats = new List();
// Loop through each of the inputs and get or create a new DatData object
- if ((diff & DiffMode.Individuals) != 0)
+ if ((diff & UpdateMode.Individuals) != 0)
{
DatFile[] outDatsArray = new DatFile[inputs.Count];
@@ -2143,18 +2143,18 @@ namespace SabreTools.Library.DatFiles
foreach (DatItem item in items)
{
// No duplicates
- if ((diff & DiffMode.NoDupes) != 0 || (diff & DiffMode.Individuals) != 0)
+ if ((diff & UpdateMode.NoDupes) != 0 || (diff & UpdateMode.Individuals) != 0)
{
if ((item.Dupe & DupeType.Internal) != 0)
{
// Individual DATs that are output
- if ((diff & DiffMode.Individuals) != 0)
+ if ((diff & UpdateMode.Individuals) != 0)
{
outDats[item.SystemID].Add(key, item);
}
// Merged no-duplicates DAT
- if ((diff & DiffMode.NoDupes) != 0)
+ if ((diff & UpdateMode.NoDupes) != 0)
{
DatItem newrom = item.Clone() as DatItem;
newrom.MachineName += " (" + Path.GetFileNameWithoutExtension(inputs[newrom.SystemID].Split('¬')[0]) + ")";
@@ -2165,7 +2165,7 @@ namespace SabreTools.Library.DatFiles
}
// Duplicates only
- if ((diff & DiffMode.Dupes) != 0)
+ if ((diff & UpdateMode.Dupes) != 0)
{
if ((item.Dupe & DupeType.External) != 0)
{
@@ -2184,19 +2184,19 @@ namespace SabreTools.Library.DatFiles
watch.Start("Outputting all created DATs");
// Output the difflist (a-b)+(b-a) diff
- if ((diff & DiffMode.NoDupes) != 0)
+ if ((diff & UpdateMode.NoDupes) != 0)
{
outerDiffData.WriteToFile(outDir);
}
// Output the (ab) diff
- if ((diff & DiffMode.Dupes) != 0)
+ if ((diff & UpdateMode.Dupes) != 0)
{
dupeData.WriteToFile(outDir);
}
// Output the individual (a-b) DATs
- if ((diff & DiffMode.Individuals) != 0)
+ if ((diff & UpdateMode.Individuals) != 0)
{
Parallel.For(0, inputs.Count, Globals.ParallelOptions, j =>
{
diff --git a/SabreTools.Library/Data/Flags.cs b/SabreTools.Library/Data/Flags.cs
index bde405aa..855cce47 100644
--- a/SabreTools.Library/Data/Flags.cs
+++ b/SabreTools.Library/Data/Flags.cs
@@ -222,12 +222,46 @@ namespace SabreTools.Library.Data
ALL = 0xFFFFFFF,
}
- ///
- /// Determines which diffs should be created
- ///
- [Flags]
- public enum DiffMode
+ ///
+ /// Determine what hashes to strip from the DAT
+ ///
+ [Flags]
+ public enum Hash
{
+ CRC = 0x0001,
+ MD5 = CRC << 1,
+ SHA1 = MD5 << 1,
+ SHA256 = SHA1 << 1,
+ SHA384 = SHA256 << 1,
+ SHA512 = SHA384 << 1,
+ xxHash = SHA512 << 1,
+
+ // Special combinations
+ Standard = CRC | MD5 | SHA1,
+ DeepHashes = SHA256 | SHA384 | SHA512 | xxHash,
+ SecureHashes = MD5 | SHA1 | SHA256 | SHA384 | SHA512 | xxHash,
+ }
+
+ ///
+ /// Determine which format to output Stats to
+ ///
+ /// [Flags]
+ public enum StatDatFormat
+ {
+ None = 0x01,
+ HTML = None << 1,
+ CSV = HTML << 1,
+ TSV = CSV << 1,
+ }
+
+ ///
+ /// Determines special update modes
+ ///
+ [Flags]
+ public enum UpdateMode
+ {
+ None = 0x00,
+
// Standard diffs
Dupes = 0x01,
NoDupes = Dupes << 1,
@@ -246,38 +280,6 @@ namespace SabreTools.Library.Data
ReverseBaseReplace = BaseReplace << 1,
}
- ///
- /// Determine which format to output Stats to
- ///
- /// [Flags]
- public enum StatDatFormat
- {
- None = 0x01,
- HTML = None << 1,
- CSV = HTML << 1,
- TSV = CSV << 1,
- }
-
- ///
- /// Determine what hashes to strip from the DAT
- ///
- [Flags]
- public enum Hash
- {
- CRC = 0x0001,
- MD5 = CRC << 1,
- SHA1 = MD5 << 1,
- SHA256 = SHA1 << 1,
- SHA384 = SHA256 << 1,
- SHA512 = SHA384 << 1,
- xxHash = SHA512 << 1,
-
- // Special combinations
- Standard = CRC | MD5 | SHA1,
- DeepHashes = SHA256 | SHA384 | SHA512 | xxHash,
- SecureHashes = MD5 | SHA1 | SHA256 | SHA384 | SHA512 | xxHash,
- }
-
#endregion
#region DatItem related
diff --git a/SabreTools/SabreTools.Inits.cs b/SabreTools/SabreTools.Inits.cs
index a19c5202..acf8949d 100644
--- a/SabreTools/SabreTools.Inits.cs
+++ b/SabreTools/SabreTools.Inits.cs
@@ -541,7 +541,7 @@ namespace SabreTools
/* Merging and Diffing info */
bool merge,
- DiffMode diffMode,
+ UpdateMode diffMode,
bool inplace,
bool skip,
bool bare,
diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs
index f8e52726..2880d8e5 100644
--- a/SabreTools/SabreTools.cs
+++ b/SabreTools/SabreTools.cs
@@ -122,13 +122,13 @@ namespace SabreTools
usegame = true;
DatFormat datFormat = 0x0;
DedupeType dedup = DedupeType.None;
- DiffMode diffMode = 0x0;
Hash omitFromScan = Hash.SHA256 | Hash.SHA384 | Hash.SHA512; // Should be set to 0x0 later
Hash stripHash = 0x0;
OutputFormat outputFormat = OutputFormat.Folder;
SkipFileType skipFileType = SkipFileType.None;
SplitType splitType = SplitType.None;
StatDatFormat statDatFormat = 0x0;
+ UpdateMode updateMode = UpdateMode.None;
// User inputs
int gz = 2,
@@ -290,7 +290,7 @@ namespace SabreTools
break;
case "-ag":
case "--against":
- diffMode |= DiffMode.Against;
+ updateMode |= UpdateMode.Against;
break;
case "-b":
case "--bare":
@@ -306,11 +306,11 @@ namespace SabreTools
break;
case "-bn":
case "--base-name":
- diffMode |= DiffMode.BaseReplace;
+ updateMode |= UpdateMode.BaseReplace;
break;
case "-c":
case "--cascade":
- diffMode |= DiffMode.Cascade;
+ updateMode |= UpdateMode.Cascade;
break;
case "-cf":
case "--copy-files":
@@ -342,19 +342,19 @@ namespace SabreTools
break;
case "-di":
case "--diff":
- diffMode |= DiffMode.All;
+ updateMode |= UpdateMode.All;
break;
case "-did":
case "--diff-du":
- diffMode |= DiffMode.Dupes;
+ updateMode |= UpdateMode.Dupes;
break;
case "-dii":
case "--diff-in":
- diffMode |= DiffMode.Individuals;
+ updateMode |= UpdateMode.Individuals;
break;
case "-din":
case "--diff-nd":
- diffMode |= DiffMode.NoDupes;
+ updateMode |= UpdateMode.NoDupes;
break;
case "-dm":
case "--dat-merged":
@@ -530,7 +530,7 @@ namespace SabreTools
break;
case "-rc":
case "--rev-cascade":
- diffMode |= DiffMode.ReverseCascade;
+ updateMode |= UpdateMode.ReverseCascade;
break;
case "-rmd5":
case "--rem-md5":
@@ -832,7 +832,7 @@ namespace SabreTools
break;
case "-rbn":
case "--reverse-base-name":
- diffMode |= DiffMode.ReverseBaseReplace;
+ updateMode |= UpdateMode.ReverseBaseReplace;
break;
case "-rd":
case "--root-dir":
@@ -1319,7 +1319,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, diffMode, inplace, skip, removeDateFromAutomaticName, filter, oneGameOneRegion, regions,
+ datPrefix, romba, merge, updateMode, inplace, skip, removeDateFromAutomaticName, filter, oneGameOneRegion, regions,
splitType, trim, single, root, outDir, cleanGameNames, removeUnicode, descAsName, dedup, stripHash);
}