/*   -*- buffer-read-only: t -*- vi: set ro:
 *
 *  DO NOT EDIT THIS FILE   (shar-opts.c)
 *
 *  It has been AutoGen-ed
 *  From the definitions    shar-opts.def
 *  and the template file   options
 *
 * Generated from AutoOpts 41:1:16 templates.
 *
 *  AutoOpts is a copyrighted work.  This source file is not encumbered
 *  by AutoOpts licensing, but is provided under the licensing terms chosen
 *  by the shar author or copyright holder.  AutoOpts is
 *  licensed under the terms of the LGPL.  The redistributable library
 *  (``libopts'') is licensed under the terms of either the LGPL or, at the
 *  users discretion, the BSD license.  See the AutoOpts and/or libopts sources
 *  for details.
 *
 * The shar program is copyrighted and licensed
 * under the following terms:
 *
 *  Copyright (C) 1994-2015 Free Software Foundation, Inc., all rights reserved.
 *  This is free software. It is licensed for use, modification and
 *  redistribution under the terms of the GNU General Public License,
 *  version 3 or later <http://gnu.org/licenses/gpl.html>
 *
 *  shar 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 3 of the License, or
 *  (at your option) any later version.
 *
 *  shar 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.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __doxygen__
#define OPTION_CODE_COMPILE 1
#include "shar-opts.h"
#include <sys/types.h>

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#ifdef  __cplusplus
extern "C" {
#endif
extern FILE * option_usage_fp;
#define zCopyright      (shar_opt_strs+0)
#define zLicenseDescrip (shar_opt_strs+290)

/*
 *  global included definitions
 */
char const * const program_name = "shar";

bool initialization_done = false;
int optidx = 0;

#ifndef NULL
#  define NULL 0
#endif

/**
 *  static const strings for shar options
 */
static char const shar_opt_strs[10327] =
/*     0 */ "shar (GNU sharutils) 4.15.2\n"
            "Copyright (C) 1994-2015 Free Software Foundation, Inc., all rights reserved.\n"
            "This is free software. It is licensed for use, modification and\n"
            "redistribution under the terms of the GNU General Public License,\n"
            "version 3 or later <http://gnu.org/licenses/gpl.html>\n\0"
/*   290 */ "shar is free software: you can redistribute it and/or modify it under the\n"
            "terms of the GNU General Public License as published by the Free Software\n"
            "Foundation, either version 3 of the License, or (at your option) any later\n"
            "version.\n\n"
            "shar is distributed in the hope that it will be useful, but WITHOUT ANY\n"
            "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n"
            "FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\n"
            "details.\n\n"
            "You should have received a copy of the GNU General Public License along\n"
            "with this program.  If not, see <http://www.gnu.org/licenses/>.\n\0"
/*   887 */ "Specifying compression:\0"
/*   911 */ "specify compression for input files\0"
/*   947 */ "INTERMIX_TYPE\0"
/*   961 */ "intermix-type\0"
/*   975 */ "specify compaction (compression) program\0"
/*  1016 */ "COMPACTOR\0"
/*  1026 */ "compactor\0"
/*  1036 */ "pass LEVEL for compression\0"
/*  1063 */ "LEVEL_OF_COMPRESSION\0"
/*  1084 */ "level-of-compression\0"
/*  1105 */ "bzip2 and uuencode files (deprecated)\0"
/*  1143 */ "BZIP2\0"
/*  1149 */ "bzip2\0"
/*  1155 */ "gzip and uuencode files (deprecated)\0"
/*  1192 */ "GZIP\0"
/*  1197 */ "gzip\0"
/*  1202 */ "compress and uuencode files (deprecated)\0"
/*  1243 */ "COMPRESS\0"
/*  1252 */ "compress\0"
/*  1261 */ "an alias for the 'level-of-compression' option (deprecated)\0"
/*  1321 */ "level-for-gzip\0"
/*  1336 */ "pass bits (default 12) to compress (deprecated)\0"
/*  1384 */ "BITS_PER_CODE\0"
/*  1398 */ "bits-per-code\0"
/*  1412 */ "12\0"
/*  1415 */ "Specifying file encoding methodology:\0"
/*  1453 */ "decide uuencoding for each file\0"
/*  1485 */ "MIXED_UUENCODE\0"
/*  1500 */ "mixed-uuencode\0"
/*  1515 */ "treat all files as binary\0"
/*  1541 */ "UUENCODE\0"
/*  1550 */ "uuencode\0"
/*  1559 */ "treat all files as text\0"
/*  1583 */ "TEXT_FILES\0"
/*  1594 */ "text-files\0"
/*  1605 */ "Specifying file selection and output modes:\0"
/*  1649 */ "print output to file PREFIX.nn\0"
/*  1680 */ "OUTPUT_PREFIX\0"
/*  1694 */ "output-prefix\0"
/*  1708 */ "split archive, not files, to size\0"
/*  1742 */ "WHOLE_SIZE_LIMIT\0"
/*  1759 */ "whole-size-limit\0"
/*  1776 */ "split archive or files to size\0"
/*  1807 */ "SPLIT_SIZE_LIMIT\0"
/*  1824 */ "split-size-limit\0"
/*  1841 */ "read file list from a file\0"
/*  1868 */ "INPUT_FILE_LIST\0"
/*  1884 */ "input-file-list\0"
/*  1900 */ "read file list from standard input (deprecated)\0"
/*  1948 */ "STDIN_FILE_LIST\0"
/*  1964 */ "stdin-file-list\0"
/*  1980 */ "Controlling the shar headers:\0"
/*  2010 */ "use name to document the archive\0"
/*  2043 */ "ARCHIVE_NAME\0"
/*  2056 */ "archive-name\0"
/*  2069 */ "override the submitter name\0"
/*  2097 */ "SUBMITTER\0"
/*  2107 */ "submitter\0"
/*  2117 */ "output Submitted-by: & Archive-name: headers\0"
/*  2162 */ "NET_HEADERS\0"
/*  2174 */ "net-headers\0"
/*  2186 */ "start the shar with a cut line\0"
/*  2217 */ "CUT_MARK\0"
/*  2226 */ "cut-mark\0"
/*  2235 */ "translate messages in the script\0"
/*  2268 */ "TRANSLATE\0"
/*  2278 */ "translate\0"
/*  2288 */ "Protecting against transmission issues:\0"
/*  2328 */ "do not use `wc -c' to check size\0"
/*  2361 */ "NO_CHARACTER_COUNT\0"
/*  2380 */ "no-character-count\0"
/*  2399 */ "do not use md5sum digest to verify\0"
/*  2434 */ "NO_MD5_DIGEST\0"
/*  2448 */ "no-md5-digest\0"
/*  2462 */ "apply the prefix character on every line\0"
/*  2503 */ "FORCE_PREFIX\0"
/*  2516 */ "force-prefix\0"
/*  2529 */ "use delim to delimit the files\0"
/*  2560 */ "HERE_DELIMITER\0"
/*  2575 */ "here-delimiter\0"
/*  2590 */ "SHAR_EOF\0"
/*  2599 */ "Producing different kinds of shars:\0"
/*  2635 */ "produce very simple shars\0"
/*  2661 */ "VANILLA_OPERATION\0"
/*  2679 */ "vanilla-operation\0"
/*  2697 */ "use temporary files between programs\0"
/*  2734 */ "NO_PIPING\0"
/*  2744 */ "no-piping\0"
/*  2754 */ "blindly overwrite existing files\0"
/*  2787 */ "NO_CHECK_EXISTING\0"
/*  2805 */ "no-check-existing\0"
/*  2823 */ "ask user before overwriting files\0"
/*  2857 */ "QUERY_USER\0"
/*  2868 */ "query-user\0"
/*  2879 */ "do not restore modification times\0"
/*  2913 */ "NO_TIMESTAMP\0"
/*  2926 */ "no-timestamp\0"
/*  2939 */ "avoid verbose messages at unshar time\0"
/*  2977 */ "QUIET_UNSHAR\0"
/*  2990 */ "quiet-unshar\0"
/*  3003 */ "restore in one directory, despite hierarchy\0"
/*  3047 */ "BASENAME\0"
/*  3056 */ "basename\0"
/*  3065 */ "Internationalization options:\0"
/*  3095 */ "do not internationalize\0"
/*  3119 */ "NO_I18N\0"
/*  3127 */ "no-i18n\0"
/*  3135 */ "print directory with shar messages\0"
/*  3170 */ "PRINT_TEXT_DOMAIN_DIR\0"
/*  3192 */ "print-text-domain-dir\0"
/*  3214 */ "User feedback/entertainment:\0"
/*  3243 */ "do not output verbose messages\0"
/*  3274 */ "QUIET\0"
/*  3280 */ "quiet\0"
/*  3286 */ "an alias for the 'quiet' option\0"
/*  3318 */ "silent\0"
/*  3325 */ "display extended usage information and exit\0"
/*  3369 */ "help\0"
/*  3374 */ "extended usage information passed thru pager\0"
/*  3419 */ "more-help\0"
/*  3429 */ "output version information and exit\0"
/*  3465 */ "version\0"
/*  3473 */ "save the option state to a config file\0"
/*  3512 */ "save-opts\0"
/*  3522 */ "load options from a config file\0"
/*  3554 */ "LOAD_OPTS\0"
/*  3564 */ "no-load-opts\0"
/*  3577 */ "no\0"
/*  3580 */ "SHAR\0"
/*  3585 */ "shar (GNU sharutils) - create a shell archive\n"
            "Usage:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]\n\0"
/*  3701 */ "$HOME\0"
/*  3707 */ ".sharrc\0"
/*  3715 */ "bug-gnu-utils@gnu.org\0"
/*  3737 */ "If no 'file's are specified, the list of input files is read from standard\n"
            "input.  Standard input must not be a terminal.\n\0"
/*  3860 */ "'shar' creates \"shell archives\" (or shar files) which are in text format\n"
            "and can be emailed.  These files may be unpacked later by executing them\n"
            "with '/bin/sh'.  The resulting archive is sent to standard out unless the\n"
            "'-o' option is given.  A wide range of features provide extensive\n"
            "flexibility in manufacturing shars and in specifying 'shar' \"smartness\".\n"
            "Archives may be fairly simple ('--vanilla-operation') or essentially a\n"
            "mailable 'tar' archive.\n\n"
            "Options may be specified in any order until a 'file' argument is\n"
            "recognized.  If the '--intermix-type' option has been specified, more\n"
            "compression and encoding options will be recognized between the 'file'\n"
            "arguments.\n\n"
            "Though this program supports 'uuencode'-d files, they are deprecated.  If\n"
            "you are emailing files, please consider mime-encoded files.  If you do\n"
            "'uuencode', base64 is the preferred encoding method.\n\0"
/*  4732 */ "shar (GNU sharutils) 4.15.2\0"
/*  4760 */ "shar (GNU sharutils) - create a shell archive\n"
            "Usage:  shar [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]\n\n"
            "Specify compression:\n"
            "   -p, --intermix-type        specify compression for input files\n"
            "                                - prohibits the option 'vanilla-operation'\n"
            "   -C, --compactor=PROG       specify compaction (compression) program PROG\n"
            "                                - prohibits the option 'vanilla-operation'\n"
            "                                - may appear multiple times\n"
            "                                - it must be known to shar: xz gzip bzip2\n"
            "   -g, --level-of-compression=LEVEL\n"
            "                              pass LEVEL for compression\n"
            "                                - it must be in the range: 1 to 9\n\n"
            "Specify file encoding methodology:\n"
            "   -M, --mixed-uuencode       decide uuencoding for each file\n"
            "   -B, --uuencode             treat all files as binary\n"
            "                                - an alternate for mixed-uuencode\n"
            "   -T, --text-files           treat all files as text\n"
            "                                - an alternate for mixed-uuencode\n\n"
            "Specifying file selection and output modes:\n"
            "   -o, --output-prefix=str    print output to file PREFIX.nn\n"
            "   -l, --whole-size-limit=SIZE\n"
            "                              split archive, not files, to SIZE\n"
            "                                - requires the option 'output-prefix'\n"
            "                                - is scalable with a suffix: k/K/m/M/g/G/t/T\n"
            "                                - it must lie in one of the ranges:\n"
            "                                  8 to 1023, or 8192 to 4194304\n"
            "   -L, --split-size-limit=SIZE\n"
            "                              split archive or files to SIZE\n"
            "                                - requires the option 'output-prefix'\n"
            "                                - is scalable with a suffix: k/K/m/M/g/G/t/T\n"
            "                                - it must lie in one of the ranges:\n"
            "                                  8 to 1023, or 8192 to 4194304\n"
            "                                - an alternate for 'whole-size-limit'\n"
            "   -I, --input-file-list=FILE read file list from FILE\n\n"
            "Controlling the shar headers:\n"
            "   -n, --archive-name=NAME    use NAME to document the archive\n"
            "   -s, --submitter=NAME       override the submitter name with NAME\n"
            "   -a, --net-headers          output Submitted-by: & Archive-name: headers\n"
            "                                - requires the option 'archive-name'\n"
            "   -c, --cut-mark             start the shar with a cut line\n"
            "   -t, --translate            translate messages in the script\n\n"
            "Protecting against transmission issues:\n"
            "       --no-character-count   do not use `wc -c' to check size\n"
            "   -D, --no-md5-digest        do not use md5sum digest to verify\n"
            "   -F, --force-prefix         apply the prefix character on every line\n"
            "   -d, --here-delimiter=DELIM use DELIM to delimit the files\n\n"
            "Producing different kinds of shars:\n"
            "   -V, --vanilla-operation    produce very simple shars\n"
            "   -P, --no-piping            use temporary files between programs\n"
            "   -x, --no-check-existing    blindly overwrite existing files\n"
            "   -X, --query-user           ask user before overwriting files\n"
            "                                - prohibits the option 'vanilla-operation'\n"
            "   -m, --no-timestamp         do not restore modification times\n"
            "   -Q, --quiet-unshar         avoid verbose messages at unshar time\n"
            "   -f, --basename             restore in one directory, despite hierarchy\n\n"
            "Internationalization options:\n"
            "       --no-i18n              do not internationalize\n"
            "       --print-text-domain-dir  print directory with shar messages\n\n"
            "User feedback/entertainment:\n"
            "   -q, --quiet                do not output verbose messages\n"
            "       --silent               an alias for the 'quiet' option\n\n"
            "Version, usage and configuration options:\n"
            "   -v, --version[=MODE]       output version information and exit\n"
            "   -h, --help                 display extended usage information and exit\n"
            "   -!, --more-help            extended usage information passed thru pager\n"
            "   -R, --save-opts[=FILE]     save the option state to a config file FILE\n"
            "   -r, --load-opts=FILE       load options from the config file FILE\n"
            "                                - disabled with '--no-load-opts'\n"
            "                                - may appear multiple times\n\n"
            "Options are specified by doubled hyphens and their name or by a single\n"
            "hyphen and the flag character.\n"
            "If no 'file's are specified, the list of input files is read from a\n"
            "standard input.  Standard input must not be a terminal.\n\n"
            "The following option preset mechanisms are supported:\n"
            " - reading file $HOME/.sharrc\n\n"
            "'shar' creates \"shell archives\" (or shar files) which are in text format\n"
            "and can be emailed.  These files may be unpacked later by executing them\n"
            "with '/bin/sh'.  The resulting archive is sent to standard out unless the\n"
            "'-o' option is given.  A wide range of features provide extensive\n"
            "flexibility in manufacturing shars and in specifying 'shar' \"smartness\".\n"
            "Archives may be fairly simple ('--vanilla-operation') or essentially a\n"
            "mailable 'tar' archive.\n\n"
            "Options may be specified in any order until a 'file' argument is\n"
            "recognized.  If the '--intermix-type' option has been specified, more\n"
            "compression and encoding options will be recognized between the 'file'\n"
            "arguments.\n\n"
            "Though this program supports 'uuencode'-d files, they are deprecated.  If\n"
            "you are emailing files, please consider mime-encoded files.  If you do\n"
            "'uuencode', base64 is the preferred encoding method.\n\n"
            "Please send bug reports to:  <bug-gnu-utils@gnu.org>\n\0"
/* 10169 */ "shar (GNU sharutils) - create a shell archive\n"
            "Usage:  shar [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]\n"
            "Try 'shar --help' for more information.\n";

/**
 *  compression option description:
 */
/** compression option separation text */
#define COMPRESSION_DESC      (shar_opt_strs+887)
#define COMPRESSION_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  intermix-type option description with
 *  "Must also have options" and "Incompatible options":
 */
/** Descriptive text for the intermix-type option */
#define INTERMIX_TYPE_DESC      (shar_opt_strs+911)
/** Upper-cased name for the intermix-type option */
#define INTERMIX_TYPE_NAME      (shar_opt_strs+947)
/** Name string for the intermix-type option */
#define INTERMIX_TYPE_name      (shar_opt_strs+961)
/** Other options that appear in conjunction with the intermix-type option */
static int const aIntermix_TypeCantList[] = {
    INDEX_OPT_VANILLA_OPERATION, NO_EQUIVALENT };
/** Compiled in flag settings for the intermix-type option */
#define INTERMIX_TYPE_FLAGS     (OPTST_DISABLED)

/**
 *  compactor option description with
 *  "Must also have options" and "Incompatible options":
 */
/** Descriptive text for the compactor option */
#define COMPACTOR_DESC      (shar_opt_strs+975)
/** Upper-cased name for the compactor option */
#define COMPACTOR_NAME      (shar_opt_strs+1016)
/** Name string for the compactor option */
#define COMPACTOR_name      (shar_opt_strs+1026)
/** Other options that appear in conjunction with the compactor option */
static int const aCompactorCantList[] = {
    INDEX_OPT_VANILLA_OPERATION, NO_EQUIVALENT };
/** Compiled in flag settings for the compactor option */
#define COMPACTOR_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

/**
 *  level-of-compression option description:
 */
/** Descriptive text for the level-of-compression option */
#define LEVEL_OF_COMPRESSION_DESC      (shar_opt_strs+1036)
/** Upper-cased name for the level-of-compression option */
#define LEVEL_OF_COMPRESSION_NAME      (shar_opt_strs+1063)
/** Name string for the level-of-compression option */
#define LEVEL_OF_COMPRESSION_name      (shar_opt_strs+1084)
/** The compiled in default value for the level-of-compression option argument */
#define LEVEL_OF_COMPRESSION_DFT_ARG   ((char const*)9)
/** Compiled in flag settings for the level-of-compression option */
#define LEVEL_OF_COMPRESSION_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))

/**
 *  bzip2 option description:
 */
/** Descriptive text for the bzip2 option */
#define BZIP2_DESC      (shar_opt_strs+1105)
/** Upper-cased name for the bzip2 option */
#define BZIP2_NAME      (shar_opt_strs+1143)
/** Name string for the bzip2 option */
#define BZIP2_name      (shar_opt_strs+1149)
/** Compiled in flag settings for the bzip2 option */
#define BZIP2_FLAGS     (OPTST_DISABLED | OPTST_DEPRECATED)

/**
 *  gzip option description:
 */
/** Descriptive text for the gzip option */
#define GZIP_DESC      (shar_opt_strs+1155)
/** Upper-cased name for the gzip option */
#define GZIP_NAME      (shar_opt_strs+1192)
/** Name string for the gzip option */
#define GZIP_name      (shar_opt_strs+1197)
/** Compiled in flag settings for the gzip option */
#define GZIP_FLAGS     (OPTST_DISABLED | OPTST_DEPRECATED)

/**
 *  compress option description:
 */
#ifdef HAVE_COMPRESS
/** Descriptive text for the compress option */
#define COMPRESS_DESC      (shar_opt_strs+1202)
/** Upper-cased name for the compress option */
#define COMPRESS_NAME      (shar_opt_strs+1243)
/** Name string for the compress option */
#define COMPRESS_name      (shar_opt_strs+1252)
/** Compiled in flag settings for the compress option */
#define COMPRESS_FLAGS     (OPTST_DISABLED | OPTST_DEPRECATED)

#else   /* disable compress */
#define COMPRESS_FLAGS     (OPTST_OMITTED | OPTST_NO_INIT)
#define COMPRESS_NAME      NULL
#define COMPRESS_DESC      NULL
#define COMPRESS_name      NULL
#endif  /* HAVE_COMPRESS */

/**
 *  level-for-gzip option description:
 */
/** Descriptive text for the level-for-gzip option */
#define LEVEL_FOR_GZIP_DESC    (shar_opt_strs+1261)
#define LEVEL_FOR_GZIP_NAME    NULL
/** Unmodified name string for the level-for-gzip option */
#define LEVEL_FOR_GZIP_name    (shar_opt_strs+1321)
/** Compiled in flag settings for the level-for-gzip option */
#define LEVEL_FOR_GZIP_FLAGS     (LEVEL_OF_COMPRESSION_FLAGS | OPTST_ALIAS | OPTST_DEPRECATED)

/**
 *  bits-per-code option description:
 */
#ifdef HAVE_COMPRESS
/** Descriptive text for the bits-per-code option */
#define BITS_PER_CODE_DESC      (shar_opt_strs+1336)
/** Upper-cased name for the bits-per-code option */
#define BITS_PER_CODE_NAME      (shar_opt_strs+1384)
/** Name string for the bits-per-code option */
#define BITS_PER_CODE_name      (shar_opt_strs+1398)
/** The compiled in default value for the bits-per-code option argument */
#define BITS_PER_CODE_DFT_ARG   (shar_opt_strs+1412)
/** Compiled in flag settings for the bits-per-code option */
#define BITS_PER_CODE_FLAGS     (OPTST_DISABLED | OPTST_DEPRECATED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

#else   /* disable bits-per-code */
#define BITS_PER_CODE_FLAGS     (OPTST_OMITTED | OPTST_NO_INIT)
#define BITS_PER_CODE_DFT_ARG   NULL
#define BITS_PER_CODE_NAME      NULL
#define BITS_PER_CODE_DESC      NULL
#define BITS_PER_CODE_name      NULL
#endif  /* HAVE_COMPRESS */

/**
 *  encoding option description:
 */
/** encoding option separation text */
#define ENCODING_DESC      (shar_opt_strs+1415)
#define ENCODING_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  mixed-uuencode option description:
 */
/** Descriptive text for the mixed-uuencode option */
#define MIXED_UUENCODE_DESC      (shar_opt_strs+1453)
/** Upper-cased name for the mixed-uuencode option */
#define MIXED_UUENCODE_NAME      (shar_opt_strs+1485)
/** Name string for the mixed-uuencode option */
#define MIXED_UUENCODE_name      (shar_opt_strs+1500)
/** Compiled in flag settings for the mixed-uuencode option */
#define MIXED_UUENCODE_FLAGS     (OPTST_DISABLED)

/**
 *  uuencode option description:
 */
/** Descriptive text for the uuencode option */
#define UUENCODE_DESC      (shar_opt_strs+1515)
/** Upper-cased name for the uuencode option */
#define UUENCODE_NAME      (shar_opt_strs+1541)
/** Name string for the uuencode option */
#define UUENCODE_name      (shar_opt_strs+1550)
/** Compiled in flag settings for the uuencode option */
#define UUENCODE_FLAGS     (OPTST_DISABLED)

/**
 *  text-files option description:
 */
/** Descriptive text for the text-files option */
#define TEXT_FILES_DESC      (shar_opt_strs+1559)
/** Upper-cased name for the text-files option */
#define TEXT_FILES_NAME      (shar_opt_strs+1583)
/** Name string for the text-files option */
#define TEXT_FILES_name      (shar_opt_strs+1594)
/** Compiled in flag settings for the text-files option */
#define TEXT_FILES_FLAGS     (OPTST_DISABLED)

/**
 *  in-out option description:
 */
/** in-out option separation text */
#define IN_OUT_DESC      (shar_opt_strs+1605)
#define IN_OUT_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  output-prefix option description:
 */
/** Descriptive text for the output-prefix option */
#define OUTPUT_PREFIX_DESC      (shar_opt_strs+1649)
/** Upper-cased name for the output-prefix option */
#define OUTPUT_PREFIX_NAME      (shar_opt_strs+1680)
/** Name string for the output-prefix option */
#define OUTPUT_PREFIX_name      (shar_opt_strs+1694)
/** Compiled in flag settings for the output-prefix option */
#define OUTPUT_PREFIX_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

/**
 *  whole-size-limit option description with
 *  "Must also have options" and "Incompatible options":
 */
/** Descriptive text for the whole-size-limit option */
#define WHOLE_SIZE_LIMIT_DESC      (shar_opt_strs+1708)
/** Upper-cased name for the whole-size-limit option */
#define WHOLE_SIZE_LIMIT_NAME      (shar_opt_strs+1742)
/** Name string for the whole-size-limit option */
#define WHOLE_SIZE_LIMIT_name      (shar_opt_strs+1759)
/** Other options that are required by the whole-size-limit option */
static int const aWhole_Size_LimitMustList[] = {
    INDEX_OPT_OUTPUT_PREFIX, NO_EQUIVALENT };
/** Compiled in flag settings for the whole-size-limit option */
#define WHOLE_SIZE_LIMIT_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC) \
        | OPTST_SCALED_NUM)

/**
 *  split-size-limit option description with
 *  "Must also have options" and "Incompatible options":
 */
/** Descriptive text for the split-size-limit option */
#define SPLIT_SIZE_LIMIT_DESC      (shar_opt_strs+1776)
/** Upper-cased name for the split-size-limit option */
#define SPLIT_SIZE_LIMIT_NAME      (shar_opt_strs+1807)
/** Name string for the split-size-limit option */
#define SPLIT_SIZE_LIMIT_name      (shar_opt_strs+1824)
/** Other options that are required by the split-size-limit option */
static int const aSplit_Size_LimitMustList[] = {
    INDEX_OPT_OUTPUT_PREFIX, NO_EQUIVALENT };
/** Compiled in flag settings for the split-size-limit option */
#define SPLIT_SIZE_LIMIT_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC) \
        | OPTST_SCALED_NUM)

/**
 *  input-file-list option description:
 */
/** Descriptive text for the input-file-list option */
#define INPUT_FILE_LIST_DESC      (shar_opt_strs+1841)
/** Upper-cased name for the input-file-list option */
#define INPUT_FILE_LIST_NAME      (shar_opt_strs+1868)
/** Name string for the input-file-list option */
#define INPUT_FILE_LIST_name      (shar_opt_strs+1884)
/** Compiled in flag settings for the input-file-list option */
#define INPUT_FILE_LIST_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

/**
 *  stdin-file-list option description:
 */
/** Descriptive text for the stdin-file-list option */
#define STDIN_FILE_LIST_DESC      (shar_opt_strs+1900)
/** Upper-cased name for the stdin-file-list option */
#define STDIN_FILE_LIST_NAME      (shar_opt_strs+1948)
/** Name string for the stdin-file-list option */
#define STDIN_FILE_LIST_name      (shar_opt_strs+1964)
/** Compiled in flag settings for the stdin-file-list option */
#define STDIN_FILE_LIST_FLAGS     (OPTST_DISABLED | OPTST_DEPRECATED)

/**
 *  headers option description:
 */
/** headers option separation text */
#define HEADERS_DESC      (shar_opt_strs+1980)
#define HEADERS_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  archive-name option description:
 */
/** Descriptive text for the archive-name option */
#define ARCHIVE_NAME_DESC      (shar_opt_strs+2010)
/** Upper-cased name for the archive-name option */
#define ARCHIVE_NAME_NAME      (shar_opt_strs+2043)
/** Name string for the archive-name option */
#define ARCHIVE_NAME_name      (shar_opt_strs+2056)
/** Compiled in flag settings for the archive-name option */
#define ARCHIVE_NAME_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

/**
 *  submitter option description:
 */
/** Descriptive text for the submitter option */
#define SUBMITTER_DESC      (shar_opt_strs+2069)
/** Upper-cased name for the submitter option */
#define SUBMITTER_NAME      (shar_opt_strs+2097)
/** Name string for the submitter option */
#define SUBMITTER_name      (shar_opt_strs+2107)
/** Compiled in flag settings for the submitter option */
#define SUBMITTER_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

/**
 *  net-headers option description with
 *  "Must also have options" and "Incompatible options":
 */
/** Descriptive text for the net-headers option */
#define NET_HEADERS_DESC      (shar_opt_strs+2117)
/** Upper-cased name for the net-headers option */
#define NET_HEADERS_NAME      (shar_opt_strs+2162)
/** Name string for the net-headers option */
#define NET_HEADERS_name      (shar_opt_strs+2174)
/** Other options that are required by the net-headers option */
static int const aNet_HeadersMustList[] = {
    INDEX_OPT_ARCHIVE_NAME, NO_EQUIVALENT };
/** Compiled in flag settings for the net-headers option */
#define NET_HEADERS_FLAGS     (OPTST_DISABLED)

/**
 *  cut-mark option description:
 */
/** Descriptive text for the cut-mark option */
#define CUT_MARK_DESC      (shar_opt_strs+2186)
/** Upper-cased name for the cut-mark option */
#define CUT_MARK_NAME      (shar_opt_strs+2217)
/** Name string for the cut-mark option */
#define CUT_MARK_name      (shar_opt_strs+2226)
/** Compiled in flag settings for the cut-mark option */
#define CUT_MARK_FLAGS     (OPTST_DISABLED)

/**
 *  translate option description:
 */
/** Descriptive text for the translate option */
#define TRANSLATE_DESC      (shar_opt_strs+2235)
/** Upper-cased name for the translate option */
#define TRANSLATE_NAME      (shar_opt_strs+2268)
/** Name string for the translate option */
#define TRANSLATE_name      (shar_opt_strs+2278)
/** Compiled in flag settings for the translate option */
#define TRANSLATE_FLAGS     (OPTST_DISABLED)

/**
 *  xmit-defenses option description:
 */
/** xmit-defenses option separation text */
#define XMIT_DEFENSES_DESC      (shar_opt_strs+2288)
#define XMIT_DEFENSES_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  no-character-count option description:
 */
/** Descriptive text for the no-character-count option */
#define NO_CHARACTER_COUNT_DESC      (shar_opt_strs+2328)
/** Upper-cased name for the no-character-count option */
#define NO_CHARACTER_COUNT_NAME      (shar_opt_strs+2361)
/** Name string for the no-character-count option */
#define NO_CHARACTER_COUNT_name      (shar_opt_strs+2380)
/** Compiled in flag settings for the no-character-count option */
#define NO_CHARACTER_COUNT_FLAGS     (OPTST_DISABLED)

/**
 *  no-md5-digest option description:
 */
/** Descriptive text for the no-md5-digest option */
#define NO_MD5_DIGEST_DESC      (shar_opt_strs+2399)
/** Upper-cased name for the no-md5-digest option */
#define NO_MD5_DIGEST_NAME      (shar_opt_strs+2434)
/** Name string for the no-md5-digest option */
#define NO_MD5_DIGEST_name      (shar_opt_strs+2448)
/** Compiled in flag settings for the no-md5-digest option */
#define NO_MD5_DIGEST_FLAGS     (OPTST_DISABLED)

/**
 *  force-prefix option description:
 */
/** Descriptive text for the force-prefix option */
#define FORCE_PREFIX_DESC      (shar_opt_strs+2462)
/** Upper-cased name for the force-prefix option */
#define FORCE_PREFIX_NAME      (shar_opt_strs+2503)
/** Name string for the force-prefix option */
#define FORCE_PREFIX_name      (shar_opt_strs+2516)
/** Compiled in flag settings for the force-prefix option */
#define FORCE_PREFIX_FLAGS     (OPTST_DISABLED)

/**
 *  here-delimiter option description:
 */
/** Descriptive text for the here-delimiter option */
#define HERE_DELIMITER_DESC      (shar_opt_strs+2529)
/** Upper-cased name for the here-delimiter option */
#define HERE_DELIMITER_NAME      (shar_opt_strs+2560)
/** Name string for the here-delimiter option */
#define HERE_DELIMITER_name      (shar_opt_strs+2575)
/** The compiled in default value for the here-delimiter option argument */
#define HERE_DELIMITER_DFT_ARG   (shar_opt_strs+2590)
/** Compiled in flag settings for the here-delimiter option */
#define HERE_DELIMITER_FLAGS     (OPTST_DISABLED \
        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))

/**
 *  shar-flavors option description:
 */
/** shar-flavors option separation text */
#define SHAR_FLAVORS_DESC      (shar_opt_strs+2599)
#define SHAR_FLAVORS_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  vanilla-operation option description:
 */
/** Descriptive text for the vanilla-operation option */
#define VANILLA_OPERATION_DESC      (shar_opt_strs+2635)
/** Upper-cased name for the vanilla-operation option */
#define VANILLA_OPERATION_NAME      (shar_opt_strs+2661)
/** Name string for the vanilla-operation option */
#define VANILLA_OPERATION_name      (shar_opt_strs+2679)
/** Compiled in flag settings for the vanilla-operation option */
#define VANILLA_OPERATION_FLAGS     (OPTST_DISABLED)

/**
 *  no-piping option description:
 */
/** Descriptive text for the no-piping option */
#define NO_PIPING_DESC      (shar_opt_strs+2697)
/** Upper-cased name for the no-piping option */
#define NO_PIPING_NAME      (shar_opt_strs+2734)
/** Name string for the no-piping option */
#define NO_PIPING_name      (shar_opt_strs+2744)
/** Compiled in flag settings for the no-piping option */
#define NO_PIPING_FLAGS     (OPTST_DISABLED)

/**
 *  no-check-existing option description:
 */
/** Descriptive text for the no-check-existing option */
#define NO_CHECK_EXISTING_DESC      (shar_opt_strs+2754)
/** Upper-cased name for the no-check-existing option */
#define NO_CHECK_EXISTING_NAME      (shar_opt_strs+2787)
/** Name string for the no-check-existing option */
#define NO_CHECK_EXISTING_name      (shar_opt_strs+2805)
/** Compiled in flag settings for the no-check-existing option */
#define NO_CHECK_EXISTING_FLAGS     (OPTST_DISABLED)

/**
 *  query-user option description with
 *  "Must also have options" and "Incompatible options":
 */
/** Descriptive text for the query-user option */
#define QUERY_USER_DESC      (shar_opt_strs+2823)
/** Upper-cased name for the query-user option */
#define QUERY_USER_NAME      (shar_opt_strs+2857)
/** Name string for the query-user option */
#define QUERY_USER_name      (shar_opt_strs+2868)
/** Other options that appear in conjunction with the query-user option */
static int const aQuery_UserCantList[] = {
    INDEX_OPT_VANILLA_OPERATION, NO_EQUIVALENT };
/** Compiled in flag settings for the query-user option */
#define QUERY_USER_FLAGS     (OPTST_DISABLED)

/**
 *  no-timestamp option description:
 */
/** Descriptive text for the no-timestamp option */
#define NO_TIMESTAMP_DESC      (shar_opt_strs+2879)
/** Upper-cased name for the no-timestamp option */
#define NO_TIMESTAMP_NAME      (shar_opt_strs+2913)
/** Name string for the no-timestamp option */
#define NO_TIMESTAMP_name      (shar_opt_strs+2926)
/** Compiled in flag settings for the no-timestamp option */
#define NO_TIMESTAMP_FLAGS     (OPTST_DISABLED)

/**
 *  quiet-unshar option description:
 */
/** Descriptive text for the quiet-unshar option */
#define QUIET_UNSHAR_DESC      (shar_opt_strs+2939)
/** Upper-cased name for the quiet-unshar option */
#define QUIET_UNSHAR_NAME      (shar_opt_strs+2977)
/** Name string for the quiet-unshar option */
#define QUIET_UNSHAR_name      (shar_opt_strs+2990)
/** Compiled in flag settings for the quiet-unshar option */
#define QUIET_UNSHAR_FLAGS     (OPTST_DISABLED)

/**
 *  basename option description:
 */
/** Descriptive text for the basename option */
#define BASENAME_DESC      (shar_opt_strs+3003)
/** Upper-cased name for the basename option */
#define BASENAME_NAME      (shar_opt_strs+3047)
/** Name string for the basename option */
#define BASENAME_name      (shar_opt_strs+3056)
/** Compiled in flag settings for the basename option */
#define BASENAME_FLAGS     (OPTST_DISABLED)

/**
 *  internationalization option description:
 */
/** internationalization option separation text */
#define INTERNATIONALIZATION_DESC      (shar_opt_strs+3065)
#define INTERNATIONALIZATION_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  no-i18n option description:
 */
/** Descriptive text for the no-i18n option */
#define NO_I18N_DESC      (shar_opt_strs+3095)
/** Upper-cased name for the no-i18n option */
#define NO_I18N_NAME      (shar_opt_strs+3119)
/** Name string for the no-i18n option */
#define NO_I18N_name      (shar_opt_strs+3127)
/** Compiled in flag settings for the no-i18n option */
#define NO_I18N_FLAGS     (OPTST_DISABLED)

/**
 *  print-text-domain-dir option description:
 */
/** Descriptive text for the print-text-domain-dir option */
#define PRINT_TEXT_DOMAIN_DIR_DESC      (shar_opt_strs+3135)
/** Upper-cased name for the print-text-domain-dir option */
#define PRINT_TEXT_DOMAIN_DIR_NAME      (shar_opt_strs+3170)
/** Name string for the print-text-domain-dir option */
#define PRINT_TEXT_DOMAIN_DIR_name      (shar_opt_strs+3192)
/** Compiled in flag settings for the print-text-domain-dir option */
#define PRINT_TEXT_DOMAIN_DIR_FLAGS     (OPTST_DISABLED)

/**
 *  feedback option description:
 */
/** feedback option separation text */
#define FEEDBACK_DESC      (shar_opt_strs+3214)
#define FEEDBACK_FLAGS     (OPTST_DOCUMENT | OPTST_NO_INIT)

/**
 *  quiet option description:
 */
/** Descriptive text for the quiet option */
#define QUIET_DESC      (shar_opt_strs+3243)
/** Upper-cased name for the quiet option */
#define QUIET_NAME      (shar_opt_strs+3274)
/** Name string for the quiet option */
#define QUIET_name      (shar_opt_strs+3280)
/** Compiled in flag settings for the quiet option */
#define QUIET_FLAGS     (OPTST_DISABLED)

/**
 *  silent option description:
 */
/** Descriptive text for the silent option */
#define SILENT_DESC    (shar_opt_strs+3286)
#define SILENT_NAME    NULL
/** Unmodified name string for the silent option */
#define SILENT_name    (shar_opt_strs+3318)
/** Compiled in flag settings for the silent option */
#define SILENT_FLAGS     (QUIET_FLAGS | OPTST_ALIAS)

/*
 *  Help/More_Help/Version option descriptions:
 */
#define HELP_DESC       (shar_opt_strs+3325)
#define HELP_name       (shar_opt_strs+3369)
#ifdef HAVE_WORKING_FORK
#define MORE_HELP_DESC  (shar_opt_strs+3374)
#define MORE_HELP_name  (shar_opt_strs+3419)
#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
#else
#define MORE_HELP_DESC  HELP_DESC
#define MORE_HELP_name  HELP_name
#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
#endif
#ifdef NO_OPTIONAL_OPT_ARGS
#  define VER_FLAGS     (OPTST_IMM | OPTST_NO_INIT)
#else
#  define VER_FLAGS     (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
                         OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
#endif
#define VER_DESC        (shar_opt_strs+3429)
#define VER_name        (shar_opt_strs+3465)
#define SAVE_OPTS_DESC  (shar_opt_strs+3473)
#define SAVE_OPTS_name  (shar_opt_strs+3512)
#define LOAD_OPTS_DESC     (shar_opt_strs+3522)
#define LOAD_OPTS_NAME     (shar_opt_strs+3554)
#define NO_LOAD_OPTS_name  (shar_opt_strs+3564)
#define LOAD_OPTS_pfx      (shar_opt_strs+3577)
#define LOAD_OPTS_name     (NO_LOAD_OPTS_name + 3)
/**
 *  Declare option callback procedures
 */
#ifdef HAVE_COMPRESS
  static tOptProc doOptCompress;
#else /* not HAVE_COMPRESS */
# define doOptCompress NULL
#endif /* def/not HAVE_COMPRESS */
#ifdef HAVE_COMPRESS
  static tOptProc doOptBits_Per_Code;
#else /* not HAVE_COMPRESS */
# define doOptBits_Per_Code NULL
#endif /* def/not HAVE_COMPRESS */
extern tOptProc
    check_intermixing,    optionBooleanVal,     optionNestedVal,
    optionNumericVal,     optionPagedUsage,     optionPrintVersion,
    optionResetOpt,       optionStackArg,       optionTimeDate,
    optionTimeVal,        optionUnstackArg,     optionVendorOption,
    set_compaction,       validate_opt_context;
static tOptProc
    doOptBzip2,                 doOptGzip,
    doOptInput_File_List,       doOptLevel_For_Gzip,
    doOptLevel_Of_Compression,  doOptPrint_Text_Domain_Dir,
    doOptSilent,                doOptSplit_Size_Limit,
    doOptStdin_File_List,       doOptVanilla_Operation,
    doOptWhole_Size_Limit,      doUsageOpt;
#define VER_PROC        optionPrintVersion

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 *  Define the shar Option Descriptions.
 * This is an array of OPTION_CT entries, one for each
 * option that the shar program responds to.
 */
static tOptDesc optDesc[OPTION_CT] = {
  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ COMPRESSION_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ COMPRESSION_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 1, VALUE_OPT_INTERMIX_TYPE,
     /* equiv idx, value */ 1, VALUE_OPT_INTERMIX_TYPE,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ INTERMIX_TYPE_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --intermix-type */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, aIntermix_TypeCantList,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ INTERMIX_TYPE_DESC, INTERMIX_TYPE_NAME, INTERMIX_TYPE_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 2, VALUE_OPT_COMPACTOR,
     /* equiv idx, value */ 2, VALUE_OPT_COMPACTOR,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, NOLIMIT, 0,
     /* opt state flags  */ COMPACTOR_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --compactor */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, aCompactorCantList,
     /* option proc      */ set_compaction,
     /* desc, NAME, name */ COMPACTOR_DESC, COMPACTOR_NAME, COMPACTOR_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 3, VALUE_OPT_LEVEL_OF_COMPRESSION,
     /* equiv idx, value */ 3, VALUE_OPT_LEVEL_OF_COMPRESSION,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ LEVEL_OF_COMPRESSION_FLAGS, 0,
     /* last opt argumnt */ { LEVEL_OF_COMPRESSION_DFT_ARG },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptLevel_Of_Compression,
     /* desc, NAME, name */ LEVEL_OF_COMPRESSION_DESC, LEVEL_OF_COMPRESSION_NAME, LEVEL_OF_COMPRESSION_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 4, VALUE_OPT_BZIP2,
     /* equiv idx, value */ 4, VALUE_OPT_BZIP2,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, NOLIMIT, 0,
     /* opt state flags  */ BZIP2_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --bzip2 */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptBzip2,
     /* desc, NAME, name */ BZIP2_DESC, BZIP2_NAME, BZIP2_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 5, VALUE_OPT_GZIP,
     /* equiv idx, value */ 5, VALUE_OPT_GZIP,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, NOLIMIT, 0,
     /* opt state flags  */ GZIP_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --gzip */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptGzip,
     /* desc, NAME, name */ GZIP_DESC, GZIP_NAME, GZIP_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 6, VALUE_OPT_COMPRESS,
     /* equiv idx, value */ 6, VALUE_OPT_COMPRESS,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, NOLIMIT, 0,
     /* opt state flags  */ COMPRESS_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --compress */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptCompress,
     /* desc, NAME, name */ COMPRESS_DESC, COMPRESS_NAME, COMPRESS_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 7, VALUE_OPT_LEVEL_FOR_GZIP,
     /* equiv idx, value */ 7, VALUE_OPT_LEVEL_FOR_GZIP,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ LEVEL_FOR_GZIP_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --level-for-gzip */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptLevel_For_Gzip,
     /* desc, NAME, name */ LEVEL_FOR_GZIP_DESC, LEVEL_FOR_GZIP_NAME, LEVEL_FOR_GZIP_name,
     /* disablement strs */ 0, 0 },

  {  /* entry idx, value */ 8, VALUE_OPT_BITS_PER_CODE,
     /* equiv idx, value */ 8, VALUE_OPT_BITS_PER_CODE,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ BITS_PER_CODE_FLAGS, 0,
     /* last opt argumnt */ { BITS_PER_CODE_DFT_ARG },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptBits_Per_Code,
     /* desc, NAME, name */ BITS_PER_CODE_DESC, BITS_PER_CODE_NAME, BITS_PER_CODE_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ ENCODING_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ ENCODING_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 10, VALUE_OPT_MIXED_UUENCODE,
     /* equiv idx, value */ NO_EQUIVALENT, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ MIXED_UUENCODE_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --mixed-uuencode */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ check_intermixing,
     /* desc, NAME, name */ MIXED_UUENCODE_DESC, MIXED_UUENCODE_NAME, MIXED_UUENCODE_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 11, VALUE_OPT_UUENCODE,
     /* equiv idx, value */ NOLIMIT, NOLIMIT,
     /* equivalenced to  */ INDEX_OPT_MIXED_UUENCODE,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ UUENCODE_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --uuencode */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ check_intermixing,
     /* desc, NAME, name */ UUENCODE_DESC, UUENCODE_NAME, UUENCODE_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 12, VALUE_OPT_TEXT_FILES,
     /* equiv idx, value */ NOLIMIT, NOLIMIT,
     /* equivalenced to  */ INDEX_OPT_MIXED_UUENCODE,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ TEXT_FILES_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --text-files */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ check_intermixing,
     /* desc, NAME, name */ TEXT_FILES_DESC, TEXT_FILES_NAME, TEXT_FILES_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ IN_OUT_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ IN_OUT_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 14, VALUE_OPT_OUTPUT_PREFIX,
     /* equiv idx, value */ 14, VALUE_OPT_OUTPUT_PREFIX,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ OUTPUT_PREFIX_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --output-prefix */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ OUTPUT_PREFIX_DESC, OUTPUT_PREFIX_NAME, OUTPUT_PREFIX_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 15, VALUE_OPT_WHOLE_SIZE_LIMIT,
     /* equiv idx, value */ NO_EQUIVALENT, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ WHOLE_SIZE_LIMIT_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --whole-size-limit */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ aWhole_Size_LimitMustList, NULL,
     /* option proc      */ doOptWhole_Size_Limit,
     /* desc, NAME, name */ WHOLE_SIZE_LIMIT_DESC, WHOLE_SIZE_LIMIT_NAME, WHOLE_SIZE_LIMIT_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 16, VALUE_OPT_SPLIT_SIZE_LIMIT,
     /* equiv idx, value */ NOLIMIT, NOLIMIT,
     /* equivalenced to  */ INDEX_OPT_WHOLE_SIZE_LIMIT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ SPLIT_SIZE_LIMIT_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --split-size-limit */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ aSplit_Size_LimitMustList, NULL,
     /* option proc      */ doOptSplit_Size_Limit,
     /* desc, NAME, name */ SPLIT_SIZE_LIMIT_DESC, SPLIT_SIZE_LIMIT_NAME, SPLIT_SIZE_LIMIT_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 17, VALUE_OPT_INPUT_FILE_LIST,
     /* equiv idx, value */ 17, VALUE_OPT_INPUT_FILE_LIST,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ INPUT_FILE_LIST_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --input-file-list */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptInput_File_List,
     /* desc, NAME, name */ INPUT_FILE_LIST_DESC, INPUT_FILE_LIST_NAME, INPUT_FILE_LIST_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 18, VALUE_OPT_STDIN_FILE_LIST,
     /* equiv idx, value */ 18, VALUE_OPT_STDIN_FILE_LIST,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ STDIN_FILE_LIST_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --stdin-file-list */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptStdin_File_List,
     /* desc, NAME, name */ STDIN_FILE_LIST_DESC, STDIN_FILE_LIST_NAME, STDIN_FILE_LIST_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ HEADERS_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ HEADERS_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 20, VALUE_OPT_ARCHIVE_NAME,
     /* equiv idx, value */ 20, VALUE_OPT_ARCHIVE_NAME,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ ARCHIVE_NAME_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --archive-name */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ ARCHIVE_NAME_DESC, ARCHIVE_NAME_NAME, ARCHIVE_NAME_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 21, VALUE_OPT_SUBMITTER,
     /* equiv idx, value */ 21, VALUE_OPT_SUBMITTER,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ SUBMITTER_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --submitter */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ SUBMITTER_DESC, SUBMITTER_NAME, SUBMITTER_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 22, VALUE_OPT_NET_HEADERS,
     /* equiv idx, value */ 22, VALUE_OPT_NET_HEADERS,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NET_HEADERS_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --net-headers */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ aNet_HeadersMustList, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NET_HEADERS_DESC, NET_HEADERS_NAME, NET_HEADERS_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 23, VALUE_OPT_CUT_MARK,
     /* equiv idx, value */ 23, VALUE_OPT_CUT_MARK,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ CUT_MARK_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --cut-mark */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ CUT_MARK_DESC, CUT_MARK_NAME, CUT_MARK_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 24, VALUE_OPT_TRANSLATE,
     /* equiv idx, value */ 24, VALUE_OPT_TRANSLATE,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ TRANSLATE_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --translate */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ TRANSLATE_DESC, TRANSLATE_NAME, TRANSLATE_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ XMIT_DEFENSES_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ XMIT_DEFENSES_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 26, VALUE_OPT_NO_CHARACTER_COUNT,
     /* equiv idx, value */ 26, VALUE_OPT_NO_CHARACTER_COUNT,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NO_CHARACTER_COUNT_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --no-character-count */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NO_CHARACTER_COUNT_DESC, NO_CHARACTER_COUNT_NAME, NO_CHARACTER_COUNT_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 27, VALUE_OPT_NO_MD5_DIGEST,
     /* equiv idx, value */ 27, VALUE_OPT_NO_MD5_DIGEST,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NO_MD5_DIGEST_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --no-md5-digest */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NO_MD5_DIGEST_DESC, NO_MD5_DIGEST_NAME, NO_MD5_DIGEST_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 28, VALUE_OPT_FORCE_PREFIX,
     /* equiv idx, value */ 28, VALUE_OPT_FORCE_PREFIX,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ FORCE_PREFIX_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --force-prefix */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ FORCE_PREFIX_DESC, FORCE_PREFIX_NAME, FORCE_PREFIX_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 29, VALUE_OPT_HERE_DELIMITER,
     /* equiv idx, value */ 29, VALUE_OPT_HERE_DELIMITER,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ HERE_DELIMITER_FLAGS, 0,
     /* last opt argumnt */ { HERE_DELIMITER_DFT_ARG },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ HERE_DELIMITER_DESC, HERE_DELIMITER_NAME, HERE_DELIMITER_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ SHAR_FLAVORS_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ SHAR_FLAVORS_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 31, VALUE_OPT_VANILLA_OPERATION,
     /* equiv idx, value */ 31, VALUE_OPT_VANILLA_OPERATION,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ VANILLA_OPERATION_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --vanilla-operation */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptVanilla_Operation,
     /* desc, NAME, name */ VANILLA_OPERATION_DESC, VANILLA_OPERATION_NAME, VANILLA_OPERATION_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 32, VALUE_OPT_NO_PIPING,
     /* equiv idx, value */ 32, VALUE_OPT_NO_PIPING,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NO_PIPING_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --no-piping */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NO_PIPING_DESC, NO_PIPING_NAME, NO_PIPING_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 33, VALUE_OPT_NO_CHECK_EXISTING,
     /* equiv idx, value */ 33, VALUE_OPT_NO_CHECK_EXISTING,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NO_CHECK_EXISTING_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --no-check-existing */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NO_CHECK_EXISTING_DESC, NO_CHECK_EXISTING_NAME, NO_CHECK_EXISTING_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 34, VALUE_OPT_QUERY_USER,
     /* equiv idx, value */ 34, VALUE_OPT_QUERY_USER,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ QUERY_USER_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --query-user */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, aQuery_UserCantList,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ QUERY_USER_DESC, QUERY_USER_NAME, QUERY_USER_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 35, VALUE_OPT_NO_TIMESTAMP,
     /* equiv idx, value */ 35, VALUE_OPT_NO_TIMESTAMP,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NO_TIMESTAMP_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --no-timestamp */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NO_TIMESTAMP_DESC, NO_TIMESTAMP_NAME, NO_TIMESTAMP_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 36, VALUE_OPT_QUIET_UNSHAR,
     /* equiv idx, value */ 36, VALUE_OPT_QUIET_UNSHAR,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ QUIET_UNSHAR_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --quiet-unshar */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ QUIET_UNSHAR_DESC, QUIET_UNSHAR_NAME, QUIET_UNSHAR_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 37, VALUE_OPT_BASENAME,
     /* equiv idx, value */ 37, VALUE_OPT_BASENAME,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ BASENAME_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --basename */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ BASENAME_DESC, BASENAME_NAME, BASENAME_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ INTERNATIONALIZATION_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ INTERNATIONALIZATION_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 39, VALUE_OPT_NO_I18N,
     /* equiv idx, value */ 39, VALUE_OPT_NO_I18N,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ NO_I18N_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --no-i18n */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ NO_I18N_DESC, NO_I18N_NAME, NO_I18N_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 40, VALUE_OPT_PRINT_TEXT_DOMAIN_DIR,
     /* equiv idx, value */ 40, VALUE_OPT_PRINT_TEXT_DOMAIN_DIR,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ PRINT_TEXT_DOMAIN_DIR_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --print-text-domain-dir */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptPrint_Text_Domain_Dir,
     /* desc, NAME, name */ PRINT_TEXT_DOMAIN_DIR_DESC, PRINT_TEXT_DOMAIN_DIR_NAME, PRINT_TEXT_DOMAIN_DIR_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 0, 0,
     /* equiv idx, value */ 0, 0,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 0, 0,
     /* opt state flags  */ FEEDBACK_FLAGS, 0,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ FEEDBACK_DESC, NULL, NULL,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 42, VALUE_OPT_QUIET,
     /* equiv idx, value */ 42, VALUE_OPT_QUIET,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ QUIET_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --quiet */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ validate_opt_context,
     /* desc, NAME, name */ QUIET_DESC, QUIET_NAME, QUIET_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ 43, VALUE_OPT_SILENT,
     /* equiv idx, value */ 43, VALUE_OPT_SILENT,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ SILENT_FLAGS, 0,
     /* last opt argumnt */ { NULL }, /* --silent */
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doOptSilent,
     /* desc, NAME, name */ SILENT_DESC, SILENT_NAME, SILENT_name,
     /* disablement strs */ 0, 0 },

  {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_VERSION,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ VER_FLAGS, AOUSE_VERSION,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ VER_PROC,
     /* desc, NAME, name */ VER_DESC, NULL, VER_name,
     /* disablement strs */ NULL, NULL },



  {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_HELP,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ doUsageOpt,
     /* desc, NAME, name */ HELP_DESC, NULL, HELP_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ MORE_HELP_FLAGS, AOUSE_MORE_HELP,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL,  NULL,
     /* option proc      */ optionPagedUsage,
     /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS,
     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_SAVE_OPTS,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, 1, 0,
     /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
                       | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, AOUSE_SAVE_OPTS,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL,  NULL,
     /* option proc      */ NULL,
     /* desc, NAME, name */ SAVE_OPTS_DESC, NULL, SAVE_OPTS_name,
     /* disablement strs */ NULL, NULL },

  {  /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS,
     /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_LOAD_OPTS,
     /* equivalenced to  */ NO_EQUIVALENT,
     /* min, max, act ct */ 0, NOLIMIT, 0,
     /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
			  | OPTST_DISABLE_IMM, AOUSE_LOAD_OPTS,
     /* last opt argumnt */ { NULL },
     /* arg list/cookie  */ NULL,
     /* must/cannot opts */ NULL, NULL,
     /* option proc      */ optionLoadOpt,
     /* desc, NAME, name */ LOAD_OPTS_DESC, LOAD_OPTS_NAME, LOAD_OPTS_name,
     /* disablement strs */ NO_LOAD_OPTS_name, LOAD_OPTS_pfx }
};


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/** Reference to the upper cased version of shar. */
#define zPROGNAME       (shar_opt_strs+3580)
/** Reference to the title line for shar usage. */
#define zUsageTitle     (shar_opt_strs+3585)
/** shar configuration file name. */
#define zRcName         (shar_opt_strs+3707)
/** Directories to search for shar config files. */
static char const * const apzHomeList[2] = {
    shar_opt_strs+3701,
    NULL };
/** The shar program bug email address. */
#define zBugsAddr       (shar_opt_strs+3715)
/** Clarification/explanation of what shar does. */
#define zExplain        (shar_opt_strs+3737)
/** Extra detail explaining what shar does. */
#define zDetail         (shar_opt_strs+3860)
/** The full version string for shar. */
#define zFullVersion    (shar_opt_strs+4732)
/* extracted from optcode.tlib near line 364 */

#if defined(ENABLE_NLS)
# define OPTPROC_BASE OPTPROC_TRANSLATE
  static tOptionXlateProc translate_option_strings;
#else
# define OPTPROC_BASE OPTPROC_NONE
# define translate_option_strings NULL
#endif /* ENABLE_NLS */

#define shar_full_usage (shar_opt_strs+4760)
#define shar_short_usage (shar_opt_strs+10169)

#endif /* not defined __doxygen__ */

/*
 *  Create the static procedure(s) declared above.
 */
/**
 * The callout function that invokes the optionUsage function.
 *
 * @param[in] opts the AutoOpts option description structure
 * @param[in] od   the descriptor for the "help" (usage) option.
 * @noreturn
 */
static void
doUsageOpt(tOptions * opts, tOptDesc * od)
{
    int ex_code;
    ex_code = SHAR_EXIT_SUCCESS;
    optionUsage(&sharOptions, ex_code);
    /* NOTREACHED */
    exit(1);
    (void)opts;
    (void)od;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the level-of-compression option.
 * Some compression programs allow for a level of compression.  The
 * default is @code{9}, but this option allows you to specify something
 * else.  This value is used by @command{gzip}, @command{bzip2} and
 * @command{xz}, but not @command{compress}.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptLevel_Of_Compression(tOptions* pOptions, tOptDesc* pOptDesc)
{
    static struct {long rmin, rmax;} const rng[1] = {
        { 1, 9 } };
    int  ix;

    if (pOptions <= OPTPROC_EMIT_LIMIT)
        goto emit_ranges;
    optionNumericVal(pOptions, pOptDesc);

    for (ix = 0; ix < 1; ix++) {
        if (pOptDesc->optArg.argInt < rng[ix].rmin)
            continue;  /* ranges need not be ordered. */
        if (pOptDesc->optArg.argInt == rng[ix].rmin)
            return;
        if (rng[ix].rmax == LONG_MIN)
            continue;
        if (pOptDesc->optArg.argInt <= rng[ix].rmax)
            return;
    }

    option_usage_fp = stderr;

 emit_ranges:
optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the bzip2 option.
 * @command{bzip2} compress and @command{uuencode} all files
 * prior to packing.  The recipient must have @command{uudecode}
 * @command{bzip2} in order to unpack.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptBzip2(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 139 */
    SET_OPT_COMPACTOR("bzip2");
    (void)pOptDesc;
    (void)pOptions;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the gzip option.
 * @command{gzip} compress and @command{uuencode} all files prior
 * to packing.  The recipient must have @command{uudecode} and
 * @command{gzip} in order to unpack.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptGzip(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 153 */
    SET_OPT_COMPACTOR("gzip");
    (void)pOptDesc;
    (void)pOptions;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the compress option, when HAVE_COMPRESS is #define-d.
 * @command{compress} and @command{uuencode} all files prior to
 * packing.  The recipient must have @command{uudecode} and
 * @command{compress} in order to unpack.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
#ifdef HAVE_COMPRESS
static void
doOptCompress(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 168 */
    SET_OPT_COMPACTOR("compress");
    (void)pOptDesc;
    (void)pOptions;
}
#endif /* defined HAVE_COMPRESS */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the level-for-gzip option.
 *
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptLevel_For_Gzip(tOptions* pOptions, tOptDesc* pOptDesc)
{
    int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_LEVEL_OF_COMPRESSION);
    if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0))
        USAGE(SHAR_EXIT_USAGE_ERROR);

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the bits-per-code option, when HAVE_COMPRESS is #define-d.
 * This is the compression factor used by the @command{compress} program.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
#ifdef HAVE_COMPRESS
static void
doOptBits_Per_Code(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 190 */
    check_intermixing(pOptions, pOptDesc);
    SET_OPT_COMPACTOR("compress");
}
#endif /* defined HAVE_COMPRESS */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the whole-size-limit option.
 * Limit the output file size to @file{size} bytes, but don't split input
 * files.  If @file{size} is less than 1024, then it will be multiplied
 * by 1024.  The value may also be specified with a k, K, m or M suffix.
 * The number is then multiplied by 1000, 1024, 1000000, or 1048576,
 * respectively.  4M (4194304) is the maximum allowed.
 *
 * Unlike the @code{split-size-limit} option, this allows the recipient
 * of the shar files to unpack them in any order.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptWhole_Size_Limit(tOptions* pOptions, tOptDesc* pOptDesc)
{
    static struct {long rmin, rmax;} const rng[2] = {
        { 8, 1023 },       { 8192, 4194304 } };
    int  ix;

    if (pOptions <= OPTPROC_EMIT_LIMIT)
        goto emit_ranges;
    optionNumericVal(pOptions, pOptDesc);

    for (ix = 0; ix < 2; ix++) {
        if (pOptDesc->optArg.argInt < rng[ix].rmin)
            continue;  /* ranges need not be ordered. */
        if (pOptDesc->optArg.argInt == rng[ix].rmin)
            return;
        if (rng[ix].rmax == LONG_MIN)
            continue;
        if (pOptDesc->optArg.argInt <= rng[ix].rmax)
            return;
    }

    option_usage_fp = stderr;

 emit_ranges:
optionShowRange(pOptions, pOptDesc, VOIDP(rng), 2);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the split-size-limit option.
 * Limit output file size to @file{size} bytes, splitting files if
 * necessary.  The allowed values are specified as with the
 * @option{--whole-size-limit} option.
 *
 * The archive parts created with this option must be unpacked in the
 * correct order.  If the recipient of the shell archives wants to put
 * all of them in a single email folder (file), they will have to be
 * saved in the correct order for @command{unshar} to unpack them all at
 * once (using one of the split archive options).
 * @xref{unshar Invocation}.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptSplit_Size_Limit(tOptions* pOptions, tOptDesc* pOptDesc)
{
    static struct {long rmin, rmax;} const rng[2] = {
        { 8, 1023 },       { 8192, 4194304 } };
    int  ix;

    if (pOptions <= OPTPROC_EMIT_LIMIT)
        goto emit_ranges;
    optionNumericVal(pOptions, pOptDesc);

    for (ix = 0; ix < 2; ix++) {
        if (pOptDesc->optArg.argInt < rng[ix].rmin)
            continue;  /* ranges need not be ordered. */
        if (pOptDesc->optArg.argInt == rng[ix].rmin)
            return;
        if (rng[ix].rmax == LONG_MIN)
            continue;
        if (pOptDesc->optArg.argInt <= rng[ix].rmax)
            return;
    }

    option_usage_fp = stderr;

 emit_ranges:
optionShowRange(pOptions, pOptDesc, VOIDP(rng), 2);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the input-file-list option.
 * This option causes @file{file} to be reopened as standard input.  If
 * no files are found on the input line, then standard input is read for
 * input file names.  Use of this option will prohibit input files from
 * being listed on the command line.
 *
 * Input must be in a form similar to that generated by @command{find},
 * one filename per line.  This switch is especially useful when the
 * command line will not hold the list of files to be archived.
 *
 * If the @option{--intermix-type} option is specified on the command
 * line, then the compression options may be included in the standard
 * input on lines by themselves and no file name may begin with a hyphen.
 *
 * For example:
 * @example
 * @{ echo --compact xz
 *    find . -type f -print | sort
 * @} | shar -S -p -L50K -o /somewhere/big
 * @end example
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptInput_File_List(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 358 */
    char const * fnm = pOptDesc->optArg.argString;
    validate_opt_context (pOptions, pOptDesc);
    if (strcmp (fnm, "-") != 0) {
        FILE * fp = freopen(fnm, "r", stdin);
        if (fp != stdin)
            usage_message(_("Cannot reopen %s as stdin"), fnm);
    }
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the stdin-file-list option.
 * This option is actually a no-op.  It is a wrapper for
 * @option{--input-file-list=-}.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptStdin_File_List(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 394 */
    SET_OPT_INPUT_FILE_LIST("-");
    (void)pOptDesc;
    (void)pOptions;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the vanilla-operation option.
 * This option produces @samp{vanilla} shars which rely only upon the
 * existence of @command{echo}, @command{test} and @command{sed} in the
 * unpacking environment.
 *
 * It changes the default behavior from mixed mode
 * (@option{--mixed-uuencode}) to text mode (@option{--text-files}).
 * Warnings are produced if options are specified that will require
 * decompression or decoding in the unpacking environment.
 *
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptVanilla_Operation(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 590 */
    validate_opt_context (pOptions, pOptDesc);

    SET_OPT_NO_CHARACTER_COUNT;
    SET_OPT_NO_TIMESTAMP;
    SET_OPT_NO_MD5_DIGEST;
    SET_OPT_NO_I18N;
    SET_OPT_NO_PIPING;
    SET_OPT_FORCE_PREFIX;
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the print-text-domain-dir option.
 * Prints the directory shar looks in to find messages files
 * for different languages, then immediately exits.
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptPrint_Text_Domain_Dir(tOptions* pOptions, tOptDesc* pOptDesc)
{
    /*
     * Be sure the flag-code[0] handles special values for the options pointer
     * viz. (poptions <= OPTPROC_EMIT_LIMIT) *and also* the special flag bit
     * ((poptdesc->fOptState & OPTST_RESET) != 0) telling the option to
     * reset its state.
     */
    /* extracted from shar-opts.def, line 745 */
    validate_opt_context (pOptions, pOptDesc);

#if !defined ENABLE_NLS || defined HAVE_CATGETS \
    || (defined HAVE_GETTEXT && !defined __USE_GNU_GETTEXT)
    exit (EXIT_FAILURE);
#else
    puts (LOCALEDIR);
    exit (EXIT_SUCCESS);
#endif
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
 * Code to handle the silent option.
 *
 * @param[in] pOptions the shar options data structure
 * @param[in,out] pOptDesc the option descriptor for this option.
 */
static void
doOptSilent(tOptions* pOptions, tOptDesc* pOptDesc)
{
    int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_QUIET);
    if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0))
        USAGE(SHAR_EXIT_USAGE_ERROR);

}
/* extracted from optmain.tlib near line 1250 */

/**
 * Print a usage message with a format and va_list argument.
 * The optionUsage function is then invoked to print
 * the error usage text (somewhat abbreviated) and then exit.
 *
 * @param[in] fmt the message format string
 * @param[in] ap  the var-arg list.
 * @noreturn
 */
void
vusage_message(char const * fmt, va_list ap)
{
    char const * er_leader = _("shar usage error:\n");
    fputs(er_leader, stderr);
    vfprintf(stderr, fmt, ap);
    optionUsage(&sharOptions, SHAR_EXIT_USAGE_ERROR);
    /* NOTREACHED */
    exit(1);
}

/**
 * Print a usage message with a format and a variable argument list.
 * vusage_message() is called to do the work.
 *
 * @param[in] fmt the message format string
 * @param[in] ... the argument list for the message
 * @noreturn
 */
void
usage_message(char const * fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vusage_message(fmt, ap);
    /* NOTREACHED */
    va_end(ap);
}

/**
 * Print a fatal error message and die, \a va_list style.
 *
 * @param[in] exit_code  the value to call exit(3) with
 * @param[in] fmt        the death rattle message
 * @param[in] ap         the argument list for the message
 * @noreturn
 */
void
vdie(int exit_code, char const * fmt, va_list ap)
{
    char const * die_leader = _("shar fatal error:\n");
    fputs(die_leader, stderr);
    vfprintf(stderr, fmt, ap);
    fflush(stderr);
    exit(exit_code);
    /* NOTREACHED */
}

/**
 * Print a fatal error message and die, var-arg style.
 *
 * @param[in] exit_code  the value to call exit(3) with
 * @param[in] fmt        the death rattle message
 * @param[in] ...        the list of arguments for the message
 * @noreturn
 */
void
die(int exit_code, char const * fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vdie(exit_code, fmt, ap);
    /* NOTREACHED */
    va_end(ap);
}

/**
 * Print a file system error fatal error message and die.
 *
 * @param[in] exit_code  the value to call exit(3) with.
 * @param[in] op         the operation that failed.
 * @param[in] fname      the file name the operation was on.
 * @noreturn
 */
void
fserr(int exit_code, char const * op, char const * fname)
{
    char const * fserr_fmt = _("fserr %d (%s) performing '%s' on %s\n");
    die(exit_code, fserr_fmt, errno, strerror(errno), op, fname);
    /* NOTREACHED */
}

/**
 * The directory containing the data associated with shar.
 */
#ifndef  PKGDATADIR
# define PKGDATADIR ""
#endif

/**
 * Information about the person or institution that packaged shar
 * for the current distribution.
 */
#ifndef  WITH_PACKAGER
# define shar_packager_info NULL
#else
/** Packager information for shar. */
static char const shar_packager_info[] =
    "Packaged by " WITH_PACKAGER

# ifdef WITH_PACKAGER_VERSION
        " ("WITH_PACKAGER_VERSION")"
# endif

# ifdef WITH_PACKAGER_BUG_REPORTS
    "\nReport shar bugs to " WITH_PACKAGER_BUG_REPORTS
# endif
    "\n";
#endif
#ifndef __doxygen__

#endif /* __doxygen__ */
/**
 * The option definitions for shar.  The one structure that
 * binds them all.
 */
tOptions sharOptions = {
    OPTIONS_STRUCT_VERSION,
    0, NULL,                    /* original argc + argv    */
    ( OPTPROC_BASE
    + OPTPROC_ERRSTOP
    + OPTPROC_SHORTOPT
    + OPTPROC_LONGOPT
    + OPTPROC_NO_REQ_OPT
    + OPTPROC_GNUUSAGE
    + OPTPROC_MISUSE ),
    0, NULL,                    /* current option index, current option */
    NULL,         NULL,         zPROGNAME,
    zRcName,      zCopyright,   zLicenseDescrip,
    zFullVersion, apzHomeList,  zUsageTitle,
    zExplain,     zDetail,      optDesc,
    zBugsAddr,                  /* address to send bugs to */
    NULL, NULL,                 /* extensions/saved state  */
    optionUsage, /* usage procedure */
    translate_option_strings,   /* translation procedure */
    /*
     *  Indexes to special options
     */
    { INDEX_OPT_MORE_HELP, /* more-help option index */
      INDEX_OPT_SAVE_OPTS, /* save option index */
      NO_EQUIVALENT, /* '-#' option index */
      NO_EQUIVALENT /* index of default opt */
    },
    49 /* full option count */, 44 /* user option count */,
    shar_full_usage, shar_short_usage,
    NULL, NULL,
    PKGDATADIR, shar_packager_info
};

#if ENABLE_NLS
/**
 * This code is designed to translate translatable option text for the
 * shar program.  These translations happen upon entry
 * to optionProcess().
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef HAVE_DCGETTEXT
# include <gettext.h>
#endif
#include <autoopts/usage-txt.h>

static char * AO_gettext(char const * pz);
static void   coerce_it(void ** s);

/**
 * AutoGen specific wrapper function for gettext.  It relies on the macro _()
 * to convert from English to the target language, then strdup-duplicates the
 * result string.  It tries the "libopts" domain first, then whatever has been
 * set via the \a textdomain(3) call.
 *
 * @param[in] pz the input text used as a lookup key.
 * @returns the translated text (if there is one),
 *   or the original text (if not).
 */
static char *
AO_gettext(char const * pz)
{
    char * res;
    if (pz == NULL)
        return NULL;
#ifdef HAVE_DCGETTEXT
    /*
     * While processing the option_xlateable_txt data, try to use the
     * "libopts" domain.  Once we switch to the option descriptor data,
     * do *not* use that domain.
     */
    if (option_xlateable_txt.field_ct != 0) {
        res = dgettext("libopts", pz);
        if (res == pz)
            res = (char *)VOIDP(_(pz));
    } else
        res = (char *)VOIDP(_(pz));
#else
    res = (char *)VOIDP(_(pz));
#endif
    if (res == pz)
        return res;
    res = strdup(res);
    if (res == NULL) {
        fputs(_("No memory for duping translated strings\n"), stderr);
        exit(SHAR_EXIT_OPTION_ERROR);
    }
    return res;
}

/**
 * All the pointers we use are marked "* const", but they are stored in
 * writable memory.  Coerce the mutability and set the pointer.
 */
static void coerce_it(void ** s) { *s = AO_gettext(*s);
}

/**
 * Translate all the translatable strings in the sharOptions
 * structure defined above.  This is done only once.
 */
static void
translate_option_strings(void)
{
    tOptions * const opts = &sharOptions;

    /*
     *  Guard against re-translation.  It won't work.  The strings will have
     *  been changed by the first pass through this code.  One shot only.
     */
    if (option_xlateable_txt.field_ct != 0) {
        /*
         *  Do the translations.  The first pointer follows the field count
         *  field.  The field count field is the size of a pointer.
         */
        char ** ppz = (char**)VOIDP(&(option_xlateable_txt));
        int     ix  = option_xlateable_txt.field_ct;

        do {
            ppz++; /* skip over field_ct */
            *ppz = AO_gettext(*ppz);
        } while (--ix > 0);
        /* prevent re-translation and disable "libopts" domain lookup */
        option_xlateable_txt.field_ct = 0;

        coerce_it(VOIDP(&(opts->pzCopyright)));
        coerce_it(VOIDP(&(opts->pzCopyNotice)));
        coerce_it(VOIDP(&(opts->pzFullVersion)));
    }
}
#endif /* ENABLE_NLS */

#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT
/** I18N function strictly for xgettext.  Do not compile. */
static void bogus_function(void) {
  /* TRANSLATORS:

     The following dummy function was crated solely so that xgettext can
     extract the correct strings.  These strings are actually referenced
     by a field name in the sharOptions structure noted in the
     comments below.  The literal text is defined in shar_opt_strs.
   
     NOTE: the strings below are segmented with respect to the source string
     shar_opt_strs.  The strings above are handed off for translation
     at run time a paragraph at a time.  Consequently, they are presented here
     for translation a paragraph at a time.
   
     ALSO: often the description for an option will reference another option
     by name.  These are set off with apostrophe quotes (I hope).  Do not
     translate option names.
   */
  /* referenced via sharOptions.pzCopyright */
  puts(_("shar (GNU sharutils) 4.15.2\n\
Copyright (C) 1994-2015 Free Software Foundation, Inc., all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the GNU General Public License,\n\
version 3 or later <http://gnu.org/licenses/gpl.html>\n"));

  /* referenced via sharOptions.pzCopyNotice */
  puts(_("shar is free software: you can redistribute it and/or modify it under the\n\
terms of the GNU General Public License as published by the Free Software\n\
Foundation, either version 3 of the License, or (at your option) any later\n\
version.\n\n"));
  puts(_("shar is distributed in the hope that it will be useful, but WITHOUT ANY\n\
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\
FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\n\
details.\n\n"));
  puts(_("You should have received a copy of the GNU General Public License along\n\
with this program.  If not, see <http://www.gnu.org/licenses/>.\n"));

  /* referenced via sharOptions.pzUsageTitle */
  puts(_("shar (GNU sharutils) - create a shell archive\n\
Usage:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]\n"));

  /* referenced via sharOptions.pzExplain */
  puts(_("If no 'file's are specified, the list of input files is read from standard\n\
input.  Standard input must not be a terminal.\n"));

  /* referenced via sharOptions.pzDetail */
  puts(_("'shar' creates \"shell archives\" (or shar files) which are in text format\n\
and can be emailed.  These files may be unpacked later by executing them\n\
with '/bin/sh'.  The resulting archive is sent to standard out unless the\n\
'-o' option is given.  A wide range of features provide extensive\n\
flexibility in manufacturing shars and in specifying 'shar' \"smartness\".\n\
Archives may be fairly simple ('--vanilla-operation') or essentially a\n\
mailable 'tar' archive.\n\n"));
  puts(_("Options may be specified in any order until a 'file' argument is\n\
recognized.  If the '--intermix-type' option has been specified, more\n\
compression and encoding options will be recognized between the 'file'\n\
arguments.\n\n"));
  puts(_("Though this program supports 'uuencode'-d files, they are deprecated.  If\n\
you are emailing files, please consider mime-encoded files.  If you do\n\
'uuencode', base64 is the preferred encoding method.\n"));

  /* referenced via sharOptions.pzFullVersion */
  puts(_("shar (GNU sharutils) 4.15.2"));

  /* referenced via sharOptions.pzFullUsage */
  puts(_("shar (GNU sharutils) - create a shell archive\n\
Usage:  shar [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]\n\n"));
  puts(_("Specify compression:\n\
   -p, --intermix-type        specify compression for input files\n\
                                - prohibits the option 'vanilla-operation'\n"));
  puts(_("   -C, --compactor=PROG       specify compaction (compression) program PROG\n\
                                - prohibits the option 'vanilla-operation'\n\
                                - may appear multiple times\n\
                                - it must be known to shar: xz gzip bzip2\n"));
  puts(_("   -g, --level-of-compression=LEVEL\n\
                              pass LEVEL for compression\n\
                                - it must be in the range: 1 to 9\n\n"));
  puts(_("Specify file encoding methodology:\n\
   -M, --mixed-uuencode       decide uuencoding for each file\n"));
  puts(_("   -B, --uuencode             treat all files as binary\n\
                                - an alternate for mixed-uuencode\n"));
  puts(_("   -T, --text-files           treat all files as text\n\
                                - an alternate for mixed-uuencode\n\n"));
  puts(_("Specifying file selection and output modes:\n"));
  puts(_("   -o, --output-prefix=str    print output to file PREFIX.nn\n"));
  puts(_("   -l, --whole-size-limit=SIZE\n\
                              split archive, not files, to SIZE\n\
                                - requires the option 'output-prefix'\n\
                                - is scalable with a suffix: k/K/m/M/g/G/t/T\n\
                                - it must lie in one of the ranges:\n\
                                  8 to 1023, or 8192 to 4194304\n"));
  puts(_("   -L, --split-size-limit=SIZE\n\
                              split archive or files to SIZE\n\
                                - requires the option 'output-prefix'\n\
                                - is scalable with a suffix: k/K/m/M/g/G/t/T\n\
                                - it must lie in one of the ranges:\n\
                                  8 to 1023, or 8192 to 4194304\n\
                                - an alternate for 'whole-size-limit'\n"));
  puts(_("   -I, --input-file-list=FILE read file list from FILE\n\n"));
  puts(_("Controlling the shar headers:\n\
   -n, --archive-name=NAME    use NAME to document the archive\n"));
  puts(_("   -s, --submitter=NAME       override the submitter name with NAME\n"));
  puts(_("   -a, --net-headers          output Submitted-by: & Archive-name: headers\n\
                                - requires the option 'archive-name'\n"));
  puts(_("   -c, --cut-mark             start the shar with a cut line\n"));
  puts(_("   -t, --translate            translate messages in the script\n\n"));
  puts(_("Protecting against transmission issues:\n\
       --no-character-count   do not use `wc -c' to check size\n"));
  puts(_("   -D, --no-md5-digest        do not use md5sum digest to verify\n"));
  puts(_("   -F, --force-prefix         apply the prefix character on every line\n"));
  puts(_("   -d, --here-delimiter=DELIM use DELIM to delimit the files\n\n"));
  puts(_("Producing different kinds of shars:\n\
   -V, --vanilla-operation    produce very simple shars\n"));
  puts(_("   -P, --no-piping            use temporary files between programs\n"));
  puts(_("   -x, --no-check-existing    blindly overwrite existing files\n"));
  puts(_("   -X, --query-user           ask user before overwriting files\n\
                                - prohibits the option 'vanilla-operation'\n"));
  puts(_("   -m, --no-timestamp         do not restore modification times\n"));
  puts(_("   -Q, --quiet-unshar         avoid verbose messages at unshar time\n"));
  puts(_("   -f, --basename             restore in one directory, despite hierarchy\n\n"));
  puts(_("Internationalization options:\n\
       --no-i18n              do not internationalize\n"));
  puts(_("       --print-text-domain-dir  print directory with shar messages\n\n"));
  puts(_("User feedback/entertainment:\n\
   -q, --quiet                do not output verbose messages\n"));
  puts(_("       --silent               an alias for the 'quiet' option\n\n"));
  puts(_("Version, usage and configuration options:\n"));
  puts(_("   -v, --version[=MODE]       output version information and exit\n"));
  puts(_("   -h, --help                 display extended usage information and exit\n"));
  puts(_("   -!, --more-help            extended usage information passed thru pager\n"));
  puts(_("   -R, --save-opts[=FILE]     save the option state to a config file FILE\n"));
  puts(_("   -r, --load-opts=FILE       load options from the config file FILE\n\
                                - disabled with '--no-load-opts'\n\
                                - may appear multiple times\n\n"));
  puts(_("Options are specified by doubled hyphens and their name or by a single\n\
hyphen and the flag character.\n\
If no 'file's are specified, the list of input files is read from a\n\
standard input.  Standard input must not be a terminal.\n\n"));
  puts(_("The following option preset mechanisms are supported:\n"));
  puts(_(" - reading file $HOME/.sharrc\n\n\
'shar' creates \"shell archives\" (or shar files) which are in text format\n\
and can be emailed.  These files may be unpacked later by executing them\n\
with '/bin/sh'.  The resulting archive is sent to standard out unless the\n\
'-o' option is given.  A wide range of features provide extensive\n\
flexibility in manufacturing shars and in specifying 'shar' \"smartness\".\n\
Archives may be fairly simple ('--vanilla-operation') or essentially a\n\
mailable 'tar' archive.\n\n"));
  puts(_("Options may be specified in any order until a 'file' argument is\n\
recognized.  If the '--intermix-type' option has been specified, more\n\
compression and encoding options will be recognized between the 'file'\n\
arguments.\n\n"));
  puts(_("Though this program supports 'uuencode'-d files, they are deprecated.  If\n\
you are emailing files, please consider mime-encoded files.  If you do\n\
'uuencode', base64 is the preferred encoding method.\n\n\
Please send bug reports to:  <bug-gnu-utils@gnu.org>\n"));

  /* referenced via sharOptions.pzShortUsage */
  puts(_("shar (GNU sharutils) - create a shell archive\n\
Usage:  shar [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [<file>...]\n\
Try 'shar --help' for more information.\n"));
  /* LIBOPTS-MESSAGES: */
#line 67 "../autoopts.c"
  puts(_("allocation of %d bytes failed\n"));
#line 93 "../autoopts.c"
  puts(_("allocation of %d bytes failed\n"));
#line 53 "../init.c"
  puts(_("AutoOpts function called without option descriptor\n"));
#line 86 "../init.c"
  puts(_("\tThis exceeds the compiled library version:  "));
#line 84 "../init.c"
  puts(_("Automated Options Processing Error!\n"
       "\t%s called AutoOpts function with structure version %d:%d:%d.\n"));
#line 80 "../autoopts.c"
  puts(_("realloc of %d bytes at 0x%p failed\n"));
#line 88 "../init.c"
  puts(_("\tThis is less than the minimum library version:  "));
#line 121 "../version.c"
  puts(_("Automated Options version %s\n"
       "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n"));
#line 87 "../makeshell.c"
  puts(_("(AutoOpts bug):  %s.\n"));
#line 90 "../reset.c"
  puts(_("optionResetOpt() called, but reset-option not configured"));
#line 292 "../usage.c"
  puts(_("could not locate the 'help' option"));
#line 336 "../autoopts.c"
  puts(_("optionProcess() was called with invalid data"));
#line 748 "../usage.c"
  puts(_("invalid argument type specified"));
#line 598 "../find.c"
  puts(_("defaulted to option with optional arg"));
#line 76 "../alias.c"
  puts(_("aliasing option is out of range."));
#line 234 "../enum.c"
  puts(_("%s error:  the keyword '%s' is ambiguous for %s\n"));
#line 108 "../find.c"
  puts(_("  The following options match:\n"));
#line 293 "../find.c"
  puts(_("%s: ambiguous option name: %s (matches %d options)\n"));
#line 161 "../check.c"
  puts(_("%s: Command line arguments required\n"));
#line 43 "../alias.c"
  puts(_("%d %s%s options allowed\n"));
#line 94 "../makeshell.c"
  puts(_("%s error %d (%s) calling %s for '%s'\n"));
#line 306 "../makeshell.c"
  puts(_("interprocess pipe"));
#line 168 "../version.c"
  puts(_("error: version option argument '%c' invalid.  Use:\n"
       "\t'v' - version only\n"
       "\t'c' - version and copyright\n"
       "\t'n' - version and full copyright notice\n"));
#line 58 "../check.c"
  puts(_("%s error:  the '%s' and '%s' options conflict\n"));
#line 217 "../find.c"
  puts(_("%s: The '%s' option has been disabled."));
#line 430 "../find.c"
  puts(_("%s: The '%s' option has been disabled."));
#line 38 "../alias.c"
  puts(_("-equivalence"));
#line 469 "../find.c"
  puts(_("%s: illegal option -- %c\n"));
#line 110 "../reset.c"
  puts(_("%s: illegal option -- %c\n"));
#line 271 "../find.c"
  puts(_("%s: illegal option -- %s\n"));
#line 755 "../find.c"
  puts(_("%s: illegal option -- %s\n"));
#line 118 "../reset.c"
  puts(_("%s: illegal option -- %s\n"));
#line 335 "../find.c"
  puts(_("%s: unknown vendor extension option -- %s\n"));
#line 159 "../enum.c"
  puts(_("  or an integer from %d through %d\n"));
#line 169 "../enum.c"
  puts(_("  or an integer from %d through %d\n"));
#line 747 "../usage.c"
  puts(_("%s error:  invalid option descriptor for %s\n"));
#line 1081 "../usage.c"
  puts(_("%s error:  invalid option descriptor for %s\n"));
#line 385 "../find.c"
  puts(_("%s: invalid option name: %s\n"));
#line 527 "../find.c"
  puts(_("%s: The '%s' option requires an argument.\n"));
#line 156 "../autoopts.c"
  puts(_("(AutoOpts bug):  Equivalenced option '%s' was equivalenced to both\n"
       "\t'%s' and '%s'."));
#line 94 "../check.c"
  puts(_("%s error:  The %s option is required\n"));
#line 632 "../find.c"
  puts(_("%s: The '%s' option cannot have an argument.\n"));
#line 151 "../check.c"
  puts(_("%s: Command line arguments are not allowed.\n"));
#line 535 "../save.c"
  puts(_("error %d (%s) creating %s\n"));
#line 234 "../enum.c"
  puts(_("%s error:  '%s' does not match any %s keywords.\n"));
#line 93 "../reset.c"
  puts(_("%s error: The '%s' option requires an argument.\n"));
#line 184 "../save.c"
  puts(_("error %d (%s) stat-ing %s\n"));
#line 238 "../save.c"
  puts(_("error %d (%s) stat-ing %s\n"));
#line 143 "../restore.c"
  puts(_("%s error: no saved option state\n"));
#line 231 "../autoopts.c"
  puts(_("'%s' is not a command line option.\n"));
#line 111 "../time.c"
  puts(_("%s error:  '%s' is not a recognizable date/time.\n"));
#line 132 "../save.c"
  puts(_("'%s' not defined\n"));
#line 50 "../time.c"
  puts(_("%s error:  '%s' is not a recognizable time duration.\n"));
#line 92 "../check.c"
  puts(_("%s error:  The %s option must appear %d times.\n"));
#line 164 "../numeric.c"
  puts(_("%s error:  '%s' is not a recognizable number.\n"));
#line 200 "../enum.c"
  puts(_("%s error:  %s exceeds %s keyword count\n"));
#line 330 "../usage.c"
  puts(_("Try '%s %s' for more information.\n"));
#line 45 "../alias.c"
  puts(_("one %s%s option allowed\n"));
#line 208 "../makeshell.c"
  puts(_("standard output"));
#line 943 "../makeshell.c"
  puts(_("standard output"));
#line 274 "../usage.c"
  puts(_("standard output"));
#line 415 "../usage.c"
  puts(_("standard output"));
#line 625 "../usage.c"
  puts(_("standard output"));
#line 175 "../version.c"
  puts(_("standard output"));
#line 274 "../usage.c"
  puts(_("standard error"));
#line 415 "../usage.c"
  puts(_("standard error"));
#line 625 "../usage.c"
  puts(_("standard error"));
#line 175 "../version.c"
  puts(_("standard error"));
#line 208 "../makeshell.c"
  puts(_("write"));
#line 943 "../makeshell.c"
  puts(_("write"));
#line 273 "../usage.c"
  puts(_("write"));
#line 414 "../usage.c"
  puts(_("write"));
#line 624 "../usage.c"
  puts(_("write"));
#line 174 "../version.c"
  puts(_("write"));
#line 60 "../numeric.c"
  puts(_("%s error:  %s option value %ld is out of range.\n"));
#line 44 "../check.c"
  puts(_("%s error:  %s option requires the %s option\n"));
#line 131 "../save.c"
  puts(_("%s warning:  cannot save options - %s not regular file\n"));
#line 183 "../save.c"
  puts(_("%s warning:  cannot save options - %s not regular file\n"));
#line 237 "../save.c"
  puts(_("%s warning:  cannot save options - %s not regular file\n"));
#line 256 "../save.c"
  puts(_("%s warning:  cannot save options - %s not regular file\n"));
#line 534 "../save.c"
  puts(_("%s warning:  cannot save options - %s not regular file\n"));
  /* END-LIBOPTS-MESSAGES */
}
#endif /* uncompilable code */
#ifdef  __cplusplus
}
#endif
/* shar-opts.c ends here */
