diff options
| author | root <root@dc13.lemmi> | 2020-07-21 10:00:46 +0200 |
|---|---|---|
| committer | root <root@dc13.lemmi> | 2020-07-21 10:00:46 +0200 |
| commit | 1192c4575ea7afdf38e3fa0df4587a08620af11e (patch) | |
| tree | 6910a62487c282d0840d2e668aa7eb40b7c8a3fd /project/src/ui/ui-wszst.c | |
| parent | 76de8a89f7c1d1b4522eb66e8f89d248e8c1781f (diff) | |
SZS v2.18a
Diffstat (limited to 'project/src/ui/ui-wszst.c')
| -rw-r--r-- | project/src/ui/ui-wszst.c | 7805 |
1 files changed, 7805 insertions, 0 deletions
diff --git a/project/src/ui/ui-wszst.c b/project/src/ui/ui-wszst.c new file mode 100644 index 0000000..c4dc814 --- /dev/null +++ b/project/src/ui/ui-wszst.c @@ -0,0 +1,7805 @@ + +/*************************************************************************** + * _______ _______ _______ * + * | ___ |____ | ___ | * + * | | |_| / /| | |_| * + * | |_____ / / | |_____ * + * |_____ | / / |_____ | * + * _ | | / / _ | | * + * | |___| |/ /____| |___| | * + * |_______|_______|_______| * + * * + * 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-wszst.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_TOUCH, false, false, false, false, false, 0, "touch", + 0, + "Mark the minimap as modified to force a new calculation of the" + " translation and inverse matrices." + }, + + { OPT_AUTO, false, false, false, false, false, 0, "auto", + 0, + "Calculate the minimap translations automatically by using the minimum" + " and maximum vertex coordinates. The 'scale' and 'rotation' fields" + " are reset. This is done as first action before the SET, CENTER and" + " the other transformations." + }, + + { OPT_SET_FLAGS, false, false, false, false, false, 0, "set-flags", + "flag", + "Define the flag values (default 0x31f) of the minimap." + }, + + { OPT_SET_SCALE, false, false, false, false, false, 0, "set-scale", + "vector", + "Define the scale values (default 1.0) of the minimap. The parameter" + " is either a vector expression or a comma separated list of" + " coordinates ('x,z' or 'x,y,z')." + }, + + { OPT_SET_ROT, false, false, false, false, false, 0, "set-rot", + "vector", + "Define the rotation values (default 0.0) of the minimap. The" + " parameter is either a vector expression or a comma separated list of" + " coordinates ('x,z' or 'x,y,z')." + }, + + { OPT_SET_X, false, false, false, false, false, 0, "set-x", + "v1[,v2]", + "Define 2 values and sort them to define the minimum and maximum" + " x-coordinates of the minimap. If 'v2' is not entered, '-v1' is used" + " as second value." + }, + + { OPT_SET_Y, false, false, false, false, false, 0, "set-y", + "v1[,v2]", + "Define 2 values and sort them to define the minimum and maximum" + " y-coordinates of the minimap. If 'v2' is not entered, '-v1' is used" + " as second value." + }, + + { OPT_SET_Z, false, false, false, false, false, 0, "set-z", + "v1[,v2]", + "Define 2 values and sort them to define the minimum and maximum" + " z-coordinates of the minimap. If 'v2' is not entered, '-v1' is used" + " as second value." + }, + + { OPT_XCENTER, false, false, false, false, false, 0, "xcenter", + 0, + "Center the minimap in x-direction. This is done after AUTO and SET," + " but before SCALE and SHIFT." + }, + + { OPT_YCENTER, false, false, false, false, false, 0, "ycenter", + 0, + "Center the minimap in y-direction. This is done after AUTO and SET," + " but before SCALE and SHIFT." + }, + + { OPT_ZCENTER, false, false, false, false, false, 0, "zcenter", + 0, + "Center the minimap in z-direction. This is done after AUTO and SET," + " but before SCALE and SHIFT." + }, + + { OPT_CENTER, false, false, false, false, false, 0, "center", + 0, + "Center the minimap in all 3 directions. This is a short cut for" + " '--xcenter --ycenter --zcenter'." + }, + + { 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_MINIMAP, false, false, false, false, false, 0, "minimap", + 0, + "Fix the minimap position in the same way as 'wszst MINIMAP --auto'." + " All other minimap related options are ignored for the minimap" + " processing. See https://szs.wiimm.de/cmd/wszst/minimap for details." + }, + + { 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_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_LOAD_BMG, false, false, false, false, false, 0, "load-bmg", + "file", + "Load immediately the file to fill an internal message pool. The" + " option can be used multiple times to fill the message pool by" + " different sources. A later message overrides the previous message.\n" + " The internal message pool is patched by all --patch-bmg options." + }, + + { OPT_PATCH_BMG, false, false, false, false, false, 0, "patch-bmg", + "mode[cond][=param]", + "This option specifies a BMG patch mode. Some of the modes need a" + " parameter or a file name of a BMG patch file (raw or text BMG), both" + " separated by an equal sign. Modes with required file names are" + " PRINT, REPLACE, INSERT, OVERWRITE, DELETE, MASK, EQUAL and NOTEQUAL." + " Modes with text parameter are FORMAT, REGEXP and RM-REGEXP. " + " Standalone modes are ID, ID-ALL, UNICODE, RM-ESCAPES, RM-CUPS," + " CT-COPY, CT-FORCE-COPY, CT-FILL, LE-COPY, LE-FORCE-COPY, LE-FILL," + " X-COPY, X-FORCE-COPY and X-FILL. Unique abbreviations are allowed.\n" + " The optional condition COND is either '?MID' or '!MID'. In case of" + " '?MID', the patch is only applied if the message id MID already" + " exists. In case of '!MID', the patch is only applied if the message" + " id MID does not exists.\n" + " If this option is used multiple times, all patch files will be" + " processed in the entered order. Read" + " https://szs.wiimm.de/opt/patch-bmg for more details." + }, + + { OPT_MACRO_BMG, false, false, false, false, false, 0, "macro-bmg", + "file", + "Load a BMG file and add the messages to the macro library; already" + " existing entries are replaced. The macro library is accessed by" + " escape sequence \\m{MID} as fallback, if the active file has not" + " already defined the message MID by itself." + }, + + { OPT_FILTER_BMG, false, false, false, false, false, 0, "filter-bmg", + "list", + "If this option is set, the BMG messages are filtered by this list." + " Only enabled messages are exported to the output BMG file (binary or" + " text).\n" + " The parameter is a list of message ids (short MID, 'Txx' or 'Uxx'" + " or Mxx' or hex number) or message ranges (MID:MID) or one of the" + " keywords NONE, IDENT (=ID), PARAM, CUPS, TRACKS, ARENAS, CHAT," + " CTCODE (=CT), CTUPS, CTTRACKS, CTARENAS, CTREFS, LECODE (=LE)," + " LEUPS, LETRACKS, LEARENAS, LEREFS, XCODE (=X), XUPS, XTRACKS," + " XARENAS, XREFS, ALLCODE, ALLUPS, ALLTRACKS, ALLARENAS, ALLREFS," + " GENERIC or ALL. If an element is preceded by a minus sign, it is" + " removed from the filter list (disabled).\n" + " With v2.01a, this option was renamed from --msg to the more" + " meaningful name --filter-bmg. The old name is still available.\n" + " Read https://szs.wiimm.de/opt/filter-bmg for more details." + }, + + { OPT_ID, false, false, false, false, false, 0, "id", + 0, + "Print an ID with 8 characters instead of a SHA-1 sum with 40" + " characters. The SHA-1 sum is used to calculate the ID. The ID" + " consists of '0'-'9' and 'a'-'w' (32 characters)." + }, + + { OPT_BASE64, true, false, false, false, false, 0, "base64", + "[=mode]", + "Encode the the checksum string as BASE64 with 27 characters instead" + " of hex. If a parameter is set, it acts like --coding=mode." + }, + + { OPT_DB64, true, false, false, false, false, 0, "db64", + "[=mode]", + "Encode the the checksum string and some length as BASE64 with 32" + " characters instead of hex for database searches. This options" + " implies --coding=URL if no other coding is defined. If a parameter" + " is set, it acts like --coding=mode. Option --db64 has priority over" + " --base64." + }, + + { OPT_CODING, false, false, false, false, false, 0, "coding", + "mode", + "Define the coding of the non alphanumeric characters for BASE64:" + " STANDART (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." + }, + + { OPT_VERIFY, false, false, false, false, false, 0, "verify", + 0, + "Calculate the checksum and compare the filename and return exit" + " status (0=valid, 2=differ). The result is valid, if the checksum is" + " found with a leading and a following point or minus sign. If --quiet" + " is set, error messages are suppressed." + }, + + { 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 in long format. Multiple usage possible." + }, + + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress printing of header and footer." + }, + + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Suppress information lines in decoded text files. This includes" + " syntax information (--no-header). If set twice, the output of" + " unneeded sections is also suppressed." + }, + + { OPT_PIPE, false, false, false, false, false, 0, "pipe", + 0, + "Use pipe sign instead of spaces to separate columns." + }, + + { OPT_DELTA, false, false, false, false, false, 0, "delta", + 0, + "Print only modified records or sections on text output. Supported" + " file formats until now: GEOHIT, ITEMSLOT, KMG and OBJFLOW. If set" + " twice, limit output to modified records (only relevant for" + " ITEMSLOT)." + }, + + { OPT_DIFF, false, false, false, false, false, 0, "diff", + 0, + "On text output, print only differences from original files. It's a" + " short cut for --no-header --brief --brief --delta --delta." + " Additional, the output is limited to data sections." + }, + + { OPT_EPSILON, false, true, 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_BMG_ENCODING, false, false, false, false, false, 0, "bmg-encoding", + "name", + "Force a BMG encoding for new BMG files. Accepted encoding names are:" + " CP-1252, UTF-16BE (or UTF-16), SHIFT-JIS, UTF-8 and AUTO for" + " automatic detection (default). Same keywords without minus signs are" + " accepted too.\n" + " Mario Kart Wii uses encoding UTF-16BE; the default if no other" + " encoding is defined." + }, + + { OPT_BMG_INF_SIZE, false, false, false, false, false, 0, "bmg-inf-size", + "size", + "Defines the 'INF1' size of new BMG files between 4 and 1000. The" + " first 4 bytes of a INF1 record is an offset into the string pool and" + " the remaining bytes the attributes. Maximal 40 attribute bytes are" + " supported and additional bytes are assumed to be NULL. All BMG files" + " of MKW have a size of 8." + }, + + { OPT_BMG_MID, true, false, false, false, false, 0, "bmg-mid", + "[mode]", + "Control the creation of BMG section MID1. Suppress the creation, if" + " mode is OFF. Force the creation, if mode is ON. On mode AUTO" + " (default), the source is analysed for the decision." + }, + + { OPT_FORCE_ATTRIB, false, false, false, false, false, 0, "force-attrib", + "attrib", + "Forces, that all attributes are set to this vector. See" + " https://szs.wiimm.de/doc/bmg/attrib for the syntax." + }, + + { OPT_DEF_ATTRIB, false, false, false, false, false, 0, "def-attrib", + "attrib", + "Define the default attributes for BMG files. If not set, the default" + " attributes are estimated. On text output, strings with default" + " attributes are printed without attribute vector. The usual default" + " attribute for MKW is [1]. See https://szs.wiimm.de/doc/bmg/attrib" + " for the syntax." + }, + + { OPT_NO_ATTRIB, false, false, false, false, false, 0, "no-attrib", + 0, + "Suppress the output of any BMG attributes if creating BMG text files." + }, + + { OPT_X_ESCAPES, false, false, false, false, false, 0, "x-escapes", + 0, + "Use \\x{} escapes instead of \\z{} escapes." + }, + + { OPT_OLD_ESCAPES, false, false, false, false, false, 0, "old-escapes", + 0, + "To be compatible with v1.43 and earlier, print 1A escape sequences" + " with total size of >12 bytes as single words using \\x{}. Also don't" + " use \\x{} and \\u{} with parameter lists." + }, + + { OPT_SINGLE_LINE, false, false, false, false, false, '1', "single-line", + 0, + "If set, don't print continuation lines for BMG text output. If set" + " twice, print only single text lines and suppress attributes like" + " option --no-attrib does it." + }, + + { OPT_NO_BMG_COLORS, false, false, false, false, false, 0, "no-bmg-colors", + 0, + "If set, suppress the output of '\\c{color}' escape sequences for" + " colors definitions in BMG text output to be compatible with old" + " versions of the tools." + }, + + { OPT_BMG_COLORS, false, false, false, false, false, 0, "bmg-colors", + 0, + "Force output of '\\c{color}' escape sequences with names, even for" + " foreign (not MKWii) BMG files." + }, + + { OPT_NO_BMG_INLINE, false, false, false, false, false, 0, "no-bmg-inline", + 0, + "Print BMG attributes as separate line before the message definition" + " to be compatible with versions until v1.39. The output for the" + " standard value 0x01000000 is always suppressed. This was the default" + " until v1.43." + }, + + { 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 and like -HBl1 for BMG text files." + }, + + { OPT_NO_PARAM, false, false, false, false, false, 'P', "no-param", + 0, + "Disable parameter support in decoded KMP text files." + }, + + { OPT_SORT, false, false, false, false, false, 'S', "sort", + "mode", + "Define a sort mode. Allowed keywords are: NONE (default), NAME," + " OFFSET, U8, PACK, BRRES, BREFT and AUTO" + }, + + { OPT_TRANSFORM, false, false, false, false, true, 'x', "transform", + "list", + "Convert image formats. A comma separated list with terms is expected." + " A term have the syntax '[SRC=]DEST'. It means: convert SRC format" + " into DEST format. If SRC= is not set, the destination format is used" + " for all source formats. This makes only sense as last rule. If DEST" + " is empty no transformation is done for the source. Examples: 'TPL'" + " or 'GRAY' or 'BTI.IA8' or 'TPL.I4+I8=IA8,TEX=,CMPR'\n" + " SRC and DEST are tuple of file, image and palette formats and of 2" + " more attributes. All parts are optional and separated by points, the" + " order is irrelevant.\n" + " Allowed file formats are: TPL, TEX, BTI, BREFT-IMG (=BTIMG), PNG" + " (import). Allowed image formats are: I4, I8, IA4, IA8, RGB565" + " (=R565), RGB5A3 (=R3), RGBA32 (=R32), C4, C8, C14X2, CMPR. Allowed" + " palette formats are: P-IA8 (=P8), P-RGB565 (=P565), P-RGB5A3 (=P3)." + " Attributtes are PALETTE, NO-PALETTE, GRAY, COLOR, ALPHA and" + " NO-ALPHA.\n" + " All terms are managed as list. For each graphic the list is" + " iterated until the first SRC tuple of a term matches the graphic." + " Then the destination tuple is used for the transformation.\n" + " The command 'wimgt TEST' prints a clearly arranged readable table" + " as result of this option." + }, + + { OPT_STRIP, false, false, false, false, false, 0, "strip", + 0, + "If creating a PNG file, don't add comments about creator and source" + " formats." + }, + + { OPT_ANALYZE, false, true, false, false, true, 0, "analyze", + "outfile", + "Run in analyze mode and write results to the entered file." + }, + + { OPT_ANALYZE_MODE, false, true, false, false, false, 0, "analyze-mode", + "modelist", + "Comma separated list with objects to analyse. Objects are BRRES," + " MDL0, PAT0, TEX0, BREFF, BREFT, TPL, KCL, KMP, GOBJ, KTPT, MKWANA" + " and ALL for all (=default). --ana-mode is a short cut." + }, + + { OPT_SOURCE, false, false, false, false, true, 's', "source", + "path", + "Define a secondary source path (directory/file).\n" + " The path may contain escape sequences: %Q is replaced by the fully" + " qualified primary source name. %P and %F are replaced by the primary" + " source path or by the filename. %N and %E are replaced by primary" + " source filename without extension or by the source extension." + " Finally, %T is replaced by the default extension of a virtual" + " 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/source for more details." + }, + + { OPT_DEST, false, false, false, false, false, '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_SRC, false, false, false, false, false, 0, "remove-src", + 0, + "Remove the source file after successful operation. --rm-src 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_IGNORE_SETUP, false, false, false, false, false, 0, "ignore-setup", + 0, + "Ignore hidden setup file 'wszst-setup.txt'. This file is used to" + " determine some default settings and to find out sub archives and" + " files to encode. Use this option only if you know what you do." + }, + + { OPT_PURGE, false, false, false, false, false, 0, "purge", + 0, + "Remove repeated files with same checksum." + }, + + { OPT_ALIGN_U8, false, false, false, false, false, 0, "align-u8", + "size", + "Define an align value for the sub files in U8 archives. The value" + " must be a power of 2 and the default value is 32 (0x20) This value" + " is only relevant if creating or normalizing U8 archives." + }, + + { OPT_ALIGN_PACK, false, false, false, false, false, 0, "align-pack", + "size", + "Define an align value for the sub files in PACK archives. The value" + " must be a power of 2 and the default value is 32 (0x20) This value" + " is only relevant if creating or normalizing OACK archives." + }, + + { OPT_ALIGN_BRRES, false, false, false, false, false, 0, "align-brres", + "size", + "Define an align value for the sub files in BRRES archives. The value" + " must be a power of 2 and the default value is 4 This value is only" + " relevant if creating or normalizing BRRES archives." + }, + + { OPT_ALIGN_BREFF, false, false, false, false, false, 0, "align-breff", + "size", + "Define an align value for the sub files in BREFF archives. The value" + " must be a power of 2 and the default value is 4 This value is only" + " relevant if creating or normalizing BREFF archives." + }, + + { OPT_ALIGN_BREFT, false, false, false, false, false, 0, "align-breft", + "size", + "Define an align value for the sub files in BREFT archives. The value" + " must be a power of 2 and the default value is 0x20 This value is" + " only relevant if creating or normalizing BREFT archives." + }, + + { OPT_ALIGN, false, false, false, false, false, 0, "align", + "size", + "Define an align value for the sub files in all archives. This is a" + " short cut for '--align-u8=size --align-pack=size --align-brres=size" + " --align-breff=size --align-breft=size'." + }, + + { OPT_ENCODE_ALL, false, false, false, false, false, 0, "encode-all", + 0, + "Encode all files. Normally a file is only encoded, if the source is" + " younger than the destination or the destination is missing. Only" + " files in the [encode] section of the file 'wszst-setup.txt' are" + " candidates for encoding. --eall is a short cut. Option --no-encode" + " takes precedence over --encode-all." + }, + + { OPT_ENCODE_IMG, false, false, false, false, false, 0, "encode-img", + 0, + "Encode all image files. Normally a image file is only encoded, if the" + " source is younger than the destination or the destination is" + " missing. Only files in the [encode] section of the file" + " 'wszst-setup.txt' are candidates for encoding. --eimg is a short" + " cut. If set, option --no-encode is ignored for images." + }, + + { OPT_NO_ENCODE, false, false, false, false, false, 0, "no-encode", + 0, + "Do not encode files before creating an archive. --noenc is a short" + " cut. Option --no-encode takes precedence over --encode-all, but" + " --encode-img takes precedence for images." + }, + + { OPT_NO_RECURSE, false, false, false, false, false, 0, "no-recurse", + 0, + "Do not create archives recursively. Normally files in the [create]" + " section of the file 'wszst-setup.txt' are created first. --norec is" + " a short cut." + }, + + { OPT_AUTO_ADD, false, false, false, false, false, 0, "auto-add", + 0, + "Analyze the KMP (if exist) and add missing BRRES, BREFF, BREFT, BRASD" + " and KCL files automatically, if the tool can find the files in any" + " sub directory named 'auto-add'. This sub directory is searched in" + " all directories of 'SEARCH_PATH'; use command 'wszst AUTOADD' to" + " view them. Command 'wszst AUTOADD' may also create an auto-add" + " database. --aadd is a short cut." + }, + + { 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 KCL and KMP files." + }, + + { OPT_PT_DIR, true, false, false, false, false, 0, "pt-dir", + "[=mode]", + "Set one of the `point directory' modes REMOVE (=0), FORCE (=1) or" + " AUTO (default). If --pt-dir is used without parameter, then FORCE is" + " assumed.\n" + " This option is only relevant if creating an U8 archive. It decides," + " if a special directory with name '.' will be added as base for all" + " other files." + }, + + { OPT_RM_AIPARAM, false, false, false, false, false, 0, "rm-aiparam", + 0, + "Remove the directory AIParam and all files from the archive. This" + " option has only impact, if creating a new archive or normalizing an" + " existing archive. --rmai is a short cut." + }, + + { OPT_U8, false, false, false, false, false, 0, "u8", + 0, + "Create an U8 archive, if possible. If the source is a WU8 archive," + " convert it to an U8 archive. This is the default if the setup file" + " 'wszst-setup.txt' has no other definition. The default compression" + " mode is set to Yaz0 (see --yaz0)." + }, + + { OPT_SZS, false, false, false, false, false, 0, "szs", + 0, + "Short cut for '--u8 --yaz0': Create an U8 archive, if possible, and" + " set the compression method to Yaz0." + }, + + { OPT_WU8, false, false, false, false, false, 0, "wu8", + 0, + "Create a WU8 archive, if possible. If the source is an U8 archive," + " convert it to a WU8 archive." + }, + + { OPT_XWU8, false, true, false, false, false, 0, "xwu8", + 0, + "Short cut for '--wu8 --xyz': Create a WU8 archive, if possible, and" + " set the compression method to XYZ." + }, + + { OPT_WBZ, false, false, false, false, false, 0, "wbz", + 0, + "Short cut for '--wu8 --bz': Create a WU8 archive, if possible, and" + " set the compression method to BZ." + }, + + { OPT_PACK, false, false, false, false, false, 0, "pack", + 0, + "Create a PACK archive." + }, + + { OPT_BRRES, false, false, false, false, false, 0, "brres", + 0, + "Create a BRRES archive." + }, + + { OPT_BREFF, false, false, false, false, false, 0, "breff", + 0, + "Create a BREFF archive." + }, + + { OPT_BREFT, false, false, false, false, false, 0, "breft", + 0, + "Create a BREFT archive." + }, + + { OPT_NO_COMPRESS, false, false, false, false, false, 0, "no-compress", + 0, + "Create an uncompressed file instead of a compressed SZS file. The" + " default destination changes to '%P/%N%T'. --noc is a short cut." + }, + + { OPT_COMPRESS, false, false, false, false, false, 'C', "compr", + "level", + "Define a compression level between 0..9: 0 (or NOCHUNKS) disables" + " finding chunks, 1 (or FAST) for the fastest standard compression and" + " 9 (or BEST) for the best (=default) compression. 10 (or ULTRA) and" + " 100-150 are special time-consuming compression modes. They are" + " dedicated to competitions with size limitations. The special value" + " UNCOMPRESSED acts like option --no-compress.\n" + " Because of many repeated data, the best bz-compression mode varies." + " Therefor the levels TRY2..TRY5 (or short T2..T5) are defined to find" + " the best compression mode with testing the first N modes of 9, 1, 8," + " 2, 5. TRY2 is used for normalizing. For non bz-compression, TRY* are" + " the same as BEST.\n" + " Option --norm takes precedence over --compr and sets the" + " compression level to TRY2 (BEST).\n" + " For more modes and details type 'wszst -C list'. To force colorized" + " output type 'wszst -C clist'." + }, + + { OPT_FAST, false, false, false, false, false, 0, "fast", + 0, + "Short cut for --compr=fast: Set the fastest real compression. It also" + " overrides compression rates set by --norm or --compr." + }, + + { OPT_NORM, false, false, false, false, false, 'n', "norm", + 0, + "The uncompressed data will be normalized. See command NORMALIZE for" + " more details." + }, + + { OPT_LINKS, false, false, false, false, false, 0, "links", + 0, + "Support hardlinks while creating U8 and WU8 archives. Keep hardlinks" + " if normalizing U8 and WU8 archives. On extracting, search hardlinks" + " in every archive and try to create hardlinks at local file system." + }, + + { OPT_BASEDIR, false, false, false, false, true, 0, "basedir", + "directory", + "Extract only files from archives, that are below the DIRECTORY." + " Leading points and slashes and trailing slahes are removed from the" + " parameter. --bdir is short cut for --basedir." + }, + + { OPT_RECURSE, true, false, false, false, false, 'R', "recurse", + "[=level]", + "If a extracted file is a known and supported archive, than extract it" + " recursively until the entered level is reached. Level 0 (=NONE)" + " deactivates this. If --recurse is used without parameter, then" + " UNLIMITED is assumed.\n" + " -R does'nt accept a parameter and is a short cut for" + " --recurse=unlimited." + }, + + { OPT_EXT, false, false, false, false, false, 'e', "ext", + 0, + "For BRRES archives only: If a file is extracted, add a handy file" + " extension like '.mdl' to the file name. If set twice and a textual" + " file magic is available, use the file magic in lower case instead" + " like '.mdl0'." + }, + + { OPT_DECODE, false, false, false, false, false, 0, "decode", + 0, + "If a extracted file is known and can be decoded, do it. --dec is a" + " short cut." + }, + + { OPT_MIPMAPS, false, false, false, false, false, 0, "mipmaps", + 0, + "If reading a source, scan for mipmaps and load them too. For PNG" + " files, files named NAME.mm#.EXT with #=1.. are searched. This is the" + " default. --mm is a short cut." + }, + + { OPT_NO_MIPMAPS, false, false, false, false, false, 0, "no-mipmaps", + 0, + "If reading a source, ignore mipmaps. This disables not the creation" + " of mipmaps (see -n-mipmaps). --no-mm is a short cut." + }, + + { OPT_N_MIPMAPS, false, false, false, false, false, 0, "n-mipmaps", + "num", + "Force the number of mipmaps. Values between 0 and 20 are allowed." + " Value OFF (default) disables this option. If enabled, options" + " --max-mipmaps and --mipmap-size are ignored. The creation of mipmaps" + " stops if the width or the height of the mipmap becomes 0. --n-mm is" + " a short cut." + }, + + { OPT_MAX_MIPMAPS, false, false, false, false, false, 0, "max-mipmaps", + "num", + "Control the automatic mipmap creation. Values between 0 and 20 are" + " allowed and the default is 4. The mipmap creation for an image" + " stops, if the set number is reached. This option is ignored, if" + " --n-mipmaps is enabled. --max-mm is a short cut." + }, + + { OPT_MIPMAP_SIZE, false, false, false, false, false, 0, "mipmap-size", + "num", + "Define the minimal width and minimal height of a generated mipmap." + " Any value >0 is allowed. The default is 8. This option is ignored," + " if --n-mipmaps is enabled. --mm-size is a short cut." + }, + + { OPT_FAST_MIPMAPS, false, false, false, false, false, 0, "fast-mipmaps", + 0, + "If resizing an image, use the old fast resize algorithm (default" + " until v1.64a) instead of the new smart one. Both algorithms differ" + " only, when creating a mipmap for images with odd width or odd" + " height. The old algorithm is faster (factor 2-4) than the default" + " algorithm, but the new algorithm creates better resized images. See" + " https://szs.wiimm.de/doc/img/resize for details. --fast-mm is a" + " short cut." + }, + + { OPT_CMPR_DEFAULT, false, false, false, false, false, 0, "cmpr-default", + "rgb1[,rgb2]", + "Define 2 colors for the case, that all 16 pixels of a CMPR block are" + " transparent. The default is to calculate an average color of all" + " transparent pixels. Before v2.04 white was used.\n" + " 2 RGB values (hex values with 6 digits each) are expected as" + " parameter. If optional RGB2 is missed, a copy of RGB1 is used. As" + " first step, both colors are converted to RGB565 colors C1 and C2 and" + " sorted, so that C1<C2 (mandatory for CMPR). If C1 and C2 are" + " identical, the least significant bit of green is cleared for C1 and" + " set for C2.\n" + " Use parameter '0' to force black, '-1' to force white, or '-' to" + " reset to auto calculation." + }, + + { OPT_CUT, false, false, false, false, false, 0, "cut", + 0, + "Cut different non archive files into smaller peaces (logical units" + " like headers, groups, sections) or list these peaces as single sub" + " files for a more detailed analysis. Supported file types are BMG," + " BREFT-IMG, KMP, PAT, TEX, TPL, BRRES sub files and more." + }, + + { OPT_ALL, false, false, false, false, false, 'a', "all", + 0, + "Extract and decode all known and supported files recursively. This is" + " a short cut for '--recurse --decode --mipmaps'. If entered twice," + " option --cut is included too." + }, + + { OPT_RAW, false, false, false, false, false, 0, "raw", + 0, + "Extract BRRES sub file in raw mode and do not adjust string pointers" + " and other offsets." + }, + + { 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 == 130 + + //----- 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_MDL, false, false, false, false, false, 0, "mdl", + "list", + "Set global options for MDL processing. To enable MDL patching, use" + " option --patch-file and select BRRES files for patching.\n" + " 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" + " A MDL transformation (controlled by the transformation options) is" + " only done, if at least one of the keywords VECTOR or VERTEX is set.\n" + " Keyword DEFAULT resets the default settings (VERTEX) and CLEAR" + " disables all. The other allowed keywords are: VECTOR, MATRIX," + " VERTEX, PARENT, CHILD and LOG. See https://szs.wiimm.de/opt/mdl for" + " details." + }, + + { OPT_PAT, false, false, false, false, false, 0, "pat", + "list", + "Set global options for PAT 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: AUTO, SIMPLE, COMPLEX, BOTH, SILENT" + " and LOG. See https://szs.wiimm.de/opt/pat for details." + }, + + { OPT_PATCH_FILE, false, false, false, false, false, 0, "patch-file", + "list", + "Define, which kind of KMP, KCL and BRRES/MDL files are objects for" + " patching. --pfile is a short cut.\n" + " 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 (TRACK,LOG) and CLEAR" + " disables all. The other allowed keywords are: KMP, KCL, OTHER-KCL," + " ALL-KCL, MODEL, MAP, VRCORN, OTHER-BRRES, ALL-BRRES, TRACK" + " (=KMP,KCL,MODEL,MAP,VRCORN), ALL, LOG and LOG-ALL. See" + " https://szs.wiimm.de/opt/patch for details." + }, + + { OPT_KMG_LIMIT, false, false, false, false, false, 0, "kmg-limit", + "seconds", + "Limit the run time for Ballon Battle and Coin Runners to the given" + " time in SECONDS. Smaller values are not changed. The limitation is" + " carried out after loading a binary file and before scanning a text" + " file. Value 0 disables this option." + }, + + { OPT_KMG_COPY, false, false, false, false, false, 0, "kmg-copy", + "id", + "Make all 10 slots of a KMG file equal after loading a binary file and" + " before scanning a text file. ID is either a slot index (0..9) or a" + " slot name (A11..A25) and declares the source slot. Value -1 disables" + " this option. If ID contains brackets [...], then it is analysed as" + " an arena name and the part between the brackets is searched for" + " attributes A11..A25." + }, + + { OPT_LT_CLEAR, false, false, false, false, false, 0, "lt-clear", + 0, + "Clear the LEX/TEST section and remove the section and course.lex if" + " empty. This option is executed before all other --lt-* options." + }, + + { OPT_LT_ONLINE, false, false, false, false, false, 0, "lt-online", + "mode", + "Set LEX/TEST parameter OFFLINE-ONLINE to this MODE. MODE is one of" + " AUTO (default), NEVER or ALWAYS. Only track.szs files are modified." + " If needed, file course.lex and section TEST are created or removed" + " if empty." + }, + + { OPT_LT_N_PLAYERS, false, false, false, false, false, 0, "lt-n-players", + "offline,online", + "Set LEX/TEST parameters N-OFFLINE and N-ONLINE to these integer" + " values. Only track.szs files are modified. If needed, file" + " course.lex and section TEST are created or removed if empty." + }, + + { OPT_LT_COND_BIT, false, false, false, false, false, 0, "lt-cond-bit", + "bitnum", + "Set LEX/TEST parameter COND-BIT to this integer value. Use -1 to" + " deactivate this COND-BIT. Only track.szs files are modified. If" + " needed, file course.lex and section TEST are created or removed if" + " empty." + }, + + { OPT_LT_GAME_MODE, false, false, false, false, false, 0, "lt-game-mode", + "mode", + "Set LEX/TEST parameter GAME-MODE to this MODE. MODE is one of AUTO" + " (default), BALLOON, COIN, VERSUS or ITEMRAIN. Only track.szs files" + " are modified. If needed, file course.lex and section TEST are" + " created or removed if empty." + }, + + { OPT_LT_ENGINE, false, false, false, false, false, 0, "lt-engine", + "mode", + "Set LEX/TEST parameter ENGINE to this MODE. MODE is one of AUTO" + " (default), BATTLE, 50CC, 100CC, 150CC, 200CC, 150M or 200M. Only" + " track.szs files are modified. If needed, file course.lex and section" + " TEST are created or removed if empty." + }, + + { OPT_LT_RANDOM, false, false, false, false, false, 0, "lt-random", + "index", + "Force a random scenario, if between 1 and 8. Value 0 enables auto" + " selection and -1 disables this option. Only track.szs files are" + " modified. If needed, file course.lex and section TEST are created or" + " removed if empty." + }, + + { OPT_LEX_PURGE, false, false, false, false, false, 0, "lex-purge", + 0, + "Delete LEX sections without any impact. Delete sub-file course.lex if" + " it no longer contains a section. This option is executed after all" + " --lt-* options." + }, + + { OPT_CACHE, false, false, false, false, false, 0, "cache", + "dir", + "Define a directory for a SZS cache.If creating a YAZ0 compressed file" + " with standard compression (level 9), the cache is searched for the" + " compressed version. File cache-content.txt is used as file list with" + " hash values. If the cache file is not found or the content differ," + " the file is (re-)created and exit status 2=differ is returned.\n" + " Background: Loading a compressed SZS and content verification is" + " much faster than YAZ compression.\n" + " For legay reasons: If parameter DIR is a file, it is split into" + " directory and base name. The directory is used for the cache" + " directory and the base name for option --cname, but only if --cname" + " is not used." + }, + + { OPT_CNAME, false, false, false, false, false, 0, "cname", + "name", + "Name of the first cache file. This parameter overrides the generated" + " cache name. The name is used only once for the very first cache" + " candidate." + }, + + { 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, false, false, false, false, 'T', "tracks", + "tracks", + "Define a new track order. A comma separated list in the format [a=]b" + " or a:=b is expected. 'a' and 'b' are track names or slot numbers." + " 'a' is the destination slot and 'b' the assigned track. If 'a' is" + " omitted, the next slot is used; this means [a=]b,c,d is possible.\n" + " Tracks will only be exchanged so that always all tracks are" + " assigned. But if using ':=' the new slots are assigned without" + " exchanging and the old values are lost." + }, + + { OPT_ARENAS, false, false, false, false, false, 'A', "arenas", + "arenas", + "Define a new arena order. A comma separated list in the format [a=]b" + " or a:=b is expected. 'a' and 'b' are arena names or slot numbers." + " 'a' is the destination slot and 'b' the assigned arena. If 'a' is" + " omitted, the next slot is used; this means [a=]b,c,d is possible.\n" + " Arenas will only be exchanged so that always all arenas are" + " assigned. But if using ':=' the new slots are assigned without" + " exchanging and the old values are lost." + }, + + { OPT_AUTOADD_PATH, false, false, false, false, false, 0, "autoadd-path", + "directory", + "Define an alternative directory as autoadd library. The default is," + " that the sub-directory called './auto-add/' of all search paths are" + " used. Use 'wszst test -vvvv' for tests." + }, + + { 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_YAZ0, false, false, false, false, false, 0, "yaz0", + 0, + "If creating a compressed file, force Yaz0 compression. Yaz0" + " compression is the default, if no compression method is defined by" + " option or setup file." + }, + + { OPT_YAZ1, false, false, false, false, false, 0, "yaz1", + 0, + "If creating a compressed file, force Yaz1 compression. The difference" + " to Yaz0 is only the magic, which is set to 'Yaz1'." + }, + + { OPT_XYZ, false, false, false, false, false, 0, "xyz", + 0, + "If creating a compressed file, force XYZ compression (an experimental" + " Yaz0 variant)." + }, + + { OPT_BZ, false, false, false, false, false, 0, "bz", + 0, + "If creating a compressed file, force BZ compression (a BZIP2" + " variant)." + }, + + { OPT_SH, false, false, false, false, true, 0, "sh", + 0, + "Dump info using SH syntax. Use '--var name' as prefix." + }, + + { OPT_BASH, false, false, false, false, false, 0, "bash", + 0, + "Dump info using BASH syntax. Use '--var name' as prefix." + }, + + { OPT_JSON, false, false, false, false, false, 0, "json", + 0, + "Dump info using JSON syntax. Options --var and --array are ignored." + }, + + { OPT_PHP, false, false, false, false, false, 0, "php", + 0, + "Dump infos using PHP syntax. Use '--var name' as variable name of the" + " resulting object." + }, + + { OPT_MAKEDOC, false, false, false, false, false, 0, "makedoc", + 0, + "Dump infos using MakeDoc syntax. Use '--var name' as variable name of" + " the resulting map." + }, + + { OPT_VAR, false, false, false, false, false, 0, "var", + "varname", + "Use VARNAME as variable name or prefix on script output. The default" + " variabe name is 'res'." + }, + + { OPT_ARRAY, false, false, false, false, false, 0, "array", + 0, + "Use an array on script output if possible. If arrays are not" + " supported, then append a '_#' suffix with an zero based index to the" + " variable name defined by '--var name'. In this case, only one output" + " file is created." + }, + + { OPT_AVAR, false, false, false, false, false, 0, "avar", + "varname", + "Shortcut for: '--array --var name'" + }, + + { 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", + "dir", + "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 == 200 + +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// 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 decoded text files." + }; + +static const InfoOption_t option_grp_BMG_LONG = + { 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." + }; + +static const InfoOption_t option_grp_ENCODE_ALL = + { OPT_ALL, false, false, false, false, false, 'a', "all", + 0, + " Encode all files. This is a short cut for --encode-all (and more" + " options in the future)." + }; + +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_BRSUB_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set, print hints about unusual versions too. If set twice, print a" + " status line for each found BRRES sub file." + }; + +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_VR_CALC_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Suppress header and print only results for VR_winner-VR_looser." + }; + +static const InfoOption_t option_cmd_VR_RACE_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print full matrix of delta values." + }; + +static const InfoOption_t option_cmd_AUTOADD_QUIET = + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", + 0, + " If set, suppress logging." + }; + +static const InfoOption_t option_cmd_AUTOADD_VERBOSE = + { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", + 0, + "If set, list all missed and invalid files of the current auto-add" + " archive after the adding operation. If set twice, then additionally" + " list all already existing files in the current auto-add archive." + }; + +static const InfoOption_t option_cmd_AUTOADD_DEST = + { OPT_DEST, false, false, false, false, false, 'd', "dest", + "path", + "Define a destination directory as current auto-add archive. The" + " default is the standard auto-add path. Try AUTOADD without sources" + " to view the path." + }; + +static const InfoOption_t option_cmd_AUTOADD_OVERWRITE = + { OPT_OVERWRITE, false, false, false, false, false, 'o', "overwrite", + 0, + "Overwrite already existing files instead of only adding new files to" + " the auto-add archive." + }; + +static const InfoOption_t option_cmd_TRACKS_VERBOSE = + { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", + 0, + "Print an additonally hex status value as second column before the" + " file name. These values can be used to find a selection mask." + }; + +static const InfoOption_t option_cmd_TRACKS_ALL = + { OPT_ALL, false, false, false, false, false, 'a', "all", + 0, + "Print the '_d' files too. If set twice, print all files (same as" + " -all)." + }; + +static const InfoOption_t option_cmd_TRACKS_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Print 5 non track files too. If set twice, print 4 more files with" + " old BRRES sub file formats too." + }; + +static const InfoOption_t option_cmd_LIST_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set, the size of each file is printed. If set twice, offset and" + " size are printed. If set three times, debugging mode is enabled." + }; + +static const InfoOption_t option_cmd_NAME_REF_SORT = + { OPT_SORT, false, false, false, false, false, 'S', "sort", + "mode", + "Define the sort order of the reference. NONE (default) uses the order" + " of the string pool. BRRES orders in standard BRRES order by ASCCI" + " value and case sensitive. NAME similar to BRRES, but case" + " insensitive. OFFSET orders by the file offset of first usage." + }; + +static const InfoOption_t option_cmd_NAME_REF_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "If set, suppress the offsets of the strings. This makes comparisons" + " after name changes easier. If set twice, suppress reference offsets" + " too. If set 3 times, suppress all offsets." + }; + +static const InfoOption_t option_cmd_NAME_REF_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set, a list ordered by NAME or BRRES (default) and a second list" + " ordered by OFFSET is printed. If set twice, a third list with order" + " NONE is appended." + }; + +static const InfoOption_t option_cmd_ILIST_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set, image width, height and size are printed. If set twice, a" + " block info and attribites are printed too." + }; + +static const InfoOption_t option_cmd_MEMORY_DECODE = + { OPT_DECODE, false, false, false, false, false, 0, "decode", + 0, + "Decode binary files to find memory addresses of sections." + }; + +static const InfoOption_t option_cmd_MEMORY_MIPMAPS = + { OPT_MIPMAPS, false, false, false, false, false, 0, "mipmaps", + 0, + "Analyze images and dump mipmap adresses too." + }; + +static const InfoOption_t option_cmd_MEMORY_ALL = + { OPT_ALL, false, false, false, false, false, 'a', "all", + 0, + "A short cut for '--recurse --decode --mipmaps'. If entered twice," + " option --cut is included too." + }; + +static const InfoOption_t option_cmd_MEMORY_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set, print absolute offsets too." + }; + +static const InfoOption_t option_cmd_SHA1_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Suppress output of the filename." + }; + +static const InfoOption_t option_cmd_SHA1_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set and --db64 is not active, start the line with the length of" + " the decompressed source as decimal number (field width 9) separated" + " with a comma from the SHA1 checksum. If set twice, prefix each line" + " with the modification time in the format 'yyyy-mm-dd HH:MM:SS '.\n" + " If set and --db64 is active, then CKPT lap counter, STGI lap" + " counter, speed factor and slot info are inserted beteen checksum and" + " filename. All columns are separated by one or two spaces." + }; + +static const InfoOption_t option_cmd_ANALYZE_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "Append a list of special files with size, SHA1 and file name." + }; + +static const InfoOption_t option_cmd_ANALYZE_QUIET = + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", + 0, + "Suppress logging of input and output files." + }; + +static const InfoOption_t option_cmd_DISTRIBUTION_SOURCE = + { OPT_SOURCE, false, false, false, false, false, 's', "source", + "path", + "Define a text file for filename to slot translation. A »slot" + " filename« list is expected. Use this option multiple times to" + " define more than one source file. A definition of a later source" + " overwrites previous definitions. The file RESULT of the command line" + " is appended automatically as last entry, if exists and not already" + " included." + }; + +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 for each section is printed. If" + " set twice, only a total summary status is printed. If set three" + " times, the status is only reported as exit status." + }; + +static const InfoOption_t option_cmd_CHECK_NO_CHECK = + { OPT_NO_CHECK, false, false, false, false, false, 'N', "no-check", + 0, + "Don't check the KCL and KMP files." + }; + +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_SLOTS_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Print the slot list in a compressed form without spaces." + }; + +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_ISARENA_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "If set, suppress the output of header and filenames." + }; + +static const InfoOption_t option_cmd_ISARENA_QUIET = + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", + 0, + "If set, print nothing and set only the exit status." + }; + +static const InfoOption_t option_cmd_ISARENA_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_MINIMAP_LONG = + { OPT_LONG, false, false, false, false, false, 'l', "long", + 0, + "If set, print the matrices too. If set twice, print minimum and" + " maximum values too." + }; + +static const InfoOption_t option_cmd_BMG_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the syntax information section in decoded text files." + }; + +static const InfoOption_t option_cmd_KCL_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the syntax information section in decoded text files." + }; + +static const InfoOption_t option_cmd_KMP_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the syntax information section in decoded text files." + }; + +static const InfoOption_t option_cmd_LEX_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the syntax information section in decoded text files." + }; + +static const InfoOption_t option_cmd_INFO_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress output of the printed filename." + }; + +static const InfoOption_t option_cmd_GHOST_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress output of the printed filename." + }; + +static const InfoOption_t option_cmd_VEHICLE_SOURCE = + { OPT_SOURCE, false, false, false, false, false, 's', "source", + "path", + "Load the file instead of using the internal base." + }; + +static const InfoOption_t option_cmd_VEHICLE_DEST = + { OPT_DEST, false, false, false, false, false, 'd', "dest", + "path", + "Define a destination path (directory/file). The destination - means:" + " write to standard output." + }; + +static const InfoOption_t option_cmd_VEHICLE_QUIET = + { OPT_QUIET, false, false, false, false, false, 'q', "quiet", + 0, + "Suppress logging." + }; + +static const InfoOption_t option_cmd_VEHICLE_VERBOSE = + { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", + 0, + "Log patching." + }; + +static const InfoOption_t option_cmd_VEHICLE_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + "Suppress min/max counts on dumps." + }; + + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// 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_BRSUB, "BRSUB", 0, 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_VR_CALC, "VR-CALC", "VRCALC", 0 }, + { CMD_VR_RACE, "VR-RACE", "VRRACE", 0 }, + { CMD_AUTOADD, "AUTOADD", 0, 0 }, + { CMD_TRACKS, "TRACKS", 0, 0 }, + { CMD_SCANCACHE, "SCANCACHE", 0, 0 }, + { CMD_EXPORT, "_EXPORT", 0, 0 }, + { CMD_CODE, "_CODE", 0, 0 }, + { CMD_RECODE, "_RECODE", 0, 0 }, + { CMD_SUBFILE, "_SUBFILE", 0, 0 }, + { CMD_LIST, "LIST", "LS", 0 }, + { CMD_LIST_L, "LIST-L", "LL", 0 }, + { CMD_LIST_L, "LISTL", 0, 0 }, + { CMD_LIST_LL, "LIST-LL", "LLL", 0 }, + { CMD_LIST_LL, "LISTLL", 0, 0 }, + { CMD_LIST_LLL, "LIST-LLL", "LLLL", 0 }, + { CMD_LIST_LLL, "LISTLLL", 0, 0 }, + { CMD_LIST_A, "LIST-A", "LA", 0 }, + { CMD_LIST_A, "LISTA", 0, 0 }, + { CMD_LIST_LA, "LIST-LA", "LLA", 0 }, + { CMD_LIST_LA, "LISTLA", 0, 0 }, + { CMD_NAME_REF, "NAME-REF", "NAMEREF", 0 }, + { CMD_ILIST, "ILIST", "IL", 0 }, + { CMD_ILIST_L, "ILIST-L", "ILL", 0 }, + { CMD_ILIST_L, "ILISTL", 0, 0 }, + { CMD_ILIST_LL, "ILIST-LL", "ILLL", 0 }, + { CMD_ILIST_LL, "ILISTLL", 0, 0 }, + { CMD_ILIST_A, "ILIST-A", "ILA", 0 }, + { CMD_ILIST_LA, "ILIST-LA", "ILLA", 0 }, + { CMD_ILIST_LA, "ILISTLA", 0, 0 }, + { CMD_MEMORY, "MEMORY", "MEM", 0 }, + { CMD_MEMORY_A, "MEMORY-A", "MEMA", 0 }, + { CMD_DUMP, "DUMP", 0, 0 }, + { CMD_SHA1, "SHA1", 0, 0 }, + { CMD_ANALYZE, "ANALYZE", "ANA", 0 }, + { CMD_ANALYZE, "ANALYSE", 0, 0 }, + { CMD_DISTRIBUTION, "DISTRIBUTION", "DIST", 0 }, + { CMD_DIFF, "DIFF", "CMP", 0 }, + { CMD_CHECK, "CHECK", 0, 0 }, + { CMD_SLOTS, "SLOTS", 0, 0 }, + { CMD_STGI, "STGI", 0, 0 }, + { CMD_ISARENA, "ISARENA", 0, 0 }, + { CMD_NORMALIZE, "NORMALIZE", "NORM", 0 }, + { CMD_PATCH, "PATCH", 0, 0 }, + { CMD_COPY, "COPY", "CP", 0 }, + { CMD_DUPLICATE, "DUPLICATE", "DUP", 0 }, + { CMD_MINIMAP, "MINIMAP", 0, 0 }, + { CMD_COMPRESS, "COMPRESS", "COM", 0 }, + { CMD_DECOMPRESS, "DECOMPRESS", "DEC", 0 }, + { CMD_ENCODE, "ENCODE", "E", 0 }, + { CMD_CREATE, "CREATE", "C", 0 }, + { CMD_UPDATE, "UPDATE", "U", 0 }, + { CMD_EXTRACT, "EXTRACT", "X", 0 }, + { CMD_XDECODE, "XDECODE", "XD", 0 }, + { CMD_XEXPORT, "XEXPORT", "XX", 0 }, + { CMD_XALL, "XALL", "XA", 0 }, + { CMD_XCOMMON, "XCOMMON", 0, 0 }, + { CMD_BINARY, "BINARY", "BIN", 0 }, + { CMD_TEXT, "TEXT", "TXT", 0 }, + { CMD_CAT, "CAT", 0, 0 }, + { CMD_BMG, "BMG", 0, 0 }, + { CMD_KCL, "KCL", 0, 0 }, + { CMD_KMP, "KMP", 0, 0 }, + { CMD_LEX, "LEX", 0, 0 }, + { CMD_INFO, "INFO", 0, 0 }, + { CMD_GHOST, "GHOSTS", 0, 0 }, + { CMD_YAZDUMP, "YAZDUMP", "YD", 0 }, + { CMD_VEHICLE, "VEHICLE", 0, 0 }, + + { CMD__N,0,0,0 } +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// OptionShort & OptionLong /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const char OptionShort[] = "VhqvLc:lHB1XPS:M:T:A:x:ts:d:D:E:orupiNC:nRea"; + +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' }, + { "touch", 0, 0, GO_TOUCH }, + { "auto", 0, 0, GO_AUTO }, + { "set-flags", 1, 0, GO_SET_FLAGS }, + { "setflags", 1, 0, GO_SET_FLAGS }, + { "set-scale", 1, 0, GO_SET_SCALE }, + { "setscale", 1, 0, GO_SET_SCALE }, + { "set-rot", 1, 0, GO_SET_ROT }, + { "setrot", 1, 0, GO_SET_ROT }, + { "set-x", 1, 0, GO_SET_X }, + { "setx", 1, 0, GO_SET_X }, + { "set-y", 1, 0, GO_SET_Y }, + { "sety", 1, 0, GO_SET_Y }, + { "set-z", 1, 0, GO_SET_Z }, + { "setz", 1, 0, GO_SET_Z }, + { "xcenter", 0, 0, GO_XCENTER }, + { "ycenter", 0, 0, GO_YCENTER }, + { "zcenter", 0, 0, GO_ZCENTER }, + { "center", 0, 0, GO_CENTER }, + { "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 }, + { "trans", 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 }, + { "minimap", 0, 0, GO_MINIMAP }, + { "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 }, + { "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 }, + { "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 }, + { "mdl", 1, 0, GO_MDL }, + { "pat", 1, 0, GO_PAT }, + { "patch-file", 1, 0, GO_PATCH_FILE }, + { "patchfile", 1, 0, GO_PATCH_FILE }, + { "pfile", 1, 0, GO_PATCH_FILE }, + { "kmg-limit", 1, 0, GO_KMG_LIMIT }, + { "kmglimit", 1, 0, GO_KMG_LIMIT }, + { "kmg-copy", 1, 0, GO_KMG_COPY }, + { "kmgcopy", 1, 0, GO_KMG_COPY }, + { "lt-clear", 0, 0, GO_LT_CLEAR }, + { "ltclear", 0, 0, GO_LT_CLEAR }, + { "lt-online", 1, 0, GO_LT_ONLINE }, + { "ltonline", 1, 0, GO_LT_ONLINE }, + { "lt-n-players", 1, 0, GO_LT_N_PLAYERS }, + { "lt-nplayers", 1, 0, GO_LT_N_PLAYERS }, + { "ltnplayers", 1, 0, GO_LT_N_PLAYERS }, + { "lt-cond-bit", 1, 0, GO_LT_COND_BIT }, + { "lt-condbit", 1, 0, GO_LT_COND_BIT }, + { "ltcondbit", 1, 0, GO_LT_COND_BIT }, + { "lt-game-mode", 1, 0, GO_LT_GAME_MODE }, + { "lt-gamemode", 1, 0, GO_LT_GAME_MODE }, + { "ltgamemode", 1, 0, GO_LT_GAME_MODE }, + { "lt-engine", 1, 0, GO_LT_ENGINE }, + { "ltengine", 1, 0, GO_LT_ENGINE }, + { "lt-random", 1, 0, GO_LT_RANDOM }, + { "ltrandom", 1, 0, GO_LT_RANDOM }, + { "lex-purge", 0, 0, GO_LEX_PURGE }, + { "lexpurge", 0, 0, GO_LEX_PURGE }, + { "load-bmg", 1, 0, GO_LOAD_BMG }, + { "loadbmg", 1, 0, GO_LOAD_BMG }, + { "patch-bmg", 1, 0, GO_PATCH_BMG }, + { "patchbmg", 1, 0, GO_PATCH_BMG }, + { "pb", 1, 0, GO_PATCH_BMG }, + { "macro-bmg", 1, 0, GO_MACRO_BMG }, + { "macrobmg", 1, 0, GO_MACRO_BMG }, + { "mb", 1, 0, GO_MACRO_BMG }, + { "filter-bmg", 1, 0, GO_FILTER_BMG }, + { "filterbmg", 1, 0, GO_FILTER_BMG }, + { "fb", 1, 0, GO_FILTER_BMG }, + { "msg", 1, 0, GO_FILTER_BMG }, + { "cache", 1, 0, GO_CACHE }, + { "cname", 1, 0, GO_CNAME }, + { "id", 0, 0, GO_ID }, + { "base64", 2, 0, GO_BASE64 }, + { "db64", 2, 0, GO_DB64 }, + { "coding", 1, 0, GO_CODING }, + { "verify", 0, 0, GO_VERIFY }, + { "round", 0, 0, GO_ROUND }, + { "long", 0, 0, 'l' }, + { "no-header", 0, 0, 'H' }, + { "noheader", 0, 0, 'H' }, + { "brief", 0, 0, 'B' }, + { "pipe", 0, 0, GO_PIPE }, + { "delta", 0, 0, GO_DELTA }, + { "diff", 0, 0, GO_DIFF }, + { "epsilon", 1, 0, GO_EPSILON }, + { "bmg-encoding", 1, 0, GO_BMG_ENCODING }, + { "bmgencoding", 1, 0, GO_BMG_ENCODING }, + { "bmg-inf-size", 1, 0, GO_BMG_INF_SIZE }, + { "bmginfsize", 1, 0, GO_BMG_INF_SIZE }, + { "bmg-mid", 2, 0, GO_BMG_MID }, + { "bmgmid", 2, 0, GO_BMG_MID }, + { "force-attrib", 1, 0, GO_FORCE_ATTRIB }, + { "forceattrib", 1, 0, GO_FORCE_ATTRIB }, + { "def-attrib", 1, 0, GO_DEF_ATTRIB }, + { "defattrib", 1, 0, GO_DEF_ATTRIB }, + { "no-attrib", 0, 0, GO_NO_ATTRIB }, + { "noattrib", 0, 0, GO_NO_ATTRIB }, + { "x-escapes", 0, 0, GO_X_ESCAPES }, + { "xescapes", 0, 0, GO_X_ESCAPES }, + { "old-escapes", 0, 0, GO_OLD_ESCAPES }, + { "oldescapes", 0, 0, GO_OLD_ESCAPES }, + { "single-line", 0, 0, '1' }, + { "singleline", 0, 0, '1' }, + { "no-bmg-colors", 0, 0, GO_NO_BMG_COLORS }, + { "nobmgcolors", 0, 0, GO_NO_BMG_COLORS }, + { "bmg-colors", 0, 0, GO_BMG_COLORS }, + { "bmgcolors", 0, 0, GO_BMG_COLORS }, + { "no-bmg-inline", 0, 0, GO_NO_BMG_INLINE }, + { "nobmginline", 0, 0, GO_NO_BMG_INLINE }, + { "export", 0, 0, 'X' }, + { "no-param", 0, 0, 'P' }, + { "noparam", 0, 0, 'P' }, + { "sort", 1, 0, 'S' }, + { "max-file-size", 1, 0, 'M' }, + { "maxfilesize", 1, 0, 'M' }, + { "tracks", 1, 0, 'T' }, + { "arenas", 1, 0, 'A' }, + { "autoadd-path", 1, 0, GO_AUTOADD_PATH }, + { "autoaddpath", 1, 0, GO_AUTOADD_PATH }, + { "transform", 1, 0, 'x' }, + { "strip", 0, 0, GO_STRIP }, + { "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 }, + { "yaz0", 0, 0, GO_YAZ0 }, + { "yaz1", 0, 0, GO_YAZ1 }, + { "xyz", 0, 0, GO_XYZ }, + { "bz", 0, 0, GO_BZ }, + { "sh", 0, 0, GO_SH }, + { "bash", 0, 0, GO_BASH }, + { "json", 0, 0, GO_JSON }, + { "php", 0, 0, GO_PHP }, + { "makedoc", 0, 0, GO_MAKEDOC }, + { "var", 1, 0, GO_VAR }, + { "array", 0, 0, GO_ARRAY }, + { "avar", 1, 0, GO_AVAR }, + { "analyze", 1, 0, GO_ANALYZE }, + { "analyse", 1, 0, GO_ANALYZE }, + { "analyze-mode", 1, 0, GO_ANALYZE_MODE }, + { "ana-mode", 1, 0, GO_ANALYZE_MODE }, + { "anamode", 1, 0, GO_ANALYZE_MODE }, + { "amd", 1, 0, GO_ANALYZE_MODE }, + { "OLD", 0, 0, GO_OLD }, + { "STD", 0, 0, GO_STD }, + { "NEW", 0, 0, GO_NEW }, + { "EXTRACT", 1, 0, GO_EXTRACT }, + { "source", 1, 0, 's' }, + { "src", 1, 0, 's' }, + { "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-src", 0, 0, GO_REMOVE_SRC }, + { "removesrc", 0, 0, GO_REMOVE_SRC }, + { "rm-src", 0, 0, GO_REMOVE_SRC }, + { "rmsrc", 0, 0, GO_REMOVE_SRC }, + { "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' }, + { "ignore-setup", 0, 0, GO_IGNORE_SETUP }, + { "ignoresetup", 0, 0, GO_IGNORE_SETUP }, + { "purge", 0, 0, GO_PURGE }, + { "align-u8", 1, 0, GO_ALIGN_U8 }, + { "alignu8", 1, 0, GO_ALIGN_U8 }, + { "align-pack", 1, 0, GO_ALIGN_PACK }, + { "alignpack", 1, 0, GO_ALIGN_PACK }, + { "align-brres", 1, 0, GO_ALIGN_BRRES }, + { "alignbrres", 1, 0, GO_ALIGN_BRRES }, + { "align-breff", 1, 0, GO_ALIGN_BREFF }, + { "alignbreff", 1, 0, GO_ALIGN_BREFF }, + { "align-breft", 1, 0, GO_ALIGN_BREFT }, + { "alignbreft", 1, 0, GO_ALIGN_BREFT }, + { "align", 1, 0, GO_ALIGN }, + { "encode-all", 0, 0, GO_ENCODE_ALL }, + { "encodeall", 0, 0, GO_ENCODE_ALL }, + { "eall", 0, 0, GO_ENCODE_ALL }, + { "encode-img", 0, 0, GO_ENCODE_IMG }, + { "encodeimg", 0, 0, GO_ENCODE_IMG }, + { "eimg", 0, 0, GO_ENCODE_IMG }, + { "no-encode", 0, 0, GO_NO_ENCODE }, + { "noencode", 0, 0, GO_NO_ENCODE }, + { "noenc", 0, 0, GO_NO_ENCODE }, + { "no-recurse", 0, 0, GO_NO_RECURSE }, + { "norecurse", 0, 0, GO_NO_RECURSE }, + { "norec", 0, 0, GO_NO_RECURSE }, + { "auto-add", 0, 0, GO_AUTO_ADD }, + { "autoadd", 0, 0, GO_AUTO_ADD }, + { "aadd", 0, 0, GO_AUTO_ADD }, + { "no-echo", 0, 0, GO_NO_ECHO }, + { "noecho", 0, 0, GO_NO_ECHO }, + { "no-check", 0, 0, 'N' }, + { "nocheck", 0, 0, 'N' }, + { "pt-dir", 2, 0, GO_PT_DIR }, + { "ptdir", 2, 0, GO_PT_DIR }, + { "pdir", 2, 0, GO_PT_DIR }, + { "rm-aiparam", 0, 0, GO_RM_AIPARAM }, + { "rmaiparam", 0, 0, GO_RM_AIPARAM }, + { "rmai", 0, 0, GO_RM_AIPARAM }, + { "u8", 0, 0, GO_U8 }, + { "szs", 0, 0, GO_SZS }, + { "wu8", 0, 0, GO_WU8 }, + { "xwu8", 0, 0, GO_XWU8 }, + { "wbz", 0, 0, GO_WBZ }, + { "pack", 0, 0, GO_PACK }, + { "brres", 0, 0, GO_BRRES }, + { "bres", 0, 0, GO_BRRES }, + { "breff", 0, 0, GO_BREFF }, + { "breft", 0, 0, GO_BREFT }, + { "no-compress", 0, 0, GO_NO_COMPRESS }, + { "nocompress", 0, 0, GO_NO_COMPRESS }, + { "noc", 0, 0, GO_NO_COMPRESS }, + { "compr", 1, 0, 'C' }, + { "compress", 1, 0, 'C' }, + { "fast", 0, 0, GO_FAST }, + { "norm", 0, 0, 'n' }, + { "links", 0, 0, GO_LINKS }, + { "basedir", 1, 0, GO_BASEDIR }, + { "bdir", 1, 0, GO_BASEDIR }, + { "recurse", 2, 0, 'R' }, + { "ext", 0, 0, 'e' }, + { "decode", 0, 0, GO_DECODE }, + { "dec", 0, 0, GO_DECODE }, + { "mipmaps", 0, 0, GO_MIPMAPS }, + { "mm", 0, 0, GO_MIPMAPS }, + { "no-mipmaps", 0, 0, GO_NO_MIPMAPS }, + { "nomipmaps", 0, 0, GO_NO_MIPMAPS }, + { "no-mm", 0, 0, GO_NO_MIPMAPS }, + { "nomm", 0, 0, GO_NO_MIPMAPS }, + { "n-mipmaps", 1, 0, GO_N_MIPMAPS }, + { "nmipmaps", 1, 0, GO_N_MIPMAPS }, + { "n-mm", 1, 0, GO_N_MIPMAPS }, + { "nmm", 1, 0, GO_N_MIPMAPS }, + { "max-mipmaps", 1, 0, GO_MAX_MIPMAPS }, + { "maxmipmaps", 1, 0, GO_MAX_MIPMAPS }, + { "max-mm", 1, 0, GO_MAX_MIPMAPS }, + { "maxmm", 1, 0, GO_MAX_MIPMAPS }, + { "mipmap-size", 1, 0, GO_MIPMAP_SIZE }, + { "mipmapsize", 1, 0, GO_MIPMAP_SIZE }, + { "mm-size", 1, 0, GO_MIPMAP_SIZE }, + { "mmsize", 1, 0, GO_MIPMAP_SIZE }, + { "fast-mipmaps", 0, 0, GO_FAST_MIPMAPS }, + { "fastmipmaps", 0, 0, GO_FAST_MIPMAPS }, + { "fast-mm", 0, 0, GO_FAST_MIPMAPS }, + { "fastmm", 0, 0, GO_FAST_MIPMAPS }, + { "cmpr-default", 1, 0, GO_CMPR_DEFAULT }, + { "cut", 0, 0, GO_CUT }, + { "all", 0, 0, 'a' }, + { "raw", 0, 0, GO_RAW }, + { "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, + /* 0x031 1 */ OPT_SINGLE_LINE, + /* 0x032 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0, + /* 0x041 A */ OPT_ARENAS, + /* 0x042 B */ OPT_BRIEF, + /* 0x043 C */ OPT_COMPRESS, + /* 0x044 D */ OPT_DEST2, + /* 0x045 E */ OPT_ESC, + /* 0x046 */ 0,0, + /* 0x048 H */ OPT_NO_HEADER, + /* 0x049 */ 0,0,0, + /* 0x04c L */ OPT_LOGGING, + /* 0x04d M */ OPT_MAX_FILE_SIZE, + /* 0x04e N */ OPT_NO_CHECK, + /* 0x04f */ 0, + /* 0x050 P */ OPT_NO_PARAM, + /* 0x051 */ 0, + /* 0x052 R */ OPT_RECURSE, + /* 0x053 S */ OPT_SORT, + /* 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, + /* 0x061 a */ OPT_ALL, + /* 0x062 */ 0, + /* 0x063 c */ OPT_CONST, + /* 0x064 d */ OPT_DEST, + /* 0x065 e */ OPT_EXT, + /* 0x066 */ 0,0, + /* 0x068 h */ OPT_HELP, + /* 0x069 i */ OPT_IGNORE, + /* 0x06a */ 0,0, + /* 0x06c l */ OPT_LONG, + /* 0x06d */ 0, + /* 0x06e n */ OPT_NORM, + /* 0x06f o */ OPT_OVERWRITE, + /* 0x070 p */ OPT_PRESERVE, + /* 0x071 q */ OPT_QUIET, + /* 0x072 r */ OPT_REMOVE_DEST, + /* 0x073 s */ OPT_SOURCE, + /* 0x074 t */ OPT_TEST, + /* 0x075 u */ OPT_UPDATE, + /* 0x076 v */ OPT_VERBOSE, + /* 0x077 */ 0, + /* 0x078 x */ OPT_TRANSFORM, + /* 0x079 */ 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_TOUCH, + /* 0x08b */ OPT_AUTO, + /* 0x08c */ OPT_SET_FLAGS, + /* 0x08d */ OPT_SET_SCALE, + /* 0x08e */ OPT_SET_ROT, + /* 0x08f */ OPT_SET_X, + /* 0x090 */ OPT_SET_Y, + /* 0x091 */ OPT_SET_Z, + /* 0x092 */ OPT_XCENTER, + /* 0x093 */ OPT_YCENTER, + /* 0x094 */ OPT_ZCENTER, + /* 0x095 */ OPT_CENTER, + /* 0x096 */ OPT_SCALE, + /* 0x097 */ OPT_SHIFT, + /* 0x098 */ OPT_XSS, + /* 0x099 */ OPT_YSS, + /* 0x09a */ OPT_ZSS, + /* 0x09b */ OPT_ROT, + /* 0x09c */ OPT_XROT, + /* 0x09d */ OPT_YROT, + /* 0x09e */ OPT_ZROT, + /* 0x09f */ OPT_YPOS, + /* 0x0a0 */ OPT_TRANSLATE, + /* 0x0a1 */ OPT_NULL, + /* 0x0a2 */ OPT_NEXT, + /* 0x0a3 */ OPT_ASCALE, + /* 0x0a4 */ OPT_AROT, + /* 0x0a5 */ OPT_TFORM_SCRIPT, + /* 0x0a6 */ OPT_MINIMAP, + /* 0x0a7 */ OPT_RM_GOBJ, + /* 0x0a8 */ OPT_BATTLE, + /* 0x0a9 */ OPT_EXPORT_FLAGS, + /* 0x0aa */ OPT_ROUTE_OPTIONS, + /* 0x0ab */ OPT_WIM0, + /* 0x0ac */ OPT_SLOT, + /* 0x0ad */ OPT_LOAD_KCL, + /* 0x0ae */ OPT_KCL, + /* 0x0af */ OPT_KCL_FLAG, + /* 0x0b0 */ OPT_KCL_SCRIPT, + /* 0x0b1 */ OPT_TRI_AREA, + /* 0x0b2 */ OPT_TRI_HEIGHT, + /* 0x0b3 */ OPT_FLAG_FILE, + /* 0x0b4 */ OPT_XTRIDATA, + /* 0x0b5 */ OPT_KMP, + /* 0x0b6 */ OPT_SPEED_MOD, + /* 0x0b7 */ OPT_KTPT2, + /* 0x0b8 */ OPT_TFORM_KMP, + /* 0x0b9 */ OPT_REPAIR_XPF, + /* 0x0ba */ OPT_GAMEMODES, + /* 0x0bb */ OPT_MDL, + /* 0x0bc */ OPT_PAT, + /* 0x0bd */ OPT_PATCH_FILE, + /* 0x0be */ OPT_KMG_LIMIT, + /* 0x0bf */ OPT_KMG_COPY, + /* 0x0c0 */ OPT_LT_CLEAR, + /* 0x0c1 */ OPT_LT_ONLINE, + /* 0x0c2 */ OPT_LT_N_PLAYERS, + /* 0x0c3 */ OPT_LT_COND_BIT, + /* 0x0c4 */ OPT_LT_GAME_MODE, + /* 0x0c5 */ OPT_LT_ENGINE, + /* 0x0c6 */ OPT_LT_RANDOM, + /* 0x0c7 */ OPT_LEX_PURGE, + /* 0x0c8 */ OPT_LOAD_BMG, + /* 0x0c9 */ OPT_PATCH_BMG, + /* 0x0ca */ OPT_MACRO_BMG, + /* 0x0cb */ OPT_FILTER_BMG, + /* 0x0cc */ OPT_CACHE, + /* 0x0cd */ OPT_CNAME, + /* 0x0ce */ OPT_ID, + /* 0x0cf */ OPT_BASE64, + /* 0x0d0 */ OPT_DB64, + /* 0x0d1 */ OPT_CODING, + /* 0x0d2 */ OPT_VERIFY, + /* 0x0d3 */ OPT_ROUND, + /* 0x0d4 */ OPT_PIPE, + /* 0x0d5 */ OPT_DELTA, + /* 0x0d6 */ OPT_DIFF, + /* 0x0d7 */ OPT_EPSILON, + /* 0x0d8 */ OPT_BMG_ENCODING, + /* 0x0d9 */ OPT_BMG_INF_SIZE, + /* 0x0da */ OPT_BMG_MID, + /* 0x0db */ OPT_FORCE_ATTRIB, + /* 0x0dc */ OPT_DEF_ATTRIB, + /* 0x0dd */ OPT_NO_ATTRIB, + /* 0x0de */ OPT_X_ESCAPES, + /* 0x0df */ OPT_OLD_ESCAPES, + /* 0x0e0 */ OPT_NO_BMG_COLORS, + /* 0x0e1 */ OPT_BMG_COLORS, + /* 0x0e2 */ OPT_NO_BMG_INLINE, + /* 0x0e3 */ OPT_AUTOADD_PATH, + /* 0x0e4 */ OPT_STRIP, + /* 0x0e5 */ OPT_UTF_8, + /* 0x0e6 */ OPT_NO_UTF_8, + /* 0x0e7 */ OPT_FORCE, + /* 0x0e8 */ OPT_REPAIR_MAGICS, + /* 0x0e9 */ OPT_TINY, + /* 0x0ea */ OPT_YAZ0, + /* 0x0eb */ OPT_YAZ1, + /* 0x0ec */ OPT_XYZ, + /* 0x0ed */ OPT_BZ, + /* 0x0ee */ OPT_SH, + /* 0x0ef */ OPT_BASH, + /* 0x0f0 */ OPT_JSON, + /* 0x0f1 */ OPT_PHP, + /* 0x0f2 */ OPT_MAKEDOC, + /* 0x0f3 */ OPT_VAR, + /* 0x0f4 */ OPT_ARRAY, + /* 0x0f5 */ OPT_AVAR, + /* 0x0f6 */ OPT_ANALYZE, + /* 0x0f7 */ OPT_ANALYZE_MODE, + /* 0x0f8 */ OPT_OLD, + /* 0x0f9 */ OPT_STD, + /* 0x0fa */ OPT_NEW, + /* 0x0fb */ OPT_EXTRACT, + /* 0x0fc */ OPT_NUMBER, + /* 0x0fd */ OPT_REMOVE_SRC, + /* 0x0fe */ OPT_IGNORE_SETUP, + /* 0x0ff */ OPT_PURGE, + /* 0x100 */ OPT_ALIGN_U8, + /* 0x101 */ OPT_ALIGN_PACK, + /* 0x102 */ OPT_ALIGN_BRRES, + /* 0x103 */ OPT_ALIGN_BREFF, + /* 0x104 */ OPT_ALIGN_BREFT, + /* 0x105 */ OPT_ALIGN, + /* 0x106 */ OPT_ENCODE_ALL, + /* 0x107 */ OPT_ENCODE_IMG, + /* 0x108 */ OPT_NO_ENCODE, + /* 0x109 */ OPT_NO_RECURSE, + /* 0x10a */ OPT_AUTO_ADD, + /* 0x10b */ OPT_NO_ECHO, + /* 0x10c */ OPT_PT_DIR, + /* 0x10d */ OPT_RM_AIPARAM, + /* 0x10e */ OPT_U8, + /* 0x10f */ OPT_SZS, + /* 0x110 */ OPT_WU8, + /* 0x111 */ OPT_XWU8, + /* 0x112 */ OPT_WBZ, + /* 0x113 */ OPT_PACK, + /* 0x114 */ OPT_BRRES, + /* 0x115 */ OPT_BREFF, + /* 0x116 */ OPT_BREFT, + /* 0x117 */ OPT_NO_COMPRESS, + /* 0x118 */ OPT_FAST, + /* 0x119 */ OPT_LINKS, + /* 0x11a */ OPT_BASEDIR, + /* 0x11b */ OPT_DECODE, + /* 0x11c */ OPT_MIPMAPS, + /* 0x11d */ OPT_NO_MIPMAPS, + /* 0x11e */ OPT_N_MIPMAPS, + /* 0x11f */ OPT_MAX_MIPMAPS, + /* 0x120 */ OPT_MIPMAP_SIZE, + /* 0x121 */ OPT_FAST_MIPMAPS, + /* 0x122 */ OPT_CMPR_DEFAULT, + /* 0x123 */ OPT_CUT, + /* 0x124 */ OPT_RAW, + /* 0x125 */ OPT_SECTIONS, + /* 0x126 */ 0,0,0,0, 0,0, +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// opt_allowed_cmd_* /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static u8 option_allowed_cmd_VERSION[130] = // 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,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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1 +}; + +static u8 option_allowed_cmd_HELP[130] = // cmd #2 +{ + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,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[130] = // cmd #3 +{ + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,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[130] = // cmd #4 +{ + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,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[130] = // 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,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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_ERROR[130] = // 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,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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1 +}; + +static u8 option_allowed_cmd_FILETYPE[130] = // 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,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_FILEATTRIB[130] = // 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, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_BRSUB[130] = // 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, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_SYMBOLS[130] = // 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,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_FUNCTIONS[130] = // 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,1,1,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_CALCULATE[130] = // cmd #12 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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[130] = // cmd #13 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,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,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_FLOAT[130] = // cmd #14 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_VR_CALC[130] = // 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,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_VR_RACE[130] = // 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,1,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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_AUTOADD[130] = // cmd #17 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,0,1,0,0, 1,0,1,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_TRACKS[130] = // cmd #18 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,1,0,0, 1,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,1,0,0 +}; + +static u8 option_allowed_cmd_SCANCACHE[130] = // cmd #19 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_EXPORT[130] = // cmd #20 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_CODE[130] = // 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,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_RECODE[130] = // cmd #22 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_SUBFILE[130] = // 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,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_LIST[130] = // 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, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,0,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_LIST_L[130] = // 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,0, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,0,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_LIST_LL[130] = // 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, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,0,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_LIST_LLL[130] = // 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,0, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,0,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_LIST_A[130] = // 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,0,0,0, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,0,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_LIST_LA[130] = // 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,0, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,0,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_NAME_REF[130] = // cmd #30 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_ILIST[130] = // cmd #31 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,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,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_ILIST_L[130] = // cmd #32 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,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,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_ILIST_LL[130] = // cmd #33 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,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,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_ILIST_A[130] = // cmd #34 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,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,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_ILIST_LA[130] = // cmd #35 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,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,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_MEMORY[130] = // cmd #36 +{ + 0,0,0,0,0, 0,0,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,1,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,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_MEMORY_A[130] = // cmd #37 +{ + 0,0,0,0,0, 0,0,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,1,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,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,0,0 +}; + +static u8 option_allowed_cmd_DUMP[130] = // cmd #38 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 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,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_SHA1[130] = // cmd #39 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 1,0,1,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_ANALYZE[130] = // cmd #40 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,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,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_DISTRIBUTION[130] = // cmd #41 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,0,0,0, 0,0,0,0,1, 1,0,0,1,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,1,1, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_DIFF[130] = // cmd #42 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 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,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,1,1,0,0 +}; + +static u8 option_allowed_cmd_CHECK[130] = // cmd #43 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,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,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_SLOTS[130] = // cmd #44 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,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,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,1, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_STGI[130] = // cmd #45 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_ISARENA[130] = // cmd #46 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,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,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_NORMALIZE[130] = // cmd #47 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,0,1,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_PATCH[130] = // cmd #48 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_COPY[130] = // cmd #49 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_DUPLICATE[130] = // cmd #50 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,1,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_MINIMAP[130] = // cmd #51 +{ + 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,1,1,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_COMPRESS[130] = // cmd #52 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,0,0,0,0, 0,1,1,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_DECOMPRESS[130] = // cmd #53 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,0, 0,1,1,1,1, + 1,1,0,0,0, 0,1,0,0,1, 1,1,0,1,0, 0,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_ENCODE[130] = // cmd #54 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,1,1,1,1, + 1,1,1,1,1, 1,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_CREATE[130] = // cmd #55 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,0,1, 1,1,1,1,0, 1,1,1,0,1, 0,1,1,1,1, + 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,0,1, 0,0,0,0,1, + 1,1,1,1,1, 1,0,1,0,0 +}; + +static u8 option_allowed_cmd_UPDATE[130] = // cmd #56 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,1, 1,0,0,1,1, 1,1,1,1,0, 1,1,1,1,0, 0,0,0,0,0, + 0,0,1,1,1, 1,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,0,0, 0,1,0,0,0, + 0,0,0,0,0, 0,0,1,0,0 +}; + +static u8 option_allowed_cmd_EXTRACT[130] = // cmd #57 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,1,1,0,0, 0,1,1,0,1, 1,1,1,1,0, 1,1,1,1,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,1, 1,1,1,1,1, + 1,0,0,0,1, 1,1,1,1,0 +}; + +static u8 option_allowed_cmd_XDECODE[130] = // cmd #58 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,1,1,0,0, 0,1,1,0,1, 1,1,1,1,0, 1,1,1,1,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,1, 1,1,1,1,1, + 1,0,0,0,1, 1,1,1,1,0 +}; + +static u8 option_allowed_cmd_XEXPORT[130] = // cmd #59 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,1,1,0,0, 0,1,1,0,1, 1,1,1,1,0, 1,1,1,1,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,1, 1,1,1,1,1, + 1,0,0,0,1, 1,1,1,1,0 +}; + +static u8 option_allowed_cmd_XALL[130] = // cmd #60 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,1,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,1,1,0,0, 0,1,1,0,1, 1,1,1,1,0, 1,1,1,1,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,1, 1,1,1,1,1, + 1,0,0,0,1, 1,1,1,1,0 +}; + +static u8 option_allowed_cmd_XCOMMON[130] = // cmd #61 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_BINARY[130] = // cmd #62 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_TEXT[130] = // cmd #63 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,1,1,0,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_CAT[130] = // cmd #64 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,1,1,0,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_BMG[130] = // cmd #65 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,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,1, 1,1,1,1,1, + 1,1,1,1,1, 1,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_KCL[130] = // cmd #66 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,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_KMP[130] = // cmd #67 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1,1,0, 1,0,0,1,1, 1,0,0,0,0, 0,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,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_LEX[130] = // cmd #68 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,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,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, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,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_INFO[130] = // cmd #69 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_GHOST[130] = // cmd #70 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,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,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_YAZDUMP[130] = // cmd #71 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 1,1,1,1,0, 1,1,1,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + +static u8 option_allowed_cmd_VEHICLE[130] = // cmd #72 +{ + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,1,1, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0,0,0, 0,0,0,0,0 +}; + + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// 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_MDL, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_KMG_LIMIT, + OptionInfo + OPT_KMG_COPY, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_CACHE, + OptionInfo + OPT_CNAME, + OptionInfo + OPT_MAX_FILE_SIZE, + OptionInfo + OPT_TRACKS, + OptionInfo + OPT_ARENAS, + OptionInfo + OPT_AUTOADD_PATH, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TEST, + OptionInfo + OPT_FORCE, + OptionInfo + OPT_REPAIR_MAGICS, + OptionInfo + OPT_TINY, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_XYZ, + OptionInfo + OPT_BZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_SH, + OptionInfo + OPT_BASH, + OptionInfo + OPT_JSON, + OptionInfo + OPT_PHP, + OptionInfo + OPT_MAKEDOC, + OptionInfo + OPT_VAR, + OptionInfo + OPT_ARRAY, + OptionInfo + OPT_AVAR, + + 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_NO_HEADER, + OptionInfo + OPT_IGNORE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_FILEATTRIB[] = +{ + OptionInfo + OPT_NO_HEADER, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_BRSUB[] = +{ + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NO_HEADER, + &option_cmd_BRSUB_LONG, + + 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_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_VR_CALC[] = +{ + OptionInfo + OPT_NO_HEADER, + &option_cmd_VR_CALC_BRIEF, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_VR_RACE[] = +{ + &option_cmd_VR_RACE_LONG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_AUTOADD[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_AUTOADD_QUIET, + &option_cmd_AUTOADD_VERBOSE, + &option_cmd_AUTOADD_DEST, + OptionInfo + OPT_DEST2, + &option_cmd_AUTOADD_OVERWRITE, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_PRESERVE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_TRACKS[] = +{ + &option_cmd_TRACKS_VERBOSE, + &option_cmd_TRACKS_ALL, + &option_cmd_TRACKS_LONG, + OptionInfo + OPT_PIPE, + OptionInfo + OPT_LOAD_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_SCANCACHE[] = +{ + OptionInfo + OPT_CACHE, + OptionInfo + OPT_PURGE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_EXPORT[] = +{ + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CODE[] = +{ + + 0 +}; + +static const InfoOption_t * option_tab_cmd_RECODE[] = +{ + + 0 +}; + +static const InfoOption_t * option_tab_cmd_SUBFILE[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LIST[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + &option_cmd_LIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LIST_L[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + &option_cmd_LIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LIST_LL[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + &option_cmd_LIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LIST_LLL[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + &option_cmd_LIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LIST_A[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + &option_cmd_LIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LIST_LA[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + &option_cmd_LIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_NAME_REF[] = +{ + &option_cmd_NAME_REF_SORT, + &option_cmd_NAME_REF_BRIEF, + &option_cmd_NAME_REF_LONG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ILIST[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_ALL, + &option_cmd_ILIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ILIST_L[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_ALL, + &option_cmd_ILIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ILIST_LL[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_ALL, + &option_cmd_ILIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ILIST_A[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_ALL, + &option_cmd_ILIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ILIST_LA[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_ALL, + &option_cmd_ILIST_LONG, + OptionInfo + OPT_SORT, + OptionInfo + OPT_NO_HEADER, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_MEMORY[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + &option_cmd_MEMORY_DECODE, + &option_cmd_MEMORY_MIPMAPS, + OptionInfo + OPT_CUT, + &option_cmd_MEMORY_ALL, + &option_cmd_MEMORY_LONG, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_MEMORY_A[] = +{ + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + &option_cmd_MEMORY_DECODE, + &option_cmd_MEMORY_MIPMAPS, + OptionInfo + OPT_CUT, + &option_cmd_MEMORY_ALL, + &option_cmd_MEMORY_LONG, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_SLOT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DUMP[] = +{ + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_SHA1[] = +{ + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_ID, + OptionInfo + OPT_BASE64, + OptionInfo + OPT_DB64, + OptionInfo + OPT_CODING, + OptionInfo + OPT_VERIFY, + &option_cmd_SHA1_BRIEF, + &option_cmd_SHA1_LONG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ANALYZE[] = +{ + &option_cmd_ANALYZE_LONG, + OptionInfo + OPT_IGNORE, + &option_cmd_ANALYZE_QUIET, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_SH, + OptionInfo + OPT_BASH, + OptionInfo + OPT_JSON, + OptionInfo + OPT_PHP, + OptionInfo + OPT_MAKEDOC, + OptionInfo + OPT_VAR, + OptionInfo + OPT_ARRAY, + OptionInfo + OPT_AVAR, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DISTRIBUTION[] = +{ + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_BASE64, + OptionInfo + OPT_DB64, + OptionInfo + OPT_CODING, + &option_cmd_DISTRIBUTION_SOURCE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DIFF[] = +{ + &option_cmd_DIFF_QUIET, + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + OptionInfo + OPT_DEST, + OptionInfo + OPT_ESC, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CHECK[] = +{ + &option_cmd_CHECK_NO_CHECK, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_COLORS, + OptionInfo + OPT_NO_COLORS, + &option_cmd_CHECK_BRIEF, + &option_cmd_CHECK_LONG, + &option_cmd_CHECK_QUIET, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_SLOTS[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_SLOTS_BRIEF, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 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_ISARENA[] = +{ + OptionInfo + OPT_COLORS, + OptionInfo + OPT_NO_COLORS, + OptionInfo + OPT_NO_HEADER, + &option_cmd_ISARENA_BRIEF, + &option_cmd_ISARENA_QUIET, + &option_cmd_ISARENA_IGNORE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_NORMALIZE[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_REMOVE_SRC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_FAST, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_PATCH[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_REMOVE_SRC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_FAST, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_COPY[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_REMOVE_SRC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_FAST, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DUPLICATE[] = +{ + OptionInfo + OPT_GAMEMODES, + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_REMOVE_SRC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_FAST, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_MINIMAP[] = +{ + &option_cmd_MINIMAP_LONG, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_FAST, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_CONST, + OptionInfo + OPT_TOUCH, + OptionInfo + OPT_AUTO, + OptionInfo + OPT_SET_FLAGS, + OptionInfo + OPT_SET_SCALE, + OptionInfo + OPT_SET_ROT, + OptionInfo + OPT_SET_X, + OptionInfo + OPT_SET_Y, + OptionInfo + OPT_SET_Z, + OptionInfo + OPT_XCENTER, + OptionInfo + OPT_YCENTER, + OptionInfo + OPT_ZCENTER, + OptionInfo + OPT_CENTER, + 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, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_COMPRESS[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_REMOVE_SRC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_FAST, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_DECOMPRESS[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_REMOVE_SRC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_NORM, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_AUTO_ADD, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_ENCODE[] = +{ + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CREATE[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_IGNORE_SETUP, + OptionInfo + OPT_U8, + OptionInfo + OPT_WU8, + OptionInfo + OPT_PACK, + OptionInfo + OPT_BRRES, + OptionInfo + OPT_BREFF, + OptionInfo + OPT_BREFT, + OptionInfo + OPT_YAZ0, + OptionInfo + OPT_YAZ1, + OptionInfo + OPT_BZ, + OptionInfo + OPT_SZS, + OptionInfo + OPT_WBZ, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PT_DIR, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_RM_AIPARAM, + OptionInfo + OPT_ALIGN_U8, + OptionInfo + OPT_ALIGN_PACK, + OptionInfo + OPT_ALIGN_BRRES, + OptionInfo + OPT_ALIGN_BREFF, + OptionInfo + OPT_ALIGN_BREFT, + OptionInfo + OPT_ALIGN, + OptionInfo + OPT_LOGGING, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + &option_grp_ENCODE_ALL, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_AUTO_ADD, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_N_MIPMAPS, + OptionInfo + OPT_MAX_MIPMAPS, + OptionInfo + OPT_MIPMAP_SIZE, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_NO_COMPRESS, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_FAST, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_UPDATE[] = +{ + OptionInfo + OPT_SOURCE, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_NO_COMPRESS, + OptionInfo + OPT_COMPRESS, + OptionInfo + OPT_FAST, + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_ALL, + OptionInfo + OPT_ENCODE_ALL, + OptionInfo + OPT_ENCODE_IMG, + OptionInfo + OPT_NO_ENCODE, + OptionInfo + OPT_NO_RECURSE, + OptionInfo + OPT_NO_ECHO, + OptionInfo + OPT_NO_CHECK, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_TRANSFORM, + OptionInfo + OPT_STRIP, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_EXTRACT[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_BASEDIR, + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_DECODE, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOUT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_DELTA, + OptionInfo + OPT_DIFF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_NO_CHECK, + OptionInfo + OPT_RAW, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_XDECODE[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_BASEDIR, + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_DECODE, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOUT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_DELTA, + OptionInfo + OPT_DIFF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_NO_CHECK, + OptionInfo + OPT_RAW, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_XEXPORT[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_BASEDIR, + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_DECODE, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOUT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_DELTA, + OptionInfo + OPT_DIFF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_NO_CHECK, + OptionInfo + OPT_RAW, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_XALL[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_BASEDIR, + OptionInfo + OPT_RECURSE, + OptionInfo + OPT_EXT, + OptionInfo + OPT_LINKS, + OptionInfo + OPT_DECODE, + OptionInfo + OPT_MIPMAPS, + OptionInfo + OPT_NO_MIPMAPS, + OptionInfo + OPT_FAST_MIPMAPS, + OptionInfo + OPT_CMPR_DEFAULT, + OptionInfo + OPT_CUT, + OptionInfo + OPT_ALL, + OptionInfo + OPT_IGNORE, + &option_grp_TEXTOUT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_DELTA, + OptionInfo + OPT_DIFF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_NO_CHECK, + OptionInfo + OPT_RAW, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_XCOMMON[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + OptionInfo + OPT_IGNORE, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_BINARY[] = +{ + OptionInfo + OPT_KMG_LIMIT, + OptionInfo + OPT_KMG_COPY, + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_TEXT[] = +{ + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_DECODE, + OptionInfo + OPT_KMG_LIMIT, + OptionInfo + OPT_KMG_COPY, + &option_grp_TEXTOUT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_DELTA, + OptionInfo + OPT_DIFF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_BMG_ENCODING, + OptionInfo + OPT_BMG_INF_SIZE, + OptionInfo + OPT_BMG_MID, + OptionInfo + OPT_FORCE_ATTRIB, + OptionInfo + OPT_DEF_ATTRIB, + OptionInfo + OPT_NO_ATTRIB, + OptionInfo + OPT_X_ESCAPES, + OptionInfo + OPT_OLD_ESCAPES, + OptionInfo + OPT_SINGLE_LINE, + OptionInfo + OPT_NO_BMG_COLORS, + OptionInfo + OPT_BMG_COLORS, + OptionInfo + OPT_NO_BMG_INLINE, + &option_grp_BMG_LONG, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_CAT[] = +{ + OptionInfo + OPT_IGNORE, + OptionInfo + OPT_DECODE, + &option_grp_TEXTOUT_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_DELTA, + OptionInfo + OPT_DIFF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_BMG_ENCODING, + OptionInfo + OPT_BMG_INF_SIZE, + OptionInfo + OPT_BMG_MID, + OptionInfo + OPT_FORCE_ATTRIB, + OptionInfo + OPT_DEF_ATTRIB, + OptionInfo + OPT_NO_ATTRIB, + OptionInfo + OPT_X_ESCAPES, + OptionInfo + OPT_OLD_ESCAPES, + OptionInfo + OPT_SINGLE_LINE, + OptionInfo + OPT_NO_BMG_COLORS, + OptionInfo + OPT_BMG_COLORS, + OptionInfo + OPT_NO_BMG_INLINE, + &option_grp_BMG_LONG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_BMG[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_BMG_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_BMG_ENCODING, + OptionInfo + OPT_BMG_INF_SIZE, + OptionInfo + OPT_BMG_MID, + OptionInfo + OPT_FORCE_ATTRIB, + OptionInfo + OPT_DEF_ATTRIB, + OptionInfo + OPT_NO_ATTRIB, + OptionInfo + OPT_X_ESCAPES, + OptionInfo + OPT_OLD_ESCAPES, + OptionInfo + OPT_SINGLE_LINE, + OptionInfo + OPT_NO_BMG_COLORS, + OptionInfo + OPT_BMG_COLORS, + OptionInfo + OPT_NO_BMG_INLINE, + &option_grp_BMG_LONG, + OptionInfo + OPT_EXPORT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_KCL[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_KCL_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_NO_CHECK, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_KMP[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_KMP_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_EXPORT, + OptionInfo + OPT_NO_PARAM, + OptionInfo + OPT_NO_CHECK, + + 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_RM_GOBJ, + OptionInfo + OPT_SLOT, + OptionInfo + OPT_LOAD_KCL, + OptionInfo + OPT_KCL, + OptionInfo + OPT_KCL_FLAG, + OptionInfo + OPT_KCL_SCRIPT, + OptionInfo + OPT_TRI_AREA, + OptionInfo + OPT_TRI_HEIGHT, + OptionInfo + OPT_KMP, + OptionInfo + OPT_SPEED_MOD, + OptionInfo + OPT_KTPT2, + OptionInfo + OPT_TFORM_KMP, + OptionInfo + OPT_REPAIR_XPF, + OptionInfo + OPT_MDL, + OptionInfo + OPT_MINIMAP, + OptionInfo + OPT_PAT, + OptionInfo + OPT_PATCH_FILE, + OptionInfo + OPT_LT_CLEAR, + OptionInfo + OPT_LT_ONLINE, + OptionInfo + OPT_LT_N_PLAYERS, + OptionInfo + OPT_LT_COND_BIT, + OptionInfo + OPT_LT_GAME_MODE, + OptionInfo + OPT_LT_ENGINE, + OptionInfo + OPT_LT_RANDOM, + OptionInfo + OPT_LEX_PURGE, + OptionInfo + OPT_PATCH_BMG, + OptionInfo + OPT_MACRO_BMG, + OptionInfo + OPT_FILTER_BMG, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_LEX[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_LEX_NO_HEADER, + OptionInfo + OPT_BRIEF, + OptionInfo + OPT_EXPORT, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_INFO[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_INFO_NO_HEADER, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_GHOST[] = +{ + OptionInfo + OPT_IGNORE, + &option_cmd_GHOST_NO_HEADER, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_SH, + OptionInfo + OPT_BASH, + OptionInfo + OPT_JSON, + OptionInfo + OPT_PHP, + OptionInfo + OPT_MAKEDOC, + OptionInfo + OPT_VAR, + OptionInfo + OPT_ARRAY, + OptionInfo + OPT_AVAR, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_YAZDUMP[] = +{ + OptionInfo + OPT_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_ESC, + + OptionInfo + OPT_NONE, // separator + + OptionInfo + OPT_PRESERVE, + OptionInfo + OPT_UPDATE, + OptionInfo + OPT_OVERWRITE, + OptionInfo + OPT_NUMBER, + OptionInfo + OPT_REMOVE_DEST, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_VEHICLE[] = +{ + &option_cmd_VEHICLE_SOURCE, + &option_cmd_VEHICLE_DEST, + OptionInfo + OPT_DEST2, + OptionInfo + OPT_OVERWRITE, + &option_cmd_VEHICLE_QUIET, + &option_cmd_VEHICLE_VERBOSE, + &option_cmd_VEHICLE_BRIEF, + + 0 +}; + + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoCommand /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static const InfoCommand_t CommandInfo[CMD__N+1] = +{ + { 0, + false, + false, + false, + "wszst", + 0, + "wszst [option]... command [option|parameter|file]...", + "Wiimms SZS Tool : List, compare, (de-)compress, extract and create" + " SZS, U8, PACK, BRRES, BREFF, BREFT and RARC archives. It is also a" + " wrapper to all other tools.", + 0, + 63, + option_tab_tool, + 0 + }, + + { CMD_VERSION, + false, + false, + false, + "VERSION", + 0, + "wszst 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", + "wszst HELP [--width=wd] OPT|OPTION [option]...\n" + "wszst HELP [--width=wd] CMD|COMMAND ...\n" + "wszst HELP [--width=wd] command ...\n" + "wszst HELP [--width=wd] ...", + "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, + "wszst 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, + "wszst 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, + "wszst 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", + "wszst 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", + "wszst FILETYPE file...", + "Scan the header of the entered files and print file type and path for" + " each file as list.", + 0, + 3, + option_tab_cmd_FILETYPE, + option_allowed_cmd_FILETYPE + }, + + { CMD_FILEATTRIB, + false, + false, + false, + "FILEATTRIB", + "FA", + "wszst 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_BRSUB, + false, + false, + false, + "BRSUB", + 0, + "wszst BRSUB [file]...", + " If no file is defined, print a table with known BRRES sub files" + " consisting of file format, version, number of sections and warn" + " level. Otherwise analyse the version numbers of each BRRES sub file" + " of each source and print warnings about invalid versions.", + 0, + 3, + option_tab_cmd_BRSUB, + option_allowed_cmd_BRSUB + }, + + { CMD_SYMBOLS, + false, + false, + false, + "SYMBOLS", + 0, + "wszst SYMBOLS", + "Print predefined symbols of text parser to standard output.", + 0, + 1, + option_tab_cmd_SYMBOLS, + option_allowed_cmd_SYMBOLS + }, + + { CMD_FUNCTIONS, + false, + false, + false, + "FUNCTIONS", + 0, + "wszst FUNCTIONS [key]...", + "Print a list with all parser functions. If one or more keys 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, + "wszst 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, + "wszst 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.", + 20, + option_tab_cmd_MATRIX, + option_allowed_cmd_MATRIX + }, + + { CMD_FLOAT, + false, + false, + false, + "FLOAT", + 0, + "wszst 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_VR_CALC, + false, + false, + false, + "VR-CALC", + "VRCALC", + "wszst VR-CALC delta...", + " Calculate a VR increment for each given delta value" + " (=VR_winner-VR_loser). Print results as table.", + 0, + 2, + option_tab_cmd_VR_CALC, + option_allowed_cmd_VR_CALC + }, + + { CMD_VR_RACE, + false, + false, + false, + "VR-RACE", + "VRRACE", + "wszst VR-RACE vr1 vr2...", + "Print a table with VR calculations for a race. Each VR is the current" + " rating of a player. The vr-list is well ordered: The first VR is" + " for the winner and the last VR for the looser. Up to 30 VR values" + " will be accpeted. Each VR can be preceeded by \"NUM*\" to define a" + " repeat factor.", + 0, + 1, + option_tab_cmd_VR_RACE, + option_allowed_cmd_VR_RACE + }, + + { CMD_AUTOADD, + false, + false, + false, + "AUTOADD", + 0, + "wszst AUTOADD [source]...", + "Manage the auto-add library. Primarily add files to the main auto-add" + " archive for future use of option --auto-add or to convert WU8 files." + " If SOURCE is a directory, all standard track and arena file names" + " are searched for the missed auto-add files. Without source files," + " the status of the auto-add archive is printed.\n" + " Try 'wszst AUTOADD ./path_to/Race/Course/' to add all supported" + " files.", + 0, + 8, + option_tab_cmd_AUTOADD, + option_allowed_cmd_AUTOADD + }, + + { CMD_TRACKS, + false, + false, + false, + "TRACKS", + 0, + "wszst TRACKS [selection_mask]", + "Print a list of all known track SZS files of Mario Kart internal" + " directory './Race/Course'. These files are 32 standard track files" + " and 10 arena files. The first column shows an unique ID of exact 3" + " upper case characters or digits. For '_d' files, a 'd' is appended." + " The second column shows the internal file name. Use BMG files to" + " print real names as third column.", + 0, + 5, + option_tab_cmd_TRACKS, + option_allowed_cmd_TRACKS + }, + + { CMD_SCANCACHE, + false, + false, + false, + "SCANCACHE", + 0, + "wszst SCANCACHE directory\n" + "wszst SCANCACHE --cache directory", + "Scan the cache directory for SZS files and re-build the checksum" + " table. Store the result as file 'cache-content.txt' in the same" + " directory. The file is used by option --cache to optimize file" + " access.", + 0, + 2, + option_tab_cmd_SCANCACHE, + option_allowed_cmd_SCANCACHE + }, + + { CMD_EXPORT, + true, + false, + false, + "_EXPORT", + 0, + "wszst _EXPORT key...", + "This hidden command exports some definitions to standard output. Use" + " keyword HELP to get a list of possible keywords.", + 0, + 0, + option_tab_cmd_EXPORT, + option_allowed_cmd_EXPORT + }, + + { CMD_CODE, + true, + false, + false, + "_CODE", + 0, + "wszst _CODE [files]", + "All bytes of all input files are xor'ed with 0xDC and copied to" + " stdout. If no source file is given, standard input is read.", + 0, + 0, + option_tab_cmd_CODE, + option_allowed_cmd_CODE + }, + + { CMD_RECODE, + true, + false, + false, + "_RECODE", + 0, + "wszst _RECODE mode [files]", + "All bytes of all input files are interpreted as 1 file and re-coded." + " MODE defines the re-code mode. If no source file is given, standard" + " input is read.", + 0, + 0, + option_tab_cmd_RECODE, + option_allowed_cmd_RECODE + }, + + { CMD_SUBFILE, + true, + false, + false, + "_SUBFILE", + 0, + "wszst _SUBFILE [files]", + "Test sub-file system.", + 0, + 8, + option_tab_cmd_SUBFILE, + option_allowed_cmd_SUBFILE + }, + + { CMD_LIST, + false, + false, + true, + "LIST", + "LS", + "wszst LIST [source]...", + "List all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" + " archives. If listing a directory, then a virtual SZS file is created" + " (like CREATE does it) and listed.", + 0, + 48, + option_tab_cmd_LIST, + option_allowed_cmd_LIST + }, + + { CMD_LIST_L, + false, + false, + false, + "LIST-L", + "LL", + "wszst LIST-L [source]...", + "List all sub files with size. 'LIST-L' and 'LL' are short cuts for" + " 'LIST --long'.", + 0, + 48, + option_tab_cmd_LIST_L, + option_allowed_cmd_LIST_L + }, + + { CMD_LIST_LL, + false, + false, + false, + "LIST-LL", + "LLL", + "wszst LIST-LL [source]...", + "List all sub files with offset and size. 'LIST-LL' and 'LLL' are" + " short cuts for 'LIST --long --long'.", + 0, + 48, + option_tab_cmd_LIST_LL, + option_allowed_cmd_LIST_LL + }, + + { CMD_LIST_LLL, + false, + false, + false, + "LIST-LLL", + "LLLL", + "wszst LIST-LLL [source]...", + "List all sub files with offset and size in debugging mode. 'LIST-LLL'" + " and 'LLLL' are short cuts for 'LIST --long --long --long'.", + 0, + 48, + option_tab_cmd_LIST_LLL, + option_allowed_cmd_LIST_LLL + }, + + { CMD_LIST_A, + false, + false, + false, + "LIST-A", + "LA", + "wszst LIST-A [source]...", + "List recursive all sub files with size. 'LIST-A' and 'LA' are short" + " cuts for 'LIST --long --all --all'.", + 0, + 48, + option_tab_cmd_LIST_A, + option_allowed_cmd_LIST_A + }, + + { CMD_LIST_LA, + false, + false, + false, + "LIST-LA", + "LLA", + "wszst LIST-LA [source]...", + "List recursive all sub files with offset and size. 'LIST-LA' and" + " 'LLA' are short cuts for 'LIST --long --long --all --all'.", + 0, + 48, + option_tab_cmd_LIST_LA, + option_allowed_cmd_LIST_LA + }, + + { CMD_NAME_REF, + false, + false, + false, + "NAME-REF", + "NAMEREF", + "wszst NAME-REF [source]...", + "For each BRRES file or subfile, create a name based cross reference" + " and print the result as list ordered by names in BRRES order. For U8" + " archives (e.g. track SZS files), sub file course_model.brres is" + " analysed.", + 0, + 3, + option_tab_cmd_NAME_REF, + option_allowed_cmd_NAME_REF + }, + + { CMD_ILIST, + false, + false, + true, + "ILIST", + "IL", + "wszst ILIST [source]...", + "List the images files of all sub files of SZS, U8, PACK, BRRES," + " BREFF, BREFT and RARC archives; non image files are ignored. If" + " listing a directory, then a virtual SZS file is created (like CREATE" + " does it) and listed.", + 0, + 45, + option_tab_cmd_ILIST, + option_allowed_cmd_ILIST + }, + + { CMD_ILIST_L, + false, + false, + false, + "ILIST-L", + "ILL", + "wit ILIST-L [source]...", + "List all image files with geometry data. 'ILIST-L' and 'ILL' are" + " short cuts for 'ILIST --long'.", + 0, + 45, + option_tab_cmd_ILIST_L, + option_allowed_cmd_ILIST_L + }, + + { CMD_ILIST_LL, + false, + false, + false, + "ILIST-LL", + "ILLL", + "wit ILIST-LL [source]...", + "List all sub files with advanced geometry data. 'ILIST-LL' and 'ILLL'" + " are short cuts for 'ILIST --long --long'.", + 0, + 45, + option_tab_cmd_ILIST_LL, + option_allowed_cmd_ILIST_LL + }, + + { CMD_ILIST_A, + false, + false, + false, + "ILIST-A", + "ILA", + "wszst ILIST-A [source]...", + "List recursive all image files. 'ILIST-A' and 'ILA' are short cuts" + " for 'ILIST --all'.", + 0, + 45, + option_tab_cmd_ILIST_A, + option_allowed_cmd_ILIST_A + }, + + { CMD_ILIST_LA, + false, + false, + false, + "ILIST-LA", + "ILLA", + "wit ILIST-LA [source]...", + "List recursive all image files with geometry data. 'ILIST-LA' and" + " 'ILLA' are short cuts for 'ILIST --long --all'.", + 0, + 45, + option_tab_cmd_ILIST_LA, + option_allowed_cmd_ILIST_LA + }, + + { CMD_MEMORY, + false, + false, + true, + "MEMORY", + "MEM", + "wszst MEMORY [source]...", + "Dump a memory map of each source file. Virtual images (extracted" + " directories) are also supported.", + 0, + 47, + option_tab_cmd_MEMORY, + option_allowed_cmd_MEMORY + }, + + { CMD_MEMORY_A, + false, + false, + false, + "MEMORY-A", + "MEMA", + "wszst MEMORY-A [source]...", + "Dump recursive a memory map of each source file. 'MEMORY-A' and" + " 'MEMA' are short cuts for 'MEMORY --all --all'.", + 0, + 47, + option_tab_cmd_MEMORY_A, + option_allowed_cmd_MEMORY_A + }, + + { CMD_DUMP, + false, + false, + false, + "DUMP", + 0, + "wszst DUMP [source]...", + "Dump the internal structure of a BRRES files, compressed or not." + " Other archives are ignored. The main goal is to verify string" + " relocation. Virtual images (extracted directories) are also" + " supported.", + 0, + 41, + option_tab_cmd_DUMP, + option_allowed_cmd_DUMP + }, + + { CMD_SHA1, + false, + false, + true, + "SHA1", + 0, + "wszst SHA1 [source]...", + "Print a SHA1 checksum for each source. The checksum is calculated by" + " using the uncompressed data.", + 0, + 48, + option_tab_cmd_SHA1, + option_allowed_cmd_SHA1 + }, + + { CMD_ANALYZE, + false, + false, + false, + "ANALYZE", + "ANA", + "wszst ANALYZE [source]...", + "Analyse track files and print results in machine readable format.", + 0, + 13, + option_tab_cmd_ANALYZE, + option_allowed_cmd_ANALYZE + }, + + { CMD_DISTRIBUTION, + false, + false, + false, + "DISTRIBUTION", + "DIST", + "wszst DISTRIBUTION result source...\n" + "wszst DISTRIBUTION directory [source]...", + "Load each SOURCE (SZS, WBZ, U8 or WU8) and calculate a checksum of" + " the uncompressed data. If SOURCE is a directory, scan it for SZS," + " WBZ, U8 and WU8 files. If a source directory starts with \"arena\"," + " all tracks of the directory are assumed to be battle arenas. Finally" + " print the results into file RESULT.\n" + " The default name for RESULT is \"distribution.txt\". Extension .txt" + " is appended to the filename if not defined. If RESULT is a" + " directory, it is used as first source too.\n" + " If file RESULT exists, it is automatically added as last source to" + " the list of option --source, but only if not already added. On" + " scanning of file result, parameters are scanned too.", + 0, + 45, + option_tab_cmd_DISTRIBUTION, + option_allowed_cmd_DISTRIBUTION + }, + + { CMD_DIFF, + false, + false, + true, + "DIFF", + "CMP", + "wszst DIFF source1 source2\n" + "wszst DIFF source... --dest dest", + "Compare two or more sources (each SZS, U8, PACK, BRRES, BREFF, BREFT," + " RARC or directory) on file level and report mismatches for each sub" + " file. If option --dest is set, then each source file is compared" + " with a file in the destination.", + 0, + 6, + option_tab_cmd_DIFF, + option_allowed_cmd_DIFF + }, + + { CMD_CHECK, + false, + false, + true, + "CHECK", + 0, + "wszst CHECK [source]...", + "Make a validity check for track files: Try to read KCL and KMP (and" + " check both) and find unknown, modified, needed and unneeded files." + " Also analyse cannons and make slot proposals. This command uses an" + " internal object and file database. The source can be a SZS, U8, WU8" + " or WBZ file, or an U8 like directory.", + 0, + 90, + option_tab_cmd_CHECK, + option_allowed_cmd_CHECK + }, + + { CMD_SLOTS, + false, + false, + false, + "SLOTS", + 0, + "wszst SLOTS [source]...", + "Try to find out the slots, that will run a track. Each source can be" + " a SZS, U8, WU8 or WBZ file, or an U8 like directory. For each source" + " one status line is printed. The status line contains either a" + " positive or a negative slot list, whatever is shorter. For battle" + " arenas, the keyword ARENA is printed.", + 0, + 86, + option_tab_cmd_SLOTS, + option_allowed_cmd_SLOTS + }, + + { CMD_STGI, + false, + false, + false, + "STGI", + 0, + "wszst STGI [source]...", + "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_ISARENA, + false, + false, + false, + "ISARENA", + 0, + "wszst ISARENA [source]...", + "Analyse each track for its arena status and print a line with a" + " status code and the track name. The status code is: »-RACE« for a" + " racing track, »?MAYBE« for likely an arena, »+ARENA« for an" + " arena, »+DISPATCH« for an arena with dispatch points or any error" + " hint beginning with an »!«. So the very first character (one of" + " »!-?+«) can be used to distinguish the status class.\n" + " The exit status is >2 on error, 2 (DIFFER), if at least one file is" + " a racing track, or 0 (OK), if all sources are arenas.", + 0, + 6, + option_tab_cmd_ISARENA, + option_allowed_cmd_ISARENA + }, + + { CMD_NORMALIZE, + false, + false, + false, + "NORMALIZE", + "NORM", + "wszst NORMALIZE [source]...", + "Normalize an U8 archive, compressed or not: The files are sorted in" + " `Nintendo like' order and unused data holes are removed. If" + " directory '.' is available it becomes the root directory for all" + " others. Compressed sources are compressed again with maximum" + " compression (level 9). The destination is only written if any data" + " changed.\n" + " 'wszst NORMALIZE' is the same as 'wszst PATCH --norm'.", + 0, + 74, + option_tab_cmd_NORMALIZE, + option_allowed_cmd_NORMALIZE + }, + + { CMD_PATCH, + false, + false, + false, + "PATCH", + 0, + "wszst PATCH [source]...", + "Patch an U8 archive, compressed or not: Load the archive, apply all" + " patching and transforming options and store the file again." + " Compressed sources are compressed again. The destination is only" + " written if any data changed.", + 0, + 75, + option_tab_cmd_PATCH, + option_allowed_cmd_PATCH + }, + + { CMD_COPY, + false, + false, + false, + "COPY", + "CP", + "wszst COPY source dest\n" + "wszst COPY source... [-d|-D] dest", + "COPY is an alternative command for copying and patching files. It" + " uses the same internal procedure as command PATCH, but has another" + " command line syntax.\n" + " The command copies all source files to the destination. If more than" + " 1 source is defined, the destination must be either a directory or a" + " destination filename with escapes. Patching is also possible and" + " option --overwrite is set implicitly.", + 0, + 75, + option_tab_cmd_COPY, + option_allowed_cmd_COPY + }, + + { CMD_DUPLICATE, + false, + false, + false, + "DUPLICATE", + "DUP", + "wszst DUPLICATE source [-d|-D] dest", + "The command reads a single track file and duplicates it several times" + " to DEST. Therefor it analyzes the presence flags combinations with" + " and without extension support and creates one file for each relevant" + " scenario. A LEX section TEST will be inserted to force the execution" + " mode for offline tests.\n" + " The destination filename (not directory part) is searched for the" + " first occurance of '@'. If not found, the place before the last" + " point is used. At this place an identification string is inserted.\n" + " Depending on option --gamemodes up to 1573 files will be created." + " So the use of option --fast is recommended to speed up the process." + " Use command 'wkmpt GAMEMODES' to list all variants and to check them" + " beforehand.", + 0, + 76, + option_tab_cmd_DUPLICATE, + option_allowed_cmd_DUPLICATE + }, + + { CMD_MINIMAP, + false, + false, + false, + "MINIMAP", + 0, + "wszst MINIMAP [source]...", + "Print minimap data (more exact: the visual field of the minimap) of a" + " SZS, U8, BRRES or MDL file. If patching options are used, modify the" + " data and write back the file using its original file format. Only" + " the translation vector is modified and new translation and inverse" + " matrices are calculated.", + 0, + 46, + option_tab_cmd_MINIMAP, + option_allowed_cmd_MINIMAP + }, + + { CMD_COMPRESS, + false, + false, + false, + "COMPRESS", + "COM", + "wszst COMPRESS [source]...", + "Compress and create a SZS archives. If the source is already" + " compressed, then decompress and compress it again. The default" + " destination is '%P/%N.szs'.", + 0, + 75, + option_tab_cmd_COMPRESS, + option_allowed_cmd_COMPRESS + }, + + { CMD_DECOMPRESS, + false, + false, + false, + "DECOMPRESS", + "DEC", + "wszst DECOMPRESS [szs]...", + "Decompress SZS files. The default destination is '%P/%N.u8'.", + 0, + 68, + option_tab_cmd_DECOMPRESS, + option_allowed_cmd_DECOMPRESS + }, + + { CMD_ENCODE, + false, + false, + false, + "ENCODE", + "E", + "wszst ENCODE [source_dir]...", + " Create and/or encode sub files if necessary. It works like command" + " CREATE, but without creating a new first level archive file.", + 0, + 69, + option_tab_cmd_ENCODE, + option_allowed_cmd_ENCODE + }, + + { CMD_CREATE, + false, + false, + false, + "CREATE", + "C", + "wszst CREATE [source_dir]...", + "Create SZS, U8, PACK, BRRES, BREFF, BREFT or RARC archives by adding" + " all not hidden files of the directory structure. Create and/or" + " encode sub files if necessary. The default destination is '%P/%N%T'.", + 0, + 95, + option_tab_cmd_CREATE, + option_allowed_cmd_CREATE + }, + + { CMD_UPDATE, + false, + false, + false, + "UPDATE", + "U", + "wszst UPDATE [source]... [--source=] [--dest=]", + "Update an existing SZS, U8, PACK, BRRES, BREFF, BREFT and" + " RARCarchive. This is done in similar way as the EXTRACT command, but" + " instead of extracting, source files are searched in a prior" + " extracted archive. Only files with the same size are updated. The" + " secondary source is used to find the source sub files. The default" + " secondary source is '%P/%N.d/'.", + 0, + 68, + option_tab_cmd_UPDATE, + option_allowed_cmd_UPDATE + }, + + { CMD_EXTRACT, + false, + false, + false, + "EXTRACT", + "X", + "wszst EXTRACT [source]...", + "Extract all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" + " archives. The default destination is '%P/%N.d/'.", + 0, + 73, + option_tab_cmd_EXTRACT, + option_allowed_cmd_EXTRACT + }, + + { CMD_XDECODE, + false, + false, + false, + "XDECODE", + "XD", + "wszst XDECODE [source]...", + "Command XDECODE is a short cut for 'EXTRACT --decode'. It extract all" + " sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC archives" + " and decodes all supported files. The default destination is" + " '%P/%N.d/'.", + 0, + 73, + option_tab_cmd_XDECODE, + option_allowed_cmd_XDECODE + }, + + { CMD_XEXPORT, + false, + false, + false, + "XEXPORT", + "XX", + "wszst XEXPORT [source]...", + "Command XEXPORT is a short cut for 'EXTRACT --decode --export'. It" + " extract all sub files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC" + " archives and decodes all supported files with enabled export mode." + " The default destination is '%P/%N.d/'.", + 0, + 73, + option_tab_cmd_XEXPORT, + option_allowed_cmd_XEXPORT + }, + + { CMD_XALL, + false, + false, + false, + "XALL", + "XA", + "wszst XALL [source]...", + "Command XALL is a short cut for 'EXTRACT --all'. It extract all sub" + " files of SZS, U8, PACK, BRRES, BREFF, BREFT and RARC archives" + " recursively and decodes all supported files. The default destination" + " is '%P/%N.d/'.", + 0, + 73, + option_tab_cmd_XALL, + option_allowed_cmd_XALL + }, + + { CMD_XCOMMON, + false, + false, + false, + "XCOMMON", + 0, + "wszst XCOMMON [source]...", + "Command XCOMMON is a short cut for 'EXTRACT --basedir=common'. Scan" + " archives and extract files from archives, that are below directory" + " 'common'. The default destination is '%P/%N.d/'.", + 0, + 9, + option_tab_cmd_XCOMMON, + option_allowed_cmd_XCOMMON + }, + + { CMD_BINARY, + false, + false, + true, + "BINARY", + "BIN", + "wszst BINARY [source]...", + "Read each source file (binary or text, but never archives) and write" + " the content as binary file. The file extension of the new file" + " depends on the file type, but is usually .bin. Currently supported" + " file formats are BMG, GEOHIT, ITEMSLOT, KCL, KMG, KMP, LEX, OBJFLOW," + " PAT and the related text formats.", + 0, + 11, + option_tab_cmd_BINARY, + option_allowed_cmd_BINARY + }, + + { CMD_TEXT, + false, + false, + false, + "TEXT", + "TXT", + "wszst TEXT [source]...", + "Read each source file (binary or text, but never archives) and write" + " the content as text file. The file extension of the new file is" + " usually .txt. Currently supported file formats are BMG, GEOHIT," + " ITEMSLOT, KCL, KMG, KMP, LEX, OBJFLOW, PAT and the related text" + " formats.", + 0, + 31, + option_tab_cmd_TEXT, + option_allowed_cmd_TEXT + }, + + { CMD_CAT, + false, + false, + false, + "CAT", + 0, + "wszst CAT [source/subfile]...", + "Extract one or more sub files of SZS, U8, PACK, BRRES, BREFF, BREFT" + " and RARC archives. The output of all source files is concatenated" + " and written to stdout.", + 0, + 21, + option_tab_cmd_CAT, + option_allowed_cmd_CAT + }, + + { CMD_BMG, + false, + false, + false, + "BMG", + 0, + "wszst BMG [source]...", + "For each archive all BMG sub files are searched and, if found," + " decoded and printed as combined BMG text file. The command works" + " exactly like 'wbmgt MIX'.", + 0, + 17, + option_tab_cmd_BMG, + option_allowed_cmd_BMG + }, + + { CMD_KCL, + false, + false, + false, + "KCL", + 0, + "wszst KCL [source]...", + "For each archive the KCL sub file course.kcl is searched and, if" + " found, decoded and printed (copied to stdout).\n" + " Automated dropping of bad KCL triangles is enabled if no other drop" + " option is specified by option --kcl.", + 0, + 50, + option_tab_cmd_KCL, + option_allowed_cmd_KCL + }, + + { CMD_KMP, + false, + false, + false, + "KMP", + 0, + "wszst KMP [source]...", + "For each archive the KMP sub file course.kmp is searched and, if" + " found, decoded and printed (copied to stdout).", + 0, + 51, + option_tab_cmd_KMP, + option_allowed_cmd_KMP + }, + + { CMD_LEX, + false, + false, + false, + "LEX", + 0, + "wszst LEX [source]...", + "For each archive the LEX sub file course.lex is searched and, if" + " found, decoded and printed (copied to stdout).", + 0, + 4, + option_tab_cmd_LEX, + option_allowed_cmd_LEX + }, + + { CMD_INFO, + false, + false, + false, + "INFO", + 0, + "wszst INFO [source]...", + "For each archive a file named info.txt and, if not found, credits.txt" + " is searched, ignoring case. The first found file of each archive is" + " printed (copied to stdout).", + 0, + 2, + option_tab_cmd_INFO, + option_allowed_cmd_INFO + }, + + { CMD_GHOST, + true, + false, + false, + "GHOSTS", + 0, + "wszst GHOST [source]...", + "Analyse each file and print a summary about the ghost data.", + 0, + 12, + option_tab_cmd_GHOST, + option_allowed_cmd_GHOST + }, + + { CMD_YAZDUMP, + false, + false, + false, + "YAZDUMP", + "YD", + "wszst YAZDUMP [szs]...", + "Analyze YAZ compression print a dump to stdout. Ignore files without" + " YAZ compression.", + 0, + 8, + option_tab_cmd_YAZDUMP, + option_allowed_cmd_YAZDUMP + }, + + { CMD_VEHICLE, + true, + false, + true, + "VEHICLE", + 0, + "wszst VEHICLE job ...", + "Hidden vehicle settings command.", + 0, + 7, + option_tab_cmd_VEHICLE, + option_allowed_cmd_VEHICLE + }, + + {0,0,0,0,0,0,0,0,0,0,0,0} +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// InfoUI /////////////// +/////////////////////////////////////////////////////////////////////////////// + +const InfoUI_t InfoUI_wszst = +{ + "wszst", + CMD__N, + CommandTab, + CommandInfo, + OPT__N_SPECIFIC, + OPT__N_TOTAL, + OptionInfo, + OptionUsed, + OptionIndex, + OptionShort, + OptionLong +}; + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// END /////////////// +/////////////////////////////////////////////////////////////////////////////// + |
