aboutsummaryrefslogtreecommitdiff
path: root/project/src/ui/ui-wstrt.c
diff options
context:
space:
mode:
authorroot <root@dc13.lemmi>2020-07-21 10:00:46 +0200
committerroot <root@dc13.lemmi>2020-07-21 10:00:46 +0200
commit1192c4575ea7afdf38e3fa0df4587a08620af11e (patch)
tree6910a62487c282d0840d2e668aa7eb40b7c8a3fd /project/src/ui/ui-wstrt.c
parent76de8a89f7c1d1b4522eb66e8f89d248e8c1781f (diff)
SZS v2.18a
Diffstat (limited to '')
-rw-r--r--project/src/ui/ui-wstrt.c2207
1 files changed, 2207 insertions, 0 deletions
diff --git a/project/src/ui/ui-wstrt.c b/project/src/ui/ui-wstrt.c
new file mode 100644
index 0000000..463ab65
--- /dev/null
+++ b/project/src/ui/ui-wstrt.c
@@ -0,0 +1,2207 @@
+
+/***************************************************************************
+ * _______ _______ _______ *
+ * | ___ |____ | ___ | *
+ * | | |_| / /| | |_| *
+ * | |_____ / / | |_____ *
+ * |_____ | / / |_____ | *
+ * _ | | / / _ | | *
+ * | |___| |/ /____| |___| | *
+ * |_______|_______|_______| *
+ * *
+ * 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-wstrt.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_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_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "List only the track file names and suppress table header and footer."
+ },
+
+ { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header",
+ 0,
+ "Suppress the syntax information section in BMG text files."
+ },
+
+ { OPT_CHEAT, false, true, false, false, false, 0, "cheat",
+ "region",
+ "Change the output format and create a cheat code for the region."
+ " Allowed keywords: JAPAN; AMERICA, NTSC; EUROPE, AUSTRALIA, PAL;"
+ " KOREA."
+ },
+
+ { OPT_ADD_WCODE, false, true, false, false, false, 0, "@add-wcode",
+ "file",
+ "Each option call adds the filename to an internal list. Each file"
+ " must be of type GCT and is added to the internal wcode stock.\n"
+ " If a single file is not found and the filename (not path) contains"
+ " at least 1 '@' character, then all '@' characters of it are replaced"
+ " by the region code (one of P,E,J,K) for a second try."
+ },
+
+ { 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_ADD_LECODE, false, true, false, false, false, 0, "add-lecode",
+ 0,
+ "Add LE-CODE starter to main.dol."
+ },
+
+ { OPT_ADD_CTCODE, false, false, false, false, false, 0, "add-ctcode",
+ 0,
+ "If source is an original main.dol file of MKWii, then append 2"
+ " sections (usually T2 and D8) with CT-CODE. The CTCODE is inserted"
+ " after sections defined by --add-section and then only, if there are"
+ " no address collisions.\n"
+ " If --ct-dir is used, then files named rmc[ejp]/boot_code.bin and"
+ " boot_code.bin for T2, and rmc[ejp]/boot_data.bin and boot_data.bin"
+ " for D8 are searched."
+ },
+
+ { OPT_MOVE_D8, false, false, false, false, false, 0, "move-d8",
+ 0,
+ "Move the CT-CODE section D8 to another place at the middle of binary."
+ " It is done automatically, if the original place overlaps other"
+ " existing sections."
+ },
+
+ { OPT_ADD_SECTION, false, false, false, false, false, 0, "add-section",
+ "file",
+ "Each option call adds the filename to an internal list. Each file"
+ " must be of type GCT, GCH or WCH. All GCT files together are combined"
+ " with an internal code handler to one section (like a GCH file). GCH"
+ " and WCH define sections and patches. The defined sections are added"
+ " and VBI hooks are optionally initialized. Use option --force to"
+ " allow overlapped sections. Use option --verbose up to 2 times for a"
+ " log.\n"
+ " If a single file is not found and the filename (not path) contains"
+ " at least 1 '@' character, then all '@' characters of it are replaced"
+ " by the region code (one of P,E,J,K) for a second try.\n"
+ " The intention of this option is to add a Gecko Code Handler and"
+ " cheat codes to a main.dol for automatic execution. See"
+ " https://szs.wiimm.de/doc/addsect for details."
+ },
+
+ { OPT_FULL_GCH, false, true, false, false, false, 0, "full-gch",
+ 0,
+ "Use the full 'codehandler' instead of 'codehandleronly'."
+ },
+
+ { OPT_GCT_NO_SEP, false, true, false, false, false, 0, "gct-no-sep",
+ 0,
+ "Ignore cheat code separators completly and don't filter 'F0000001"
+ " 0000xxxx' codes. Options --gct-sep and --gct-asm-sep are ignored"
+ " too."
+ },
+
+ { OPT_GCT_SEP, false, true, false, false, false, 0, "gct-sep",
+ 0,
+ "Detect and remove cheat code separators of format 'F0000001"
+ " 0000xxxx'. The separators are used to split the cheat codes into"
+ " several blocks if the total size is too large. ASM blocks are"
+ " skipped if searching separators."
+ },
+
+ { OPT_GCT_ASM_SEP, false, true, false, false, false, 0, "gct-asm-sep",
+ 0,
+ "Detect the beginning of ASM blocks and use them as cheat code"
+ " separators. The separators are used to split the cheat codes into"
+ " several blocks if the total size is too large."
+ },
+
+ { OPT_GCT_LIST, false, true, false, false, false, 0, "gct-list",
+ 0,
+ "If GCT separators active, print a summary table about the"
+ " distribution of the segments. Be more verbose if set twice."
+ },
+
+ { OPT_GCT_MOVE, true, false, false, false, false, 0, "gct-move",
+ "[=mode]",
+ "If a section is of type gecko code handler + cheat code, then make"
+ " the heap smaller and move the cheat codes before the FST section.\n"
+ " Parameter MODE is optional. If set, OFF disables and ON enables"
+ " this feature. For mode AUTO (default) this feature is enabled, if"
+ " the cheat codes are too large or for internal reasons."
+ },
+
+ { OPT_GCT_ADDR, false, false, false, false, false, 0, "gct-addr",
+ "address",
+ "If --gct-move is active, a text section is created to manage the code"
+ " handling. This section is only needed at start and is placed by"
+ " default at address 0c802c0000 (good address for all 4 regions) as"
+ " part of BSS. This option changes the start address of the section."
+ " If address is 0 or invalid, then unused BSS space is searched."
+ },
+
+ { OPT_GCT_SPACE, false, false, false, false, false, 0, "gct-space",
+ "size",
+ "Define the minimal space for the code part of --gct-move. This value"
+ " is ignored, if it is smaller than the size of the cheat codes. This"
+ " option was only implemented to test the memory allocation by"
+ " --gct-move with large blocks."
+ },
+
+ { OPT_ALLOW_USER_GCH, true, false, false, false, false, 0, "allow-user-gch",
+ "[=mode]",
+ " This option is only relevant, if main.dol is patched for wiimmfi.de."
+ " It is dedicated to custom distribution creators for test purposes."
+ " If enabled, a user can load an own instance of Gecko Code Handler"
+ " and cheat codes and can use them online. If disabled, pachcing for"
+ " online modus is disabled if an alternative Gecko Code Handler is"
+ " detected.\n"
+ " Parameter MODE is optional. If set, OFF disables and ON enables"
+ " this feature. For mode AUTO (default) it depends on other options."
+ },
+
+ { OPT_CREATE_SECT, false, true, false, false, false, 0, "create-sect",
+ "mode=file",
+ "Create a new DOL section by loading the binary file. MODE is a list"
+ " of 'P' (parameter support), 'T' or 'D' with optional digit (define"
+ " section) and an address (auto if not set). The parts are separated"
+ " by spaces or commas.\n"
+ " If MODE is 'P', then 4 32-bit parameters are expected at offset"
+ " 0x10: The section address at 0x10 (read), the relative entry point"
+ " at 0x14 (read, used if >0), the original DOL entry point at 0x18"
+ " (written), the address of the last defined '.dol' section at 0x1c"
+ " (written).\n"
+ " If the file name is '.dol', then it points not to a file. Instead a"
+ " copy of the DOL header beginning with the section addresses and"
+ " ending behind the entry point (156B total) is copied. MODE 'P' is"
+ " ignored for this section. All other MODE 'P' sections are updated at"
+ " offset 0x1c.\n"
+ " --cs is a short cut."
+ },
+
+ { OPT_WPF, false, true, false, false, false, 0, "wpf",
+ "file",
+ "Each option call adds the filename to an internal list. Each file"
+ " must be of type WPF (Wiimms Patch File) and defines a list of"
+ " conditionals and patches for staticr.rel and main.dol."
+ },
+
+ { OPT_SECTIONS, false, false, false, false, true, 0, "sections",
+ 0,
+ "Print in machine readable sections and parameter lines."
+ },
+
+ { OPT_VADDR, false, false, false, false, true, 0, "vaddr",
+ "RANGE",
+ "Comma separated list of virtual addresses to select the hex-dump"
+ " ranges. Each element is either ADDRESS (1 byte) or START:END or"
+ " START#SIZE."
+ },
+
+ { OPT_FADDR, false, false, false, false, false, 0, "faddr",
+ "RANGE",
+ "Comma separated list of file addresses to select the hex-dump ranges."
+ " Each element is either ADDRESS (1 byte) or START:END or START#SIZE."
+ },
+
+ { OPT_SNAME, false, false, false, false, false, 0, "sname",
+ "LIST",
+ "Comma separated list of section names to select the hex-dump ranges."
+ },
+
+ { OPT_INT1, false, false, false, false, true, 0, "i1",
+ 0,
+ "Format: Print single bytes as integer number (default)."
+ },
+
+ { OPT_INT2, false, false, false, false, false, 0, "i2",
+ 0,
+ "Format: Print each 2 bytes as integer number."
+ },
+
+ { OPT_INT3, false, false, false, false, false, 0, "i3",
+ 0,
+ "Format: Print each 3 bytes as integer number."
+ },
+
+ { OPT_INT4, false, false, false, false, false, 0, "i4",
+ 0,
+ "Format: Print each 4 bytes as integer number."
+ },
+
+ { OPT_INT5, false, false, false, false, false, 0, "i5",
+ 0,
+ "Format: Print each 5 bytes as integer number."
+ },
+
+ { OPT_INT6, false, false, false, false, false, 0, "i6",
+ 0,
+ "Format: Print each 6 bytes as integer number."
+ },
+
+ { OPT_INT7, false, false, false, false, false, 0, "i7",
+ 0,
+ "Format: Print each 7 bytes as integer number."
+ },
+
+ { OPT_INT8, false, false, false, false, false, 0, "i8",
+ 0,
+ "Format: Print each 8 bytes as integer number."
+ },
+
+ { OPT_FLOAT, false, false, false, false, false, 0, "float",
+ 0,
+ "Format: Print each 4 bytes as floating point number."
+ },
+
+ { OPT_DOUBLE, false, false, false, false, false, 0, "double",
+ 0,
+ "Format: Print each 8 bytes as double floating point number."
+ },
+
+ { OPT_LE, false, false, false, false, false, 0, "le",
+ 0,
+ "Use little endian for binary data."
+ },
+
+ { OPT_BE, false, false, false, false, false, 0, "be",
+ 0,
+ "Use big endian for binary data (default)."
+ },
+
+ { OPT_ZEROS, false, false, false, false, false, 0, "zeros",
+ 0,
+ "Print integer numbers with leading zeros."
+ },
+
+ { OPT_HEX, false, false, false, false, false, 0, "hex",
+ 0,
+ "Print integer numbers as hexadecimal numbers (default)."
+ },
+
+ { OPT_DEC, false, false, false, false, false, 0, "dec",
+ 0,
+ "Print integer numbers as decimal numbers."
+ },
+
+ { OPT_C_SYNTAX, false, false, false, false, false, 0, "c-syntax",
+ 0,
+ "Print output in `C' syntax."
+ },
+
+ { OPT_ADDR, false, false, false, false, false, 0, "address",
+ "addr",
+ "Use ADDR instead of null as start address for the dump."
+ },
+
+ { OPT_ALIGN, false, false, false, false, false, 0, "align",
+ 0,
+ "Try to align the dump, so that the addresses (printed or not) are"
+ " multiple of bytes-per-line."
+ },
+
+ { OPT_TRIGGER, false, false, false, false, false, 0, "trigger",
+ "num",
+ "If the number NUM is found and printed, close the current line and"
+ " start with a new one. If --align is set too, continue the next line"
+ " with the current column. The trigger works only for integer formats,"
+ " but not for floats."
+ },
+
+ { OPT_NO_ADDR, false, false, false, false, false, 0, "no-address",
+ 0,
+ "Suppress the address column of the dump."
+ },
+
+ { OPT_NO_NUMBERS, false, false, false, false, false, 0, "no-numbers",
+ 0,
+ "Suppress the numbers column of the dump."
+ },
+
+ { OPT_NO_TEXT, false, false, false, false, false, 0, "no-text",
+ 0,
+ "Suppress the text column of the dump."
+ },
+
+ { OPT_FORMAT, false, false, false, false, false, 0, "format",
+ 0,
+ "Add '#FORMAT:' info lines."
+ },
+
+ { OPT_NO_NULL, false, false, false, false, false, 0, "no-null",
+ 0,
+ "Ignore data lines with NULL bytes only and print a summary for each"
+ " NULL block. ('#NULL: ...')"
+ },
+
+ { OPT_NARROW, false, false, false, false, false, 0, "narrow",
+ 0,
+ "Suppress the spaces that are usually inserted for readability."
+ },
+
+ { OPT_SMALL, false, false, false, false, false, 0, "small",
+ 0,
+ "Each call will halve the number of bytes per line. Usually, 16 bytes"
+ " per lines are reduced to 8, then to 4, 2 and 1. The effective number"
+ " of bytes per line is format dependent."
+ },
+
+ { OPT_WIDE, false, false, false, false, false, 0, "wide",
+ 0,
+ "Each call will round down the current bytes per line value to the"
+ " next multiple of 16 and then increment it by 16. Usually, 16 bytes"
+ " per lines are enhanced to 32, then to 48, 64, 80 and so on. The"
+ " effective number of bytes per line is format dependent."
+ },
+
+ { OPT_BYTES, false, false, false, false, false, 0, "bytes",
+ "num",
+ "Print up to NUM bytes per line instead of 16. The maximum allowed"
+ " value is 600. The effective number of bytes per line is format"
+ " dependent (multiple of format size)."
+ },
+
+ {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 62
+
+ //----- 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_AT_DUMMY, false, true, false, false, false, '@', "@",
+ 0,
+ ""
+ },
+
+ { 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_TRACKS, false, false, false, false, false, 'T', "tracks",
+ "tracks",
+ "Define a new track order. A comma separated list in the format [a=]b"
+ " or a:=b is expected. 'a' and 'b' are track names or slot numbers."
+ " 'a' is the destination slot and 'b' the assigned track. If 'a' is"
+ " omitted, the next slot is used; this means [a=]b,c,d is possible.\n"
+ " Tracks will only be exchanged so that always all tracks are"
+ " assigned. But if using ':=' the new slots are assigned without"
+ " exchanging and the old values are lost."
+ },
+
+ { OPT_ARENAS, false, false, false, false, false, 'A', "arenas",
+ "arenas",
+ "Define a new arena order. A comma separated list in the format [a=]b"
+ " or a:=b is expected. 'a' and 'b' are arena names or slot numbers."
+ " 'a' is the destination slot and 'b' the assigned arena. If 'a' is"
+ " omitted, the next slot is used; this means [a=]b,c,d is possible.\n"
+ " Arenas will only be exchanged so that always all arenas are"
+ " assigned. But if using ':=' the new slots are assigned without"
+ " exchanging and the old values are lost."
+ },
+
+ { OPT_REGION, false, false, false, false, false, 'R', "region",
+ "region",
+ "If 'region' is an unsigned number, the region for online versus races"
+ " and for battles is patched to the entered number. If the number is"
+ " prefixed by the letter 't', a test mode is enabled and the places"
+ " are patched with ascending numbers. You can patch StaticR.rel and"
+ " main.dol.\n"
+ " Otherwise a keyword is expected. Official regions are: JAPAN(0),"
+ " AMERICA(1), EUROPE(2), AUSTRALIA(OCEANIA,3), KOREA(4), TAIWAN(5) and"
+ " CHINA(6). RESTORE restores the original Nintendo values and NONE"
+ " disables region patching (default).\n"
+ " See https://wiimmfi.de/reg-list for other regions."
+ },
+
+ { OPT_VS_REGION, false, false, false, false, false, 0, "vs-region",
+ "region",
+ "Same as --region, but only for online versus races."
+ },
+
+ { OPT_BT_REGION, false, false, false, false, false, 0, "bt-region",
+ "region",
+ "Same as --region, but only for online battles."
+ },
+
+ { OPT_ALL_RANKS, true, false, false, false, false, 0, "all-ranks",
+ "[=mode]",
+ "If set to ON (default without parameter), the server query to"
+ " Nintendos servers is manipulated, so that the player will find all"
+ " players in online races independent of their ranking points. Value"
+ " RESTORE disables this feature and restores Nintendos original query."
+ " Value NONE disables this kind of patching (default)."
+ },
+
+ { OPT_POINTS, false, false, false, false, false, 0, "points",
+ "list",
+ "This patch option defines a new table for the points assigned to"
+ " players after a versus or room race. The parameter is a blank or"
+ " comma and slash (next row) separated list with numbers (points)"
+ " between 0 and 255 and the following keywords: NINTENDO, LINEAR, WIN,"
+ " WIN15, WIN25 to select a predefined table; NO-BONUS, BONUS, NULL,"
+ " ONE as options; N1..N12 to select the row for N players. See"
+ " https://szs.wiimm.de/opt/points for details."
+ },
+
+ { OPT_HTTPS, false, false, false, false, false, 0, "https",
+ "mode",
+ "Patch the https strings of REL and DOL files. 'mode' is one of the"
+ " following keywords:\n"
+ "RESTORE restores the original URLs and domains.\n"
+ "HTTP replaces HTTPS requests by HTTP and sub-domain 'naswii.' by"
+ " 'nas.'.\n"
+ "DOMAIN replace HTTPS requests by HTTP and the domain"
+ " 'nintendowifi.net' by a domain specified by option --domain.\n"
+ "SAKE0 same as DOMAIN, but don't replace URLs with SAKE domain.\n"
+ "SAKE1 same as SAKE0, but replace HTTPS of SAKE domains."
+ },
+
+ { OPT_DOMAIN, false, false, false, false, false, 0, "domain",
+ "dom",
+ "Define a domain for option --https. The default is 'wiimmfi.de'."
+ },
+
+ { OPT_WIIMMFI, false, false, false, false, false, 0, "wiimmfi",
+ 0,
+ "Patch the files for the new custom server. It is a short cut for"
+ " '--https domain --domain wiimmfi.de'."
+ },
+
+ { OPT_TWIIMMFI, false, true, false, false, false, 0, "twiimmfi",
+ 0,
+ "Patch the files for the test server. It is a short cut for '--https"
+ " domain --domain test.wiimmfi.de'."
+ },
+
+ { OPT_WC24, false, false, false, false, false, 0, "wc24",
+ 0,
+ "Exclude 2 strings of file StaticR.rel from --wiimmfi and --domain"
+ " patch to enable WC24 support."
+ },
+
+ { OPT_WCODE, true, true, false, false, false, 0, "wcode",
+ "[=mode]",
+ "Enable (mode=ON) or disable (mode=OFF) wiimmfi-code patching. Default"
+ " mode is AUTO. In this case, patching is enabled if any WCODE is"
+ " defined or option --domain is set either to 'wiimmfi.de' or to"
+ " 'test.wiimmfi.de'."
+ },
+
+ { OPT_PB_MODE, false, false, false, false, false, 0, "pb-mode",
+ "mode",
+ "Mode for the patched-by string: OFF disables modifications. RESET"
+ " resets the string to stars. WIIMMFI defines it only, if patched for"
+ " Wiimmfi. AUTO (default) defines it only, if patched. ALWAYS defines"
+ " it always."
+ },
+
+ { OPT_PATCHED_BY, false, true, false, false, false, 0, "@patched-by",
+ "string",
+ "Define a string for patched-by. Default is: wstrt vVERSION rREVISION"
+ },
+
+ { OPT_VS, false, false, false, false, false, 0, "vs",
+ "char",
+ "Reset (str is empty) or replace the second character of 'vs' to"
+ " create an own online world for versus races. The file StaticR.rel"
+ " will be patched at 4 places."
+ },
+
+ { OPT_VS2, false, true, false, false, false, 0, "vs2",
+ "str",
+ "Reset (str is empty) or replace the 2 characters of 'vs' to create an"
+ " own online world for versus races. If the parameter contains only 1"
+ " character, use 'v' as first character. The file StaticR.rel will be"
+ " patched at 4 places.\n"
+ " Wiimmfi will only detect 'Versus' if the first letter is 'v' or"
+ " 'V'."
+ },
+
+ { OPT_BT, false, false, false, false, false, 0, "bt",
+ "char",
+ "Reset (str is empty) or replace the second character of 'bt' to"
+ " create an own online world for battles. The file StaticR.rel will be"
+ " patched at 4 places."
+ },
+
+ { OPT_BT2, false, true, false, false, false, 0, "bt2",
+ "str",
+ "Reset (str is empty) or replace the 2 characters of 'bt' to create an"
+ " own online world for battles. If the parameter contains only 1"
+ " character, use 'b' as first character. The file StaticR.rel will be"
+ " patched at 4 places.\n"
+ " Wiimmfi will only detect 'Battle' if the first letter is 'b' or"
+ " 'B'."
+ },
+
+ { OPT_CANNON, false, false, false, false, false, 0, "cannon",
+ "idx,p1,p2,p3,p4",
+ "Patch parameters for cannon with index IDX (0..2). Parameters P1..P4"
+ " are floating point numbers. Repeat this option for each cannon, that"
+ " should be modified."
+ },
+
+ { OPT_MENO, false, false, false, false, false, 0, "meno",
+ 0,
+ "Patch some 'MenuSingle' and 'MenuMulti' strings of file StaticR.rel"
+ " for online usage to 'MenO*' (MenuOnline) to distinguish between"
+ " offline and online races."
+ },
+
+ { 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_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."
+ },
+
+ { OPT_CLEAN_DOL, false, false, false, false, false, 0, "clean-dol",
+ 0,
+ "Remove additional DOL sections, reset entry point and VBI address,"
+ " and try to restore other patches known by SZS tools. This is done"
+ " after loading a DOL and before analysing and patching to allow"
+ " re-patching."
+ },
+
+ { OPT_CT_DIR, false, false, false, false, false, 0, "ct-dir",
+ "dir",
+ "Define a search directory for CT-CODE parts and use the internal"
+ " copies only, if no valid file is found. Each file is searched"
+ " without and then with extension '.bz2'. For both cases bzip2 files"
+ " are detected and decompressed. Only files with correct file type are"
+ " accepted.\n"
+ " Use this option multiple times to define more than one search"
+ " directory."
+ },
+
+ {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 111
+
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// alternate option infos ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+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_DUMP_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "For DOL files: If set, a second table with the image map is printed."
+ " If set twice, a third table with delta values is printed too."
+ };
+
+static const InfoOption_t option_cmd_HTTPS_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ " Print output a C source"
+ };
+
+static const InfoOption_t option_cmd_HTTPS_VERBOSE =
+ { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose",
+ 0,
+ " Print hex dump if an entry differs."
+ };
+
+static const InfoOption_t option_cmd_TRACKS_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Add columns for music slot and short name."
+ };
+
+static const InfoOption_t option_cmd_FIND_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Add a user friendly track or arena name at the end of each line. If"
+ " set twice, add also the file names of the track and sound files"
+ " before the track name. If set three times, add the slot index and"
+ " the internal index (both zero based) before the file names."
+ };
+
+static const InfoOption_t option_cmd_POINTS_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Print the table as comma separated lists in C notation."
+ };
+
+static const InfoOption_t option_cmd_POINTS_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Append a string in --points format that defines the table. If set"
+ " twice, append up to 3 strings in different modes."
+ };
+
+static const InfoOption_t option_cmd_ANALYZE_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Print different lists if bugs found. If set twice, print the lists"
+ " always."
+ };
+
+static const InfoOption_t option_cmd_PATCH_FORCE =
+ { OPT_FORCE, false, false, false, false, false, 0, "force",
+ 0,
+ "Accept overlapped sections.\n"
+ ">>> THE RESULT IS MOST LIKELY INVALID! <<<"
+ };
+
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// 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_RAWDUMP, "_RAWDUMP", 0, 0 },
+ { CMD_DUMP, "DUMP", 0, 0 },
+ { CMD_CDUMP, "_CDUMP", 0, 0 },
+ { CMD_HEXDUMP, "HEXDUMP", "XDUMP", 0 },
+ { CMD_HTTPS, "_HTTPS", 0, 0 },
+ { CMD_EXTRACT, "EXTRACT", "X", 0 },
+ { CMD_TRACKS, "TRACKS", 0, 0 },
+ { CMD_ARENAS, "ARENAS", 0, 0 },
+ { CMD_FILES, "FILES", 0, 0 },
+ { CMD_FIND, "FIND", 0, 0 },
+ { CMD_POINTS, "POINTS", "PTS", 0 },
+ { CMD_ANALYZE, "ANALYZE", "ANA", 0 },
+ { CMD_ANALYZE, "ANALYSE", 0, 0 },
+ { CMD_PATCH, "PATCH", 0, 0 },
+
+ { CMD__N,0,0,0 }
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// OptionShort & OptionLong ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static const char OptionShort[] = "Vh@qvLc:lBHT:A:R:td:D:E:orupi";
+
+static const struct option OptionLong[] =
+{
+ { "version", 0, 0, 'V' },
+ { "help", 0, 0, 'h' },
+ { "xhelp", 0, 0, GO_XHELP },
+ { "@", 0, 0, '@' },
+ { "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' },
+ { "long", 0, 0, 'l' },
+ { "brief", 0, 0, 'B' },
+ { "no-header", 0, 0, 'H' },
+ { "noheader", 0, 0, 'H' },
+ { "tracks", 1, 0, 'T' },
+ { "arenas", 1, 0, 'A' },
+ { "region", 1, 0, 'R' },
+ { "vs-region", 1, 0, GO_VS_REGION },
+ { "vsregion", 1, 0, GO_VS_REGION },
+ { "vregion", 1, 0, GO_VS_REGION },
+ { "bt-region", 1, 0, GO_BT_REGION },
+ { "btregion", 1, 0, GO_BT_REGION },
+ { "bregion", 1, 0, GO_BT_REGION },
+ { "all-ranks", 2, 0, GO_ALL_RANKS },
+ { "allranks", 2, 0, GO_ALL_RANKS },
+ { "points", 1, 0, GO_POINTS },
+ { "pts", 1, 0, GO_POINTS },
+ { "cheat", 1, 0, GO_CHEAT },
+ { "https", 1, 0, GO_HTTPS },
+ { "domain", 1, 0, GO_DOMAIN },
+ { "wiimmfi", 0, 0, GO_WIIMMFI },
+ { "twiimmfi", 0, 0, GO_TWIIMMFI },
+ { "wc24", 0, 0, GO_WC24 },
+ { "wcode", 2, 0, GO_WCODE },
+ { "@add-wcode", 1, 0, GO_ADD_WCODE },
+ { "@addwcode", 1, 0, GO_ADD_WCODE },
+ { "pb-mode", 1, 0, GO_PB_MODE },
+ { "pbmode", 1, 0, GO_PB_MODE },
+ { "@patched-by", 1, 0, GO_PATCHED_BY },
+ { "@patchedby", 1, 0, GO_PATCHED_BY },
+ { "vs", 1, 0, GO_VS },
+ { "vs2", 1, 0, GO_VS2 },
+ { "bt", 1, 0, GO_BT },
+ { "bt2", 1, 0, GO_BT2 },
+ { "cannon", 1, 0, GO_CANNON },
+ { "meno", 0, 0, GO_MENO },
+ { "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 },
+ { "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 },
+ { "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' },
+ { "clean-dol", 0, 0, GO_CLEAN_DOL },
+ { "cleandol", 0, 0, GO_CLEAN_DOL },
+ { "add-lecode", 0, 0, GO_ADD_LECODE },
+ { "addlecode", 0, 0, GO_ADD_LECODE },
+ { "add-ctcode", 0, 0, GO_ADD_CTCODE },
+ { "addctcode", 0, 0, GO_ADD_CTCODE },
+ { "ct-dir", 1, 0, GO_CT_DIR },
+ { "ctdir", 1, 0, GO_CT_DIR },
+ { "move-d8", 0, 0, GO_MOVE_D8 },
+ { "moved8", 0, 0, GO_MOVE_D8 },
+ { "add-section", 1, 0, GO_ADD_SECTION },
+ { "addsection", 1, 0, GO_ADD_SECTION },
+ { "full-gch", 0, 0, GO_FULL_GCH },
+ { "fullgch", 0, 0, GO_FULL_GCH },
+ { "gct-no-sep", 0, 0, GO_GCT_NO_SEP },
+ { "gctnosep", 0, 0, GO_GCT_NO_SEP },
+ { "gct-sep", 0, 0, GO_GCT_SEP },
+ { "gctsep", 0, 0, GO_GCT_SEP },
+ { "gct-asm-sep", 0, 0, GO_GCT_ASM_SEP },
+ { "gctasmsep", 0, 0, GO_GCT_ASM_SEP },
+ { "gct-list", 0, 0, GO_GCT_LIST },
+ { "gctlist", 0, 0, GO_GCT_LIST },
+ { "gct-move", 2, 0, GO_GCT_MOVE },
+ { "gctmove", 2, 0, GO_GCT_MOVE },
+ { "gct-addr", 1, 0, GO_GCT_ADDR },
+ { "gctaddr", 1, 0, GO_GCT_ADDR },
+ { "gct-space", 1, 0, GO_GCT_SPACE },
+ { "gctspace", 1, 0, GO_GCT_SPACE },
+ { "allow-user-gch", 2, 0, GO_ALLOW_USER_GCH },
+ { "allowusergch", 2, 0, GO_ALLOW_USER_GCH },
+ { "create-sect", 1, 0, GO_CREATE_SECT },
+ { "createsect", 1, 0, GO_CREATE_SECT },
+ { "cs", 1, 0, GO_CREATE_SECT },
+ { "wpf", 1, 0, GO_WPF },
+ { "sections", 0, 0, GO_SECTIONS },
+ { "vaddr", 1, 0, GO_VADDR },
+ { "va", 1, 0, GO_VADDR },
+ { "faddr", 1, 0, GO_FADDR },
+ { "fa", 1, 0, GO_FADDR },
+ { "sname", 1, 0, GO_SNAME },
+ { "sn", 1, 0, GO_SNAME },
+ { "i1", 0, 0, GO_INT1 },
+ { "i2", 0, 0, GO_INT2 },
+ { "i3", 0, 0, GO_INT3 },
+ { "i4", 0, 0, GO_INT4 },
+ { "i5", 0, 0, GO_INT5 },
+ { "i6", 0, 0, GO_INT6 },
+ { "i7", 0, 0, GO_INT7 },
+ { "i8", 0, 0, GO_INT8 },
+ { "float", 0, 0, GO_FLOAT },
+ { "double", 0, 0, GO_DOUBLE },
+ { "le", 0, 0, GO_LE },
+ { "be", 0, 0, GO_BE },
+ { "zeros", 0, 0, GO_ZEROS },
+ { "hex", 0, 0, GO_HEX },
+ { "dec", 0, 0, GO_DEC },
+ { "c-syntax", 0, 0, GO_C_SYNTAX },
+ { "csyntax", 0, 0, GO_C_SYNTAX },
+ { "address", 1, 0, GO_ADDR },
+ { "align", 0, 0, GO_ALIGN },
+ { "trigger", 1, 0, GO_TRIGGER },
+ { "no-address", 0, 0, GO_NO_ADDR },
+ { "noaddress", 0, 0, GO_NO_ADDR },
+ { "no-numbers", 0, 0, GO_NO_NUMBERS },
+ { "nonumbers", 0, 0, GO_NO_NUMBERS },
+ { "no-text", 0, 0, GO_NO_TEXT },
+ { "notext", 0, 0, GO_NO_TEXT },
+ { "format", 0, 0, GO_FORMAT },
+ { "no-null", 0, 0, GO_NO_NULL },
+ { "nonull", 0, 0, GO_NO_NULL },
+ { "narrow", 0, 0, GO_NARROW },
+ { "small", 0, 0, GO_SMALL },
+ { "wide", 0, 0, GO_WIDE },
+ { "bytes", 1, 0, GO_BYTES },
+
+ {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 @ */ OPT_AT_DUMMY,
+ /* 0x041 A */ OPT_ARENAS,
+ /* 0x042 B */ OPT_BRIEF,
+ /* 0x043 */ 0,
+ /* 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 */ 0,0,0,0, 0,
+ /* 0x052 R */ OPT_REGION,
+ /* 0x053 */ 0,
+ /* 0x054 T */ OPT_TRACKS,
+ /* 0x055 */ 0,
+ /* 0x056 V */ OPT_VERSION,
+ /* 0x057 */ 0,0,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_VS_REGION,
+ /* 0x08b */ OPT_BT_REGION,
+ /* 0x08c */ OPT_ALL_RANKS,
+ /* 0x08d */ OPT_POINTS,
+ /* 0x08e */ OPT_CHEAT,
+ /* 0x08f */ OPT_HTTPS,
+ /* 0x090 */ OPT_DOMAIN,
+ /* 0x091 */ OPT_WIIMMFI,
+ /* 0x092 */ OPT_TWIIMMFI,
+ /* 0x093 */ OPT_WC24,
+ /* 0x094 */ OPT_WCODE,
+ /* 0x095 */ OPT_ADD_WCODE,
+ /* 0x096 */ OPT_PB_MODE,
+ /* 0x097 */ OPT_PATCHED_BY,
+ /* 0x098 */ OPT_VS,
+ /* 0x099 */ OPT_VS2,
+ /* 0x09a */ OPT_BT,
+ /* 0x09b */ OPT_BT2,
+ /* 0x09c */ OPT_CANNON,
+ /* 0x09d */ OPT_MENO,
+ /* 0x09e */ OPT_UTF_8,
+ /* 0x09f */ OPT_NO_UTF_8,
+ /* 0x0a0 */ OPT_FORCE,
+ /* 0x0a1 */ OPT_REPAIR_MAGICS,
+ /* 0x0a2 */ OPT_OLD,
+ /* 0x0a3 */ OPT_STD,
+ /* 0x0a4 */ OPT_NEW,
+ /* 0x0a5 */ OPT_EXTRACT,
+ /* 0x0a6 */ OPT_NUMBER,
+ /* 0x0a7 */ OPT_CLEAN_DOL,
+ /* 0x0a8 */ OPT_ADD_LECODE,
+ /* 0x0a9 */ OPT_ADD_CTCODE,
+ /* 0x0aa */ OPT_CT_DIR,
+ /* 0x0ab */ OPT_MOVE_D8,
+ /* 0x0ac */ OPT_ADD_SECTION,
+ /* 0x0ad */ OPT_FULL_GCH,
+ /* 0x0ae */ OPT_GCT_NO_SEP,
+ /* 0x0af */ OPT_GCT_SEP,
+ /* 0x0b0 */ OPT_GCT_ASM_SEP,
+ /* 0x0b1 */ OPT_GCT_LIST,
+ /* 0x0b2 */ OPT_GCT_MOVE,
+ /* 0x0b3 */ OPT_GCT_ADDR,
+ /* 0x0b4 */ OPT_GCT_SPACE,
+ /* 0x0b5 */ OPT_ALLOW_USER_GCH,
+ /* 0x0b6 */ OPT_CREATE_SECT,
+ /* 0x0b7 */ OPT_WPF,
+ /* 0x0b8 */ OPT_SECTIONS,
+ /* 0x0b9 */ OPT_VADDR,
+ /* 0x0ba */ OPT_FADDR,
+ /* 0x0bb */ OPT_SNAME,
+ /* 0x0bc */ OPT_INT1,
+ /* 0x0bd */ OPT_INT2,
+ /* 0x0be */ OPT_INT3,
+ /* 0x0bf */ OPT_INT4,
+ /* 0x0c0 */ OPT_INT5,
+ /* 0x0c1 */ OPT_INT6,
+ /* 0x0c2 */ OPT_INT7,
+ /* 0x0c3 */ OPT_INT8,
+ /* 0x0c4 */ OPT_FLOAT,
+ /* 0x0c5 */ OPT_DOUBLE,
+ /* 0x0c6 */ OPT_LE,
+ /* 0x0c7 */ OPT_BE,
+ /* 0x0c8 */ OPT_ZEROS,
+ /* 0x0c9 */ OPT_HEX,
+ /* 0x0ca */ OPT_DEC,
+ /* 0x0cb */ OPT_C_SYNTAX,
+ /* 0x0cc */ OPT_ADDR,
+ /* 0x0cd */ OPT_ALIGN,
+ /* 0x0ce */ OPT_TRIGGER,
+ /* 0x0cf */ OPT_NO_ADDR,
+ /* 0x0d0 */ OPT_NO_NUMBERS,
+ /* 0x0d1 */ OPT_NO_TEXT,
+ /* 0x0d2 */ OPT_FORMAT,
+ /* 0x0d3 */ OPT_NO_NULL,
+ /* 0x0d4 */ OPT_NARROW,
+ /* 0x0d5 */ OPT_SMALL,
+ /* 0x0d6 */ OPT_WIDE,
+ /* 0x0d7 */ OPT_BYTES,
+ /* 0x0d8 */ 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[62] = // cmd #1
+{
+ 0,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,
+ 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
+};
+
+static u8 option_allowed_cmd_HELP[62] = // 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,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[62] = // 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,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[62] = // 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,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[62] = // cmd #5
+{
+ 0,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,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[62] = // cmd #6
+{
+ 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,
+ 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
+};
+
+static u8 option_allowed_cmd_FILETYPE[62] = // cmd #7
+{
+ 0,1,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,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_FILEATTRIB[62] = // 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,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_RAWDUMP[62] = // cmd #9
+{
+ 0,0,0,0,0, 0,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,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0
+};
+
+static u8 option_allowed_cmd_DUMP[62] = // cmd #10
+{
+ 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,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_CDUMP[62] = // 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,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_HEXDUMP[62] = // cmd #12
+{
+ 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,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_HTTPS[62] = // cmd #13
+{
+ 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,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_EXTRACT[62] = // cmd #14
+{
+ 0,0,0,0,0, 0,1,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,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
+ 0,0
+};
+
+static u8 option_allowed_cmd_TRACKS[62] = // cmd #15
+{
+ 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, 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_ARENAS[62] = // cmd #16
+{
+ 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, 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_FILES[62] = // 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,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_FIND[62] = // cmd #18
+{
+ 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,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_POINTS[62] = // cmd #19
+{
+ 0,1,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,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_ANALYZE[62] = // cmd #20
+{
+ 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,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[62] = // cmd #21
+{
+ 0,0,0,0,0, 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,
+ 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
+};
+
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// 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_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_POINTS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_TEST,
+ OptionInfo + OPT_FORCE,
+ OptionInfo + OPT_REPAIR_MAGICS,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CLEAN_DOL,
+ OptionInfo + OPT_CT_DIR,
+
+ 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_RAWDUMP[] =
+{
+ OptionInfo + OPT_DEST,
+ OptionInfo + OPT_DEST2,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_DUMP[] =
+{
+ &option_cmd_DUMP_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_CDUMP[] =
+{
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_HEXDUMP[] =
+{
+ OptionInfo + OPT_VADDR,
+ OptionInfo + OPT_FADDR,
+ OptionInfo + OPT_SNAME,
+ OptionInfo + OPT_LOGGING,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_INT1,
+ OptionInfo + OPT_INT2,
+ OptionInfo + OPT_INT3,
+ OptionInfo + OPT_INT4,
+ OptionInfo + OPT_INT5,
+ OptionInfo + OPT_INT6,
+ OptionInfo + OPT_INT7,
+ OptionInfo + OPT_INT8,
+ OptionInfo + OPT_FLOAT,
+ OptionInfo + OPT_DOUBLE,
+ OptionInfo + OPT_LE,
+ OptionInfo + OPT_BE,
+ OptionInfo + OPT_ZEROS,
+ OptionInfo + OPT_HEX,
+ OptionInfo + OPT_DEC,
+ OptionInfo + OPT_C_SYNTAX,
+ OptionInfo + OPT_ADDR,
+ OptionInfo + OPT_ALIGN,
+ OptionInfo + OPT_TRIGGER,
+ OptionInfo + OPT_NO_ADDR,
+ OptionInfo + OPT_NO_NUMBERS,
+ OptionInfo + OPT_NO_TEXT,
+ OptionInfo + OPT_FORMAT,
+ OptionInfo + OPT_NO_NULL,
+ OptionInfo + OPT_NARROW,
+ OptionInfo + OPT_SMALL,
+ OptionInfo + OPT_WIDE,
+ OptionInfo + OPT_BYTES,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_HTTPS[] =
+{
+ &option_cmd_HTTPS_LONG,
+ &option_cmd_HTTPS_VERBOSE,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_EXTRACT[] =
+{
+ OptionInfo + OPT_DEST,
+ OptionInfo + OPT_DEST2,
+ OptionInfo + OPT_OVERWRITE,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_TRACKS[] =
+{
+ OptionInfo + OPT_NO_HEADER,
+ OptionInfo + OPT_BRIEF,
+ &option_cmd_TRACKS_LONG,
+ OptionInfo + OPT_DE,
+ OptionInfo + OPT_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_ARENAS[] =
+{
+ OptionInfo + OPT_NO_HEADER,
+ OptionInfo + OPT_BRIEF,
+ &option_cmd_TRACKS_LONG,
+ OptionInfo + OPT_DE,
+ OptionInfo + OPT_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_FILES[] =
+{
+ OptionInfo + OPT_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_FIND[] =
+{
+ OptionInfo + OPT_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+ &option_cmd_FIND_LONG,
+ OptionInfo + OPT_DE,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_POINTS[] =
+{
+ OptionInfo + OPT_POINTS,
+ &option_cmd_POINTS_BRIEF,
+ &option_cmd_POINTS_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_ANALYZE[] =
+{
+ OptionInfo + OPT_CLEAN_DOL,
+ OptionInfo + OPT_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+ &option_cmd_ANALYZE_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_PATCH[] =
+{
+ 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,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CLEAN_DOL,
+ OptionInfo + OPT_TRACKS,
+ OptionInfo + OPT_ARENAS,
+ OptionInfo + OPT_REGION,
+ OptionInfo + OPT_VS_REGION,
+ OptionInfo + OPT_BT_REGION,
+ OptionInfo + OPT_ALL_RANKS,
+ OptionInfo + OPT_HTTPS,
+ OptionInfo + OPT_DOMAIN,
+ OptionInfo + OPT_WIIMMFI,
+ OptionInfo + OPT_PB_MODE,
+ OptionInfo + OPT_WC24,
+ OptionInfo + OPT_VS,
+ OptionInfo + OPT_BT,
+ OptionInfo + OPT_CANNON,
+ OptionInfo + OPT_MENO,
+ OptionInfo + OPT_ADD_CTCODE,
+ OptionInfo + OPT_CT_DIR,
+ OptionInfo + OPT_MOVE_D8,
+ OptionInfo + OPT_ADD_SECTION,
+ OptionInfo + OPT_GCT_MOVE,
+ OptionInfo + OPT_GCT_ADDR,
+ OptionInfo + OPT_GCT_SPACE,
+ OptionInfo + OPT_ALLOW_USER_GCH,
+ &option_cmd_PATCH_FORCE,
+
+ 0
+};
+
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// InfoCommand ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static const InfoCommand_t CommandInfo[CMD__N+1] =
+{
+ { 0,
+ false,
+ false,
+ false,
+ "wstrt",
+ 0,
+ "wstrt [option]... command [option|parameter|file]...",
+ "Wiimms StaticR Tool : Manipulate the 'main.dol' and 'StaticR.rel'"
+ " files of Mario Kart Wii.",
+ 0,
+ 37,
+ option_tab_tool,
+ 0
+ },
+
+ { CMD_VERSION,
+ false,
+ false,
+ false,
+ "VERSION",
+ 0,
+ "wstrt 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",
+ "wstrt HELP [--width=wd] OPT|OPTION ...\n"
+ "wstrt HELP [--width=wd] CMD|COMMAND [ignored]...\n"
+ "wstrt HELP [--width=wd] command [-b] [ignored]...\n"
+ "wstrt 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,
+ "wstrt 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,
+ "wstrt 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,
+ "wstrt 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",
+ "wstrt 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",
+ "wstrt 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",
+ "wstrt 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_RAWDUMP,
+ true,
+ false,
+ false,
+ "_RAWDUMP",
+ 0,
+ "wszst _RAWDUMP [-d|-D] destdir",
+ "This hidden command creates the destination directory and create"
+ " several files as copy of internal data.",
+ 0,
+ 2,
+ option_tab_cmd_RAWDUMP,
+ option_allowed_cmd_RAWDUMP
+ },
+
+ { CMD_DUMP,
+ false,
+ false,
+ true,
+ "DUMP",
+ 0,
+ "wstrt DUMP file...",
+ "Dump the structure of 'StaticR.rel' (in development) and of DOL files"
+ " as text.",
+ 0,
+ 1,
+ option_tab_cmd_DUMP,
+ option_allowed_cmd_DUMP
+ },
+
+ { CMD_CDUMP,
+ true,
+ false,
+ false,
+ "_CDUMP",
+ 0,
+ "wstrt _CDUMP file...",
+ "Dump the structure of 'StaticR.rel' (in development) and of DOL files"
+ " as C source fragments.",
+ 0,
+ 0,
+ option_tab_cmd_CDUMP,
+ option_allowed_cmd_CDUMP
+ },
+
+ { CMD_HEXDUMP,
+ false,
+ false,
+ false,
+ "HEXDUMP",
+ "XDUMP",
+ "wstrt HEXDUMP file...",
+ "Dump the content of DOL files as hex dump and use virtual addresses."
+ " Select parts by --vaddr, --faddr and --sname. Without selectors, the"
+ " whole file is dumped.",
+ 0,
+ 32,
+ option_tab_cmd_HEXDUMP,
+ option_allowed_cmd_HEXDUMP
+ },
+
+ { CMD_HTTPS,
+ true,
+ false,
+ false,
+ "_HTTPS",
+ 0,
+ "wstrt _HTTPS file...",
+ "Collect data about https-requests and print a total summary for all"
+ " accepted files.",
+ 0,
+ 2,
+ option_tab_cmd_HTTPS,
+ option_allowed_cmd_HTTPS
+ },
+
+ { CMD_EXTRACT,
+ false,
+ false,
+ false,
+ "EXTRACT",
+ "X",
+ "wstrt EXTRACT dol...",
+ "Extract the sections of a DOL file into a directory. StaticR.rel"
+ " files are ignored.",
+ 0,
+ 3,
+ option_tab_cmd_EXTRACT,
+ option_allowed_cmd_EXTRACT
+ },
+
+ { CMD_TRACKS,
+ false,
+ false,
+ true,
+ "TRACKS",
+ 0,
+ "wstrt TRACKS [file]...",
+ "Show track infos in the order of the 'StaticR.rel' files. If no file"
+ " is entered, the standard order is used.",
+ 0,
+ 19,
+ option_tab_cmd_TRACKS,
+ option_allowed_cmd_TRACKS
+ },
+
+ { CMD_ARENAS,
+ false,
+ false,
+ false,
+ "ARENAS",
+ 0,
+ "wstrt ARENAS [file]...",
+ "Show arena infos in the order of the 'StaticR.rel' files. If no file"
+ " is entered, the standard order is used.",
+ 0,
+ 19,
+ option_tab_cmd_ARENAS,
+ option_allowed_cmd_ARENAS
+ },
+
+ { CMD_FILES,
+ false,
+ false,
+ false,
+ "FILES",
+ 0,
+ "wstrt FILES [file]...",
+ "List track and arena file names in machine readable format. Use the"
+ " order of the entered 'StaticR.rel' files. If no file is entered, the"
+ " standard order is used.",
+ 0,
+ 15,
+ option_tab_cmd_FILES,
+ option_allowed_cmd_FILES
+ },
+
+ { CMD_FIND,
+ false,
+ false,
+ false,
+ "FIND",
+ 0,
+ "wstrt FIND [+]TRACK keyword...\n"
+ "wstrt FIND [+]ARENA keyword...",
+ "Find a track or arena by keyword and print one line for each keyword"
+ " in machine readable format 'type slot' or, if not found, a simple"
+ " '-'. The name is searched in the entered context (tracks or arenas)."
+ " If TRACK or ARENA is prefixed by a plus, then a failed search will"
+ " be continued in the other context. If at least one name is not"
+ " found, the tool terminates with exit code NOT_EXISTS.",
+ 0,
+ 17,
+ option_tab_cmd_FIND,
+ option_allowed_cmd_FIND
+ },
+
+ { CMD_POINTS,
+ false,
+ false,
+ false,
+ "POINTS",
+ "PTS",
+ "wstrt POINTS [--points=list] [file]...",
+ "Print a table with the points assigned to player after a versus or"
+ " room race for each entered file. If no file is entered, the standard"
+ " table is used. However, if option --points is set only the resulting"
+ " table is printed.",
+ 0,
+ 3,
+ option_tab_cmd_POINTS,
+ option_allowed_cmd_POINTS
+ },
+
+ { CMD_ANALYZE,
+ false,
+ false,
+ true,
+ "ANALYZE",
+ "ANA",
+ "wstrt ANALYZE [file]...",
+ "Open 'StaticR.rel' and DOL files and analyze them. The files will be"
+ " classified using SHA1 checksums.",
+ 0,
+ 17,
+ option_tab_cmd_ANALYZE,
+ option_allowed_cmd_ANALYZE
+ },
+
+ { CMD_PATCH,
+ false,
+ false,
+ false,
+ "PATCH",
+ 0,
+ "wstrt PATCH [file]...",
+ "Patch 'main.dol and 'StaticR.rel' files of Mario Kart Wii. No backup"
+ " is made.",
+ 0,
+ 34,
+ option_tab_cmd_PATCH,
+ option_allowed_cmd_PATCH
+ },
+
+ {0,0,0,0,0,0,0,0,0,0,0,0}
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// InfoUI ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+const InfoUI_t InfoUI_wstrt =
+{
+ "wstrt",
+ CMD__N,
+ CommandTab,
+ CommandInfo,
+ OPT__N_SPECIFIC,
+ OPT__N_TOTAL,
+ OptionInfo,
+ OptionUsed,
+ OptionIndex,
+ OptionShort,
+ OptionLong
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// END ///////////////
+///////////////////////////////////////////////////////////////////////////////
+