/*************************************************************************** * _______ _______ _______ * * | ___ |____ | ___ | * * | | |_| / /| | |_| * * | |_____ / / | |_____ * * |_____ | / / |_____ | * * _ | | / / _ | | * * | |___| |/ /____| |___| | * * |_______|_______|_______| * * * * Wiimms SZS Tools * * * *************************************************************************** * * * This file is part of the SZS project. * * Visit https://szs.wiimm.de/ for project details and sources. * * * * Copyright (c) 2011-2024 by Dirk Clemens * * * *************************************************************************** * * * 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 #include "ui-wkclt.h" // /////////////////////////////////////////////////////////////////////////////// /////////////// OptionInfo[] /////////////// /////////////////////////////////////////////////////////////////////////////// static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = { {0,0,0,0,0,0,0,0,0,0}, // OPT_NONE, //----- command specific options ----- { OPT_SCALE, false, false, false, false, false, 0, "scale", "vector[@origin]", "Transform the data: Scale all coordinates and size values by 'vector'" " relative to the point 'origin'. If the origin is not set, 0,0,0 is" " used instead.\n" " Negative values mirror the coordinates. Each parameter is either a" " vector expression or a comma separated expression list of" " coordinates ('x,z' or 'x,y,z').\n" " Transformations are calculated in the order SCALE, SHIFT, ROTATE," " TRANSLATE." }, { OPT_SHIFT, false, false, false, false, false, 0, "shift", "vector", "Transform the data: Add 'vector' to all coordinates. It's simlar to" " --translate, but the addition is done before rotation. The parameter" " is either a vector expression or a comma separated expression list" " of coordinates ('x,z' or 'x,y,z').\n" " Transformations are calculated in the order SCALE, SHIFT, ROTATE," " TRANSLATE." }, { OPT_XSS, false, false, false, false, false, 0, "xss", "x1old,x1new,x2old,x2new", "--xss (x-scale-shift) calculates the X values of --scale and --shift," " so that old values are transformed to the new values. The parameters" " are numbers or expression." }, { OPT_YSS, false, false, false, false, false, 0, "yss", "y1old,y1new,y2old,y2new", "--yss (y-scale-shift) calculates the Y values of --scale and --shift," " so that old values are transformed to the new values. The parameters" " are numbers or expression." }, { OPT_ZSS, false, false, false, false, false, 0, "zss", "z1old,z1new,z2old,z2new", "--zss (z-scale-shift) calculates the Z values of --scale and --shift," " so that old values are transformed to the new values. The parameters" " are numbers or expression." }, { OPT_ROT, false, false, false, false, false, 0, "rot", "degree[@origin]", "Transform the data: Rotate all coordinates and rotation values by the" " angle 'degree' (is a vector) around the 3 axes. All 3 axes goes" " through the point 'origin'. If the origin is not set, 0,0,0 is used" " instead.\n" " Each parameter is either a vector expression or a comma separated" " expression list of coordinates ('x,y,z').\n" " Option --rot is an alternative for --xrot, --yrot and --zrot to" " define all 3 rotations in one step. Transformations are calculated" " in the order SCALE, SHIFT, X-ROTATE, Y-ROTATE, Z-ROTATE, TRANSLATE." }, { OPT_XROT, false, false, false, false, false, 0, "xrot", "degree[@origin]", "Transform the data: Rotate all coordinates and rotation values by the" " angle 'degree' around the x-axis, that goes through the point" " 'origin'. If the origin is not set, 0,0,0 is used instead.\n" " Each parameter is either a vector expression or a comma separated" " expression list of coordinates ('y,z' or 'x,y,z').\n" " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE," " Y-ROTATE, Z-ROTATE, TRANSLATE." }, { OPT_YROT, false, false, false, false, false, 0, "yrot", "degree[@origin]", "Transform the data: Rotate all coordinates and rotation values by the" " angle 'degree' around the x-axis, that goes through the point" " 'origin'. If the origin is not set, 0,0,0 is used instead. This is a" " horizontal counterclockwise rotation and the old option name --hrot" " can also used.\n" " Each parameter is either a vector expression or a comma separated" " expression list of coordinates ('x,z' or 'x,y,z').\n" " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE," " Y-ROTATE, Z-ROTATE, TRANSLATE." }, { OPT_ZROT, false, false, false, false, false, 0, "zrot", "degree[@origin]", "Transform the data: Rotate all coordinates and rotation values by the" " angle 'degree' around the z-axis, that goes through the point" " 'origin'. If the origin is not set, 0,0,0 is used instead.\n" " Each parameter is either a vector expression or a comma separated" " expression list of coordinates ('x,y' or 'x,y,z').\n" " Transformations are calculated in the order SCALE, SHIFT, X-ROTATE," " Y-ROTATE, Z-ROTATE, TRANSLATE." }, { OPT_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_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 , T and" " / or ranges like :, T: and" " :/. '' is a complete KCL flag in the range of" " 0..0xffff. '' are only the base types in the range of 0..0x1f." " If is present, it marks the relevant bits. For the T" " 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 '' 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_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_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'-'v' (32 different 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:" " STANDARD (+/=, default), URL (-_=), STAR (-_*) or XML (.-*)." }, { OPT_ROUND, false, false, false, false, false, 0, "round", 0, "Print additional lines with rounded values (to 3 and 2 bytes for" " floats and 7 and 6 bytes for doubles)." }, { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Print long numeric message IDs instead of alternative message names" " like Txx, Uxx or Mxx." }, { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", 0, "Suppress the syntax information section in BMG text files." }, { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Create smaller output." }, { OPT_NO_WILDCARDS, false, false, false, false, false, 0, "no-wildcards", 0, "Disable wildcard parsing and use each filename exactly as specified." }, { OPT_IN_ORDER, false, false, false, false, false, 0, "in-order", 0, "Process the input files in order of the command line and don't delete" " duplicates." }, { OPT_NO_PARAM, false, false, false, false, false, 'P', "no-param", 0, "Disable parameter support in decoded KMP text files." }, { OPT_NO_ECHO, false, false, false, false, false, 0, "no-echo", 0, "Suppress output of @ECHO commands while scanning text files." }, { OPT_NO_CHECK, false, false, false, false, false, 'N', "no-check", 0, "Do not make plausibility checks for KCL files." }, { OPT_DEST, false, false, false, false, true, 'd', "dest", "path", "Define a destination path (directory/file). The destination - means:" " write to standard output.\n" " The path may contain escape sequences: %Q is replaced by the fully" " qualified source name. %P and %F are replaced by the source path or" " by the filename. %N and %E are replaced by source filename without" " extension or by the source extension. Finally, %T is replaced by the" " default extension of the destination format.\n" " A '?' direct behind '%' in %E and %T conversions avoid that the" " same extension is used twice in row. Read" " https://szs.wiimm.de/opt/dest for more details." }, { OPT_DEST2, false, false, false, false, false, 'D', "DEST", "path", "Like --dest, but create the directory path automatically." }, { OPT_ESC, false, false, false, false, false, 'E', "esc", "char", "Define an alternative escape character for destination files. The" " default is '%'. For Windows batch files it is a good choice to set" " '-E$'." }, { OPT_OVERWRITE, false, false, false, false, false, 'o', "overwrite", 0, "Overwrite already existing files without warning and ignore option" " --number." }, { OPT_NUMBER, false, false, false, false, false, 0, "number", 0, "If a file already exist, append a number directly before the file" " extension to make the filename unique. If other numbered files" " already exist (ignoring case), use the maximum existing index+1." " --num is a short cut." }, { OPT_REMOVE_DEST, false, false, false, false, false, 'r', "remove-dest", 0, "Remove already existing files before creating it. If set, --overwrite" " is ignored. --rm-dest is a short cut." }, { OPT_UPDATE, false, false, false, false, false, 'u', "update", 0, "Update only existing files and don't create new files. If set," " --overwrite and --remove-dest are ignored." }, { OPT_PRESERVE, false, false, false, false, false, 'p', "preserve", 0, "Preserve file times (atime+mtime) while converting or copying files." }, { OPT_IGNORE, false, false, false, false, false, 'i', "ignore", 0, "Ignore non existing source files without warning." }, { OPT_SECTIONS, false, false, false, false, true, 0, "sections", 0, "Print in machine readable sections and parameter lines." }, {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 43 //----- 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_CONFIG, false, false, false, false, false, 0, "config", "file", "Define a configuration file or a directory as source. In later case," " file 'wiimms-szs-tools.conf' is searched.\n" " If option is not not set, then file 'wiimms-szs-tools.conf' is" " searched in different directories. Use command 'wszst CONFIG' to get" " more details." }, { 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_MAX_WIDTH, false, false, false, true, false, 0, "max-width", "maxwidth", "Define the maximum terminal width (number of columns) for help and" " some other messages. The default is 120. This option is ignored if" " --width is set." }, { OPT_NO_PAGER, false, false, false, true, false, 0, "no-pager", 0, "Forbid the internal usage of a pager." }, { 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. Set" " it up to three times to be more verbose." }, { OPT_EXT_ERRORS, false, false, false, false, false, 'Y', "extended-errors", 0, "Enable extended error messages. This includes a source file and line" " reference. Logging level 1 activates it too. --xerr is a short cut." }, { OPT_TIMING, false, false, false, false, false, 0, "timing", 0, "Activate the timing of some operations. Logging level 3 activates" " them too." }, { OPT_WARN, false, false, false, false, false, 'W', "warn", "list", "Enable or disable warnings. Parameter 'list' is a comma separated" " list of keywords. A minus sign before a keyword disables a warning." " Each occurrence of the option will only change entered warning and" " all other warnings are untouched.\n" " Keyword DEFAULT resets the default settings, OFF disables and ALL" " enables all. The other allowed keywords are: INVALID-OFFSET." }, { 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_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, TINY-0 ..." " TINY-7, 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_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 (2 GiB for LTA); that should be enough" " for standard usage." }, { OPT_TRACKS, false, true, false, false, false, 'T', "tracks", "tracks", "Define a new track order. A comma separated list in the format [a=]b" " or a:=b is expected. 'a' and 'b' are track names or slot numbers." " 'a' is the destination slot and 'b' the assigned track. If 'a' is" " omitted, the next slot is used; this means [a=]b,c,d is possible.\n" " Tracks will only be exchanged so that always all tracks are" " assigned. But if using ':=' the new slots are assigned without" " exchanging and the old values are lost." }, { OPT_ARENAS, false, true, false, false, false, 'A', "arenas", "arenas", "Define a new arena order. A comma separated list in the format [a=]b" " or a:=b is expected. 'a' and 'b' are arena names or slot numbers." " 'a' is the destination slot and 'b' the assigned arena. If 'a' is" " omitted, the next slot is used; this means [a=]b,c,d is possible.\n" " Arenas will only be exchanged so that always all arenas are" " assigned. But if using ':=' the new slots are assigned without" " exchanging and the old values are lost." }, { OPT_UTF_8, false, true, false, false, true, 0, "utf-8", 0, "Enables UTF-8 support for filenames (default)." }, { OPT_NO_UTF_8, false, true, false, false, false, 0, "no-utf-8", 0, "Disables UTF-8 support for filenames." }, { OPT_TEST, false, false, false, false, true, 't', "test", 0, "Run in test mode, modify nothing.\n" ">>> USE THIS OPTION IF UNSURE! <<<" }, { OPT_FORCE, false, false, false, false, false, 0, "force", 0, "The tools analyse input files and reject files with invalid data" " structures. If --force is set, little repairable issues are ignored" " and a warning is printed.\n" "Option '--kmp force' does the same, but only for KMP files.\n" ">>> THE RESULT MAY BE INVALID OUTPUT FILES! <<<" }, { OPT_REPAIR_MAGICS, true, false, false, false, false, 0, "repair-magics", "[=mode]", "Control the reparing of missing or wrong magics of files and" " sub-files by analysing file path and file extension. MODE is one of" " OFF (default), ANALYZE or REPAIR (default, if set without mode). OFF" " disables this feature, ANALYZE enables it for analysis only, and" " REPAIR repairs all magics while reading the files. Keyword FNAME can" " be appended (separated by a comma) to give filename scanning the" " highest priority.\n" ">>> THE RESULT MAY BE INVALID OUTPUT FILES! <<<" }, { OPT_TINY, false, false, false, false, false, 0, "tiny", "mode", "Set tiny mode to a level between 0 and 7. See" " https://szs.wiimm.de/opt/tiny for details." }, { OPT_OLD, false, true, false, false, false, 0, "OLD", 0, "Developer option: Cancel --NEW and use old implementation if" " available." }, { OPT_STD, false, true, false, false, false, 0, "STD", 0, "Developer option: Cancel --OLD and --NEW and use standard" " implementation (default)." }, { OPT_NEW, false, true, false, false, false, 0, "NEW", 0, "Developer option: Cancel --OLD and use new implementation if" " available." }, { OPT_EXTRACT, false, true, false, false, false, 0, "EXTRACT", 0, "Create the directory and extract different objects in different" " formats at the moment when they are seen. This is a development" " helper option." }, {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 82 }; // /////////////////////////////////////////////////////////////////////////////// /////////////// 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 KCL text files." }; static const InfoOption_t option_cmd_VERSION_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Print only the version number, revision and system. If set twice," " print only the version number." }; static const InfoOption_t option_cmd_VERSION_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Print in long format. Ignored if option --sections is set." }; static const InfoOption_t option_cmd_CONFIG_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, " Suppress configuration search list." }; static const InfoOption_t option_cmd_CONFIG_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "If set, print the global search list too. If set twice, print the" " auto-add search list too." }; static const InfoOption_t option_cmd_TEST_VERBOSE = { OPT_VERBOSE, false, false, false, false, false, 'v', "verbose", 0, "Print the matrices of transformations." }; static const InfoOption_t option_cmd_COLORS_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Print also a list of all colored text types. If set twice, include" " alternative names. If set three times, include raw color names." }; static const InfoOption_t option_cmd_COLORS_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Ignore option --long and print a single status line about current" " color settings." }; static const InfoOption_t option_cmd_ERROR_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Print message text instead of message name." }; static const InfoOption_t option_cmd_ERROR_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Print message number instead of message name." }; static const InfoOption_t option_cmd_FILETYPE_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Print an additional column with the decompressed file type and" " version. If entered twice, a validation status column is added." }; static const InfoOption_t option_cmd_FUNCTIONS_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Suppress the output of the description and print only function type" " and syntax." }; static const InfoOption_t option_cmd_FUNCTIONS_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Usually only the function syntax is compared to the keywords. But if" " --long is set, the descriptions are compared too." }; static const InfoOption_t option_cmd_MATRIX_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "If set once, suppress vector dumps for transformation steps and" " ignore option --long. If set twice, suppress vector dump for final" " transformation too." }; static const InfoOption_t option_cmd_MATRIX_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "If set once, print inverse matrix for the final transformation. If" " set twice, print inverse matrix for all transformations." }; static const InfoOption_t option_cmd_MATRIX_QUIET = { OPT_QUIET, false, false, false, false, false, 'q', "quiet", 0, "Option --quiet is dedicated to automatic tests comparing the old and" " new transformation algorithms. If set once, the tables are only" " printed, if the results differ. If set twice, nothing is printed at" " all and only the exit status will inform about the results." }; static const InfoOption_t option_cmd_CFF_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "Force usage of 'f(typ,variant)'. If set twice, force usage of" " 'a(typ,w,x,y,z)'." }; static const InfoOption_t option_cmd_CFF_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Suppress the comments with the alternative expression formats." }; static const InfoOption_t option_cmd_TYPES_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Print only the resulting flag." }; static const InfoOption_t option_cmd_FLAGS_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Suppress the output of detailed flag list and print only the type" " summary." }; static const InfoOption_t option_cmd_DUMP_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Suppress the output of the triangle list and print only the header" " data and statistics." }; static const InfoOption_t option_cmd_DUMP_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "If set, append an octree dump to the output. If set twice, add a" " triangle usage list behind the octree dump." }; static const InfoOption_t option_cmd_TRIANGLES_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Suppress the output of the 'normals' data." }; static const InfoOption_t option_cmd_TRIANGLES_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "For each occurrence of option --long increase the precision of the" " floating points numbers by adding 1 fractional digit, but only up to" " additionally 5 digits." }; static const InfoOption_t option_cmd_TRAVERSE_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Print the 0-based triangle index instead of the triangle coordinates." }; static const InfoOption_t option_cmd_TRAVERSE_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "If set, print a calculation log. If set twice, print a calculation" " log for each octree traversing step." }; static const InfoOption_t option_cmd_FALL_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Print only the height (y coordinate) of the result." }; static const InfoOption_t option_cmd_FALL_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, "If set, print a calculation log. If set twice, be more verbose." }; 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_SHA1_BRIEF = { OPT_BRIEF, false, false, false, false, false, 'B', "brief", 0, "Suppress output of the filename." }; // /////////////////////////////////////////////////////////////////////////////// /////////////// CommandTab[] /////////////// /////////////////////////////////////////////////////////////////////////////// static const KeywordTab_t CommandTab[] = { { CMD_VERSION, "VERSION", "V", 0 }, { CMD_HELP, "HELP", "H", 0 }, { CMD_HELP, "?", 0, 0 }, { CMD_CONFIG, "CONFIG", 0, 0 }, { CMD_ARGTEST, "ARGTEST", 0, 0 }, { CMD_EXPAND, "EXPAND", 0, 0 }, { CMD_TEST, "TEST", 0, 0 }, { CMD_COLORS, "COLORS", 0, 0 }, { CMD_ERROR, "ERROR", "ERR", 0 }, { CMD_FILETYPE, "FILETYPE", "FT", 0 }, { CMD_FILEATTRIB, "FILEATTRIB", "FA", 0 }, { CMD_SYMBOLS, "SYMBOLS", 0, 0 }, { CMD_FUNCTIONS, "FUNCTIONS", 0, 0 }, { CMD_CALCULATE, "CALCULATE", 0, 0 }, { CMD_MATRIX, "MATRIX", 0, 0 }, { CMD_FLOAT, "FLOAT", 0, 0 }, { CMD_EXPORT, "_EXPORT", 0, 0 }, { CMD_CAT, "CAT", 0, 0 }, { CMD_DECODE, "DECODE", "DEC", 0 }, { CMD_ENCODE, "ENCODE", "ENC", 0 }, { CMD_COPY, "COPY", "CP", 0 }, { CMD_CFF, "CFF", 0, 0 }, { CMD_TYPES, "TYPES", 0, 0 }, { CMD_FLAGS, "FLAGS", "F", 0 }, { CMD_DUMP, "DUMP", "D", 0 }, { CMD_DBRIEF, "DBRIEF", "DB", 0 }, { CMD_LIST, "LIST", 0, 0 }, { CMD_TRIANGLES, "TRIANGLES", 0, 0 }, { CMD_TRAVERSE, "TRAVERSE", 0, 0 }, { CMD_FALL, "FALL", 0, 0 }, { CMD_CHECK, "CHECK", "CHK", 0 }, { CMD_SHA1, "SHA1", 0, 0 }, { CMD_ANALYZE, "ANALYZE", 0, 0 }, { CMD_BLOW, "BLOW", 0, 0 }, { CMD__N,0,0,0 } }; // /////////////////////////////////////////////////////////////////////////////// /////////////// OptionShort & OptionLong /////////////// /////////////////////////////////////////////////////////////////////////////// static const char OptionShort[] = "VhqvLYW:c:lHBPNM:T:A:td:D:E:orupi"; static const struct option OptionLong[] = { { "version", 0, 0, 'V' }, { "help", 0, 0, 'h' }, { "xhelp", 0, 0, GO_XHELP }, { "config", 1, 0, GO_CONFIG }, { "allow-all", 0, 0, GO_ALLOW_ALL }, { "allowall", 0, 0, GO_ALLOW_ALL }, { "compatible", 1, 0, GO_COMPATIBLE }, { "width", 1, 0, GO_WIDTH }, { "max-width", 1, 0, GO_MAX_WIDTH }, { "maxwidth", 1, 0, GO_MAX_WIDTH }, { "no-pager", 0, 0, GO_NO_PAGER }, { "nopager", 0, 0, GO_NO_PAGER }, { "quiet", 0, 0, 'q' }, { "verbose", 0, 0, 'v' }, { "logging", 0, 0, 'L' }, { "extended-errors", 0, 0, 'Y' }, { "extendederrors", 0, 0, 'Y' }, { "xerr", 0, 0, 'Y' }, { "timing", 0, 0, GO_TIMING }, { "warn", 1, 0, 'W' }, { "de", 0, 0, GO_DE }, { "colors", 2, 0, GO_COLORS }, { "no-colors", 0, 0, GO_NO_COLORS }, { "nocolors", 0, 0, GO_NO_COLORS }, { "ct-code", 0, 0, GO_CT_CODE }, { "ctcode", 0, 0, GO_CT_CODE }, { "le-code", 2, 0, GO_LE_CODE }, { "lecode", 2, 0, GO_LE_CODE }, { "chdir", 1, 0, GO_CHDIR }, { "const", 1, 0, 'c' }, { "scale", 1, 0, GO_SCALE }, { "shift", 1, 0, GO_SHIFT }, { "xss", 1, 0, GO_XSS }, { "yss", 1, 0, GO_YSS }, { "zss", 1, 0, GO_ZSS }, { "rot", 1, 0, GO_ROT }, { "xrot", 1, 0, GO_XROT }, { "yrot", 1, 0, GO_YROT }, { "hrot", 1, 0, GO_YROT }, { "zrot", 1, 0, GO_ZROT }, { "translate", 1, 0, GO_TRANSLATE }, { "null", 0, 0, GO_NULL }, { "next", 0, 0, GO_NEXT }, { "ascale", 1, 0, GO_ASCALE }, { "arot", 1, 0, GO_AROT }, { "tform-script", 1, 0, GO_TFORM_SCRIPT }, { "tformscript", 1, 0, GO_TFORM_SCRIPT }, { "kcl", 1, 0, GO_KCL }, { "kcl-flag", 1, 0, GO_KCL_FLAG }, { "kclflag", 1, 0, GO_KCL_FLAG }, { "kcl-script", 1, 0, GO_KCL_SCRIPT }, { "kclscript", 1, 0, GO_KCL_SCRIPT }, { "tri-area", 1, 0, GO_TRI_AREA }, { "triarea", 1, 0, GO_TRI_AREA }, { "tri-height", 1, 0, GO_TRI_HEIGHT }, { "triheight", 1, 0, GO_TRI_HEIGHT }, { "tri-ht", 1, 0, GO_TRI_HEIGHT }, { "triht", 1, 0, GO_TRI_HEIGHT }, { "kcl-min", 1, 0, GO_TRI_HEIGHT }, { "kclmin", 1, 0, GO_TRI_HEIGHT }, { "flag-file", 1, 0, GO_FLAG_FILE }, { "flagfile", 1, 0, GO_FLAG_FILE }, { "xtridata", 2, 0, GO_XTRIDATA }, { "xtri", 2, 0, GO_XTRIDATA }, { "slot", 1, 0, GO_SLOT }, { "id", 0, 0, GO_ID }, { "base64", 2, 0, GO_BASE64 }, { "db64", 2, 0, GO_DB64 }, { "coding", 1, 0, GO_CODING }, { "round", 0, 0, GO_ROUND }, { "long", 0, 0, 'l' }, { "no-header", 0, 0, 'H' }, { "noheader", 0, 0, 'H' }, { "brief", 0, 0, 'B' }, { "no-wildcards", 0, 0, GO_NO_WILDCARDS }, { "nowildcards", 0, 0, GO_NO_WILDCARDS }, { "in-order", 0, 0, GO_IN_ORDER }, { "inorder", 0, 0, GO_IN_ORDER }, { "no-param", 0, 0, 'P' }, { "noparam", 0, 0, 'P' }, { "no-echo", 0, 0, GO_NO_ECHO }, { "noecho", 0, 0, GO_NO_ECHO }, { "no-check", 0, 0, 'N' }, { "nocheck", 0, 0, 'N' }, { "max-file-size", 1, 0, 'M' }, { "maxfilesize", 1, 0, 'M' }, { "tracks", 1, 0, 'T' }, { "arenas", 1, 0, 'A' }, { "utf-8", 0, 0, GO_UTF_8 }, { "utf8", 0, 0, GO_UTF_8 }, { "no-utf-8", 0, 0, GO_NO_UTF_8 }, { "no-utf8", 0, 0, GO_NO_UTF_8 }, { "noutf8", 0, 0, GO_NO_UTF_8 }, { "test", 0, 0, 't' }, { "force", 0, 0, GO_FORCE }, { "repair-magics", 2, 0, GO_REPAIR_MAGICS }, { "repairmagics", 2, 0, GO_REPAIR_MAGICS }, { "tiny", 1, 0, GO_TINY }, { "OLD", 0, 0, GO_OLD }, { "STD", 0, 0, GO_STD }, { "NEW", 0, 0, GO_NEW }, { "EXTRACT", 0, 0, GO_EXTRACT }, { "dest", 1, 0, 'd' }, { "DEST", 1, 0, 'D' }, { "esc", 1, 0, 'E' }, { "overwrite", 0, 0, 'o' }, { "number", 0, 0, GO_NUMBER }, { "num", 0, 0, GO_NUMBER }, { "remove-dest", 0, 0, 'r' }, { "removedest", 0, 0, 'r' }, { "rm-dest", 0, 0, 'r' }, { "rmdest", 0, 0, 'r' }, { "remove", 0, 0, 'r' }, { "update", 0, 0, 'u' }, { "preserve", 0, 0, 'p' }, { "ignore", 0, 0, 'i' }, { "sections", 0, 0, GO_SECTIONS }, {0,0,0,0} }; // /////////////////////////////////////////////////////////////////////////////// /////////////// OptionUsed & OptionIndex /////////////// /////////////////////////////////////////////////////////////////////////////// static u8 OptionUsed[OPT__N_TOTAL+1] = {0}; static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = { /* 0x000 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x010 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x020 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x030 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x040 */ 0, /* 0x041 A */ OPT_ARENAS, /* 0x042 B */ OPT_BRIEF, /* 0x043 */ 0, /* 0x044 D */ OPT_DEST2, /* 0x045 E */ OPT_ESC, /* 0x046 */ 0,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,0,0, /* 0x054 T */ OPT_TRACKS, /* 0x055 */ 0, /* 0x056 V */ OPT_VERSION, /* 0x057 W */ OPT_WARN, /* 0x058 */ 0, /* 0x059 Y */ OPT_EXT_ERRORS, /* 0x05a */ 0,0,0,0, 0,0,0,0, 0, /* 0x063 c */ OPT_CONST, /* 0x064 d */ OPT_DEST, /* 0x065 */ 0,0,0, /* 0x068 h */ OPT_HELP, /* 0x069 i */ OPT_IGNORE, /* 0x06a */ 0,0, /* 0x06c l */ OPT_LONG, /* 0x06d */ 0,0, /* 0x06f o */ OPT_OVERWRITE, /* 0x070 p */ OPT_PRESERVE, /* 0x071 q */ OPT_QUIET, /* 0x072 r */ OPT_REMOVE_DEST, /* 0x073 */ 0, /* 0x074 t */ OPT_TEST, /* 0x075 u */ OPT_UPDATE, /* 0x076 v */ OPT_VERBOSE, /* 0x077 */ 0,0,0,0, 0,0,0,0, 0, /* 0x080 */ OPT_XHELP, /* 0x081 */ OPT_CONFIG, /* 0x082 */ OPT_ALLOW_ALL, /* 0x083 */ OPT_COMPATIBLE, /* 0x084 */ OPT_WIDTH, /* 0x085 */ OPT_MAX_WIDTH, /* 0x086 */ OPT_NO_PAGER, /* 0x087 */ OPT_TIMING, /* 0x088 */ OPT_DE, /* 0x089 */ OPT_COLORS, /* 0x08a */ OPT_NO_COLORS, /* 0x08b */ OPT_CT_CODE, /* 0x08c */ OPT_LE_CODE, /* 0x08d */ OPT_CHDIR, /* 0x08e */ OPT_SCALE, /* 0x08f */ OPT_SHIFT, /* 0x090 */ OPT_XSS, /* 0x091 */ OPT_YSS, /* 0x092 */ OPT_ZSS, /* 0x093 */ OPT_ROT, /* 0x094 */ OPT_XROT, /* 0x095 */ OPT_YROT, /* 0x096 */ OPT_ZROT, /* 0x097 */ OPT_TRANSLATE, /* 0x098 */ OPT_NULL, /* 0x099 */ OPT_NEXT, /* 0x09a */ OPT_ASCALE, /* 0x09b */ OPT_AROT, /* 0x09c */ OPT_TFORM_SCRIPT, /* 0x09d */ OPT_KCL, /* 0x09e */ OPT_KCL_FLAG, /* 0x09f */ OPT_KCL_SCRIPT, /* 0x0a0 */ OPT_TRI_AREA, /* 0x0a1 */ OPT_TRI_HEIGHT, /* 0x0a2 */ OPT_FLAG_FILE, /* 0x0a3 */ OPT_XTRIDATA, /* 0x0a4 */ OPT_SLOT, /* 0x0a5 */ OPT_ID, /* 0x0a6 */ OPT_BASE64, /* 0x0a7 */ OPT_DB64, /* 0x0a8 */ OPT_CODING, /* 0x0a9 */ OPT_ROUND, /* 0x0aa */ OPT_NO_WILDCARDS, /* 0x0ab */ OPT_IN_ORDER, /* 0x0ac */ OPT_NO_ECHO, /* 0x0ad */ OPT_UTF_8, /* 0x0ae */ OPT_NO_UTF_8, /* 0x0af */ OPT_FORCE, /* 0x0b0 */ OPT_REPAIR_MAGICS, /* 0x0b1 */ OPT_TINY, /* 0x0b2 */ OPT_OLD, /* 0x0b3 */ OPT_STD, /* 0x0b4 */ OPT_NEW, /* 0x0b5 */ OPT_EXTRACT, /* 0x0b6 */ OPT_NUMBER, /* 0x0b7 */ OPT_SECTIONS, /* 0x0b8 */ 0,0,0,0, 0,0,0,0, /* 0x0c0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x0d0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x0e0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x0f0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x100 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x110 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x120 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x130 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x140 */ 0,0,0,0, 0,0,0,0, 0,0, }; // /////////////////////////////////////////////////////////////////////////////// /////////////// opt_allowed_cmd_* /////////////// /////////////////////////////////////////////////////////////////////////////// static u8 option_allowed_cmd_VERSION[43] = // 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, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1 }; static u8 option_allowed_cmd_HELP[43] = // 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 }; static u8 option_allowed_cmd_CONFIG[43] = // cmd #3 { 0,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 }; static u8 option_allowed_cmd_ARGTEST[43] = // 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 }; static u8 option_allowed_cmd_EXPAND[43] = // cmd #5 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,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[43] = // cmd #6 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,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[43] = // 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, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_ERROR[43] = // 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, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1 }; static u8 option_allowed_cmd_FILETYPE[43] = // 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, 1,0,0,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_FILEATTRIB[43] = // 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,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_SYMBOLS[43] = // 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,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_FUNCTIONS[43] = // 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, 1,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_CALCULATE[43] = // cmd #13 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_MATRIX[43] = // cmd #14 { 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_FLOAT[43] = // 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,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_EXPORT[43] = // 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 }; static u8 option_allowed_cmd_CAT[43] = // cmd #17 { 0,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,1,1, 0,1,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_DECODE[43] = // cmd #18 { 0,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,1,1, 0,1,1,1,1, 1,1,1,1,1, 1,1,0 }; static u8 option_allowed_cmd_ENCODE[43] = // cmd #19 { 0,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,1,1, 0,1,1,1,1, 1,1,1,1,1, 1,1,0 }; static u8 option_allowed_cmd_COPY[43] = // cmd #20 { 0,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,1,1, 0,1,1,1,1, 1,1,1,1,1, 1,1,0 }; static u8 option_allowed_cmd_CFF[43] = // cmd #21 { 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, 1,0,1,1,1, 0,1,1,1,1, 1,1,1,1,1, 1,1,0 }; static u8 option_allowed_cmd_TYPES[43] = // 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,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0 }; static u8 option_allowed_cmd_FLAGS[43] = // cmd #23 { 0,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,1,1,1,1, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_DUMP[43] = // cmd #24 { 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,1,1, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_DBRIEF[43] = // cmd #25 { 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,1,1, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_LIST[43] = // cmd #26 { 0,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,1,1, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_TRIANGLES[43] = // cmd #27 { 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,1,1, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_TRAVERSE[43] = // cmd #28 { 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_FALL[43] = // cmd #29 { 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 1,0,1,0,0, 0,0,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_CHECK[43] = // 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, 1,0,1,1,1, 0,1,1,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_SHA1[43] = // cmd #31 { 0,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,1, 0,0,0,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_ANALYZE[43] = // cmd #32 { 0,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,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,1,0 }; static u8 option_allowed_cmd_BLOW[43] = // 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,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,1,0 }; // /////////////////////////////////////////////////////////////////////////////// /////////////// InfoOption tabs /////////////// /////////////////////////////////////////////////////////////////////////////// static const InfoOption_t * option_tab_tool[] = { OptionInfo + OPT_VERSION, OptionInfo + OPT_HELP, OptionInfo + OPT_XHELP, OptionInfo + OPT_CONFIG, OptionInfo + OPT_ALLOW_ALL, OptionInfo + OPT_COMPATIBLE, OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, OptionInfo + OPT_NO_PAGER, OptionInfo + OPT_QUIET, OptionInfo + OPT_VERBOSE, OptionInfo + OPT_LOGGING, OptionInfo + OPT_EXT_ERRORS, OptionInfo + OPT_TIMING, OptionInfo + OPT_WARN, 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_KCL, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_MAX_FILE_SIZE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_TEST, OptionInfo + OPT_FORCE, OptionInfo + OPT_REPAIR_MAGICS, OptionInfo + OPT_TINY, 0 }; static const InfoOption_t * option_tab_cmd_VERSION[] = { &option_cmd_VERSION_BRIEF, OptionInfo + OPT_SECTIONS, &option_cmd_VERSION_LONG, 0 }; static const InfoOption_t * option_tab_cmd_HELP[] = { OptionInfo + OPT_WIDTH, OptionInfo + OPT_MAX_WIDTH, 0 }; static const InfoOption_t * option_tab_cmd_CONFIG[] = { OptionInfo + OPT_CONFIG, &option_cmd_CONFIG_BRIEF, &option_cmd_CONFIG_LONG, 0 }; static const InfoOption_t * option_tab_cmd_ARGTEST[] = { 0 }; static const InfoOption_t * option_tab_cmd_EXPAND[] = { 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[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, &option_cmd_FILETYPE_LONG, 0 }; static const InfoOption_t * option_tab_cmd_FILEATTRIB[] = { OptionInfo + OPT_NO_HEADER, 0 }; static const InfoOption_t * option_tab_cmd_SYMBOLS[] = { OptionInfo + OPT_NO_HEADER, 0 }; static const InfoOption_t * option_tab_cmd_FUNCTIONS[] = { OptionInfo + OPT_NO_HEADER, &option_cmd_FUNCTIONS_BRIEF, &option_cmd_FUNCTIONS_LONG, 0 }; static const InfoOption_t * option_tab_cmd_CALCULATE[] = { OptionInfo + OPT_CONST, 0 }; static const InfoOption_t * option_tab_cmd_MATRIX[] = { OptionInfo + OPT_CONST, OptionInfo + OPT_SCALE, OptionInfo + OPT_SHIFT, OptionInfo + OPT_XSS, OptionInfo + OPT_YSS, OptionInfo + OPT_ZSS, OptionInfo + OPT_ROT, OptionInfo + OPT_XROT, OptionInfo + OPT_YROT, OptionInfo + OPT_ZROT, OptionInfo + OPT_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 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_EXPORT[] = { 0 }; static const InfoOption_t * option_tab_cmd_CAT[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_NO_ECHO, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_DECODE[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_DEST, OptionInfo + OPT_DEST2, OptionInfo + OPT_ESC, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_OVERWRITE, OptionInfo + OPT_NUMBER, OptionInfo + OPT_REMOVE_DEST, OptionInfo + OPT_UPDATE, OptionInfo + OPT_PRESERVE, OptionInfo + OPT_NO_ECHO, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_ENCODE[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_DEST, OptionInfo + OPT_DEST2, OptionInfo + OPT_ESC, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_OVERWRITE, OptionInfo + OPT_NUMBER, OptionInfo + OPT_REMOVE_DEST, OptionInfo + OPT_UPDATE, OptionInfo + OPT_PRESERVE, OptionInfo + OPT_NO_ECHO, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_COPY[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_DEST, OptionInfo + OPT_DEST2, OptionInfo + OPT_ESC, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_OVERWRITE, OptionInfo + OPT_NUMBER, OptionInfo + OPT_REMOVE_DEST, OptionInfo + OPT_UPDATE, OptionInfo + OPT_PRESERVE, OptionInfo + OPT_NO_ECHO, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_CFF[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator &option_cmd_CFF_LONG, &option_cmd_CFF_BRIEF, OptionInfo + OPT_DEST, OptionInfo + OPT_DEST2, OptionInfo + OPT_ESC, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_OVERWRITE, OptionInfo + OPT_NUMBER, OptionInfo + OPT_REMOVE_DEST, OptionInfo + OPT_UPDATE, OptionInfo + OPT_PRESERVE, OptionInfo + OPT_NO_ECHO, OptionInfo + OPT_NO_CHECK, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_CONST, OptionInfo + OPT_FLAG_FILE, 0 }; static const InfoOption_t * option_tab_cmd_TYPES[] = { OptionInfo + OPT_NO_HEADER, &option_cmd_TYPES_BRIEF, 0 }; static const InfoOption_t * option_tab_cmd_FLAGS[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_NO_HEADER, OptionInfo + OPT_NO_CHECK, &option_cmd_FLAGS_BRIEF, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_DUMP[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_NO_CHECK, &option_cmd_DUMP_BRIEF, &option_cmd_DUMP_LONG, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_DBRIEF[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_NO_CHECK, &option_cmd_DUMP_BRIEF, &option_cmd_DUMP_LONG, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_LIST[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_TRIANGLES[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_NO_CHECK, &option_cmd_TRIANGLES_BRIEF, &option_cmd_TRIANGLES_LONG, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_TRAVERSE[] = { OptionInfo + OPT_IGNORE, OptionInfo + OPT_NO_CHECK, &option_cmd_TRAVERSE_BRIEF, &option_cmd_TRAVERSE_LONG, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_FALL[] = { OptionInfo + OPT_IGNORE, OptionInfo + OPT_NO_CHECK, &option_cmd_FALL_BRIEF, &option_cmd_FALL_LONG, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_CHECK[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_COLORS, OptionInfo + OPT_NO_COLORS, &option_cmd_CHECK_BRIEF, &option_cmd_CHECK_LONG, &option_cmd_CHECK_QUIET, OptionInfo + OPT_NO_ECHO, OptionInfo + OPT_NO_CHECK, 0 }; static const InfoOption_t * option_tab_cmd_SHA1[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_ID, OptionInfo + OPT_BASE64, OptionInfo + OPT_DB64, OptionInfo + OPT_CODING, &option_cmd_SHA1_BRIEF, 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_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_ANALYZE[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, OptionInfo + OPT_NONE, // separator OptionInfo + OPT_CONST, OptionInfo + OPT_SCALE, OptionInfo + OPT_SHIFT, OptionInfo + OPT_XSS, OptionInfo + OPT_YSS, OptionInfo + OPT_ZSS, OptionInfo + OPT_ROT, OptionInfo + OPT_XROT, OptionInfo + OPT_YROT, OptionInfo + OPT_ZROT, OptionInfo + OPT_TRANSLATE, OptionInfo + OPT_NULL, OptionInfo + OPT_NEXT, OptionInfo + OPT_ASCALE, OptionInfo + OPT_AROT, OptionInfo + OPT_TFORM_SCRIPT, OptionInfo + OPT_KCL, OptionInfo + OPT_KCL_FLAG, OptionInfo + OPT_KCL_SCRIPT, OptionInfo + OPT_TRI_AREA, OptionInfo + OPT_TRI_HEIGHT, OptionInfo + OPT_FLAG_FILE, OptionInfo + OPT_SLOT, 0 }; static const InfoOption_t * option_tab_cmd_BLOW[] = { OptionInfo + OPT_NO_WILDCARDS, OptionInfo + OPT_IN_ORDER, OptionInfo + OPT_IGNORE, 0 }; // /////////////////////////////////////////////////////////////////////////////// /////////////// InfoCommand /////////////// /////////////////////////////////////////////////////////////////////////////// static const InfoCommand_t CommandInfo[CMD__N+1] = { { 0, false, false, false, "wkclt", 0, "wkclt [option]... command [option|parameter|file]...", "Wiimms KCL Tool : Analyze, modify, export and create KCL and OBJ" " files.", 0, 30, option_tab_tool, 0 }, { CMD_VERSION, false, false, false, "VERSION", "V", "wkclt 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", "wkclt HELP [--width=wd] OPT|OPTION ...\n" "wkclt HELP [--width=wd] CMD|COMMAND [ignored]...\n" "wkclt HELP [--width=wd] command [-b] [ignored]...\n" "wkclt HELP [--width=wd] [ignored]...", "Print help for commands and options.", "Print help for commands and options.\n" " The first variant (with keyword OPT or OPTION) prints a list of all" " global and command specific options. If at least one option is set," " only info about the declared options are printed. The second variant" " (with keyword CMD or COMMAND) prints an overview about all commands." " The third variant (with a valid command name) prints details about" " the declared command. The fourth variant prints an overview about" " all commands and all global options.", 2, option_tab_cmd_HELP, option_allowed_cmd_HELP }, { CMD_CONFIG, false, false, false, "CONFIG", 0, "wkclt CONFIG [options]...", "Show all information about the search for the configuration file and" " its content.", 0, 3, option_tab_cmd_CONFIG, option_allowed_cmd_CONFIG }, { CMD_ARGTEST, false, false, false, "ARGTEST", 0, "wkclt ARGTEST ...", "This debug command accepts all kinds of parameters and prints one" " line for each parameter. All tools know the ARGTEST command.", 0, 0, option_tab_cmd_ARGTEST, option_allowed_cmd_ARGTEST }, { CMD_EXPAND, false, false, false, "EXPAND", 0, "wkclt EXPAND ...", "This debug command accepts (like ARGTEST) all kinds of parameters and" " prints one line for each parameter. After that, the parameter is" " treated as a filename with wildcards and all matching files are" " searched. All tools know the EXPAND command.", 0, 0, option_tab_cmd_EXPAND, option_allowed_cmd_EXPAND }, { CMD_TEST, false, false, false, "TEST", 0, "wkclt 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, "wkclt 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", "wkclt ERROR [error_code]", "Translate an exit code to a message name. If no exit code is entered," " print a table with all error messages. All tools know the ERROR" " command.", 0, 4, option_tab_cmd_ERROR, option_allowed_cmd_ERROR }, { CMD_FILETYPE, false, false, false, "FILETYPE", "FT", "wkclt FILETYPE file...", "Scan the header of the entered files and print file type and path for" " each file as list. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. All tools know the" " FILETYPE command.", 0, 4, option_tab_cmd_FILETYPE, option_allowed_cmd_FILETYPE }, { CMD_FILEATTRIB, false, false, false, "FILEATTRIB", "FA", "wkclt 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'). All tools know the" " FILEATTRIB command.", 0, 1, option_tab_cmd_FILEATTRIB, option_allowed_cmd_FILEATTRIB }, { CMD_SYMBOLS, false, false, false, "SYMBOLS", 0, "wkclt SYMBOLS", "Print predefined symbols of text parser to standard output. The KCL" " specific symbols are included.", 0, 1, option_tab_cmd_SYMBOLS, option_allowed_cmd_SYMBOLS }, { CMD_FUNCTIONS, false, false, false, "FUNCTIONS", 0, "wkclt FUNCTIONS [key]...", "Print a list with all parser functions including the KCL specific" " functions. If one key ore more key entered, then only functions that" " match at least one key are printed.", 0, 3, option_tab_cmd_FUNCTIONS, option_allowed_cmd_FUNCTIONS }, { CMD_CALCULATE, false, false, false, "CALCULATE", 0, "wkclt CALCULATE expression...", "Calculate each expression and print the result to standard output." " Many tools know the CALCULATE command.", 0, 1, option_tab_cmd_CALCULATE, option_allowed_cmd_CALCULATE }, { CMD_MATRIX, false, false, false, "MATRIX", 0, "wkclt 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.", 26, option_tab_cmd_MATRIX, option_allowed_cmd_MATRIX }, { CMD_FLOAT, false, false, false, "FLOAT", 0, "wkclt FLOAT number...", "This commands helps to convert hex values into floating point numbers" " and vice versa. For each non empty parameter, a line with 4 bytes" " hex and a float, 8 bytes hex and a double float, and the parameter" " itself is printed. If a parameter begins with 'x' or '0x', it is a" " hex string, otherwise it is a floating point number.\n" " The special parameters \"+\" and \"-\" mean: Increment or decrement" " the previous value by the smallest possible value. Use different" " increments for floats and doubles.\n" " All conversions are done using big endian.", 0, 1, option_tab_cmd_FLOAT, option_allowed_cmd_FLOAT }, { CMD_EXPORT, true, false, false, "_EXPORT", 0, "wkclt _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_CAT, false, false, true, "CAT", 0, "wkclt CAT source...", "Read the entered KCL and OBJ files and print them as OBJ files to" " standard output. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. The output of all" " source files is concatenated.\n" " Automated dropping of bad KCL triangles is enabled if no other drop" " option is specified by option --kcl.", 0, 28, option_tab_cmd_CAT, option_allowed_cmd_CAT }, { CMD_DECODE, false, false, false, "DECODE", "DEC", "wkclt DECODE source...", "Read the entered KCL and OBJ files and export them to OBJ files." " Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. The default" " destination is '%P/%N.txt'.\n" " Automated dropping of bad KCL triangles is enabled if no other drop" " option is specified by option --kcl.", 0, 36, option_tab_cmd_DECODE, option_allowed_cmd_DECODE }, { CMD_ENCODE, false, false, false, "ENCODE", "ENC", "wkclt ENCODE source...", "Read the entered KCL and OBJ files and encode (compile) them to" " binary KCL files. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. The default" " destination is '%P/%N.kcl'.\n" " See https://szs.wiimm.de/doc/kcl for encoding details.", 0, 36, option_tab_cmd_ENCODE, option_allowed_cmd_ENCODE }, { CMD_COPY, false, false, false, "COPY", "CP", "wkclt COPY source dest\n" "wkclt COPY source... [-d|-D] dest", "Copy and convert a collision file from 'source' to 'dest'. Multiple" " KCL and OBJ sources can be used, if 'dest' is a directory or" " contains at least one %-pattern. Wildcards and pipe characters are" " parsed, see https://szs.wiimm.de/doc/wildcards for details.\n" " This is an alternative for the DECODE and ENCODE commands. The" " default destination file format is selected by scanning the file" " extension of the destination. Is it '.kcl', a binary KCL file is" " created. Is it '.txt' or '.obj', an OBJ file is created. Otherwise" " the output format is the same as the source.\n" " Automated dropping of bad KCL triangles is enabled if no other drop" " option is specified and the destination is an OBJ file.", 0, 36, option_tab_cmd_COPY, option_allowed_cmd_COPY }, { CMD_CFF, false, false, false, "CFF", 0, "wkclt CFF source...", "CFF is an abbreviation of 'create flag file' and will create a flag" " file template for each entered source file. Wildcards and pipe" " characters are parsed, see https://szs.wiimm.de/doc/wildcards for" " details. If the flag file already exists, only missing group names" " are added at the end of file.", 0, 17, option_tab_cmd_CFF, option_allowed_cmd_CFF }, { CMD_TYPES, true, false, false, "TYPES", 0, "wkclt TYPES arg...", "Print a line with KCL flag details for each argument. ARG is a comma" " or space separated list of a optional BASEVAL and a list of TERMS." " BASEVAL can be any hexa-decimal number. The format of TERMS is" " X[=]VALUE. So a TERM begin with letter T (Type), V (Value) or a" " group identifier (W, X,Y or Z), followed by an optional equal sign" " and finished by a decimal number. It overrides the related part of" " BASEVAL.", 0, 2, option_tab_cmd_TYPES, option_allowed_cmd_TYPES }, { CMD_FLAGS, false, false, false, "FLAGS", "F", "wkclt FLAGS source...", "Print a KCL type and flag usage statistic for each source to standard" " output. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, 29, option_tab_cmd_FLAGS, option_allowed_cmd_FLAGS }, { CMD_DUMP, false, false, false, "DUMP", "D", "wkclt DUMP source...", "This debugging command prints an information dump about the internal" " triangle data base and the octree in human and machine readable text" " format. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. The output of all" " source files is concatenated and printed to standard output.", 0, 29, option_tab_cmd_DUMP, option_allowed_cmd_DUMP }, { CMD_DBRIEF, false, false, false, "DBRIEF", "DB", "wkclt DBRIEF source...", "Command DBRIEF is a short cut for 'DUMP --brief'. The output of the" " triangle list is suppressed and only the header data and statistics" " are printed.", 0, 29, option_tab_cmd_DBRIEF, option_allowed_cmd_DBRIEF }, { CMD_LIST, false, false, false, "LIST", 0, "wkclt LIST source...", "This debugging command prints a list of all triangles with metrics in" " human and machine readable text format. It is like DUMP, but reduced" " to the list of triangles. Wildcards and pipe characters are parsed," " see https://szs.wiimm.de/doc/wildcards for details. The output of" " all source files is concatenated and printed to standard output.", 0, 27, option_tab_cmd_LIST, option_allowed_cmd_LIST }, { CMD_TRIANGLES, false, false, false, "TRIANGLES", 0, "wkclt TRIANGLES source...", "This debugging commands prints one data line for each triangle. The" " goal is to compare data. Therefor and to create smaller lines the" " precision of the floating points numbers is reduced. Wildcards and" " pipe characters are parsed, see https://szs.wiimm.de/doc/wildcards" " for details.\n" " The print order is: flag used length | 3 points | 4 normals. For" " each point and normal 3 coordinates are printed.", 0, 29, option_tab_cmd_TRIANGLES, option_allowed_cmd_TRIANGLES }, { CMD_TRAVERSE, false, false, false, "TRAVERSE", 0, "wkclt TRAVERSE source point...", "For each point, the octree of the source file is traversed to find" " and print the related triangles. A point is either a comma separated" " list with 3 parser expressions (one for each coordinate) or a vector" " expression.", 0, 27, option_tab_cmd_TRAVERSE, option_allowed_cmd_TRAVERSE }, { CMD_FALL, false, false, false, "FALL", 0, "wkclt FALL source point...", "For each entered point, the lowest point is searched, that can be" " reached without collision. The point is expanded to a cube with edge" " length of 100.0 for the collision tests.", 0, 27, option_tab_cmd_FALL, option_allowed_cmd_FALL }, { CMD_CHECK, false, false, false, "CHECK", "CHK", "wkclt CHECK source...", "Read the entered KCL files (text or binary) and and make a" " plausibility check. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. Hints and warnings" " are written to standard output. The exit status is 'DIFFER' if at" " least one KMP warning found.", 0, 10, option_tab_cmd_CHECK, option_allowed_cmd_CHECK }, { CMD_SHA1, false, false, false, "SHA1", 0, "wszst SHA1 [source]...", "Print a SHA1 checksum of the KCL for each source. Wildcards and pipe" " characters are parsed, see https://szs.wiimm.de/doc/wildcards for" " details. The checksum is calculated after patching.", 0, 31, option_tab_cmd_SHA1, option_allowed_cmd_SHA1 }, { CMD_ANALYZE, true, false, false, "ANALYZE", 0, "wkclt ANALYZE source...", "Analyze some KCL data. Wildcards and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details.", 0, 26, option_tab_cmd_ANALYZE, option_allowed_cmd_ANALYZE }, { CMD_BLOW, false, false, false, "BLOW", 0, "wkclt BLOW source...", "Try to calculate the used blow size (KCL_BLOW) of a KCL. Wildcards" " and pipe characters are parsed, see" " https://szs.wiimm.de/doc/wildcards for details. Print one line for" " each source file.", 0, 3, option_tab_cmd_BLOW, option_allowed_cmd_BLOW }, {0,0,0,0,0,0,0,0,0,0,0,0} }; // /////////////////////////////////////////////////////////////////////////////// /////////////// InfoUI /////////////// /////////////////////////////////////////////////////////////////////////////// const InfoUI_t InfoUI_wkclt = { "wkclt", CMD__N, CommandTab, CommandInfo, OPT__N_SPECIFIC, OPT__N_TOTAL, OptionInfo, OptionUsed, OptionIndex, OptionShort, OptionLong }; // /////////////////////////////////////////////////////////////////////////////// /////////////// END /////////////// ///////////////////////////////////////////////////////////////////////////////