aboutsummaryrefslogtreecommitdiff
path: root/project/src/ui/ui-wkmpt.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-wkmpt.c
parent76de8a89f7c1d1b4522eb66e8f89d248e8c1781f (diff)
SZS v2.18a
Diffstat (limited to 'project/src/ui/ui-wkmpt.c')
-rw-r--r--project/src/ui/ui-wkmpt.c2661
1 files changed, 2661 insertions, 0 deletions
diff --git a/project/src/ui/ui-wkmpt.c b/project/src/ui/ui-wkmpt.c
new file mode 100644
index 0000000..1ce32eb
--- /dev/null
+++ b/project/src/ui/ui-wkmpt.c
@@ -0,0 +1,2661 @@
+
+/***************************************************************************
+ * _______ _______ _______ *
+ * | ___ |____ | ___ | *
+ * | | |_| / /| | |_| *
+ * | |_____ / / | |_____ *
+ * |_____ | / / |_____ | *
+ * _ | | / / _ | | *
+ * | |___| |/ /____| |___| | *
+ * |_______|_______|_______| *
+ * *
+ * 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-wkmpt.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_SCALE, false, false, false, false, false, 0, "scale",
+ "vector[@origin]",
+ "Transform the data: Scale all coordinates and size values by 'vector'"
+ " relative to the point 'origin'. If the origin is not set, 0,0,0 is"
+ " used instead.\n"
+ " Negative values mirror the coordinates. Each parameter is either a"
+ " vector expression or a comma separated expression list of"
+ " coordinates ('x,z' or 'x,y,z').\n"
+ " Transformations are calculated in the order SCALE, SHIFT, ROTATE,"
+ " TRANSLATE."
+ },
+
+ { OPT_SHIFT, false, false, false, false, false, 0, "shift",
+ "vector",
+ "Transform the data: Add 'vector' to all coordinates. It's simlar to"
+ " --translate, but the addition is done before rotation. The parameter"
+ " is either a vector expression or a comma separated expression list"
+ " of coordinates ('x,z' or 'x,y,z').\n"
+ " Transformations are calculated in the order SCALE, SHIFT, ROTATE,"
+ " TRANSLATE."
+ },
+
+ { OPT_XSS, false, false, false, false, false, 0, "xss",
+ "x1old,x1new,x2old,x2new",
+ "--xss (x-scale-shift) calculates the X values of --scale and --shift,"
+ " so that old values are transformed to the new values. The parameters"
+ " are numbers or expression."
+ },
+
+ { OPT_YSS, false, false, false, false, false, 0, "yss",
+ "y1old,y1new,y2old,y2new",
+ "--yss (y-scale-shift) calculates the Y values of --scale and --shift,"
+ " so that old values are transformed to the new values. The parameters"
+ " are numbers or expression."
+ },
+
+ { OPT_ZSS, false, false, false, false, false, 0, "zss",
+ "z1old,z1new,z2old,z2new",
+ "--zss (z-scale-shift) calculates the Z values of --scale and --shift,"
+ " so that old values are transformed to the new values. The parameters"
+ " are numbers or expression."
+ },
+
+ { OPT_ROT, false, false, false, false, false, 0, "rot",
+ "degree[@origin]",
+ "Transform the data: Rotate all coordinates and rotation values by the"
+ " angle 'degree' (is a vector) around the 3 axes. All 3 axes goes"
+ " through the point 'origin'. If the origin is not set, 0,0,0 is used"
+ " instead.\n"
+ " Each parameter is either a vector expression or a comma separated"
+ " expression list of coordinates ('x,y,z').\n"
+ " Option --rot is an alternative for --xrot, --yrot and --zrot to"
+ " define all 3 rotations in one step. Transformations are calculated"
+ " in the order SCALE, SHIFT, X-ROTATE, Y-ROTATE, Z-ROTATE, TRANSLATE."
+ },
+
+ { OPT_XROT, false, false, false, false, false, 0, "xrot",
+ "degree[@origin]",
+ "Transform the data: Rotate all coordinates and rotation values by the"
+ " angle 'degree' around the x-axis, that goes through the point"
+ " 'origin'. If the origin is not set, 0,0,0 is used instead.\n"
+ " Each parameter is either a vector expression or a comma separated"
+ " expression list of coordinates ('y,z' or 'x,y,z').\n"
+ " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE,"
+ " Y-ROTATE, Z-ROTATE, TRANSLATE."
+ },
+
+ { OPT_YROT, false, false, false, false, false, 0, "yrot",
+ "degree[@origin]",
+ "Transform the data: Rotate all coordinates and rotation values by the"
+ " angle 'degree' around the x-axis, that goes through the point"
+ " 'origin'. If the origin is not set, 0,0,0 is used instead. This is a"
+ " horizontal counterclockwise rotation and the old option name --hrot"
+ " can also used.\n"
+ " Each parameter is either a vector expression or a comma separated"
+ " expression list of coordinates ('x,z' or 'x,y,z').\n"
+ " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE,"
+ " Y-ROTATE, Z-ROTATE, TRANSLATE."
+ },
+
+ { OPT_ZROT, false, false, false, false, false, 0, "zrot",
+ "degree[@origin]",
+ "Transform the data: Rotate all coordinates and rotation values by the"
+ " angle 'degree' around the z-axis, that goes through the point"
+ " 'origin'. If the origin is not set, 0,0,0 is used instead.\n"
+ " Each parameter is either a vector expression or a comma separated"
+ " expression list of coordinates ('x,y' or 'x,y,z').\n"
+ " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE,"
+ " Y-ROTATE, Z-ROTATE, TRANSLATE."
+ },
+
+ { OPT_YPOS, false, false, false, false, false, 0, "ypos",
+ "pos",
+ "This option defines an Y position for KMP:CKPT transformations. It"
+ " has only impact to X and Z rotations (Options --xrot and --zrot). If"
+ " not set, the mean y of the active rotation origins are used."
+ },
+
+ { OPT_TRANSLATE, false, false, false, false, false, 0, "translate",
+ "vector",
+ "Transform the data: Add 'vector' to all coordinates. It's simlar to"
+ " --shift, but the addition is done after rotation. The parameter is"
+ " either a vector expression or a comma separated expression list of"
+ " coordinates ('x,z' or 'x,y,z'). --trans is a short cut.\n"
+ " Transformations are calculated in the order SCALE, SHIFT, ROTATE,"
+ " TRANSLATE."
+ },
+
+ { OPT_NULL, false, false, false, false, false, 0, "null",
+ 0,
+ "Create a neutral transformation without affecting the coordinates."
+ " The only influence is, that the dependent values (like maximum) are"
+ " re-calculated as if a transformation has taken place."
+ },
+
+ { OPT_NEXT, false, false, false, false, false, 0, "next",
+ 0,
+ "Close the current transformation step with all scaling, shifting,"
+ " rotation and translation options and open a new step with cleared"
+ " options. On transformation each step is logical done one by one. In"
+ " real, one total transformation matrix is calculated and used for"
+ " fast transformations.\n"
+ " If option --next is used, the ability for modifying the scale and"
+ " rotation vectors (not the positions) of different KMP sections is"
+ " nearly always lost. A warning is printed if this occurs."
+ },
+
+ { OPT_ASCALE, false, false, false, false, false, 0, "ascale",
+ "factor@dir",
+ "Transform the data and do an axis scale: Close the current"
+ " transformation step like --next and scale the data by 'factor' into"
+ " the direction given by the vector 'dir'. Store the resulting matrix"
+ " as single transformation step and open a new one.\n"
+ " This kind of transformation is EXPERIMENTAL!"
+ },
+
+ { OPT_AROT, false, false, false, false, false, 0, "arot",
+ "degree[@pos1]@pos2",
+ "Transform the data and do an axis rotation: Close the current"
+ " transformation step like --next and rotate the data by 'degree'"
+ " around the axis defined by the 2 points. If 'pos1' is not set, use"
+ " 0,0,0 instead. Store the resulting matrix as single transformation"
+ " step and open a new one.\n"
+ " This kind of transformation is EXPERIMENTAL!"
+ },
+
+ { OPT_TFORM_SCRIPT, false, false, false, false, false, 0, "tform-script",
+ "script",
+ "Load the script and execute it by the text parser.\n"
+ " Then for each coordinate (2D and 3D), call the macro TRANSFORM after"
+ " all other transformations. Call it without parameters and set"
+ " variable $I with a zero based index of all vertices, variable $D to"
+ " the dimension (2 or 3) and the variable $P to the vector of the"
+ " current vertex. If the macro returns a vector, it is the new"
+ " position.\n"
+ " For each file, macro BEGIN is called at the beginning and END after"
+ " processing all points, but only, if the macros are defined. For END,"
+ " variable $I is set to the number of processed vertices in the"
+ " current file.\n"
+ " Before each macro call, the private and local variables are cleared"
+ " and only global parameters are permanent. The zero based index is"
+ " cleared for each new source. The parameters of the macro calls are"
+ " defined in the local name space."
+ },
+
+ { OPT_RM_GOBJ, false, false, false, false, false, 0, "rm-gobj",
+ "objlist",
+ "Remove objects from the KMP section GOBJ. Therefor a comma separated"
+ " object list with single values like 'a' or ranges like 'a:b' is"
+ " expected. 'a' and 'b' are numbers, object names (prefixed by 'o$')"
+ " or any other parser expressions."
+ },
+
+ { OPT_SLOT, false, false, false, false, false, 0, "slot",
+ "keyword",
+ "Patch a track file to run at the specified slot. KMP and KCL may be"
+ " modified. BRRES files may be added to or removed from SZS. The main"
+ " keywords are DAISY, DESERT, SHERBET, SHYGUY, STANDARD and MOST. Slot"
+ " numbers (except '42' and '4.2') and different other track names are"
+ " also accepted. For some conversions, the auto-add library is needed."
+ " See https://szs.wiimm.de/opt/slot for details."
+ },
+
+ { OPT_DRAW, false, false, false, false, false, 'w', "draw",
+ "list",
+ "The parameter is a comma separated list of keywords to select the"
+ " elements to draw. Allowed keywords are: CKPT, CJGPT, JGPT, KTPT,"
+ " ENPT, ITPT, POTI, CNPT, ITEMBOXES, COINS, ROADOBJECTS, SOLIDOBJECTS,"
+ " DECORATION, BLACK, WHITE, KCL, NONE and ALL (default); the classes"
+ " POINTS, OBJECTS and RESPAWN; the presence-flag selectors"
+ " [1-3]OFFLINE and [1-3]ONLINE; the special options DETAILED, DISPATCH"
+ " and WARNINGS. If a keyword is prefixed by a minus sign, the option"
+ " is disabled. Option KCL decides, if the reference KCL is included in"
+ " the output. If DETAILED is disabled, an output with less faces is"
+ " created. If DISPATCH is enabled, the settings of dispatch points are"
+ " visualized. If WARNINGS is enabled, some objects are drawn in red."
+ " See https://szs.wiimm.de/opt/draw for details."
+ },
+
+ { OPT_POS_MODE, false, false, false, false, false, 0, "pos-mode",
+ "list",
+ "Define a comma separated list of modes for the next --pos-file"
+ " options. Each element of the list begins with a keyword followed by"
+ " a column index and/or a parameter list: X<col>, Y<col>, Z<col>,"
+ " D<col>, C<num>, T<num>, FA<col>=<str>, FB<col>=<str>, FC<col>=<str>,"
+ " <COLOR>\n"
+ " See https://szs.wiimm.de/opt/pos-mode for details."
+ },
+
+ { OPT_POS_FILE, false, false, false, false, false, 0, "pos-file",
+ "file",
+ "Load a position file created by mkw-ana and print the positions into"
+ " the map. Define the modes first, because the last defined modes set"
+ " by --pos-mode are used!"
+ },
+
+ { OPT_PNG, false, false, false, false, false, 0, "png",
+ "pix_size ['a' align] ['x' x1[:x2]] ['y' y1[:y2]] ['t' types]",
+ "Draw a PNG with a top view of the track instead of an OBJ file."
+ " Transformations are done after the KMP 3D drawing, but before PNG"
+ " creation.\n"
+ " 'pix_size' is the number of world units (sqare) used for 1 PNG"
+ " pixel. 'align' is a factor as anti-aliasing pixel multiplicator (>1"
+ " is on). 'x' and 'y' defines the part of the world that is displayed."
+ " If not set, the check points (KMP/CKPT) are used to find a good"
+ " area. 't' is a bit field with 32 bits to enable the the KCL types."
+ " Each bit corresponds to one of the KCL types and only . The default"
+ " is to display all but not walls and solid fall (0x7fef0bff).\n"
+ " All numeric values can be any expression allowed by the parser."
+ },
+
+ { OPT_KCL_FLAG, false, false, false, false, false, 0, "kcl-flag",
+ "joblist",
+ "Modify the KCL flag of KCL files. A comma separated job list in the"
+ " format 'srclist=dest' is expected. 'srclist' is a plus sign"
+ " separated list with single values like <val>, T<type> and"
+ " <val>/<mask> or ranges like <val>:<val>, T<type>:<type> and"
+ " <val>:<val>/<mask>. '<val>' is a complete KCL flag in the range of"
+ " 0..0xffff. '<type>' are only the base types in the range of 0..0x1f."
+ " If <mask> is present, it marks the relevant bits. For the T<type>"
+ " variant, the mask is set to 0x1f.\n"
+ " All KCL flags of the source list are assigned to the new value"
+ " 'dest', but only the set bits of '<mask>' are modified. A later"
+ " definition overrides the previous one. See"
+ " https://szs.wiimm.de/opt/kcl-flag for details."
+ },
+
+ { OPT_KCL_SCRIPT, false, false, false, false, false, 0, "kcl-script",
+ "script",
+ "After reading a KCL source file and executing all transformations,"
+ " the text file 'script' is executed by the internal text parser. The"
+ " script should use the parser functions tri$*() to read and modify"
+ " the triangle positions and flags, or to add or remove complete"
+ " triangles.\n"
+ " If this option is used multiple times, each script is executed in"
+ " the entered order. See https://szs.wiimm.de/opt/kcl-script for"
+ " details."
+ },
+
+ { OPT_FLAG_FILE, false, false, false, false, false, 0, "flag-file",
+ "filename",
+ "Define a flag file if scanning an OBJ file (KCL processing). The file"
+ " name may contain %-escapes. Set it to an empty string to disable"
+ " flag files at all.\n"
+ " The tool search the flag file in the following order until found:"
+ " File defined by --flag-file; OBJ file name with replaced extension"
+ " ('a.obj' becomes 'a.flag'); OBJ file name with appended extension"
+ " ('a.obj' becomes 'a.obj.flag'). See"
+ " https://szs.wiimm.de/opt/flag-file for details."
+ },
+
+ { OPT_REPAIR_XPF, false, false, false, false, false, 0, "repair-xpflags",
+ "file",
+ "Load a KMP file and use it to repair the settings of the extended"
+ " presence flags, if they are destroyed by another KMP tool. --repxpf"
+ " is a short cut for this option."
+ },
+
+ { OPT_GAMEMODES, false, false, false, false, false, 0, "gamemodes",
+ "list",
+ "Filter the list of combinations. The parameter is a comma separated"
+ " list of keywords: AUTO: Add a automatic mode without conditions"
+ " first. STANDARD (or STD): Add standard modes. 1STANDARD (or 1STD):"
+ " Add standard modes first. BALLOON: Add balloon battle modes. COIN:"
+ " Add coin runners modes. BATTLE: Short cut for 'BALLOON,COIN'. VERSUS"
+ " (or VS): Add versus modes. ITEMRAIN: Add itemrain modes. RACE: Short"
+ " cut for 'VERSUS,ITEMRAIN'. ALL (default): Short cut for"
+ " 'STANDARD,BATTLE,RACE'. NO-MODES: Exclude 'ALL' and create auto"
+ " modes only. ENGINE: Include engine classes (default). NO-ENGINE:"
+ " Exclude engine classes. RANDOM: Include random modes (default)."
+ " NO-RANDOM: Exclude random modes. OFFLINE: Filter offline modes."
+ " ONLINE: Filter online modes. NO-TT: Exclude time trial. TT: Force a"
+ " time trial scenario, even if it is a duplicate. FULL: Don't"
+ " eliminate duplicates from list (up to 1573 modes). NSORT: Sort the"
+ " list by name. ISORT: Sort the list by index. DEBUG: Print a debug"
+ " info about this option."
+ },
+
+ { 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 information lines in decoded KMP text files. This includes"
+ " syntax information (--no-header). If set twice, the output of"
+ " unneeded sections is also suppressed."
+ },
+
+ { 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. The option works similar like -HBB"
+ " for KMP text files."
+ },
+
+ { OPT_NO_PARAM, false, false, false, false, false, 'P', "no-param",
+ 0,
+ "Disable parameter support in decoded KMP text files."
+ },
+
+ { OPT_EPSILON, false, false, false, false, false, 0, "epsilon",
+ "float",
+ "When comparing floating point numbers, 2 numbers are considered"
+ " identical if their difference is less than or equal to epsilon. The"
+ " default value is 0.01."
+ },
+
+ { OPT_DIFF, false, false, false, false, false, 0, "diff",
+ "list",
+ "List of KMP sections names that should be compared. To select a"
+ " section, use a combiantion of the following keywords: AREA, CAME,"
+ " CNPT, CKPH, CKPT, ENPH, ENPT, GOBJ, ITPH, ITPT, JGPT, KTPT, MSPT,"
+ " POTI, STGI, NONE, GOOD, DEFAULT of ALL (default). Additional"
+ " keywords are SORT (default) and NOSORT"
+ },
+
+ { OPT_GENERIC, false, false, false, false, false, 'G', "generic",
+ 0,
+ "Forget scanned entry names and use generic names for output."
+ },
+
+ { OPT_NO_ECHO, false, false, false, false, false, 0, "no-echo",
+ 0,
+ "Suppress output of @ECHO commands while scanning text files."
+ },
+
+ { OPT_NO_CHECK, false, false, false, false, false, 'N', "no-check",
+ 0,
+ "Do not make plausibility checks for KMP files."
+ },
+
+ { 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 == 49
+
+ //----- 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]",
+ "Enable LE-CODE and CT-CODE support. The optional parameter is"
+ " deprecated and ignored. See https://szs.wiimm.de/opt/lecode for"
+ " details."
+ },
+
+ { 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_BATTLE, true, false, false, false, false, 0, "battle",
+ "[=mode]",
+ "MODE is either OFF, AUTO (default) or ON. Without value, ON is used.\n"
+ " If mode is ON, assume a battle arena and enable a spüecial battle"
+ " support. If mode is OFF, disable special battle arena support. If"
+ " mode is AUTO, analyse the KMP and estimate, if it is a battle"
+ " areana. Modes ON and OFF override KMP parameter BATTLE-MODE."
+ },
+
+ { OPT_EXPORT_FLAGS, true, false, false, false, false, 0, "export-flags",
+ "[=mode]",
+ "MODE is either OFF, AUTO (default) or ON. Without value, ON is used."
+ " --exflags is an alternative name for the option.\n"
+ " If mode is ON, this feature is forced: On creating a KMP text file,"
+ " the option EXPORT-FLAGS is always set to 1. On creating a binary KMP"
+ " file, the flags are always exported as lowest byte of the scale"
+ " factors or x-rotation.\n"
+ " If mode is OFF, this feature is totally disabled. If mode is not"
+ " AUTO, KMP parameter EXPORT-FLAGS is overridden."
+ },
+
+ { OPT_ROUTE_OPTIONS, true, false, false, false, false, 0, "route-options",
+ "[=mode]",
+ "MODE is either OFF, AUTO (default) or ON. Without value, ON is used.\n"
+ " On mode ON, the new commands $PREV and $NEXT are printed for each"
+ " group of KMP sections ENPT and ITPT. On mode AUTO, the command is"
+ " only printed, if any option is set or if parameter SHOW-OPTIONS is"
+ " >0. On mode OFF, this feature is totally disabled to create KMP text"
+ " files that are compatible with versions <1.60a.\n"
+ " This option exists only for a transition period. Its behaviour will"
+ " be changed in the future. --ropt is a short cut."
+ },
+
+ { OPT_WIM0, true, false, false, false, false, 0, "wim0",
+ "[=mode]",
+ "MODE is either OFF, AUTO (default) or ON. Without value, ON is used.\n"
+ " If mode is ON, a KMP section called WIM0 is added on binary KMP"
+ " creation. The sections contains information for Wiimms tools.\n"
+ " If mode is OFF, this feature is totally disabled. If mode is not"
+ " AUTO, KMP parameter KMP-WIM0 is overridden."
+ },
+
+ { OPT_LOAD_KCL, false, false, false, false, false, 0, "load-kcl",
+ "file",
+ "Load a KCL or OBJ file for reference issues."
+ },
+
+ { OPT_KCL, false, false, false, false, false, 0, "kcl",
+ "list",
+ "Set global options for KCL processing. Parameter 'list' is a comma"
+ " separated list of keywords. A minus sign before a keyword disables a"
+ " setting. Each occurrence of the option will only change entered"
+ " settings and all other settings are untouched.\n"
+ " Keyword DEFAULT resets the default settings and CLEAR disables all."
+ " Keywords SMALL, MEDIUM and CHARY select the default parameters for"
+ " the octree creation. The other allowed keywords are: FAST, NEW,"
+ " CENTER, ROUND, NORMALS, MTL, WIIMM, TRIANGLES, OUT-SWAP, G, USEMTL,"
+ " CLIP, IN-SWAP, AUTO, HEX4, HEX23, HEX, DROP-UNUSED, DROP-FIXED,"
+ " DROP-INVALID, DROP, RM-FACEDOWN, RM-FACEUP, FIX-ALL, CONV-FACEUP,"
+ " WEAK-WALLS, SORT, INPLACE, SILENT and LOG. See"
+ " https://szs.wiimm.de/opt/kcl for details."
+ },
+
+ { OPT_TRI_AREA, false, false, false, false, false, 0, "tri-area",
+ "EXPR",
+ "Define the minimal area size of KCL triangles. The intention is to"
+ " ignore triangles that are generally to small. EXPR is a floating"
+ " point number or expression. Triangles are invalidated if their area"
+ " size is smaller than EXPR. The test is executed after reading files,"
+ " after transformations, and after calculating normals and lengths."
+ " Values between 0.01 and 4.0 are recommended. The careful value 1.0"
+ " is used as default. Value 0 disables this filter functionality."
+ },
+
+ { OPT_TRI_HEIGHT, false, false, false, false, false, 0, "tri-height",
+ "EXPR",
+ "Define the minimal height of KCL triangles. The intention is to"
+ " ignore deformed triangles (very slim, but long). EXPR is a floating"
+ " point number or expression. Triangles are invalidated if at least 1"
+ " of the 3 heights is smaller than EXPR. The test is executed after"
+ " reading files, after transformations, and after calculating normals"
+ " and lengths. Values between 0.01 and 2.0 are recommended. The"
+ " careful value 1.0 is used as default. Value 0 disables this filter"
+ " functionality.\n"
+ " --tri-ht is an alternative name for the option."
+ },
+
+ { OPT_XTRIDATA, true, true, false, false, false, 0, "xtridata",
+ "[=level]",
+ "Enable extended KCL triangles tests. The default level is 1."
+ },
+
+ { OPT_KMP, false, false, false, false, false, 0, "kmp",
+ "list",
+ "Set global options for KMP processing. Parameter 'list' is a comma"
+ " separated list of keywords. A minus sign before a keyword disables a"
+ " setting. Each occurrence of the option will only change entered"
+ " settings and all other settings are untouched.\n"
+ " Keyword DEFAULT resets the default settings and CLEAR disables all."
+ " The other allowed keywords are: FORCE, NEW, RM-SPCITEM, LEFT, RIGHT,"
+ " WIDE, NARROW, FIX-CKPH, FIX-ENPH, FIX-ITPH, FIX-PH, FIX-CKNEXT,"
+ " FIX-CKJGPT, FIX-CK, FIX-ALL, MASK-PFLAGS, RM-LECODE, PURGE-GOBJ,"
+ " FULL-DEFOBJ, DUMP-CLASS, DUMP-ONEWAY, DUMP-ALL, 1LAP ... 9LAPS,"
+ " MAX-LAPS, RM-EMPTY, INPLACE, SILENT and LOG. See"
+ " https://szs.wiimm.de/opt/kmp for details."
+ },
+
+ { OPT_SPEED_MOD, false, false, false, false, false, 0, "speed-mod",
+ "factor",
+ "The speed modifier is a user extensions to change the basic speed of"
+ " all vehicles. The speed factor itself is stored into KMP:STGI"
+ " section of a track.\n"
+ " If --speed-mod is set to a value >0.0, then the last 2 bytes of"
+ " the STGI section are patched. The value 0.0 reset these 2 bytes and"
+ " deactivates the speed modifier."
+ },
+
+ { OPT_KTPT2, false, false, false, false, false, 0, "ktpt2",
+ "vector",
+ "Insert or replace a second KTPT. Use VECTOR as new position. VECTOR"
+ " is either X,Z or X,Y,Z or an expression. Set Y to 0 for an automatic"
+ " defined height.\n"
+ " If the first 4 characters of VECTOR are 'AUTO' (ignoring case),"
+ " then the position is calculated automatically and set to the"
+ " recommendation of command wkmpt KTPT.\n"
+ " The tool looks for the nearest lap counter (CKPT with mode 0) and"
+ " adjust the KTPT: The direction of the lap counter is copied and the"
+ " KTPT is moved to the lap counter line using the new direction.\n"
+ " LE-CODE uses the second KTPT to draw the finish line at another"
+ " place away from the start position."
+ },
+
+ { OPT_TFORM_KMP, false, false, false, false, false, 0, "tform-kmp",
+ "list",
+ "Select KMP sections and objects for a transformation. --tkmp is a"
+ " short cut. The option expects a comma separated list of keywords."
+ " Non ambiguous of keywords are allowed and minus signs within"
+ " keywords are optional (e.g. GOBJS). A minus sign before a keyword"
+ " disables transformation of the related section or object.\n"
+ " Sections are selected by the KMP section names AREA, CAME, CKPT,"
+ " CNPT, ENPT, GOBJ, ITPT, JGPT, KTPT, MSPT and POTI.\n"
+ " Objects are selected by the keywords AREA-POSITION, AREA-ROTATE,"
+ " AREA-SCALE, CAME-POSITION, CKPT-POSITION, CNPT-POSITION,"
+ " CNPT-ROTATE, ENPT-POSITION, ENPT-SCALE, GOBJ-POSITION, GOBJ-ROTATE,"
+ " GOBJ-SCALE, ITPT-POSITION, ITPT-SCALE, JGPT-POSITION, JGPT-ROTATE,"
+ " KTPT-POSITION, KTPT-ROTATE, MSPT-POSITION, MSPT-ROTATE and"
+ " POTI-POSITION.\n"
+ " The keywords NONE and ALL (default) complete the field."
+ },
+
+ { 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_TRACKS, false, true, 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, true, 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_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_TINY, false, false, false, false, false, 0, "tiny",
+ "mode",
+ "Set tiny mode to a level between 0 and 7. See"
+ " https://szs.wiimm.de/opt/tiny for details."
+ },
+
+ { 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 == 91
+
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// alternate option infos ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static const InfoOption_t option_grp_TEXTOUT_NO_HEADER =
+ { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header",
+ 0,
+ "Suppress the syntax information section in KMP 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_TEST_VERBOSE =
+ { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose",
+ 0,
+ "Print the matrices of transformations."
+ };
+
+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_MATRIX_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "If set once, suppress vector dumps for transformation steps and"
+ " ignore option --long. If set twice, suppress vector dump for final"
+ " transformation too."
+ };
+
+static const InfoOption_t option_cmd_MATRIX_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "If set once, print inverse matrix for the final transformation. If"
+ " set twice, print inverse matrix for all transformations."
+ };
+
+static const InfoOption_t option_cmd_MATRIX_QUIET =
+ { OPT_QUIET, false, false, false, false, false, 'q', "quiet",
+ 0,
+ "Option --quiet is dedicated to automatic tests comparing the old and"
+ " new transformation algorithms. If set once, the tables are only"
+ " printed, if the results differ. If set twice, nothing is printed at"
+ " all and only the exit status will inform about the results."
+ };
+
+static const InfoOption_t option_cmd_OBJECTS_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Don't print the file list and the info line(s). If set twice, only ID"
+ " and object name is printed and option --long is ignored."
+ };
+
+static const InfoOption_t option_cmd_OBJECTS_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Print each setting starting on a new line. --long and --brief can be"
+ " used together."
+ };
+
+static const InfoOption_t option_cmd_DIFF_QUIET =
+ { OPT_QUIET, false, false, false, false, false, 'q', "quiet",
+ 0,
+ "If set once, only a summary status is printed. If set twice, the"
+ " status is only reported as exit status."
+ };
+
+static const InfoOption_t option_cmd_CHECK_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Print only warnings and suppress hints."
+ };
+
+static const InfoOption_t option_cmd_CHECK_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "Be verbose and print more statistics."
+ };
+
+static const InfoOption_t option_cmd_CHECK_QUIET =
+ { OPT_QUIET, false, false, false, false, false, 'q', "quiet",
+ 0,
+ "Be quiet until the first warning or hint is found."
+ };
+
+static const InfoOption_t option_cmd_STGI_IGNORE =
+ { OPT_IGNORE, false, false, false, false, false, 'i', "ignore",
+ 0,
+ "If set, ignore non existing source files and files without KMP"
+ " without warning. If set twice, ignore files with standard settings"
+ " too."
+ };
+
+static const InfoOption_t option_cmd_KTPT_IGNORE =
+ { OPT_IGNORE, false, false, false, false, false, 'i', "ignore",
+ 0,
+ "If set, ignore non existing source files and files without KMP"
+ " without warning."
+ };
+
+static const InfoOption_t option_cmd_KTPT_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "If set, compare each KTPT with each lap counter (some CKPT) and print"
+ " positions, directions, distances and recommendations as wide table."
+ };
+
+static const InfoOption_t option_cmd_ROUTES_IGNORE =
+ { OPT_IGNORE, false, false, false, false, false, 'i', "ignore",
+ 0,
+ "If set, ignore non existing source files and files without KMP"
+ " without warning."
+ };
+
+static const InfoOption_t option_cmd_GOBJ_NO_HEADER =
+ { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header",
+ 0,
+ "Suppress head and foot lines."
+ };
+
+static const InfoOption_t option_cmd_GOBJ_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Print only summary for each object category. If set twice, print a"
+ " status vector only."
+ };
+
+static const InfoOption_t option_cmd_GOBJ_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "?"
+ };
+
+static const InfoOption_t option_cmd_GAMEMODES_NO_HEADER =
+ { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header",
+ 0,
+ "Suppress head and foot lines."
+ };
+
+static const InfoOption_t option_cmd_GAMEMODES_BRIEF =
+ { OPT_BRIEF, false, false, false, false, false, 'B', "brief",
+ 0,
+ "Print only the scenario version and configuration name. If set twice,"
+ " suppress ead and foot lines too."
+ };
+
+static const InfoOption_t option_cmd_GAMEMODES_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "If set, print a status vector for each GOBJ element too: '-': Object"
+ " diabled; '=': Object diabled by presence flags, but visible before"
+ " race; '+': Object enabled; 'e': Depends on engine; 'r': Depends on"
+ " random scenario; 'b': Defintion object of type BITS; 'o': Defintion"
+ " object of type OR; 'a': Defintion object of type AND."
+ };
+
+static const InfoOption_t option_cmd_WIM0_LONG =
+ { OPT_LONG, false, false, false, false, false, 'l', "long",
+ 0,
+ "If set, disable table format and append a full hexdump for each WIM0"
+ " section."
+ };
+
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// 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_MATRIX, "MATRIX", 0, 0 },
+ { CMD_FLOAT, "FLOAT", 0, 0 },
+ { CMD_STARTPOS, "STARTPOS", "SP", 0 },
+ { CMD_OBJECTS, "OBJECTS", "OBJ", 0 },
+ { CMD_EXPORT, "_EXPORT", 0, 0 },
+ { CMD_XEXPORT, "_XEXPORT", 0, 0 },
+ { CMD_CAT, "CAT", 0, 0 },
+ { CMD_DECODE, "DECODE", "DEC", 0 },
+ { CMD_ENCODE, "ENCODE", "ENC", 0 },
+ { CMD_DIFF, "DIFF", "CMP", 0 },
+ { CMD_DRAW, "DRAW", "D", 0 },
+ { CMD_DRAW, "COBJECT", "COB", 0 },
+ { CMD_CHECK, "CHECK", "CHK", 0 },
+ { CMD_STGI, "STGI", 0, 0 },
+ { CMD_KTPT, "KTPT", 0, 0 },
+ { CMD_ROUTES, "ROUTES", 0, 0 },
+ { CMD_GOBJ, "GOBJ", 0, 0 },
+ { CMD_GAMEMODES, "GAMEMODES", "GMODES", 0 },
+ { CMD_WIM0, "WIM0", "W0", 0 },
+
+ { CMD__N,0,0,0 }
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// OptionShort & OptionLong ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static const char OptionShort[] = "VhqvLc:w:lHBXPGNM:T:A:td: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' },
+ { "scale", 1, 0, GO_SCALE },
+ { "shift", 1, 0, GO_SHIFT },
+ { "xss", 1, 0, GO_XSS },
+ { "yss", 1, 0, GO_YSS },
+ { "zss", 1, 0, GO_ZSS },
+ { "rot", 1, 0, GO_ROT },
+ { "xrot", 1, 0, GO_XROT },
+ { "yrot", 1, 0, GO_YROT },
+ { "hrot", 1, 0, GO_YROT },
+ { "zrot", 1, 0, GO_ZROT },
+ { "ypos", 1, 0, GO_YPOS },
+ { "translate", 1, 0, GO_TRANSLATE },
+ { "null", 0, 0, GO_NULL },
+ { "next", 0, 0, GO_NEXT },
+ { "ascale", 1, 0, GO_ASCALE },
+ { "arot", 1, 0, GO_AROT },
+ { "tform-script", 1, 0, GO_TFORM_SCRIPT },
+ { "tformscript", 1, 0, GO_TFORM_SCRIPT },
+ { "rm-gobj", 1, 0, GO_RM_GOBJ },
+ { "rmgobj", 1, 0, GO_RM_GOBJ },
+ { "battle", 2, 0, GO_BATTLE },
+ { "export-flags", 2, 0, GO_EXPORT_FLAGS },
+ { "exportflags", 2, 0, GO_EXPORT_FLAGS },
+ { "exflags", 2, 0, GO_EXPORT_FLAGS },
+ { "route-options", 2, 0, GO_ROUTE_OPTIONS },
+ { "routeoptions", 2, 0, GO_ROUTE_OPTIONS },
+ { "ropt", 2, 0, GO_ROUTE_OPTIONS },
+ { "wim0", 2, 0, GO_WIM0 },
+ { "slot", 1, 0, GO_SLOT },
+ { "draw", 1, 0, 'w' },
+ { "pos-mode", 1, 0, GO_POS_MODE },
+ { "posmode", 1, 0, GO_POS_MODE },
+ { "pos-file", 1, 0, GO_POS_FILE },
+ { "posfile", 1, 0, GO_POS_FILE },
+ { "png", 1, 0, GO_PNG },
+ { "load-kcl", 1, 0, GO_LOAD_KCL },
+ { "loadkcl", 1, 0, GO_LOAD_KCL },
+ { "kcl", 1, 0, GO_KCL },
+ { "kcl-flag", 1, 0, GO_KCL_FLAG },
+ { "kclflag", 1, 0, GO_KCL_FLAG },
+ { "kcl-script", 1, 0, GO_KCL_SCRIPT },
+ { "kclscript", 1, 0, GO_KCL_SCRIPT },
+ { "tri-area", 1, 0, GO_TRI_AREA },
+ { "triarea", 1, 0, GO_TRI_AREA },
+ { "tri-height", 1, 0, GO_TRI_HEIGHT },
+ { "triheight", 1, 0, GO_TRI_HEIGHT },
+ { "tri-ht", 1, 0, GO_TRI_HEIGHT },
+ { "triht", 1, 0, GO_TRI_HEIGHT },
+ { "kcl-min", 1, 0, GO_TRI_HEIGHT },
+ { "kclmin", 1, 0, GO_TRI_HEIGHT },
+ { "flag-file", 1, 0, GO_FLAG_FILE },
+ { "flagfile", 1, 0, GO_FLAG_FILE },
+ { "xtridata", 2, 0, GO_XTRIDATA },
+ { "xtri", 2, 0, GO_XTRIDATA },
+ { "kmp", 1, 0, GO_KMP },
+ { "speed-mod", 1, 0, GO_SPEED_MOD },
+ { "speedmod", 1, 0, GO_SPEED_MOD },
+ { "ktpt2", 1, 0, GO_KTPT2 },
+ { "tform-kmp", 1, 0, GO_TFORM_KMP },
+ { "tformkmp", 1, 0, GO_TFORM_KMP },
+ { "tkmp", 1, 0, GO_TFORM_KMP },
+ { "repair-xpflags", 1, 0, GO_REPAIR_XPF },
+ { "repairxpflags", 1, 0, GO_REPAIR_XPF },
+ { "repxpf", 1, 0, GO_REPAIR_XPF },
+ { "gamemodes", 1, 0, GO_GAMEMODES },
+ { "gmodes", 1, 0, GO_GAMEMODES },
+ { "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' },
+ { "epsilon", 1, 0, GO_EPSILON },
+ { "diff", 1, 0, GO_DIFF },
+ { "generic", 0, 0, 'G' },
+ { "no-echo", 0, 0, GO_NO_ECHO },
+ { "noecho", 0, 0, GO_NO_ECHO },
+ { "no-check", 0, 0, 'N' },
+ { "nocheck", 0, 0, 'N' },
+ { "max-file-size", 1, 0, 'M' },
+ { "maxfilesize", 1, 0, 'M' },
+ { "tracks", 1, 0, 'T' },
+ { "arenas", 1, 0, 'A' },
+ { "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 },
+ { "tiny", 1, 0, GO_TINY },
+ { "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' },
+ { "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,
+ /* 0x041 A */ OPT_ARENAS,
+ /* 0x042 B */ OPT_BRIEF,
+ /* 0x043 */ 0,
+ /* 0x044 D */ OPT_DEST2,
+ /* 0x045 E */ OPT_ESC,
+ /* 0x046 */ 0,
+ /* 0x047 G */ OPT_GENERIC,
+ /* 0x048 H */ OPT_NO_HEADER,
+ /* 0x049 */ 0,0,0,
+ /* 0x04c L */ OPT_LOGGING,
+ /* 0x04d M */ OPT_MAX_FILE_SIZE,
+ /* 0x04e N */ OPT_NO_CHECK,
+ /* 0x04f */ 0,
+ /* 0x050 P */ OPT_NO_PARAM,
+ /* 0x051 */ 0,0,0,
+ /* 0x054 T */ OPT_TRACKS,
+ /* 0x055 */ 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 w */ OPT_DRAW,
+ /* 0x078 */ 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_SCALE,
+ /* 0x08b */ OPT_SHIFT,
+ /* 0x08c */ OPT_XSS,
+ /* 0x08d */ OPT_YSS,
+ /* 0x08e */ OPT_ZSS,
+ /* 0x08f */ OPT_ROT,
+ /* 0x090 */ OPT_XROT,
+ /* 0x091 */ OPT_YROT,
+ /* 0x092 */ OPT_ZROT,
+ /* 0x093 */ OPT_YPOS,
+ /* 0x094 */ OPT_TRANSLATE,
+ /* 0x095 */ OPT_NULL,
+ /* 0x096 */ OPT_NEXT,
+ /* 0x097 */ OPT_ASCALE,
+ /* 0x098 */ OPT_AROT,
+ /* 0x099 */ OPT_TFORM_SCRIPT,
+ /* 0x09a */ OPT_RM_GOBJ,
+ /* 0x09b */ OPT_BATTLE,
+ /* 0x09c */ OPT_EXPORT_FLAGS,
+ /* 0x09d */ OPT_ROUTE_OPTIONS,
+ /* 0x09e */ OPT_WIM0,
+ /* 0x09f */ OPT_SLOT,
+ /* 0x0a0 */ OPT_POS_MODE,
+ /* 0x0a1 */ OPT_POS_FILE,
+ /* 0x0a2 */ OPT_PNG,
+ /* 0x0a3 */ OPT_LOAD_KCL,
+ /* 0x0a4 */ OPT_KCL,
+ /* 0x0a5 */ OPT_KCL_FLAG,
+ /* 0x0a6 */ OPT_KCL_SCRIPT,
+ /* 0x0a7 */ OPT_TRI_AREA,
+ /* 0x0a8 */ OPT_TRI_HEIGHT,
+ /* 0x0a9 */ OPT_FLAG_FILE,
+ /* 0x0aa */ OPT_XTRIDATA,
+ /* 0x0ab */ OPT_KMP,
+ /* 0x0ac */ OPT_SPEED_MOD,
+ /* 0x0ad */ OPT_KTPT2,
+ /* 0x0ae */ OPT_TFORM_KMP,
+ /* 0x0af */ OPT_REPAIR_XPF,
+ /* 0x0b0 */ OPT_GAMEMODES,
+ /* 0x0b1 */ OPT_ROUND,
+ /* 0x0b2 */ OPT_EPSILON,
+ /* 0x0b3 */ OPT_DIFF,
+ /* 0x0b4 */ OPT_NO_ECHO,
+ /* 0x0b5 */ OPT_UTF_8,
+ /* 0x0b6 */ OPT_NO_UTF_8,
+ /* 0x0b7 */ OPT_FORCE,
+ /* 0x0b8 */ OPT_REPAIR_MAGICS,
+ /* 0x0b9 */ OPT_TINY,
+ /* 0x0ba */ OPT_OLD,
+ /* 0x0bb */ OPT_STD,
+ /* 0x0bc */ OPT_NEW,
+ /* 0x0bd */ OPT_EXTRACT,
+ /* 0x0be */ OPT_NUMBER,
+ /* 0x0bf */ OPT_SECTIONS,
+ /* 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[49] = // cmd #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,1,
+ 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+};
+
+static u8 option_allowed_cmd_HELP[49] = // 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
+};
+
+static u8 option_allowed_cmd_ARGTEST[49] = // 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
+};
+
+static u8 option_allowed_cmd_TEST[49] = // 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
+};
+
+static u8 option_allowed_cmd_COLORS[49] = // cmd #5
+{
+ 0,0,0,0,0, 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,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+};
+
+static u8 option_allowed_cmd_ERROR[49] = // cmd #6
+{
+ 0,0,0,0,0, 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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1
+};
+
+static u8 option_allowed_cmd_FILETYPE[49] = // cmd #7
+{
+ 0,0,0,0,0, 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,1,0
+};
+
+static u8 option_allowed_cmd_FILEATTRIB[49] = // cmd #8
+{
+ 0,0,0,0,0, 0,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
+};
+
+static u8 option_allowed_cmd_SYMBOLS[49] = // cmd #9
+{
+ 0,0,0,0,0, 0,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
+};
+
+static u8 option_allowed_cmd_FUNCTIONS[49] = // cmd #10
+{
+ 0,0,0,0,0, 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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+};
+
+static u8 option_allowed_cmd_CALCULATE[49] = // 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
+};
+
+static u8 option_allowed_cmd_MATRIX[49] = // cmd #12
+{
+ 0,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,1,0,0,1,
+ 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+};
+
+static u8 option_allowed_cmd_FLOAT[49] = // 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,1,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_STARTPOS[49] = // cmd #14
+{
+ 0,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,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_OBJECTS[49] = // cmd #15
+{
+ 0,0,0,0,0, 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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0
+};
+
+static u8 option_allowed_cmd_EXPORT[49] = // cmd #16
+{
+ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 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_XEXPORT[49] = // 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
+};
+
+static u8 option_allowed_cmd_CAT[49] = // cmd #18
+{
+ 0,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,1,0,0,0,
+ 1,1,1,1,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,1,0
+};
+
+static u8 option_allowed_cmd_DECODE[49] = // cmd #19
+{
+ 0,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,1,0,0,0,
+ 1,1,1,1,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,0
+};
+
+static u8 option_allowed_cmd_ENCODE[49] = // cmd #20
+{
+ 0,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,1,0,0,0,
+ 0,0,0,0,0, 0,0,1,1,1, 1,1,1,1,1, 1,1,1,0
+};
+
+static u8 option_allowed_cmd_DIFF[49] = // cmd #21
+{
+ 0,0,0,0,0, 0,0,0,0,0, 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,0,0,0,1, 0,1,0,0,0, 0,0,0,0
+};
+
+static u8 option_allowed_cmd_DRAW[49] = // cmd #22
+{
+ 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,0,1, 0,1,0,0,0,
+ 1,1,1,1,0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,0
+};
+
+static u8 option_allowed_cmd_CHECK[49] = // cmd #23
+{
+ 0,0,0,0,0, 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,1,0,0,0, 0,1,1,1,0, 0,0,0,0,0, 0,0,1,0
+};
+
+static u8 option_allowed_cmd_STGI[49] = // cmd #24
+{
+ 0,0,0,0,0, 0,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,1,0
+};
+
+static u8 option_allowed_cmd_KTPT[49] = // cmd #25
+{
+ 0,0,0,0,0, 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,1,0
+};
+
+static u8 option_allowed_cmd_ROUTES[49] = // cmd #26
+{
+ 0,0,0,0,0, 0,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,1,0
+};
+
+static u8 option_allowed_cmd_GOBJ[49] = // cmd #27
+{
+ 0,0,0,0,0, 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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0
+};
+
+static u8 option_allowed_cmd_GAMEMODES[49] = // cmd #28
+{
+ 0,0,0,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,1,
+ 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0
+};
+
+static u8 option_allowed_cmd_WIM0[49] = // cmd #29
+{
+ 0,0,0,0,0, 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,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_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_LOAD_KCL,
+ OptionInfo + OPT_KCL,
+ OptionInfo + OPT_TRI_AREA,
+ OptionInfo + OPT_TRI_HEIGHT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_MAX_FILE_SIZE,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_TEST,
+ OptionInfo + OPT_FORCE,
+ OptionInfo + OPT_REPAIR_MAGICS,
+ OptionInfo + OPT_TINY,
+
+ 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[] =
+{
+ &option_cmd_TEST_VERBOSE,
+
+ 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_MATRIX[] =
+{
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_YPOS,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_REPAIR_XPF,
+ OptionInfo + OPT_RM_GOBJ,
+ OptionInfo + OPT_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_SLOT,
+ OptionInfo + OPT_LOAD_KCL,
+
+ OptionInfo + OPT_NONE, // separator
+
+ &option_cmd_MATRIX_BRIEF,
+ &option_cmd_MATRIX_LONG,
+ &option_cmd_MATRIX_QUIET,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_FLOAT[] =
+{
+ OptionInfo + OPT_ROUND,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_STARTPOS[] =
+{
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_YPOS,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_REPAIR_XPF,
+ OptionInfo + OPT_RM_GOBJ,
+ OptionInfo + OPT_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_SLOT,
+ OptionInfo + OPT_LOAD_KCL,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_OBJECTS[] =
+{
+ OptionInfo + OPT_WIDTH,
+ OptionInfo + OPT_NO_HEADER,
+ &option_cmd_OBJECTS_BRIEF,
+ &option_cmd_OBJECTS_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_EXPORT[] =
+{
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_XEXPORT[] =
+{
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_CAT[] =
+{
+ &option_grp_TEXTOUT_NO_HEADER,
+ OptionInfo + OPT_BRIEF,
+ OptionInfo + OPT_EXPORT,
+ OptionInfo + OPT_NO_PARAM,
+ OptionInfo + OPT_GENERIC,
+ OptionInfo + OPT_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_NO_ECHO,
+ OptionInfo + OPT_NO_CHECK,
+ OptionInfo + OPT_IGNORE,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_YPOS,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_REPAIR_XPF,
+ OptionInfo + OPT_RM_GOBJ,
+ OptionInfo + OPT_SLOT,
+ OptionInfo + OPT_LOAD_KCL,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_DECODE[] =
+{
+ 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,
+ &option_grp_TEXTOUT_NO_HEADER,
+ OptionInfo + OPT_BRIEF,
+ OptionInfo + OPT_EXPORT,
+ OptionInfo + OPT_NO_PARAM,
+ OptionInfo + OPT_GENERIC,
+ OptionInfo + OPT_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_NO_ECHO,
+ OptionInfo + OPT_NO_CHECK,
+ OptionInfo + OPT_IGNORE,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_YPOS,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_REPAIR_XPF,
+ OptionInfo + OPT_RM_GOBJ,
+ OptionInfo + OPT_SLOT,
+ OptionInfo + OPT_LOAD_KCL,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_ENCODE[] =
+{
+ 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_NO_CHECK,
+ OptionInfo + OPT_IGNORE,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_YPOS,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_REPAIR_XPF,
+ OptionInfo + OPT_RM_GOBJ,
+ OptionInfo + OPT_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_SLOT,
+ OptionInfo + OPT_LOAD_KCL,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_DIFF[] =
+{
+ &option_cmd_DIFF_QUIET,
+ OptionInfo + OPT_EPSILON,
+ OptionInfo + OPT_DIFF,
+ OptionInfo + OPT_DEST,
+ OptionInfo + OPT_ESC,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_DRAW[] =
+{
+ OptionInfo + OPT_DRAW,
+ OptionInfo + OPT_POS_MODE,
+ OptionInfo + OPT_POS_FILE,
+ OptionInfo + OPT_PNG,
+ 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,
+ &option_grp_TEXTOUT_NO_HEADER,
+ OptionInfo + OPT_BRIEF,
+ OptionInfo + OPT_EXPORT,
+ OptionInfo + OPT_NO_PARAM,
+ OptionInfo + OPT_GENERIC,
+ OptionInfo + OPT_BATTLE,
+ OptionInfo + OPT_EXPORT_FLAGS,
+ OptionInfo + OPT_ROUTE_OPTIONS,
+ OptionInfo + OPT_WIM0,
+ OptionInfo + OPT_NO_ECHO,
+ OptionInfo + OPT_NO_CHECK,
+ OptionInfo + OPT_IGNORE,
+
+ OptionInfo + OPT_NONE, // separator
+
+ OptionInfo + OPT_CONST,
+ OptionInfo + OPT_SCALE,
+ OptionInfo + OPT_SHIFT,
+ OptionInfo + OPT_XSS,
+ OptionInfo + OPT_YSS,
+ OptionInfo + OPT_ZSS,
+ OptionInfo + OPT_ROT,
+ OptionInfo + OPT_XROT,
+ OptionInfo + OPT_YROT,
+ OptionInfo + OPT_ZROT,
+ OptionInfo + OPT_YPOS,
+ OptionInfo + OPT_TRANSLATE,
+ OptionInfo + OPT_NULL,
+ OptionInfo + OPT_NEXT,
+ OptionInfo + OPT_ASCALE,
+ OptionInfo + OPT_AROT,
+ OptionInfo + OPT_TFORM_SCRIPT,
+ OptionInfo + OPT_KMP,
+ OptionInfo + OPT_SPEED_MOD,
+ OptionInfo + OPT_KTPT2,
+ OptionInfo + OPT_TFORM_KMP,
+ OptionInfo + OPT_REPAIR_XPF,
+ OptionInfo + OPT_RM_GOBJ,
+ OptionInfo + OPT_SLOT,
+ OptionInfo + OPT_LOAD_KCL,
+ OptionInfo + OPT_KCL_SCRIPT,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_CHECK[] =
+{
+ OptionInfo + OPT_COLORS,
+ OptionInfo + OPT_NO_COLORS,
+ &option_cmd_CHECK_BRIEF,
+ &option_cmd_CHECK_LONG,
+ &option_cmd_CHECK_QUIET,
+ OptionInfo + OPT_NO_ECHO,
+ OptionInfo + OPT_GENERIC,
+ OptionInfo + OPT_NO_CHECK,
+ OptionInfo + OPT_IGNORE,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_STGI[] =
+{
+ OptionInfo + OPT_COLORS,
+ OptionInfo + OPT_NO_COLORS,
+ OptionInfo + OPT_NO_HEADER,
+ &option_cmd_STGI_IGNORE,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_KTPT[] =
+{
+ OptionInfo + OPT_COLORS,
+ OptionInfo + OPT_NO_COLORS,
+ OptionInfo + OPT_KTPT2,
+ &option_cmd_KTPT_IGNORE,
+ &option_cmd_KTPT_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_ROUTES[] =
+{
+ OptionInfo + OPT_COLORS,
+ OptionInfo + OPT_NO_COLORS,
+ OptionInfo + OPT_NO_HEADER,
+ &option_cmd_ROUTES_IGNORE,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_GOBJ[] =
+{
+ OptionInfo + OPT_IGNORE,
+ &option_cmd_GOBJ_NO_HEADER,
+ &option_cmd_GOBJ_BRIEF,
+ &option_cmd_GOBJ_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_GAMEMODES[] =
+{
+ OptionInfo + OPT_IGNORE,
+ OptionInfo + OPT_GAMEMODES,
+ &option_cmd_GAMEMODES_NO_HEADER,
+ &option_cmd_GAMEMODES_BRIEF,
+ &option_cmd_GAMEMODES_LONG,
+
+ 0
+};
+
+static const InfoOption_t * option_tab_cmd_WIM0[] =
+{
+ OptionInfo + OPT_IGNORE,
+ &option_cmd_WIM0_LONG,
+
+ 0
+};
+
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// InfoCommand ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static const InfoCommand_t CommandInfo[CMD__N+1] =
+{
+ { 0,
+ false,
+ false,
+ false,
+ "wkmpt",
+ 0,
+ "wkmpt [option]... command [option|parameter|file]...",
+ "Wiimms KMP Tool : Analyze, modify, export and create (compile) KMP"
+ " files.",
+ 0,
+ 33,
+ option_tab_tool,
+ 0
+ },
+
+ { CMD_VERSION,
+ false,
+ false,
+ false,
+ "VERSION",
+ 0,
+ "wkmpt 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",
+ "wkmpt HELP [--width=wd] OPT|OPTION ...\n"
+ "wkmpt HELP [--width=wd] CMD|COMMAND [ignored]...\n"
+ "wkmpt HELP [--width=wd] command [-b] [ignored]...\n"
+ "wkmpt 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,
+ "wkmpt 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,
+ "wkmpt 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,
+ 1,
+ option_tab_cmd_TEST,
+ option_allowed_cmd_TEST
+ },
+
+ { CMD_COLORS,
+ false,
+ false,
+ false,
+ "COLORS",
+ 0,
+ "wkmpt 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",
+ "wkmpt 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",
+ "wkmpt 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",
+ "wkmpt 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,
+ "wkmpt SYMBOLS",
+ "Print predefined symbols of text parser to standard output. The KMP"
+ " specific symbols are included.",
+ 0,
+ 1,
+ option_tab_cmd_SYMBOLS,
+ option_allowed_cmd_SYMBOLS
+ },
+
+ { CMD_FUNCTIONS,
+ false,
+ false,
+ false,
+ "FUNCTIONS",
+ 0,
+ "wkmpt FUNCTIONS [key]...",
+ "Print a list with all parser functions including the KMP 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,
+ "wkmpt CALCULATE expression...",
+ "Calculate each expression and print the result to standard output.",
+ 0,
+ 1,
+ option_tab_cmd_CALCULATE,
+ option_allowed_cmd_CALCULATE
+ },
+
+ { CMD_MATRIX,
+ false,
+ false,
+ false,
+ "MATRIX",
+ 0,
+ "wkmpt MATRIX [patch-option]... [vector]...",
+ "Use the transformation options as base and calculate and print the"
+ " related vectors and the transformation matrices. Then do a forward"
+ " and backward transformation for each vector parameter using the"
+ " matrices and print the results.",
+ "Use the transformation options as base and calculate and print the"
+ " related vectors and the transformation matrices. Then do a forward"
+ " and backward transformation for each vector parameter using the"
+ " matrices and print the results. The transformations are done with 4"
+ " different methods to confirm the algorithms. Only the main results"
+ " and results, which differ, are printed.\n"
+ " Normally, the exit status is OK (null). If at least one old"
+ " transformation returns different results for the different"
+ " algorithms, then status DIFFER (not null) is returned.",
+ 32,
+ option_tab_cmd_MATRIX,
+ option_allowed_cmd_MATRIX
+ },
+
+ { CMD_FLOAT,
+ false,
+ false,
+ false,
+ "FLOAT",
+ 0,
+ "wkmpt 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_STARTPOS,
+ false,
+ false,
+ false,
+ "STARTPOS",
+ "SP",
+ "wkmpt STARTPOS [patch-option]... key_or_file...",
+ "Print an ASCII image or a table of the start positions. The parameter"
+ " list is a wild mix of filenames, keywords and numbers.\n"
+ " If a parameter contains a slash ('/' or '\\'), it is a filename of"
+ " a KMP or SZS file and a KMP is loaded. The KMP is used to print"
+ " absolute positions and to find the settings for LEFT/RIGHT and"
+ " WIDE/NARROW automatically.\n"
+ " A parameter may also be one of the following keywords to define a"
+ " setting: RESET, IMAGE, TABLE, RELATIVE, ABSOLUTE, LEFT, RIGHT, WIDE,"
+ " NARROW, AUTO, NO-AUTO, DECIMAL, HEXADECIMAL, Z0, Z1, Z2, Z3. A table"
+ " or image is only printed on numbers 1 to 12.\n"
+ " See https://szs.wiimm.de/cmd/wkmpt/startpos for details.",
+ 0,
+ 29,
+ option_tab_cmd_STARTPOS,
+ option_allowed_cmd_STARTPOS
+ },
+
+ { CMD_OBJECTS,
+ false,
+ false,
+ false,
+ "OBJECTS",
+ "OBJ",
+ "wkmpt OBJECTS key...",
+ "Infos about all objects, that match any of the entered keys, are"
+ " printed. A key match, if the text is part of the object name, file"
+ " list or info (ignoring case). If a key is a number (decimal or hex),"
+ " the object with that id matches too. This command uses an internal"
+ " object and file database. An online query is also available:"
+ " https://szs.wiimm.de/cgi/mkw/object",
+ 0,
+ 4,
+ option_tab_cmd_OBJECTS,
+ option_allowed_cmd_OBJECTS
+ },
+
+ { CMD_EXPORT,
+ true,
+ false,
+ false,
+ "_EXPORT",
+ 0,
+ "wkmpt _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_XEXPORT,
+ true,
+ false,
+ false,
+ "_XEXPORT",
+ 0,
+ "wkmpt _XEXPORT",
+ "Export some tables for LE-CODE.",
+ 0,
+ 0,
+ option_tab_cmd_XEXPORT,
+ option_allowed_cmd_XEXPORT
+ },
+
+ { CMD_CAT,
+ false,
+ false,
+ true,
+ "CAT",
+ 0,
+ "wkmpt CAT [source]...",
+ "Read the entered KMP files (text, binary or szs) and print them as"
+ " decoded text files to standard output. The output of all source"
+ " files is concatenated.",
+ 0,
+ 37,
+ option_tab_cmd_CAT,
+ option_allowed_cmd_CAT
+ },
+
+ { CMD_DECODE,
+ false,
+ false,
+ false,
+ "DECODE",
+ "DEC",
+ "wkmpt DECODE [source]...",
+ "Read the entered KMP files (text or binary) and decode them to text"
+ " files. The default destination is '%P/%N.txt'.",
+ 0,
+ 45,
+ option_tab_cmd_DECODE,
+ option_allowed_cmd_DECODE
+ },
+
+ { CMD_ENCODE,
+ false,
+ false,
+ false,
+ "ENCODE",
+ "ENC",
+ "wkmpt ENCODE source...",
+ "Read the entered KMP files (text or binary) and encode (compile) them"
+ " to binary files. The default destination is '%P/%N.kmp'.",
+ 0,
+ 40,
+ option_tab_cmd_ENCODE,
+ option_allowed_cmd_ENCODE
+ },
+
+ { CMD_DIFF,
+ false,
+ false,
+ false,
+ "DIFF",
+ "CMP",
+ "wkmpt DIFF source1 source2\n"
+ "wkmpt DIFF source... --dest dest",
+ "Compare the KMP of two or more sources (KMP, KMP-text or SZS). Each"
+ " KMP will be converted into the internal format, and then fixed and"
+ " patched controlled by options. Only the known sections are compared."
+ " If option SORT (see --diff) is set, elements of section GOBJ are"
+ " sorted by object-id.\n"
+ " This command is in development. So for the section POTI only a"
+ " simple notice about the different data record is printed.\n"
+ " If option --dest is set, then each source file is compared with a"
+ " file in the destination.",
+ 0,
+ 5,
+ option_tab_cmd_DIFF,
+ option_allowed_cmd_DIFF
+ },
+
+ { CMD_DRAW,
+ false,
+ false,
+ false,
+ "DRAW",
+ "D",
+ "wkmpt DRAW source...",
+ "Read the entered KMP files (text or binary), of needed load the"
+ " related KCL file, draw KMP objects and create an OBJ file. The"
+ " default destination is '%P/%N.kmp.obj'.\n"
+ " Automated dropping of bad KCL triangles is enabled if no drop"
+ " option is specified by option --kcl.",
+ 0,
+ 50,
+ option_tab_cmd_DRAW,
+ option_allowed_cmd_DRAW
+ },
+
+ { CMD_CHECK,
+ false,
+ false,
+ false,
+ "CHECK",
+ "CHK",
+ "wkmpt CHECK source...",
+ "Read the entered KMP files (text or binary) and and make a"
+ " plausibility check. Hints and warnings are written to standard"
+ " output. The exit status is 'DIFFER' if at least one KMP warning"
+ " found.",
+ 0,
+ 9,
+ option_tab_cmd_CHECK,
+ option_allowed_cmd_CHECK
+ },
+
+ { CMD_STGI,
+ false,
+ false,
+ false,
+ "STGI",
+ 0,
+ "wkmpt STGI file...",
+ "Find the first KMP:STGI of each file and print an analysis of it as"
+ " single line statistic. Additional the number of lap counter check"
+ " points ('LC') is printed. Track and KMP (binary and text) files are"
+ " accepted as input.",
+ 0,
+ 4,
+ option_tab_cmd_STGI,
+ option_allowed_cmd_STGI
+ },
+
+ { CMD_KTPT,
+ false,
+ false,
+ false,
+ "KTPT",
+ 0,
+ "wkmpt KTPT [source]...",
+ "Analyse the start positions (KMP:KTPT) and lap counters (KMP:CKPT"
+ " with mode 0) and print a simple information list. Use enemy points"
+ " (KMP:ENPT) to find recommendations.\n"
+ " This command is dedicated to LE-CODE, which supports an alternative"
+ " position for the finish line at the minimap.",
+ 0,
+ 5,
+ option_tab_cmd_KTPT,
+ option_allowed_cmd_KTPT
+ },
+
+ { CMD_ROUTES,
+ false,
+ false,
+ false,
+ "ROUTES",
+ 0,
+ "wkmpt ROUTES file...",
+ "Print the internal cross references for routes of KMP sections CKPH,"
+ " CKPT, ENPH, ENPT, ITPH and ITPT.",
+ 0,
+ 4,
+ option_tab_cmd_ROUTES,
+ option_allowed_cmd_ROUTES
+ },
+
+ { CMD_GOBJ,
+ true,
+ false,
+ false,
+ "GOBJ",
+ 0,
+ "wkmpt GOBJ [source]...",
+ "Analyze the objects of KMP section GOBJ and print a status line for"
+ " each object. ...",
+ 0,
+ 4,
+ option_tab_cmd_GOBJ,
+ option_allowed_cmd_GOBJ
+ },
+
+ { CMD_GAMEMODES,
+ false,
+ false,
+ false,
+ "GAMEMODES",
+ "GMODES",
+ "wkmpt GAMEMODES [source]...",
+ "Analyze the presence flags combinations with and without extension"
+ " support and print a list. The lists consists of index, scenario"
+ " version and scenario name. Scenario versions are only equal, if the"
+ " scenarios are duplicates. Duplicates happens only, if --gamemodes"
+ " option TT or FULL is set.",
+ 0,
+ 5,
+ option_tab_cmd_GAMEMODES,
+ option_allowed_cmd_GAMEMODES
+ },
+
+ { CMD_WIM0,
+ false,
+ false,
+ false,
+ "WIM0",
+ "W0",
+ "wkmpt WIM0 [source]...",
+ "Analyze the WIM0 section of each KMP file (text, binary or szs) and"
+ " print an info about it.",
+ 0,
+ 2,
+ option_tab_cmd_WIM0,
+ option_allowed_cmd_WIM0
+ },
+
+ {0,0,0,0,0,0,0,0,0,0,0,0}
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// InfoUI ///////////////
+///////////////////////////////////////////////////////////////////////////////
+
+const InfoUI_t InfoUI_wkmpt =
+{
+ "wkmpt",
+ CMD__N,
+ CommandTab,
+ CommandInfo,
+ OPT__N_SPECIFIC,
+ OPT__N_TOTAL,
+ OptionInfo,
+ OptionUsed,
+ OptionIndex,
+ OptionShort,
+ OptionLong
+};
+
+//
+///////////////////////////////////////////////////////////////////////////////
+/////////////// END ///////////////
+///////////////////////////////////////////////////////////////////////////////
+