diff --git a/DATabase/DATabase.cs b/DATabase/DATabase.cs
index 873214d2..4cd0b0ce 100644
--- a/DATabase/DATabase.cs
+++ b/DATabase/DATabase.cs
@@ -375,7 +375,7 @@ namespace SabreTools
{
foreach (string input in inputs)
{
- InitConvert(input, OutputFormat.ClrMamePro);
+ InitConvert(input, OutputFormat.ClrMamePro, outdir);
}
}
@@ -384,7 +384,7 @@ namespace SabreTools
{
foreach (string input in inputs)
{
- InitConvert(input, OutputFormat.RomCenter);
+ InitConvert(input, OutputFormat.RomCenter, outdir);
}
}
@@ -393,7 +393,7 @@ namespace SabreTools
{
foreach (string input in inputs)
{
- InitConvert(input, OutputFormat.Xml);
+ InitConvert(input, OutputFormat.Xml, outdir);
}
}
@@ -651,13 +651,11 @@ Make a selection:
===========================
Make a selection:
- 1) Convert DAT to ClrMamePro
- 2) Convert DAT to RomCenter
- 3) Convert DAT to XML
- 4) Convert DAT to missfile
- 5) Trim all entries in DAT and merge into a single game
- 6) Merge, diff, and/or dedup 2 or more DAT files
- 7) Split DAT using 2 extensions
+ 1) Convert or clean DAT or folder of DATs
+ 3) Convert DAT to missfile
+ 4) Trim all entries in DAT and merge into a single game
+ 5) Merge, diff, and/or dedup 2 or more DAT files
+ 6) Split DAT using 2 extensions
B) Go back to the previous menu
");
Console.Write("Enter selection: ");
@@ -665,24 +663,18 @@ Make a selection:
switch (selection)
{
case "1":
- ConvertCMPMenu();
+ ConvertMenu();
break;
case "2":
- ConvertRCMenu();
- break;
- case "3":
- ConvertXMLMenu();
- break;
- case "4":
ConvertMissMenu();
break;
- case "5":
+ case "3":
TrimMergeMenu();
break;
- case "6":
+ case "4":
MergeDiffMenu();
break;
- case "7":
+ case "5":
ExtSplitMenu();
break;
}
@@ -690,84 +682,78 @@ Make a selection:
}
///
- /// Show the text-based any to CMP conversion menu
+ /// Show the text-based any to any conversion menu
///
- private static void ConvertCMPMenu()
+ private static void ConvertMenu()
{
- string selection = "";
+ string selection = "", input = "", outdir = "";
+ OutputFormat outputFormat = OutputFormat.Xml;
while (selection.ToLowerInvariant() != "b")
{
Console.Clear();
Build.Start("DATabase");
- Console.WriteLine(@"ANY -> CMP CONVERT MENU
+ Console.WriteLine(@"DAT CONVERSION MENU
===========================
-Enter the name of a DAT file to convert to CMP
-or 'b' to go back to the previous menu:
-");
- selection = Console.ReadLine();
- if (selection.ToLowerInvariant() != "b")
- {
- Console.Clear();
- InitConvert(selection, OutputFormat.ClrMamePro);
- Console.Write("\nPress any key to continue...");
- Console.ReadKey();
- }
- }
- return;
- }
+Make a selection:
- ///
- /// Show the text-based any to RomCenter conversion menu
- ///
- private static void ConvertRCMenu()
- {
- string selection = "";
- while (selection.ToLowerInvariant() != "b")
- {
- Console.Clear();
- Build.Start("DATabase");
- Console.WriteLine(@"ANY -> RC CONVERT MENU
-===========================
-Enter the name of a DAT file to convert to RomCenter
-or 'b' to go back to the previous menu:
+ 1) File or folder to convert" + (input == "" ? "" : ":\n" + input) + @"
+ 2) New output folder" + (outdir == "" ? " (blank means source directory)" : ":\n" + outdir) + @"
+ 3) Current output type: " + (outputFormat.ToString()) + @"
+ 4) Process file or folder
+ B) Go back to the previous menu
");
+ Console.Write("Enter selection: ");
selection = Console.ReadLine();
- if (selection.ToLowerInvariant() != "b")
+ switch (selection)
{
- Console.Clear();
- InitConvert(selection, OutputFormat.RomCenter);
- Console.Write("\nPress any key to continue...");
- Console.ReadKey();
- }
- }
- return;
- }
+ case "1":
+ Console.Clear();
+ Console.Write("Please enter a file or folder name: ");
+ input = Console.ReadLine();
+ break;
+ case "2":
+ Console.Clear();
+ Console.Write("Please enter a folder name: ");
+ input = Console.ReadLine();
+ break;
+ case "3":
+ string subsel = "";
+ while (subsel == "")
+ {
+ Console.Clear();
+ Console.WriteLine(@"Possible output formats:
+ 1) Xml
+ 2) ClrMamePro
+ 3) RomCenter
+");
+ Console.Write("Please enter your selection: ");
+ subsel = Console.ReadLine();
- ///
- /// Show the text-based CMP to XML conversion menu
- ///
- private static void ConvertXMLMenu()
- {
- string selection = "";
- while (selection.ToLowerInvariant() != "b")
- {
- Console.Clear();
- Build.Start("DATabase");
- Console.WriteLine(@"ANY -> XML CONVERT MENU
-===========================
-Enter the name of a DAT file to convert to XML
-or 'b' to go back to the previous menu:
-");
- selection = Console.ReadLine();
- if (selection.ToLowerInvariant() != "b")
- {
- Console.Clear();
- InitConvert(selection, OutputFormat.Xml);
- Console.Write("\nPress any key to continue...");
- Console.ReadKey();
+ switch (subsel)
+ {
+ case "1":
+ outputFormat = OutputFormat.Xml;
+ break;
+ case "2":
+ outputFormat = OutputFormat.ClrMamePro;
+ break;
+ case "3":
+ outputFormat = OutputFormat.RomCenter;
+ break;
+ default:
+ subsel = "";
+ break;
+ }
+ }
+ break;
+ case "4":
+ Console.Clear();
+ InitConvert(input, outputFormat, outdir);
+ Console.Write("\nPress any key to continue...");
+ Console.ReadKey();
+ break;
}
}
- return;
}
///
@@ -1311,9 +1297,17 @@ Make a selection:
///
///
///
- private static void InitConvert(string filename, OutputFormat outputFormat)
+ private static void InitConvert(string filename, OutputFormat outputFormat, string outdir = "")
{
+ // Clean the input strings
+ outdir = outdir.Replace("\"", "");
+ if (outdir != "")
+ {
+ outdir = Path.GetFullPath(outdir);
+ }
+ Console.WriteLine(outdir);
filename = filename.Replace("\"", "");
+
if (File.Exists(filename))
{
logger.User("Converting " + filename);
@@ -1342,15 +1336,17 @@ Make a selection:
}
// If the extension matches, append ".new" to the filename
- if (Path.GetExtension(filename) == (datdata.OutputFormat == OutputFormat.Xml ? ".xml" : ".dat"))
+ if (outdir == "" && Path.GetExtension(filename) == (datdata.OutputFormat == OutputFormat.Xml ? ".xml" : ".dat"))
{
datdata.Description += ".new";
}
- Output.WriteDatfile(datdata, Path.GetDirectoryName(filename), logger);
+ Output.WriteDatfile(datdata, (outdir == "" ? Path.GetDirectoryName(filename) : outdir), logger);
}
else if (Directory.Exists(filename))
{
+ filename = Path.GetFullPath(filename);
+
foreach (string file in Directory.EnumerateFiles(filename, "*", SearchOption.AllDirectories))
{
logger.User("Converting " + file);
@@ -1379,12 +1375,12 @@ Make a selection:
}
// If the extension matches, append ".new" to the filename
- if (Path.GetExtension(file) == (datdata.OutputFormat == OutputFormat.Xml ? ".xml" : ".dat"))
+ if (outdir == "" && Path.GetExtension(file) == (datdata.OutputFormat == OutputFormat.Xml ? ".xml" : ".dat"))
{
datdata.Description += ".new";
}
- Output.WriteDatfile(datdata, Path.GetDirectoryName(file), logger);
+ Output.WriteDatfile(datdata, (outdir == "" ? Path.GetDirectoryName(file) : outdir + Path.DirectorySeparatorChar + Path.GetDirectoryName(file).Remove(0, filename.Length)), logger);
}
}
else
diff --git a/SabreHelper/Output.cs b/SabreHelper/Output.cs
index 033945e9..ca134e63 100644
--- a/SabreHelper/Output.cs
+++ b/SabreHelper/Output.cs
@@ -68,6 +68,9 @@ namespace SabreTools.Helper
outDir += Path.DirectorySeparatorChar;
}
+ // Create the output directory if it doesn't already exist
+ Directory.CreateDirectory(outDir);
+
// (currently uses current time, change to "last updated time")
logger.User("Opening file for writing: " + outDir + datdata.Description + (datdata.OutputFormat == OutputFormat.Xml ? ".xml" : ".dat"));