diff options
Diffstat (limited to '')
| -rw-r--r-- | project/src/ui/ui-wkmpt.c | 2661 |
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 /////////////// +/////////////////////////////////////////////////////////////////////////////// + |
