[SabreTools, SimpleSort] Make a better system for handling flags; add handling of non-= inputs. Thanks EliUmniCk for the suggestion

This commit is contained in:
Matt Nadareski
2016-10-16 15:36:15 -07:00
parent 1efe0a0bff
commit d6cd471999
2 changed files with 524 additions and 199 deletions

View File

@@ -138,9 +138,9 @@ namespace SabreTools
List<string> inputs = new List<string>(); List<string> inputs = new List<string>();
// Determine which switches are enabled (with values if necessary) // Determine which switches are enabled (with values if necessary)
foreach (string arg in args) for (int i = 0; i < args.Length; i++)
{ {
switch (arg) switch (args[i])
{ {
case "-?": case "-?":
case "-h": case "-h":
@@ -155,6 +155,16 @@ namespace SabreTools
case "--add-date": case "--add-date":
addFileDates = true; addFileDates = true;
break; break;
case "-ae":
case "--add-ext":
i++;
addext = args[i];
break;
case "-au":
case "--author":
i++;
author = args[i];
break;
case "-b": case "-b":
case "--bare": case "--bare":
removeDateFromAutomaticName = true; removeDateFromAutomaticName = true;
@@ -167,10 +177,25 @@ namespace SabreTools
case "--cascade": case "--cascade":
diffMode |= DiffMode.Cascade; diffMode |= DiffMode.Cascade;
break; break;
case "-ca":
case "--category=":
i++;
category = args[i];
break;
case "-cf": case "-cf":
case "--copy-files": case "--copy-files":
copyFiles = true; copyFiles = true;
break; break;
case "-co":
case "--comment":
i++;
comment = args[i];
break;
case "-crc":
case "--crc":
i++;
crc = args[i];
break;
case "-csv": case "-csv":
case "--csv": case "--csv":
statOutputFormat = StatOutputFormat.CSV; statOutputFormat = StatOutputFormat.CSV;
@@ -184,10 +209,20 @@ namespace SabreTools
case "--dfd": case "--dfd":
datFromDir = true; datFromDir = true;
break; break;
case "-da":
case "--date":
i++;
date = args[i];
break;
case "-dd": case "-dd":
case "--dedup": case "--dedup":
dedup = true; dedup = true;
break; break;
case "-de":
case "--desc":
i++;
description = args[i];
break;
case "-di": case "-di":
case "--diff": case "--diff":
diffMode |= DiffMode.All; diffMode |= DiffMode.All;
@@ -204,14 +239,54 @@ namespace SabreTools
case "--diff-nd": case "--diff-nd":
diffMode |= DiffMode.NoDupes; diffMode |= DiffMode.NoDupes;
break; break;
case "-em":
case "--email":
i++;
email = args[i];
break;
case "-es": case "-es":
case "--ext-split": case "--ext-split":
splitByExt = true; splitByExt = true;
break; break;
case "-exta":
case "--exta":
i++;
exta = args[i];
break;
case "-extb":
case "--extb":
i++;
extb = args[i];
break;
case "-f": case "-f":
case "--files": case "--files":
parseArchivesAsFiles = true; parseArchivesAsFiles = true;
break; break;
case "-fi":
case "--filename":
i++;
filename = args[i];
break;
case "-fm":
case "--forcemerge":
i++;
forcemerge = args[i];
break;
case "-fn":
case "--forcend":
i++;
forcend = args[i];
break;
case "-fp":
case "--forcepack":
i++;
forcepack = args[i];
break;
case "-gn":
case "--game-name":
i++;
gamename = args[i];
break;
case "-gp": case "-gp":
case "--game-prefix": case "--game-prefix":
datPrefix = true; datPrefix = true;
@@ -224,6 +299,16 @@ namespace SabreTools
case "--headerer": case "--headerer":
headerer = true; headerer = true;
break; break;
case "-he":
case "--header":
i++;
header = args[i];
break;
case "-hp":
case "--homepage":
i++;
homepage = args[i];
break;
case "-hs": case "-hs":
case "--hash-split": case "--hash-split":
splitByHash = true; splitByHash = true;
@@ -232,14 +317,52 @@ namespace SabreTools
case "--html": case "--html":
statOutputFormat = StatOutputFormat.HTML; statOutputFormat = StatOutputFormat.HTML;
break; break;
case "-input":
case "--input":
i++;
if (File.Exists(args[i]) || Directory.Exists(args[i]))
{
inputs.Add(args[i]);
}
else
{
_logger.Error("Invalid input detected: " + args[i]);
Console.WriteLine();
Build.Help();
Console.WriteLine();
_logger.Error("Invalid input detected: " + args[i]);
_logger.Close();
return;
}
break;
case "-ip": case "-ip":
case "--inplace": case "--inplace":
inplace = true; inplace = true;
break; break;
case "-is":
case "--status":
i++;
status = args[i];
break;
case "-m": case "-m":
case "--merge": case "--merge":
merge = true; merge = true;
break; break;
case "-md5":
case "--md5":
i++;
md5 = args[i];
break;
case "-mt":
case "--mt":
i++;
Int32.TryParse(args[i], out maxParallelism);
break;
case "-n":
case "--name":
i++;
name = args[i];
break;
case "-nc": case "-nc":
case "--nodump-col": case "--nodump-col":
showNodumpColumn = true; showNodumpColumn = true;
@@ -304,10 +427,25 @@ namespace SabreTools
case "--output-tsv": case "--output-tsv":
outputFormat |= OutputFormat.TSV; outputFormat |= OutputFormat.TSV;
break; break;
case "-out":
case "--out":
i++;
outDir = args[i];
break;
case "-ox": case "-ox":
case "--output-xml": case "--output-xml":
outputFormat |= OutputFormat.Logiqx; outputFormat |= OutputFormat.Logiqx;
break; break;
case "-post":
case "--postfix":
i++;
postfix = args[i];
break;
case "-pre":
case "--prefix":
i++;
prefix = args[i];
break;
case "-q": case "-q":
case "--quotes": case "--quotes":
quotes = true; quotes = true;
@@ -320,26 +458,66 @@ namespace SabreTools
case "--rev-cascade": case "--rev-cascade":
diffMode |= DiffMode.ReverseCascade; diffMode |= DiffMode.ReverseCascade;
break; break;
case "-rd":
case "--root-dir":
i++;
root = args[i];
break;
case "-re": case "-re":
case "--restore": case "--restore":
restore = true; restore = true;
break; break;
case "-rep":
case "--rep-ext":
i++;
repext = args[i];
break;
case "-rme": case "-rme":
case "--rem-ext": case "--rem-ext":
remext = true; remext = true;
break; break;
case "-rn":
case "--rom-name":
i++;
romname = args[i];
break;
case "-ro": case "-ro":
case "--romba": case "--romba":
romba = true; romba = true;
break; break;
case "-root":
case "--root":
i++;
rootdir = args[i];
break;
case "-rt":
case "--rom-type":
i++;
romtype = args[i];
break;
case "-sd": case "-sd":
case "--superdat": case "--superdat":
superdat = true; superdat = true;
break; break;
case "-seq":
case "--equal":
i++;
seq = GetSizeFromString(args[i]);
break;
case "-sf": case "-sf":
case "--skip": case "--skip":
skip = true; skip = true;
break; break;
case "-sgt":
case "--greater":
i++;
sgt = GetSizeFromString(args[i]);
break;
case "-sha1":
case "--sha1":
i++;
sha1 = args[i];
break;
case "-si": case "-si":
case "--single": case "--single":
single = true; single = true;
@@ -348,10 +526,20 @@ namespace SabreTools
case "--softlist": case "--softlist":
softlist = true; softlist = true;
break; break;
case "-slt":
case "--less":
i++;
slt = GetSizeFromString(args[i]);
break;
case "-st": case "-st":
case "--stats": case "--stats":
stats = true; stats = true;
break; break;
case "-t":
case "--temp":
i++;
tempDir = args[i];
break;
case "-trim": case "-trim":
case "--trim": case "--trim":
trim = true; trim = true;
@@ -364,164 +552,218 @@ namespace SabreTools
case "--tsv": case "--tsv":
statOutputFormat = StatOutputFormat.TSV; statOutputFormat = StatOutputFormat.TSV;
break; break;
case "-u":
case "-url":
case "--url":
i++;
url = args[i];
break;
case "-ud": case "-ud":
case "--update": case "--update":
update = true; update = true;
break; break;
case "-v":
case "--version":
i++;
version = args[i];
break;
case "-xof": case "-xof":
case "--exclude-of": case "--exclude-of":
excludeOf = true; excludeOf = true;
break; break;
default: default:
string temparg = arg.Replace("\"", "").Replace("file://", ""); string temparg = args[i].Replace("\"", "").Replace("file://", "");
if (temparg.StartsWith("-ae=") || temparg.StartsWith("--add-ext=")) if (temparg.StartsWith("-") && temparg.Contains("="))
{ {
addext = temparg.Split('=')[1] ?? ""; // Split the argument
} string[] split = temparg.Split('=');
else if (temparg.StartsWith("-au=") || temparg.StartsWith("--author=")) if (split[1] == null)
{ {
author = temparg.Split('=')[1] ?? ""; split[1] = "";
} }
else if (temparg.StartsWith("-ca=") || temparg.StartsWith("--category="))
{ switch (split[0])
category = temparg.Split('=')[1] ?? ""; {
} case "-ae":
else if (temparg.StartsWith("-co=") || temparg.StartsWith("--comment=")) case "--add-ext":
{ addext = split[1];
comment = temparg.Split('=')[1] ?? ""; break;
} case "-au":
else if (temparg.StartsWith("-crc=") || temparg.StartsWith("--crc=")) case "--author":
{ author = split[1];
crc = temparg.Split('=')[1] ?? ""; break;
} case "-ca":
else if (temparg.StartsWith("-da=") || temparg.StartsWith("--date=")) case "--category=":
{ category = split[1];
date = temparg.Split('=')[1] ?? ""; break;
} case "-co":
else if (temparg.StartsWith("-de=") || temparg.StartsWith("--desc=")) case "--comment":
{ comment = split[1];
description = temparg.Split('=')[1] ?? ""; break;
} case "-crc":
else if (temparg.StartsWith("-em=") || temparg.StartsWith("--email=")) case "--crc":
{ crc = split[1];
email = temparg.Split('=')[1] ?? ""; break;
} case "-da":
else if (temparg.StartsWith("-exta=")) case "--date":
{ date = split[1];
exta = temparg.Split('=')[1] ?? ""; break;
} case "-de":
else if (temparg.StartsWith("-extb=")) case "--desc":
{ description = split[1];
extb = temparg.Split('=')[1] ?? ""; break;
} case "-em":
else if (temparg.StartsWith("-f=") || temparg.StartsWith("--filename=")) case "--email":
{ email = split[1];
filename = temparg.Split('=')[1] ?? ""; break;
} case "-exta":
else if (temparg.StartsWith("-fm=") || temparg.StartsWith("--forcemerge=")) case "--exta":
{ exta = split[1];
forcemerge = temparg.Split('=')[1] ?? ""; break;
} case "-extb":
else if (temparg.StartsWith("-fn=") || temparg.StartsWith("--forcend=")) case "--extb":
{ extb = split[1];
forcend = temparg.Split('=')[1] ?? ""; break;
} case "-f":
else if (temparg.StartsWith("-fp=") || temparg.StartsWith("--forcepack=")) case "--filename":
{ filename = split[1];
forcepack = temparg.Split('=')[1] ?? ""; break;
} case "-fm":
else if (temparg.StartsWith("-gn=") || temparg.StartsWith("--game-name=")) case "--forcemerge":
{ forcemerge = split[1];
gamename = temparg.Split('=')[1] ?? ""; break;
} case "-fn":
else if (temparg.StartsWith("-h=") || temparg.StartsWith("--header=")) case "--forcend":
{ forcend = split[1];
header = temparg.Split('=')[1] ?? ""; break;
} case "-fp":
else if (temparg.StartsWith("-hp=") || temparg.StartsWith("--homepage=")) case "--forcepack":
{ forcepack = split[1];
homepage = temparg.Split('=')[1] ?? ""; break;
} case "-gn":
else if (temparg.StartsWith("-input=")) case "--game-name":
{ gamename = split[1];
inputs.Add(temparg.Split('=')[1] ?? ""); break;
} case "-h":
else if (temparg.StartsWith("-is=") || temparg.StartsWith("--status=")) case "--header":
{ header = split[1];
status = temparg.Split('=')[1] ?? ""; break;
} case "-hp":
else if (temparg.StartsWith("-md5=") || temparg.StartsWith("--md5=")) case "--homepage":
{ homepage = split[1];
md5 = temparg.Split('=')[1] ?? ""; break;
} case "-input":
else if (temparg.StartsWith("-mt=") || temparg.StartsWith("--mt=")) case "--input":
{ if (File.Exists(split[1]) || Directory.Exists(split[1]))
Int32.TryParse(temparg.Split('=')[1] ?? "", out maxParallelism); {
} inputs.Add(split[1]);
else if (temparg.StartsWith("-n=") || temparg.StartsWith("--name=")) }
{ else
name = temparg.Split('=')[1] ?? ""; {
} _logger.Error("Invalid input detected: " + args[i]);
else if (temparg.StartsWith("-out=") || temparg.StartsWith("--out=")) Console.WriteLine();
{ Build.Help();
outDir = temparg.Split('=')[1] ?? ""; Console.WriteLine();
} _logger.Error("Invalid input detected: " + args[i]);
else if (temparg.StartsWith("-post=") || temparg.StartsWith("--postfix=")) _logger.Close();
{ return;
postfix = temparg.Split('=')[1] ?? ""; }
} break;
else if (temparg.StartsWith("-pre=") || temparg.StartsWith("--prefix=")) case "-is":
{ case "--status":
prefix = temparg.Split('=')[1] ?? ""; status = split[1];
} break;
else if (temparg.StartsWith("-r=") || temparg.StartsWith("--root=")) case "-md5":
{ case "--md5":
rootdir = temparg.Split('=')[1] ?? ""; md5 = split[1];
} break;
else if (temparg.StartsWith("-rd=") || temparg.StartsWith("--root-dir=")) case "-mt":
{ case "--mt":
root = temparg.Split('=')[1] ?? ""; Int32.TryParse(split[1], out maxParallelism);
} break;
else if (temparg.StartsWith("-re=") || temparg.StartsWith("--rep-ext=")) case "-n":
{ case "--name":
repext = temparg.Split('=')[1] ?? ""; name = split[1];
} break;
else if (temparg.StartsWith("-rn=") || temparg.StartsWith("--rom-name=")) case "-out":
{ case "--out":
romname = temparg.Split('=')[1] ?? ""; outDir = split[1];
} break;
else if (temparg.StartsWith("-rt=") || temparg.StartsWith("--rom-type=")) case "-post":
{ case "--postfix":
romtype = temparg.Split('=')[1] ?? ""; postfix = split[1];
} break;
else if (temparg.StartsWith("-seq=") || temparg.StartsWith("--equal=")) case "-pre":
{ case "--prefix":
seq = GetSizeFromString(temparg.Split('=')[1] ?? ""); prefix = split[1];
} break;
else if (temparg.StartsWith("-sgt=") || temparg.StartsWith("--greater=")) case "-r":
{ case "--root":
sgt = GetSizeFromString(temparg.Split('=')[1] ?? ""); rootdir = split[1];
} break;
else if (temparg.StartsWith("-sha1=") || temparg.StartsWith("--sha1=")) case "-rd":
{ case "--root-dir":
sha1 = temparg.Split('=')[1] ?? ""; root = split[1];
} break;
else if (temparg.StartsWith("-slt=") || temparg.StartsWith("--less=")) case "-re":
{ case "--rep-ext":
slt = GetSizeFromString(temparg.Split('=')[1] ?? ""); repext = split[1];
} break;
else if (temparg.StartsWith("-t=") || temparg.StartsWith("--temp=")) case "-rn":
{ case "--rom-name":
tempDir = temparg.Split('=')[1] ?? ""; romname = split[1];
} break;
else if (temparg.StartsWith("-u=") || temparg.StartsWith("-url=") || temparg.StartsWith("--url=")) case "-rt":
{ case "--rom-type":
url = temparg.Split('=')[1] ?? ""; romtype = split[1];
} break;
else if (temparg.StartsWith("-v=") || temparg.StartsWith("--version=")) case "-seq":
{ case "--equal":
version = temparg.Split('=')[1] ?? ""; seq = GetSizeFromString(split[1]);
break;
case "-sgt":
case "--greater":
sgt = GetSizeFromString(split[1]);
break;
case "-sha1":
case "--sha1":
sha1 = split[1];
break;
case "-slt":
case "--less":
slt = GetSizeFromString(split[1]);
break;
case "-t":
case "--temp":
tempDir = split[1];
break;
case "-u":
case "-url":
case "--url":
url = split[1];
break;
case "-v":
case "--version":
version = split[1];
break;
default:
if (File.Exists(temparg) || Directory.Exists(temparg))
{
inputs.Add(temparg);
}
else
{
_logger.Error("Invalid input detected: " + args[i]);
Console.WriteLine();
Build.Help();
Console.WriteLine();
_logger.Error("Invalid input detected: " + args[i]);
_logger.Close();
return;
}
break;
}
} }
else if (File.Exists(temparg) || Directory.Exists(temparg)) else if (File.Exists(temparg) || Directory.Exists(temparg))
{ {
@@ -529,11 +771,11 @@ namespace SabreTools
} }
else else
{ {
_logger.Error("Invalid input detected: " + arg); _logger.Error("Invalid input detected: " + args[i]);
Console.WriteLine(); Console.WriteLine();
Build.Help(); Build.Help();
Console.WriteLine(); Console.WriteLine();
_logger.Error("Invalid input detected: " + arg); _logger.Error("Invalid input detected: " + args[i]);
_logger.Close(); _logger.Close();
return; return;
} }

View File

@@ -62,15 +62,23 @@ namespace SabreTools
List<string> datfiles = new List<string>(); List<string> datfiles = new List<string>();
// Determine which switches are enabled (with values if necessary) // Determine which switches are enabled (with values if necessary)
foreach (string arg in args) for (int i = 0; i < args.Length; i++)
{ {
switch (arg) switch (args[i])
{ {
case "-?": case "-?":
case "-h": case "-h":
case "--help": case "--help":
help = true; help = true;
break; break;
case "-7z":
case "--7z":
i++;
if (!Int32.TryParse(args[i], out sevenzip))
{
sevenzip = 0;
}
break;
case "-ad": case "-ad":
case "--add-date": case "--add-date":
date = true; date = true;
@@ -83,10 +91,36 @@ namespace SabreTools
case "--delete": case "--delete":
delete = true; delete = true;
break; break;
case "-dat":
case "--dat":
i++;
if (!File.Exists(args[i]))
{
logger.Error("DAT must be a valid file: " + args[i]);
Console.WriteLine();
Build.Help();
logger.Close();
return;
}
datfiles.Add(args[i]);
break;
case "-do": case "-do":
case "--directory": case "--directory":
toFolder = true; toFolder = true;
break; break;
case "-gz":
case "--gz":
i++;
if (!Int32.TryParse(args[i], out gz))
{
gz = 2;
}
break;
case "-out":
case "--out":
i++;
outDir = args[i];
break;
case "-qs": case "-qs":
case "--quick": case "--quick":
quickScan = true; quickScan = true;
@@ -95,6 +129,19 @@ namespace SabreTools
case "--romba": case "--romba":
romba = true; romba = true;
break; break;
case "-rar":
case "--rar":
i++;
if (!Int32.TryParse(args[i], out rar))
{
rar = 2;
}
break;
case "-t":
case "--temp":
i++;
tempDir = args[i];
break;
case "-tgz": case "-tgz":
case "--tgz": case "--tgz":
tgz = true; tgz = true;
@@ -107,56 +154,92 @@ namespace SabreTools
case "--verify": case "--verify":
verify = true; verify = true;
break; break;
case "-zip":
case "--zip":
i++;
if (!Int32.TryParse(args[i], out zip))
{
zip = 0;
}
break;
default: default:
string temparg = arg.Replace("\"", "").Replace("file://", ""); string temparg = args[i].Replace("\"", "").Replace("file://", "");
if (temparg.StartsWith("-7z=") || temparg.StartsWith("--7z=")) if (temparg.StartsWith("-") && temparg.Contains("="))
{ {
if (!Int32.TryParse(temparg.Split('=')[1], out sevenzip)) // Split the argument
string[] split = temparg.Split('=');
if (split[1] == null)
{ {
sevenzip = 0; split[1] = "";
} }
}
else if (temparg.StartsWith("-dat=") || temparg.StartsWith("--dat=")) switch (split[0])
{
string datfile = temparg.Split('=')[1];
if (!File.Exists(datfile))
{ {
logger.Error("DAT must be a valid file: " + datfile); case "-7z":
Console.WriteLine(); case "--7z":
Build.Help(); if (!Int32.TryParse(split[1], out sevenzip))
logger.Close(); {
return; sevenzip = 0;
} }
datfiles.Add(datfile); break;
} case "-dat":
else if (temparg.StartsWith("-gz=") || temparg.StartsWith("--gz=")) case "--dat":
{ if (!File.Exists(split[1]))
if (!Int32.TryParse(temparg.Split('=')[1], out gz)) {
{ logger.Error("DAT must be a valid file: " + split[1]);
gz = 2; Console.WriteLine();
} Build.Help();
} logger.Close();
else if (temparg.StartsWith("-out=") || temparg.StartsWith("--out=")) return;
{ }
outDir = temparg.Split('=')[1]; datfiles.Add(split[1]);
} break;
else if (temparg.StartsWith("-rar=") || temparg.StartsWith("--rar=")) case "-gz":
{ case "--gz":
if (!Int32.TryParse(temparg.Split('=')[1], out rar)) if (!Int32.TryParse(split[1], out gz))
{ {
rar = 2; gz = 2;
} }
} break;
else if (temparg.StartsWith("-t=") || temparg.StartsWith("--temp=")) case "-out":
{ case "--out":
tempDir = temparg.Split('=')[1]; outDir = split[1];
} break;
else if (temparg.StartsWith("-zip=") || temparg.StartsWith("--zip=")) case "-rar":
{ case "--rar":
if (!Int32.TryParse(temparg.Split('=')[1], out zip)) if (!Int32.TryParse(split[1], out rar))
{ {
zip = 0; rar = 2;
}
break;
case "-t":
case "--temp":
tempDir = split[1];
break;
case "-zip":
case "--zip":
if (!Int32.TryParse(split[1], out zip))
{
zip = 0;
}
break;
default:
if (File.Exists(temparg) || Directory.Exists(temparg))
{
inputs.Add(temparg);
}
else
{
logger.Error("Invalid input detected: " + args[i]);
Console.WriteLine();
Build.Help();
Console.WriteLine();
logger.Error("Invalid input detected: " + args[i]);
logger.Close();
return;
}
break;
} }
} }
else if (File.Exists(temparg) || Directory.Exists(temparg)) else if (File.Exists(temparg) || Directory.Exists(temparg))
@@ -165,11 +248,11 @@ namespace SabreTools
} }
else else
{ {
logger.Error("Invalid input detected: " + arg); logger.Error("Invalid input detected: " + args[i]);
Console.WriteLine(); Console.WriteLine();
Build.Help(); Build.Help();
Console.WriteLine(); Console.WriteLine();
logger.Error("Invalid input detected: " + arg); logger.Error("Invalid input detected: " + args[i]);
logger.Close(); logger.Close();
return; return;
} }