diff options
Diffstat (limited to 'project/src/ui/ui-wlect.c')
| -rw-r--r-- | project/src/ui/ui-wlect.c | 1865 |
1 files changed, 1865 insertions, 0 deletions
diff --git a/project/src/ui/ui-wlect.c b/project/src/ui/ui-wlect.c new file mode 100644 index 0000000..e590351 --- /dev/null +++ b/project/src/ui/ui-wlect.c @@ -0,0 +1,1865 @@ + +/*************************************************************************** + * _______ _______ _______ * + * | ___ |____ | ___ | * + * | | |_| / /| | |_| * + * | |_____ / / | |_____ * + * |_____ | / / |_____ | * + * _ | | / / _ | | * + * | |___| |/ /____| |___| | * + * |_______|_______|_______| * + * * + * Wiimms SZS Tools * + * * + *************************************************************************** + * * + * This file is part of the SZS project. * + * Visit https://szs.wiimm.de/ for project details and sources. * + * * + * Copyright (c) 2011-2020 by Dirk Clemens <wiimm@wiimm.de> * + * * + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * See file gpl-2.0.txt or http://www.gnu.org/licenses/gpl-2.0.txt * + * * + *************************************************************************** + * * + * >>> This file is automatically generated by './src/gen-ui.c'. <<< * + * >>> Do not edit this file! <<< * + * * + ***************************************************************************/ + +#include <getopt.h> +#include "ui-wlect.h" + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// OptionInfo[] /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = +{ + {0,0,0,0,0,0,0,0,0,0}, // OPT_NONE, + + //----- command specific options ----- + + { OPT_ROUND, false, false, false, false, false, 0, "round", + 0, + "Print additional lines with rounded values (to 3 and 2 bytes for" + " floats and 7 and 6 bytes for doubles)." + }, + + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print long numeric message IDs instead of alternative message names" + " like Txx, Uxx or Mxx." + }, + + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the syntax information section in BMG text files." + }, + + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Suppress cross reference comments." + }, + + { OPT_EXPORT, false, false, false, false, false, 'X', "export", + 0, + "Enable the export mode and create small and machine readable text" + " files for easy post processing." + }, + + { OPT_NO_PARAM, false, false, false, false, false, 'P', "no-param", + 0, + "Disable parameter support in decoded KMP text files." + }, + + { OPT_NO_ECHO, false, false, false, false, false, 0, "no-echo", + 0, + "Suppress output of @ECHO commands while scanning text files." + }, + + { OPT_LT_CLEAR, false, false, false, false, true, 0, "lt-clear", + 0, + "Clear LEX section TEST and remove the section if empty. This option" + " is executed before all other --lt-* options." + }, + + { OPT_LT_ONLINE, false, false, false, false, false, 0, "lt-online", + "value", + "Set LEX/TEST parameter OFFLINE-ONLINE to this MODE. MODE is one of" + " AUTO (default), NEVER or ALWAYS. If needed, LEX section TEST is" + " created or removed if empty." + }, + + { OPT_LT_N_PLAYERS, false, false, false, false, false, 0, "lt-n-players", + "offline,online", + "Set LEX/TEST parameters N-OFFLINE and N-ONLINE to these integer" + " values. If needed, LEX section TEST is created or removed if empty." + }, + + { OPT_LE_DEFINE, false, false, false, false, true, 0, "le-define", + "file", + "Use this file as definition file to patch LE-CODE. The file format" + " can be LE-BIN or any supported CT-CODE file (BRRES, TEX0, CT-CODE or" + " CT-TEXT)." + }, + + { OPT_LPAR, false, false, false, false, false, 0, "lpar", + "file", + "Read a LPAR file to overwrite settings of LE-CODE section LPAR." + }, + + { OPT_ALIAS, false, false, false, false, false, 0, "alias", + "list", + "The parameter is a comma separated list of SLOT=ALIAS elements. SLOT" + " defines the slot, for which the ALIAS is defined. ALIAS itself is a" + " slot number to be executed, if SLOT is selected. Empty and invalid" + " elements are ignored. Multiple usage is possible: the lists are" + " concatenated." + }, + + { OPT_ENGINE, false, false, false, false, false, 0, "engine", + "list", + "Define probabilities for engine classes. LIST is a vector for" + " 100cc,150cc,mirror If 200cc is enabled by --200cc, then vector is" + " interpreted as 150cc,200cc,mirror. Any numbers are accepted. They" + " are normalized to get a total of 100 percent. Use 0,1,0 to force" + " 150cc only. Use 0,0,0 to reset to Nintendos VR based choice." + }, + + { OPT_200CC, true, false, false, false, false, 0, "200cc", + "[=mode]", + "Enable or disable 200cc support. Mode is one of OFF, AUTO (default)" + " or ON (default, if option is used without parameter). LE-CODE hasn't" + " implemented this feature yet!" + }, + + { OPT_PERFMON, true, false, false, false, false, 0, "perf-mon", + "[=mode]", + "Enable or disable the performance monitor. Mode is one of OFF, AUTO" + " (default, don't change setting), ON (enable it for Wii only;" + " default, if option is used without parameter) or FORCE (enable it" + " for Wii and for Dolphin)." + }, + + { OPT_CUSTOM_TT, true, false, false, false, false, 0, "custom-tt", + "[=mode]", + "Enable or disable time trial for custom tracks. Mode is one of OFF," + " AUTO (default) or ON (default, if option is used without parameter)." + }, + + { OPT_XPFLAGS, true, false, false, false, false, 0, "xpflags", + "[=mode]", + "Enable or disable support for Extended Presence Flags. Mode is one of" + " OFF, AUTO (default) or ON (default, if option is used without" + " parameter). Disable it only for tests!" + }, + + { OPT_TRACK_DIR, false, false, false, false, true, 0, "track-dir", + "directory", + "Define a destination directory, where track files are copied, moved" + " or linked to. Usually it is .../Race/Course/.\n" + " Files are searched in directories defined by --copy-tracks," + " --move-tracks, --move1-tracks and --link-tracks in definition order." + " Already existing files are removed before operation." + }, + + { OPT_COPY_TRACKS, false, false, false, false, false, 0, "copy-tracks", + "directory", + "Define a search directory for all included tracks. Files found in" + " this directory are copied to the directory specified by option" + " --track-dir." + }, + + { OPT_MOVE_TRACKS, false, false, false, false, false, 0, "move-tracks", + "directory", + "Define a search directory for all included tracks. Files found in" + " this directory are moved to the directory specified by option" + " --track-dir. If moving fails, the file is copied and the source" + " removed." + }, + + { OPT_MOVE1_TRACKS, false, false, false, false, false, 0, "move1-tracks", + "directory", + "Define a search directory for all included tracks. Files found in" + " this directory are moved to the directory specified by option" + " --track-dir, but only if a file has not more than one hard link." + " This guarantees an unique version of the file. If the file has more" + " hard links or moving fails, the file is copied and the source" + " removed." + }, + + { OPT_LINK_TRACKS, false, false, false, false, false, 0, "link-tracks", + "directory", + "Define a search directory for all included tracks. Files found in" + " this directory are linked to the directory specified by option" + " --track-dir. If linking fails, the file is copied." + }, + + { OPT_COMPLETE, false, false, false, false, true, 'C', "complete", + 0, + " Append missing sections to the LEX file." + }, + + { OPT_LOAD_BMG, false, false, false, false, true, 0, "load-bmg", + "file", + "Load immediately the file to fill an internal message pool. The" + " option can be used multiple times to fill the message pool by" + " different sources. A later message overrides the previous message.\n" + " The internal message pool is patched by all --patch-bmg options." + }, + + { OPT_PATCH_BMG, false, false, false, false, false, 0, "patch-bmg", + "mode[cond][=param]", + "This option specifies a BMG patch mode. Some of the modes need a" + " parameter or a file name of a BMG patch file (raw or text BMG), both" + " separated by an equal sign. Modes with required file names are" + " PRINT, REPLACE, INSERT, OVERWRITE, DELETE, MASK, EQUAL and NOTEQUAL." + " Modes with text parameter are FORMAT, REGEXP and RM-REGEXP. " + " Standalone modes are ID, ID-ALL, UNICODE, RM-ESCAPES, RM-CUPS," + " CT-COPY, CT-FORCE-COPY, CT-FILL, LE-COPY, LE-FORCE-COPY, LE-FILL," + " X-COPY, X-FORCE-COPY and X-FILL. Unique abbreviations are allowed.\n" + " The optional condition COND is either '?MID' or '!MID'. In case of" + " '?MID', the patch is only applied if the message id MID already" + " exists. In case of '!MID', the patch is only applied if the message" + " id MID does not exists.\n" + " If this option is used multiple times, all patch files will be" + " processed in the entered order. Read" + " https://szs.wiimm.de/opt/patch-bmg for more details." + }, + + { OPT_MACRO_BMG, false, false, false, false, false, 0, "macro-bmg", + "file", + "Load a BMG file and add the messages to the macro library; already" + " existing entries are replaced. The macro library is accessed by" + " escape sequence \\m{MID} as fallback, if the active file has not" + " already defined the message MID by itself." + }, + + { OPT_PATCH_NAMES, false, false, false, false, false, 0, "patch-names", + 0, + "If set, the names of the CUP1 and CSR1 sections are patched by the" + " loaded BMG files directly after loading the source files." + }, + + { OPT_ORDER_BY, false, false, false, false, false, 0, "order-by", + "bmg", + "Load the BMG file and filter track names. Then before creating output" + " files, re-distribute the tracks of the additonal cups (9-) to the" + " same cups by the order of the read track names. Tracks without BMG" + " reference are placed at the end of all tracks. This option modifes" + " only the track order of the cups, but will not change any name." + }, + + { OPT_ORDER_ALL, false, false, false, false, false, 0, "order-all", + 0, + "Used together with option --order-by: Re-distribute the tracks of all" + " cups beginning with Mushroom Cup." + }, + + { OPT_DEST, false, false, false, false, true, 'd', "dest", + "path", + "Define a destination path (directory/file). The destination - means:" + " write to standard output.\n" + " The path may contain escape sequences: %Q is replaced by the fully" + " qualified source name. %P and %F are replaced by the source path or" + " by the filename. %N and %E are replaced by source filename without" + " extension or by the source extension. Finally, %T is replaced by the" + " default extension of the destination format.\n" + " A '?' direct behind '%' in %E and %T conversions avoid that the" + " same extension is used twice in row. Read" + " https://szs.wiimm.de/opt/dest for more details." + }, + + { OPT_DEST2, false, false, false, false, false, 'D', "DEST", + "path", + "Like --dest, but create the directory path automatically." + }, + + { OPT_ESC, false, false, false, false, false, 'E', "esc", + "char", + "Define an alternative escape character for destination files. The" + " default is '%'. For Windows batch files it is a good choice to set" + " '-E$'." + }, + + { OPT_OVERWRITE, false, false, false, false, false, 'o', "overwrite", + 0, + "Overwrite already existing files without warning and ignore option" + " --number." + }, + + { OPT_NUMBER, false, false, false, false, false, 0, "number", + 0, + "If a file already exist, append a number directly before the file" + " extension to make the filename unique. If other numbered files" + " already exist (ignoring case), use the maximum existing index+1." + " --num is a short cut." + }, + + { OPT_REMOVE_DEST, false, false, false, false, false, 'r', "remove-dest", + 0, + "Remove already existing files before creating it. If set, --overwrite" + " is ignored. --rm-dest is a short cut." + }, + + { OPT_UPDATE, false, false, false, false, false, 'u', "update", + 0, + "Update only existing files and don't create new files. If set," + " --overwrite and --remove-dest are ignored." + }, + + { OPT_PRESERVE, false, false, false, false, false, 'p', "preserve", + 0, + "Preserve file times (atime+mtime) while converting or copying files." + }, + + { OPT_IGNORE, false, false, false, false, false, 'i', "ignore", + 0, + "Ignore non existing source files without warning." + }, + + { OPT_SECTIONS, false, false, false, false, true, 0, "sections", + 0, + "Print in machine readable sections and parameter lines." + }, + + {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 41 + + //----- global options ----- + + { OPT_VERSION, false, false, false, false, false, 'V', "version", + 0, + "Stop parsing the command line, print a version info and exit." + }, + + { OPT_HELP, false, false, false, false, false, 'h', "help", + 0, + "Stop parsing the command line, print a help message and exit." + }, + + { OPT_XHELP, false, false, false, false, false, 0, "xhelp", + 0, + "Stop parsing the command line and print a help message with all" + " commands included. Exit after printing." + }, + + { OPT_ALLOW_ALL, false, false, false, false, false, 0, "allow-all", + 0, + "Usually commands accept only options with impact to the command. All" + " other options fire a syntax error. But if --allow-all is set, all" + " commands accept all options.\n" + " This makes changing the command of a long command line without" + " removing useless options easier. It also helps to override wrong" + " option permissions." + }, + + { OPT_COMPATIBLE, false, false, false, false, false, 0, "compatible", + "vers", + "The option expects a version number (format '#.##' or 'v#.##') or a" + " revision number (format 'r#') as parameter. If set, the tools try to" + " create BMG and KMP text files, that are compatible to the entered" + " version of the tools. This may override other legacy options." + }, + + { OPT_WIDTH, false, false, false, true, false, 0, "width", + "width", + "Define the terminal width (number of columns) for help and some other" + " messages and disable the automatic detection of the terminal width." + }, + + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", + 0, + "Be quiet and print only error messages. Multiple usage is possible." + " The impact is command dependent. In general: If set three times," + " different file format warnings are suppressed." + }, + + { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", + 0, + "Be verbose and print more progress information. Multiple usage is" + " possible. The impact is command dependent." + }, + + { OPT_LOGGING, false, false, false, false, false, 'L', "logging", + 0, + "This debug option enables the logging of internal lists and maps." + }, + + { OPT_DE, false, false, false, false, false, 0, "de", + 0, + "Use german track and arena names." + }, + + { OPT_COLORS, true, false, false, true, false, 0, "colors", + "[=modus]", + "Define the modus for colored text output. Allowed keywords are: OFF" + " or NO-COLORS to disable colors, AUTO (default) for automatic" + " detection, ON for automatic detection but never OFF, 8-COLORS and" + " 256-COLORS to force 8 or 256 color support. Without parameter, ON is" + " used.\n" + " AUTO will enable colorized output only for terminals. AUTO and ON" + " use environment variable TERM to find the correct color modus.\n" + " If a command is prefixed by 'C-', then --color=ON is used" + " implicitly as default." + }, + + { OPT_NO_COLORS, false, false, false, true, false, 0, "no-colors", + 0, + "Deactive colorized text. This is the default, if an output file is" + " not a terminal." + }, + + { OPT_CT_CODE, false, false, false, false, false, 0, "ct-code", + 0, + "Enable CT-CODE support. See https://szs.wiimm.de/opt/ctcode for" + " details." + }, + + { OPT_LE_CODE, true, false, false, false, false, 0, "le-code", + "[=param]", + "This option is completely ignored by wlect. It only exists due to" + " compatibility with the other tools." + }, + + { OPT_CHDIR, false, false, false, false, false, 0, "chdir", + "dir", + "Set a new working directory for all following options, for all" + " parameters and for the command execution. This option can be used" + " multiple times, but for parameter parsing and for command execution" + " only the last usage is relevant. Nevertheless, '@param' values are" + " scanned while reading the command line." + }, + + { OPT_CONST, false, false, false, false, false, 'c', "const", + "list", + "Define constant values, that are used by the internal encoders and by" + " the numeric options as predefined global variables. This option" + " allows a conditional encoding of text files. It can be used multiple" + " times for multiple definitions.\n" + " The parameter is a comma separated list of terms and a term is" + " 'name=expression'. The expression is calculated by the text parser." + }, + + { OPT_MAX_FILE_SIZE, false, false, false, false, false, 'M', "max-file-size", + "size", + "This security option defines the maximum file size for input files;" + " larger files are ignored with a warning. The default unit is MiB and" + " the default size is 100 MiB; that should be enough for standard" + " usage." + }, + + { OPT_UTF_8, false, true, false, false, true, 0, "utf-8", + 0, + "Enables UTF-8 support for filenames (default)." + }, + + { OPT_NO_UTF_8, false, true, false, false, false, 0, "no-utf-8", + 0, + "Disables UTF-8 support for filenames." + }, + + { OPT_LT_COND_BIT, false, false, false, false, false, 0, "lt-cond-bit", + "bitnum", + "Set LEX/TEST parameter COND-BIT to this integer value. Use -1 to" + " deactivate this COND-BIT. If needed, LEX section TEST are created or" + " removed if empty." + }, + + { OPT_LT_GAME_MODE, false, false, false, false, false, 0, "lt-game-mode", + "mode", + "Set LEX/TEST parameter GAME-MODE to this MODE. MODE is one of AUTO" + " (default), Balloon, COIN, VERSUS or ITEMRAIN. If needed, LEX section" + " TEST is created or removed if empty." + }, + + { OPT_LT_ENGINE, false, false, false, false, false, 0, "lt-engine", + "mode", + "Set LEX/TEST parameter ENGINE to this MODE. MODE is one of AUTO" + " (default), BATTLE, 50CC, 100CC, 150CC, 200CC, 150M or 200M. Only" + " track.szs files are modified. If needed, LEX section TEST is created" + " or removed if empty." + }, + + { OPT_LT_RANDOM, false, false, false, false, false, 0, "lt-random", + "index", + "Force a random scenario, if between 1 and 8. Value 0 enables auto" + " selection and -1 disables this option. If needed, LEX section TEST" + " is created or removed if empty." + }, + + { OPT_LEX_PURGE, false, false, false, false, false, 0, "lex-purge", + 0, + "Delete LEX sections without any impact. This option is executed after" + " all --lt-* options." + }, + + { OPT_TEST, false, false, false, false, true, 't', "test", + 0, + "Run in test mode, modify nothing.\n" + ">>> USE THIS OPTION IF UNSURE! <<<" + }, + + { OPT_FORCE, false, false, false, false, false, 0, "force", + 0, + "The tools analyse input files and reject files with invalid data" + " structures. If --force is set, little repairable issues are ignored" + " and a warning is printed.\n" + "Option '--kmp force' does the same, but only for KMP files.\n" + ">>> THE RESULT MAY BE INVALID OUTPUT FILES! <<<" + }, + + { OPT_REPAIR_MAGICS, true, false, false, false, false, 0, "repair-magics", + "[=mode]", + "Control the reparing of missing or wrong magics of files and" + " sub-files by analysing file path and file extension. MODE is one of" + " OFF (default), ANALYZE or REPAIR (default, if set without mode). OFF" + " disables this feature, ANALYZE enables it for analysis only, and" + " REPAIR repairs all magics while reading the files. Keyword FNAME can" + " be appended (separated by a comma) to give filename scanning the" + " highest priority.\n" + ">>> THE RESULT MAY BE INVALID OUTPUT FILES! <<<" + }, + + { OPT_OLD, false, true, false, false, false, 0, "OLD", + 0, + "Developer option: Cancel --NEW and use old implementation if" + " available." + }, + + { OPT_STD, false, true, false, false, false, 0, "STD", + 0, + "Developer option: Cancel --OLD and --NEW and use standard" + " implementation (default)." + }, + + { OPT_NEW, false, true, false, false, false, 0, "NEW", + 0, + "Developer option: Cancel --OLD and use new implementation if" + " available." + }, + + { OPT_EXTRACT, false, true, false, false, false, 0, "EXTRACT", + 0, + "Create the directory and extract different objects in different" + " formats at the moment when they are seen. This is a development" + " helper option." + }, + + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 72 + +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// alternate option infos /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const InfoOption_t option_grp_TEXTOPT_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the syntax information section in LE text files." + }; + +static const InfoOption_t option_cmd_VERSION_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Print only the version number, revision and system. If set twice," + " print only the version number." + }; + +static const InfoOption_t option_cmd_VERSION_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print in long format. Ignored if option --sections is set." + }; + +static const InfoOption_t option_cmd_COLORS_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print also a list of all colored text types. If set twice, include" + " alternative names. If set three times, include raw color names." + }; + +static const InfoOption_t option_cmd_COLORS_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Ignore option --long and print a single status line about current" + " color settings." + }; + +static const InfoOption_t option_cmd_ERROR_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print message text instead of message name." + }; + +static const InfoOption_t option_cmd_ERROR_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Print message number instead of message name." + }; + +static const InfoOption_t option_cmd_FILETYPE_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print an additional column with the decompressed file type and" + " version. If entered twice, a validation status column is added." + }; + +static const InfoOption_t option_cmd_FUNCTIONS_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Suppress the output of the description and print only function type" + " and syntax." + }; + +static const InfoOption_t option_cmd_FUNCTIONS_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Usually only the function syntax is compared to the keywords. But if" + " --long is set, the descriptions are compared too." + }; + +static const InfoOption_t option_cmd_DUMP_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "For LE-CODE binaries: If set, print cups with tracks or arenas. For" + " each track, property and music slot is printed in brackets. If set" + " twice, print a track list too.\n" + " For LEX binaries: If set, print a hex dump of max 16 bytes (1 line)" + " of the element data. If set twice, print a hex dump of max 64 bytes" + " (4 lines). If set 3 times ore more, print a complete hex dump." + }; + +static const InfoOption_t option_cmd_DUMP_VERBOSE = + { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", + 0, + "For LE-CODE binaries: If set, print a track slot usage table." + }; + +static const InfoOption_t option_cmd_BIN_DIFF_QUIET = + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", + 0, + "Suppress all messages and tell result as exit status only." + }; + +static const InfoOption_t option_cmd_BIN_DIFF_VERBOSE = + { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", + 0, + "Be more verbose and tell, what tests are planned." + }; + + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// CommandTab[] /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const KeywordTab_t CommandTab[] = +{ + { CMD_VERSION, "VERSION", 0, 0 }, + { CMD_HELP, "HELP", "H", 0 }, + { CMD_HELP, "?", 0, 0 }, + { CMD_ARGTEST, "ARGTEST", 0, 0 }, + { CMD_TEST, "TEST", 0, 0 }, + { CMD_COLORS, "COLORS", 0, 0 }, + { CMD_ERROR, "ERROR", "ERR", 0 }, + { CMD_FILETYPE, "FILETYPE", "FT", 0 }, + { CMD_FILEATTRIB, "FILEATTRIB", "FA", 0 }, + { CMD_SYMBOLS, "SYMBOLS", 0, 0 }, + { CMD_FUNCTIONS, "FUNCTIONS", 0, 0 }, + { CMD_CALCULATE, "CALCULATE", 0, 0 }, + { CMD_FLOAT, "FLOAT", 0, 0 }, + { CMD_EXPORT, "_EXPORT", 0, 0 }, + { CMD_DUMP, "DUMP", "D", 0 }, + { CMD_DL, "DL", 0, 0 }, + { CMD_DLL, "DLL", 0, 0 }, + { CMD_BIN_DIFF, "BIN-DIFF", "BINDIFF", 0 }, + { CMD_BIN_DIFF, "BD", 0, 0 }, + { CMD_PATCH, "PATCH", "P", 0 }, + { CMD_LPAR, "LPAR", 0, 0 }, + { CMD_CREATE, "CREATE", "CR", 0 }, + { CMD_CAT, "CAT", 0, 0 }, + { CMD_DECODE, "DECODE", "DEC", 0 }, + { CMD_ENCODE, "ENCODE", "ENC", 0 }, + + { CMD__N,0,0,0 } +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// OptionShort & OptionLong /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const char OptionShort[] = "VhqvLc:lHBXPM:tCd:D:E:orupi"; + +static const struct option OptionLong[] = +{ + { "version", 0, 0, 'V' }, + { "help", 0, 0, 'h' }, + { "xhelp", 0, 0, GO_XHELP }, + { "allow-all", 0, 0, GO_ALLOW_ALL }, + { "allowall", 0, 0, GO_ALLOW_ALL }, + { "compatible", 1, 0, GO_COMPATIBLE }, + { "width", 1, 0, GO_WIDTH }, + { "quiet", 0, 0, 'q' }, + { "verbose", 0, 0, 'v' }, + { "logging", 0, 0, 'L' }, + { "de", 0, 0, GO_DE }, + { "colors", 2, 0, GO_COLORS }, + { "no-colors", 0, 0, GO_NO_COLORS }, + { "nocolors", 0, 0, GO_NO_COLORS }, + { "ct-code", 0, 0, GO_CT_CODE }, + { "ctcode", 0, 0, GO_CT_CODE }, + { "le-code", 2, 0, GO_LE_CODE }, + { "lecode", 2, 0, GO_LE_CODE }, + { "chdir", 1, 0, GO_CHDIR }, + { "const", 1, 0, 'c' }, + { "round", 0, 0, GO_ROUND }, + { "long", 0, 0, 'l' }, + { "no-header", 0, 0, 'H' }, + { "noheader", 0, 0, 'H' }, + { "brief", 0, 0, 'B' }, + { "export", 0, 0, 'X' }, + { "no-param", 0, 0, 'P' }, + { "noparam", 0, 0, 'P' }, + { "no-echo", 0, 0, GO_NO_ECHO }, + { "noecho", 0, 0, GO_NO_ECHO }, + { "max-file-size", 1, 0, 'M' }, + { "maxfilesize", 1, 0, 'M' }, + { "utf-8", 0, 0, GO_UTF_8 }, + { "utf8", 0, 0, GO_UTF_8 }, + { "no-utf-8", 0, 0, GO_NO_UTF_8 }, + { "no-utf8", 0, 0, GO_NO_UTF_8 }, + { "noutf8", 0, 0, GO_NO_UTF_8 }, + { "lt-clear", 0, 0, GO_LT_CLEAR }, + { "ltclear", 0, 0, GO_LT_CLEAR }, + { "lt-online", 1, 0, GO_LT_ONLINE }, + { "ltonline", 1, 0, GO_LT_ONLINE }, + { "lt-n-players", 1, 0, GO_LT_N_PLAYERS }, + { "lt-nplayers", 1, 0, GO_LT_N_PLAYERS }, + { "ltnplayers", 1, 0, GO_LT_N_PLAYERS }, + { "lt-cond-bit", 1, 0, GO_LT_COND_BIT }, + { "lt-condbit", 1, 0, GO_LT_COND_BIT }, + { "ltcondbit", 1, 0, GO_LT_COND_BIT }, + { "lt-game-mode", 1, 0, GO_LT_GAME_MODE }, + { "lt-gamemode", 1, 0, GO_LT_GAME_MODE }, + { "ltgamemode", 1, 0, GO_LT_GAME_MODE }, + { "lt-engine", 1, 0, GO_LT_ENGINE }, + { "ltengine", 1, 0, GO_LT_ENGINE }, + { "lt-random", 1, 0, GO_LT_RANDOM }, + { "ltrandom", 1, 0, GO_LT_RANDOM }, + { "lex-purge", 0, 0, GO_LEX_PURGE }, + { "lexpurge", 0, 0, GO_LEX_PURGE }, + { "test", 0, 0, 't' }, + { "force", 0, 0, GO_FORCE }, + { "repair-magics", 2, 0, GO_REPAIR_MAGICS }, + { "repairmagics", 2, 0, GO_REPAIR_MAGICS }, + { "OLD", 0, 0, GO_OLD }, + { "STD", 0, 0, GO_STD }, + { "NEW", 0, 0, GO_NEW }, + { "EXTRACT", 0, 0, GO_EXTRACT }, + { "le-define", 1, 0, GO_LE_DEFINE }, + { "ledefine", 1, 0, GO_LE_DEFINE }, + { "lpar", 1, 0, GO_LPAR }, + { "alias", 1, 0, GO_ALIAS }, + { "engine", 1, 0, GO_ENGINE }, + { "200cc", 2, 0, GO_200CC }, + { "perf-mon", 2, 0, GO_PERFMON }, + { "perfmon", 2, 0, GO_PERFMON }, + { "custom-tt", 2, 0, GO_CUSTOM_TT }, + { "customtt", 2, 0, GO_CUSTOM_TT }, + { "xpflags", 2, 0, GO_XPFLAGS }, + { "track-dir", 1, 0, GO_TRACK_DIR }, + { "trackdir", 1, 0, GO_TRACK_DIR }, + { "copy-tracks", 1, 0, GO_COPY_TRACKS }, + { "copytracks", 1, 0, GO_COPY_TRACKS }, + { "move-tracks", 1, 0, GO_MOVE_TRACKS }, + { "movetracks", 1, 0, GO_MOVE_TRACKS }, + { "move1-tracks", 1, 0, GO_MOVE1_TRACKS }, + { "move1tracks", 1, 0, GO_MOVE1_TRACKS }, + { "link-tracks", 1, 0, GO_LINK_TRACKS }, + { "linktracks", 1, 0, GO_LINK_TRACKS }, + { "complete", 0, 0, 'C' }, + { "load-bmg", 1, 0, GO_LOAD_BMG }, + { "loadbmg", 1, 0, GO_LOAD_BMG }, + { "patch-bmg", 1, 0, GO_PATCH_BMG }, + { "patchbmg", 1, 0, GO_PATCH_BMG }, + { "pb", 1, 0, GO_PATCH_BMG }, + { "macro-bmg", 1, 0, GO_MACRO_BMG }, + { "macrobmg", 1, 0, GO_MACRO_BMG }, + { "mb", 1, 0, GO_MACRO_BMG }, + { "patch-names", 0, 0, GO_PATCH_NAMES }, + { "patchnames", 0, 0, GO_PATCH_NAMES }, + { "order-by", 1, 0, GO_ORDER_BY }, + { "orderby", 1, 0, GO_ORDER_BY }, + { "order", 1, 0, GO_ORDER_BY }, + { "order-all", 0, 0, GO_ORDER_ALL }, + { "orderall", 0, 0, GO_ORDER_ALL }, + { "dest", 1, 0, 'd' }, + { "DEST", 1, 0, 'D' }, + { "esc", 1, 0, 'E' }, + { "overwrite", 0, 0, 'o' }, + { "number", 0, 0, GO_NUMBER }, + { "num", 0, 0, GO_NUMBER }, + { "remove-dest", 0, 0, 'r' }, + { "removedest", 0, 0, 'r' }, + { "rm-dest", 0, 0, 'r' }, + { "rmdest", 0, 0, 'r' }, + { "remove", 0, 0, 'r' }, + { "update", 0, 0, 'u' }, + { "preserve", 0, 0, 'p' }, + { "ignore", 0, 0, 'i' }, + { "sections", 0, 0, GO_SECTIONS }, + + {0,0,0,0} +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// OptionUsed & OptionIndex /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static u8 OptionUsed[OPT__N_TOTAL+1] = {0}; + +static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = +{ + /* 0x000 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x010 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x020 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x030 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x040 */ 0,0, + /* 0x042 B */ OPT_BRIEF, + /* 0x043 C */ OPT_COMPLETE, + /* 0x044 D */ OPT_DEST2, + /* 0x045 E */ OPT_ESC, + /* 0x046 */ 0,0, + /* 0x048 H */ OPT_NO_HEADER, + /* 0x049 */ 0,0,0, + /* 0x04c L */ OPT_LOGGING, + /* 0x04d M */ OPT_MAX_FILE_SIZE, + /* 0x04e */ 0,0, + /* 0x050 P */ OPT_NO_PARAM, + /* 0x051 */ 0,0,0,0, 0, + /* 0x056 V */ OPT_VERSION, + /* 0x057 */ 0, + /* 0x058 X */ OPT_EXPORT, + /* 0x059 */ 0,0,0,0, 0,0,0,0, 0,0, + /* 0x063 c */ OPT_CONST, + /* 0x064 d */ OPT_DEST, + /* 0x065 */ 0,0,0, + /* 0x068 h */ OPT_HELP, + /* 0x069 i */ OPT_IGNORE, + /* 0x06a */ 0,0, + /* 0x06c l */ OPT_LONG, + /* 0x06d */ 0,0, + /* 0x06f o */ OPT_OVERWRITE, + /* 0x070 p */ OPT_PRESERVE, + /* 0x071 q */ OPT_QUIET, + /* 0x072 r */ OPT_REMOVE_DEST, + /* 0x073 */ 0, + /* 0x074 t */ OPT_TEST, + /* 0x075 u */ OPT_UPDATE, + /* 0x076 v */ OPT_VERBOSE, + /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, + /* 0x080 */ OPT_XHELP, + /* 0x081 */ OPT_ALLOW_ALL, + /* 0x082 */ OPT_COMPATIBLE, + /* 0x083 */ OPT_WIDTH, + /* 0x084 */ OPT_DE, + /* 0x085 */ OPT_COLORS, + /* 0x086 */ OPT_NO_COLORS, + /* 0x087 */ OPT_CT_CODE, + /* 0x088 */ OPT_LE_CODE, + /* 0x089 */ OPT_CHDIR, + /* 0x08a */ OPT_ROUND, + /* 0x08b */ OPT_NO_ECHO, + /* 0x08c */ OPT_UTF_8, + /* 0x08d */ OPT_NO_UTF_8, + /* 0x08e */ OPT_LT_CLEAR, + /* 0x08f */ OPT_LT_ONLINE, + /* 0x090 */ OPT_LT_N_PLAYERS, + /* 0x091 */ OPT_LT_COND_BIT, + /* 0x092 */ OPT_LT_GAME_MODE, + /* 0x093 */ OPT_LT_ENGINE, + /* 0x094 */ OPT_LT_RANDOM, + /* 0x095 */ OPT_LEX_PURGE, + /* 0x096 */ OPT_FORCE, + /* 0x097 */ OPT_REPAIR_MAGICS, + /* 0x098 */ OPT_OLD, + /* 0x099 */ OPT_STD, + /* 0x09a */ OPT_NEW, + /* 0x09b */ OPT_EXTRACT, + /* 0x09c */ OPT_LE_DEFINE, + /* 0x09d */ OPT_LPAR, + /* 0x09e */ OPT_ALIAS, + /* 0x09f */ OPT_ENGINE, + /* 0x0a0 */ OPT_200CC, + /* 0x0a1 */ OPT_PERFMON, + /* 0x0a2 */ OPT_CUSTOM_TT, + /* 0x0a3 */ OPT_XPFLAGS, + /* 0x0a4 */ OPT_TRACK_DIR, + /* 0x0a5 */ OPT_COPY_TRACKS, + /* 0x0a6 */ OPT_MOVE_TRACKS, + /* 0x0a7 */ OPT_MOVE1_TRACKS, + /* 0x0a8 */ OPT_LINK_TRACKS, + /* 0x0a9 */ OPT_LOAD_BMG, + /* 0x0aa */ OPT_PATCH_BMG, + /* 0x0ab */ OPT_MACRO_BMG, + /* 0x0ac */ OPT_PATCH_NAMES, + /* 0x0ad */ OPT_ORDER_BY, + /* 0x0ae */ OPT_ORDER_ALL, + /* 0x0af */ OPT_NUMBER, + /* 0x0b0 */ OPT_SECTIONS, + /* 0x0b1 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0, + /* 0x0c0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x0d0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x0e0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x0f0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x100 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, + /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// opt_allowed_cmd_* /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static u8 option_allowed_cmd_VERSION[41] = // cmd #1 +{ + 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 1 +}; + +static u8 option_allowed_cmd_HELP[41] = // cmd #2 +{ + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1 +}; + +static u8 option_allowed_cmd_ARGTEST[41] = // cmd #3 +{ + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1 +}; + +static u8 option_allowed_cmd_TEST[41] = // cmd #4 +{ + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1 +}; + +static u8 option_allowed_cmd_COLORS[41] = // cmd #5 +{ + 0,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_ERROR[41] = // cmd #6 +{ + 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 1 +}; + +static u8 option_allowed_cmd_FILETYPE[41] = // cmd #7 +{ + 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 0 +}; + +static u8 option_allowed_cmd_FILEATTRIB[41] = // cmd #8 +{ + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_SYMBOLS[41] = // cmd #9 +{ + 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_FUNCTIONS[41] = // cmd #10 +{ + 0,0,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_CALCULATE[41] = // cmd #11 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_FLOAT[41] = // cmd #12 +{ + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_EXPORT[41] = // cmd #13 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_DUMP[41] = // cmd #14 +{ + 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_DL[41] = // cmd #15 +{ + 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_DLL[41] = // cmd #16 +{ + 0,0,1,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_BIN_DIFF[41] = // cmd #17 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0 +}; + +static u8 option_allowed_cmd_PATCH[41] = // cmd #18 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,1,1, 0 +}; + +static u8 option_allowed_cmd_LPAR[41] = // cmd #19 +{ + 0,0,0,1,1, 1,0,0,0,0, 0,1,1,1,1, 1,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,1,1, 0 +}; + +static u8 option_allowed_cmd_CREATE[41] = // cmd #20 +{ + 0,0,0,1,1, 1,0,1,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,1,1, 0 +}; + +static u8 option_allowed_cmd_CAT[41] = // cmd #21 +{ + 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 0 +}; + +static u8 option_allowed_cmd_DECODE[41] = // cmd #22 +{ + 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,1,1, 0 +}; + +static u8 option_allowed_cmd_ENCODE[41] = // cmd #23 +{ + 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, + 0,1,1,1,1, 1,1,1,1,1, 0 +}; + + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoOption tabs /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const InfoOption_t * option_tab_tool[] = +{ + OptionInfo + OPT_VERSION, + OptionInfo + OPT_HELP, + OptionInfo + OPT_XHELP, + OptionInfo + OPT_ALLOW_ALL, + OptionInfo + OPT_COMPATIBLE, + OptionInfo + OPT_WIDTH, + OptionInfo + OPT_QUIET, + OptionInfo + OPT_VERBOSE, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_DE, + OptionInfo + OPT_COLORS, + OptionInfo + OPT_NO_COLORS, + OptionInfo + OPT_CT_CODE, + OptionInfo + OPT_LE_CODE, + OptionInfo + OPT_CHDIR, + OptionInfo + OPT_CONST, + OptionInfo + OPT_MAX_FILE_SIZE, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TEST, + OptionInfo + OPT_FORCE, + OptionInfo + OPT_REPAIR_MAGICS, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_VERSION[] = +{ + &option_cmd_VERSION_BRIEF, + OptionInfo + OPT_SECTIONS, + &option_cmd_VERSION_LONG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_HELP[] = +{ + OptionInfo + OPT_WIDTH, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ARGTEST[] = +{ + + 0 +}; + +static const InfoOption_t * option_tab_cmd_TEST[] = +{ + + 0 +}; + +static const InfoOption_t * option_tab_cmd_COLORS[] = +{ + OptionInfo + OPT_COLORS, + OptionInfo + OPT_NO_COLORS, + &option_cmd_COLORS_LONG, + &option_cmd_COLORS_BRIEF, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ERROR[] = +{ + OptionInfo + OPT_SECTIONS, + OptionInfo + OPT_NO_HEADER, + &option_cmd_ERROR_LONG, + &option_cmd_ERROR_BRIEF, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_FILETYPE[] = +{ + &option_cmd_FILETYPE_LONG, + OptionInfo + OPT_IGNORE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_FILEATTRIB[] = +{ + OptionInfo + OPT_NO_HEADER, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_SYMBOLS[] = +{ + OptionInfo + OPT_NO_HEADER, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_FUNCTIONS[] = +{ + OptionInfo + OPT_NO_HEADER, + &option_cmd_FUNCTIONS_BRIEF, + &option_cmd_FUNCTIONS_LONG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CALCULATE[] = +{ + OptionInfo + OPT_CONST, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_FLOAT[] = +{ + OptionInfo + OPT_ROUND, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_EXPORT[] = +{ + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DUMP[] = +{ + OptionInfo + OPT_LE_DEFINE, + OptionInfo + OPT_LPAR, + OptionInfo + OPT_ALIAS, + OptionInfo + OPT_ENGINE, + OptionInfo + OPT_200CC, + OptionInfo + OPT_PERFMON, + OptionInfo + OPT_CUSTOM_TT, + OptionInfo + OPT_XPFLAGS, + + OptionInfo + OPT_NONE, // separator + + &option_cmd_DUMP_LONG, + &option_cmd_DUMP_VERBOSE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DL[] = +{ + OptionInfo + OPT_LE_DEFINE, + OptionInfo + OPT_LPAR, + OptionInfo + OPT_ALIAS, + OptionInfo + OPT_ENGINE, + OptionInfo + OPT_200CC, + OptionInfo + OPT_PERFMON, + OptionInfo + OPT_CUSTOM_TT, + OptionInfo + OPT_XPFLAGS, + + OptionInfo + OPT_NONE, // separator + + &option_cmd_DUMP_LONG, + &option_cmd_DUMP_VERBOSE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DLL[] = +{ + OptionInfo + OPT_LE_DEFINE, + OptionInfo + OPT_LPAR, + OptionInfo + OPT_ALIAS, + OptionInfo + OPT_ENGINE, + OptionInfo + OPT_200CC, + OptionInfo + OPT_PERFMON, + OptionInfo + OPT_CUSTOM_TT, + OptionInfo + OPT_XPFLAGS, + + OptionInfo + OPT_NONE, // separator + + &option_cmd_DUMP_LONG, + &option_cmd_DUMP_VERBOSE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_BIN_DIFF[] = +{ + &option_cmd_BIN_DIFF_QUIET, + &option_cmd_BIN_DIFF_VERBOSE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_PATCH[] = +{ + OptionInfo + OPT_LE_DEFINE, + OptionInfo + OPT_LPAR, + OptionInfo + OPT_ALIAS, + OptionInfo + OPT_ENGINE, + OptionInfo + OPT_200CC, + OptionInfo + OPT_PERFMON, + OptionInfo + OPT_CUSTOM_TT, + OptionInfo + OPT_XPFLAGS, + OptionInfo + OPT_TRACK_DIR, + OptionInfo + OPT_COPY_TRACKS, + OptionInfo + OPT_MOVE_TRACKS, + OptionInfo + OPT_MOVE1_TRACKS, + OptionInfo + OPT_LINK_TRACKS, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_IGNORE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LPAR[] = +{ + OptionInfo + OPT_LE_DEFINE, + OptionInfo + OPT_LPAR, + OptionInfo + OPT_ALIAS, + OptionInfo + OPT_ENGINE, + OptionInfo + OPT_200CC, + OptionInfo + OPT_PERFMON, + OptionInfo + OPT_CUSTOM_TT, + OptionInfo + OPT_XPFLAGS, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOPT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_EXPORT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CREATE[] = +{ + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOPT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_LPAR, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CAT[] = +{ + OptionInfo + OPT_COMPLETE, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOPT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_ECHO, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DECODE[] = +{ + OptionInfo + OPT_COMPLETE, + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOPT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_ECHO, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ENCODE[] = +{ + OptionInfo + OPT_COMPLETE, + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_IGNORE, + + 0 +}; + + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoCommand /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const InfoCommand_t CommandInfo[CMD__N+1] = +{ + { 0, + false, + false, + false, + "wlect", + 0, + "wlect [option]... command [option|parameter|file]...", + "Wiimms LE-CODE Tool : Manage the LE-CODE and LEX extensions.", + 0, + 25, + option_tab_tool, + 0 + }, + + { CMD_VERSION, + false, + false, + false, + "VERSION", + 0, + "wlect VERSION [ignored]...", + "Print program name and version and exit.", + 0, + 3, + option_tab_cmd_VERSION, + option_allowed_cmd_VERSION + }, + + { CMD_HELP, + false, + false, + false, + "HELP", + "H", + "wlect HELP [--width=wd] OPT|OPTION ...\n" + "wlect HELP [--width=wd] CMD|COMMAND [ignored]...\n" + "wlect HELP [--width=wd] command [-b] [ignored]...\n" + "wlect HELP [--width=wd] [ignored]...", + "Print help for commands and options.", + "Print help for commands and options.\n" + " The first variant (with keyword OPT or OPTION) prints a list of all" + " global and command specific options. If at least one option is set," + " only info about the declared options are printed. The second variant" + " (with keyword CMD or COMMAND) prints an overview about all commands." + " The third variant (with a valid command name) prints details about" + " the declared command. The fourth variant prints an overview about" + " all commands and all global options.", + 1, + option_tab_cmd_HELP, + option_allowed_cmd_HELP + }, + + { CMD_ARGTEST, + false, + false, + false, + "ARGTEST", + 0, + "wlect ARGTEST ...", + "This debug command accepts all kinds of parameters and prints one" + " line for each parameter.", + 0, + 0, + option_tab_cmd_ARGTEST, + option_allowed_cmd_ARGTEST + }, + + { CMD_TEST, + false, + false, + false, + "TEST", + 0, + "wlect TEST [options]... [ignored]...", + "This debugging command accepts all options and parameters and prints" + " a list of the internal option values. The command is designed to" + " test the option parameters. The non option parameters are completely" + " ignored.", + 0, + 0, + option_tab_cmd_TEST, + option_allowed_cmd_TEST + }, + + { CMD_COLORS, + false, + false, + false, + "COLORS", + 0, + "wlect COLORS", + "Ignore all parameters and print colored text for testing.", + 0, + 4, + option_tab_cmd_COLORS, + option_allowed_cmd_COLORS + }, + + { CMD_ERROR, + false, + false, + false, + "ERROR", + "ERR", + "wlect ERROR [error_code]", + "Translate an exit code to a message name. If no exit code is entered," + " print a table with all error messages.", + 0, + 4, + option_tab_cmd_ERROR, + option_allowed_cmd_ERROR + }, + + { CMD_FILETYPE, + false, + false, + false, + "FILETYPE", + "FT", + "wlect FILETYPE file...", + "Scan the header of the entered files and print file type and path for" + " each file as list.", + 0, + 2, + option_tab_cmd_FILETYPE, + option_allowed_cmd_FILETYPE + }, + + { CMD_FILEATTRIB, + false, + false, + false, + "FILEATTRIB", + "FA", + "wlect FILEATTRIB [keyword]...", + "Print a table with attributes for all known file types. If at least" + " one keyword is entered, only matching file types are printed. A" + " keyword is either a file type (like 'BRRES' or 'BMG') or one of the" + " printed keywords (like 'ARCHIVE' or 'EXTRACT').", + 0, + 1, + option_tab_cmd_FILEATTRIB, + option_allowed_cmd_FILEATTRIB + }, + + { CMD_SYMBOLS, + false, + false, + false, + "SYMBOLS", + 0, + "wlect SYMBOLS", + "Print predefined symbols of text parser to standard output. The" + " LE-CODE specific symbols are included.", + 0, + 1, + option_tab_cmd_SYMBOLS, + option_allowed_cmd_SYMBOLS + }, + + { CMD_FUNCTIONS, + false, + false, + false, + "FUNCTIONS", + 0, + "wlect FUNCTIONS [key]...", + "Print a list with all parser functions including the LE-CODE specific" + " functions. If one key ore more key entered, then only functions that" + " match at least one key are printed.", + 0, + 3, + option_tab_cmd_FUNCTIONS, + option_allowed_cmd_FUNCTIONS + }, + + { CMD_CALCULATE, + false, + false, + false, + "CALCULATE", + 0, + "wlect CALCULATE expression...", + "Calculate each expression and print the result to standard output.", + 0, + 1, + option_tab_cmd_CALCULATE, + option_allowed_cmd_CALCULATE + }, + + { CMD_FLOAT, + false, + false, + false, + "FLOAT", + 0, + "wlect FLOAT number...", + "This commands helps to convert hex values into floating point numbers" + " and vice versa. For each non empty parameter, a line with 4 bytes" + " hex and a float, 8 bytes hex and a double float, and the parameter" + " itself is printed. If a parameter begins with 'x' or '0x', it is a" + " hex string, otherwise it is a floating point number.\n" + " The special parameters \"+\" and \"-\" mean: Increment or decrement" + " the previous value by the smallest possible value. Use different" + " increments for floats and doubles.\n" + " All conversions are done using big endian.", + 0, + 1, + option_tab_cmd_FLOAT, + option_allowed_cmd_FLOAT + }, + + { CMD_EXPORT, + true, + false, + false, + "_EXPORT", + 0, + "wszst _EXPORT key...", + "This hidden command exports some definitions to standard output. Use" + " keyword HELP to get a list of possible keywords.", + 0, + 0, + option_tab_cmd_EXPORT, + option_allowed_cmd_EXPORT + }, + + { CMD_DUMP, + false, + false, + true, + "DUMP", + "D", + "wlect DUMP [source]...", + "Print an information dump for each source file. LE-CODE binaries and" + " LEX binaries are accepted as input.", + 0, + 10, + option_tab_cmd_DUMP, + option_allowed_cmd_DUMP + }, + + { CMD_DL, + false, + false, + false, + "DL", + 0, + "wlect DL [source]...", + "Short cut for 'DUMP --long'.", + 0, + 10, + option_tab_cmd_DL, + option_allowed_cmd_DL + }, + + { CMD_DLL, + false, + false, + false, + "DLL", + 0, + "wlect DLL [source]...", + "Short cut for 'DUMP --long --long'.", + 0, + 10, + option_tab_cmd_DLL, + option_allowed_cmd_DLL + }, + + { CMD_BIN_DIFF, + false, + false, + false, + "BIN-DIFF", + "BINDIFF", + "wlect BIN-DIFF settings binary1 binary2", + "Compare parts of 2 different LECODE binary files. SETTINGS is a" + " string with plus and minus signs to switch between plus/minus modes," + " and some key letters to select parts: s:size, h:header, t:timestamp," + " b:body, p:parameters, d:data, c:code and a:all. In plus-mode, a test" + " is enabled, in minus-mode it is disabled. Scanning starts in" + " plus-mode.\n" + " Example: a-t: compare all except timestamps.\n" + " The exist status is OK (0) if nothing differ, DIFFER (2) if at" + " least one test failed, or an error code.", + 0, + 2, + option_tab_cmd_BIN_DIFF, + option_allowed_cmd_BIN_DIFF + }, + + { CMD_PATCH, + false, + false, + false, + "PATCH", + "P", + "wlect PATCH [le_bin]...", + "Read each LE-BIN file and patch it. Use --le-define to setup cups and" + " tracks.", + 0, + 22, + option_tab_cmd_PATCH, + option_allowed_cmd_PATCH + }, + + { CMD_LPAR, + false, + false, + false, + "LPAR", + 0, + "wlect LPAR [le_bin]...", + "Read each LE-BIN file and patch it. Then extract the LE-CODE" + " parameters and store them as LPAR text file. Print the result to" + " standard output if no other destination is defined.", + 0, + 20, + option_tab_cmd_LPAR, + option_allowed_cmd_LPAR + }, + + { CMD_CREATE, + false, + false, + true, + "CREATE", + "CR", + "wlect CREATE [keyword]", + "Create a file and print it to standard output. The kind of file is" + " defined by KEYWORD. Use command without keywords to get a list of" + " possible keywords.\n" + " The following keywords are possible: LEX for a LEX text file with" + " all known sections except TEST. LEX+ for a LEX text file with all" + " known sections including TEST. SET1, CANN, HIPT and TEST (section" + " names) for a LEX text file with 1 section only. LPAR for an example" + " LE-CODE parameter file.", + 0, + 22, + option_tab_cmd_CREATE, + option_allowed_cmd_CREATE + }, + + { CMD_CAT, + false, + false, + false, + "CAT", + 0, + "wlect CAT [source]...", + "Read the entered LEX and LE-CODE files (text, binary or szs) and" + " print them as decoded text files to standard output. The output of" + " all source files is concatenated.", + 0, + 6, + option_tab_cmd_CAT, + option_allowed_cmd_CAT + }, + + { CMD_DECODE, + false, + false, + false, + "DECODE", + "DEC", + "wlect DECODE [source]...", + "Read the entered LEX files (text or binary) and decode them to text" + " files. The default destination is '%P/%N.txt'.", + 0, + 14, + option_tab_cmd_DECODE, + option_allowed_cmd_DECODE + }, + + { CMD_ENCODE, + false, + false, + false, + "ENCODE", + "ENC", + "wlect ENCODE source...", + "Read the entered LEX files (text or binary) and encode (compile) them" + " to binary files. The default destination is '%P/%N.lex'.", + 0, + 11, + option_tab_cmd_ENCODE, + option_allowed_cmd_ENCODE + }, + + {0,0,0,0,0,0,0,0,0,0,0,0} +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoUI /////////////// +/////////////////////////////////////////////////////////////////////////////// + +const InfoUI_t InfoUI_wlect = +{ + "wlect", + CMD__N, + CommandTab, + CommandInfo, + OPT__N_SPECIFIC, + OPT__N_TOTAL, + OptionInfo, + OptionUsed, + OptionIndex, + OptionShort, + OptionLong +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// END /////////////// +/////////////////////////////////////////////////////////////////////////////// + |
