mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add convert to RomCenter functionality!
This commit is contained in:
@@ -55,6 +55,7 @@ namespace SabreTools
|
||||
bare = false,
|
||||
convertMiss = false,
|
||||
convertCMP = false,
|
||||
convertRC = false,
|
||||
convertXml = false,
|
||||
dedup = false,
|
||||
diff = false,
|
||||
@@ -120,6 +121,10 @@ namespace SabreTools
|
||||
case "--convert-miss":
|
||||
convertMiss = true;
|
||||
break;
|
||||
case "-cr":
|
||||
case "--convert-rc":
|
||||
convertRC = true;
|
||||
break;
|
||||
case "-cx":
|
||||
case "--convert-xml":
|
||||
convertXml = true;
|
||||
@@ -295,7 +300,8 @@ namespace SabreTools
|
||||
}
|
||||
|
||||
// If more than one switch is enabled or help is set, show the help screen
|
||||
if (help || !(add ^ convertMiss ^ convertCMP ^ convertXml ^ extsplit ^ generate ^ genall ^ import ^ listsrc ^ listsys ^ (merge || diff) ^ rem ^ trim))
|
||||
if (help || !(add ^ convertMiss ^ convertCMP ^ convertRC ^ convertXml ^ extsplit ^ generate ^ genall ^
|
||||
import ^ listsrc ^ listsys ^ (merge || diff) ^ rem ^ trim))
|
||||
{
|
||||
Build.Help();
|
||||
logger.Close();
|
||||
@@ -303,7 +309,7 @@ namespace SabreTools
|
||||
}
|
||||
|
||||
// If a switch that requires a filename is set and no file is, show the help screen
|
||||
if (inputs.Count == 0 && (convertMiss || convertCMP || convertXml || extsplit || import || (merge || diff) || trim))
|
||||
if (inputs.Count == 0 && (convertMiss || convertCMP || convertRC || convertXml || extsplit || import || (merge || diff) || trim))
|
||||
{
|
||||
Build.Help();
|
||||
logger.Close();
|
||||
@@ -354,7 +360,7 @@ namespace SabreTools
|
||||
}
|
||||
}
|
||||
|
||||
// Convert XML DAT to CMP DAT
|
||||
// Convert any DAT to CMP DAT
|
||||
else if (convertCMP)
|
||||
{
|
||||
foreach (string input in inputs)
|
||||
@@ -363,7 +369,16 @@ namespace SabreTools
|
||||
}
|
||||
}
|
||||
|
||||
// Convert CMP DAT to XML DAT
|
||||
// Convert any DAT to RC DAT
|
||||
else if (convertRC)
|
||||
{
|
||||
foreach (string input in inputs)
|
||||
{
|
||||
InitConvertRC(input);
|
||||
}
|
||||
}
|
||||
|
||||
// Convert any DAT to XML DAT
|
||||
else if (convertXml)
|
||||
{
|
||||
foreach (string input in inputs)
|
||||
@@ -626,12 +641,13 @@ Make a selection:
|
||||
===========================
|
||||
Make a selection:
|
||||
|
||||
1) Convert XML DAT to CMP
|
||||
2) Convert CMP DAT to XML
|
||||
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
|
||||
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
|
||||
B) Go back to the previous menu
|
||||
");
|
||||
Console.Write("Enter selection: ");
|
||||
@@ -642,18 +658,21 @@ Make a selection:
|
||||
ConvertCMPMenu();
|
||||
break;
|
||||
case "2":
|
||||
ConvertXMLMenu();
|
||||
ConvertRCMenu();
|
||||
break;
|
||||
case "3":
|
||||
ConvertMissMenu();
|
||||
ConvertXMLMenu();
|
||||
break;
|
||||
case "4":
|
||||
TrimMergeMenu();
|
||||
ConvertMissMenu();
|
||||
break;
|
||||
case "5":
|
||||
MergeDiffMenu();
|
||||
TrimMergeMenu();
|
||||
break;
|
||||
case "6":
|
||||
MergeDiffMenu();
|
||||
break;
|
||||
case "7":
|
||||
ExtSplitMenu();
|
||||
break;
|
||||
}
|
||||
@@ -661,7 +680,7 @@ Make a selection:
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based XML to CMP conversion menu
|
||||
/// Show the text-based any to CMP conversion menu
|
||||
/// </summary>
|
||||
private static void ConvertCMPMenu()
|
||||
{
|
||||
@@ -670,9 +689,9 @@ Make a selection:
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabase");
|
||||
Console.WriteLine(@"XML -> CMP CONVERT MENU
|
||||
Console.WriteLine(@"ANY -> CMP CONVERT MENU
|
||||
===========================
|
||||
Enter the name of a DAT file to convert from XML to CMP
|
||||
Enter the name of a DAT file to convert to CMP
|
||||
or 'b' to go back to the previous menu:
|
||||
");
|
||||
selection = Console.ReadLine();
|
||||
@@ -687,6 +706,33 @@ or 'b' to go back to the previous menu:
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based any to RomCenter conversion menu
|
||||
/// </summary>
|
||||
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:
|
||||
");
|
||||
selection = Console.ReadLine();
|
||||
if (selection.ToLowerInvariant() != "b")
|
||||
{
|
||||
Console.Clear();
|
||||
InitConvertRC(selection);
|
||||
Console.Write("\nPress any key to continue...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show the text-based CMP to XML conversion menu
|
||||
/// </summary>
|
||||
@@ -697,9 +743,9 @@ or 'b' to go back to the previous menu:
|
||||
{
|
||||
Console.Clear();
|
||||
Build.Start("DATabase");
|
||||
Console.WriteLine(@"CMP -> XML CONVERT MENU
|
||||
Console.WriteLine(@"ANY -> XML CONVERT MENU
|
||||
===========================
|
||||
Enter the name of a DAT file to convert from CMP to XML
|
||||
Enter the name of a DAT file to convert to XML
|
||||
or 'b' to go back to the previous menu:
|
||||
");
|
||||
selection = Console.ReadLine();
|
||||
@@ -1243,7 +1289,7 @@ Make a selection:
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap converting DAT file from XML to ClrMamePro
|
||||
/// Wrap converting DAT file from any format to ClrMamePro
|
||||
/// </summary>
|
||||
/// <param name="filename"></param>
|
||||
private static void InitConvertCMP(string filename)
|
||||
@@ -1283,7 +1329,47 @@ Make a selection:
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap converting DAT file from ClrMamePro to XML
|
||||
/// Wrap converting DAT file from any format to RomCenter
|
||||
/// </summary>
|
||||
/// <param name="filename"></param>
|
||||
private static void InitConvertRC(string filename)
|
||||
{
|
||||
if (File.Exists(filename))
|
||||
{
|
||||
logger.User("Converting " + filename);
|
||||
DatData datdata = new DatData
|
||||
{
|
||||
Name = "",
|
||||
Description = "",
|
||||
Category = "",
|
||||
Version = "",
|
||||
Date = "",
|
||||
Author = "",
|
||||
Email = "",
|
||||
Homepage = "",
|
||||
Url = "",
|
||||
Comment = "",
|
||||
OutputFormat = OutputFormat.RomCenter,
|
||||
Roms = new Dictionary<string, List<RomData>>(),
|
||||
MergeRoms = false,
|
||||
};
|
||||
|
||||
datdata = RomManipulation.ParseDict(filename, 0, 0, datdata, logger);
|
||||
|
||||
logger.User("datdata.Description: " + datdata.Description);
|
||||
|
||||
datdata.Description += ".new";
|
||||
Output.WriteToDatFromDict(datdata, Path.GetDirectoryName(filename), logger);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("I'm sorry but " + filename + " doesn't exist!");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrap converting DAT file from any format to XML
|
||||
/// </summary>
|
||||
/// <param name="filename"></param>
|
||||
private static void InitConvertXML(string filename)
|
||||
|
||||
@@ -97,6 +97,8 @@ Options:
|
||||
-q, --quotes Put double-quotes around each item
|
||||
-ae=, --add-ext= Add an extension to each item
|
||||
-re=, --rep-ext= Replace all extensions with specified
|
||||
-cr, --convert-rc Convert any DAT to RomCenter
|
||||
-out= Output directory
|
||||
-cx, --convert-xml Convert any DAT to XML
|
||||
-out= Output directory
|
||||
-es, --ext-split Split a DAT by two file extensions
|
||||
|
||||
@@ -304,7 +304,7 @@ namespace SabreTools.Helper
|
||||
"¬" + HttpUtility.HtmlEncode(rom.Game) +
|
||||
"¬" + HttpUtility.HtmlEncode(rom.Name) +
|
||||
"¬" + rom.CRC.ToLowerInvariant() +
|
||||
"¬" + (rom.Size != -1 ? rom.Size.ToString() : "") + "¬¬¬";
|
||||
"¬" + (rom.Size != -1 ? rom.Size.ToString() : "") + "¬¬¬\n";
|
||||
break;
|
||||
case OutputFormat.Xml:
|
||||
state += "\t\t<" + rom.Type + " name=\"" + HttpUtility.HtmlEncode(rom.Name) + "\"" +
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace SabreTools.Helper
|
||||
/// Return if the file is XML or not
|
||||
/// </summary>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <returns>public static bool IsXmlDat(string filename)
|
||||
/// <returns>True if the DAT is probably XML, false otherwise</returns>
|
||||
public static bool IsXmlDat(string filename)
|
||||
{
|
||||
try
|
||||
@@ -36,6 +36,26 @@ namespace SabreTools.Helper
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return if the file is RomCenter or not
|
||||
/// </summary>
|
||||
/// <param name="filename">Name of the file to be parsed</param>
|
||||
/// <returns>True if the DAT is probably XML, false otherwise</returns>
|
||||
public static bool IsRCDat(string filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
StreamReader sr = new StreamReader(File.OpenRead(filename));
|
||||
string first = sr.ReadLine();
|
||||
sr.Close();
|
||||
return first.Contains("[") && first.Contains("]");
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the XmlDocument associated with a file, if possible
|
||||
/// </summary>
|
||||
@@ -112,9 +132,18 @@ namespace SabreTools.Helper
|
||||
xtr.DtdProcessing = DtdProcessing.Ignore;
|
||||
return xtr;
|
||||
}
|
||||
else if (IsRCDat(filename))
|
||||
{
|
||||
logger.Log("RomCenter DAT detected");
|
||||
StringReader sr = new StringReader(Converters.RomCenterToXML(File.ReadAllLines(filename)).ToString());
|
||||
XmlTextReader xtr = new XmlTextReader(sr);
|
||||
xtr.WhitespaceHandling = WhitespaceHandling.None;
|
||||
xtr.DtdProcessing = DtdProcessing.Ignore;
|
||||
return xtr;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Log("Non-XML DAT detected");
|
||||
logger.Log("ClrMamePro DAT detected");
|
||||
StringReader sr = new StringReader(Converters.ClrMameProToXML(File.ReadAllLines(filename)).ToString());
|
||||
XmlTextReader xtr = new XmlTextReader(sr);
|
||||
xtr.WhitespaceHandling = WhitespaceHandling.None;
|
||||
|
||||
Reference in New Issue
Block a user