diff --git a/OfflineMerge/OfflineMerge.cs b/OfflineMerge/OfflineMerge.cs
index 70ef2594..6493a9b2 100644
--- a/OfflineMerge/OfflineMerge.cs
+++ b/OfflineMerge/OfflineMerge.cs
@@ -36,7 +36,7 @@ namespace SabreTools
{
_currentAllMerged = currentAllMerged.Replace("\"", "");
_currentMissingMerged = currentMissingMerged.Replace("\"", "");
- _currentNewMerged = currentNewMerged;
+ _currentNewMerged = currentNewMerged.Replace("\"", "");
_fake = fake;
_logger = logger;
}
@@ -83,48 +83,18 @@ namespace SabreTools
fake = true;
break;
default:
- if (File.Exists(arg.Replace("\"", "")))
+ string temparg = arg.Replace("\"", "");
+ if (temparg.StartsWith("com="))
{
- logger.Log("File found: " + arg);
- if (currentAllMerged == "")
- {
- currentAllMerged = arg.Replace("\"", "");
- }
- else if (currentMissingMerged == "")
- {
- currentMissingMerged = arg.Replace("\"", "");
- }
- else if (currentNewMerged == "")
- {
- currentNewMerged = arg.Replace("\"", "");
- }
- else
- {
- logger.Warning("Only 3 input files are required; ignoring " + arg);
- }
+ currentAllMerged = temparg.Split('=')[1];
}
- else if (Directory.Exists(arg.Replace("\"", "")))
+ else if (temparg.StartsWith("fix="))
{
- logger.Log("Directory found: " + arg);
- foreach (string file in Directory.GetFiles(arg.Replace("\"", ""), "*", SearchOption.AllDirectories))
- {
- if (currentAllMerged == "")
- {
- currentAllMerged = file.Replace("\"", "");
- }
- else if (currentMissingMerged == "")
- {
- currentMissingMerged = file.Replace("\"", "");
- }
- else if (currentNewMerged == "")
- {
- currentNewMerged = file.Replace("\"", "");
- }
- else
- {
- logger.Warning("Only 3 input files are required; ignoring " + arg);
- }
- }
+ currentMissingMerged = temparg.Split('=')[1];
+ }
+ else if (temparg.StartsWith("new="))
+ {
+ currentNewMerged = temparg.Split('=')[1];
}
else
{
@@ -138,8 +108,8 @@ namespace SabreTools
}
}
- // If help is set or any of the inputs are empty, show help
- if (help || currentAllMerged == "" || currentMissingMerged == "" || currentNewMerged == "")
+ // If help is set or all of the inputs are empty, show help
+ if (help || (currentAllMerged == "" && currentMissingMerged == "" && currentNewMerged == ""))
{
Build.Help();
logger.Close();
@@ -148,265 +118,401 @@ namespace SabreTools
// Otherwise, run the program
OfflineMerge om = new OfflineMerge(currentAllMerged, currentMissingMerged, currentNewMerged, fake, logger);
- om.Process();
+ bool success = om.Process();
+ if (!success)
+ {
+ logger.Warning("At least one complete DAT and the fixdat is needed to run!");
+ }
}
///
- /// Process the supplied inputs and create the three required outputs:
- /// (a) Net New - (currentNewMerged)-(currentAllMerged)
- /// (b) Unneeded - (currentAllMerged)-(currentNewMerged)
- /// (c) New Missing - (a)+(currentMissingMerged-(b))
- /// (d) Have - (currentNewMerged)-(c)
+ /// Process the supplied inputs and create the four outputs
///
/// True if the files were created properly, false otherwise
public bool Process()
{
- // First get the combination Dictionary of currentAllMerged and currentNewMerged
- _logger.Log("Adding Current and New Merged DATs to the dictionary");
- Dictionary> completeDats = new Dictionary>();
- completeDats = RomManipulation.ParseDict(_currentAllMerged, 0, 0, completeDats, _logger);
- completeDats = RomManipulation.ParseDict(_currentNewMerged, 0, 0, completeDats, _logger);
-
- // Now get Net New output dictionary [(currentNewMerged)-(currentAllMerged)]
- _logger.Log("Creating and populating Net New dictionary");
- Dictionary> netNew = new Dictionary>();
- foreach (string key in completeDats.Keys)
+ // Check all of the files for validity and break if one doesn't exist
+ if (_currentAllMerged != "" && !File.Exists(_currentAllMerged))
{
- List templist = RomManipulation.Merge(completeDats[key]);
- foreach (RomData rom in templist)
+ return false;
+ }
+ if (_currentMissingMerged != "" && !File.Exists(_currentMissingMerged))
+ {
+ return false;
+ }
+ if (_currentNewMerged != "" && !File.Exists(_currentNewMerged))
+ {
+ return false;
+ }
+
+ Console.WriteLine(_currentAllMerged + " " + _currentMissingMerged + " " + _currentNewMerged);
+
+ // If we have all three DATs, then generate everything
+ if (_currentAllMerged != "" && _currentMissingMerged != "" && _currentNewMerged != "")
+ {
+ // First get the combination Dictionary of currentAllMerged and currentNewMerged
+ _logger.Log("Adding Current and New Merged DATs to the dictionary");
+ Dictionary> completeDats = new Dictionary>();
+ completeDats = RomManipulation.ParseDict(_currentAllMerged, 0, 0, completeDats, _logger);
+ completeDats = RomManipulation.ParseDict(_currentNewMerged, 0, 0, completeDats, _logger);
+
+ // Now get Net New output dictionary [(currentNewMerged)-(currentAllMerged)]
+ _logger.Log("Creating and populating Net New dictionary");
+ Dictionary> netNew = new Dictionary>();
+ foreach (string key in completeDats.Keys)
{
- if (!rom.Dupe && rom.System == _currentNewMerged)
+ List templist = RomManipulation.Merge(completeDats[key]);
+ foreach (RomData rom in templist)
{
- if (netNew.ContainsKey(key))
+ if (!rom.Dupe && rom.System == _currentNewMerged)
{
- netNew[key].Add(rom);
+ if (netNew.ContainsKey(key))
+ {
+ netNew[key].Add(rom);
+ }
+ else
+ {
+ List temp = new List();
+ temp.Add(rom);
+ netNew.Add(key, temp);
+ }
}
- else
+ }
+ }
+
+ // Now create the Unneeded dictionary [(currentAllMerged)-(currentNewMerged)]
+ _logger.Log("Creating and populating Uneeded dictionary");
+ Dictionary> unneeded = new Dictionary>();
+ foreach (string key in completeDats.Keys)
+ {
+ List templist = RomManipulation.Merge(completeDats[key]);
+ foreach (RomData rom in templist)
+ {
+ if (!rom.Dupe && rom.System == _currentAllMerged)
{
- List temp = new List();
+ if (unneeded.ContainsKey(key))
+ {
+ unneeded[key].Add(rom);
+ }
+ else
+ {
+ List temp = new List();
+ temp.Add(rom);
+ unneeded.Add(key, temp);
+ }
+ }
+ }
+ }
+
+ // Now create the New Missing dictionary [(Net New)+(currentMissingMerged-(Unneeded))]
+ _logger.Log("Creating and populating New Missing dictionary");
+ Dictionary> midMissing = new Dictionary>();
+ midMissing = RomManipulation.ParseDict(_currentMissingMerged, 0, 0, midMissing, _logger);
+ foreach (string key in unneeded.Keys)
+ {
+ if (midMissing.ContainsKey(key))
+ {
+ midMissing[key].AddRange(unneeded[key]);
+ }
+ else
+ {
+ midMissing.Add(key, unneeded[key]);
+ }
+ }
+ Dictionary> newMissing = new Dictionary>();
+ foreach (string key in midMissing.Keys)
+ {
+ List templist = RomManipulation.Merge(midMissing[key]);
+ foreach (RomData rom in templist)
+ {
+ if (!rom.Dupe && rom.System == _currentMissingMerged)
+ {
+ if (newMissing.ContainsKey(key))
+ {
+ newMissing[key].Add(rom);
+ }
+ else
+ {
+ List temp = new List();
+ temp.Add(rom);
+ newMissing.Add(key, temp);
+ }
+ }
+ }
+ }
+ foreach (string key in netNew.Keys)
+ {
+ if (newMissing.ContainsKey(key))
+ {
+ newMissing[key].AddRange(netNew[key]);
+ }
+ else
+ {
+ newMissing.Add(key, netNew[key]);
+ }
+ }
+
+ // Now create the Have dictionary [(currentNewMerged)-(c)]
+ _logger.Log("Creating and populating Have dictionary");
+ Dictionary> midHave = new Dictionary>();
+ foreach (string key in newMissing.Keys)
+ {
+ if (midHave.ContainsKey(key))
+ {
+ midHave[key].AddRange(newMissing[key]);
+ }
+ else
+ {
+ midHave.Add(key, newMissing[key]);
+ }
+ }
+ foreach (string key in completeDats.Keys)
+ {
+ if (midHave.ContainsKey(key))
+ {
+ foreach (RomData rom in completeDats[key])
+ {
+ if (rom.System == _currentNewMerged)
+ {
+ midHave[key].Add(rom);
+ }
+ }
+ }
+ else
+ {
+ List roms = new List();
+ foreach (RomData rom in completeDats[key])
+ {
+ if (rom.System == _currentNewMerged)
+ {
+ roms.Add(rom);
+ }
+ }
+ midHave.Add(key, roms);
+ }
+ }
+ Dictionary> have = new Dictionary>();
+ foreach (string key in midHave.Keys)
+ {
+ List templist = RomManipulation.Merge(midHave[key]);
+ foreach (RomData rom in templist)
+ {
+ if (!rom.Dupe && rom.System == _currentNewMerged)
+ {
+ if (have.ContainsKey(key))
+ {
+ have[key].Add(rom);
+ }
+ else
+ {
+ List temp = new List();
+ temp.Add(rom);
+ have.Add(key, temp);
+ }
+ }
+ }
+ }
+
+ // If we are supposed to replace everything in the output with default values, do so
+ if (_fake)
+ {
+ _logger.Log("Replacing all hashes in Net New with 0-byte values");
+ List keys = netNew.Keys.ToList();
+ foreach (string key in keys)
+ {
+ List temp = new List();
+ List roms = netNew[key];
+ for (int i = 0; i < roms.Count; i++)
+ {
+ RomData rom = roms[i];
+ rom.Size = sizezero;
+ rom.CRC = crczero;
+ rom.MD5 = md5zero;
+ rom.SHA1 = sha1zero;
temp.Add(rom);
- netNew.Add(key, temp);
}
+ netNew[key] = temp;
}
- }
- }
- // Now create the Unneeded dictionary [(currentAllMerged)-(currentNewMerged)]
- _logger.Log("Creating and populating Uneeded dictionary");
- Dictionary> unneeded = new Dictionary>();
- foreach (string key in completeDats.Keys)
- {
- List templist = RomManipulation.Merge(completeDats[key]);
- foreach (RomData rom in templist)
- {
- if (!rom.Dupe && rom.System == _currentAllMerged)
+ _logger.Log("Replacing all hashes in Unneeded with 0-byte values");
+ keys = unneeded.Keys.ToList();
+ foreach (string key in keys)
{
- if (unneeded.ContainsKey(key))
+ List temp = new List();
+ List roms = unneeded[key];
+ for (int i = 0; i < roms.Count; i++)
{
- unneeded[key].Add(rom);
- }
- else
- {
- List temp = new List();
+ RomData rom = roms[i];
+ rom.Size = sizezero;
+ rom.CRC = crczero;
+ rom.MD5 = md5zero;
+ rom.SHA1 = sha1zero;
temp.Add(rom);
- unneeded.Add(key, temp);
}
+ unneeded[key] = temp;
}
- }
- }
- // Now create the New Missing dictionary [(Net New)+(currentMissingMerged-(Unneeded))]
- _logger.Log("Creating and populating New Missing dictionary");
- Dictionary> midMissing = new Dictionary>();
- midMissing = RomManipulation.ParseDict(_currentMissingMerged, 0, 0, midMissing, _logger);
- foreach (string key in unneeded.Keys)
- {
- if (midMissing.ContainsKey(key))
- {
- midMissing[key].AddRange(unneeded[key]);
- }
- else
- {
- midMissing.Add(key, unneeded[key]);
- }
- }
- Dictionary> newMissing = new Dictionary>();
- foreach (string key in midMissing.Keys)
- {
- List templist = RomManipulation.Merge(midMissing[key]);
- foreach (RomData rom in templist)
- {
- if (!rom.Dupe && rom.System == _currentMissingMerged)
+ _logger.Log("Replacing all hashes in New Missing with 0-byte values");
+ keys = newMissing.Keys.ToList();
+ foreach (string key in keys)
{
- if (newMissing.ContainsKey(key))
+ List temp = new List();
+ List roms = newMissing[key];
+ for (int i = 0; i < roms.Count; i++)
{
- newMissing[key].Add(rom);
- }
- else
- {
- List temp = new List();
+ RomData rom = roms[i];
+ rom.Size = sizezero;
+ rom.CRC = crczero;
+ rom.MD5 = md5zero;
+ rom.SHA1 = sha1zero;
temp.Add(rom);
- newMissing.Add(key, temp);
}
+ newMissing[key] = temp;
}
- }
- }
- foreach (string key in netNew.Keys)
- {
- if (newMissing.ContainsKey(key))
- {
- newMissing[key].AddRange(netNew[key]);
- }
- else
- {
- newMissing.Add(key, netNew[key]);
- }
- }
- // Now create the Have dictionary [(currentNewMerged)-(c)]
- _logger.Log("Creating and populating Have dictionary");
- Dictionary> midHave = new Dictionary>();
- foreach (string key in newMissing.Keys)
- {
- if (midHave.ContainsKey(key))
- {
- midHave[key].AddRange(newMissing[key]);
- }
- else
- {
- midHave.Add(key, newMissing[key]);
- }
- }
- foreach (string key in completeDats.Keys)
- {
- if (midHave.ContainsKey(key))
- {
- foreach (RomData rom in completeDats[key])
+ _logger.Log("Replacing all hashes in Have with 0-byte values");
+ keys = have.Keys.ToList();
+ foreach (string key in keys)
{
- if (rom.System == _currentNewMerged)
+ List temp = new List();
+ List roms = have[key];
+ for (int i = 0; i < roms.Count; i++)
{
- midHave[key].Add(rom);
- }
- }
- }
- else
- {
- List roms = new List();
- foreach (RomData rom in completeDats[key])
- {
- if (rom.System == _currentNewMerged)
- {
- roms.Add(rom);
- }
- }
- midHave.Add(key, roms);
- }
- }
- Dictionary> have = new Dictionary>();
- foreach (string key in midHave.Keys)
- {
- List templist = RomManipulation.Merge(midHave[key]);
- foreach (RomData rom in templist)
- {
- if (!rom.Dupe && rom.System == _currentNewMerged)
- {
- if (have.ContainsKey(key))
- {
- have[key].Add(rom);
- }
- else
- {
- List temp = new List();
+ RomData rom = roms[i];
+ rom.Size = sizezero;
+ rom.CRC = crczero;
+ rom.MD5 = md5zero;
+ rom.SHA1 = sha1zero;
temp.Add(rom);
- have.Add(key, temp);
+ }
+ have[key] = temp;
+ }
+ }
+
+ // Finally, output all of the files
+ Output.WriteToDatFromDict("Net New", "Net New", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", netNew, _logger);
+ Output.WriteToDatFromDict("Unneeded", "Unneeded", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", unneeded, _logger);
+ Output.WriteToDatFromDict("New Missing", "New Missing", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", newMissing, _logger);
+ Output.WriteToDatFromDict("Have", "Have", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", have, _logger);
+
+ return true;
+ }
+
+ // If we only have the old merged and missing, only generate Have
+ else if (_currentAllMerged != "" && _currentMissingMerged != "")
+ {
+ // Now create the Have dictionary [(currentAllMerged)-(currentMissingMerged)]
+ _logger.Log("Creating and populating Have dictionary");
+ Dictionary> midHave = new Dictionary>();
+ midHave = RomManipulation.ParseDict(_currentMissingMerged, 0, 0, midHave, _logger);
+ midHave = RomManipulation.ParseDict(_currentAllMerged, 0, 0, midHave, _logger);
+ Dictionary> have = new Dictionary>();
+ foreach (string key in midHave.Keys)
+ {
+ List templist = RomManipulation.Merge(midHave[key]);
+ foreach (RomData rom in templist)
+ {
+ if (!rom.Dupe && rom.System == _currentAllMerged)
+ {
+ if (have.ContainsKey(key))
+ {
+ have[key].Add(rom);
+ }
+ else
+ {
+ List temp = new List();
+ temp.Add(rom);
+ have.Add(key, temp);
+ }
}
}
}
+
+ // If we are supposed to replace everything in the output with default values, do so
+ if (_fake)
+ {
+ _logger.Log("Replacing all hashes in Have with 0-byte values");
+ List keys = have.Keys.ToList();
+ foreach (string key in keys)
+ {
+ List temp = new List();
+ List roms = have[key];
+ for (int i = 0; i < roms.Count; i++)
+ {
+ RomData rom = roms[i];
+ rom.Size = sizezero;
+ rom.CRC = crczero;
+ rom.MD5 = md5zero;
+ rom.SHA1 = sha1zero;
+ temp.Add(rom);
+ }
+ have[key] = temp;
+ }
+ }
+
+ Output.WriteToDatFromDict("Have", "Have", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", have, _logger);
+
+ return true;
}
- // If we are supposed to replace everything in the output with default values, do so
- if (_fake)
+ // If we only have the new merged and missing, only generate Have
+ else if (_currentNewMerged != "" && _currentMissingMerged != "")
{
- _logger.Log("Replacing all hashes in Net New with 0-byte values");
- List keys = netNew.Keys.ToList();
- foreach (string key in keys)
+ // Now create the Have dictionary [(currentNewMerged)-(currentMissingMerged)]
+ _logger.Log("Creating and populating Have dictionary");
+ Dictionary> midHave = new Dictionary>();
+ midHave = RomManipulation.ParseDict(_currentMissingMerged, 0, 0, midHave, _logger);
+ midHave = RomManipulation.ParseDict(_currentNewMerged, 0, 0, midHave, _logger);
+ Dictionary> have = new Dictionary>();
+ foreach (string key in midHave.Keys)
{
- List temp = new List();
- List roms = netNew[key];
- for (int i = 0; i < roms.Count; i++)
+ List templist = RomManipulation.Merge(midHave[key]);
+ foreach (RomData rom in templist)
{
- RomData rom = roms[i];
- rom.Size = sizezero;
- rom.CRC = crczero;
- rom.MD5 = md5zero;
- rom.SHA1 = sha1zero;
- temp.Add(rom);
+ if (!rom.Dupe && rom.System == _currentNewMerged)
+ {
+ if (have.ContainsKey(key))
+ {
+ have[key].Add(rom);
+ }
+ else
+ {
+ List temp = new List();
+ temp.Add(rom);
+ have.Add(key, temp);
+ }
+ }
}
- netNew[key] = temp;
}
- _logger.Log("Replacing all hashes in Unneeded with 0-byte values");
- keys = unneeded.Keys.ToList();
- foreach (string key in keys)
+ // If we are supposed to replace everything in the output with default values, do so
+ if (_fake)
{
- List temp = new List();
- List roms = unneeded[key];
- for (int i = 0; i < roms.Count; i++)
+ _logger.Log("Replacing all hashes in Have with 0-byte values");
+ List keys = have.Keys.ToList();
+ foreach (string key in keys)
{
- RomData rom = roms[i];
- rom.Size = sizezero;
- rom.CRC = crczero;
- rom.MD5 = md5zero;
- rom.SHA1 = sha1zero;
- temp.Add(rom);
+ List temp = new List();
+ List roms = have[key];
+ for (int i = 0; i < roms.Count; i++)
+ {
+ RomData rom = roms[i];
+ rom.Size = sizezero;
+ rom.CRC = crczero;
+ rom.MD5 = md5zero;
+ rom.SHA1 = sha1zero;
+ temp.Add(rom);
+ }
+ have[key] = temp;
}
- unneeded[key] = temp;
}
- _logger.Log("Replacing all hashes in New Missing with 0-byte values");
- keys = newMissing.Keys.ToList();
- foreach (string key in keys)
- {
- List temp = new List();
- List roms = newMissing[key];
- for (int i = 0; i < roms.Count; i++)
- {
- RomData rom = roms[i];
- rom.Size = sizezero;
- rom.CRC = crczero;
- rom.MD5 = md5zero;
- rom.SHA1 = sha1zero;
- temp.Add(rom);
- }
- newMissing[key] = temp;
- }
+ Output.WriteToDatFromDict("Have", "Have", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", have, _logger);
- _logger.Log("Replacing all hashes in Have with 0-byte values");
- keys = have.Keys.ToList();
- foreach (string key in keys)
- {
- List temp = new List();
- List roms = have[key];
- for (int i = 0; i < roms.Count; i++)
- {
- RomData rom = roms[i];
- rom.Size = sizezero;
- rom.CRC = crczero;
- rom.MD5 = md5zero;
- rom.SHA1 = sha1zero;
- temp.Add(rom);
- }
- have[key] = temp;
- }
+ return true;
}
- // Finally, output all of the files
- Output.WriteToDatFromDict("Net New", "Net New", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", netNew, _logger);
- Output.WriteToDatFromDict("Unneeded", "Unneeded", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", unneeded, _logger);
- Output.WriteToDatFromDict("New Missing", "New Missing", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", newMissing, _logger);
- Output.WriteToDatFromDict("Have", "Have", "", DateTime.Now.ToString("yyyy-MM-dd"), "", "SabreTools", false, false, true, "", have, _logger);
-
- return true;
+ return false;
}
}
}
diff --git a/SabreHelper/Build.cs b/SabreHelper/Build.cs
index 79b284a6..5017b997 100644
--- a/SabreHelper/Build.cs
+++ b/SabreHelper/Build.cs
@@ -174,17 +174,23 @@ Options:
case "OfflineMerge":
Console.WriteLine(@"OfflineMerge - Update DATS for offline arrays
-----------------------------------------
-Usage: OfflineMerge [options] [Complete] [Missing] [NewComplete]
+Usage: OfflineMerge [options] [inputs]
Options:
-h, -?, --help Show this help dialog
-f, --fake Replace all hashes and sizes by the default
+Inputs:
+ com= Complete current DAT
+ fix= Complete current Missing
+ new= New Complete DAT
+
This program will output the following DATs:
(a) Net New - (NewComplete)-(Complete)
(b) Unneeded - (Complete)-(NewComplete)
(c) New Missing - (Net New)+(Missing-(Unneeded))
- (d) Have - (NewComplete)-(New Missing)");
+ (d) Have - (NewComplete)-(New Missing)
+ OR (Complete or NewComplete)-(Missing) if one is missing");
break;
default:
Console.Write("This is the default help output");