diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs index 861c5cee..9a051e1d 100644 --- a/SabreTools.Helper/Data/Build.cs +++ b/SabreTools.Helper/Data/Build.cs @@ -148,353 +148,361 @@ namespace SabreTools.Helper.Data case "SabreTools": helptext.Add(Resources.Resources.SabreTools_Name + " - " + Resources.Resources.SabreTools_Desc); helptext.Add(barrier); - helptext.Add(Resources.Resources.Usage + ": " + Resources.Resources.SabreTools_Name + " [option] [filename|dirname] ..."); + helptext.Add(Resources.Resources.Usage + ": " + Resources.Resources.SabreTools_Name + " [option] [flags] [filename|dirname] ..."); helptext.Add(""); - helptext.Add("Options:"); - helptext.Add(" -?, -h, --help Show this help"); - helptext.Add(" --script Enable script mode (no clear screen)"); - // DATFromDir - if (subset == null || subset == "d" || subset == "dfd" || subset == "d2d") + // Determine which help to show + switch (subset) { - helptext.Add(""); - helptext.Add(" -d, --dfd, --d2d Create a DAT from an input directory"); - helptext.Add(" -nm, --noMD5 Don't include MD5 in output"); - helptext.Add(" -ns, --noSHA1 Don't include SHA1 in output"); - helptext.Add(" -b, --bare Don't include date in file name"); - helptext.Add(" -fp=, --forcepack= Set force packing"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Zip, Unzip"); - helptext.Add(" -f, --files Treat archives as files"); - helptext.Add(" -oa, --output-all Output in all formats"); - helptext.Add(" -oam, --output-am Output in AttractMode format"); - helptext.Add(" -oc, --output-cmp Output in CMP format"); - helptext.Add(" -ocsv, --output-csv Output in CSV format"); - helptext.Add(" -od, --output-dc Output in DOSCenter format"); - helptext.Add(" -om, --output-miss Output in Missfile format"); - helptext.Add(" -omd5, --output-md5 Output in MD5 format"); - helptext.Add(" -ool, --output-ol Output in OfflineList format"); - helptext.Add(" -or, --output-rc Output in RomCenter format"); - helptext.Add(" -os, --output-sd Output in SabreDAT format"); - helptext.Add(" -osfv, --ouput-sfv Output in SFV format"); - helptext.Add(" -osha1, --output-sha1 Output in SHA-1 format"); - helptext.Add(" -osl, --output-sl Output in Softwarelist format"); - helptext.Add(" -otsv, --output-tsv Output in TSV format"); - helptext.Add(" -ox, --output-xml Output in Logiqx XML format [default]"); - helptext.Add(" -gzf, --gz-files Allow reading of GZIP files as archives"); - helptext.Add(" -ro, --romba Read files from a Romba input"); - helptext.Add(" -f=, --filename= Set the external name of the DAT"); - helptext.Add(" -n=, --name= Set the internal name of the DAT"); - helptext.Add(" -de=, --desc= Set the description of the DAT"); - helptext.Add(" -c=, --cat= Set the category of the DAT"); - helptext.Add(" -v=, --version= Set the version of the DAT"); - helptext.Add(" -au=, --author= Set the author of the DAT"); - helptext.Add(" -sd, --superdat Enable SuperDAT creation"); - helptext.Add(" -xof, --exclude-of Exclude romof, cloneof, sampleof tags"); - helptext.Add(" -ab, --add-blank Output blank files for folders"); - helptext.Add(" -ad, --add-date Output dates for each file parsed"); - helptext.Add(" -cf, --copy-files Copy files to the temp directory before parsing"); - helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); - helptext.Add(" -t=, --temp= Set the temporary directory to use"); - helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); - } - + case null: + helptext.Add("Options:"); + helptext.Add(" -?, -h, --help Show this help"); + helptext.Add(" --script Enable script mode (no clear screen)"); + helptext.Add(" -d, --dfd, --d2d Create a DAT from an input directory"); + helptext.Add(" -es, --ext-split Split a DAT by two file extensions"); + helptext.Add(" -ex, --extract Extract and remove copier headers"); + helptext.Add(" -hs, --hash-split Split a DAT or folder by best-available hashes"); + helptext.Add(" -ls, --lvl-split Split a SuperDAT or folder by internal path"); + helptext.Add(" -re, --restore Restore header to file based on SHA-1"); + helptext.Add(" -ss, --sort Sort input files by a set of DATs"); + helptext.Add(" -ssd, --sort-depot Sort input files by a set of DATs"); + helptext.Add(" -st, --stats Get statistics on all input DATs"); + helptext.Add(" -ts, --type-split Split a DAT or folder by file types (rom/disk)"); + helptext.Add(" -ud, --update Update a DAT file"); + helptext.Add(" -ve, --verify Verify a folder against DATs"); + helptext.Add(" -ved, --verify-depot Verify a folder against DATs"); + helptext.Add(""); + helptext.Add("For information on available flags, put the option name after help"); + break; - // Extension Split - if (subset == null || subset == "es" || subset == "ext-split") - { - helptext.Add(""); - helptext.Add(" -es, --ext-split Split a DAT by two file extensions"); - helptext.Add(" -exta= First set of extensions (comma-separated)"); - helptext.Add(" -extb= Second set of extensions (comma-separated)"); - helptext.Add(" -out= Output directory"); - } + //DATFromDir + case "d": + case "d2d": + case "dfd": + helptext.Add("Available Flags:"); + helptext.Add(" -nm, --noMD5 Don't include MD5 in output"); + helptext.Add(" -ns, --noSHA1 Don't include SHA1 in output"); + helptext.Add(" -b, --bare Don't include date in file name"); + helptext.Add(" -fp=, --forcepack= Set force packing"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Zip, Unzip"); + helptext.Add(" -f, --files Treat archives as files"); + helptext.Add(" -oa, --output-all Output in all formats"); + helptext.Add(" -oam, --output-am Output in AttractMode format"); + helptext.Add(" -oc, --output-cmp Output in CMP format"); + helptext.Add(" -ocsv, --output-csv Output in CSV format"); + helptext.Add(" -od, --output-dc Output in DOSCenter format"); + helptext.Add(" -om, --output-miss Output in Missfile format"); + helptext.Add(" -omd5, --output-md5 Output in MD5 format"); + helptext.Add(" -ool, --output-ol Output in OfflineList format"); + helptext.Add(" -or, --output-rc Output in RomCenter format"); + helptext.Add(" -os, --output-sd Output in SabreDAT format"); + helptext.Add(" -osfv, --ouput-sfv Output in SFV format"); + helptext.Add(" -osha1, --output-sha1 Output in SHA-1 format"); + helptext.Add(" -osl, --output-sl Output in Softwarelist format"); + helptext.Add(" -otsv, --output-tsv Output in TSV format"); + helptext.Add(" -ox, --output-xml Output in Logiqx XML format [default]"); + helptext.Add(" -gzf, --gz-files Allow reading of GZIP files as archives"); + helptext.Add(" -ro, --romba Read files from a Romba input"); + helptext.Add(" -f=, --filename= Set the external name of the DAT"); + helptext.Add(" -n=, --name= Set the internal name of the DAT"); + helptext.Add(" -de=, --desc= Set the description of the DAT"); + helptext.Add(" -c=, --cat= Set the category of the DAT"); + helptext.Add(" -v=, --version= Set the version of the DAT"); + helptext.Add(" -au=, --author= Set the author of the DAT"); + helptext.Add(" -sd, --superdat Enable SuperDAT creation"); + helptext.Add(" -xof, --exclude-of Exclude romof, cloneof, sampleof tags"); + helptext.Add(" -ab, --add-blank Output blank files for folders"); + helptext.Add(" -ad, --add-date Output dates for each file parsed"); + helptext.Add(" -cf, --copy-files Copy files to the temp directory before parsing"); + helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); + helptext.Add(" -t=, --temp= Set the temporary directory to use"); + helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); + break; - // Extract and Remove Headers - if (subset == null || subset == "ex" || subset == "extract") - { - helptext.Add(""); - helptext.Add(" -ex, --extract Extract and remove copier headers"); - helptext.Add(" -out= Output directory"); - } + // Extension Split + case "es": + case "ext-split": + helptext.Add("Available Flags:"); + helptext.Add(" -exta= First extension (multiple allowed)"); + helptext.Add(" -extb= Second extension (multiple allowed)"); + helptext.Add(" -out= Output directory"); + break; - // Hash Split - if (subset == null || subset == "hs" || subset == "hash-split") - { - helptext.Add(""); - helptext.Add(" -hs, --hash-split Split a DAT or folder by best-available hashes"); - helptext.Add(" -out= Output directory"); - } + // Extract and Remove Headers + case "ex": + case "extract": + helptext.Add("Available Flags:"); + helptext.Add(" -out= Output directory"); + break; - // Level/SuperDAT Split - if (subset == null || subset == "ls" || subset == "lvl-split") - { - helptext.Add(""); - helptext.Add(" -ls, --lvl-split Split a SuperDAT or folder by internal path"); - helptext.Add(" -out= Output directory"); - helptext.Add(" -s, --short Use short output names"); - helptext.Add(" -ba, --base Use source DAT as base name for outputs"); - } + // Hash Split + case "hs": + case "hash-split": + helptext.Add("Available Flags:"); + helptext.Add(" -out= Output directory"); + break; - // Restore Headers - if (subset == null || subset == "re" || subset == "restore") - { - helptext.Add(""); - helptext.Add(" -re, --restore Restore header to file based on SHA-1"); - helptext.Add(" -out= Output directory"); - } + // Level/SuperDAT Split + case "ls": + case "lvl-split": + helptext.Add("Available Flags:"); + helptext.Add(" -out= Output directory"); + helptext.Add(" -s, --short Use short output names"); + helptext.Add(" -ba, --base Use source DAT as base name for outputs"); + break; - // Sort - if (subset == null || subset == "ss" || subset == "sort") - { - helptext.Add(""); - helptext.Add(" -ss, --sort Sort input files by a set of DATs"); - helptext.Add(" -dat= Input DAT to rebuild against"); - helptext.Add(" -out= Output directory"); - helptext.Add(" -t=, --temp= Set the temporary directory to use"); - helptext.Add(" -del, --delete Delete fully rebuilt input files"); - helptext.Add(" -in, --inverse Rebuild only files not in DAT"); - helptext.Add(" -qs, --quick Enable quick scanning of archives"); - helptext.Add(" -ad, --add-date Add original dates from DAT, if possible"); - //helptext.Add(" -t7z Enable Torrent7z output"); - helptext.Add(" -tar Enable TAR output"); - helptext.Add(" -tgz Enable TorrentGZ output"); - helptext.Add(" -r, --romba Enable Romba depot dir output"); - //helptext.Add(" -tlrz Enable TorrentLRZ output"); - //helptext.Add(" -trar Enable TorrentRAR output"); - //helptext.Add(" -txz Enable TorrentXZ output"); - helptext.Add(" -tzip Enable TorrentZip output"); - helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); - helptext.Add(" -7z={1} Set scanning level for 7z archives"); - helptext.Add(" -gz={2} Set scanning level for GZip archives"); - helptext.Add(" -rar={2} Set scanning level for RAR archives"); - helptext.Add(" -zip={1} Set scanning level for ZIP archives"); - helptext.Add(" -ud, --update-dat Output updated DAT to output directory"); - helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); - } + // Restore Headers + case "re": + case "restore": + helptext.Add("Available Flags:"); + helptext.Add(" -out= Output directory"); + break; - // Sort Depot - if (subset == null || subset == "ssd" || subset == "sort-depot") - { - helptext.Add(""); - helptext.Add(" -ssd, --sort-depot Sort input files by a set of DATs"); - helptext.Add(" -dat= Input DAT to rebuild against"); - helptext.Add(" -out= Output directory"); - helptext.Add(" -t=, --temp= Set the temporary directory to use"); - helptext.Add(" -del, --delete Delete fully rebuilt input files"); - helptext.Add(" -in, --inverse Rebuild only files not in DAT"); - helptext.Add(" -ad, --add-date Add original dates from DAT, if possible"); - //helptext.Add(" -t7z Enable Torrent7z output"); - helptext.Add(" -tar Enable TAR output"); - helptext.Add(" -tgz Enable TorrentGZ output"); - helptext.Add(" -r, --romba Enable Romba depot dir output"); - //helptext.Add(" -tlrz Enable TorrentLRZ output"); - //helptext.Add(" -trar Enable TorrentRAR output"); - //helptext.Add(" -txz Enable TorrentXZ output"); - helptext.Add(" -tzip Enable TorrentZip output"); - helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); - helptext.Add(" -ud, --update-dat Output updated DAT to output directory"); - helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); - } + // Sort + case "ss": + case "sort": + helptext.Add("Available Flags:"); + helptext.Add(" -dat= Input DAT to rebuild against"); + helptext.Add(" -out= Output directory"); + helptext.Add(" -t=, --temp= Set the temporary directory to use"); + helptext.Add(" -del, --delete Delete fully rebuilt input files"); + helptext.Add(" -in, --inverse Rebuild only files not in DAT"); + helptext.Add(" -qs, --quick Enable quick scanning of archives"); + helptext.Add(" -ad, --add-date Add original dates from DAT, if possible"); + //helptext.Add(" -t7z Enable Torrent7z output"); + helptext.Add(" -tar Enable TAR output"); + helptext.Add(" -tgz Enable TorrentGZ output"); + helptext.Add(" -r, --romba Enable Romba depot dir output"); + //helptext.Add(" -tlrz Enable TorrentLRZ output"); + //helptext.Add(" -trar Enable TorrentRAR output"); + //helptext.Add(" -txz Enable TorrentXZ output"); + helptext.Add(" -tzip Enable TorrentZip output"); + helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); + helptext.Add(" -7z={1} Set scanning level for 7z archives"); + helptext.Add(" -gz={2} Set scanning level for GZip archives"); + helptext.Add(" -rar={2} Set scanning level for RAR archives"); + helptext.Add(" -zip={1} Set scanning level for ZIP archives"); + helptext.Add(" -ud, --update-dat Output updated DAT to output directory"); + helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); - // Stats - if (subset == null || subset == "st" || subset == "stats") - { - helptext.Add(""); - helptext.Add(" -st, --stats Get statistics on all input DATs"); - helptext.Add(" -bc, --baddump-col Add baddump stats to output"); - helptext.Add(" -csv, --csv Output in Comma-Separated Value format"); - helptext.Add(" -f=, --filename= Set the filename for the output"); - helptext.Add(" -out= Output directory"); - helptext.Add(" -html, --html Output in HTML format"); - helptext.Add(" -nc, --nodump-col Add nodump stats to output"); - helptext.Add(" -si, --single Show individual statistics"); - helptext.Add(" -tsv, --tsv Output in Tab-Separated Value format"); - } - - // Type Split - if (subset == null || subset == "ts" || subset == "type-split") - { - helptext.Add(""); - helptext.Add(" -ts, --type-split Split a DAT or folder by file types (rom/disk)"); - helptext.Add(" -out= Output directory"); - } - - // Update - if (subset == null || subset == "ud" || subset == "update") - { - helptext.Add(""); - helptext.Add(" -ud, --update Update a DAT file"); - helptext.Add(" -oa, --output-all Output in all formats"); - helptext.Add(" -oam, --output-am Output in AttractMode format"); - helptext.Add(" -oc, --output-cmp Output in CMP format"); - helptext.Add(" -ocsv, --output-csv Output in CSV format"); - helptext.Add(" -pre=, --prefix= Set prefix for all lines"); - helptext.Add(" -post=, --postfix= Set postfix for all lines"); - helptext.Add(" -q, --quotes Put double-quotes around each item"); - helptext.Add(" -od, --output-dc Output in DOSCenter format"); - helptext.Add(" -om, --output-miss Output in Missfile format"); - helptext.Add(" -r, --roms Output roms to miss instead of sets"); - helptext.Add(" -gp, --game-prefix Add game name as a prefix"); - helptext.Add(" -pre=, --prefix= Set prefix for all lines"); - helptext.Add(" -post=, --postfix= Set postfix for all lines"); - helptext.Add(" -q, --quotes Put double-quotes around each item"); - helptext.Add(" -ae=, --add-ext= Add an extension to each item"); - helptext.Add(" -rep=, --rep-ext= Replace all extensions with specified"); - helptext.Add(" -rme, --rem-ext Remove all extensions from each item"); - helptext.Add(" -ro, --romba Output in Romba format (requires SHA-1)"); - helptext.Add(" -tsv, --tsv Output in Tab-Separated Value format"); - helptext.Add(" -csv, --csv Output in Comma-Separated Value format"); - helptext.Add(" -omd5, --output-md5 Output in MD5 format"); - helptext.Add(" -gp, --game-prefix Add game name as a prefix"); - helptext.Add(" -ool, --output-ol Output in OfflineList format"); - helptext.Add(" -or, --output-rc Output in RomCenter format"); - helptext.Add(" -os, --output-sd Output in SabreDAT format"); - helptext.Add(" -osfv, --ouput-sfv Output in SFV format"); - helptext.Add(" -gp, --game-prefix Add game name as a prefix"); - helptext.Add(" -osha1, --output-sha1 Output in SHA-1 format"); - helptext.Add(" -gp, --game-prefix Add game name as a prefix"); - helptext.Add(" -osl, --output-sl Output in Softwarelist format"); - helptext.Add(" -otsv, --output-tsv Output in TSV format"); - helptext.Add(" -pre=, --prefix= Set prefix for all lines"); - helptext.Add(" -post=, --postfix= Set postfix for all lines"); - helptext.Add(" -q, --quotes Put double-quotes around each item"); - helptext.Add(" -ox, --output-xml Output in Logiqx XML format"); - helptext.Add(" -f=, --filename= Set a new filename"); - helptext.Add(" -n=, --name= Set a new internal name"); - helptext.Add(" -de=, --desc= Set a new description"); - helptext.Add(" -r=, --root= Set a new rootdir"); - helptext.Add(" -ca=, --category= Set a new category"); - helptext.Add(" -v=, --version= Set a new version"); - helptext.Add(" -da=, --date= Set a new date"); - helptext.Add(" -au=, --author= Set a new author"); - helptext.Add(" -em=, --email= Set a new email"); - helptext.Add(" -hp=, --homepage= Set a new homepage"); - helptext.Add(" -u=, --url= Set a new URL"); - helptext.Add(" -co=, --comment= Set a new comment"); - helptext.Add(" -h=, --header= Set a new header skipper"); - helptext.Add(" -sd=, --superdat Set SuperDAT type"); - helptext.Add(" -fm=, --forcemerge= Set force merging"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Split, Full"); - helptext.Add(" -fn=, --forcend= Set force nodump"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Obsolete, Required, Ignore"); - helptext.Add(" -fp=, --forcepack= Set force packing"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Zip, Unzip"); - helptext.Add(" -xof, --exclude-of Exclude romof, cloneof, sampleof tags"); - helptext.Add(" -clean Clean game names according to WoD standards"); - helptext.Add(" -sl, --softlist Use Software List name instead of description"); - helptext.Add(" -dm, --dat-merged Create merged sets"); - helptext.Add(" -ds, --dat-split Create split sets"); - helptext.Add(" -dnm, --dat-nonmerged Create non-merged sets"); - helptext.Add(" -df, --dat-fullnonmerged Create fully non-merged sets"); - helptext.Add(" -trim Trim file names to fit NTFS length"); - helptext.Add(" -rd=, --root-dir= Set the root directory for calc"); - helptext.Add(" -si, --single All game names replaced by '!'"); - helptext.Add(" -dd, --dedup Enable deduping in the created DAT"); - helptext.Add(" -m, --merge Merge the input DATs"); - helptext.Add(" -b, --bare Don't include date in automatic name"); - helptext.Add(" -di, --diff Create diffdats from inputs (all outputs)"); - helptext.Add(" -b, --bare Don't include date in automatic name"); - helptext.Add(" -c, --cascade Enable cascaded diffing"); - helptext.Add(" -ip, --inplace Enable inplace, cascaded diff"); - helptext.Add(" -sf, --skip Skip output of first DAT"); - helptext.Add(" -rc, --rev-cascade Enable reverse cascaded diffing"); - helptext.Add(" -ip, --inplace Enable inplace, cascaded diff"); - helptext.Add(" -sf, --skip Skip output of first DAT"); - helptext.Add(" -did, --diff-du Create diffdat containing just duplicates"); - helptext.Add(" [Can be used with other -diX flags]"); - helptext.Add(" -b, --bare Don't include date in automatic name"); - helptext.Add(" -dii, --diff-in Create diffdats for individual DATs"); - helptext.Add(" [Can be used with other -diX flags]"); - helptext.Add(" -b, --bare Don't include date in automatic name"); - helptext.Add(" -din, --diff-nd Create diffdat containing no duplicates"); - helptext.Add(" [Can be used with other -diX flags]"); - helptext.Add(" -b, --bare Don't include date in automatic name"); - helptext.Add(" -gn=, --game-name= Filter by game name"); - helptext.Add(" -ngn=, --not-game= Filter by not game name"); - helptext.Add(" -rn=, --rom-name= Filter by rom name"); - helptext.Add(" -nrn=, --not-rom= Filter by not rom name"); - helptext.Add(" -rt=, --rom-type= Filter by rom type"); - helptext.Add(" -nrt=, --not-type= Filter by not rom type"); - helptext.Add(" -sgt=, --greater= Filter by size >="); - helptext.Add(" -slt=, --less= Filter by size <="); - helptext.Add(" -seq=, --equal= Filter by size =="); - helptext.Add(" -crc=, --crc= Filter by CRC hash"); - helptext.Add(" -ncrc=, --not-crc= Filter by not CRC hash"); - helptext.Add(" -md5=, --md5= Filter by MD5 hash"); - helptext.Add(" -nmd5=, --not-md5= Filter by not MD5 hash"); - helptext.Add(" -sha1=, --sha1= Filter by SHA-1 hash"); - helptext.Add(" -nsha1=, --not-sha1= Filter by not SHA-1 hash"); - helptext.Add(" -is=, --status= Include only items with a given status"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Good, BadDump, Nodump, Verified"); - helptext.Add(" -nis=, --not-status= Exclude items with a given status"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Good, BadDump, Nodump, Verified"); - helptext.Add(" -gt=, --game-type= Include only games with a given type"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Bios, Device, Mechanical"); - helptext.Add(" -ngt=, --not-gtype= Exclude only games with a given type"); - helptext.Add(" Supported values are:"); - helptext.Add(" None, Bios, Device, Mechanical"); - helptext.Add(" -run, --runnable Include only items that are marked runnable"); - helptext.Add(" -nrun, --not-run Include only items that are marked unrunnable"); - helptext.Add(" -out= Output directory (overridden by --inplace)"); - helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); - } - - // Verify - if (subset == null || subset == "ve" || subset == "verify") - { - helptext.Add(""); - helptext.Add(" -ve, --verify Verify a folder against DATs"); - helptext.Add(" -dat= Input DAT to verify against"); - helptext.Add(" -t=, --temp= Set the temporary directory to use"); - helptext.Add(" -ho, --hash-only Check files by hash only"); - helptext.Add(" -qs, --quick Enable quick scanning of archives"); - helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); - } - - // Verify Depot - if (subset == null || subset == "ved" || subset == "verify-depot") - { - helptext.Add(""); - helptext.Add(" -ved, --verify-depot Verify a folder against DATs"); - helptext.Add(" -dat= Input DAT to verify against"); - helptext.Add(" -t=, --temp= Set the temporary directory to use"); - helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); - } - - // Additional notes - if (subset == null || subset == "ss" || subset == "sort") - { - helptext.Add(""); - helptext.Add("Archive scanning levels:"); + helptext.Add(""); + helptext.Add("Archive scanning levels:"); helptext.Add(" 0 Hash archive and contents"); helptext.Add(" 1 Only hash contents"); helptext.Add(" 2 Only hash archive"); - } + break; - if (subset == null || subset == "ud" || subset == "update") - { - helptext.Add(""); - helptext.Add("Filter parameters game name, rom name, CRC, MD5, SHA-1 can"); + // Sort Depot + case "ssd": + case "sort-depot": + helptext.Add("Available Flags:"); + helptext.Add(" -dat= Input DAT to rebuild against"); + helptext.Add(" -out= Output directory"); + helptext.Add(" -t=, --temp= Set the temporary directory to use"); + helptext.Add(" -del, --delete Delete fully rebuilt input files"); + helptext.Add(" -in, --inverse Rebuild only files not in DAT"); + helptext.Add(" -ad, --add-date Add original dates from DAT, if possible"); + //helptext.Add(" -t7z Enable Torrent7z output"); + helptext.Add(" -tar Enable TAR output"); + helptext.Add(" -tgz Enable TorrentGZ output"); + helptext.Add(" -r, --romba Enable Romba depot dir output"); + //helptext.Add(" -tlrz Enable TorrentLRZ output"); + //helptext.Add(" -trar Enable TorrentRAR output"); + //helptext.Add(" -txz Enable TorrentXZ output"); + helptext.Add(" -tzip Enable TorrentZip output"); + helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); + helptext.Add(" -ud, --update-dat Output updated DAT to output directory"); + helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); + break; + + // Stats + case "st": + case "stats": + helptext.Add("Available Flags:"); + helptext.Add(" -bc, --baddump-col Add baddump stats to output"); + helptext.Add(" -csv, --csv Output in Comma-Separated Value format"); + helptext.Add(" -f=, --filename= Set the filename for the output"); + helptext.Add(" -out= Output directory"); + helptext.Add(" -html, --html Output in HTML format"); + helptext.Add(" -nc, --nodump-col Add nodump stats to output"); + helptext.Add(" -si, --single Show individual statistics"); + helptext.Add(" -tsv, --tsv Output in Tab-Separated Value format"); + break; + + // Type Split + case "ts": + case "type-split": + helptext.Add("Available Flags:"); + helptext.Add(" -out= Output directory"); + break; + + // Update + case "ud": + case "update": + helptext.Add("Available Flags:"); + helptext.Add(" -oa, --output-all Output in all formats"); + helptext.Add(" -oam, --output-am Output in AttractMode format"); + helptext.Add(" -oc, --output-cmp Output in CMP format"); + helptext.Add(" -ocsv, --output-csv Output in CSV format"); + helptext.Add(" -pre=, --prefix= Set prefix for all lines"); + helptext.Add(" -post=, --postfix= Set postfix for all lines"); + helptext.Add(" -q, --quotes Put double-quotes around each item"); + helptext.Add(" -od, --output-dc Output in DOSCenter format"); + helptext.Add(" -om, --output-miss Output in Missfile format"); + helptext.Add(" -r, --roms Output roms to miss instead of sets"); + helptext.Add(" -gp, --game-prefix Add game name as a prefix"); + helptext.Add(" -pre=, --prefix= Set prefix for all lines"); + helptext.Add(" -post=, --postfix= Set postfix for all lines"); + helptext.Add(" -q, --quotes Put double-quotes around each item"); + helptext.Add(" -ae=, --add-ext= Add an extension to each item"); + helptext.Add(" -rep=, --rep-ext= Replace all extensions with specified"); + helptext.Add(" -rme, --rem-ext Remove all extensions from each item"); + helptext.Add(" -ro, --romba Output in Romba format (requires SHA-1)"); + helptext.Add(" -tsv, --tsv Output in Tab-Separated Value format"); + helptext.Add(" -csv, --csv Output in Comma-Separated Value format"); + helptext.Add(" -omd5, --output-md5 Output in MD5 format"); + helptext.Add(" -gp, --game-prefix Add game name as a prefix"); + helptext.Add(" -ool, --output-ol Output in OfflineList format"); + helptext.Add(" -or, --output-rc Output in RomCenter format"); + helptext.Add(" -os, --output-sd Output in SabreDAT format"); + helptext.Add(" -osfv, --ouput-sfv Output in SFV format"); + helptext.Add(" -gp, --game-prefix Add game name as a prefix"); + helptext.Add(" -osha1, --output-sha1 Output in SHA-1 format"); + helptext.Add(" -gp, --game-prefix Add game name as a prefix"); + helptext.Add(" -osl, --output-sl Output in Softwarelist format"); + helptext.Add(" -otsv, --output-tsv Output in TSV format"); + helptext.Add(" -pre=, --prefix= Set prefix for all lines"); + helptext.Add(" -post=, --postfix= Set postfix for all lines"); + helptext.Add(" -q, --quotes Put double-quotes around each item"); + helptext.Add(" -ox, --output-xml Output in Logiqx XML format"); + helptext.Add(" -f=, --filename= Set a new filename"); + helptext.Add(" -n=, --name= Set a new internal name"); + helptext.Add(" -de=, --desc= Set a new description"); + helptext.Add(" -r=, --root= Set a new rootdir"); + helptext.Add(" -ca=, --category= Set a new category"); + helptext.Add(" -v=, --version= Set a new version"); + helptext.Add(" -da=, --date= Set a new date"); + helptext.Add(" -au=, --author= Set a new author"); + helptext.Add(" -em=, --email= Set a new email"); + helptext.Add(" -hp=, --homepage= Set a new homepage"); + helptext.Add(" -u=, --url= Set a new URL"); + helptext.Add(" -co=, --comment= Set a new comment"); + helptext.Add(" -h=, --header= Set a new header skipper"); + helptext.Add(" -sd=, --superdat Set SuperDAT type"); + helptext.Add(" -fm=, --forcemerge= Set force merging"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Split, Full"); + helptext.Add(" -fn=, --forcend= Set force nodump"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Obsolete, Required, Ignore"); + helptext.Add(" -fp=, --forcepack= Set force packing"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Zip, Unzip"); + helptext.Add(" -xof, --exclude-of Exclude romof, cloneof, sampleof tags"); + helptext.Add(" -clean Clean game names according to WoD standards"); + helptext.Add(" -sl, --softlist Use Software List name instead of description"); + helptext.Add(" -dm, --dat-merged Create merged sets"); + helptext.Add(" -ds, --dat-split Create split sets"); + helptext.Add(" -dnm, --dat-nonmerged Create non-merged sets"); + helptext.Add(" -df, --dat-fullnonmerged Create fully non-merged sets"); + helptext.Add(" -trim Trim file names to fit NTFS length"); + helptext.Add(" -rd=, --root-dir= Set the root directory for calc"); + helptext.Add(" -si, --single All game names replaced by '!'"); + helptext.Add(" -dd, --dedup Enable deduping in the created DAT"); + helptext.Add(" -m, --merge Merge the input DATs"); + helptext.Add(" -b, --bare Don't include date in automatic name"); + helptext.Add(" -di, --diff Create diffdats from inputs (all outputs)"); + helptext.Add(" -b, --bare Don't include date in automatic name"); + helptext.Add(" -c, --cascade Enable cascaded diffing"); + helptext.Add(" -ip, --inplace Enable inplace, cascaded diff"); + helptext.Add(" -sf, --skip Skip output of first DAT"); + helptext.Add(" -rc, --rev-cascade Enable reverse cascaded diffing"); + helptext.Add(" -ip, --inplace Enable inplace, cascaded diff"); + helptext.Add(" -sf, --skip Skip output of first DAT"); + helptext.Add(" -did, --diff-du Create diffdat containing just duplicates"); + helptext.Add(" [Can be used with other -diX flags]"); + helptext.Add(" -b, --bare Don't include date in automatic name"); + helptext.Add(" -dii, --diff-in Create diffdats for individual DATs"); + helptext.Add(" [Can be used with other -diX flags]"); + helptext.Add(" -b, --bare Don't include date in automatic name"); + helptext.Add(" -din, --diff-nd Create diffdat containing no duplicates"); + helptext.Add(" [Can be used with other -diX flags]"); + helptext.Add(" -b, --bare Don't include date in automatic name"); + helptext.Add(" -gn=, --game-name= Filter by game name"); + helptext.Add(" -ngn=, --not-game= Filter by not game name"); + helptext.Add(" -rn=, --rom-name= Filter by rom name"); + helptext.Add(" -nrn=, --not-rom= Filter by not rom name"); + helptext.Add(" -rt=, --rom-type= Filter by rom type"); + helptext.Add(" -nrt=, --not-type= Filter by not rom type"); + helptext.Add(" -sgt=, --greater= Filter by size >="); + helptext.Add(" -slt=, --less= Filter by size <="); + helptext.Add(" -seq=, --equal= Filter by size =="); + helptext.Add(" -crc=, --crc= Filter by CRC hash"); + helptext.Add(" -ncrc=, --not-crc= Filter by not CRC hash"); + helptext.Add(" -md5=, --md5= Filter by MD5 hash"); + helptext.Add(" -nmd5=, --not-md5= Filter by not MD5 hash"); + helptext.Add(" -sha1=, --sha1= Filter by SHA-1 hash"); + helptext.Add(" -nsha1=, --not-sha1= Filter by not SHA-1 hash"); + helptext.Add(" -is=, --status= Include only items with a given status"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Good, BadDump, Nodump, Verified"); + helptext.Add(" -nis=, --not-status= Exclude items with a given status"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Good, BadDump, Nodump, Verified"); + helptext.Add(" -gt=, --game-type= Include only games with a given type"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Bios, Device, Mechanical"); + helptext.Add(" -ngt=, --not-gtype= Exclude only games with a given type"); + helptext.Add(" Supported values are:"); + helptext.Add(" None, Bios, Device, Mechanical"); + helptext.Add(" -run, --runnable Include only items that are marked runnable"); + helptext.Add(" -nrun, --not-run Include only items that are marked unrunnable"); + helptext.Add(" -out= Output directory (overridden by --inplace)"); + helptext.Add(" -mt={4} Amount of threads to use (-1 unlimted)"); + + helptext.Add(""); + helptext.Add("Filter parameters game name, rom name, CRC, MD5, SHA-1 can"); helptext.Add("do partial matches using asterisks as follows (case insensitive):"); - helptext.Add(" *00 means ends with '00'"); - helptext.Add(" 00* means starts with '00'"); - helptext.Add(" *00* means contains '00'"); - helptext.Add(" 00 means exactly equals '00'"); + helptext.Add(" *00 means ends with '00'"); + helptext.Add(" 00* means starts with '00'"); + helptext.Add(" *00* means contains '00'"); + helptext.Add(" 00 means exactly equals '00'"); - helptext.Add(""); - helptext.Add("Filter parameters for size can use postfixes for inputs:"); - helptext.Add(" e.g. 8kb => 8000 or 8kib => 8192"); + helptext.Add(""); + helptext.Add("Filter parameters for size can use postfixes for inputs:"); + helptext.Add(" e.g. 8kb => 8000 or 8kib => 8192"); - helptext.Add(""); - helptext.Add("Most of the filter parameters allow for multiple inputs:"); - helptext.Add(" e.g. --game-name=foo --game-name=bar"); + helptext.Add(""); + helptext.Add("Most of the filter parameters allow for multiple inputs:"); + helptext.Add(" e.g. --game-name=foo --game-name=bar"); + break; + + // Verify + case "ve": + case "verify": + helptext.Add("Available Flags:"); + helptext.Add(" -dat= Input DAT to verify against"); + helptext.Add(" -t=, --temp= Set the temporary directory to use"); + helptext.Add(" -ho, --hash-only Check files by hash only"); + helptext.Add(" -qs, --quick Enable quick scanning of archives"); + helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); + break; + + // Verify Depot + case "ved": + case "verify-depot": + helptext.Add("Available Flags:"); + helptext.Add(" -dat= Input DAT to verify against"); + helptext.Add(" -t=, --temp= Set the temporary directory to use"); + helptext.Add(" -h=, --header= Set a header skipper to use, blank means all"); + break; + + // Default + default: + helptext.Add("Available Flags:"); + helptext.Add(" No flags found for " + subset); + break; } break; diff --git a/SabreTools.Helper/README.1ST b/SabreTools.Helper/README.1ST index 33614fde..8597a34e 100644 --- a/SabreTools.Helper/README.1ST +++ b/SabreTools.Helper/README.1ST @@ -290,13 +290,13 @@ Options: to be split. Files with any extensions not listed in the input lists will be included in both outputted DAT files. - -exta= First set of extensions (comma-separated) + -exta= First extension (multiple allowed) Set the extensions to be used to populate the first DAT. If more than one - extension is defined, they must be separated by commas. + extension is defined, they must be placed in separate flags. - -extb= Second set of extensions (comma-separated) + -extb= Second extension (multiple allowed) Set the extensions to be used to populate the second DAT. If more than one - extension is defined, they must be separated by commas. + extension is defined, they must be placed in separate flags. -out= Set the name of the output directory This sets an output folder to be used when the files are created. If a path diff --git a/SabreTools/Partials/SabreTools.Inits.cs b/SabreTools/Partials/SabreTools.Inits.cs index 8d48ff65..7670c09e 100644 --- a/SabreTools/Partials/SabreTools.Inits.cs +++ b/SabreTools/Partials/SabreTools.Inits.cs @@ -165,12 +165,8 @@ namespace SabreTools /// First extension to split on /// Second extension to split on /// Output directory for the split files - private static void InitExtSplit(List inputs, string exta, string extb, string outDir) + private static void InitExtSplit(List inputs, List exta, List extb, string outDir) { - // Convert comma-separated strings to list - List extaList = exta.Split(',').ToList(); - List extbList = extb.Split(',').ToList(); - // Loop over the input files foreach (string input in inputs) { @@ -178,7 +174,7 @@ namespace SabreTools { DatFile datFile = new DatFile(); datFile.Parse(Path.GetFullPath(input), 0, 0, _logger, softlist: true); - datFile.SplitByExt(outDir, Path.GetDirectoryName(input), extaList, extbList, _logger); + datFile.SplitByExt(outDir, Path.GetDirectoryName(input), exta, extb, _logger); } else if (Directory.Exists(input)) { @@ -186,7 +182,7 @@ namespace SabreTools { DatFile datFile = new DatFile(); datFile.Parse(Path.GetFullPath(file), 0, 0, _logger, softlist: true); - datFile.SplitByExt(outDir, (input.EndsWith(Path.DirectorySeparatorChar.ToString()) ? input : input + Path.DirectorySeparatorChar), extaList, extbList, _logger); + datFile.SplitByExt(outDir, (input.EndsWith(Path.DirectorySeparatorChar.ToString()) ? input : input + Path.DirectorySeparatorChar), exta, extb, _logger); } } else diff --git a/SabreTools/SabreTools.cs b/SabreTools/SabreTools.cs index e936d154..39c3a236 100644 --- a/SabreTools/SabreTools.cs +++ b/SabreTools/SabreTools.cs @@ -124,8 +124,6 @@ namespace SabreTools date = null, description = null, email = null, - exta = null, - extb = null, filename = null, forcemerge = "", forcend = "", @@ -144,8 +142,8 @@ namespace SabreTools version = null; List crc = new List(); List datfiles = new List(); - //List exta = new List(); - //List extb = new List(); + List exta = new List(); + List extb = new List(); List gamename = new List(); List gametype = new List(); List inputs = new List(); @@ -563,11 +561,11 @@ namespace SabreTools break; case "-exta": case "--exta": - exta = args[++i]; + exta.Add(args[++i]); break; case "-extb": case "--extb": - extb = args[++i]; + extb.Add(args[++i]); break; case "-fi": case "--filename": @@ -796,11 +794,11 @@ namespace SabreTools break; case "-exta": case "--exta": - exta = split[1]; + exta.Add(split[1]); break; case "-extb": case "--extb": - extb = split[1]; + extb.Add(split[1]); break; case "-f": case "--filename":