[SCM] GNU gnutls branch, gnutls_3_0_x-2, updated. gnutls_3_0_20-21-g1cf7f8a

"Nikos Mavrogiannopoulos" <[email protected]>
Newsgroups gmane.comp.encryption.gpg.gnutls.cvs
Message-ID <[email protected]>
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU gnutls".

http://git.savannah.gnu.org/cgit/gnutls.git/commit/?id=1cf7f8a273e7d4f0a7062dd8215c71d746ac410f

The branch, gnutls_3_0_x-2 has been updated
       via  1cf7f8a273e7d4f0a7062dd8215c71d746ac410f (commit)
      from  744d5c815bd4fb0386bb945b77589f0b89167045 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 1cf7f8a273e7d4f0a7062dd8215c71d746ac410f
Author: Nikos Mavrogiannopoulos <[email protected]>
Date:   Fri Jun 29 17:56:02 2012 +0200

    Added autogen generated files.

-----------------------------------------------------------------------

Summary of changes:
 .gitignore                                   |   18 -
 src/certtool-args.c                          | 1782 ++++++++++++++++++++++++++
 src/certtool-args.h                          |  289 +++++
 src/cli-args.c                               | 1423 ++++++++++++++++++++
 src/cli-args.h                               |  255 ++++
 src/{libopts/genshell.c => cli-debug-args.c} |  339 ++++--
 src/cli-debug-args.h                         |  189 +++
 src/ocsptool-args.c                          | 1003 +++++++++++++++
 src/ocsptool-args.h                          |  215 ++++
 src/p11tool-args.c                           | 1274 ++++++++++++++++++
 src/p11tool-args.h                           |  245 ++++
 src/{libopts/genshell.c => psk-args.c}       |  353 ++++--
 src/psk-args.h                               |  191 +++
 src/serv-args.c                              | 1398 ++++++++++++++++++++
 src/serv-args.h                              |  249 ++++
 src/srptool-args.c                           |  631 +++++++++
 src/srptool-args.h                           |  199 +++
 17 files changed, 9796 insertions(+), 257 deletions(-)
 create mode 100644 src/certtool-args.c
 create mode 100644 src/certtool-args.h
 create mode 100644 src/cli-args.c
 create mode 100644 src/cli-args.h
 copy src/{libopts/genshell.c => cli-debug-args.c} (50%)
 create mode 100644 src/cli-debug-args.h
 create mode 100644 src/ocsptool-args.c
 create mode 100644 src/ocsptool-args.h
 create mode 100644 src/p11tool-args.c
 create mode 100644 src/p11tool-args.h
 copy src/{libopts/genshell.c => psk-args.c} (50%)
 create mode 100644 src/psk-args.h
 create mode 100644 src/serv-args.c
 create mode 100644 src/serv-args.h
 create mode 100644 src/srptool-args.c
 create mode 100644 src/srptool-args.h

diff --git a/.gitignore b/.gitignore
index 09c8801..65eda76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -444,18 +444,12 @@ src/benchmark
 src/benchmark-cipher
 src/benchmark-tls
 src/certtool
-src/certtool-args.c
-src/certtool-args.h
 src/cfg/Makefile
 src/cfg/Makefile.in
 src/cfg/platon/Makefile
 src/cfg/platon/Makefile.in
 src/cfg/platon/str/Makefile
 src/cfg/platon/str/Makefile.in
-src/cli-args.c
-src/cli-args.h
-src/cli-debug-args.c
-src/cli-debug-args.h
 src/crywrap/crywrap
 src/gaa.skel
 src/gnutls-cli
@@ -471,21 +465,9 @@ src/libcmd-psk.la
 src/libcmd-serv.la
 src/libcmd-srp.la
 src/ocsptool
-src/ocsptool-args.c
-src/ocsptool-args.h
-src/ocsptool-gaa.c
-src/ocsptool-gaa.h
 src/p11tool
-src/p11tool-args.c
-src/p11tool-args.h
-src/psk-args.c
-src/psk-args.h
 src/psktool
-src/serv-args.c
-src/serv-args.h
 src/srptool
-src/srptool-args.c
-src/srptool-args.h
 stamp-h1
 tags
 tests/*/out
diff --git a/src/certtool-args.c b/src/certtool-args.c
new file mode 100644
index 0000000..c3e7b49
--- /dev/null
+++ b/src/certtool-args.c
@@ -0,0 +1,1782 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (certtool-args.c)
+ *  
+ *  It has been AutoGen-ed  June 25, 2012 at 07:40:45 PM by AutoGen 5.16
+ *  From the definitions    certtool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 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 certtool 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 certtool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  certtool 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.
+ *  
+ *  certtool 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 "certtool-args.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;
+
+/* TRANSLATORS: choose the translation for option names wisely because you
+                cannot ever change your mind. */
+#define zCopyright      (certtool_opt_strs+0)
+#define zLicenseDescrip (certtool_opt_strs+279)
+
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ *  certtool option static const strings
+ */
+static char const certtool_opt_strs[4606] =
+/*     0 */ "certtool @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
+            "This is free software. It is licensed for use, modification and\n"
+            "redistribution under the terms of the\n"
+            "GNU General Public License, version 3 or later\n"
+            "    <http://gnu.org/licenses/gpl.html>\n\0"
+/*   279 */ "certtool is free software: you can redistribute it and/or modify it under\n"
+            "the terms of the GNU General Public License as published by the Free\n"
+            "Software Foundation, either version 3 of the License, or (at your option)\n"
+            "any later version.\n\n"
+            "certtool 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"
+/*   884 */ "Enable debugging.\0"
+/*   902 */ "DEBUG\0"
+/*   908 */ "debug\0"
+/*   914 */ "Input file\0"
+/*   925 */ "INFILE\0"
+/*   932 */ "infile\0"
+/*   939 */ "Output file\0"
+/*   951 */ "OUTFILE\0"
+/*   959 */ "outfile\0"
+/*   967 */ "Generate a self-signed certificate\0"
+/*  1002 */ "GENERATE_SELF_SIGNED\0"
+/*  1023 */ "generate-self-signed\0"
+/*  1044 */ "Generate a signed certificate\0"
+/*  1074 */ "GENERATE_CERTIFICATE\0"
+/*  1095 */ "generate-certificate\0"
+/*  1116 */ "Generates a proxy certificate\0"
+/*  1146 */ "GENERATE_PROXY\0"
+/*  1161 */ "generate-proxy\0"
+/*  1176 */ "Generate a CRL\0"
+/*  1191 */ "GENERATE_CRL\0"
+/*  1204 */ "generate-crl\0"
+/*  1217 */ "Update a signed certificate\0"
+/*  1245 */ "UPDATE_CERTIFICATE\0"
+/*  1264 */ "update-certificate\0"
+/*  1283 */ "Generate a private key\0"
+/*  1306 */ "GENERATE_PRIVKEY\0"
+/*  1323 */ "generate-privkey\0"
+/*  1340 */ "Generate a PKCS #10 certificate request\0"
+/*  1380 */ "GENERATE_REQUEST\0"
+/*  1397 */ "generate-request\0"
+/*  1414 */ "Verify a PEM encoded certificate chain.\0"
+/*  1454 */ "VERIFY_CHAIN\0"
+/*  1467 */ "verify-chain\0"
+/*  1480 */ "Verify a PEM encoded certificate chain using a trusted list.\0"
+/*  1541 */ "VERIFY\0"
+/*  1548 */ "verify\0"
+/*  1555 */ "Verify a CRL using a trusted list.\0"
+/*  1590 */ "VERIFY_CRL\0"
+/*  1601 */ "verify-crl\0"
+/*  1612 */ "Generate PKCS #3 encoded Diffie-Hellman parameters.\0"
+/*  1664 */ "GENERATE_DH_PARAMS\0"
+/*  1683 */ "generate-dh-params\0"
+/*  1702 */ "Get the included PKCS #3 encoded Diffie-Hellman parameters.\0"
+/*  1762 */ "GET_DH_PARAMS\0"
+/*  1776 */ "get-dh-params\0"
+/*  1790 */ "Print information PKCS #3 encoded Diffie-Hellman parameters\0"
+/*  1850 */ "DH_INFO\0"
+/*  1858 */ "dh-info\0"
+/*  1866 */ "Loads a private key file\0"
+/*  1891 */ "LOAD_PRIVKEY\0"
+/*  1904 */ "load-privkey\0"
+/*  1917 */ "Loads a public key file\0"
+/*  1941 */ "LOAD_PUBKEY\0"
+/*  1953 */ "load-pubkey\0"
+/*  1965 */ "Loads a certificate request file\0"
+/*  1998 */ "LOAD_REQUEST\0"
+/*  2011 */ "load-request\0"
+/*  2024 */ "Loads a certificate file\0"
+/*  2049 */ "LOAD_CERTIFICATE\0"
+/*  2066 */ "load-certificate\0"
+/*  2083 */ "Loads the certificate authority's private key file\0"
+/*  2134 */ "LOAD_CA_PRIVKEY\0"
+/*  2150 */ "load-ca-privkey\0"
+/*  2166 */ "Loads the certificate authority's certificate file\0"
+/*  2217 */ "LOAD_CA_CERTIFICATE\0"
+/*  2237 */ "load-ca-certificate\0"
+/*  2257 */ "Password to use\0"
+/*  2273 */ "PASSWORD\0"
+/*  2282 */ "password\0"
+/*  2291 */ "Print information on the given certificate\0"
+/*  2334 */ "CERTIFICATE_INFO\0"
+/*  2351 */ "certificate-info\0"
+/*  2368 */ "Print certificate's public key\0"
+/*  2399 */ "CERTIFICATE_PUBKEY\0"
+/*  2418 */ "certificate-pubkey\0"
+/*  2437 */ "Print information on the given OpenPGP certificate\0"
+/*  2488 */ "PGP_CERTIFICATE_INFO\0"
+/*  2509 */ "pgp-certificate-info\0"
+/*  2530 */ "Print information on the given OpenPGP keyring structure\0"
+/*  2587 */ "PGP_RING_INFO\0"
+/*  2601 */ "pgp-ring-info\0"
+/*  2615 */ "Print information on the given CRL structure\0"
+/*  2660 */ "CRL_INFO\0"
+/*  2669 */ "crl-info\0"
+/*  2678 */ "Print information on the given certificate request\0"
+/*  2729 */ "CRQ_INFO\0"
+/*  2738 */ "crq-info\0"
+/*  2747 */ "Do not use extensions in certificate requests\0"
+/*  2793 */ "NO_CRQ_EXTENSIONS\0"
+/*  2811 */ "no-crq-extensions\0"
+/*  2829 */ "Print information on a PKCS #12 structure\0"
+/*  2871 */ "P12_INFO\0"
+/*  2880 */ "p12-info\0"
+/*  2889 */ "Print information on a PKCS #7 structure\0"
+/*  2930 */ "P7_INFO\0"
+/*  2938 */ "p7-info\0"
+/*  2946 */ "Convert S/MIME to PKCS #7 structure\0"
+/*  2982 */ "SMIME_TO_P7\0"
+/*  2994 */ "smime-to-p7\0"
+/*  3006 */ "Print information on a private key\0"
+/*  3041 */ "KEY_INFO\0"
+/*  3050 */ "key-info\0"
+/*  3059 */ "Print information on an OpenPGP private key\0"
+/*  3103 */ "PGP_KEY_INFO\0"
+/*  3116 */ "pgp-key-info\0"
+/*  3129 */ "Print information on a public key\0"
+/*  3163 */ "PUBKEY_INFO\0"
+/*  3175 */ "pubkey-info\0"
+/*  3187 */ "Generate an X.509 version 1 certificate (with no extensions)\0"
+/*  3248 */ "V1\0"
+/*  3251 */ "v1\0"
+/*  3254 */ "Generate a PKCS #12 structure\0"
+/*  3284 */ "TO_P12\0"
+/*  3291 */ "to-p12\0"
+/*  3298 */ "Generate a PKCS #8 structure\0"
+/*  3327 */ "TO_P8\0"
+/*  3333 */ "to-p8\0"
+/*  3339 */ "Use PKCS #8 format for private keys\0"
+/*  3375 */ "PKCS8\0"
+/*  3381 */ "pkcs8\0"
+/*  3387 */ "Generate RSA key\0"
+/*  3404 */ "RSA\0"
+/*  3408 */ "rsa\0"
+/*  3412 */ "Generate DSA key\0"
+/*  3429 */ "DSA\0"
+/*  3433 */ "dsa\0"
+/*  3437 */ "Generate ECC (ECDSA) key\0"
+/*  3462 */ "ECC\0"
+/*  3466 */ "ecc\0"
+/*  3470 */ "Hash algorithm to use for signing.\0"
+/*  3505 */ "HASH\0"
+/*  3510 */ "hash\0"
+/*  3515 */ "Use DER format for input certificates and private keys.\0"
+/*  3571 */ "INDER\0"
+/*  3577 */ "no-inder\0"
+/*  3586 */ "no\0"
+/*  3589 */ "This is an alias for 'inder'\0"
+/*  3618 */ "inraw\0"
+/*  3624 */ "Use DER format for output certificates and private keys\0"
+/*  3680 */ "OUTDER\0"
+/*  3687 */ "no-outder\0"
+/*  3697 */ "This is an alias for 'outder'\0"
+/*  3727 */ "outraw\0"
+/*  3734 */ "Specify the number of bits for key generate\0"
+/*  3778 */ "BITS\0"
+/*  3783 */ "bits\0"
+/*  3788 */ "Specify the security level [low, legacy, normal, high, ultra].\0"
+/*  3851 */ "SEC_PARAM\0"
+/*  3861 */ "sec-param\0"
+/*  3871 */ "No effect\0"
+/*  3881 */ "DISABLE_QUICK_RANDOM\0"
+/*  3902 */ "disable-quick-random\0"
+/*  3923 */ "Template file to use for non-interactive operation\0"
+/*  3974 */ "TEMPLATE\0"
+/*  3983 */ "template\0"
+/*  3992 */ "Cipher to use for PKCS #8 and #12 operations\0"
+/*  4037 */ "PKCS_CIPHER\0"
+/*  4049 */ "pkcs-cipher\0"
+/*  4061 */ "Display extended usage information and exit\0"
+/*  4105 */ "help\0"
+/*  4110 */ "Extended usage information passed thru pager\0"
+/*  4155 */ "more-help\0"
+/*  4165 */ "Output version information and exit\0"
+/*  4201 */ "version\0"
+/*  4209 */ "CERTTOOL\0"
+/*  4218 */ "certtool - GnuTLS PKCS #11 tool - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
+/*  4325 */ "[email protected]\0"
+/*  4344 */ "\n\n\0"
+/*  4347 */ "\n"
+            "Tool to parse and generate X.509 certificates, requests and private keys.\n"
+            "It can be used interactively or non interactively by specifying the\n"
+            "template command line option.\n\0"
+/*  4521 */ "certtool @VERSION@\0"
+/*  4540 */ "certtool [options] [url]\n"
+            "certtool --help for usage instructions.\n";
+
+/*
+ *  debug option description:
+ */
+#define DEBUG_DESC      (certtool_opt_strs+884)
+#define DEBUG_NAME      (certtool_opt_strs+902)
+#define DEBUG_name      (certtool_opt_strs+908)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  infile option description:
+ */
+#define INFILE_DESC      (certtool_opt_strs+914)
+#define INFILE_NAME      (certtool_opt_strs+925)
+#define INFILE_name      (certtool_opt_strs+932)
+#define INFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  outfile option description:
+ */
+#define OUTFILE_DESC      (certtool_opt_strs+939)
+#define OUTFILE_NAME      (certtool_opt_strs+951)
+#define OUTFILE_name      (certtool_opt_strs+959)
+#define OUTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  generate-self-signed option description:
+ */
+#define GENERATE_SELF_SIGNED_DESC      (certtool_opt_strs+967)
+#define GENERATE_SELF_SIGNED_NAME      (certtool_opt_strs+1002)
+#define GENERATE_SELF_SIGNED_name      (certtool_opt_strs+1023)
+#define GENERATE_SELF_SIGNED_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-certificate option description:
+ */
+#define GENERATE_CERTIFICATE_DESC      (certtool_opt_strs+1044)
+#define GENERATE_CERTIFICATE_NAME      (certtool_opt_strs+1074)
+#define GENERATE_CERTIFICATE_name      (certtool_opt_strs+1095)
+#define GENERATE_CERTIFICATE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-proxy option description:
+ */
+#define GENERATE_PROXY_DESC      (certtool_opt_strs+1116)
+#define GENERATE_PROXY_NAME      (certtool_opt_strs+1146)
+#define GENERATE_PROXY_name      (certtool_opt_strs+1161)
+#define GENERATE_PROXY_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-crl option description:
+ */
+#define GENERATE_CRL_DESC      (certtool_opt_strs+1176)
+#define GENERATE_CRL_NAME      (certtool_opt_strs+1191)
+#define GENERATE_CRL_name      (certtool_opt_strs+1204)
+#define GENERATE_CRL_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  update-certificate option description:
+ */
+#define UPDATE_CERTIFICATE_DESC      (certtool_opt_strs+1217)
+#define UPDATE_CERTIFICATE_NAME      (certtool_opt_strs+1245)
+#define UPDATE_CERTIFICATE_name      (certtool_opt_strs+1264)
+#define UPDATE_CERTIFICATE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-privkey option description:
+ */
+#define GENERATE_PRIVKEY_DESC      (certtool_opt_strs+1283)
+#define GENERATE_PRIVKEY_NAME      (certtool_opt_strs+1306)
+#define GENERATE_PRIVKEY_name      (certtool_opt_strs+1323)
+#define GENERATE_PRIVKEY_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-request option description:
+ */
+#define GENERATE_REQUEST_DESC      (certtool_opt_strs+1340)
+#define GENERATE_REQUEST_NAME      (certtool_opt_strs+1380)
+#define GENERATE_REQUEST_name      (certtool_opt_strs+1397)
+#define GENERATE_REQUEST_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  verify-chain option description:
+ */
+#define VERIFY_CHAIN_DESC      (certtool_opt_strs+1414)
+#define VERIFY_CHAIN_NAME      (certtool_opt_strs+1454)
+#define VERIFY_CHAIN_name      (certtool_opt_strs+1467)
+#define VERIFY_CHAIN_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  verify option description with
+ *  "Must also have options" and "Incompatible options":
+ */
+#define VERIFY_DESC      (certtool_opt_strs+1480)
+#define VERIFY_NAME      (certtool_opt_strs+1541)
+#define VERIFY_name      (certtool_opt_strs+1548)
+static int const aVerifyMustList[] = {
+    INDEX_OPT_LOAD_CA_CERTIFICATE, NO_EQUIVALENT };
+#define VERIFY_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  verify-crl option description with
+ *  "Must also have options" and "Incompatible options":
+ */
+#define VERIFY_CRL_DESC      (certtool_opt_strs+1555)
+#define VERIFY_CRL_NAME      (certtool_opt_strs+1590)
+#define VERIFY_CRL_name      (certtool_opt_strs+1601)
+static int const aVerify_CrlMustList[] = {
+    INDEX_OPT_LOAD_CA_CERTIFICATE, NO_EQUIVALENT };
+#define VERIFY_CRL_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-dh-params option description:
+ */
+#define GENERATE_DH_PARAMS_DESC      (certtool_opt_strs+1612)
+#define GENERATE_DH_PARAMS_NAME      (certtool_opt_strs+1664)
+#define GENERATE_DH_PARAMS_name      (certtool_opt_strs+1683)
+#define GENERATE_DH_PARAMS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  get-dh-params option description:
+ */
+#define GET_DH_PARAMS_DESC      (certtool_opt_strs+1702)
+#define GET_DH_PARAMS_NAME      (certtool_opt_strs+1762)
+#define GET_DH_PARAMS_name      (certtool_opt_strs+1776)
+#define GET_DH_PARAMS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  dh-info option description:
+ */
+#define DH_INFO_DESC      (certtool_opt_strs+1790)
+#define DH_INFO_NAME      (certtool_opt_strs+1850)
+#define DH_INFO_name      (certtool_opt_strs+1858)
+#define DH_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  load-privkey option description:
+ */
+#define LOAD_PRIVKEY_DESC      (certtool_opt_strs+1866)
+#define LOAD_PRIVKEY_NAME      (certtool_opt_strs+1891)
+#define LOAD_PRIVKEY_name      (certtool_opt_strs+1904)
+#define LOAD_PRIVKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  load-pubkey option description:
+ */
+#define LOAD_PUBKEY_DESC      (certtool_opt_strs+1917)
+#define LOAD_PUBKEY_NAME      (certtool_opt_strs+1941)
+#define LOAD_PUBKEY_name      (certtool_opt_strs+1953)
+#define LOAD_PUBKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  load-request option description:
+ */
+#define LOAD_REQUEST_DESC      (certtool_opt_strs+1965)
+#define LOAD_REQUEST_NAME      (certtool_opt_strs+1998)
+#define LOAD_REQUEST_name      (certtool_opt_strs+2011)
+#define LOAD_REQUEST_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-certificate option description:
+ */
+#define LOAD_CERTIFICATE_DESC      (certtool_opt_strs+2024)
+#define LOAD_CERTIFICATE_NAME      (certtool_opt_strs+2049)
+#define LOAD_CERTIFICATE_name      (certtool_opt_strs+2066)
+#define LOAD_CERTIFICATE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  load-ca-privkey option description:
+ */
+#define LOAD_CA_PRIVKEY_DESC      (certtool_opt_strs+2083)
+#define LOAD_CA_PRIVKEY_NAME      (certtool_opt_strs+2134)
+#define LOAD_CA_PRIVKEY_name      (certtool_opt_strs+2150)
+#define LOAD_CA_PRIVKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  load-ca-certificate option description:
+ */
+#define LOAD_CA_CERTIFICATE_DESC      (certtool_opt_strs+2166)
+#define LOAD_CA_CERTIFICATE_NAME      (certtool_opt_strs+2217)
+#define LOAD_CA_CERTIFICATE_name      (certtool_opt_strs+2237)
+#define LOAD_CA_CERTIFICATE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  password option description:
+ */
+#define PASSWORD_DESC      (certtool_opt_strs+2257)
+#define PASSWORD_NAME      (certtool_opt_strs+2273)
+#define PASSWORD_name      (certtool_opt_strs+2282)
+#define PASSWORD_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  certificate-info option description:
+ */
+#define CERTIFICATE_INFO_DESC      (certtool_opt_strs+2291)
+#define CERTIFICATE_INFO_NAME      (certtool_opt_strs+2334)
+#define CERTIFICATE_INFO_name      (certtool_opt_strs+2351)
+#define CERTIFICATE_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  certificate-pubkey option description:
+ */
+#define CERTIFICATE_PUBKEY_DESC      (certtool_opt_strs+2368)
+#define CERTIFICATE_PUBKEY_NAME      (certtool_opt_strs+2399)
+#define CERTIFICATE_PUBKEY_name      (certtool_opt_strs+2418)
+#define CERTIFICATE_PUBKEY_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  pgp-certificate-info option description:
+ */
+#define PGP_CERTIFICATE_INFO_DESC      (certtool_opt_strs+2437)
+#define PGP_CERTIFICATE_INFO_NAME      (certtool_opt_strs+2488)
+#define PGP_CERTIFICATE_INFO_name      (certtool_opt_strs+2509)
+#define PGP_CERTIFICATE_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  pgp-ring-info option description:
+ */
+#define PGP_RING_INFO_DESC      (certtool_opt_strs+2530)
+#define PGP_RING_INFO_NAME      (certtool_opt_strs+2587)
+#define PGP_RING_INFO_name      (certtool_opt_strs+2601)
+#define PGP_RING_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  crl-info option description:
+ */
+#define CRL_INFO_DESC      (certtool_opt_strs+2615)
+#define CRL_INFO_NAME      (certtool_opt_strs+2660)
+#define CRL_INFO_name      (certtool_opt_strs+2669)
+#define CRL_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  crq-info option description:
+ */
+#define CRQ_INFO_DESC      (certtool_opt_strs+2678)
+#define CRQ_INFO_NAME      (certtool_opt_strs+2729)
+#define CRQ_INFO_name      (certtool_opt_strs+2738)
+#define CRQ_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  no-crq-extensions option description:
+ */
+#define NO_CRQ_EXTENSIONS_DESC      (certtool_opt_strs+2747)
+#define NO_CRQ_EXTENSIONS_NAME      (certtool_opt_strs+2793)
+#define NO_CRQ_EXTENSIONS_name      (certtool_opt_strs+2811)
+#define NO_CRQ_EXTENSIONS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  p12-info option description:
+ */
+#define P12_INFO_DESC      (certtool_opt_strs+2829)
+#define P12_INFO_NAME      (certtool_opt_strs+2871)
+#define P12_INFO_name      (certtool_opt_strs+2880)
+#define P12_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  p7-info option description:
+ */
+#define P7_INFO_DESC      (certtool_opt_strs+2889)
+#define P7_INFO_NAME      (certtool_opt_strs+2930)
+#define P7_INFO_name      (certtool_opt_strs+2938)
+#define P7_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  smime-to-p7 option description:
+ */
+#define SMIME_TO_P7_DESC      (certtool_opt_strs+2946)
+#define SMIME_TO_P7_NAME      (certtool_opt_strs+2982)
+#define SMIME_TO_P7_name      (certtool_opt_strs+2994)
+#define SMIME_TO_P7_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  key-info option description:
+ */
+#define KEY_INFO_DESC      (certtool_opt_strs+3006)
+#define KEY_INFO_NAME      (certtool_opt_strs+3041)
+#define KEY_INFO_name      (certtool_opt_strs+3050)
+#define KEY_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  pgp-key-info option description:
+ */
+#define PGP_KEY_INFO_DESC      (certtool_opt_strs+3059)
+#define PGP_KEY_INFO_NAME      (certtool_opt_strs+3103)
+#define PGP_KEY_INFO_name      (certtool_opt_strs+3116)
+#define PGP_KEY_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  pubkey-info option description:
+ */
+#define PUBKEY_INFO_DESC      (certtool_opt_strs+3129)
+#define PUBKEY_INFO_NAME      (certtool_opt_strs+3163)
+#define PUBKEY_INFO_name      (certtool_opt_strs+3175)
+#define PUBKEY_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  v1 option description:
+ */
+#define V1_DESC      (certtool_opt_strs+3187)
+#define V1_NAME      (certtool_opt_strs+3248)
+#define V1_name      (certtool_opt_strs+3251)
+#define V1_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  to-p12 option description with
+ *  "Must also have options" and "Incompatible options":
+ */
+#define TO_P12_DESC      (certtool_opt_strs+3254)
+#define TO_P12_NAME      (certtool_opt_strs+3284)
+#define TO_P12_name      (certtool_opt_strs+3291)
+static int const aTo_P12MustList[] = {
+    INDEX_OPT_LOAD_CERTIFICATE, NO_EQUIVALENT };
+#define TO_P12_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  to-p8 option description:
+ */
+#define TO_P8_DESC      (certtool_opt_strs+3298)
+#define TO_P8_NAME      (certtool_opt_strs+3327)
+#define TO_P8_name      (certtool_opt_strs+3333)
+#define TO_P8_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  pkcs8 option description:
+ */
+#define PKCS8_DESC      (certtool_opt_strs+3339)
+#define PKCS8_NAME      (certtool_opt_strs+3375)
+#define PKCS8_name      (certtool_opt_strs+3381)
+#define PKCS8_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  rsa option description:
+ */
+#define RSA_DESC      (certtool_opt_strs+3387)
+#define RSA_NAME      (certtool_opt_strs+3404)
+#define RSA_name      (certtool_opt_strs+3408)
+#define RSA_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  dsa option description:
+ */
+#define DSA_DESC      (certtool_opt_strs+3412)
+#define DSA_NAME      (certtool_opt_strs+3429)
+#define DSA_name      (certtool_opt_strs+3433)
+#define DSA_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  ecc option description:
+ */
+#define ECC_DESC      (certtool_opt_strs+3437)
+#define ECC_NAME      (certtool_opt_strs+3462)
+#define ECC_name      (certtool_opt_strs+3466)
+#define ECC_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  hash option description:
+ */
+#define HASH_DESC      (certtool_opt_strs+3470)
+#define HASH_NAME      (certtool_opt_strs+3505)
+#define HASH_name      (certtool_opt_strs+3510)
+#define HASH_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  inder option description:
+ */
+#define INDER_DESC      (certtool_opt_strs+3515)
+#define INDER_NAME      (certtool_opt_strs+3571)
+#define NOT_INDER_name  (certtool_opt_strs+3577)
+#define NOT_INDER_PFX   (certtool_opt_strs+3586)
+#define INDER_name      (NOT_INDER_name + 3)
+#define INDER_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  inraw option description:
+ */
+#define INRAW_DESC    (certtool_opt_strs+3589)
+#define INRAW_NAME    NULL
+#define INRAW_name    (certtool_opt_strs+3618)
+#define INRAW_FLAGS     (INDER_FLAGS | OPTST_ALIAS)
+
+/*
+ *  outder option description:
+ */
+#define OUTDER_DESC      (certtool_opt_strs+3624)
+#define OUTDER_NAME      (certtool_opt_strs+3680)
+#define NOT_OUTDER_name  (certtool_opt_strs+3687)
+#define NOT_OUTDER_PFX   (certtool_opt_strs+3586)
+#define OUTDER_name      (NOT_OUTDER_name + 3)
+#define OUTDER_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  outraw option description:
+ */
+#define OUTRAW_DESC    (certtool_opt_strs+3697)
+#define OUTRAW_NAME    NULL
+#define OUTRAW_name    (certtool_opt_strs+3727)
+#define OUTRAW_FLAGS     (OUTDER_FLAGS | OPTST_ALIAS)
+
+/*
+ *  bits option description:
+ */
+#define BITS_DESC      (certtool_opt_strs+3734)
+#define BITS_NAME      (certtool_opt_strs+3778)
+#define BITS_name      (certtool_opt_strs+3783)
+#define BITS_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  sec-param option description:
+ */
+#define SEC_PARAM_DESC      (certtool_opt_strs+3788)
+#define SEC_PARAM_NAME      (certtool_opt_strs+3851)
+#define SEC_PARAM_name      (certtool_opt_strs+3861)
+#define SEC_PARAM_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  disable-quick-random option description:
+ */
+#define DISABLE_QUICK_RANDOM_DESC      (certtool_opt_strs+3871)
+#define DISABLE_QUICK_RANDOM_NAME      (certtool_opt_strs+3881)
+#define DISABLE_QUICK_RANDOM_name      (certtool_opt_strs+3902)
+#define DISABLE_QUICK_RANDOM_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  template option description:
+ */
+#define TEMPLATE_DESC      (certtool_opt_strs+3923)
+#define TEMPLATE_NAME      (certtool_opt_strs+3974)
+#define TEMPLATE_name      (certtool_opt_strs+3983)
+#define TEMPLATE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pkcs-cipher option description:
+ */
+#define PKCS_CIPHER_DESC      (certtool_opt_strs+3992)
+#define PKCS_CIPHER_NAME      (certtool_opt_strs+4037)
+#define PKCS_CIPHER_name      (certtool_opt_strs+4049)
+#define PKCS_CIPHER_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  Help/More_Help/Version option descriptions:
+ */
+#define HELP_DESC       (certtool_opt_strs+4061)
+#define HELP_name       (certtool_opt_strs+4105)
+#ifdef HAVE_WORKING_FORK
+#define MORE_HELP_DESC  (certtool_opt_strs+4110)
+#define MORE_HELP_name  (certtool_opt_strs+4155)
+#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#else
+#define MORE_HELP_DESC  NULL
+#define MORE_HELP_name  NULL
+#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        (certtool_opt_strs+4165)
+#define VER_name        (certtool_opt_strs+4201)
+/*
+ *  Declare option callback procedures
+ */
+extern tOptProc
+    optionBooleanVal,   optionNestedVal,    optionNumericVal,
+    optionPagedUsage,   optionPrintVersion, optionResetOpt,
+    optionStackArg,     optionTimeDate,     optionTimeVal,
+    optionUnstackArg,   optionVendorOption;
+static tOptProc
+    doOptDebug,        doOptInfile,       doOptInraw,
+    doOptLoad_Request, doOptOutraw,       doOptTemplate,
+    doUsageOpt;
+#define VER_PROC        optionPrintVersion
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ *  Define the certtool Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the certtool program responds to.
+ */
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_INFILE,
+     /* equiv idx, value */ 1, VALUE_OPT_INFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --infile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptInfile,
+     /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_OUTFILE,
+     /* equiv idx, value */ 2, VALUE_OPT_OUTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ OUTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --outfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 3, VALUE_OPT_GENERATE_SELF_SIGNED,
+     /* equiv idx, value */ 3, VALUE_OPT_GENERATE_SELF_SIGNED,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_SELF_SIGNED_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-self-signed */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_SELF_SIGNED_DESC, GENERATE_SELF_SIGNED_NAME, GENERATE_SELF_SIGNED_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 4, VALUE_OPT_GENERATE_CERTIFICATE,
+     /* equiv idx, value */ 4, VALUE_OPT_GENERATE_CERTIFICATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_CERTIFICATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-certificate */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_CERTIFICATE_DESC, GENERATE_CERTIFICATE_NAME, GENERATE_CERTIFICATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 5, VALUE_OPT_GENERATE_PROXY,
+     /* equiv idx, value */ 5, VALUE_OPT_GENERATE_PROXY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_PROXY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-proxy */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_PROXY_DESC, GENERATE_PROXY_NAME, GENERATE_PROXY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 6, VALUE_OPT_GENERATE_CRL,
+     /* equiv idx, value */ 6, VALUE_OPT_GENERATE_CRL,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_CRL_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-crl */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_CRL_DESC, GENERATE_CRL_NAME, GENERATE_CRL_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 7, VALUE_OPT_UPDATE_CERTIFICATE,
+     /* equiv idx, value */ 7, VALUE_OPT_UPDATE_CERTIFICATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ UPDATE_CERTIFICATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --update-certificate */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ UPDATE_CERTIFICATE_DESC, UPDATE_CERTIFICATE_NAME, UPDATE_CERTIFICATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 8, VALUE_OPT_GENERATE_PRIVKEY,
+     /* equiv idx, value */ 8, VALUE_OPT_GENERATE_PRIVKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_PRIVKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-privkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_PRIVKEY_DESC, GENERATE_PRIVKEY_NAME, GENERATE_PRIVKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 9, VALUE_OPT_GENERATE_REQUEST,
+     /* equiv idx, value */ 9, VALUE_OPT_GENERATE_REQUEST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_REQUEST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-request */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_REQUEST_DESC, GENERATE_REQUEST_NAME, GENERATE_REQUEST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 10, VALUE_OPT_VERIFY_CHAIN,
+     /* equiv idx, value */ 10, VALUE_OPT_VERIFY_CHAIN,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ VERIFY_CHAIN_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verify-chain */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERIFY_CHAIN_DESC, VERIFY_CHAIN_NAME, VERIFY_CHAIN_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 11, VALUE_OPT_VERIFY,
+     /* equiv idx, value */ 11, VALUE_OPT_VERIFY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ VERIFY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verify */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ aVerifyMustList, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERIFY_DESC, VERIFY_NAME, VERIFY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 12, VALUE_OPT_VERIFY_CRL,
+     /* equiv idx, value */ 12, VALUE_OPT_VERIFY_CRL,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ VERIFY_CRL_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verify-crl */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ aVerify_CrlMustList, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERIFY_CRL_DESC, VERIFY_CRL_NAME, VERIFY_CRL_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 13, VALUE_OPT_GENERATE_DH_PARAMS,
+     /* equiv idx, value */ 13, VALUE_OPT_GENERATE_DH_PARAMS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_DH_PARAMS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-dh-params */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_DH_PARAMS_DESC, GENERATE_DH_PARAMS_NAME, GENERATE_DH_PARAMS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 14, VALUE_OPT_GET_DH_PARAMS,
+     /* equiv idx, value */ 14, VALUE_OPT_GET_DH_PARAMS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GET_DH_PARAMS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --get-dh-params */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GET_DH_PARAMS_DESC, GET_DH_PARAMS_NAME, GET_DH_PARAMS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 15, VALUE_OPT_DH_INFO,
+     /* equiv idx, value */ 15, VALUE_OPT_DH_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DH_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --dh-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DH_INFO_DESC, DH_INFO_NAME, DH_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 16, VALUE_OPT_LOAD_PRIVKEY,
+     /* equiv idx, value */ 16, VALUE_OPT_LOAD_PRIVKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_PRIVKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-privkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LOAD_PRIVKEY_DESC, LOAD_PRIVKEY_NAME, LOAD_PRIVKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 17, VALUE_OPT_LOAD_PUBKEY,
+     /* equiv idx, value */ 17, VALUE_OPT_LOAD_PUBKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_PUBKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-pubkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LOAD_PUBKEY_DESC, LOAD_PUBKEY_NAME, LOAD_PUBKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 18, VALUE_OPT_LOAD_REQUEST,
+     /* equiv idx, value */ 18, VALUE_OPT_LOAD_REQUEST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_REQUEST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-request */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Request,
+     /* desc, NAME, name */ LOAD_REQUEST_DESC, LOAD_REQUEST_NAME, LOAD_REQUEST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 19, VALUE_OPT_LOAD_CERTIFICATE,
+     /* equiv idx, value */ 19, VALUE_OPT_LOAD_CERTIFICATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_CERTIFICATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-certificate */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LOAD_CERTIFICATE_DESC, LOAD_CERTIFICATE_NAME, LOAD_CERTIFICATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 20, VALUE_OPT_LOAD_CA_PRIVKEY,
+     /* equiv idx, value */ 20, VALUE_OPT_LOAD_CA_PRIVKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_CA_PRIVKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-ca-privkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LOAD_CA_PRIVKEY_DESC, LOAD_CA_PRIVKEY_NAME, LOAD_CA_PRIVKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 21, VALUE_OPT_LOAD_CA_CERTIFICATE,
+     /* equiv idx, value */ 21, VALUE_OPT_LOAD_CA_CERTIFICATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_CA_CERTIFICATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-ca-certificate */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LOAD_CA_CERTIFICATE_DESC, LOAD_CA_CERTIFICATE_NAME, LOAD_CA_CERTIFICATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 22, VALUE_OPT_PASSWORD,
+     /* equiv idx, value */ 22, VALUE_OPT_PASSWORD,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PASSWORD_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --password */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PASSWORD_DESC, PASSWORD_NAME, PASSWORD_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 23, VALUE_OPT_CERTIFICATE_INFO,
+     /* equiv idx, value */ 23, VALUE_OPT_CERTIFICATE_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ CERTIFICATE_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --certificate-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ CERTIFICATE_INFO_DESC, CERTIFICATE_INFO_NAME, CERTIFICATE_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 24, VALUE_OPT_CERTIFICATE_PUBKEY,
+     /* equiv idx, value */ 24, VALUE_OPT_CERTIFICATE_PUBKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ CERTIFICATE_PUBKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --certificate-pubkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ CERTIFICATE_PUBKEY_DESC, CERTIFICATE_PUBKEY_NAME, CERTIFICATE_PUBKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 25, VALUE_OPT_PGP_CERTIFICATE_INFO,
+     /* equiv idx, value */ 25, VALUE_OPT_PGP_CERTIFICATE_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGP_CERTIFICATE_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgp-certificate-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PGP_CERTIFICATE_INFO_DESC, PGP_CERTIFICATE_INFO_NAME, PGP_CERTIFICATE_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 26, VALUE_OPT_PGP_RING_INFO,
+     /* equiv idx, value */ 26, VALUE_OPT_PGP_RING_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGP_RING_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgp-ring-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PGP_RING_INFO_DESC, PGP_RING_INFO_NAME, PGP_RING_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 27, VALUE_OPT_CRL_INFO,
+     /* equiv idx, value */ 27, VALUE_OPT_CRL_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ CRL_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --crl-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ CRL_INFO_DESC, CRL_INFO_NAME, CRL_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 28, VALUE_OPT_CRQ_INFO,
+     /* equiv idx, value */ 28, VALUE_OPT_CRQ_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ CRQ_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --crq-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ CRQ_INFO_DESC, CRQ_INFO_NAME, CRQ_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 29, VALUE_OPT_NO_CRQ_EXTENSIONS,
+     /* equiv idx, value */ 29, VALUE_OPT_NO_CRQ_EXTENSIONS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ NO_CRQ_EXTENSIONS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --no-crq-extensions */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ NO_CRQ_EXTENSIONS_DESC, NO_CRQ_EXTENSIONS_NAME, NO_CRQ_EXTENSIONS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 30, VALUE_OPT_P12_INFO,
+     /* equiv idx, value */ 30, VALUE_OPT_P12_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ P12_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --p12-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ P12_INFO_DESC, P12_INFO_NAME, P12_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 31, VALUE_OPT_P7_INFO,
+     /* equiv idx, value */ 31, VALUE_OPT_P7_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ P7_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --p7-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ P7_INFO_DESC, P7_INFO_NAME, P7_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 32, VALUE_OPT_SMIME_TO_P7,
+     /* equiv idx, value */ 32, VALUE_OPT_SMIME_TO_P7,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SMIME_TO_P7_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --smime-to-p7 */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ SMIME_TO_P7_DESC, SMIME_TO_P7_NAME, SMIME_TO_P7_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 33, VALUE_OPT_KEY_INFO,
+     /* equiv idx, value */ 33, VALUE_OPT_KEY_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ KEY_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --key-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ KEY_INFO_DESC, KEY_INFO_NAME, KEY_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 34, VALUE_OPT_PGP_KEY_INFO,
+     /* equiv idx, value */ 34, VALUE_OPT_PGP_KEY_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGP_KEY_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgp-key-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PGP_KEY_INFO_DESC, PGP_KEY_INFO_NAME, PGP_KEY_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 35, VALUE_OPT_PUBKEY_INFO,
+     /* equiv idx, value */ 35, VALUE_OPT_PUBKEY_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PUBKEY_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pubkey-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PUBKEY_INFO_DESC, PUBKEY_INFO_NAME, PUBKEY_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 36, VALUE_OPT_V1,
+     /* equiv idx, value */ 36, VALUE_OPT_V1,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ V1_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --v1 */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ V1_DESC, V1_NAME, V1_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 37, VALUE_OPT_TO_P12,
+     /* equiv idx, value */ 37, VALUE_OPT_TO_P12,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ TO_P12_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --to-p12 */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ aTo_P12MustList, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ TO_P12_DESC, TO_P12_NAME, TO_P12_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 38, VALUE_OPT_TO_P8,
+     /* equiv idx, value */ 38, VALUE_OPT_TO_P8,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ TO_P8_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --to-p8 */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ TO_P8_DESC, TO_P8_NAME, TO_P8_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 39, VALUE_OPT_PKCS8,
+     /* equiv idx, value */ 39, VALUE_OPT_PKCS8,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PKCS8_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pkcs8 */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PKCS8_DESC, PKCS8_NAME, PKCS8_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 40, VALUE_OPT_RSA,
+     /* equiv idx, value */ 40, VALUE_OPT_RSA,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ RSA_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --rsa */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ RSA_DESC, RSA_NAME, RSA_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 41, VALUE_OPT_DSA,
+     /* equiv idx, value */ 41, VALUE_OPT_DSA,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DSA_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --dsa */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DSA_DESC, DSA_NAME, DSA_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 42, VALUE_OPT_ECC,
+     /* equiv idx, value */ 42, VALUE_OPT_ECC,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ ECC_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --ecc */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ ECC_DESC, ECC_NAME, ECC_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 43, VALUE_OPT_HASH,
+     /* equiv idx, value */ 43, VALUE_OPT_HASH,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ HASH_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --hash */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ HASH_DESC, HASH_NAME, HASH_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 44, VALUE_OPT_INDER,
+     /* equiv idx, value */ 44, VALUE_OPT_INDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --inder */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name,
+     /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX },
+
+  {  /* entry idx, value */ 45, VALUE_OPT_INRAW,
+     /* equiv idx, value */ 45, VALUE_OPT_INRAW,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INRAW_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --inraw */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptInraw,
+     /* desc, NAME, name */ INRAW_DESC, INRAW_NAME, INRAW_name,
+     /* disablement strs */ 0, 0 },
+
+  {  /* entry idx, value */ 46, VALUE_OPT_OUTDER,
+     /* equiv idx, value */ 46, VALUE_OPT_OUTDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ OUTDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --outder */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ OUTDER_DESC, OUTDER_NAME, OUTDER_name,
+     /* disablement strs */ NOT_OUTDER_name, NOT_OUTDER_PFX },
+
+  {  /* entry idx, value */ 47, VALUE_OPT_OUTRAW,
+     /* equiv idx, value */ 47, VALUE_OPT_OUTRAW,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ OUTRAW_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --outraw */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptOutraw,
+     /* desc, NAME, name */ OUTRAW_DESC, OUTRAW_NAME, OUTRAW_name,
+     /* disablement strs */ 0, 0 },
+
+  {  /* entry idx, value */ 48, VALUE_OPT_BITS,
+     /* equiv idx, value */ 48, VALUE_OPT_BITS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ BITS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --bits */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ optionNumericVal,
+     /* desc, NAME, name */ BITS_DESC, BITS_NAME, BITS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 49, VALUE_OPT_SEC_PARAM,
+     /* equiv idx, value */ 49, VALUE_OPT_SEC_PARAM,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SEC_PARAM_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --sec-param */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ SEC_PARAM_DESC, SEC_PARAM_NAME, SEC_PARAM_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 50, VALUE_OPT_DISABLE_QUICK_RANDOM,
+     /* equiv idx, value */ 50, VALUE_OPT_DISABLE_QUICK_RANDOM,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DISABLE_QUICK_RANDOM_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --disable-quick-random */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DISABLE_QUICK_RANDOM_DESC, DISABLE_QUICK_RANDOM_NAME, DISABLE_QUICK_RANDOM_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 51, VALUE_OPT_TEMPLATE,
+     /* equiv idx, value */ 51, VALUE_OPT_TEMPLATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ TEMPLATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --template */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptTemplate,
+     /* desc, NAME, name */ TEMPLATE_DESC, TEMPLATE_NAME, TEMPLATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 52, VALUE_OPT_PKCS_CIPHER,
+     /* equiv idx, value */ 52, VALUE_OPT_PKCS_CIPHER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PKCS_CIPHER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pkcs-cipher */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PKCS_CIPHER_DESC, PKCS_CIPHER_NAME, PKCS_CIPHER_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* 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, 0,
+     /* 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, 0,
+     /* 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, 0,
+     /* 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 }
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the certtool Option Environment
+ */
+#define zPROGNAME       (certtool_opt_strs+4209)
+#define zUsageTitle     (certtool_opt_strs+4218)
+#define zRcName         NULL
+#define apzHomeList     NULL
+#define zBugsAddr       (certtool_opt_strs+4325)
+#define zExplain        (certtool_opt_strs+4344)
+#define zDetail         (certtool_opt_strs+4347)
+#define zFullVersion    (certtool_opt_strs+4521)
+/* extracted from optcode.tlib near line 350 */
+
+#if defined(ENABLE_NLS)
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
+  static tOptionXlateProc translate_option_strings;
+#else
+# define OPTPROC_BASE OPTPROC_NONE
+# define translate_option_strings NULL
+#endif /* ENABLE_NLS */
+
+
+#define certtool_full_usage (NULL)
+
+#define certtool_short_usage (certtool_opt_strs+4540)
+
+#endif /* not defined __doxygen__ */
+
+/*
+ *  Create the static procedure(s) declared above.
+ */
+/**
+ * The callout function that invokes the optionUsage function.
+ *
+ * @param pOptions the AutoOpts option description structure
+ * @param pOptDesc the descriptor for the "help" (usage) option.
+ * @noreturn
+ */
+static void
+doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
+{
+    optionUsage(&certtoolOptions, CERTTOOL_EXIT_SUCCESS);
+    /* NOTREACHED */
+    (void)pOptDesc;
+    (void)pOptions;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the certtool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the infile option.
+ *
+ * @param pOptions the certtool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-request option.
+ *
+ * @param pOptions the certtool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Request(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the inraw option.
+ *
+ * @param pOptions the certtool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptInraw(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_INDER);
+    if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0))
+        USAGE(CERTTOOL_EXIT_FAILURE);
+
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the outraw option.
+ *
+ * @param pOptions the certtool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptOutraw(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_OUTDER);
+    if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0))
+        USAGE(CERTTOOL_EXIT_FAILURE);
+
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the template option.
+ *
+ * @param pOptions the certtool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptTemplate(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+/* extracted from optmain.tlib near line 1113 */
+
+/**
+ * The directory containing the data associated with certtool.
+ */
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
+
+/**
+ * Information about the person or institution that packaged certtool
+ * for the current distribution.
+ */
+#ifndef  WITH_PACKAGER
+# define certtool_packager_info NULL
+#else
+static char const certtool_packager_info[] =
+    "Packaged by " WITH_PACKAGER
+
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport certtool bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+#ifndef __doxygen__
+
+#endif /* __doxygen__ */
+/**
+ * The option definitions for certtool.  The one structure that
+ * binds them all.
+ */
+tOptions certtoolOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NEGATIONS
+    + OPTPROC_NO_ARGS
+    + 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 */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    56 /* full option count */, 53 /* user option count */,
+    certtool_full_usage, certtool_short_usage,
+    NULL, NULL,
+    PKGDATADIR, certtool_packager_info
+};
+
+#if ENABLE_NLS
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#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.
+ *
+ * @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* pzRes;
+    if (pz == NULL)
+        return NULL;
+    pzRes = _(pz);
+    if (pzRes == pz)
+        return pzRes;
+    pzRes = strdup(pzRes);
+    if (pzRes == NULL) {
+        fputs(_("No memory for duping translated strings\n"), stderr);
+        exit(CERTTOOL_EXIT_FAILURE);
+    }
+    return pzRes;
+}
+
+static void coerce_it(void** s) { *s = AO_gettext(*s);
+}
+
+/**
+ * Translate all the translatable strings in the certtoolOptions
+ * structure defined above.  This is done only once.
+ */
+static void
+translate_option_strings(void)
+{
+    tOptions * const pOpt = &certtoolOptions;
+
+    /*
+     *  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_usage_text.field_ct != 0) {
+        /*
+         *  Do the translations.  The first pointer follows the field count
+         *  field.  The field count field is the size of a pointer.
+         */
+        tOptDesc * pOD = pOpt->pOptDesc;
+        char **    ppz = (char**)(void*)&(option_usage_text);
+        int        ix  = option_usage_text.field_ct;
+
+        do {
+            ppz++;
+            *ppz = AO_gettext(*ppz);
+        } while (--ix > 0);
+
+        coerce_it((void*)&(pOpt->pzCopyright));
+        coerce_it((void*)&(pOpt->pzCopyNotice));
+        coerce_it((void*)&(pOpt->pzFullVersion));
+        coerce_it((void*)&(pOpt->pzUsageTitle));
+        coerce_it((void*)&(pOpt->pzExplain));
+        coerce_it((void*)&(pOpt->pzDetail));
+        coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
+        option_usage_text.field_ct = 0;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
+            coerce_it((void*)&(pOD->pzText));
+    }
+
+    if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
+        tOptDesc * pOD = pOpt->pOptDesc;
+        int        ix;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
+            coerce_it((void*)&(pOD->pz_Name));
+            coerce_it((void*)&(pOD->pz_DisableName));
+            coerce_it((void*)&(pOD->pz_DisablePfx));
+        }
+        /* prevent re-translation */
+        certtoolOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+    }
+}
+
+#endif /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+/* certtool-args.c ends here */
diff --git a/src/certtool-args.h b/src/certtool-args.h
new file mode 100644
index 0000000..7cf654f
--- /dev/null
+++ b/src/certtool-args.h
@@ -0,0 +1,289 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (certtool-args.h)
+ *  
+ *  It has been AutoGen-ed  June 25, 2012 at 07:40:45 PM by AutoGen 5.16
+ *  From the definitions    certtool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the certtool 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 certtool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  certtool 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.
+ *  
+ *  certtool 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the certtool program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_CERTTOOL_ARGS_H_GUARD
+#define AUTOOPTS_CERTTOOL_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG                 =  0,
+    INDEX_OPT_INFILE                =  1,
+    INDEX_OPT_OUTFILE               =  2,
+    INDEX_OPT_GENERATE_SELF_SIGNED  =  3,
+    INDEX_OPT_GENERATE_CERTIFICATE  =  4,
+    INDEX_OPT_GENERATE_PROXY        =  5,
+    INDEX_OPT_GENERATE_CRL          =  6,
+    INDEX_OPT_UPDATE_CERTIFICATE    =  7,
+    INDEX_OPT_GENERATE_PRIVKEY      =  8,
+    INDEX_OPT_GENERATE_REQUEST      =  9,
+    INDEX_OPT_VERIFY_CHAIN          = 10,
+    INDEX_OPT_VERIFY                = 11,
+    INDEX_OPT_VERIFY_CRL            = 12,
+    INDEX_OPT_GENERATE_DH_PARAMS    = 13,
+    INDEX_OPT_GET_DH_PARAMS         = 14,
+    INDEX_OPT_DH_INFO               = 15,
+    INDEX_OPT_LOAD_PRIVKEY          = 16,
+    INDEX_OPT_LOAD_PUBKEY           = 17,
+    INDEX_OPT_LOAD_REQUEST          = 18,
+    INDEX_OPT_LOAD_CERTIFICATE      = 19,
+    INDEX_OPT_LOAD_CA_PRIVKEY       = 20,
+    INDEX_OPT_LOAD_CA_CERTIFICATE   = 21,
+    INDEX_OPT_PASSWORD              = 22,
+    INDEX_OPT_CERTIFICATE_INFO      = 23,
+    INDEX_OPT_CERTIFICATE_PUBKEY    = 24,
+    INDEX_OPT_PGP_CERTIFICATE_INFO  = 25,
+    INDEX_OPT_PGP_RING_INFO         = 26,
+    INDEX_OPT_CRL_INFO              = 27,
+    INDEX_OPT_CRQ_INFO              = 28,
+    INDEX_OPT_NO_CRQ_EXTENSIONS     = 29,
+    INDEX_OPT_P12_INFO              = 30,
+    INDEX_OPT_P7_INFO               = 31,
+    INDEX_OPT_SMIME_TO_P7           = 32,
+    INDEX_OPT_KEY_INFO              = 33,
+    INDEX_OPT_PGP_KEY_INFO          = 34,
+    INDEX_OPT_PUBKEY_INFO           = 35,
+    INDEX_OPT_V1                    = 36,
+    INDEX_OPT_TO_P12                = 37,
+    INDEX_OPT_TO_P8                 = 38,
+    INDEX_OPT_PKCS8                 = 39,
+    INDEX_OPT_RSA                   = 40,
+    INDEX_OPT_DSA                   = 41,
+    INDEX_OPT_ECC                   = 42,
+    INDEX_OPT_HASH                  = 43,
+    INDEX_OPT_INDER                 = 44,
+    INDEX_OPT_INRAW                 = 45,
+    INDEX_OPT_OUTDER                = 46,
+    INDEX_OPT_OUTRAW                = 47,
+    INDEX_OPT_BITS                  = 48,
+    INDEX_OPT_SEC_PARAM             = 49,
+    INDEX_OPT_DISABLE_QUICK_RANDOM  = 50,
+    INDEX_OPT_TEMPLATE              = 51,
+    INDEX_OPT_PKCS_CIPHER           = 52,
+    INDEX_OPT_VERSION               = 53,
+    INDEX_OPT_HELP                  = 54,
+    INDEX_OPT_MORE_HELP             = 55
+} teOptIndex;
+
+#define OPTION_CT    56
+#define CERTTOOL_VERSION       "@VERSION@"
+#define CERTTOOL_FULL_VERSION  "certtool @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (certtoolOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of certtool exit codes
+ */
+typedef enum {
+    CERTTOOL_EXIT_SUCCESS = 0,
+    CERTTOOL_EXIT_FAILURE = 1,
+    CERTTOOL_EXIT_LIBOPTS_FAILURE = 70
+} certtool_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_INFILE         1
+#define VALUE_OPT_OUTFILE        2
+#define VALUE_OPT_GENERATE_SELF_SIGNED 's'
+#define VALUE_OPT_GENERATE_CERTIFICATE 'c'
+#define VALUE_OPT_GENERATE_PROXY 5
+#define VALUE_OPT_GENERATE_CRL   6
+#define VALUE_OPT_UPDATE_CERTIFICATE 'u'
+#define VALUE_OPT_GENERATE_PRIVKEY 'p'
+#define VALUE_OPT_GENERATE_REQUEST 'q'
+#define VALUE_OPT_VERIFY_CHAIN   'e'
+#define VALUE_OPT_VERIFY         11
+#define VALUE_OPT_VERIFY_CRL     12
+#define VALUE_OPT_GENERATE_DH_PARAMS 13
+#define VALUE_OPT_GET_DH_PARAMS  14
+#define VALUE_OPT_DH_INFO        15
+#define VALUE_OPT_LOAD_PRIVKEY   16
+#define VALUE_OPT_LOAD_PUBKEY    17
+#define VALUE_OPT_LOAD_REQUEST   18
+#define VALUE_OPT_LOAD_CERTIFICATE 19
+#define VALUE_OPT_LOAD_CA_PRIVKEY 20
+#define VALUE_OPT_LOAD_CA_CERTIFICATE 21
+#define VALUE_OPT_PASSWORD       22
+#define VALUE_OPT_CERTIFICATE_INFO 'i'
+#define VALUE_OPT_CERTIFICATE_PUBKEY 24
+#define VALUE_OPT_PGP_CERTIFICATE_INFO 25
+#define VALUE_OPT_PGP_RING_INFO  26
+#define VALUE_OPT_CRL_INFO       'l'
+#define VALUE_OPT_CRQ_INFO       28
+#define VALUE_OPT_NO_CRQ_EXTENSIONS 29
+#define VALUE_OPT_P12_INFO       30
+#define VALUE_OPT_P7_INFO        31
+#define VALUE_OPT_SMIME_TO_P7    32
+#define VALUE_OPT_KEY_INFO       'k'
+#define VALUE_OPT_PGP_KEY_INFO   130
+#define VALUE_OPT_PUBKEY_INFO    131
+#define VALUE_OPT_V1             132
+#define VALUE_OPT_TO_P12         133
+#define VALUE_OPT_TO_P8          134
+#define VALUE_OPT_PKCS8          '8'
+#define VALUE_OPT_RSA            136
+#define VALUE_OPT_DSA            137
+#define VALUE_OPT_ECC            138
+#define VALUE_OPT_HASH           139
+#define VALUE_OPT_INDER          140
+#define VALUE_OPT_INRAW          141
+#define VALUE_OPT_OUTDER         142
+#define VALUE_OPT_OUTRAW         143
+#define VALUE_OPT_BITS           144
+
+#define OPT_VALUE_BITS           (DESC(BITS).optArg.argInt)
+#define VALUE_OPT_SEC_PARAM      145
+#define VALUE_OPT_DISABLE_QUICK_RANDOM 146
+#define VALUE_OPT_TEMPLATE       147
+#define VALUE_OPT_PKCS_CIPHER    148
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(certtoolOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(certtoolOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                certtoolOptions.curOptIdx = (n); \
+                certtoolOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*certtoolOptions.pUsageProc)(&certtoolOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the certtool option descriptor.
+ */
+extern tOptions certtoolOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(certtoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(certtoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(certtoolOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(certtoolOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_CERTTOOL_ARGS_H_GUARD */
+/* certtool-args.h ends here */
diff --git a/src/cli-args.c b/src/cli-args.c
new file mode 100644
index 0000000..4559c09
--- /dev/null
+++ b/src/cli-args.c
@@ -0,0 +1,1423 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (cli-args.c)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:27 PM by AutoGen 5.16
+ *  From the definitions    cli-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 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 gnutls-cli 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 gnutls-cli program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  gnutls-cli 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.
+ *  
+ *  gnutls-cli 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 "cli-args.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;
+
+/* TRANSLATORS: choose the translation for option names wisely because you
+                cannot ever change your mind. */
+#define zCopyright      (gnutls_cli_opt_strs+0)
+#define zLicenseDescrip (gnutls_cli_opt_strs+281)
+
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ *  gnutls-cli option static const strings
+ */
+static char const gnutls_cli_opt_strs[3376] =
+/*     0 */ "gnutls-cli @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
+            "This is free software. It is licensed for use, modification and\n"
+            "redistribution under the terms of the\n"
+            "GNU General Public License, version 3 or later\n"
+            "    <http://gnu.org/licenses/gpl.html>\n\0"
+/*   281 */ "gnutls-cli is free software: you can redistribute it and/or modify it under\n"
+            "the terms of the GNU General Public License as published by the Free\n"
+            "Software Foundation, either version 3 of the License, or (at your option)\n"
+            "any later version.\n\n"
+            "gnutls-cli is distributed in the hope that it will be useful, but WITHOUT\n"
+            "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
+            "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
+            "more 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"
+/*   890 */ "Enable debugging.\0"
+/*   908 */ "DEBUG\0"
+/*   914 */ "debug\0"
+/*   920 */ "More verbose output\0"
+/*   940 */ "VERBOSE\0"
+/*   948 */ "verbose\0"
+/*   956 */ "Enable trust on first use authentication\0"
+/*   997 */ "TOFU\0"
+/*  1002 */ "no-tofu\0"
+/*  1010 */ "no\0"
+/*  1013 */ "Enable OCSP certificate verification\0"
+/*  1050 */ "OCSP\0"
+/*  1055 */ "no-ocsp\0"
+/*  1063 */ "Establish a session and resume\0"
+/*  1094 */ "RESUME\0"
+/*  1101 */ "resume\0"
+/*  1108 */ "Establish a session and rehandshake\0"
+/*  1144 */ "REHANDSHAKE\0"
+/*  1156 */ "rehandshake\0"
+/*  1168 */ "Don't accept session tickets\0"
+/*  1197 */ "NOTICKET\0"
+/*  1206 */ "noticket\0"
+/*  1215 */ "Connect, establish a plain session and start TLS.\0"
+/*  1265 */ "STARTTLS\0"
+/*  1274 */ "starttls\0"
+/*  1283 */ "Use DTLS (datagram TLS) over UDP\0"
+/*  1316 */ "UDP\0"
+/*  1320 */ "udp\0"
+/*  1324 */ "Set MTU for datagram TLS\0"
+/*  1349 */ "MTU\0"
+/*  1353 */ "mtu\0"
+/*  1357 */ "Send CR LF instead of LF\0"
+/*  1382 */ "CRLF\0"
+/*  1387 */ "crlf\0"
+/*  1392 */ "Use DER format for certificates to read from\0"
+/*  1437 */ "X509FMTDER\0"
+/*  1448 */ "x509fmtder\0"
+/*  1459 */ "Send the openpgp fingerprint, instead of the key\0"
+/*  1508 */ "FINGERPRINT\0"
+/*  1520 */ "fingerprint\0"
+/*  1532 */ "Disable all the TLS extensions\0"
+/*  1563 */ "DISABLE_EXTENSIONS\0"
+/*  1582 */ "disable-extensions\0"
+/*  1601 */ "Print peer's certificate in PEM format\0"
+/*  1640 */ "PRINT_CERT\0"
+/*  1651 */ "print-cert\0"
+/*  1662 */ "The maximum record size to advertize\0"
+/*  1699 */ "RECORDSIZE\0"
+/*  1710 */ "recordsize\0"
+/*  1721 */ "Priorities string\0"
+/*  1739 */ "PRIORITY\0"
+/*  1748 */ "priority\0"
+/*  1757 */ "Certificate file or PKCS #11 URL to use\0"
+/*  1797 */ "X509CAFILE\0"
+/*  1808 */ "x509cafile\0"
+/*  1819 */ "CRL file to use\0"
+/*  1835 */ "X509CRLFILE\0"
+/*  1847 */ "x509crlfile\0"
+/*  1859 */ "PGP Key file to use\0"
+/*  1879 */ "PGPKEYFILE\0"
+/*  1890 */ "pgpkeyfile\0"
+/*  1901 */ "PGP Key ring file to use\0"
+/*  1926 */ "PGPKEYRING\0"
+/*  1937 */ "pgpkeyring\0"
+/*  1948 */ "PGP Public Key (certificate) file to use\0"
+/*  1989 */ "PGPCERTFILE\0"
+/*  2001 */ "pgpcertfile\0"
+/*  2013 */ "X.509 key file or PKCS #11 URL to use\0"
+/*  2051 */ "X509KEYFILE\0"
+/*  2063 */ "x509keyfile\0"
+/*  2075 */ "X.509 Certificate file or PKCS #11 URL to use\0"
+/*  2121 */ "X509CERTFILE\0"
+/*  2134 */ "x509certfile\0"
+/*  2147 */ "PGP subkey to use (hex or auto)\0"
+/*  2179 */ "PGPSUBKEY\0"
+/*  2189 */ "pgpsubkey\0"
+/*  2199 */ "SRP username to use\0"
+/*  2219 */ "SRPUSERNAME\0"
+/*  2231 */ "srpusername\0"
+/*  2243 */ "SRP password to use\0"
+/*  2263 */ "SRPPASSWD\0"
+/*  2273 */ "srppasswd\0"
+/*  2283 */ "PSK username to use\0"
+/*  2303 */ "PSKUSERNAME\0"
+/*  2315 */ "pskusername\0"
+/*  2327 */ "PSK key (in hex) to use\0"
+/*  2351 */ "PSKKEY\0"
+/*  2358 */ "pskkey\0"
+/*  2365 */ "The port or service to connect to\0"
+/*  2399 */ "PORT\0"
+/*  2404 */ "port\0"
+/*  2409 */ "Don't abort program if server certificate can't be validated\0"
+/*  2470 */ "INSECURE\0"
+/*  2479 */ "insecure\0"
+/*  2488 */ "Benchmark individual ciphers\0"
+/*  2517 */ "BENCHMARK_CIPHERS\0"
+/*  2535 */ "benchmark-ciphers\0"
+/*  2553 */ "Benchmark individual software ciphers (no hw acceleration)\0"
+/*  2612 */ "BENCHMARK_SOFT_CIPHERS\0"
+/*  2635 */ "benchmark-soft-ciphers\0"
+/*  2658 */ "Benchmark ciphers and key exchange methods in TLS\0"
+/*  2708 */ "BENCHMARK_TLS\0"
+/*  2722 */ "benchmark-tls\0"
+/*  2736 */ "Print a list of the supported algorithms and modes\0"
+/*  2787 */ "LIST\0"
+/*  2792 */ "list\0"
+/*  2797 */ "Display extended usage information and exit\0"
+/*  2841 */ "help\0"
+/*  2846 */ "Extended usage information passed thru pager\0"
+/*  2891 */ "more-help\0"
+/*  2901 */ "Output version information and exit\0"
+/*  2937 */ "version\0"
+/*  2945 */ "GNUTLS_CLI\0"
+/*  2956 */ "gnutls-cli - GnuTLS client - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [hostname]\n\0"
+/*  3069 */ "[email protected]\0"
+/*  3088 */ "\n\n\0"
+/*  3091 */ "\n"
+            "Simple client program to set up a TLS connection to some other computer.  It\n"
+            "sets up a TLS connection and forwards data from the standard input to the\n"
+            "secured socket and vice versa.\n\0"
+/*  3275 */ "gnutls-cli @VERSION@\0"
+/*  3296 */ "Usage: gnutls-cli [options] hostname\n"
+            "gnutls-cli --help for usage instructions.\n";
+
+/*
+ *  debug option description:
+ */
+#define DEBUG_DESC      (gnutls_cli_opt_strs+890)
+#define DEBUG_NAME      (gnutls_cli_opt_strs+908)
+#define DEBUG_name      (gnutls_cli_opt_strs+914)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  verbose option description:
+ */
+#define VERBOSE_DESC      (gnutls_cli_opt_strs+920)
+#define VERBOSE_NAME      (gnutls_cli_opt_strs+940)
+#define VERBOSE_name      (gnutls_cli_opt_strs+948)
+#define VERBOSE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  tofu option description:
+ */
+#define TOFU_DESC      (gnutls_cli_opt_strs+956)
+#define TOFU_NAME      (gnutls_cli_opt_strs+997)
+#define NOT_TOFU_name  (gnutls_cli_opt_strs+1002)
+#define NOT_TOFU_PFX   (gnutls_cli_opt_strs+1010)
+#define TOFU_name      (NOT_TOFU_name + 3)
+#define TOFU_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  ocsp option description:
+ */
+#define OCSP_DESC      (gnutls_cli_opt_strs+1013)
+#define OCSP_NAME      (gnutls_cli_opt_strs+1050)
+#define NOT_OCSP_name  (gnutls_cli_opt_strs+1055)
+#define NOT_OCSP_PFX   (gnutls_cli_opt_strs+1010)
+#define OCSP_name      (NOT_OCSP_name + 3)
+#define OCSP_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  resume option description:
+ */
+#define RESUME_DESC      (gnutls_cli_opt_strs+1063)
+#define RESUME_NAME      (gnutls_cli_opt_strs+1094)
+#define RESUME_name      (gnutls_cli_opt_strs+1101)
+#define RESUME_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  rehandshake option description:
+ */
+#define REHANDSHAKE_DESC      (gnutls_cli_opt_strs+1108)
+#define REHANDSHAKE_NAME      (gnutls_cli_opt_strs+1144)
+#define REHANDSHAKE_name      (gnutls_cli_opt_strs+1156)
+#define REHANDSHAKE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  noticket option description:
+ */
+#define NOTICKET_DESC      (gnutls_cli_opt_strs+1168)
+#define NOTICKET_NAME      (gnutls_cli_opt_strs+1197)
+#define NOTICKET_name      (gnutls_cli_opt_strs+1206)
+#define NOTICKET_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  starttls option description:
+ */
+#define STARTTLS_DESC      (gnutls_cli_opt_strs+1215)
+#define STARTTLS_NAME      (gnutls_cli_opt_strs+1265)
+#define STARTTLS_name      (gnutls_cli_opt_strs+1274)
+#define STARTTLS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  udp option description:
+ */
+#define UDP_DESC      (gnutls_cli_opt_strs+1283)
+#define UDP_NAME      (gnutls_cli_opt_strs+1316)
+#define UDP_name      (gnutls_cli_opt_strs+1320)
+#define UDP_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  mtu option description:
+ */
+#define MTU_DESC      (gnutls_cli_opt_strs+1324)
+#define MTU_NAME      (gnutls_cli_opt_strs+1349)
+#define MTU_name      (gnutls_cli_opt_strs+1353)
+#define MTU_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  crlf option description:
+ */
+#define CRLF_DESC      (gnutls_cli_opt_strs+1357)
+#define CRLF_NAME      (gnutls_cli_opt_strs+1382)
+#define CRLF_name      (gnutls_cli_opt_strs+1387)
+#define CRLF_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  x509fmtder option description:
+ */
+#define X509FMTDER_DESC      (gnutls_cli_opt_strs+1392)
+#define X509FMTDER_NAME      (gnutls_cli_opt_strs+1437)
+#define X509FMTDER_name      (gnutls_cli_opt_strs+1448)
+#define X509FMTDER_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  fingerprint option description:
+ */
+#define FINGERPRINT_DESC      (gnutls_cli_opt_strs+1459)
+#define FINGERPRINT_NAME      (gnutls_cli_opt_strs+1508)
+#define FINGERPRINT_name      (gnutls_cli_opt_strs+1520)
+#define FINGERPRINT_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  disable-extensions option description:
+ */
+#define DISABLE_EXTENSIONS_DESC      (gnutls_cli_opt_strs+1532)
+#define DISABLE_EXTENSIONS_NAME      (gnutls_cli_opt_strs+1563)
+#define DISABLE_EXTENSIONS_name      (gnutls_cli_opt_strs+1582)
+#define DISABLE_EXTENSIONS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  print-cert option description:
+ */
+#define PRINT_CERT_DESC      (gnutls_cli_opt_strs+1601)
+#define PRINT_CERT_NAME      (gnutls_cli_opt_strs+1640)
+#define PRINT_CERT_name      (gnutls_cli_opt_strs+1651)
+#define PRINT_CERT_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  recordsize option description:
+ */
+#define RECORDSIZE_DESC      (gnutls_cli_opt_strs+1662)
+#define RECORDSIZE_NAME      (gnutls_cli_opt_strs+1699)
+#define RECORDSIZE_name      (gnutls_cli_opt_strs+1710)
+#define RECORDSIZE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  priority option description:
+ */
+#define PRIORITY_DESC      (gnutls_cli_opt_strs+1721)
+#define PRIORITY_NAME      (gnutls_cli_opt_strs+1739)
+#define PRIORITY_name      (gnutls_cli_opt_strs+1748)
+#define PRIORITY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509cafile option description:
+ */
+#define X509CAFILE_DESC      (gnutls_cli_opt_strs+1757)
+#define X509CAFILE_NAME      (gnutls_cli_opt_strs+1797)
+#define X509CAFILE_name      (gnutls_cli_opt_strs+1808)
+#define X509CAFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509crlfile option description:
+ */
+#define X509CRLFILE_DESC      (gnutls_cli_opt_strs+1819)
+#define X509CRLFILE_NAME      (gnutls_cli_opt_strs+1835)
+#define X509CRLFILE_name      (gnutls_cli_opt_strs+1847)
+#define X509CRLFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pgpkeyfile option description:
+ */
+#define PGPKEYFILE_DESC      (gnutls_cli_opt_strs+1859)
+#define PGPKEYFILE_NAME      (gnutls_cli_opt_strs+1879)
+#define PGPKEYFILE_name      (gnutls_cli_opt_strs+1890)
+#define PGPKEYFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pgpkeyring option description:
+ */
+#define PGPKEYRING_DESC      (gnutls_cli_opt_strs+1901)
+#define PGPKEYRING_NAME      (gnutls_cli_opt_strs+1926)
+#define PGPKEYRING_name      (gnutls_cli_opt_strs+1937)
+#define PGPKEYRING_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pgpcertfile option description:
+ */
+#define PGPCERTFILE_DESC      (gnutls_cli_opt_strs+1948)
+#define PGPCERTFILE_NAME      (gnutls_cli_opt_strs+1989)
+#define PGPCERTFILE_name      (gnutls_cli_opt_strs+2001)
+#define PGPCERTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  x509keyfile option description:
+ */
+#define X509KEYFILE_DESC      (gnutls_cli_opt_strs+2013)
+#define X509KEYFILE_NAME      (gnutls_cli_opt_strs+2051)
+#define X509KEYFILE_name      (gnutls_cli_opt_strs+2063)
+#define X509KEYFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509certfile option description:
+ */
+#define X509CERTFILE_DESC      (gnutls_cli_opt_strs+2075)
+#define X509CERTFILE_NAME      (gnutls_cli_opt_strs+2121)
+#define X509CERTFILE_name      (gnutls_cli_opt_strs+2134)
+#define X509CERTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  pgpsubkey option description:
+ */
+#define PGPSUBKEY_DESC      (gnutls_cli_opt_strs+2147)
+#define PGPSUBKEY_NAME      (gnutls_cli_opt_strs+2179)
+#define PGPSUBKEY_name      (gnutls_cli_opt_strs+2189)
+#define PGPSUBKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  srpusername option description:
+ */
+#define SRPUSERNAME_DESC      (gnutls_cli_opt_strs+2199)
+#define SRPUSERNAME_NAME      (gnutls_cli_opt_strs+2219)
+#define SRPUSERNAME_name      (gnutls_cli_opt_strs+2231)
+#define SRPUSERNAME_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  srppasswd option description:
+ */
+#define SRPPASSWD_DESC      (gnutls_cli_opt_strs+2243)
+#define SRPPASSWD_NAME      (gnutls_cli_opt_strs+2263)
+#define SRPPASSWD_name      (gnutls_cli_opt_strs+2273)
+#define SRPPASSWD_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  pskusername option description:
+ */
+#define PSKUSERNAME_DESC      (gnutls_cli_opt_strs+2283)
+#define PSKUSERNAME_NAME      (gnutls_cli_opt_strs+2303)
+#define PSKUSERNAME_name      (gnutls_cli_opt_strs+2315)
+#define PSKUSERNAME_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  pskkey option description:
+ */
+#define PSKKEY_DESC      (gnutls_cli_opt_strs+2327)
+#define PSKKEY_NAME      (gnutls_cli_opt_strs+2351)
+#define PSKKEY_name      (gnutls_cli_opt_strs+2358)
+#define PSKKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  port option description:
+ */
+#define PORT_DESC      (gnutls_cli_opt_strs+2365)
+#define PORT_NAME      (gnutls_cli_opt_strs+2399)
+#define PORT_name      (gnutls_cli_opt_strs+2404)
+#define PORT_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  insecure option description:
+ */
+#define INSECURE_DESC      (gnutls_cli_opt_strs+2409)
+#define INSECURE_NAME      (gnutls_cli_opt_strs+2470)
+#define INSECURE_name      (gnutls_cli_opt_strs+2479)
+#define INSECURE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  benchmark-ciphers option description:
+ */
+#define BENCHMARK_CIPHERS_DESC      (gnutls_cli_opt_strs+2488)
+#define BENCHMARK_CIPHERS_NAME      (gnutls_cli_opt_strs+2517)
+#define BENCHMARK_CIPHERS_name      (gnutls_cli_opt_strs+2535)
+#define BENCHMARK_CIPHERS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  benchmark-soft-ciphers option description:
+ */
+#define BENCHMARK_SOFT_CIPHERS_DESC      (gnutls_cli_opt_strs+2553)
+#define BENCHMARK_SOFT_CIPHERS_NAME      (gnutls_cli_opt_strs+2612)
+#define BENCHMARK_SOFT_CIPHERS_name      (gnutls_cli_opt_strs+2635)
+#define BENCHMARK_SOFT_CIPHERS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  benchmark-tls option description:
+ */
+#define BENCHMARK_TLS_DESC      (gnutls_cli_opt_strs+2658)
+#define BENCHMARK_TLS_NAME      (gnutls_cli_opt_strs+2708)
+#define BENCHMARK_TLS_name      (gnutls_cli_opt_strs+2722)
+#define BENCHMARK_TLS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list option description:
+ */
+#define LIST_DESC      (gnutls_cli_opt_strs+2736)
+#define LIST_NAME      (gnutls_cli_opt_strs+2787)
+#define LIST_name      (gnutls_cli_opt_strs+2792)
+#define LIST_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  Help/More_Help/Version option descriptions:
+ */
+#define HELP_DESC       (gnutls_cli_opt_strs+2797)
+#define HELP_name       (gnutls_cli_opt_strs+2841)
+#ifdef HAVE_WORKING_FORK
+#define MORE_HELP_DESC  (gnutls_cli_opt_strs+2846)
+#define MORE_HELP_name  (gnutls_cli_opt_strs+2891)
+#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#else
+#define MORE_HELP_DESC  NULL
+#define MORE_HELP_name  NULL
+#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        (gnutls_cli_opt_strs+2901)
+#define VER_name        (gnutls_cli_opt_strs+2937)
+/*
+ *  Declare option callback procedures
+ */
+extern tOptProc
+    optionBooleanVal,   optionNestedVal,    optionNumericVal,
+    optionPagedUsage,   optionPrintVersion, optionResetOpt,
+    optionStackArg,     optionTimeDate,     optionTimeVal,
+    optionUnstackArg,   optionVendorOption;
+static tOptProc
+    doOptDebug,       doOptMtu,         doOptPgpcertfile, doOptPgpkeyfile,
+    doOptPgpkeyring,  doOptRecordsize,  doOptX509crlfile, doUsageOpt;
+#define VER_PROC        optionPrintVersion
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ *  Define the gnutls-cli Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the gnutls-cli program responds to.
+ */
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_VERBOSE,
+     /* equiv idx, value */ 1, VALUE_OPT_VERBOSE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, NOLIMIT, 0,
+     /* opt state flags  */ VERBOSE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verbose */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_TOFU,
+     /* equiv idx, value */ 2, VALUE_OPT_TOFU,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ TOFU_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --tofu */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ TOFU_DESC, TOFU_NAME, TOFU_name,
+     /* disablement strs */ NOT_TOFU_name, NOT_TOFU_PFX },
+
+  {  /* entry idx, value */ 3, VALUE_OPT_OCSP,
+     /* equiv idx, value */ 3, VALUE_OPT_OCSP,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ OCSP_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --ocsp */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ OCSP_DESC, OCSP_NAME, OCSP_name,
+     /* disablement strs */ NOT_OCSP_name, NOT_OCSP_PFX },
+
+  {  /* entry idx, value */ 4, VALUE_OPT_RESUME,
+     /* equiv idx, value */ 4, VALUE_OPT_RESUME,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ RESUME_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --resume */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ RESUME_DESC, RESUME_NAME, RESUME_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 5, VALUE_OPT_REHANDSHAKE,
+     /* equiv idx, value */ 5, VALUE_OPT_REHANDSHAKE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ REHANDSHAKE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --rehandshake */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ REHANDSHAKE_DESC, REHANDSHAKE_NAME, REHANDSHAKE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 6, VALUE_OPT_NOTICKET,
+     /* equiv idx, value */ 6, VALUE_OPT_NOTICKET,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ NOTICKET_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --noticket */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ NOTICKET_DESC, NOTICKET_NAME, NOTICKET_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 7, VALUE_OPT_STARTTLS,
+     /* equiv idx, value */ 7, VALUE_OPT_STARTTLS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ STARTTLS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --starttls */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ STARTTLS_DESC, STARTTLS_NAME, STARTTLS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 8, VALUE_OPT_UDP,
+     /* equiv idx, value */ 8, VALUE_OPT_UDP,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ UDP_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --udp */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ UDP_DESC, UDP_NAME, UDP_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 9, VALUE_OPT_MTU,
+     /* equiv idx, value */ 9, VALUE_OPT_MTU,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ MTU_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --mtu */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptMtu,
+     /* desc, NAME, name */ MTU_DESC, MTU_NAME, MTU_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 10, VALUE_OPT_CRLF,
+     /* equiv idx, value */ 10, VALUE_OPT_CRLF,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ CRLF_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --crlf */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ CRLF_DESC, CRLF_NAME, CRLF_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 11, VALUE_OPT_X509FMTDER,
+     /* equiv idx, value */ 11, VALUE_OPT_X509FMTDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509FMTDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509fmtder */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509FMTDER_DESC, X509FMTDER_NAME, X509FMTDER_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 12, VALUE_OPT_FINGERPRINT,
+     /* equiv idx, value */ 12, VALUE_OPT_FINGERPRINT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ FINGERPRINT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --fingerprint */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ FINGERPRINT_DESC, FINGERPRINT_NAME, FINGERPRINT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 13, VALUE_OPT_DISABLE_EXTENSIONS,
+     /* equiv idx, value */ 13, VALUE_OPT_DISABLE_EXTENSIONS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DISABLE_EXTENSIONS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --disable-extensions */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DISABLE_EXTENSIONS_DESC, DISABLE_EXTENSIONS_NAME, DISABLE_EXTENSIONS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 14, VALUE_OPT_PRINT_CERT,
+     /* equiv idx, value */ 14, VALUE_OPT_PRINT_CERT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PRINT_CERT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --print-cert */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PRINT_CERT_DESC, PRINT_CERT_NAME, PRINT_CERT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 15, VALUE_OPT_RECORDSIZE,
+     /* equiv idx, value */ 15, VALUE_OPT_RECORDSIZE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ RECORDSIZE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --recordsize */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptRecordsize,
+     /* desc, NAME, name */ RECORDSIZE_DESC, RECORDSIZE_NAME, RECORDSIZE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 16, VALUE_OPT_PRIORITY,
+     /* equiv idx, value */ 16, VALUE_OPT_PRIORITY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PRIORITY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --priority */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PRIORITY_DESC, PRIORITY_NAME, PRIORITY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 17, VALUE_OPT_X509CAFILE,
+     /* equiv idx, value */ 17, VALUE_OPT_X509CAFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509CAFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509cafile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509CAFILE_DESC, X509CAFILE_NAME, X509CAFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 18, VALUE_OPT_X509CRLFILE,
+     /* equiv idx, value */ 18, VALUE_OPT_X509CRLFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509CRLFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509crlfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptX509crlfile,
+     /* desc, NAME, name */ X509CRLFILE_DESC, X509CRLFILE_NAME, X509CRLFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 19, VALUE_OPT_PGPKEYFILE,
+     /* equiv idx, value */ 19, VALUE_OPT_PGPKEYFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPKEYFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpkeyfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPgpkeyfile,
+     /* desc, NAME, name */ PGPKEYFILE_DESC, PGPKEYFILE_NAME, PGPKEYFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 20, VALUE_OPT_PGPKEYRING,
+     /* equiv idx, value */ 20, VALUE_OPT_PGPKEYRING,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPKEYRING_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpkeyring */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPgpkeyring,
+     /* desc, NAME, name */ PGPKEYRING_DESC, PGPKEYRING_NAME, PGPKEYRING_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 21, VALUE_OPT_PGPCERTFILE,
+     /* equiv idx, value */ 21, VALUE_OPT_PGPCERTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPCERTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpcertfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPgpcertfile,
+     /* desc, NAME, name */ PGPCERTFILE_DESC, PGPCERTFILE_NAME, PGPCERTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 22, VALUE_OPT_X509KEYFILE,
+     /* equiv idx, value */ 22, VALUE_OPT_X509KEYFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509KEYFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509keyfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509KEYFILE_DESC, X509KEYFILE_NAME, X509KEYFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 23, VALUE_OPT_X509CERTFILE,
+     /* equiv idx, value */ 23, VALUE_OPT_X509CERTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509CERTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509certfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509CERTFILE_DESC, X509CERTFILE_NAME, X509CERTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 24, VALUE_OPT_PGPSUBKEY,
+     /* equiv idx, value */ 24, VALUE_OPT_PGPSUBKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPSUBKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpsubkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PGPSUBKEY_DESC, PGPSUBKEY_NAME, PGPSUBKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 25, VALUE_OPT_SRPUSERNAME,
+     /* equiv idx, value */ 25, VALUE_OPT_SRPUSERNAME,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SRPUSERNAME_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --srpusername */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ SRPUSERNAME_DESC, SRPUSERNAME_NAME, SRPUSERNAME_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 26, VALUE_OPT_SRPPASSWD,
+     /* equiv idx, value */ 26, VALUE_OPT_SRPPASSWD,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SRPPASSWD_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --srppasswd */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ SRPPASSWD_DESC, SRPPASSWD_NAME, SRPPASSWD_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 27, VALUE_OPT_PSKUSERNAME,
+     /* equiv idx, value */ 27, VALUE_OPT_PSKUSERNAME,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PSKUSERNAME_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pskusername */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PSKUSERNAME_DESC, PSKUSERNAME_NAME, PSKUSERNAME_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 28, VALUE_OPT_PSKKEY,
+     /* equiv idx, value */ 28, VALUE_OPT_PSKKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PSKKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pskkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PSKKEY_DESC, PSKKEY_NAME, PSKKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 29, VALUE_OPT_PORT,
+     /* equiv idx, value */ 29, VALUE_OPT_PORT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PORT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --port */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 30, VALUE_OPT_INSECURE,
+     /* equiv idx, value */ 30, VALUE_OPT_INSECURE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INSECURE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --insecure */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ INSECURE_DESC, INSECURE_NAME, INSECURE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 31, VALUE_OPT_BENCHMARK_CIPHERS,
+     /* equiv idx, value */ 31, VALUE_OPT_BENCHMARK_CIPHERS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ BENCHMARK_CIPHERS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --benchmark-ciphers */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ BENCHMARK_CIPHERS_DESC, BENCHMARK_CIPHERS_NAME, BENCHMARK_CIPHERS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 32, VALUE_OPT_BENCHMARK_SOFT_CIPHERS,
+     /* equiv idx, value */ 32, VALUE_OPT_BENCHMARK_SOFT_CIPHERS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ BENCHMARK_SOFT_CIPHERS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --benchmark-soft-ciphers */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ BENCHMARK_SOFT_CIPHERS_DESC, BENCHMARK_SOFT_CIPHERS_NAME, BENCHMARK_SOFT_CIPHERS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 33, VALUE_OPT_BENCHMARK_TLS,
+     /* equiv idx, value */ 33, VALUE_OPT_BENCHMARK_TLS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ BENCHMARK_TLS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --benchmark-tls */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ BENCHMARK_TLS_DESC, BENCHMARK_TLS_NAME, BENCHMARK_TLS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 34, VALUE_OPT_LIST,
+     /* equiv idx, value */ 34, VALUE_OPT_LIST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* 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, 0,
+     /* 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, 0,
+     /* 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, 0,
+     /* 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 }
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the gnutls-cli Option Environment
+ */
+#define zPROGNAME       (gnutls_cli_opt_strs+2945)
+#define zUsageTitle     (gnutls_cli_opt_strs+2956)
+#define zRcName         NULL
+#define apzHomeList     NULL
+#define zBugsAddr       (gnutls_cli_opt_strs+3069)
+#define zExplain        (gnutls_cli_opt_strs+3088)
+#define zDetail         (gnutls_cli_opt_strs+3091)
+#define zFullVersion    (gnutls_cli_opt_strs+3275)
+/* extracted from optcode.tlib near line 350 */
+
+#if defined(ENABLE_NLS)
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
+  static tOptionXlateProc translate_option_strings;
+#else
+# define OPTPROC_BASE OPTPROC_NONE
+# define translate_option_strings NULL
+#endif /* ENABLE_NLS */
+
+
+#define gnutls_cli_full_usage (NULL)
+
+#define gnutls_cli_short_usage (gnutls_cli_opt_strs+3296)
+
+#endif /* not defined __doxygen__ */
+
+/*
+ *  Create the static procedure(s) declared above.
+ */
+/**
+ * The callout function that invokes the optionUsage function.
+ *
+ * @param pOptions the AutoOpts option description structure
+ * @param pOptDesc the descriptor for the "help" (usage) option.
+ * @noreturn
+ */
+static void
+doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
+{
+    optionUsage(&gnutls_cliOptions, GNUTLS_CLI_EXIT_SUCCESS);
+    /* NOTREACHED */
+    (void)pOptDesc;
+    (void)pOptions;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the mtu option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptMtu(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0, 17000 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the recordsize option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptRecordsize(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0, 4096 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the x509crlfile option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pgpkeyfile option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pgpkeyring option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pgpcertfile option.
+ *
+ * @param pOptions the gnutls-cli options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+/* extracted from optmain.tlib near line 1113 */
+
+/**
+ * The directory containing the data associated with gnutls-cli.
+ */
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
+
+/**
+ * Information about the person or institution that packaged gnutls-cli
+ * for the current distribution.
+ */
+#ifndef  WITH_PACKAGER
+# define gnutls_cli_packager_info NULL
+#else
+static char const gnutls_cli_packager_info[] =
+    "Packaged by " WITH_PACKAGER
+
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport gnutls_cli bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+#ifndef __doxygen__
+
+#endif /* __doxygen__ */
+/**
+ * The option definitions for gnutls-cli.  The one structure that
+ * binds them all.
+ */
+tOptions gnutls_cliOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NEGATIONS
+    + OPTPROC_REORDER
+    + 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 */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    38 /* full option count */, 35 /* user option count */,
+    gnutls_cli_full_usage, gnutls_cli_short_usage,
+    NULL, NULL,
+    PKGDATADIR, gnutls_cli_packager_info
+};
+
+#if ENABLE_NLS
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#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.
+ *
+ * @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* pzRes;
+    if (pz == NULL)
+        return NULL;
+    pzRes = _(pz);
+    if (pzRes == pz)
+        return pzRes;
+    pzRes = strdup(pzRes);
+    if (pzRes == NULL) {
+        fputs(_("No memory for duping translated strings\n"), stderr);
+        exit(GNUTLS_CLI_EXIT_FAILURE);
+    }
+    return pzRes;
+}
+
+static void coerce_it(void** s) { *s = AO_gettext(*s);
+}
+
+/**
+ * Translate all the translatable strings in the gnutls_cliOptions
+ * structure defined above.  This is done only once.
+ */
+static void
+translate_option_strings(void)
+{
+    tOptions * const pOpt = &gnutls_cliOptions;
+
+    /*
+     *  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_usage_text.field_ct != 0) {
+        /*
+         *  Do the translations.  The first pointer follows the field count
+         *  field.  The field count field is the size of a pointer.
+         */
+        tOptDesc * pOD = pOpt->pOptDesc;
+        char **    ppz = (char**)(void*)&(option_usage_text);
+        int        ix  = option_usage_text.field_ct;
+
+        do {
+            ppz++;
+            *ppz = AO_gettext(*ppz);
+        } while (--ix > 0);
+
+        coerce_it((void*)&(pOpt->pzCopyright));
+        coerce_it((void*)&(pOpt->pzCopyNotice));
+        coerce_it((void*)&(pOpt->pzFullVersion));
+        coerce_it((void*)&(pOpt->pzUsageTitle));
+        coerce_it((void*)&(pOpt->pzExplain));
+        coerce_it((void*)&(pOpt->pzDetail));
+        coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
+        option_usage_text.field_ct = 0;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
+            coerce_it((void*)&(pOD->pzText));
+    }
+
+    if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
+        tOptDesc * pOD = pOpt->pOptDesc;
+        int        ix;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
+            coerce_it((void*)&(pOD->pz_Name));
+            coerce_it((void*)&(pOD->pz_DisableName));
+            coerce_it((void*)&(pOD->pz_DisablePfx));
+        }
+        /* prevent re-translation */
+        gnutls_cliOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+    }
+}
+
+#endif /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+/* cli-args.c ends here */
diff --git a/src/cli-args.h b/src/cli-args.h
new file mode 100644
index 0000000..28240f6
--- /dev/null
+++ b/src/cli-args.h
@@ -0,0 +1,255 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (cli-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:27 PM by AutoGen 5.16
+ *  From the definitions    cli-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the gnutls-cli 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 gnutls-cli program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  gnutls-cli 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.
+ *  
+ *  gnutls-cli 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the gnutls-cli program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_CLI_ARGS_H_GUARD
+#define AUTOOPTS_CLI_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG                   =  0,
+    INDEX_OPT_VERBOSE                 =  1,
+    INDEX_OPT_TOFU                    =  2,
+    INDEX_OPT_OCSP                    =  3,
+    INDEX_OPT_RESUME                  =  4,
+    INDEX_OPT_REHANDSHAKE             =  5,
+    INDEX_OPT_NOTICKET                =  6,
+    INDEX_OPT_STARTTLS                =  7,
+    INDEX_OPT_UDP                     =  8,
+    INDEX_OPT_MTU                     =  9,
+    INDEX_OPT_CRLF                    = 10,
+    INDEX_OPT_X509FMTDER              = 11,
+    INDEX_OPT_FINGERPRINT             = 12,
+    INDEX_OPT_DISABLE_EXTENSIONS      = 13,
+    INDEX_OPT_PRINT_CERT              = 14,
+    INDEX_OPT_RECORDSIZE              = 15,
+    INDEX_OPT_PRIORITY                = 16,
+    INDEX_OPT_X509CAFILE              = 17,
+    INDEX_OPT_X509CRLFILE             = 18,
+    INDEX_OPT_PGPKEYFILE              = 19,
+    INDEX_OPT_PGPKEYRING              = 20,
+    INDEX_OPT_PGPCERTFILE             = 21,
+    INDEX_OPT_X509KEYFILE             = 22,
+    INDEX_OPT_X509CERTFILE            = 23,
+    INDEX_OPT_PGPSUBKEY               = 24,
+    INDEX_OPT_SRPUSERNAME             = 25,
+    INDEX_OPT_SRPPASSWD               = 26,
+    INDEX_OPT_PSKUSERNAME             = 27,
+    INDEX_OPT_PSKKEY                  = 28,
+    INDEX_OPT_PORT                    = 29,
+    INDEX_OPT_INSECURE                = 30,
+    INDEX_OPT_BENCHMARK_CIPHERS       = 31,
+    INDEX_OPT_BENCHMARK_SOFT_CIPHERS  = 32,
+    INDEX_OPT_BENCHMARK_TLS           = 33,
+    INDEX_OPT_LIST                    = 34,
+    INDEX_OPT_VERSION                 = 35,
+    INDEX_OPT_HELP                    = 36,
+    INDEX_OPT_MORE_HELP               = 37
+} teOptIndex;
+
+#define OPTION_CT    38
+#define GNUTLS_CLI_VERSION       "@VERSION@"
+#define GNUTLS_CLI_FULL_VERSION  "gnutls-cli @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (gnutls_cliOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of gnutls-cli exit codes
+ */
+typedef enum {
+    GNUTLS_CLI_EXIT_SUCCESS = 0,
+    GNUTLS_CLI_EXIT_FAILURE = 1,
+    GNUTLS_CLI_EXIT_LIBOPTS_FAILURE = 70
+} gnutls_cli_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_VERBOSE        'V'
+#define VALUE_OPT_TOFU           2
+#define VALUE_OPT_OCSP           3
+#define VALUE_OPT_RESUME         'r'
+#define VALUE_OPT_REHANDSHAKE    'e'
+#define VALUE_OPT_NOTICKET       6
+#define VALUE_OPT_STARTTLS       's'
+#define VALUE_OPT_UDP            'u'
+#define VALUE_OPT_MTU            9
+
+#define OPT_VALUE_MTU            (DESC(MTU).optArg.argInt)
+#define VALUE_OPT_CRLF           10
+#define VALUE_OPT_X509FMTDER     11
+#define VALUE_OPT_FINGERPRINT    'f'
+#define VALUE_OPT_DISABLE_EXTENSIONS 13
+#define VALUE_OPT_PRINT_CERT     14
+#define VALUE_OPT_RECORDSIZE     15
+
+#define OPT_VALUE_RECORDSIZE     (DESC(RECORDSIZE).optArg.argInt)
+#define VALUE_OPT_PRIORITY       16
+#define VALUE_OPT_X509CAFILE     17
+#define VALUE_OPT_X509CRLFILE    18
+#define VALUE_OPT_PGPKEYFILE     19
+#define VALUE_OPT_PGPKEYRING     20
+#define VALUE_OPT_PGPCERTFILE    21
+#define VALUE_OPT_X509KEYFILE    22
+#define VALUE_OPT_X509CERTFILE   23
+#define VALUE_OPT_PGPSUBKEY      24
+#define VALUE_OPT_SRPUSERNAME    25
+#define VALUE_OPT_SRPPASSWD      26
+#define VALUE_OPT_PSKUSERNAME    27
+#define VALUE_OPT_PSKKEY         28
+#define VALUE_OPT_PORT           'p'
+#define VALUE_OPT_INSECURE       30
+#define VALUE_OPT_BENCHMARK_CIPHERS 31
+#define VALUE_OPT_BENCHMARK_SOFT_CIPHERS 32
+#define VALUE_OPT_BENCHMARK_TLS  129
+#define VALUE_OPT_LIST           'l'
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(gnutls_cliOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(gnutls_cliOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                gnutls_cliOptions.curOptIdx = (n); \
+                gnutls_cliOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*gnutls_cliOptions.pUsageProc)(&gnutls_cliOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the gnutls-cli option descriptor.
+ */
+extern tOptions gnutls_cliOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(gnutls_cliOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(gnutls_cliOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(gnutls_cliOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(gnutls_cliOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_CLI_ARGS_H_GUARD */
+/* cli-args.h ends here */
diff --git a/src/libopts/genshell.c b/src/cli-debug-args.c
similarity index 50%
copy from src/libopts/genshell.c
copy to src/cli-debug-args.c
index 16ca245..dbee341 100644
--- a/src/libopts/genshell.c
+++ b/src/cli-debug-args.c
@@ -1,36 +1,36 @@
 /*   -*- buffer-read-only: t -*- vi: set ro:
  *  
- *  DO NOT EDIT THIS FILE   (genshell.c)
+ *  DO NOT EDIT THIS FILE   (cli-debug-args.c)
  *  
- *  It has been AutoGen-ed  May  6, 2012 at 04:20:59 PM by AutoGen 5.16pre36
- *  From the definitions    genshell.def
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:27 PM by AutoGen 5.16
+ *  From the definitions    cli-debug-args.def
  *  and the template file   options
  *
  * Generated from AutoOpts 36:4:11 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 genshellopt author or copyright holder.  AutoOpts is
+ *  by the gnutls-cli-debug 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 genshellopt program is copyrighted and licensed
+ * The gnutls-cli-debug program is copyrighted and licensed
  * under the following terms:
  *
- *  Copyright (C) 1999-2012 Bruce Korb, all rights reserved.
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
  *
- *  genshellopt is free software: you can redistribute it and/or modify it
+ *  gnutls-cli-debug 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.
  *  
- *  genshellopt is distributed in the hope that it will be useful, but
+ *  gnutls-cli-debug 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.
@@ -41,12 +41,13 @@
 
 #ifndef __doxygen__
 #define OPTION_CODE_COMPILE 1
-#include "genshell.h"
+#include "cli-debug-args.h"
 #include <sys/types.h>
 
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <errno.h>
 
 #ifdef  __cplusplus
 extern "C" {
@@ -55,90 +56,99 @@ extern FILE * option_usage_fp;
 
 /* TRANSLATORS: choose the translation for option names wisely because you
                 cannot ever change your mind. */
-#define zCopyright      (genshellopt_opt_strs+0)
-#define zLicenseDescrip (genshellopt_opt_strs+260)
+#define zCopyright      (gnutls_cli_debug_opt_strs+0)
+#define zLicenseDescrip (gnutls_cli_debug_opt_strs+287)
 
-extern tUsageProc genshelloptUsage;
 
 #ifndef NULL
 #  define NULL 0
 #endif
 
 /*
- *  genshellopt option static const strings
+ *  gnutls-cli-debug option static const strings
  */
-static char const genshellopt_opt_strs[1690] =
-/*     0 */ "genshellopt 1\n"
-            "Copyright (C) 1999-2012 Bruce Korb, all rights reserved.\n"
+static char const gnutls_cli_debug_opt_strs[1841] =
+/*     0 */ "gnutls-cli-debug @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
             "This is free software. It is licensed for use, modification and\n"
             "redistribution under the terms of the\n"
             "GNU General Public License, version 3 or later\n"
             "    <http://gnu.org/licenses/gpl.html>\n\0"
-/*   260 */ "genshellopt is free software: you can redistribute it and/or modify it\n"
+/*   287 */ "gnutls-cli-debug is free software: you can redistribute it and/or modify it\n"
             "under the terms of the GNU General Public License as published by the Free\n"
             "Software Foundation, either version 3 of the License, or (at your option)\n"
             "any later version.\n\n"
-            "genshellopt is distributed in the hope that it will be useful, but WITHOUT\n"
-            "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
-            "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
-            "more details.\n\n"
+            "gnutls-cli-debug is distributed in the hope that it will be useful, but\n"
+            "WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n"
+            "or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n"
+            "for more 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"
-/*   871 */ "Output Script File\0"
-/*   890 */ "SCRIPT\0"
-/*   897 */ "script\0"
-/*   904 */ "Shell name (follows \"#!\" magic)\0"
-/*   936 */ "SHELL\0"
-/*   942 */ "no-shell\0"
-/*   951 */ "no\0"
-/*   954 */ "Display extended usage information and exit\0"
-/*   998 */ "help\0"
-/*  1003 */ "Extended usage information passed thru pager\0"
-/*  1048 */ "more-help\0"
-/*  1058 */ "Output version information and exit\0"
-/*  1094 */ "version\0"
-/*  1102 */ "GENSHELLOPT\0"
-/*  1114 */ "genshellopt - Generate Shell Option Processing Script - Ver. 1\n"
-            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
-/*  1235 */ "[email protected]\0"
-/*  1271 */ "\n"
-            "Note that ``shell'' is only useful if the output file does not already\n"
-            "exist.  If it does, then the shell name and optional first argument will be\n"
-            "extracted from the script file.\n\0"
-/*  1452 */ "\n"
-            "If the script file already exists and contains Automated Option Processing\n"
-            "text, the second line of the file through the ending tag will be replaced\n"
-            "by the newly generated text.  The first ``#!'' line will be regenerated.\n\0"
-/*  1676 */ "genshellopt 1";
+/*   908 */ "Enable debugging.\0"
+/*   926 */ "DEBUG\0"
+/*   932 */ "debug\0"
+/*   938 */ "More verbose output\0"
+/*   958 */ "VERBOSE\0"
+/*   966 */ "verbose\0"
+/*   974 */ "The port to connect to\0"
+/*   997 */ "PORT\0"
+/*  1002 */ "port\0"
+/*  1007 */ "Display extended usage information and exit\0"
+/*  1051 */ "help\0"
+/*  1056 */ "Extended usage information passed thru pager\0"
+/*  1101 */ "more-help\0"
+/*  1111 */ "Output version information and exit\0"
+/*  1147 */ "version\0"
+/*  1155 */ "GNUTLS_CLI_DEBUG\0"
+/*  1172 */ "gnutls-cli-debug - GnuTLS debug client - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \n\0"
+/*  1287 */ "[email protected]\0"
+/*  1306 */ "\n\n\0"
+/*  1309 */ "\n"
+            "TLS debug client.  It sets up multiple TLS connections to a server and\n"
+            "queries its capabilities.  It was created to assist in debugging GnuTLS,\n"
+            "but it might be useful to extract a TLS server's capabilities.  It connects\n"
+            "to a TLS server, performs tests and print the server's capabilities.  If\n"
+            "called with the `-v' parameter more checks will be performed.  Can be used\n"
+            "to check for servers with special needs or bugs.\n\0"
+/*  1728 */ "gnutls-cli-debug @VERSION@\0"
+/*  1755 */ "Usage: gnutls-cli-debug [options] hostname\n"
+            "gnutls-cli --help for usage instructions.\n";
 
 /*
- *  script option description:
+ *  debug option description:
  */
-#define SCRIPT_DESC      (genshellopt_opt_strs+871)
-#define SCRIPT_NAME      (genshellopt_opt_strs+890)
-#define SCRIPT_name      (genshellopt_opt_strs+897)
-#define SCRIPT_FLAGS     (OPTST_DISABLED \
-        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+#define DEBUG_DESC      (gnutls_cli_debug_opt_strs+908)
+#define DEBUG_NAME      (gnutls_cli_debug_opt_strs+926)
+#define DEBUG_name      (gnutls_cli_debug_opt_strs+932)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
- *  shell option description:
+ *  verbose option description:
  */
-#define SHELL_DESC      (genshellopt_opt_strs+904)
-#define SHELL_NAME      (genshellopt_opt_strs+936)
-#define NOT_SHELL_name  (genshellopt_opt_strs+942)
-#define NOT_SHELL_PFX   (genshellopt_opt_strs+951)
-#define SHELL_name      (NOT_SHELL_name + 3)
-#define SHELL_FLAGS     (OPTST_INITENABLED \
-        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+#define VERBOSE_DESC      (gnutls_cli_debug_opt_strs+938)
+#define VERBOSE_NAME      (gnutls_cli_debug_opt_strs+958)
+#define VERBOSE_name      (gnutls_cli_debug_opt_strs+966)
+#define VERBOSE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  port option description:
+ */
+#define PORT_DESC      (gnutls_cli_debug_opt_strs+974)
+#define PORT_NAME      (gnutls_cli_debug_opt_strs+997)
+#define PORT_name      (gnutls_cli_debug_opt_strs+1002)
+#define PORT_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
  *  Help/More_Help/Version option descriptions:
  */
-#define HELP_DESC       (genshellopt_opt_strs+954)
-#define HELP_name       (genshellopt_opt_strs+998)
+#define HELP_DESC       (gnutls_cli_debug_opt_strs+1007)
+#define HELP_name       (gnutls_cli_debug_opt_strs+1051)
 #ifdef HAVE_WORKING_FORK
-#define MORE_HELP_DESC  (genshellopt_opt_strs+1003)
-#define MORE_HELP_name  (genshellopt_opt_strs+1048)
+#define MORE_HELP_DESC  (gnutls_cli_debug_opt_strs+1056)
+#define MORE_HELP_name  (gnutls_cli_debug_opt_strs+1101)
 #define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
 #else
 #define MORE_HELP_DESC  NULL
@@ -151,8 +161,8 @@ static char const genshellopt_opt_strs[1690] =
 #  define VER_FLAGS     (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
                          OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
 #endif
-#define VER_DESC        (genshellopt_opt_strs+1058)
-#define VER_name        (genshellopt_opt_strs+1094)
+#define VER_DESC        (gnutls_cli_debug_opt_strs+1111)
+#define VER_name        (gnutls_cli_debug_opt_strs+1147)
 /*
  *  Declare option callback procedures
  */
@@ -162,42 +172,54 @@ extern tOptProc
     optionStackArg,     optionTimeDate,     optionTimeVal,
     optionUnstackArg,   optionVendorOption;
 static tOptProc
-    doUsageOpt;
+    doOptDebug, doOptPort, doUsageOpt;
 #define VER_PROC        optionPrintVersion
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 /**
- *  Define the genshellopt Option Descriptions.
- * This is an array of GENSHELL_OPTION_CT entries, one for each
- * option that the genshellopt program responds to.
+ *  Define the gnutls-cli-debug Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the gnutls-cli-debug program responds to.
  */
-static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
-  {  /* entry idx, value */ 0, VALUE_GENSHELL_OPT_SCRIPT,
-     /* equiv idx, value */ 0, VALUE_GENSHELL_OPT_SCRIPT,
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ SCRIPT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --script */
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_VERBOSE,
+     /* equiv idx, value */ 1, VALUE_OPT_VERBOSE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, NOLIMIT, 0,
+     /* opt state flags  */ VERBOSE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verbose */
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ SCRIPT_DESC, SCRIPT_NAME, SCRIPT_name,
+     /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 1, VALUE_GENSHELL_OPT_SHELL,
-     /* equiv idx, value */ 1, VALUE_GENSHELL_OPT_SHELL,
+  {  /* entry idx, value */ 2, VALUE_OPT_PORT,
+     /* equiv idx, value */ 2, VALUE_OPT_PORT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ SHELL_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --shell */
+     /* opt state flags  */ PORT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --port */
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
-     /* option proc      */ NULL,
-     /* desc, NAME, name */ SHELL_DESC, SHELL_NAME, SHELL_name,
-     /* disablement strs */ NOT_SHELL_name, NOT_SHELL_PFX },
+     /* option proc      */ doOptPort,
+     /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name,
+     /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ INDEX_GENSHELL_OPT_VERSION, VALUE_GENSHELL_OPT_VERSION,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_GENSHELL_OPT_VERSION,
+  {  /* 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, 0,
@@ -210,8 +232,8 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 
 
 
-  {  /* entry idx, value */ INDEX_GENSHELL_OPT_HELP, VALUE_GENSHELL_OPT_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_GENSHELL_OPT_HELP,
+  {  /* 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, 0,
@@ -222,8 +244,8 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
      /* desc, NAME, name */ HELP_DESC, NULL, HELP_name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ INDEX_GENSHELL_OPT_MORE_HELP, VALUE_GENSHELL_OPT_MORE_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_GENSHELL_OPT_MORE_HELP,
+  {  /* 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, 0,
@@ -238,20 +260,20 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- *  Define the genshellopt Option Environment
+ *  Define the gnutls-cli-debug Option Environment
  */
-#define zPROGNAME       (genshellopt_opt_strs+1102)
-#define zUsageTitle     (genshellopt_opt_strs+1114)
+#define zPROGNAME       (gnutls_cli_debug_opt_strs+1155)
+#define zUsageTitle     (gnutls_cli_debug_opt_strs+1172)
 #define zRcName         NULL
 #define apzHomeList     NULL
-#define zBugsAddr       (genshellopt_opt_strs+1235)
-#define zExplain        (genshellopt_opt_strs+1271)
-#define zDetail         (genshellopt_opt_strs+1452)
-#define zFullVersion    (genshellopt_opt_strs+1676)
+#define zBugsAddr       (gnutls_cli_debug_opt_strs+1287)
+#define zExplain        (gnutls_cli_debug_opt_strs+1306)
+#define zDetail         (gnutls_cli_debug_opt_strs+1309)
+#define zFullVersion    (gnutls_cli_debug_opt_strs+1728)
 /* extracted from optcode.tlib near line 350 */
 
 #if defined(ENABLE_NLS)
-# define OPTPROC_BASE OPTPROC_TRANSLATE
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
   static tOptionXlateProc translate_option_strings;
 #else
 # define OPTPROC_BASE OPTPROC_NONE
@@ -259,9 +281,9 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 #endif /* ENABLE_NLS */
 
 
-#define genshellopt_full_usage (NULL)
+#define gnutls_cli_debug_full_usage (NULL)
 
-#define genshellopt_short_usage (NULL)
+#define gnutls_cli_debug_short_usage (gnutls_cli_debug_opt_strs+1755)
 
 #endif /* not defined __doxygen__ */
 
@@ -269,7 +291,7 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
  *  Create the static procedure(s) declared above.
  */
 /**
- * The callout function that invokes the genshelloptUsage function.
+ * The callout function that invokes the optionUsage function.
  *
  * @param pOptions the AutoOpts option description structure
  * @param pOptDesc the descriptor for the "help" (usage) option.
@@ -278,28 +300,100 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 static void
 doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
 {
-    genshelloptUsage(&genshelloptOptions, GENSHELLOPT_EXIT_SUCCESS);
+    optionUsage(&gnutls_cli_debugOptions, GNUTLS_CLI_DEBUG_EXIT_SUCCESS);
     /* NOTREACHED */
     (void)pOptDesc;
     (void)pOptions;
 }
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the gnutls-cli-debug options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the port option.
+ *
+ * @param pOptions the gnutls-cli-debug options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPort(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  65536 } };
+    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, (void *)rng, 1);
+}
 /* extracted from optmain.tlib near line 1113 */
 
 /**
- * The directory containing the data associated with genshellopt.
+ * The directory containing the data associated with gnutls-cli-debug.
  */
 #ifndef  PKGDATADIR
 # define PKGDATADIR ""
 #endif
 
 /**
- * Information about the person or institution that packaged genshellopt
+ * Information about the person or institution that packaged gnutls-cli-debug
  * for the current distribution.
  */
 #ifndef  WITH_PACKAGER
-# define genshellopt_packager_info NULL
+# define gnutls_cli_debug_packager_info NULL
 #else
-static char const genshellopt_packager_info[] =
+static char const gnutls_cli_debug_packager_info[] =
     "Packaged by " WITH_PACKAGER
 
 # ifdef WITH_PACKAGER_VERSION
@@ -307,7 +401,7 @@ static char const genshellopt_packager_info[] =
 # endif
 
 # ifdef WITH_PACKAGER_BUG_REPORTS
-    "\nReport genshellopt bugs to " WITH_PACKAGER_BUG_REPORTS
+    "\nReport gnutls_cli_debug bugs to " WITH_PACKAGER_BUG_REPORTS
 # endif
     "\n";
 #endif
@@ -315,10 +409,10 @@ static char const genshellopt_packager_info[] =
 
 #endif /* __doxygen__ */
 /**
- * The option definitions for genshellopt.  The one structure that
+ * The option definitions for gnutls-cli-debug.  The one structure that
  * binds them all.
  */
-tOptions genshelloptOptions = {
+tOptions gnutls_cli_debugOptions = {
     OPTIONS_STRUCT_VERSION,
     0, NULL,                    /* original argc + argv    */
     ( OPTPROC_BASE
@@ -326,8 +420,10 @@ tOptions genshelloptOptions = {
     + OPTPROC_SHORTOPT
     + OPTPROC_LONGOPT
     + OPTPROC_NO_REQ_OPT
-    + OPTPROC_NEGATIONS
-    + OPTPROC_NO_ARGS ),
+    + OPTPROC_ARGS_REQ
+    + OPTPROC_REORDER
+    + OPTPROC_GNUUSAGE
+    + OPTPROC_MISUSE ),
     0, NULL,                    /* current option index, current option */
     NULL,         NULL,         zPROGNAME,
     zRcName,      zCopyright,   zLicenseDescrip,
@@ -335,20 +431,20 @@ tOptions genshelloptOptions = {
     zExplain,     zDetail,      optDesc,
     zBugsAddr,                  /* address to send bugs to */
     NULL, NULL,                 /* extensions/saved state  */
-    genshelloptUsage, /* usage procedure */
+    optionUsage, /* usage procedure */
     translate_option_strings,   /* translation procedure */
     /*
      *  Indexes to special options
      */
-    { INDEX_GENSHELL_OPT_MORE_HELP, /* more-help option index */
+    { INDEX_OPT_MORE_HELP, /* more-help option index */
       NO_EQUIVALENT, /* save option index */
       NO_EQUIVALENT, /* '-#' option index */
       NO_EQUIVALENT /* index of default opt */
     },
-    5 /* full option count */, 2 /* user option count */,
-    genshellopt_full_usage, genshellopt_short_usage,
+    6 /* full option count */, 3 /* user option count */,
+    gnutls_cli_debug_full_usage, gnutls_cli_debug_short_usage,
     NULL, NULL,
-    PKGDATADIR, genshellopt_packager_info
+    PKGDATADIR, gnutls_cli_debug_packager_info
 };
 
 #if ENABLE_NLS
@@ -382,7 +478,7 @@ AO_gettext(char const* pz)
     pzRes = strdup(pzRes);
     if (pzRes == NULL) {
         fputs(_("No memory for duping translated strings\n"), stderr);
-        exit(GENSHELLOPT_EXIT_FAILURE);
+        exit(GNUTLS_CLI_DEBUG_EXIT_FAILURE);
     }
     return pzRes;
 }
@@ -391,13 +487,13 @@ static void coerce_it(void** s) { *s = AO_gettext(*s);
 }
 
 /**
- * Translate all the translatable strings in the genshelloptOptions
+ * Translate all the translatable strings in the gnutls_cli_debugOptions
  * structure defined above.  This is done only once.
  */
 static void
 translate_option_strings(void)
 {
-    tOptions * const pOpt = &genshelloptOptions;
+    tOptions * const pOpt = &gnutls_cli_debugOptions;
 
     /*
      *  Guard against re-translation.  It won't work.  The strings will have
@@ -424,6 +520,7 @@ translate_option_strings(void)
         coerce_it((void*)&(pOpt->pzExplain));
         coerce_it((void*)&(pOpt->pzDetail));
         coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
         option_usage_text.field_ct = 0;
 
         for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
@@ -440,7 +537,7 @@ translate_option_strings(void)
             coerce_it((void*)&(pOD->pz_DisablePfx));
         }
         /* prevent re-translation */
-        genshelloptOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+        gnutls_cli_debugOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
     }
 }
 
@@ -449,4 +546,4 @@ translate_option_strings(void)
 #ifdef  __cplusplus
 }
 #endif
-/* genshell.c ends here */
+/* cli-debug-args.c ends here */
diff --git a/src/cli-debug-args.h b/src/cli-debug-args.h
new file mode 100644
index 0000000..cc03fb5
--- /dev/null
+++ b/src/cli-debug-args.h
@@ -0,0 +1,189 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (cli-debug-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:27 PM by AutoGen 5.16
+ *  From the definitions    cli-debug-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the gnutls-cli-debug 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 gnutls-cli-debug program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  gnutls-cli-debug 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.
+ *  
+ *  gnutls-cli-debug 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the gnutls-cli-debug program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_CLI_DEBUG_ARGS_H_GUARD
+#define AUTOOPTS_CLI_DEBUG_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG       =  0,
+    INDEX_OPT_VERBOSE     =  1,
+    INDEX_OPT_PORT        =  2,
+    INDEX_OPT_VERSION     =  3,
+    INDEX_OPT_HELP        =  4,
+    INDEX_OPT_MORE_HELP   =  5
+} teOptIndex;
+
+#define OPTION_CT    6
+#define GNUTLS_CLI_DEBUG_VERSION       "@VERSION@"
+#define GNUTLS_CLI_DEBUG_FULL_VERSION  "gnutls-cli-debug @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (gnutls_cli_debugOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of gnutls-cli-debug exit codes
+ */
+typedef enum {
+    GNUTLS_CLI_DEBUG_EXIT_SUCCESS = 0,
+    GNUTLS_CLI_DEBUG_EXIT_FAILURE = 1,
+    GNUTLS_CLI_DEBUG_EXIT_LIBOPTS_FAILURE = 70
+} gnutls_cli_debug_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_VERBOSE        'V'
+#define VALUE_OPT_PORT           'p'
+
+#define OPT_VALUE_PORT           (DESC(PORT).optArg.argInt)
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(gnutls_cli_debugOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(gnutls_cli_debugOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                gnutls_cli_debugOptions.curOptIdx = (n); \
+                gnutls_cli_debugOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*gnutls_cli_debugOptions.pUsageProc)(&gnutls_cli_debugOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the gnutls-cli-debug option descriptor.
+ */
+extern tOptions gnutls_cli_debugOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(gnutls_cli_debugOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(gnutls_cli_debugOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(gnutls_cli_debugOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(gnutls_cli_debugOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_CLI_DEBUG_ARGS_H_GUARD */
+/* cli-debug-args.h ends here */
diff --git a/src/ocsptool-args.c b/src/ocsptool-args.c
new file mode 100644
index 0000000..a2eddbc
--- /dev/null
+++ b/src/ocsptool-args.c
@@ -0,0 +1,1003 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (ocsptool-args.c)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:26 PM by AutoGen 5.16
+ *  From the definitions    ocsptool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 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 ocsptool 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 ocsptool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  ocsptool 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.
+ *  
+ *  ocsptool 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 "ocsptool-args.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;
+
+/* TRANSLATORS: choose the translation for option names wisely because you
+                cannot ever change your mind. */
+#define zCopyright      (ocsptool_opt_strs+0)
+#define zLicenseDescrip (ocsptool_opt_strs+279)
+
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ *  ocsptool option static const strings
+ */
+static char const ocsptool_opt_strs[2273] =
+/*     0 */ "ocsptool @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
+            "This is free software. It is licensed for use, modification and\n"
+            "redistribution under the terms of the\n"
+            "GNU General Public License, version 3 or later\n"
+            "    <http://gnu.org/licenses/gpl.html>\n\0"
+/*   279 */ "ocsptool is free software: you can redistribute it and/or modify it under\n"
+            "the terms of the GNU General Public License as published by the Free\n"
+            "Software Foundation, either version 3 of the License, or (at your option)\n"
+            "any later version.\n\n"
+            "ocsptool 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"
+/*   884 */ "Enable debugging.\0"
+/*   902 */ "DEBUG\0"
+/*   908 */ "debug\0"
+/*   914 */ "More verbose output\0"
+/*   934 */ "VERBOSE\0"
+/*   942 */ "verbose\0"
+/*   950 */ "Input file\0"
+/*   961 */ "INFILE\0"
+/*   968 */ "infile\0"
+/*   975 */ "Output file\0"
+/*   987 */ "OUTFILE\0"
+/*   995 */ "outfile\0"
+/*  1003 */ "Ask an OCSP/HTTP server on a certificate validity\0"
+/*  1053 */ "ASK\0"
+/*  1057 */ "ask\0"
+/*  1061 */ "Verify response\0"
+/*  1077 */ "VERIFY_RESPONSE\0"
+/*  1093 */ "verify-response\0"
+/*  1109 */ "Print information on a OCSP request\0"
+/*  1145 */ "REQUEST_INFO\0"
+/*  1158 */ "request-info\0"
+/*  1171 */ "Print information on a OCSP response\0"
+/*  1208 */ "RESPONSE_INFO\0"
+/*  1222 */ "response-info\0"
+/*  1236 */ "Generate an OCSP request\0"
+/*  1261 */ "GENERATE_REQUEST\0"
+/*  1278 */ "generate-request\0"
+/*  1295 */ "Don't add nonce to OCSP request\0"
+/*  1327 */ "NONCE\0"
+/*  1333 */ "no-nonce\0"
+/*  1342 */ "no\0"
+/*  1345 */ "Read issuer certificate from file\0"
+/*  1379 */ "LOAD_ISSUER\0"
+/*  1391 */ "load-issuer\0"
+/*  1403 */ "Read certificate to check from file\0"
+/*  1439 */ "LOAD_CERT\0"
+/*  1449 */ "load-cert\0"
+/*  1459 */ "Read OCSP trust anchors from file\0"
+/*  1493 */ "LOAD_TRUST\0"
+/*  1504 */ "load-trust\0"
+/*  1515 */ "Read OCSP response signer from file\0"
+/*  1551 */ "LOAD_SIGNER\0"
+/*  1563 */ "load-signer\0"
+/*  1575 */ "Use DER format for input certificates and private keys\0"
+/*  1630 */ "INDER\0"
+/*  1636 */ "no-inder\0"
+/*  1645 */ "Read DER encoded OCSP request from file\0"
+/*  1685 */ "LOAD_REQUEST\0"
+/*  1698 */ "load-request\0"
+/*  1711 */ "Read DER encoded OCSP response from file\0"
+/*  1752 */ "LOAD_RESPONSE\0"
+/*  1766 */ "load-response\0"
+/*  1780 */ "Display extended usage information and exit\0"
+/*  1824 */ "help\0"
+/*  1829 */ "Extended usage information passed thru pager\0"
+/*  1874 */ "more-help\0"
+/*  1884 */ "Output version information and exit\0"
+/*  1920 */ "version\0"
+/*  1928 */ "OCSPTOOL\0"
+/*  1937 */ "ocsptool - GnuTLS OCSP tool - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
+/*  2040 */ "[email protected]\0"
+/*  2059 */ "\n\n\0"
+/*  2062 */ "\n"
+            "Ocsptool is a program that can parse and print information about OCSP\n"
+            "requests/responses, generate requests and verify responses.\n\0"
+/*  2194 */ "ocsptool @VERSION@\0"
+/*  2213 */ "ocsptool [options]\n"
+            "ocsptool --help for usage instructions.\n";
+
+/*
+ *  debug option description:
+ */
+#define DEBUG_DESC      (ocsptool_opt_strs+884)
+#define DEBUG_NAME      (ocsptool_opt_strs+902)
+#define DEBUG_name      (ocsptool_opt_strs+908)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  verbose option description:
+ */
+#define VERBOSE_DESC      (ocsptool_opt_strs+914)
+#define VERBOSE_NAME      (ocsptool_opt_strs+934)
+#define VERBOSE_name      (ocsptool_opt_strs+942)
+#define VERBOSE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  infile option description:
+ */
+#define INFILE_DESC      (ocsptool_opt_strs+950)
+#define INFILE_NAME      (ocsptool_opt_strs+961)
+#define INFILE_name      (ocsptool_opt_strs+968)
+#define INFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  outfile option description:
+ */
+#define OUTFILE_DESC      (ocsptool_opt_strs+975)
+#define OUTFILE_NAME      (ocsptool_opt_strs+987)
+#define OUTFILE_name      (ocsptool_opt_strs+995)
+#define OUTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  ask option description with
+ *  "Must also have options" and "Incompatible options":
+ */
+#define ASK_DESC      (ocsptool_opt_strs+1003)
+#define ASK_NAME      (ocsptool_opt_strs+1053)
+#define ASK_name      (ocsptool_opt_strs+1057)
+static int const aAskMustList[] = {
+    INDEX_OPT_LOAD_CERT,
+    INDEX_OPT_LOAD_ISSUER, NO_EQUIVALENT };
+#define ASK_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | OPTST_ARG_OPTIONAL)
+
+/*
+ *  verify-response option description:
+ */
+#define VERIFY_RESPONSE_DESC      (ocsptool_opt_strs+1061)
+#define VERIFY_RESPONSE_NAME      (ocsptool_opt_strs+1077)
+#define VERIFY_RESPONSE_name      (ocsptool_opt_strs+1093)
+#define VERIFY_RESPONSE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  request-info option description:
+ */
+#define REQUEST_INFO_DESC      (ocsptool_opt_strs+1109)
+#define REQUEST_INFO_NAME      (ocsptool_opt_strs+1145)
+#define REQUEST_INFO_name      (ocsptool_opt_strs+1158)
+#define REQUEST_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  response-info option description:
+ */
+#define RESPONSE_INFO_DESC      (ocsptool_opt_strs+1171)
+#define RESPONSE_INFO_NAME      (ocsptool_opt_strs+1208)
+#define RESPONSE_INFO_name      (ocsptool_opt_strs+1222)
+#define RESPONSE_INFO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-request option description:
+ */
+#define GENERATE_REQUEST_DESC      (ocsptool_opt_strs+1236)
+#define GENERATE_REQUEST_NAME      (ocsptool_opt_strs+1261)
+#define GENERATE_REQUEST_name      (ocsptool_opt_strs+1278)
+#define GENERATE_REQUEST_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  nonce option description:
+ */
+#define NONCE_DESC      (ocsptool_opt_strs+1295)
+#define NONCE_NAME      (ocsptool_opt_strs+1327)
+#define NOT_NONCE_name  (ocsptool_opt_strs+1333)
+#define NOT_NONCE_PFX   (ocsptool_opt_strs+1342)
+#define NONCE_name      (NOT_NONCE_name + 3)
+#define NONCE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  load-issuer option description:
+ */
+#define LOAD_ISSUER_DESC      (ocsptool_opt_strs+1345)
+#define LOAD_ISSUER_NAME      (ocsptool_opt_strs+1379)
+#define LOAD_ISSUER_name      (ocsptool_opt_strs+1391)
+#define LOAD_ISSUER_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-cert option description:
+ */
+#define LOAD_CERT_DESC      (ocsptool_opt_strs+1403)
+#define LOAD_CERT_NAME      (ocsptool_opt_strs+1439)
+#define LOAD_CERT_name      (ocsptool_opt_strs+1449)
+#define LOAD_CERT_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-trust option description with
+ *  "Must also have options" and "Incompatible options":
+ */
+#define LOAD_TRUST_DESC      (ocsptool_opt_strs+1459)
+#define LOAD_TRUST_NAME      (ocsptool_opt_strs+1493)
+#define LOAD_TRUST_name      (ocsptool_opt_strs+1504)
+static int const aLoad_TrustCantList[] = {
+    INDEX_OPT_LOAD_SIGNER, NO_EQUIVALENT };
+#define LOAD_TRUST_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-signer option description with
+ *  "Must also have options" and "Incompatible options":
+ */
+#define LOAD_SIGNER_DESC      (ocsptool_opt_strs+1515)
+#define LOAD_SIGNER_NAME      (ocsptool_opt_strs+1551)
+#define LOAD_SIGNER_name      (ocsptool_opt_strs+1563)
+static int const aLoad_SignerCantList[] = {
+    INDEX_OPT_LOAD_TRUST, NO_EQUIVALENT };
+#define LOAD_SIGNER_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  inder option description:
+ */
+#define INDER_DESC      (ocsptool_opt_strs+1575)
+#define INDER_NAME      (ocsptool_opt_strs+1630)
+#define NOT_INDER_name  (ocsptool_opt_strs+1636)
+#define NOT_INDER_PFX   (ocsptool_opt_strs+1342)
+#define INDER_name      (NOT_INDER_name + 3)
+#define INDER_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  load-request option description:
+ */
+#define LOAD_REQUEST_DESC      (ocsptool_opt_strs+1645)
+#define LOAD_REQUEST_NAME      (ocsptool_opt_strs+1685)
+#define LOAD_REQUEST_name      (ocsptool_opt_strs+1698)
+#define LOAD_REQUEST_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-response option description:
+ */
+#define LOAD_RESPONSE_DESC      (ocsptool_opt_strs+1711)
+#define LOAD_RESPONSE_NAME      (ocsptool_opt_strs+1752)
+#define LOAD_RESPONSE_name      (ocsptool_opt_strs+1766)
+#define LOAD_RESPONSE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  Help/More_Help/Version option descriptions:
+ */
+#define HELP_DESC       (ocsptool_opt_strs+1780)
+#define HELP_name       (ocsptool_opt_strs+1824)
+#ifdef HAVE_WORKING_FORK
+#define MORE_HELP_DESC  (ocsptool_opt_strs+1829)
+#define MORE_HELP_name  (ocsptool_opt_strs+1874)
+#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#else
+#define MORE_HELP_DESC  NULL
+#define MORE_HELP_name  NULL
+#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        (ocsptool_opt_strs+1884)
+#define VER_name        (ocsptool_opt_strs+1920)
+/*
+ *  Declare option callback procedures
+ */
+extern tOptProc
+    optionBooleanVal,   optionNestedVal,    optionNumericVal,
+    optionPagedUsage,   optionPrintVersion, optionResetOpt,
+    optionStackArg,     optionTimeDate,     optionTimeVal,
+    optionUnstackArg,   optionVendorOption;
+static tOptProc
+    doOptDebug,         doOptInfile,        doOptLoad_Cert,
+    doOptLoad_Issuer,   doOptLoad_Request,  doOptLoad_Response,
+    doOptLoad_Signer,   doOptLoad_Trust,    doUsageOpt;
+#define VER_PROC        optionPrintVersion
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ *  Define the ocsptool Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the ocsptool program responds to.
+ */
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_VERBOSE,
+     /* equiv idx, value */ 1, VALUE_OPT_VERBOSE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, NOLIMIT, 0,
+     /* opt state flags  */ VERBOSE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verbose */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_INFILE,
+     /* equiv idx, value */ 2, VALUE_OPT_INFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --infile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptInfile,
+     /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 3, VALUE_OPT_OUTFILE,
+     /* equiv idx, value */ 3, VALUE_OPT_OUTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ OUTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --outfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 4, VALUE_OPT_ASK,
+     /* equiv idx, value */ 4, VALUE_OPT_ASK,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ ASK_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --ask */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ aAskMustList, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ ASK_DESC, ASK_NAME, ASK_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 5, VALUE_OPT_VERIFY_RESPONSE,
+     /* equiv idx, value */ 5, VALUE_OPT_VERIFY_RESPONSE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ VERIFY_RESPONSE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verify-response */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERIFY_RESPONSE_DESC, VERIFY_RESPONSE_NAME, VERIFY_RESPONSE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 6, VALUE_OPT_REQUEST_INFO,
+     /* equiv idx, value */ 6, VALUE_OPT_REQUEST_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ REQUEST_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --request-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ REQUEST_INFO_DESC, REQUEST_INFO_NAME, REQUEST_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 7, VALUE_OPT_RESPONSE_INFO,
+     /* equiv idx, value */ 7, VALUE_OPT_RESPONSE_INFO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ RESPONSE_INFO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --response-info */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ RESPONSE_INFO_DESC, RESPONSE_INFO_NAME, RESPONSE_INFO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 8, VALUE_OPT_GENERATE_REQUEST,
+     /* equiv idx, value */ 8, VALUE_OPT_GENERATE_REQUEST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_REQUEST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-request */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_REQUEST_DESC, GENERATE_REQUEST_NAME, GENERATE_REQUEST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 9, VALUE_OPT_NONCE,
+     /* equiv idx, value */ 9, VALUE_OPT_NONCE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ NONCE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --nonce */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ NONCE_DESC, NONCE_NAME, NONCE_name,
+     /* disablement strs */ NOT_NONCE_name, NOT_NONCE_PFX },
+
+  {  /* entry idx, value */ 10, VALUE_OPT_LOAD_ISSUER,
+     /* equiv idx, value */ 10, VALUE_OPT_LOAD_ISSUER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_ISSUER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-issuer */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Issuer,
+     /* desc, NAME, name */ LOAD_ISSUER_DESC, LOAD_ISSUER_NAME, LOAD_ISSUER_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 11, VALUE_OPT_LOAD_CERT,
+     /* equiv idx, value */ 11, VALUE_OPT_LOAD_CERT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_CERT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-cert */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Cert,
+     /* desc, NAME, name */ LOAD_CERT_DESC, LOAD_CERT_NAME, LOAD_CERT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 12, VALUE_OPT_LOAD_TRUST,
+     /* equiv idx, value */ 12, VALUE_OPT_LOAD_TRUST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_TRUST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-trust */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, aLoad_TrustCantList,
+     /* option proc      */ doOptLoad_Trust,
+     /* desc, NAME, name */ LOAD_TRUST_DESC, LOAD_TRUST_NAME, LOAD_TRUST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 13, VALUE_OPT_LOAD_SIGNER,
+     /* equiv idx, value */ 13, VALUE_OPT_LOAD_SIGNER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_SIGNER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-signer */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, aLoad_SignerCantList,
+     /* option proc      */ doOptLoad_Signer,
+     /* desc, NAME, name */ LOAD_SIGNER_DESC, LOAD_SIGNER_NAME, LOAD_SIGNER_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 14, VALUE_OPT_INDER,
+     /* equiv idx, value */ 14, VALUE_OPT_INDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --inder */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name,
+     /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX },
+
+  {  /* entry idx, value */ 15, VALUE_OPT_LOAD_REQUEST,
+     /* equiv idx, value */ 15, VALUE_OPT_LOAD_REQUEST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_REQUEST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-request */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Request,
+     /* desc, NAME, name */ LOAD_REQUEST_DESC, LOAD_REQUEST_NAME, LOAD_REQUEST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 16, VALUE_OPT_LOAD_RESPONSE,
+     /* equiv idx, value */ 16, VALUE_OPT_LOAD_RESPONSE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_RESPONSE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-response */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Response,
+     /* desc, NAME, name */ LOAD_RESPONSE_DESC, LOAD_RESPONSE_NAME, LOAD_RESPONSE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* 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, 0,
+     /* 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, 0,
+     /* 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, 0,
+     /* 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 }
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the ocsptool Option Environment
+ */
+#define zPROGNAME       (ocsptool_opt_strs+1928)
+#define zUsageTitle     (ocsptool_opt_strs+1937)
+#define zRcName         NULL
+#define apzHomeList     NULL
+#define zBugsAddr       (ocsptool_opt_strs+2040)
+#define zExplain        (ocsptool_opt_strs+2059)
+#define zDetail         (ocsptool_opt_strs+2062)
+#define zFullVersion    (ocsptool_opt_strs+2194)
+/* extracted from optcode.tlib near line 350 */
+
+#if defined(ENABLE_NLS)
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
+  static tOptionXlateProc translate_option_strings;
+#else
+# define OPTPROC_BASE OPTPROC_NONE
+# define translate_option_strings NULL
+#endif /* ENABLE_NLS */
+
+
+#define ocsptool_full_usage (NULL)
+
+#define ocsptool_short_usage (ocsptool_opt_strs+2213)
+
+#endif /* not defined __doxygen__ */
+
+/*
+ *  Create the static procedure(s) declared above.
+ */
+/**
+ * The callout function that invokes the optionUsage function.
+ *
+ * @param pOptions the AutoOpts option description structure
+ * @param pOptDesc the descriptor for the "help" (usage) option.
+ * @noreturn
+ */
+static void
+doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
+{
+    optionUsage(&ocsptoolOptions, OCSPTOOL_EXIT_SUCCESS);
+    /* NOTREACHED */
+    (void)pOptDesc;
+    (void)pOptions;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the infile option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-issuer option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Issuer(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-cert option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Cert(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-trust option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Trust(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-signer option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Signer(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-request option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Request(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-response option.
+ *
+ * @param pOptions the ocsptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Response(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+/* extracted from optmain.tlib near line 1113 */
+
+/**
+ * The directory containing the data associated with ocsptool.
+ */
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
+
+/**
+ * Information about the person or institution that packaged ocsptool
+ * for the current distribution.
+ */
+#ifndef  WITH_PACKAGER
+# define ocsptool_packager_info NULL
+#else
+static char const ocsptool_packager_info[] =
+    "Packaged by " WITH_PACKAGER
+
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport ocsptool bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+#ifndef __doxygen__
+
+#endif /* __doxygen__ */
+/**
+ * The option definitions for ocsptool.  The one structure that
+ * binds them all.
+ */
+tOptions ocsptoolOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NEGATIONS
+    + OPTPROC_NO_ARGS
+    + 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 */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    20 /* full option count */, 17 /* user option count */,
+    ocsptool_full_usage, ocsptool_short_usage,
+    NULL, NULL,
+    PKGDATADIR, ocsptool_packager_info
+};
+
+#if ENABLE_NLS
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#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.
+ *
+ * @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* pzRes;
+    if (pz == NULL)
+        return NULL;
+    pzRes = _(pz);
+    if (pzRes == pz)
+        return pzRes;
+    pzRes = strdup(pzRes);
+    if (pzRes == NULL) {
+        fputs(_("No memory for duping translated strings\n"), stderr);
+        exit(OCSPTOOL_EXIT_FAILURE);
+    }
+    return pzRes;
+}
+
+static void coerce_it(void** s) { *s = AO_gettext(*s);
+}
+
+/**
+ * Translate all the translatable strings in the ocsptoolOptions
+ * structure defined above.  This is done only once.
+ */
+static void
+translate_option_strings(void)
+{
+    tOptions * const pOpt = &ocsptoolOptions;
+
+    /*
+     *  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_usage_text.field_ct != 0) {
+        /*
+         *  Do the translations.  The first pointer follows the field count
+         *  field.  The field count field is the size of a pointer.
+         */
+        tOptDesc * pOD = pOpt->pOptDesc;
+        char **    ppz = (char**)(void*)&(option_usage_text);
+        int        ix  = option_usage_text.field_ct;
+
+        do {
+            ppz++;
+            *ppz = AO_gettext(*ppz);
+        } while (--ix > 0);
+
+        coerce_it((void*)&(pOpt->pzCopyright));
+        coerce_it((void*)&(pOpt->pzCopyNotice));
+        coerce_it((void*)&(pOpt->pzFullVersion));
+        coerce_it((void*)&(pOpt->pzUsageTitle));
+        coerce_it((void*)&(pOpt->pzExplain));
+        coerce_it((void*)&(pOpt->pzDetail));
+        coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
+        option_usage_text.field_ct = 0;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
+            coerce_it((void*)&(pOD->pzText));
+    }
+
+    if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
+        tOptDesc * pOD = pOpt->pOptDesc;
+        int        ix;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
+            coerce_it((void*)&(pOD->pz_Name));
+            coerce_it((void*)&(pOD->pz_DisableName));
+            coerce_it((void*)&(pOD->pz_DisablePfx));
+        }
+        /* prevent re-translation */
+        ocsptoolOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+    }
+}
+
+#endif /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+/* ocsptool-args.c ends here */
diff --git a/src/ocsptool-args.h b/src/ocsptool-args.h
new file mode 100644
index 0000000..3e58ca5
--- /dev/null
+++ b/src/ocsptool-args.h
@@ -0,0 +1,215 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (ocsptool-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:25 PM by AutoGen 5.16
+ *  From the definitions    ocsptool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the ocsptool 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 ocsptool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  ocsptool 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.
+ *  
+ *  ocsptool 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the ocsptool program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_OCSPTOOL_ARGS_H_GUARD
+#define AUTOOPTS_OCSPTOOL_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG             =  0,
+    INDEX_OPT_VERBOSE           =  1,
+    INDEX_OPT_INFILE            =  2,
+    INDEX_OPT_OUTFILE           =  3,
+    INDEX_OPT_ASK               =  4,
+    INDEX_OPT_VERIFY_RESPONSE   =  5,
+    INDEX_OPT_REQUEST_INFO      =  6,
+    INDEX_OPT_RESPONSE_INFO     =  7,
+    INDEX_OPT_GENERATE_REQUEST  =  8,
+    INDEX_OPT_NONCE             =  9,
+    INDEX_OPT_LOAD_ISSUER       = 10,
+    INDEX_OPT_LOAD_CERT         = 11,
+    INDEX_OPT_LOAD_TRUST        = 12,
+    INDEX_OPT_LOAD_SIGNER       = 13,
+    INDEX_OPT_INDER             = 14,
+    INDEX_OPT_LOAD_REQUEST      = 15,
+    INDEX_OPT_LOAD_RESPONSE     = 16,
+    INDEX_OPT_VERSION           = 17,
+    INDEX_OPT_HELP              = 18,
+    INDEX_OPT_MORE_HELP         = 19
+} teOptIndex;
+
+#define OPTION_CT    20
+#define OCSPTOOL_VERSION       "@VERSION@"
+#define OCSPTOOL_FULL_VERSION  "ocsptool @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (ocsptoolOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of ocsptool exit codes
+ */
+typedef enum {
+    OCSPTOOL_EXIT_SUCCESS = 0,
+    OCSPTOOL_EXIT_FAILURE = 1,
+    OCSPTOOL_EXIT_LIBOPTS_FAILURE = 70
+} ocsptool_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_VERBOSE        'V'
+#define VALUE_OPT_INFILE         2
+#define VALUE_OPT_OUTFILE        3
+#define VALUE_OPT_ASK            4
+#define VALUE_OPT_VERIFY_RESPONSE 'e'
+#define VALUE_OPT_REQUEST_INFO   'i'
+#define VALUE_OPT_RESPONSE_INFO  'j'
+#define VALUE_OPT_GENERATE_REQUEST 'q'
+#define VALUE_OPT_NONCE          9
+#define VALUE_OPT_LOAD_ISSUER    10
+#define VALUE_OPT_LOAD_CERT      11
+#define VALUE_OPT_LOAD_TRUST     12
+#define VALUE_OPT_LOAD_SIGNER    13
+#define VALUE_OPT_INDER          14
+#define VALUE_OPT_LOAD_REQUEST   'Q'
+#define VALUE_OPT_LOAD_RESPONSE  'S'
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(ocsptoolOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(ocsptoolOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                ocsptoolOptions.curOptIdx = (n); \
+                ocsptoolOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*ocsptoolOptions.pUsageProc)(&ocsptoolOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the ocsptool option descriptor.
+ */
+extern tOptions ocsptoolOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(ocsptoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(ocsptoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(ocsptoolOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(ocsptoolOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_OCSPTOOL_ARGS_H_GUARD */
+/* ocsptool-args.h ends here */
diff --git a/src/p11tool-args.c b/src/p11tool-args.c
new file mode 100644
index 0000000..3ca4a47
--- /dev/null
+++ b/src/p11tool-args.c
@@ -0,0 +1,1274 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (p11tool-args.c)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:30 PM by AutoGen 5.16
+ *  From the definitions    p11tool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 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 p11tool 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 p11tool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  p11tool 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.
+ *  
+ *  p11tool 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 "p11tool-args.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;
+
+/* TRANSLATORS: choose the translation for option names wisely because you
+                cannot ever change your mind. */
+#define zCopyright      (p11tool_opt_strs+0)
+#define zLicenseDescrip (p11tool_opt_strs+278)
+
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ *  p11tool option static const strings
+ */
+static char const p11tool_opt_strs[3155] =
+/*     0 */ "p11tool @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
+            "This is free software. It is licensed for use, modification and\n"
+            "redistribution under the terms of the\n"
+            "GNU General Public License, version 3 or later\n"
+            "    <http://gnu.org/licenses/gpl.html>\n\0"
+/*   278 */ "p11tool is free software: you can redistribute it and/or modify it under\n"
+            "the terms of the GNU General Public License as published by the Free\n"
+            "Software Foundation, either version 3 of the License, or (at your option)\n"
+            "any later version.\n\n"
+            "p11tool 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"
+/*   881 */ "Enable debugging.\0"
+/*   899 */ "DEBUG\0"
+/*   905 */ "debug\0"
+/*   911 */ "Output file\0"
+/*   923 */ "OUTFILE\0"
+/*   931 */ "outfile\0"
+/*   939 */ "List all available tokens\0"
+/*   965 */ "LIST_TOKENS\0"
+/*   977 */ "list-tokens\0"
+/*   989 */ "Export the object specified by the URL\0"
+/*  1028 */ "EXPORT\0"
+/*  1035 */ "export\0"
+/*  1042 */ "List all available mechanisms in a token\0"
+/*  1083 */ "LIST_MECHANISMS\0"
+/*  1099 */ "list-mechanisms\0"
+/*  1115 */ "List all available objects in a token\0"
+/*  1153 */ "LIST_ALL\0"
+/*  1162 */ "list-all\0"
+/*  1171 */ "List all available certificates in a token\0"
+/*  1214 */ "LIST_ALL_CERTS\0"
+/*  1229 */ "list-all-certs\0"
+/*  1244 */ "List all certificates that have an associated private key\0"
+/*  1302 */ "LIST_CERTS\0"
+/*  1313 */ "list-certs\0"
+/*  1324 */ "List all available private keys in a token\0"
+/*  1367 */ "LIST_ALL_PRIVKEYS\0"
+/*  1385 */ "list-all-privkeys\0"
+/*  1403 */ "List all available certificates marked as trusted\0"
+/*  1453 */ "LIST_ALL_TRUSTED\0"
+/*  1470 */ "list-all-trusted\0"
+/*  1487 */ "Initializes a PKCS #11 token\0"
+/*  1516 */ "INITIALIZE\0"
+/*  1527 */ "initialize\0"
+/*  1538 */ "Writes the loaded objects to a PKCS #11 token\0"
+/*  1584 */ "WRITE\0"
+/*  1590 */ "write\0"
+/*  1596 */ "Deletes the objects matching the PKCS #11 URL\0"
+/*  1642 */ "DELETE\0"
+/*  1649 */ "delete\0"
+/*  1656 */ "Generate an RSA private-public key pair\0"
+/*  1696 */ "GENERATE_RSA\0"
+/*  1709 */ "generate-rsa\0"
+/*  1722 */ "GENERATE_DSA\0"
+/*  1735 */ "generate-dsa\0"
+/*  1748 */ "GENERATE_ECC\0"
+/*  1761 */ "generate-ecc\0"
+/*  1774 */ "Sets a label for the write operation\0"
+/*  1811 */ "LABEL\0"
+/*  1817 */ "label\0"
+/*  1823 */ "Marks the object to be written as trusted\0"
+/*  1865 */ "TRUSTED\0"
+/*  1873 */ "no-trusted\0"
+/*  1884 */ "no\0"
+/*  1887 */ "Marks the object to be written as private\0"
+/*  1929 */ "PRIVATE\0"
+/*  1937 */ "no-private\0"
+/*  1948 */ "Force login to token\0"
+/*  1969 */ "LOGIN\0"
+/*  1975 */ "no-login\0"
+/*  1984 */ "Print detailed URLs\0"
+/*  2004 */ "DETAILED_URL\0"
+/*  2017 */ "no-detailed-url\0"
+/*  2033 */ "Provide a hex encoded secret key\0"
+/*  2066 */ "SECRET_KEY\0"
+/*  2077 */ "secret-key\0"
+/*  2088 */ "Private key file to use\0"
+/*  2112 */ "LOAD_PRIVKEY\0"
+/*  2125 */ "load-privkey\0"
+/*  2138 */ "Public key file to use\0"
+/*  2161 */ "LOAD_PUBKEY\0"
+/*  2173 */ "load-pubkey\0"
+/*  2185 */ "Certificate file to use\0"
+/*  2209 */ "LOAD_CERTIFICATE\0"
+/*  2226 */ "load-certificate\0"
+/*  2243 */ "Use PKCS #8 format for private keys\0"
+/*  2279 */ "PKCS8\0"
+/*  2285 */ "pkcs8\0"
+/*  2291 */ "Specify the number of bits for key generate\0"
+/*  2335 */ "BITS\0"
+/*  2340 */ "bits\0"
+/*  2345 */ "Specify the security level\0"
+/*  2372 */ "SEC_PARAM\0"
+/*  2382 */ "sec-param\0"
+/*  2392 */ "Use DER/RAW format for input\0"
+/*  2421 */ "INDER\0"
+/*  2427 */ "no-inder\0"
+/*  2436 */ "This is an alias for 'inder'\0"
+/*  2465 */ "inraw\0"
+/*  2471 */ "Specify the PKCS #11 provider library\0"
+/*  2509 */ "PROVIDER\0"
+/*  2518 */ "provider\0"
+/*  2527 */ "Display extended usage information and exit\0"
+/*  2571 */ "help\0"
+/*  2576 */ "Extended usage information passed thru pager\0"
+/*  2621 */ "more-help\0"
+/*  2631 */ "Output version information and exit\0"
+/*  2667 */ "version\0"
+/*  2675 */ "P11TOOL\0"
+/*  2683 */ "p11tool - GnuTLS PKCS #11 tool - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [url]\n\0"
+/*  2795 */ "[email protected]\0"
+/*  2814 */ "\n\n\0"
+/*  2817 */ "\n"
+            "Program that allows handling data from PKCS #11 smart cards and security\n"
+            "modules.\n\n"
+            "To use PKCS #11 tokens with gnutls the configuration file\n"
+            "/etc/gnutls/pkcs11.conf has to exist and contain a number of lines of the\n"
+            "form 'load=/usr/lib/opensc-pkcs11.so'.\n\0"
+/*  3073 */ "p11tool @VERSION@\0"
+/*  3091 */ "p11tool [options] [url]\n"
+            "p11tool --help for usage instructions.\n";
+
+/*
+ *  debug option description:
+ */
+#define DEBUG_DESC      (p11tool_opt_strs+881)
+#define DEBUG_NAME      (p11tool_opt_strs+899)
+#define DEBUG_name      (p11tool_opt_strs+905)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  outfile option description:
+ */
+#define OUTFILE_DESC      (p11tool_opt_strs+911)
+#define OUTFILE_NAME      (p11tool_opt_strs+923)
+#define OUTFILE_name      (p11tool_opt_strs+931)
+#define OUTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  list-tokens option description:
+ */
+#define LIST_TOKENS_DESC      (p11tool_opt_strs+939)
+#define LIST_TOKENS_NAME      (p11tool_opt_strs+965)
+#define LIST_TOKENS_name      (p11tool_opt_strs+977)
+#define LIST_TOKENS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  export option description:
+ */
+#define EXPORT_DESC      (p11tool_opt_strs+989)
+#define EXPORT_NAME      (p11tool_opt_strs+1028)
+#define EXPORT_name      (p11tool_opt_strs+1035)
+#define EXPORT_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list-mechanisms option description:
+ */
+#define LIST_MECHANISMS_DESC      (p11tool_opt_strs+1042)
+#define LIST_MECHANISMS_NAME      (p11tool_opt_strs+1083)
+#define LIST_MECHANISMS_name      (p11tool_opt_strs+1099)
+#define LIST_MECHANISMS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list-all option description:
+ */
+#define LIST_ALL_DESC      (p11tool_opt_strs+1115)
+#define LIST_ALL_NAME      (p11tool_opt_strs+1153)
+#define LIST_ALL_name      (p11tool_opt_strs+1162)
+#define LIST_ALL_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list-all-certs option description:
+ */
+#define LIST_ALL_CERTS_DESC      (p11tool_opt_strs+1171)
+#define LIST_ALL_CERTS_NAME      (p11tool_opt_strs+1214)
+#define LIST_ALL_CERTS_name      (p11tool_opt_strs+1229)
+#define LIST_ALL_CERTS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list-certs option description:
+ */
+#define LIST_CERTS_DESC      (p11tool_opt_strs+1244)
+#define LIST_CERTS_NAME      (p11tool_opt_strs+1302)
+#define LIST_CERTS_name      (p11tool_opt_strs+1313)
+#define LIST_CERTS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list-all-privkeys option description:
+ */
+#define LIST_ALL_PRIVKEYS_DESC      (p11tool_opt_strs+1324)
+#define LIST_ALL_PRIVKEYS_NAME      (p11tool_opt_strs+1367)
+#define LIST_ALL_PRIVKEYS_name      (p11tool_opt_strs+1385)
+#define LIST_ALL_PRIVKEYS_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  list-all-trusted option description:
+ */
+#define LIST_ALL_TRUSTED_DESC      (p11tool_opt_strs+1403)
+#define LIST_ALL_TRUSTED_NAME      (p11tool_opt_strs+1453)
+#define LIST_ALL_TRUSTED_name      (p11tool_opt_strs+1470)
+#define LIST_ALL_TRUSTED_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  initialize option description:
+ */
+#define INITIALIZE_DESC      (p11tool_opt_strs+1487)
+#define INITIALIZE_NAME      (p11tool_opt_strs+1516)
+#define INITIALIZE_name      (p11tool_opt_strs+1527)
+#define INITIALIZE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  write option description:
+ */
+#define WRITE_DESC      (p11tool_opt_strs+1538)
+#define WRITE_NAME      (p11tool_opt_strs+1584)
+#define WRITE_name      (p11tool_opt_strs+1590)
+#define WRITE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  delete option description:
+ */
+#define DELETE_DESC      (p11tool_opt_strs+1596)
+#define DELETE_NAME      (p11tool_opt_strs+1642)
+#define DELETE_name      (p11tool_opt_strs+1649)
+#define DELETE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-rsa option description:
+ */
+#define GENERATE_RSA_DESC      (p11tool_opt_strs+1656)
+#define GENERATE_RSA_NAME      (p11tool_opt_strs+1696)
+#define GENERATE_RSA_name      (p11tool_opt_strs+1709)
+#define GENERATE_RSA_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-dsa option description:
+ */
+#define GENERATE_DSA_DESC      (p11tool_opt_strs+1656)
+#define GENERATE_DSA_NAME      (p11tool_opt_strs+1722)
+#define GENERATE_DSA_name      (p11tool_opt_strs+1735)
+#define GENERATE_DSA_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate-ecc option description:
+ */
+#define GENERATE_ECC_DESC      (p11tool_opt_strs+1656)
+#define GENERATE_ECC_NAME      (p11tool_opt_strs+1748)
+#define GENERATE_ECC_name      (p11tool_opt_strs+1761)
+#define GENERATE_ECC_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  label option description:
+ */
+#define LABEL_DESC      (p11tool_opt_strs+1774)
+#define LABEL_NAME      (p11tool_opt_strs+1811)
+#define LABEL_name      (p11tool_opt_strs+1817)
+#define LABEL_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  trusted option description:
+ */
+#define TRUSTED_DESC      (p11tool_opt_strs+1823)
+#define TRUSTED_NAME      (p11tool_opt_strs+1865)
+#define NOT_TRUSTED_name  (p11tool_opt_strs+1873)
+#define NOT_TRUSTED_PFX   (p11tool_opt_strs+1884)
+#define TRUSTED_name      (NOT_TRUSTED_name + 3)
+#define TRUSTED_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  private option description:
+ */
+#define PRIVATE_DESC      (p11tool_opt_strs+1887)
+#define PRIVATE_NAME      (p11tool_opt_strs+1929)
+#define NOT_PRIVATE_name  (p11tool_opt_strs+1937)
+#define NOT_PRIVATE_PFX   (p11tool_opt_strs+1884)
+#define PRIVATE_name      (NOT_PRIVATE_name + 3)
+#define PRIVATE_FLAGS     (OPTST_INITENABLED)
+
+/*
+ *  login option description:
+ */
+#define LOGIN_DESC      (p11tool_opt_strs+1948)
+#define LOGIN_NAME      (p11tool_opt_strs+1969)
+#define NOT_LOGIN_name  (p11tool_opt_strs+1975)
+#define NOT_LOGIN_PFX   (p11tool_opt_strs+1884)
+#define LOGIN_name      (NOT_LOGIN_name + 3)
+#define LOGIN_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  detailed-url option description:
+ */
+#define DETAILED_URL_DESC      (p11tool_opt_strs+1984)
+#define DETAILED_URL_NAME      (p11tool_opt_strs+2004)
+#define NOT_DETAILED_URL_name  (p11tool_opt_strs+2017)
+#define NOT_DETAILED_URL_PFX   (p11tool_opt_strs+1884)
+#define DETAILED_URL_name      (NOT_DETAILED_URL_name + 3)
+#define DETAILED_URL_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  secret-key option description:
+ */
+#define SECRET_KEY_DESC      (p11tool_opt_strs+2033)
+#define SECRET_KEY_NAME      (p11tool_opt_strs+2066)
+#define SECRET_KEY_name      (p11tool_opt_strs+2077)
+#define SECRET_KEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  load-privkey option description:
+ */
+#define LOAD_PRIVKEY_DESC      (p11tool_opt_strs+2088)
+#define LOAD_PRIVKEY_NAME      (p11tool_opt_strs+2112)
+#define LOAD_PRIVKEY_name      (p11tool_opt_strs+2125)
+#define LOAD_PRIVKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-pubkey option description:
+ */
+#define LOAD_PUBKEY_DESC      (p11tool_opt_strs+2138)
+#define LOAD_PUBKEY_NAME      (p11tool_opt_strs+2161)
+#define LOAD_PUBKEY_name      (p11tool_opt_strs+2173)
+#define LOAD_PUBKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  load-certificate option description:
+ */
+#define LOAD_CERTIFICATE_DESC      (p11tool_opt_strs+2185)
+#define LOAD_CERTIFICATE_NAME      (p11tool_opt_strs+2209)
+#define LOAD_CERTIFICATE_name      (p11tool_opt_strs+2226)
+#define LOAD_CERTIFICATE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pkcs8 option description:
+ */
+#define PKCS8_DESC      (p11tool_opt_strs+2243)
+#define PKCS8_NAME      (p11tool_opt_strs+2279)
+#define PKCS8_name      (p11tool_opt_strs+2285)
+#define PKCS8_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  bits option description:
+ */
+#define BITS_DESC      (p11tool_opt_strs+2291)
+#define BITS_NAME      (p11tool_opt_strs+2335)
+#define BITS_name      (p11tool_opt_strs+2340)
+#define BITS_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  sec-param option description:
+ */
+#define SEC_PARAM_DESC      (p11tool_opt_strs+2345)
+#define SEC_PARAM_NAME      (p11tool_opt_strs+2372)
+#define SEC_PARAM_name      (p11tool_opt_strs+2382)
+#define SEC_PARAM_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  inder option description:
+ */
+#define INDER_DESC      (p11tool_opt_strs+2392)
+#define INDER_NAME      (p11tool_opt_strs+2421)
+#define NOT_INDER_name  (p11tool_opt_strs+2427)
+#define NOT_INDER_PFX   (p11tool_opt_strs+1884)
+#define INDER_name      (NOT_INDER_name + 3)
+#define INDER_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  inraw option description:
+ */
+#define INRAW_DESC    (p11tool_opt_strs+2436)
+#define INRAW_NAME    NULL
+#define INRAW_name    (p11tool_opt_strs+2465)
+#define INRAW_FLAGS     (INDER_FLAGS | OPTST_ALIAS)
+
+/*
+ *  provider option description:
+ */
+#define PROVIDER_DESC      (p11tool_opt_strs+2471)
+#define PROVIDER_NAME      (p11tool_opt_strs+2509)
+#define PROVIDER_name      (p11tool_opt_strs+2518)
+#define PROVIDER_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  Help/More_Help/Version option descriptions:
+ */
+#define HELP_DESC       (p11tool_opt_strs+2527)
+#define HELP_name       (p11tool_opt_strs+2571)
+#ifdef HAVE_WORKING_FORK
+#define MORE_HELP_DESC  (p11tool_opt_strs+2576)
+#define MORE_HELP_name  (p11tool_opt_strs+2621)
+#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#else
+#define MORE_HELP_DESC  NULL
+#define MORE_HELP_name  NULL
+#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        (p11tool_opt_strs+2631)
+#define VER_name        (p11tool_opt_strs+2667)
+/*
+ *  Declare option callback procedures
+ */
+extern tOptProc
+    optionBooleanVal,   optionNestedVal,    optionNumericVal,
+    optionPagedUsage,   optionPrintVersion, optionResetOpt,
+    optionStackArg,     optionTimeDate,     optionTimeVal,
+    optionUnstackArg,   optionVendorOption;
+static tOptProc
+    doOptDebug,            doOptInraw,            doOptLoad_Certificate,
+    doOptLoad_Privkey,     doOptLoad_Pubkey,      doOptProvider,
+    doUsageOpt;
+#define VER_PROC        optionPrintVersion
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ *  Define the p11tool Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the p11tool program responds to.
+ */
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_OUTFILE,
+     /* equiv idx, value */ 1, VALUE_OPT_OUTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ OUTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --outfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_LIST_TOKENS,
+     /* equiv idx, value */ 2, VALUE_OPT_LIST_TOKENS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_TOKENS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-tokens */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_TOKENS_DESC, LIST_TOKENS_NAME, LIST_TOKENS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 3, VALUE_OPT_EXPORT,
+     /* equiv idx, value */ 3, VALUE_OPT_EXPORT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ EXPORT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --export */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ EXPORT_DESC, EXPORT_NAME, EXPORT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 4, VALUE_OPT_LIST_MECHANISMS,
+     /* equiv idx, value */ 4, VALUE_OPT_LIST_MECHANISMS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_MECHANISMS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-mechanisms */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_MECHANISMS_DESC, LIST_MECHANISMS_NAME, LIST_MECHANISMS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 5, VALUE_OPT_LIST_ALL,
+     /* equiv idx, value */ 5, VALUE_OPT_LIST_ALL,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_ALL_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-all */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_ALL_DESC, LIST_ALL_NAME, LIST_ALL_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 6, VALUE_OPT_LIST_ALL_CERTS,
+     /* equiv idx, value */ 6, VALUE_OPT_LIST_ALL_CERTS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_ALL_CERTS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-all-certs */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_ALL_CERTS_DESC, LIST_ALL_CERTS_NAME, LIST_ALL_CERTS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 7, VALUE_OPT_LIST_CERTS,
+     /* equiv idx, value */ 7, VALUE_OPT_LIST_CERTS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_CERTS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-certs */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_CERTS_DESC, LIST_CERTS_NAME, LIST_CERTS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 8, VALUE_OPT_LIST_ALL_PRIVKEYS,
+     /* equiv idx, value */ 8, VALUE_OPT_LIST_ALL_PRIVKEYS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_ALL_PRIVKEYS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-all-privkeys */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_ALL_PRIVKEYS_DESC, LIST_ALL_PRIVKEYS_NAME, LIST_ALL_PRIVKEYS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 9, VALUE_OPT_LIST_ALL_TRUSTED,
+     /* equiv idx, value */ 9, VALUE_OPT_LIST_ALL_TRUSTED,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_ALL_TRUSTED_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list-all-trusted */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_ALL_TRUSTED_DESC, LIST_ALL_TRUSTED_NAME, LIST_ALL_TRUSTED_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 10, VALUE_OPT_INITIALIZE,
+     /* equiv idx, value */ 10, VALUE_OPT_INITIALIZE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INITIALIZE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --initialize */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ INITIALIZE_DESC, INITIALIZE_NAME, INITIALIZE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 11, VALUE_OPT_WRITE,
+     /* equiv idx, value */ 11, VALUE_OPT_WRITE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ WRITE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --write */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ WRITE_DESC, WRITE_NAME, WRITE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 12, VALUE_OPT_DELETE,
+     /* equiv idx, value */ 12, VALUE_OPT_DELETE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DELETE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --delete */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DELETE_DESC, DELETE_NAME, DELETE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 13, VALUE_OPT_GENERATE_RSA,
+     /* equiv idx, value */ 13, VALUE_OPT_GENERATE_RSA,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_RSA_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-rsa */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_RSA_DESC, GENERATE_RSA_NAME, GENERATE_RSA_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 14, VALUE_OPT_GENERATE_DSA,
+     /* equiv idx, value */ 14, VALUE_OPT_GENERATE_DSA,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_DSA_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-dsa */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_DSA_DESC, GENERATE_DSA_NAME, GENERATE_DSA_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 15, VALUE_OPT_GENERATE_ECC,
+     /* equiv idx, value */ 15, VALUE_OPT_GENERATE_ECC,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_ECC_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate-ecc */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_ECC_DESC, GENERATE_ECC_NAME, GENERATE_ECC_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 16, VALUE_OPT_LABEL,
+     /* equiv idx, value */ 16, VALUE_OPT_LABEL,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LABEL_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --label */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LABEL_DESC, LABEL_NAME, LABEL_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 17, VALUE_OPT_TRUSTED,
+     /* equiv idx, value */ 17, VALUE_OPT_TRUSTED,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ TRUSTED_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --trusted */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ TRUSTED_DESC, TRUSTED_NAME, TRUSTED_name,
+     /* disablement strs */ NOT_TRUSTED_name, NOT_TRUSTED_PFX },
+
+  {  /* entry idx, value */ 18, VALUE_OPT_PRIVATE,
+     /* equiv idx, value */ 18, VALUE_OPT_PRIVATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PRIVATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --private */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PRIVATE_DESC, PRIVATE_NAME, PRIVATE_name,
+     /* disablement strs */ NOT_PRIVATE_name, NOT_PRIVATE_PFX },
+
+  {  /* entry idx, value */ 19, VALUE_OPT_LOGIN,
+     /* equiv idx, value */ 19, VALUE_OPT_LOGIN,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOGIN_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --login */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LOGIN_DESC, LOGIN_NAME, LOGIN_name,
+     /* disablement strs */ NOT_LOGIN_name, NOT_LOGIN_PFX },
+
+  {  /* entry idx, value */ 20, VALUE_OPT_DETAILED_URL,
+     /* equiv idx, value */ 20, VALUE_OPT_DETAILED_URL,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DETAILED_URL_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --detailed-url */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DETAILED_URL_DESC, DETAILED_URL_NAME, DETAILED_URL_name,
+     /* disablement strs */ NOT_DETAILED_URL_name, NOT_DETAILED_URL_PFX },
+
+  {  /* entry idx, value */ 21, VALUE_OPT_SECRET_KEY,
+     /* equiv idx, value */ 21, VALUE_OPT_SECRET_KEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SECRET_KEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --secret-key */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ SECRET_KEY_DESC, SECRET_KEY_NAME, SECRET_KEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 22, VALUE_OPT_LOAD_PRIVKEY,
+     /* equiv idx, value */ 22, VALUE_OPT_LOAD_PRIVKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_PRIVKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-privkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Privkey,
+     /* desc, NAME, name */ LOAD_PRIVKEY_DESC, LOAD_PRIVKEY_NAME, LOAD_PRIVKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 23, VALUE_OPT_LOAD_PUBKEY,
+     /* equiv idx, value */ 23, VALUE_OPT_LOAD_PUBKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_PUBKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-pubkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Pubkey,
+     /* desc, NAME, name */ LOAD_PUBKEY_DESC, LOAD_PUBKEY_NAME, LOAD_PUBKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 24, VALUE_OPT_LOAD_CERTIFICATE,
+     /* equiv idx, value */ 24, VALUE_OPT_LOAD_CERTIFICATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LOAD_CERTIFICATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --load-certificate */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptLoad_Certificate,
+     /* desc, NAME, name */ LOAD_CERTIFICATE_DESC, LOAD_CERTIFICATE_NAME, LOAD_CERTIFICATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 25, VALUE_OPT_PKCS8,
+     /* equiv idx, value */ 25, VALUE_OPT_PKCS8,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PKCS8_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pkcs8 */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PKCS8_DESC, PKCS8_NAME, PKCS8_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 26, VALUE_OPT_BITS,
+     /* equiv idx, value */ 26, VALUE_OPT_BITS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ BITS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --bits */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ optionNumericVal,
+     /* desc, NAME, name */ BITS_DESC, BITS_NAME, BITS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 27, VALUE_OPT_SEC_PARAM,
+     /* equiv idx, value */ 27, VALUE_OPT_SEC_PARAM,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SEC_PARAM_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --sec-param */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ SEC_PARAM_DESC, SEC_PARAM_NAME, SEC_PARAM_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 28, VALUE_OPT_INDER,
+     /* equiv idx, value */ 28, VALUE_OPT_INDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --inder */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name,
+     /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX },
+
+  {  /* entry idx, value */ 29, VALUE_OPT_INRAW,
+     /* equiv idx, value */ 29, VALUE_OPT_INRAW,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INRAW_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --inraw */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptInraw,
+     /* desc, NAME, name */ INRAW_DESC, INRAW_NAME, INRAW_name,
+     /* disablement strs */ 0, 0 },
+
+  {  /* entry idx, value */ 30, VALUE_OPT_PROVIDER,
+     /* equiv idx, value */ 30, VALUE_OPT_PROVIDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PROVIDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --provider */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptProvider,
+     /* desc, NAME, name */ PROVIDER_DESC, PROVIDER_NAME, PROVIDER_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* 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, 0,
+     /* 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, 0,
+     /* 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, 0,
+     /* 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 }
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the p11tool Option Environment
+ */
+#define zPROGNAME       (p11tool_opt_strs+2675)
+#define zUsageTitle     (p11tool_opt_strs+2683)
+#define zRcName         NULL
+#define apzHomeList     NULL
+#define zBugsAddr       (p11tool_opt_strs+2795)
+#define zExplain        (p11tool_opt_strs+2814)
+#define zDetail         (p11tool_opt_strs+2817)
+#define zFullVersion    (p11tool_opt_strs+3073)
+/* extracted from optcode.tlib near line 350 */
+
+#if defined(ENABLE_NLS)
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
+  static tOptionXlateProc translate_option_strings;
+#else
+# define OPTPROC_BASE OPTPROC_NONE
+# define translate_option_strings NULL
+#endif /* ENABLE_NLS */
+
+
+#define p11tool_full_usage (NULL)
+
+#define p11tool_short_usage (p11tool_opt_strs+3091)
+
+#endif /* not defined __doxygen__ */
+
+/*
+ *  Create the static procedure(s) declared above.
+ */
+/**
+ * The callout function that invokes the optionUsage function.
+ *
+ * @param pOptions the AutoOpts option description structure
+ * @param pOptDesc the descriptor for the "help" (usage) option.
+ * @noreturn
+ */
+static void
+doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
+{
+    optionUsage(&p11toolOptions, P11TOOL_EXIT_SUCCESS);
+    /* NOTREACHED */
+    (void)pOptDesc;
+    (void)pOptions;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the p11tool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-privkey option.
+ *
+ * @param pOptions the p11tool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Privkey(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-pubkey option.
+ *
+ * @param pOptions the p11tool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Pubkey(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the load-certificate option.
+ *
+ * @param pOptions the p11tool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptLoad_Certificate(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the inraw option.
+ *
+ * @param pOptions the p11tool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptInraw(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_INDER);
+    if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0))
+        USAGE(P11TOOL_EXIT_FAILURE);
+
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the provider option.
+ *
+ * @param pOptions the p11tool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptProvider(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+/* extracted from optmain.tlib near line 1113 */
+
+/**
+ * The directory containing the data associated with p11tool.
+ */
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
+
+/**
+ * Information about the person or institution that packaged p11tool
+ * for the current distribution.
+ */
+#ifndef  WITH_PACKAGER
+# define p11tool_packager_info NULL
+#else
+static char const p11tool_packager_info[] =
+    "Packaged by " WITH_PACKAGER
+
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport p11tool bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+#ifndef __doxygen__
+
+#endif /* __doxygen__ */
+/**
+ * The option definitions for p11tool.  The one structure that
+ * binds them all.
+ */
+tOptions p11toolOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NEGATIONS
+    + OPTPROC_REORDER
+    + 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 */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    34 /* full option count */, 31 /* user option count */,
+    p11tool_full_usage, p11tool_short_usage,
+    NULL, NULL,
+    PKGDATADIR, p11tool_packager_info
+};
+
+#if ENABLE_NLS
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#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.
+ *
+ * @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* pzRes;
+    if (pz == NULL)
+        return NULL;
+    pzRes = _(pz);
+    if (pzRes == pz)
+        return pzRes;
+    pzRes = strdup(pzRes);
+    if (pzRes == NULL) {
+        fputs(_("No memory for duping translated strings\n"), stderr);
+        exit(P11TOOL_EXIT_FAILURE);
+    }
+    return pzRes;
+}
+
+static void coerce_it(void** s) { *s = AO_gettext(*s);
+}
+
+/**
+ * Translate all the translatable strings in the p11toolOptions
+ * structure defined above.  This is done only once.
+ */
+static void
+translate_option_strings(void)
+{
+    tOptions * const pOpt = &p11toolOptions;
+
+    /*
+     *  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_usage_text.field_ct != 0) {
+        /*
+         *  Do the translations.  The first pointer follows the field count
+         *  field.  The field count field is the size of a pointer.
+         */
+        tOptDesc * pOD = pOpt->pOptDesc;
+        char **    ppz = (char**)(void*)&(option_usage_text);
+        int        ix  = option_usage_text.field_ct;
+
+        do {
+            ppz++;
+            *ppz = AO_gettext(*ppz);
+        } while (--ix > 0);
+
+        coerce_it((void*)&(pOpt->pzCopyright));
+        coerce_it((void*)&(pOpt->pzCopyNotice));
+        coerce_it((void*)&(pOpt->pzFullVersion));
+        coerce_it((void*)&(pOpt->pzUsageTitle));
+        coerce_it((void*)&(pOpt->pzExplain));
+        coerce_it((void*)&(pOpt->pzDetail));
+        coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
+        option_usage_text.field_ct = 0;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
+            coerce_it((void*)&(pOD->pzText));
+    }
+
+    if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
+        tOptDesc * pOD = pOpt->pOptDesc;
+        int        ix;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
+            coerce_it((void*)&(pOD->pz_Name));
+            coerce_it((void*)&(pOD->pz_DisableName));
+            coerce_it((void*)&(pOD->pz_DisablePfx));
+        }
+        /* prevent re-translation */
+        p11toolOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+    }
+}
+
+#endif /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+/* p11tool-args.c ends here */
diff --git a/src/p11tool-args.h b/src/p11tool-args.h
new file mode 100644
index 0000000..70f2ed5
--- /dev/null
+++ b/src/p11tool-args.h
@@ -0,0 +1,245 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (p11tool-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:30 PM by AutoGen 5.16
+ *  From the definitions    p11tool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the p11tool 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 p11tool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  p11tool 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.
+ *  
+ *  p11tool 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the p11tool program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_P11TOOL_ARGS_H_GUARD
+#define AUTOOPTS_P11TOOL_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG              =  0,
+    INDEX_OPT_OUTFILE            =  1,
+    INDEX_OPT_LIST_TOKENS        =  2,
+    INDEX_OPT_EXPORT             =  3,
+    INDEX_OPT_LIST_MECHANISMS    =  4,
+    INDEX_OPT_LIST_ALL           =  5,
+    INDEX_OPT_LIST_ALL_CERTS     =  6,
+    INDEX_OPT_LIST_CERTS         =  7,
+    INDEX_OPT_LIST_ALL_PRIVKEYS  =  8,
+    INDEX_OPT_LIST_ALL_TRUSTED   =  9,
+    INDEX_OPT_INITIALIZE         = 10,
+    INDEX_OPT_WRITE              = 11,
+    INDEX_OPT_DELETE             = 12,
+    INDEX_OPT_GENERATE_RSA       = 13,
+    INDEX_OPT_GENERATE_DSA       = 14,
+    INDEX_OPT_GENERATE_ECC       = 15,
+    INDEX_OPT_LABEL              = 16,
+    INDEX_OPT_TRUSTED            = 17,
+    INDEX_OPT_PRIVATE            = 18,
+    INDEX_OPT_LOGIN              = 19,
+    INDEX_OPT_DETAILED_URL       = 20,
+    INDEX_OPT_SECRET_KEY         = 21,
+    INDEX_OPT_LOAD_PRIVKEY       = 22,
+    INDEX_OPT_LOAD_PUBKEY        = 23,
+    INDEX_OPT_LOAD_CERTIFICATE   = 24,
+    INDEX_OPT_PKCS8              = 25,
+    INDEX_OPT_BITS               = 26,
+    INDEX_OPT_SEC_PARAM          = 27,
+    INDEX_OPT_INDER              = 28,
+    INDEX_OPT_INRAW              = 29,
+    INDEX_OPT_PROVIDER           = 30,
+    INDEX_OPT_VERSION            = 31,
+    INDEX_OPT_HELP               = 32,
+    INDEX_OPT_MORE_HELP          = 33
+} teOptIndex;
+
+#define OPTION_CT    34
+#define P11TOOL_VERSION       "@VERSION@"
+#define P11TOOL_FULL_VERSION  "p11tool @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (p11toolOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of p11tool exit codes
+ */
+typedef enum {
+    P11TOOL_EXIT_SUCCESS = 0,
+    P11TOOL_EXIT_FAILURE = 1,
+    P11TOOL_EXIT_LIBOPTS_FAILURE = 70
+} p11tool_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_OUTFILE        1
+#define VALUE_OPT_LIST_TOKENS    2
+#define VALUE_OPT_EXPORT         3
+#define VALUE_OPT_LIST_MECHANISMS 4
+#define VALUE_OPT_LIST_ALL       5
+#define VALUE_OPT_LIST_ALL_CERTS 6
+#define VALUE_OPT_LIST_CERTS     7
+#define VALUE_OPT_LIST_ALL_PRIVKEYS 8
+#define VALUE_OPT_LIST_ALL_TRUSTED 9
+#define VALUE_OPT_INITIALIZE     10
+#define VALUE_OPT_WRITE          11
+#define VALUE_OPT_DELETE         12
+#define VALUE_OPT_GENERATE_RSA   13
+#define VALUE_OPT_GENERATE_DSA   14
+#define VALUE_OPT_GENERATE_ECC   15
+#define VALUE_OPT_LABEL          16
+#define VALUE_OPT_TRUSTED        17
+#define VALUE_OPT_PRIVATE        18
+#define VALUE_OPT_LOGIN          19
+#define VALUE_OPT_DETAILED_URL   20
+#define VALUE_OPT_SECRET_KEY     21
+#define VALUE_OPT_LOAD_PRIVKEY   22
+#define VALUE_OPT_LOAD_PUBKEY    23
+#define VALUE_OPT_LOAD_CERTIFICATE 24
+#define VALUE_OPT_PKCS8          '8'
+#define VALUE_OPT_BITS           26
+
+#define OPT_VALUE_BITS           (DESC(BITS).optArg.argInt)
+#define VALUE_OPT_SEC_PARAM      27
+#define VALUE_OPT_INDER          28
+#define VALUE_OPT_INRAW          29
+#define VALUE_OPT_PROVIDER       30
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(p11toolOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(p11toolOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                p11toolOptions.curOptIdx = (n); \
+                p11toolOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*p11toolOptions.pUsageProc)(&p11toolOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the p11tool option descriptor.
+ */
+extern tOptions p11toolOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(p11toolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(p11toolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(p11toolOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(p11toolOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_P11TOOL_ARGS_H_GUARD */
+/* p11tool-args.h ends here */
diff --git a/src/libopts/genshell.c b/src/psk-args.c
similarity index 50%
copy from src/libopts/genshell.c
copy to src/psk-args.c
index 16ca245..2d732c5 100644
--- a/src/libopts/genshell.c
+++ b/src/psk-args.c
@@ -1,36 +1,36 @@
 /*   -*- buffer-read-only: t -*- vi: set ro:
  *  
- *  DO NOT EDIT THIS FILE   (genshell.c)
+ *  DO NOT EDIT THIS FILE   (psk-args.c)
  *  
- *  It has been AutoGen-ed  May  6, 2012 at 04:20:59 PM by AutoGen 5.16pre36
- *  From the definitions    genshell.def
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:26 PM by AutoGen 5.16
+ *  From the definitions    psk-args.def
  *  and the template file   options
  *
  * Generated from AutoOpts 36:4:11 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 genshellopt author or copyright holder.  AutoOpts is
+ *  by the psktool 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 genshellopt program is copyrighted and licensed
+ * The psktool program is copyrighted and licensed
  * under the following terms:
  *
- *  Copyright (C) 1999-2012 Bruce Korb, all rights reserved.
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
  *
- *  genshellopt is free software: you can redistribute it and/or modify it
+ *  psktool 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.
  *  
- *  genshellopt is distributed in the hope that it will be useful, but
+ *  psktool 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.
@@ -41,12 +41,13 @@
 
 #ifndef __doxygen__
 #define OPTION_CODE_COMPILE 1
-#include "genshell.h"
+#include "psk-args.h"
 #include <sys/types.h>
 
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <errno.h>
 
 #ifdef  __cplusplus
 extern "C" {
@@ -55,90 +56,108 @@ extern FILE * option_usage_fp;
 
 /* TRANSLATORS: choose the translation for option names wisely because you
                 cannot ever change your mind. */
-#define zCopyright      (genshellopt_opt_strs+0)
-#define zLicenseDescrip (genshellopt_opt_strs+260)
+#define zCopyright      (psktool_opt_strs+0)
+#define zLicenseDescrip (psktool_opt_strs+278)
 
-extern tUsageProc genshelloptUsage;
 
 #ifndef NULL
 #  define NULL 0
 #endif
 
 /*
- *  genshellopt option static const strings
+ *  psktool option static const strings
  */
-static char const genshellopt_opt_strs[1690] =
-/*     0 */ "genshellopt 1\n"
-            "Copyright (C) 1999-2012 Bruce Korb, all rights reserved.\n"
+static char const psktool_opt_strs[1505] =
+/*     0 */ "psktool @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
             "This is free software. It is licensed for use, modification and\n"
             "redistribution under the terms of the\n"
             "GNU General Public License, version 3 or later\n"
             "    <http://gnu.org/licenses/gpl.html>\n\0"
-/*   260 */ "genshellopt is free software: you can redistribute it and/or modify it\n"
-            "under the terms of the GNU General Public License as published by the Free\n"
+/*   278 */ "psktool is free software: you can redistribute it and/or modify it under\n"
+            "the terms of the GNU General Public License as published by the Free\n"
             "Software Foundation, either version 3 of the License, or (at your option)\n"
             "any later version.\n\n"
-            "genshellopt is distributed in the hope that it will be useful, but WITHOUT\n"
-            "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
-            "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
-            "more details.\n\n"
+            "psktool 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"
-/*   871 */ "Output Script File\0"
-/*   890 */ "SCRIPT\0"
-/*   897 */ "script\0"
-/*   904 */ "Shell name (follows \"#!\" magic)\0"
-/*   936 */ "SHELL\0"
-/*   942 */ "no-shell\0"
-/*   951 */ "no\0"
-/*   954 */ "Display extended usage information and exit\0"
-/*   998 */ "help\0"
-/*  1003 */ "Extended usage information passed thru pager\0"
-/*  1048 */ "more-help\0"
-/*  1058 */ "Output version information and exit\0"
-/*  1094 */ "version\0"
-/*  1102 */ "GENSHELLOPT\0"
-/*  1114 */ "genshellopt - Generate Shell Option Processing Script - Ver. 1\n"
+/*   881 */ "Enable debugging.\0"
+/*   899 */ "DEBUG\0"
+/*   905 */ "debug\0"
+/*   911 */ "specify the key size in bytes\0"
+/*   941 */ "KEYSIZE\0"
+/*   949 */ "keysize\0"
+/*   957 */ "specify a username\0"
+/*   976 */ "USERNAME\0"
+/*   985 */ "username\0"
+/*   994 */ "specify a password file.\0"
+/*  1019 */ "PASSWD\0"
+/*  1026 */ "passwd\0"
+/*  1033 */ "Display extended usage information and exit\0"
+/*  1077 */ "help\0"
+/*  1082 */ "Extended usage information passed thru pager\0"
+/*  1127 */ "more-help\0"
+/*  1137 */ "Output version information and exit\0"
+/*  1173 */ "version\0"
+/*  1181 */ "PSKTOOL\0"
+/*  1189 */ "psktool - GnuTLS PSK tool - Ver. @VERSION@\n"
             "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
-/*  1235 */ "[email protected]\0"
-/*  1271 */ "\n"
-            "Note that ``shell'' is only useful if the output file does not already\n"
-            "exist.  If it does, then the shell name and optional first argument will be\n"
-            "extracted from the script file.\n\0"
-/*  1452 */ "\n"
-            "If the script file already exists and contains Automated Option Processing\n"
-            "text, the second line of the file through the ending tag will be replaced\n"
-            "by the newly generated text.  The first ``#!'' line will be regenerated.\n\0"
-/*  1676 */ "genshellopt 1";
+/*  1290 */ "[email protected]\0"
+/*  1309 */ "\n\n\0"
+/*  1312 */ "\n"
+            "Program that generates random keys for use with TLS-PSK.  The keys are\n"
+            "stored in hexadecimal format in a key file.\n\0"
+/*  1429 */ "psktool @VERSION@\0"
+/*  1447 */ "psktool [options]\n"
+            "psktool --help for usage instructions.\n";
 
 /*
- *  script option description:
+ *  debug option description:
  */
-#define SCRIPT_DESC      (genshellopt_opt_strs+871)
-#define SCRIPT_NAME      (genshellopt_opt_strs+890)
-#define SCRIPT_name      (genshellopt_opt_strs+897)
-#define SCRIPT_FLAGS     (OPTST_DISABLED \
+#define DEBUG_DESC      (psktool_opt_strs+881)
+#define DEBUG_NAME      (psktool_opt_strs+899)
+#define DEBUG_name      (psktool_opt_strs+905)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  keysize option description:
+ */
+#define KEYSIZE_DESC      (psktool_opt_strs+911)
+#define KEYSIZE_NAME      (psktool_opt_strs+941)
+#define KEYSIZE_name      (psktool_opt_strs+949)
+#define KEYSIZE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  username option description:
+ */
+#define USERNAME_DESC      (psktool_opt_strs+957)
+#define USERNAME_NAME      (psktool_opt_strs+976)
+#define USERNAME_name      (psktool_opt_strs+985)
+#define USERNAME_FLAGS     (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
- *  shell option description:
+ *  passwd option description:
  */
-#define SHELL_DESC      (genshellopt_opt_strs+904)
-#define SHELL_NAME      (genshellopt_opt_strs+936)
-#define NOT_SHELL_name  (genshellopt_opt_strs+942)
-#define NOT_SHELL_PFX   (genshellopt_opt_strs+951)
-#define SHELL_name      (NOT_SHELL_name + 3)
-#define SHELL_FLAGS     (OPTST_INITENABLED \
+#define PASSWD_DESC      (psktool_opt_strs+994)
+#define PASSWD_NAME      (psktool_opt_strs+1019)
+#define PASSWD_name      (psktool_opt_strs+1026)
+#define PASSWD_FLAGS     (OPTST_DISABLED \
         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
 
 /*
  *  Help/More_Help/Version option descriptions:
  */
-#define HELP_DESC       (genshellopt_opt_strs+954)
-#define HELP_name       (genshellopt_opt_strs+998)
+#define HELP_DESC       (psktool_opt_strs+1033)
+#define HELP_name       (psktool_opt_strs+1077)
 #ifdef HAVE_WORKING_FORK
-#define MORE_HELP_DESC  (genshellopt_opt_strs+1003)
-#define MORE_HELP_name  (genshellopt_opt_strs+1048)
+#define MORE_HELP_DESC  (psktool_opt_strs+1082)
+#define MORE_HELP_name  (psktool_opt_strs+1127)
 #define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
 #else
 #define MORE_HELP_DESC  NULL
@@ -151,8 +170,8 @@ static char const genshellopt_opt_strs[1690] =
 #  define VER_FLAGS     (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
                          OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
 #endif
-#define VER_DESC        (genshellopt_opt_strs+1058)
-#define VER_name        (genshellopt_opt_strs+1094)
+#define VER_DESC        (psktool_opt_strs+1137)
+#define VER_name        (psktool_opt_strs+1173)
 /*
  *  Declare option callback procedures
  */
@@ -162,42 +181,66 @@ extern tOptProc
     optionStackArg,     optionTimeDate,     optionTimeVal,
     optionUnstackArg,   optionVendorOption;
 static tOptProc
-    doUsageOpt;
+    doOptDebug, doOptKeysize, doUsageOpt;
 #define VER_PROC        optionPrintVersion
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 /**
- *  Define the genshellopt Option Descriptions.
- * This is an array of GENSHELL_OPTION_CT entries, one for each
- * option that the genshellopt program responds to.
+ *  Define the psktool Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the psktool program responds to.
  */
-static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
-  {  /* entry idx, value */ 0, VALUE_GENSHELL_OPT_SCRIPT,
-     /* equiv idx, value */ 0, VALUE_GENSHELL_OPT_SCRIPT,
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_KEYSIZE,
+     /* equiv idx, value */ 1, VALUE_OPT_KEYSIZE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ SCRIPT_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --script */
+     /* opt state flags  */ KEYSIZE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --keysize */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptKeysize,
+     /* desc, NAME, name */ KEYSIZE_DESC, KEYSIZE_NAME, KEYSIZE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_USERNAME,
+     /* equiv idx, value */ 2, VALUE_OPT_USERNAME,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ USERNAME_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --username */
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ SCRIPT_DESC, SCRIPT_NAME, SCRIPT_name,
+     /* desc, NAME, name */ USERNAME_DESC, USERNAME_NAME, USERNAME_name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 1, VALUE_GENSHELL_OPT_SHELL,
-     /* equiv idx, value */ 1, VALUE_GENSHELL_OPT_SHELL,
+  {  /* entry idx, value */ 3, VALUE_OPT_PASSWD,
+     /* equiv idx, value */ 3, VALUE_OPT_PASSWD,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
-     /* opt state flags  */ SHELL_FLAGS, 0,
-     /* last opt argumnt */ { NULL }, /* --shell */
+     /* opt state flags  */ PASSWD_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --passwd */
      /* arg list/cookie  */ NULL,
      /* must/cannot opts */ NULL, NULL,
      /* option proc      */ NULL,
-     /* desc, NAME, name */ SHELL_DESC, SHELL_NAME, SHELL_name,
-     /* disablement strs */ NOT_SHELL_name, NOT_SHELL_PFX },
+     /* desc, NAME, name */ PASSWD_DESC, PASSWD_NAME, PASSWD_name,
+     /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ INDEX_GENSHELL_OPT_VERSION, VALUE_GENSHELL_OPT_VERSION,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_GENSHELL_OPT_VERSION,
+  {  /* 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, 0,
@@ -210,8 +253,8 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 
 
 
-  {  /* entry idx, value */ INDEX_GENSHELL_OPT_HELP, VALUE_GENSHELL_OPT_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_GENSHELL_OPT_HELP,
+  {  /* 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, 0,
@@ -222,8 +265,8 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
      /* desc, NAME, name */ HELP_DESC, NULL, HELP_name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ INDEX_GENSHELL_OPT_MORE_HELP, VALUE_GENSHELL_OPT_MORE_HELP,
-     /* equiv idx value  */ NO_EQUIVALENT, VALUE_GENSHELL_OPT_MORE_HELP,
+  {  /* 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, 0,
@@ -238,20 +281,20 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- *  Define the genshellopt Option Environment
+ *  Define the psktool Option Environment
  */
-#define zPROGNAME       (genshellopt_opt_strs+1102)
-#define zUsageTitle     (genshellopt_opt_strs+1114)
+#define zPROGNAME       (psktool_opt_strs+1181)
+#define zUsageTitle     (psktool_opt_strs+1189)
 #define zRcName         NULL
 #define apzHomeList     NULL
-#define zBugsAddr       (genshellopt_opt_strs+1235)
-#define zExplain        (genshellopt_opt_strs+1271)
-#define zDetail         (genshellopt_opt_strs+1452)
-#define zFullVersion    (genshellopt_opt_strs+1676)
+#define zBugsAddr       (psktool_opt_strs+1290)
+#define zExplain        (psktool_opt_strs+1309)
+#define zDetail         (psktool_opt_strs+1312)
+#define zFullVersion    (psktool_opt_strs+1429)
 /* extracted from optcode.tlib near line 350 */
 
 #if defined(ENABLE_NLS)
-# define OPTPROC_BASE OPTPROC_TRANSLATE
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
   static tOptionXlateProc translate_option_strings;
 #else
 # define OPTPROC_BASE OPTPROC_NONE
@@ -259,9 +302,9 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 #endif /* ENABLE_NLS */
 
 
-#define genshellopt_full_usage (NULL)
+#define psktool_full_usage (NULL)
 
-#define genshellopt_short_usage (NULL)
+#define psktool_short_usage (psktool_opt_strs+1447)
 
 #endif /* not defined __doxygen__ */
 
@@ -269,7 +312,7 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
  *  Create the static procedure(s) declared above.
  */
 /**
- * The callout function that invokes the genshelloptUsage function.
+ * The callout function that invokes the optionUsage function.
  *
  * @param pOptions the AutoOpts option description structure
  * @param pOptDesc the descriptor for the "help" (usage) option.
@@ -278,28 +321,100 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = {
 static void
 doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
 {
-    genshelloptUsage(&genshelloptOptions, GENSHELLOPT_EXIT_SUCCESS);
+    optionUsage(&psktoolOptions, PSKTOOL_EXIT_SUCCESS);
     /* NOTREACHED */
     (void)pOptDesc;
     (void)pOptions;
 }
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the psktool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the keysize option.
+ *
+ * @param pOptions the psktool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptKeysize(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  512 } };
+    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, (void *)rng, 1);
+}
 /* extracted from optmain.tlib near line 1113 */
 
 /**
- * The directory containing the data associated with genshellopt.
+ * The directory containing the data associated with psktool.
  */
 #ifndef  PKGDATADIR
 # define PKGDATADIR ""
 #endif
 
 /**
- * Information about the person or institution that packaged genshellopt
+ * Information about the person or institution that packaged psktool
  * for the current distribution.
  */
 #ifndef  WITH_PACKAGER
-# define genshellopt_packager_info NULL
+# define psktool_packager_info NULL
 #else
-static char const genshellopt_packager_info[] =
+static char const psktool_packager_info[] =
     "Packaged by " WITH_PACKAGER
 
 # ifdef WITH_PACKAGER_VERSION
@@ -307,7 +422,7 @@ static char const genshellopt_packager_info[] =
 # endif
 
 # ifdef WITH_PACKAGER_BUG_REPORTS
-    "\nReport genshellopt bugs to " WITH_PACKAGER_BUG_REPORTS
+    "\nReport psktool bugs to " WITH_PACKAGER_BUG_REPORTS
 # endif
     "\n";
 #endif
@@ -315,10 +430,10 @@ static char const genshellopt_packager_info[] =
 
 #endif /* __doxygen__ */
 /**
- * The option definitions for genshellopt.  The one structure that
+ * The option definitions for psktool.  The one structure that
  * binds them all.
  */
-tOptions genshelloptOptions = {
+tOptions psktoolOptions = {
     OPTIONS_STRUCT_VERSION,
     0, NULL,                    /* original argc + argv    */
     ( OPTPROC_BASE
@@ -326,8 +441,9 @@ tOptions genshelloptOptions = {
     + OPTPROC_SHORTOPT
     + OPTPROC_LONGOPT
     + OPTPROC_NO_REQ_OPT
-    + OPTPROC_NEGATIONS
-    + OPTPROC_NO_ARGS ),
+    + OPTPROC_NO_ARGS
+    + OPTPROC_GNUUSAGE
+    + OPTPROC_MISUSE ),
     0, NULL,                    /* current option index, current option */
     NULL,         NULL,         zPROGNAME,
     zRcName,      zCopyright,   zLicenseDescrip,
@@ -335,20 +451,20 @@ tOptions genshelloptOptions = {
     zExplain,     zDetail,      optDesc,
     zBugsAddr,                  /* address to send bugs to */
     NULL, NULL,                 /* extensions/saved state  */
-    genshelloptUsage, /* usage procedure */
+    optionUsage, /* usage procedure */
     translate_option_strings,   /* translation procedure */
     /*
      *  Indexes to special options
      */
-    { INDEX_GENSHELL_OPT_MORE_HELP, /* more-help option index */
+    { INDEX_OPT_MORE_HELP, /* more-help option index */
       NO_EQUIVALENT, /* save option index */
       NO_EQUIVALENT, /* '-#' option index */
       NO_EQUIVALENT /* index of default opt */
     },
-    5 /* full option count */, 2 /* user option count */,
-    genshellopt_full_usage, genshellopt_short_usage,
+    7 /* full option count */, 4 /* user option count */,
+    psktool_full_usage, psktool_short_usage,
     NULL, NULL,
-    PKGDATADIR, genshellopt_packager_info
+    PKGDATADIR, psktool_packager_info
 };
 
 #if ENABLE_NLS
@@ -382,7 +498,7 @@ AO_gettext(char const* pz)
     pzRes = strdup(pzRes);
     if (pzRes == NULL) {
         fputs(_("No memory for duping translated strings\n"), stderr);
-        exit(GENSHELLOPT_EXIT_FAILURE);
+        exit(PSKTOOL_EXIT_FAILURE);
     }
     return pzRes;
 }
@@ -391,13 +507,13 @@ static void coerce_it(void** s) { *s = AO_gettext(*s);
 }
 
 /**
- * Translate all the translatable strings in the genshelloptOptions
+ * Translate all the translatable strings in the psktoolOptions
  * structure defined above.  This is done only once.
  */
 static void
 translate_option_strings(void)
 {
-    tOptions * const pOpt = &genshelloptOptions;
+    tOptions * const pOpt = &psktoolOptions;
 
     /*
      *  Guard against re-translation.  It won't work.  The strings will have
@@ -424,6 +540,7 @@ translate_option_strings(void)
         coerce_it((void*)&(pOpt->pzExplain));
         coerce_it((void*)&(pOpt->pzDetail));
         coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
         option_usage_text.field_ct = 0;
 
         for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
@@ -440,7 +557,7 @@ translate_option_strings(void)
             coerce_it((void*)&(pOD->pz_DisablePfx));
         }
         /* prevent re-translation */
-        genshelloptOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+        psktoolOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
     }
 }
 
@@ -449,4 +566,4 @@ translate_option_strings(void)
 #ifdef  __cplusplus
 }
 #endif
-/* genshell.c ends here */
+/* psk-args.c ends here */
diff --git a/src/psk-args.h b/src/psk-args.h
new file mode 100644
index 0000000..ea11d63
--- /dev/null
+++ b/src/psk-args.h
@@ -0,0 +1,191 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (psk-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:26 PM by AutoGen 5.16
+ *  From the definitions    psk-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the psktool 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 psktool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  psktool 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.
+ *  
+ *  psktool 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the psktool program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_PSK_ARGS_H_GUARD
+#define AUTOOPTS_PSK_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG       =  0,
+    INDEX_OPT_KEYSIZE     =  1,
+    INDEX_OPT_USERNAME    =  2,
+    INDEX_OPT_PASSWD      =  3,
+    INDEX_OPT_VERSION     =  4,
+    INDEX_OPT_HELP        =  5,
+    INDEX_OPT_MORE_HELP   =  6
+} teOptIndex;
+
+#define OPTION_CT    7
+#define PSKTOOL_VERSION       "@VERSION@"
+#define PSKTOOL_FULL_VERSION  "psktool @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (psktoolOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of psktool exit codes
+ */
+typedef enum {
+    PSKTOOL_EXIT_SUCCESS = 0,
+    PSKTOOL_EXIT_FAILURE = 1,
+    PSKTOOL_EXIT_LIBOPTS_FAILURE = 70
+} psktool_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_KEYSIZE        's'
+
+#define OPT_VALUE_KEYSIZE        (DESC(KEYSIZE).optArg.argInt)
+#define VALUE_OPT_USERNAME       'u'
+#define VALUE_OPT_PASSWD         'p'
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(psktoolOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(psktoolOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                psktoolOptions.curOptIdx = (n); \
+                psktoolOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*psktoolOptions.pUsageProc)(&psktoolOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the psktool option descriptor.
+ */
+extern tOptions psktoolOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(psktoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(psktoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(psktoolOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(psktoolOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_PSK_ARGS_H_GUARD */
+/* psk-args.h ends here */
diff --git a/src/serv-args.c b/src/serv-args.c
new file mode 100644
index 0000000..ce71863
--- /dev/null
+++ b/src/serv-args.c
@@ -0,0 +1,1398 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (serv-args.c)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:24 PM by AutoGen 5.16
+ *  From the definitions    serv-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 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 gnutls-serv 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 gnutls-serv program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  gnutls-serv 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.
+ *  
+ *  gnutls-serv 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 "serv-args.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;
+
+/* TRANSLATORS: choose the translation for option names wisely because you
+                cannot ever change your mind. */
+#define zCopyright      (gnutls_serv_opt_strs+0)
+#define zLicenseDescrip (gnutls_serv_opt_strs+282)
+
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ *  gnutls-serv option static const strings
+ */
+static char const gnutls_serv_opt_strs[2947] =
+/*     0 */ "gnutls-serv @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
+            "This is free software. It is licensed for use, modification and\n"
+            "redistribution under the terms of the\n"
+            "GNU General Public License, version 3 or later\n"
+            "    <http://gnu.org/licenses/gpl.html>\n\0"
+/*   282 */ "gnutls-serv is free software: you can redistribute it and/or modify it\n"
+            "under the terms of the GNU General Public License as published by the Free\n"
+            "Software Foundation, either version 3 of the License, or (at your option)\n"
+            "any later version.\n\n"
+            "gnutls-serv is distributed in the hope that it will be useful, but WITHOUT\n"
+            "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n"
+            "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\n"
+            "more 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"
+/*   893 */ "Enable debugging.\0"
+/*   911 */ "DEBUG\0"
+/*   917 */ "debug\0"
+/*   923 */ "Don't accept session tickets\0"
+/*   952 */ "NOTICKET\0"
+/*   961 */ "noticket\0"
+/*   970 */ "Generate Diffie-Hellman and RSA-export parameters\0"
+/*  1020 */ "GENERATE\0"
+/*  1029 */ "generate\0"
+/*  1038 */ "Suppress some messages\0"
+/*  1061 */ "QUIET\0"
+/*  1067 */ "quiet\0"
+/*  1073 */ "Do not use a resumption database\0"
+/*  1106 */ "NODB\0"
+/*  1111 */ "nodb\0"
+/*  1116 */ "Act as an HTTP server\0"
+/*  1138 */ "HTTP\0"
+/*  1143 */ "http\0"
+/*  1148 */ "Act as an Echo server\0"
+/*  1170 */ "ECHO\0"
+/*  1175 */ "echo\0"
+/*  1180 */ "Use DTLS (datagram TLS) over UDP\0"
+/*  1213 */ "UDP\0"
+/*  1217 */ "udp\0"
+/*  1221 */ "Set MTU for datagram TLS\0"
+/*  1246 */ "MTU\0"
+/*  1250 */ "mtu\0"
+/*  1254 */ "Do not request a client certificate\0"
+/*  1290 */ "DISABLE_CLIENT_CERT\0"
+/*  1310 */ "disable-client-cert\0"
+/*  1330 */ "Require a client certificate\0"
+/*  1359 */ "REQUIRE_CLIENT_CERT\0"
+/*  1379 */ "require-client-cert\0"
+/*  1399 */ "Use DER format for certificates to read from\0"
+/*  1444 */ "X509FMTDER\0"
+/*  1455 */ "x509fmtder\0"
+/*  1466 */ "Priorities string\0"
+/*  1484 */ "PRIORITY\0"
+/*  1493 */ "priority\0"
+/*  1502 */ "DH params file to use\0"
+/*  1524 */ "DHPARAMS\0"
+/*  1533 */ "dhparams\0"
+/*  1542 */ "Certificate file or PKCS #11 URL to use\0"
+/*  1582 */ "X509CAFILE\0"
+/*  1593 */ "x509cafile\0"
+/*  1604 */ "CRL file to use\0"
+/*  1620 */ "X509CRLFILE\0"
+/*  1632 */ "x509crlfile\0"
+/*  1644 */ "PGP Key file to use\0"
+/*  1664 */ "PGPKEYFILE\0"
+/*  1675 */ "pgpkeyfile\0"
+/*  1686 */ "PGP Key ring file to use\0"
+/*  1711 */ "PGPKEYRING\0"
+/*  1722 */ "pgpkeyring\0"
+/*  1733 */ "PGP Public Key (certificate) file to use\0"
+/*  1774 */ "PGPCERTFILE\0"
+/*  1786 */ "pgpcertfile\0"
+/*  1798 */ "X.509 key file or PKCS #11 URL to use\0"
+/*  1836 */ "X509KEYFILE\0"
+/*  1848 */ "x509keyfile\0"
+/*  1860 */ "X.509 Certificate file or PKCS #11 URL to use\0"
+/*  1906 */ "X509CERTFILE\0"
+/*  1919 */ "x509certfile\0"
+/*  1932 */ "Alternative X.509 key file or PKCS #11 URL to use\0"
+/*  1982 */ "X509DSAKEYFILE\0"
+/*  1997 */ "x509dsakeyfile\0"
+/*  2012 */ "Alternative X.509 Certificate file or PKCS #11 URL to use\0"
+/*  2070 */ "X509DSACERTFILE\0"
+/*  2086 */ "x509dsacertfile\0"
+/*  2102 */ "X509ECCKEYFILE\0"
+/*  2117 */ "x509ecckeyfile\0"
+/*  2132 */ "X509ECCCERTFILE\0"
+/*  2148 */ "x509ecccertfile\0"
+/*  2164 */ "PGP subkey to use (hex or auto)\0"
+/*  2196 */ "PGPSUBKEY\0"
+/*  2206 */ "pgpsubkey\0"
+/*  2216 */ "SRP password file to use\0"
+/*  2241 */ "SRPPASSWD\0"
+/*  2251 */ "srppasswd\0"
+/*  2261 */ "SRP password configuration file to use\0"
+/*  2300 */ "SRPPASSWDCONF\0"
+/*  2314 */ "srppasswdconf\0"
+/*  2328 */ "PSK password file to use\0"
+/*  2353 */ "PSKPASSWD\0"
+/*  2363 */ "pskpasswd\0"
+/*  2373 */ "PSK identity hint to use\0"
+/*  2398 */ "PSKHINT\0"
+/*  2406 */ "pskhint\0"
+/*  2414 */ "The port to connect to\0"
+/*  2437 */ "PORT\0"
+/*  2442 */ "port\0"
+/*  2447 */ "Print a list of the supported algorithms and modes\0"
+/*  2498 */ "LIST\0"
+/*  2503 */ "list\0"
+/*  2508 */ "Display extended usage information and exit\0"
+/*  2552 */ "help\0"
+/*  2557 */ "Extended usage information passed thru pager\0"
+/*  2602 */ "more-help\0"
+/*  2612 */ "Output version information and exit\0"
+/*  2648 */ "version\0"
+/*  2656 */ "GNUTLS_SERV\0"
+/*  2668 */ "gnutls-serv - GnuTLS server - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
+/*  2771 */ "[email protected]\0"
+/*  2790 */ "\n\n\0"
+/*  2793 */ "\n"
+            "Server program that listens to incoming TLS connections.\n\0"
+/*  2852 */ "gnutls-serv @VERSION@\0"
+/*  2874 */ "Usage: gnutls-serv [options]\n"
+            "gnutls-serv --help for usage instructions.\n";
+
+/*
+ *  debug option description:
+ */
+#define DEBUG_DESC      (gnutls_serv_opt_strs+893)
+#define DEBUG_NAME      (gnutls_serv_opt_strs+911)
+#define DEBUG_name      (gnutls_serv_opt_strs+917)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  noticket option description:
+ */
+#define NOTICKET_DESC      (gnutls_serv_opt_strs+923)
+#define NOTICKET_NAME      (gnutls_serv_opt_strs+952)
+#define NOTICKET_name      (gnutls_serv_opt_strs+961)
+#define NOTICKET_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  generate option description:
+ */
+#define GENERATE_DESC      (gnutls_serv_opt_strs+970)
+#define GENERATE_NAME      (gnutls_serv_opt_strs+1020)
+#define GENERATE_name      (gnutls_serv_opt_strs+1029)
+#define GENERATE_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  quiet option description:
+ */
+#define QUIET_DESC      (gnutls_serv_opt_strs+1038)
+#define QUIET_NAME      (gnutls_serv_opt_strs+1061)
+#define QUIET_name      (gnutls_serv_opt_strs+1067)
+#define QUIET_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  nodb option description:
+ */
+#define NODB_DESC      (gnutls_serv_opt_strs+1073)
+#define NODB_NAME      (gnutls_serv_opt_strs+1106)
+#define NODB_name      (gnutls_serv_opt_strs+1111)
+#define NODB_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  http option description:
+ */
+#define HTTP_DESC      (gnutls_serv_opt_strs+1116)
+#define HTTP_NAME      (gnutls_serv_opt_strs+1138)
+#define HTTP_name      (gnutls_serv_opt_strs+1143)
+#define HTTP_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  echo option description:
+ */
+#define ECHO_DESC      (gnutls_serv_opt_strs+1148)
+#define ECHO_NAME      (gnutls_serv_opt_strs+1170)
+#define ECHO_name      (gnutls_serv_opt_strs+1175)
+#define ECHO_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  udp option description:
+ */
+#define UDP_DESC      (gnutls_serv_opt_strs+1180)
+#define UDP_NAME      (gnutls_serv_opt_strs+1213)
+#define UDP_name      (gnutls_serv_opt_strs+1217)
+#define UDP_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  mtu option description:
+ */
+#define MTU_DESC      (gnutls_serv_opt_strs+1221)
+#define MTU_NAME      (gnutls_serv_opt_strs+1246)
+#define MTU_name      (gnutls_serv_opt_strs+1250)
+#define MTU_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  disable-client-cert option description:
+ */
+#define DISABLE_CLIENT_CERT_DESC      (gnutls_serv_opt_strs+1254)
+#define DISABLE_CLIENT_CERT_NAME      (gnutls_serv_opt_strs+1290)
+#define DISABLE_CLIENT_CERT_name      (gnutls_serv_opt_strs+1310)
+#define DISABLE_CLIENT_CERT_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  require-client-cert option description:
+ */
+#define REQUIRE_CLIENT_CERT_DESC      (gnutls_serv_opt_strs+1330)
+#define REQUIRE_CLIENT_CERT_NAME      (gnutls_serv_opt_strs+1359)
+#define REQUIRE_CLIENT_CERT_name      (gnutls_serv_opt_strs+1379)
+#define REQUIRE_CLIENT_CERT_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  x509fmtder option description:
+ */
+#define X509FMTDER_DESC      (gnutls_serv_opt_strs+1399)
+#define X509FMTDER_NAME      (gnutls_serv_opt_strs+1444)
+#define X509FMTDER_name      (gnutls_serv_opt_strs+1455)
+#define X509FMTDER_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  priority option description:
+ */
+#define PRIORITY_DESC      (gnutls_serv_opt_strs+1466)
+#define PRIORITY_NAME      (gnutls_serv_opt_strs+1484)
+#define PRIORITY_name      (gnutls_serv_opt_strs+1493)
+#define PRIORITY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  dhparams option description:
+ */
+#define DHPARAMS_DESC      (gnutls_serv_opt_strs+1502)
+#define DHPARAMS_NAME      (gnutls_serv_opt_strs+1524)
+#define DHPARAMS_name      (gnutls_serv_opt_strs+1533)
+#define DHPARAMS_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  x509cafile option description:
+ */
+#define X509CAFILE_DESC      (gnutls_serv_opt_strs+1542)
+#define X509CAFILE_NAME      (gnutls_serv_opt_strs+1582)
+#define X509CAFILE_name      (gnutls_serv_opt_strs+1593)
+#define X509CAFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509crlfile option description:
+ */
+#define X509CRLFILE_DESC      (gnutls_serv_opt_strs+1604)
+#define X509CRLFILE_NAME      (gnutls_serv_opt_strs+1620)
+#define X509CRLFILE_name      (gnutls_serv_opt_strs+1632)
+#define X509CRLFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pgpkeyfile option description:
+ */
+#define PGPKEYFILE_DESC      (gnutls_serv_opt_strs+1644)
+#define PGPKEYFILE_NAME      (gnutls_serv_opt_strs+1664)
+#define PGPKEYFILE_name      (gnutls_serv_opt_strs+1675)
+#define PGPKEYFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pgpkeyring option description:
+ */
+#define PGPKEYRING_DESC      (gnutls_serv_opt_strs+1686)
+#define PGPKEYRING_NAME      (gnutls_serv_opt_strs+1711)
+#define PGPKEYRING_name      (gnutls_serv_opt_strs+1722)
+#define PGPKEYRING_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pgpcertfile option description:
+ */
+#define PGPCERTFILE_DESC      (gnutls_serv_opt_strs+1733)
+#define PGPCERTFILE_NAME      (gnutls_serv_opt_strs+1774)
+#define PGPCERTFILE_name      (gnutls_serv_opt_strs+1786)
+#define PGPCERTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  x509keyfile option description:
+ */
+#define X509KEYFILE_DESC      (gnutls_serv_opt_strs+1798)
+#define X509KEYFILE_NAME      (gnutls_serv_opt_strs+1836)
+#define X509KEYFILE_name      (gnutls_serv_opt_strs+1848)
+#define X509KEYFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509certfile option description:
+ */
+#define X509CERTFILE_DESC      (gnutls_serv_opt_strs+1860)
+#define X509CERTFILE_NAME      (gnutls_serv_opt_strs+1906)
+#define X509CERTFILE_name      (gnutls_serv_opt_strs+1919)
+#define X509CERTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509dsakeyfile option description:
+ */
+#define X509DSAKEYFILE_DESC      (gnutls_serv_opt_strs+1932)
+#define X509DSAKEYFILE_NAME      (gnutls_serv_opt_strs+1982)
+#define X509DSAKEYFILE_name      (gnutls_serv_opt_strs+1997)
+#define X509DSAKEYFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509dsacertfile option description:
+ */
+#define X509DSACERTFILE_DESC      (gnutls_serv_opt_strs+2012)
+#define X509DSACERTFILE_NAME      (gnutls_serv_opt_strs+2070)
+#define X509DSACERTFILE_name      (gnutls_serv_opt_strs+2086)
+#define X509DSACERTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509ecckeyfile option description:
+ */
+#define X509ECCKEYFILE_DESC      (gnutls_serv_opt_strs+1932)
+#define X509ECCKEYFILE_NAME      (gnutls_serv_opt_strs+2102)
+#define X509ECCKEYFILE_name      (gnutls_serv_opt_strs+2117)
+#define X509ECCKEYFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  x509ecccertfile option description:
+ */
+#define X509ECCCERTFILE_DESC      (gnutls_serv_opt_strs+2012)
+#define X509ECCCERTFILE_NAME      (gnutls_serv_opt_strs+2132)
+#define X509ECCCERTFILE_name      (gnutls_serv_opt_strs+2148)
+#define X509ECCCERTFILE_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  pgpsubkey option description:
+ */
+#define PGPSUBKEY_DESC      (gnutls_serv_opt_strs+2164)
+#define PGPSUBKEY_NAME      (gnutls_serv_opt_strs+2196)
+#define PGPSUBKEY_name      (gnutls_serv_opt_strs+2206)
+#define PGPSUBKEY_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  srppasswd option description:
+ */
+#define SRPPASSWD_DESC      (gnutls_serv_opt_strs+2216)
+#define SRPPASSWD_NAME      (gnutls_serv_opt_strs+2241)
+#define SRPPASSWD_name      (gnutls_serv_opt_strs+2251)
+#define SRPPASSWD_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  srppasswdconf option description:
+ */
+#define SRPPASSWDCONF_DESC      (gnutls_serv_opt_strs+2261)
+#define SRPPASSWDCONF_NAME      (gnutls_serv_opt_strs+2300)
+#define SRPPASSWDCONF_name      (gnutls_serv_opt_strs+2314)
+#define SRPPASSWDCONF_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pskpasswd option description:
+ */
+#define PSKPASSWD_DESC      (gnutls_serv_opt_strs+2328)
+#define PSKPASSWD_NAME      (gnutls_serv_opt_strs+2353)
+#define PSKPASSWD_name      (gnutls_serv_opt_strs+2363)
+#define PSKPASSWD_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
+
+/*
+ *  pskhint option description:
+ */
+#define PSKHINT_DESC      (gnutls_serv_opt_strs+2373)
+#define PSKHINT_NAME      (gnutls_serv_opt_strs+2398)
+#define PSKHINT_name      (gnutls_serv_opt_strs+2406)
+#define PSKHINT_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  port option description:
+ */
+#define PORT_DESC      (gnutls_serv_opt_strs+2414)
+#define PORT_NAME      (gnutls_serv_opt_strs+2437)
+#define PORT_name      (gnutls_serv_opt_strs+2442)
+#define PORT_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  list option description:
+ */
+#define LIST_DESC      (gnutls_serv_opt_strs+2447)
+#define LIST_NAME      (gnutls_serv_opt_strs+2498)
+#define LIST_name      (gnutls_serv_opt_strs+2503)
+#define LIST_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  Help/More_Help/Version option descriptions:
+ */
+#define HELP_DESC       (gnutls_serv_opt_strs+2508)
+#define HELP_name       (gnutls_serv_opt_strs+2552)
+#ifdef HAVE_WORKING_FORK
+#define MORE_HELP_DESC  (gnutls_serv_opt_strs+2557)
+#define MORE_HELP_name  (gnutls_serv_opt_strs+2602)
+#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#else
+#define MORE_HELP_DESC  NULL
+#define MORE_HELP_name  NULL
+#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        (gnutls_serv_opt_strs+2612)
+#define VER_name        (gnutls_serv_opt_strs+2648)
+/*
+ *  Declare option callback procedures
+ */
+extern tOptProc
+    optionBooleanVal,   optionNestedVal,    optionNumericVal,
+    optionPagedUsage,   optionPrintVersion, optionResetOpt,
+    optionStackArg,     optionTimeDate,     optionTimeVal,
+    optionUnstackArg,   optionVendorOption;
+static tOptProc
+    doOptDebug,         doOptDhparams,      doOptMtu,
+    doOptPgpcertfile,   doOptPgpkeyfile,    doOptPgpkeyring,
+    doOptPskpasswd,     doOptSrppasswd,     doOptSrppasswdconf,
+    doOptX509crlfile,   doUsageOpt;
+#define VER_PROC        optionPrintVersion
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ *  Define the gnutls-serv Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the gnutls-serv program responds to.
+ */
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_NOTICKET,
+     /* equiv idx, value */ 1, VALUE_OPT_NOTICKET,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ NOTICKET_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --noticket */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ NOTICKET_DESC, NOTICKET_NAME, NOTICKET_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_GENERATE,
+     /* equiv idx, value */ 2, VALUE_OPT_GENERATE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ GENERATE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --generate */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ GENERATE_DESC, GENERATE_NAME, GENERATE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 3, VALUE_OPT_QUIET,
+     /* equiv idx, value */ 3, 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      */ NULL,
+     /* desc, NAME, name */ QUIET_DESC, QUIET_NAME, QUIET_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 4, VALUE_OPT_NODB,
+     /* equiv idx, value */ 4, VALUE_OPT_NODB,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ NODB_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --nodb */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ NODB_DESC, NODB_NAME, NODB_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 5, VALUE_OPT_HTTP,
+     /* equiv idx, value */ 5, VALUE_OPT_HTTP,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ HTTP_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --http */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ HTTP_DESC, HTTP_NAME, HTTP_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 6, VALUE_OPT_ECHO,
+     /* equiv idx, value */ 6, VALUE_OPT_ECHO,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ ECHO_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --echo */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ ECHO_DESC, ECHO_NAME, ECHO_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 7, VALUE_OPT_UDP,
+     /* equiv idx, value */ 7, VALUE_OPT_UDP,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ UDP_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --udp */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ UDP_DESC, UDP_NAME, UDP_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 8, VALUE_OPT_MTU,
+     /* equiv idx, value */ 8, VALUE_OPT_MTU,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ MTU_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --mtu */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptMtu,
+     /* desc, NAME, name */ MTU_DESC, MTU_NAME, MTU_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 9, VALUE_OPT_DISABLE_CLIENT_CERT,
+     /* equiv idx, value */ 9, VALUE_OPT_DISABLE_CLIENT_CERT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DISABLE_CLIENT_CERT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --disable-client-cert */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ DISABLE_CLIENT_CERT_DESC, DISABLE_CLIENT_CERT_NAME, DISABLE_CLIENT_CERT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 10, VALUE_OPT_REQUIRE_CLIENT_CERT,
+     /* equiv idx, value */ 10, VALUE_OPT_REQUIRE_CLIENT_CERT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ REQUIRE_CLIENT_CERT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --require-client-cert */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ REQUIRE_CLIENT_CERT_DESC, REQUIRE_CLIENT_CERT_NAME, REQUIRE_CLIENT_CERT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 11, VALUE_OPT_X509FMTDER,
+     /* equiv idx, value */ 11, VALUE_OPT_X509FMTDER,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509FMTDER_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509fmtder */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509FMTDER_DESC, X509FMTDER_NAME, X509FMTDER_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 12, VALUE_OPT_PRIORITY,
+     /* equiv idx, value */ 12, VALUE_OPT_PRIORITY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PRIORITY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --priority */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PRIORITY_DESC, PRIORITY_NAME, PRIORITY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 13, VALUE_OPT_DHPARAMS,
+     /* equiv idx, value */ 13, VALUE_OPT_DHPARAMS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DHPARAMS_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --dhparams */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDhparams,
+     /* desc, NAME, name */ DHPARAMS_DESC, DHPARAMS_NAME, DHPARAMS_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 14, VALUE_OPT_X509CAFILE,
+     /* equiv idx, value */ 14, VALUE_OPT_X509CAFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509CAFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509cafile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509CAFILE_DESC, X509CAFILE_NAME, X509CAFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 15, VALUE_OPT_X509CRLFILE,
+     /* equiv idx, value */ 15, VALUE_OPT_X509CRLFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509CRLFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509crlfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptX509crlfile,
+     /* desc, NAME, name */ X509CRLFILE_DESC, X509CRLFILE_NAME, X509CRLFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 16, VALUE_OPT_PGPKEYFILE,
+     /* equiv idx, value */ 16, VALUE_OPT_PGPKEYFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPKEYFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpkeyfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPgpkeyfile,
+     /* desc, NAME, name */ PGPKEYFILE_DESC, PGPKEYFILE_NAME, PGPKEYFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 17, VALUE_OPT_PGPKEYRING,
+     /* equiv idx, value */ 17, VALUE_OPT_PGPKEYRING,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPKEYRING_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpkeyring */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPgpkeyring,
+     /* desc, NAME, name */ PGPKEYRING_DESC, PGPKEYRING_NAME, PGPKEYRING_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 18, VALUE_OPT_PGPCERTFILE,
+     /* equiv idx, value */ 18, VALUE_OPT_PGPCERTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPCERTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpcertfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPgpcertfile,
+     /* desc, NAME, name */ PGPCERTFILE_DESC, PGPCERTFILE_NAME, PGPCERTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 19, VALUE_OPT_X509KEYFILE,
+     /* equiv idx, value */ 19, VALUE_OPT_X509KEYFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509KEYFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509keyfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509KEYFILE_DESC, X509KEYFILE_NAME, X509KEYFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 20, VALUE_OPT_X509CERTFILE,
+     /* equiv idx, value */ 20, VALUE_OPT_X509CERTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509CERTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509certfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509CERTFILE_DESC, X509CERTFILE_NAME, X509CERTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 21, VALUE_OPT_X509DSAKEYFILE,
+     /* equiv idx, value */ 21, VALUE_OPT_X509DSAKEYFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509DSAKEYFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509dsakeyfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509DSAKEYFILE_DESC, X509DSAKEYFILE_NAME, X509DSAKEYFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 22, VALUE_OPT_X509DSACERTFILE,
+     /* equiv idx, value */ 22, VALUE_OPT_X509DSACERTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509DSACERTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509dsacertfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509DSACERTFILE_DESC, X509DSACERTFILE_NAME, X509DSACERTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 23, VALUE_OPT_X509ECCKEYFILE,
+     /* equiv idx, value */ 23, VALUE_OPT_X509ECCKEYFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509ECCKEYFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509ecckeyfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509ECCKEYFILE_DESC, X509ECCKEYFILE_NAME, X509ECCKEYFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 24, VALUE_OPT_X509ECCCERTFILE,
+     /* equiv idx, value */ 24, VALUE_OPT_X509ECCCERTFILE,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ X509ECCCERTFILE_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --x509ecccertfile */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ X509ECCCERTFILE_DESC, X509ECCCERTFILE_NAME, X509ECCCERTFILE_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 25, VALUE_OPT_PGPSUBKEY,
+     /* equiv idx, value */ 25, VALUE_OPT_PGPSUBKEY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PGPSUBKEY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pgpsubkey */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PGPSUBKEY_DESC, PGPSUBKEY_NAME, PGPSUBKEY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 26, VALUE_OPT_SRPPASSWD,
+     /* equiv idx, value */ 26, VALUE_OPT_SRPPASSWD,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SRPPASSWD_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --srppasswd */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptSrppasswd,
+     /* desc, NAME, name */ SRPPASSWD_DESC, SRPPASSWD_NAME, SRPPASSWD_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 27, VALUE_OPT_SRPPASSWDCONF,
+     /* equiv idx, value */ 27, VALUE_OPT_SRPPASSWDCONF,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SRPPASSWDCONF_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --srppasswdconf */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptSrppasswdconf,
+     /* desc, NAME, name */ SRPPASSWDCONF_DESC, SRPPASSWDCONF_NAME, SRPPASSWDCONF_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 28, VALUE_OPT_PSKPASSWD,
+     /* equiv idx, value */ 28, VALUE_OPT_PSKPASSWD,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PSKPASSWD_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pskpasswd */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptPskpasswd,
+     /* desc, NAME, name */ PSKPASSWD_DESC, PSKPASSWD_NAME, PSKPASSWD_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 29, VALUE_OPT_PSKHINT,
+     /* equiv idx, value */ 29, VALUE_OPT_PSKHINT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PSKHINT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --pskhint */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PSKHINT_DESC, PSKHINT_NAME, PSKHINT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 30, VALUE_OPT_PORT,
+     /* equiv idx, value */ 30, VALUE_OPT_PORT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PORT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --port */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ optionNumericVal,
+     /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 31, VALUE_OPT_LIST,
+     /* equiv idx, value */ 31, VALUE_OPT_LIST,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ LIST_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --list */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* 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, 0,
+     /* 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, 0,
+     /* 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, 0,
+     /* 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 }
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the gnutls-serv Option Environment
+ */
+#define zPROGNAME       (gnutls_serv_opt_strs+2656)
+#define zUsageTitle     (gnutls_serv_opt_strs+2668)
+#define zRcName         NULL
+#define apzHomeList     NULL
+#define zBugsAddr       (gnutls_serv_opt_strs+2771)
+#define zExplain        (gnutls_serv_opt_strs+2790)
+#define zDetail         (gnutls_serv_opt_strs+2793)
+#define zFullVersion    (gnutls_serv_opt_strs+2852)
+/* extracted from optcode.tlib near line 350 */
+
+#if defined(ENABLE_NLS)
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
+  static tOptionXlateProc translate_option_strings;
+#else
+# define OPTPROC_BASE OPTPROC_NONE
+# define translate_option_strings NULL
+#endif /* ENABLE_NLS */
+
+
+#define gnutls_serv_full_usage (NULL)
+
+#define gnutls_serv_short_usage (gnutls_serv_opt_strs+2874)
+
+#endif /* not defined __doxygen__ */
+
+/*
+ *  Create the static procedure(s) declared above.
+ */
+/**
+ * The callout function that invokes the optionUsage function.
+ *
+ * @param pOptions the AutoOpts option description structure
+ * @param pOptDesc the descriptor for the "help" (usage) option.
+ * @noreturn
+ */
+static void
+doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
+{
+    optionUsage(&gnutls_servOptions, GNUTLS_SERV_EXIT_SUCCESS);
+    /* NOTREACHED */
+    (void)pOptDesc;
+    (void)pOptions;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the mtu option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptMtu(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0, 17000 } };
+    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, (void *)rng, 1);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the dhparams option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDhparams(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the x509crlfile option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pgpkeyfile option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pgpkeyring option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pgpcertfile option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the srppasswd option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptSrppasswd(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the srppasswdconf option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptSrppasswdconf(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the pskpasswd option.
+ *
+ * @param pOptions the gnutls-serv options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptPskpasswd(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static teOptFileType const  type =
+        FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
+    static tuFileMode           mode;
+#ifndef O_CLOEXEC
+#  define O_CLOEXEC 0
+#endif
+    mode.file_flags = O_CLOEXEC;
+
+    optionFileCheck(pOptions, pOptDesc, type, mode);
+}
+/* extracted from optmain.tlib near line 1113 */
+
+/**
+ * The directory containing the data associated with gnutls-serv.
+ */
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
+
+/**
+ * Information about the person or institution that packaged gnutls-serv
+ * for the current distribution.
+ */
+#ifndef  WITH_PACKAGER
+# define gnutls_serv_packager_info NULL
+#else
+static char const gnutls_serv_packager_info[] =
+    "Packaged by " WITH_PACKAGER
+
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport gnutls_serv bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+#ifndef __doxygen__
+
+#endif /* __doxygen__ */
+/**
+ * The option definitions for gnutls-serv.  The one structure that
+ * binds them all.
+ */
+tOptions gnutls_servOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NO_ARGS
+    + 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 */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    35 /* full option count */, 32 /* user option count */,
+    gnutls_serv_full_usage, gnutls_serv_short_usage,
+    NULL, NULL,
+    PKGDATADIR, gnutls_serv_packager_info
+};
+
+#if ENABLE_NLS
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#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.
+ *
+ * @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* pzRes;
+    if (pz == NULL)
+        return NULL;
+    pzRes = _(pz);
+    if (pzRes == pz)
+        return pzRes;
+    pzRes = strdup(pzRes);
+    if (pzRes == NULL) {
+        fputs(_("No memory for duping translated strings\n"), stderr);
+        exit(GNUTLS_SERV_EXIT_FAILURE);
+    }
+    return pzRes;
+}
+
+static void coerce_it(void** s) { *s = AO_gettext(*s);
+}
+
+/**
+ * Translate all the translatable strings in the gnutls_servOptions
+ * structure defined above.  This is done only once.
+ */
+static void
+translate_option_strings(void)
+{
+    tOptions * const pOpt = &gnutls_servOptions;
+
+    /*
+     *  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_usage_text.field_ct != 0) {
+        /*
+         *  Do the translations.  The first pointer follows the field count
+         *  field.  The field count field is the size of a pointer.
+         */
+        tOptDesc * pOD = pOpt->pOptDesc;
+        char **    ppz = (char**)(void*)&(option_usage_text);
+        int        ix  = option_usage_text.field_ct;
+
+        do {
+            ppz++;
+            *ppz = AO_gettext(*ppz);
+        } while (--ix > 0);
+
+        coerce_it((void*)&(pOpt->pzCopyright));
+        coerce_it((void*)&(pOpt->pzCopyNotice));
+        coerce_it((void*)&(pOpt->pzFullVersion));
+        coerce_it((void*)&(pOpt->pzUsageTitle));
+        coerce_it((void*)&(pOpt->pzExplain));
+        coerce_it((void*)&(pOpt->pzDetail));
+        coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
+        option_usage_text.field_ct = 0;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
+            coerce_it((void*)&(pOD->pzText));
+    }
+
+    if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
+        tOptDesc * pOD = pOpt->pOptDesc;
+        int        ix;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
+            coerce_it((void*)&(pOD->pz_Name));
+            coerce_it((void*)&(pOD->pz_DisableName));
+            coerce_it((void*)&(pOD->pz_DisablePfx));
+        }
+        /* prevent re-translation */
+        gnutls_servOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+    }
+}
+
+#endif /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+/* serv-args.c ends here */
diff --git a/src/serv-args.h b/src/serv-args.h
new file mode 100644
index 0000000..2096a57
--- /dev/null
+++ b/src/serv-args.h
@@ -0,0 +1,249 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (serv-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:24 PM by AutoGen 5.16
+ *  From the definitions    serv-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the gnutls-serv 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 gnutls-serv program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  gnutls-serv 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.
+ *  
+ *  gnutls-serv 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the gnutls-serv program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_SERV_ARGS_H_GUARD
+#define AUTOOPTS_SERV_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG                =  0,
+    INDEX_OPT_NOTICKET             =  1,
+    INDEX_OPT_GENERATE             =  2,
+    INDEX_OPT_QUIET                =  3,
+    INDEX_OPT_NODB                 =  4,
+    INDEX_OPT_HTTP                 =  5,
+    INDEX_OPT_ECHO                 =  6,
+    INDEX_OPT_UDP                  =  7,
+    INDEX_OPT_MTU                  =  8,
+    INDEX_OPT_DISABLE_CLIENT_CERT  =  9,
+    INDEX_OPT_REQUIRE_CLIENT_CERT  = 10,
+    INDEX_OPT_X509FMTDER           = 11,
+    INDEX_OPT_PRIORITY             = 12,
+    INDEX_OPT_DHPARAMS             = 13,
+    INDEX_OPT_X509CAFILE           = 14,
+    INDEX_OPT_X509CRLFILE          = 15,
+    INDEX_OPT_PGPKEYFILE           = 16,
+    INDEX_OPT_PGPKEYRING           = 17,
+    INDEX_OPT_PGPCERTFILE          = 18,
+    INDEX_OPT_X509KEYFILE          = 19,
+    INDEX_OPT_X509CERTFILE         = 20,
+    INDEX_OPT_X509DSAKEYFILE       = 21,
+    INDEX_OPT_X509DSACERTFILE      = 22,
+    INDEX_OPT_X509ECCKEYFILE       = 23,
+    INDEX_OPT_X509ECCCERTFILE      = 24,
+    INDEX_OPT_PGPSUBKEY            = 25,
+    INDEX_OPT_SRPPASSWD            = 26,
+    INDEX_OPT_SRPPASSWDCONF        = 27,
+    INDEX_OPT_PSKPASSWD            = 28,
+    INDEX_OPT_PSKHINT              = 29,
+    INDEX_OPT_PORT                 = 30,
+    INDEX_OPT_LIST                 = 31,
+    INDEX_OPT_VERSION              = 32,
+    INDEX_OPT_HELP                 = 33,
+    INDEX_OPT_MORE_HELP            = 34
+} teOptIndex;
+
+#define OPTION_CT    35
+#define GNUTLS_SERV_VERSION       "@VERSION@"
+#define GNUTLS_SERV_FULL_VERSION  "gnutls-serv @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (gnutls_servOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of gnutls-serv exit codes
+ */
+typedef enum {
+    GNUTLS_SERV_EXIT_SUCCESS = 0,
+    GNUTLS_SERV_EXIT_FAILURE = 1,
+    GNUTLS_SERV_EXIT_LIBOPTS_FAILURE = 70
+} gnutls_serv_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_NOTICKET       1
+#define VALUE_OPT_GENERATE       'g'
+#define VALUE_OPT_QUIET          'q'
+#define VALUE_OPT_NODB           4
+#define VALUE_OPT_HTTP           5
+#define VALUE_OPT_ECHO           6
+#define VALUE_OPT_UDP            'u'
+#define VALUE_OPT_MTU            8
+
+#define OPT_VALUE_MTU            (DESC(MTU).optArg.argInt)
+#define VALUE_OPT_DISABLE_CLIENT_CERT 'a'
+#define VALUE_OPT_REQUIRE_CLIENT_CERT 'r'
+#define VALUE_OPT_X509FMTDER     11
+#define VALUE_OPT_PRIORITY       12
+#define VALUE_OPT_DHPARAMS       13
+#define VALUE_OPT_X509CAFILE     14
+#define VALUE_OPT_X509CRLFILE    15
+#define VALUE_OPT_PGPKEYFILE     16
+#define VALUE_OPT_PGPKEYRING     17
+#define VALUE_OPT_PGPCERTFILE    18
+#define VALUE_OPT_X509KEYFILE    19
+#define VALUE_OPT_X509CERTFILE   20
+#define VALUE_OPT_X509DSAKEYFILE 21
+#define VALUE_OPT_X509DSACERTFILE 22
+#define VALUE_OPT_X509ECCKEYFILE 23
+#define VALUE_OPT_X509ECCCERTFILE 24
+#define VALUE_OPT_PGPSUBKEY      25
+#define VALUE_OPT_SRPPASSWD      26
+#define VALUE_OPT_SRPPASSWDCONF  27
+#define VALUE_OPT_PSKPASSWD      28
+#define VALUE_OPT_PSKHINT        29
+#define VALUE_OPT_PORT           'p'
+
+#define OPT_VALUE_PORT           (DESC(PORT).optArg.argInt)
+#define VALUE_OPT_LIST           'l'
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(gnutls_servOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(gnutls_servOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                gnutls_servOptions.curOptIdx = (n); \
+                gnutls_servOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*gnutls_servOptions.pUsageProc)(&gnutls_servOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the gnutls-serv option descriptor.
+ */
+extern tOptions gnutls_servOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(gnutls_servOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(gnutls_servOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(gnutls_servOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(gnutls_servOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_SERV_ARGS_H_GUARD */
+/* serv-args.h ends here */
diff --git a/src/srptool-args.c b/src/srptool-args.c
new file mode 100644
index 0000000..1be496d
--- /dev/null
+++ b/src/srptool-args.c
@@ -0,0 +1,631 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (srptool-args.c)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:24 PM by AutoGen 5.16
+ *  From the definitions    srptool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 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 srptool 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 srptool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  srptool 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.
+ *  
+ *  srptool 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 "srptool-args.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;
+
+/* TRANSLATORS: choose the translation for option names wisely because you
+                cannot ever change your mind. */
+#define zCopyright      (srptool_opt_strs+0)
+#define zLicenseDescrip (srptool_opt_strs+278)
+
+
+#ifndef NULL
+#  define NULL 0
+#endif
+
+/*
+ *  srptool option static const strings
+ */
+static char const srptool_opt_strs[2049] =
+/*     0 */ "srptool @VERSION@\n"
+            "Copyright (C) 2000-2012 Free Software Foundation, all rights reserved.\n"
+            "This is free software. It is licensed for use, modification and\n"
+            "redistribution under the terms of the\n"
+            "GNU General Public License, version 3 or later\n"
+            "    <http://gnu.org/licenses/gpl.html>\n\0"
+/*   278 */ "srptool is free software: you can redistribute it and/or modify it under\n"
+            "the terms of the GNU General Public License as published by the Free\n"
+            "Software Foundation, either version 3 of the License, or (at your option)\n"
+            "any later version.\n\n"
+            "srptool 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"
+/*   881 */ "Enable debugging.\0"
+/*   899 */ "DEBUG\0"
+/*   905 */ "debug\0"
+/*   911 */ "specify the index of the group parameters in tpasswd.conf to use.\0"
+/*   977 */ "INDEX\0"
+/*   983 */ "index\0"
+/*   989 */ "specify a username\0"
+/*  1008 */ "USERNAME\0"
+/*  1017 */ "username\0"
+/*  1026 */ "specify a password file.\0"
+/*  1051 */ "PASSWD\0"
+/*  1058 */ "passwd\0"
+/*  1065 */ "specify salt size.\0"
+/*  1084 */ "SALT\0"
+/*  1089 */ "salt\0"
+/*  1094 */ "just verify the password.\0"
+/*  1120 */ "VERIFY\0"
+/*  1127 */ "verify\0"
+/*  1134 */ "specify a password conf file.\0"
+/*  1164 */ "PASSWD_CONF\0"
+/*  1176 */ "passwd-conf\0"
+/*  1188 */ "Generate a password configuration file.\0"
+/*  1228 */ "CREATE_CONF\0"
+/*  1240 */ "create-conf\0"
+/*  1252 */ "Display extended usage information and exit\0"
+/*  1296 */ "help\0"
+/*  1301 */ "Extended usage information passed thru pager\0"
+/*  1346 */ "more-help\0"
+/*  1356 */ "Output version information and exit\0"
+/*  1392 */ "version\0"
+/*  1400 */ "SRPTOOL\0"
+/*  1408 */ "srptool - GnuTLS SRP tool - Ver. @VERSION@\n"
+            "USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
+/*  1509 */ "[email protected]\0"
+/*  1528 */ "\n\n\0"
+/*  1531 */ "\n"
+            "Simple program that emulates the programs in the Stanford SRP (Secure\n"
+            "Remote Password) libraries using GnuTLS.  It is intended for use in places\n"
+            "where you don't expect SRP authentication to be the used for system users.\n\n"
+            "In brief, to use SRP you need to create two files.  These are the password\n"
+            "file that holds the users and the verifiers associated with them and the\n"
+            "configuration file to hold the group parameters (called tpasswd.conf).\n\0"
+/*  1973 */ "srptool @VERSION@\0"
+/*  1991 */ "srptool [options]\n"
+            "srptool --help for usage instructions.\n";
+
+/*
+ *  debug option description:
+ */
+#define DEBUG_DESC      (srptool_opt_strs+881)
+#define DEBUG_NAME      (srptool_opt_strs+899)
+#define DEBUG_name      (srptool_opt_strs+905)
+#define DEBUG_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  index option description:
+ */
+#define INDEX_DESC      (srptool_opt_strs+911)
+#define INDEX_NAME      (srptool_opt_strs+977)
+#define INDEX_name      (srptool_opt_strs+983)
+#define INDEX_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  username option description:
+ */
+#define USERNAME_DESC      (srptool_opt_strs+989)
+#define USERNAME_NAME      (srptool_opt_strs+1008)
+#define USERNAME_name      (srptool_opt_strs+1017)
+#define USERNAME_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  passwd option description:
+ */
+#define PASSWD_DESC      (srptool_opt_strs+1026)
+#define PASSWD_NAME      (srptool_opt_strs+1051)
+#define PASSWD_name      (srptool_opt_strs+1058)
+#define PASSWD_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  salt option description:
+ */
+#define SALT_DESC      (srptool_opt_strs+1065)
+#define SALT_NAME      (srptool_opt_strs+1084)
+#define SALT_name      (srptool_opt_strs+1089)
+#define SALT_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  verify option description:
+ */
+#define VERIFY_DESC      (srptool_opt_strs+1094)
+#define VERIFY_NAME      (srptool_opt_strs+1120)
+#define VERIFY_name      (srptool_opt_strs+1127)
+#define VERIFY_FLAGS     (OPTST_DISABLED)
+
+/*
+ *  passwd-conf option description:
+ */
+#define PASSWD_CONF_DESC      (srptool_opt_strs+1134)
+#define PASSWD_CONF_NAME      (srptool_opt_strs+1164)
+#define PASSWD_CONF_name      (srptool_opt_strs+1176)
+#define PASSWD_CONF_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  create-conf option description:
+ */
+#define CREATE_CONF_DESC      (srptool_opt_strs+1188)
+#define CREATE_CONF_NAME      (srptool_opt_strs+1228)
+#define CREATE_CONF_name      (srptool_opt_strs+1240)
+#define CREATE_CONF_FLAGS     (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+/*
+ *  Help/More_Help/Version option descriptions:
+ */
+#define HELP_DESC       (srptool_opt_strs+1252)
+#define HELP_name       (srptool_opt_strs+1296)
+#ifdef HAVE_WORKING_FORK
+#define MORE_HELP_DESC  (srptool_opt_strs+1301)
+#define MORE_HELP_name  (srptool_opt_strs+1346)
+#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
+#else
+#define MORE_HELP_DESC  NULL
+#define MORE_HELP_name  NULL
+#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        (srptool_opt_strs+1356)
+#define VER_name        (srptool_opt_strs+1392)
+/*
+ *  Declare option callback procedures
+ */
+extern tOptProc
+    optionBooleanVal,   optionNestedVal,    optionNumericVal,
+    optionPagedUsage,   optionPrintVersion, optionResetOpt,
+    optionStackArg,     optionTimeDate,     optionTimeVal,
+    optionUnstackArg,   optionVendorOption;
+static tOptProc
+    doOptDebug, doUsageOpt;
+#define VER_PROC        optionPrintVersion
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ *  Define the srptool Option Descriptions.
+ * This is an array of OPTION_CT entries, one for each
+ * option that the srptool program responds to.
+ */
+static tOptDesc optDesc[OPTION_CT] = {
+  {  /* entry idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equiv idx, value */ 0, VALUE_OPT_DEBUG,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ DEBUG_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --debug */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptDebug,
+     /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 1, VALUE_OPT_INDEX,
+     /* equiv idx, value */ 1, VALUE_OPT_INDEX,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ INDEX_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --index */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ INDEX_DESC, INDEX_NAME, INDEX_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 2, VALUE_OPT_USERNAME,
+     /* equiv idx, value */ 2, VALUE_OPT_USERNAME,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ USERNAME_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --username */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ USERNAME_DESC, USERNAME_NAME, USERNAME_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 3, VALUE_OPT_PASSWD,
+     /* equiv idx, value */ 3, VALUE_OPT_PASSWD,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PASSWD_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --passwd */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PASSWD_DESC, PASSWD_NAME, PASSWD_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 4, VALUE_OPT_SALT,
+     /* equiv idx, value */ 4, VALUE_OPT_SALT,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ SALT_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --salt */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ optionNumericVal,
+     /* desc, NAME, name */ SALT_DESC, SALT_NAME, SALT_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 5, VALUE_OPT_VERIFY,
+     /* equiv idx, value */ 5, VALUE_OPT_VERIFY,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ VERIFY_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --verify */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ VERIFY_DESC, VERIFY_NAME, VERIFY_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 6, VALUE_OPT_PASSWD_CONF,
+     /* equiv idx, value */ 6, VALUE_OPT_PASSWD_CONF,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ PASSWD_CONF_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --passwd-conf */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ PASSWD_CONF_DESC, PASSWD_CONF_NAME, PASSWD_CONF_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 7, VALUE_OPT_CREATE_CONF,
+     /* equiv idx, value */ 7, VALUE_OPT_CREATE_CONF,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ CREATE_CONF_FLAGS, 0,
+     /* last opt argumnt */ { NULL }, /* --create-conf */
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ NULL,
+     /* desc, NAME, name */ CREATE_CONF_DESC, CREATE_CONF_NAME, CREATE_CONF_name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* 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, 0,
+     /* 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, 0,
+     /* 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, 0,
+     /* 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 }
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *  Define the srptool Option Environment
+ */
+#define zPROGNAME       (srptool_opt_strs+1400)
+#define zUsageTitle     (srptool_opt_strs+1408)
+#define zRcName         NULL
+#define apzHomeList     NULL
+#define zBugsAddr       (srptool_opt_strs+1509)
+#define zExplain        (srptool_opt_strs+1528)
+#define zDetail         (srptool_opt_strs+1531)
+#define zFullVersion    (srptool_opt_strs+1973)
+/* extracted from optcode.tlib near line 350 */
+
+#if defined(ENABLE_NLS)
+# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
+  static tOptionXlateProc translate_option_strings;
+#else
+# define OPTPROC_BASE OPTPROC_NONE
+# define translate_option_strings NULL
+#endif /* ENABLE_NLS */
+
+
+#define srptool_full_usage (NULL)
+
+#define srptool_short_usage (srptool_opt_strs+1991)
+
+#endif /* not defined __doxygen__ */
+
+/*
+ *  Create the static procedure(s) declared above.
+ */
+/**
+ * The callout function that invokes the optionUsage function.
+ *
+ * @param pOptions the AutoOpts option description structure
+ * @param pOptDesc the descriptor for the "help" (usage) option.
+ * @noreturn
+ */
+static void
+doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
+{
+    optionUsage(&srptoolOptions, SRPTOOL_EXIT_SUCCESS);
+    /* NOTREACHED */
+    (void)pOptDesc;
+    (void)pOptions;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/**
+ * Code to handle the debug option.
+ *
+ * @param pOptions the srptool options data structure
+ * @param pOptDesc the option descriptor for this option.
+ */
+static void
+doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static struct {long rmin, rmax;} const rng[1] = {
+        { 0 ,  9999 } };
+    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, (void *)rng, 1);
+}
+/* extracted from optmain.tlib near line 1113 */
+
+/**
+ * The directory containing the data associated with srptool.
+ */
+#ifndef  PKGDATADIR
+# define PKGDATADIR ""
+#endif
+
+/**
+ * Information about the person or institution that packaged srptool
+ * for the current distribution.
+ */
+#ifndef  WITH_PACKAGER
+# define srptool_packager_info NULL
+#else
+static char const srptool_packager_info[] =
+    "Packaged by " WITH_PACKAGER
+
+# ifdef WITH_PACKAGER_VERSION
+        " ("WITH_PACKAGER_VERSION")"
+# endif
+
+# ifdef WITH_PACKAGER_BUG_REPORTS
+    "\nReport srptool bugs to " WITH_PACKAGER_BUG_REPORTS
+# endif
+    "\n";
+#endif
+#ifndef __doxygen__
+
+#endif /* __doxygen__ */
+/**
+ * The option definitions for srptool.  The one structure that
+ * binds them all.
+ */
+tOptions srptoolOptions = {
+    OPTIONS_STRUCT_VERSION,
+    0, NULL,                    /* original argc + argv    */
+    ( OPTPROC_BASE
+    + OPTPROC_ERRSTOP
+    + OPTPROC_SHORTOPT
+    + OPTPROC_LONGOPT
+    + OPTPROC_NO_REQ_OPT
+    + OPTPROC_NO_ARGS
+    + 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 */
+      NO_EQUIVALENT, /* save option index */
+      NO_EQUIVALENT, /* '-#' option index */
+      NO_EQUIVALENT /* index of default opt */
+    },
+    11 /* full option count */, 8 /* user option count */,
+    srptool_full_usage, srptool_short_usage,
+    NULL, NULL,
+    PKGDATADIR, srptool_packager_info
+};
+
+#if ENABLE_NLS
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#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.
+ *
+ * @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* pzRes;
+    if (pz == NULL)
+        return NULL;
+    pzRes = _(pz);
+    if (pzRes == pz)
+        return pzRes;
+    pzRes = strdup(pzRes);
+    if (pzRes == NULL) {
+        fputs(_("No memory for duping translated strings\n"), stderr);
+        exit(SRPTOOL_EXIT_FAILURE);
+    }
+    return pzRes;
+}
+
+static void coerce_it(void** s) { *s = AO_gettext(*s);
+}
+
+/**
+ * Translate all the translatable strings in the srptoolOptions
+ * structure defined above.  This is done only once.
+ */
+static void
+translate_option_strings(void)
+{
+    tOptions * const pOpt = &srptoolOptions;
+
+    /*
+     *  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_usage_text.field_ct != 0) {
+        /*
+         *  Do the translations.  The first pointer follows the field count
+         *  field.  The field count field is the size of a pointer.
+         */
+        tOptDesc * pOD = pOpt->pOptDesc;
+        char **    ppz = (char**)(void*)&(option_usage_text);
+        int        ix  = option_usage_text.field_ct;
+
+        do {
+            ppz++;
+            *ppz = AO_gettext(*ppz);
+        } while (--ix > 0);
+
+        coerce_it((void*)&(pOpt->pzCopyright));
+        coerce_it((void*)&(pOpt->pzCopyNotice));
+        coerce_it((void*)&(pOpt->pzFullVersion));
+        coerce_it((void*)&(pOpt->pzUsageTitle));
+        coerce_it((void*)&(pOpt->pzExplain));
+        coerce_it((void*)&(pOpt->pzDetail));
+        coerce_it((void*)&(pOpt->pzPackager));
+        coerce_it((void*)&(pOpt->pzShortUsage));
+        option_usage_text.field_ct = 0;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
+            coerce_it((void*)&(pOD->pzText));
+    }
+
+    if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
+        tOptDesc * pOD = pOpt->pOptDesc;
+        int        ix;
+
+        for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
+            coerce_it((void*)&(pOD->pz_Name));
+            coerce_it((void*)&(pOD->pz_DisableName));
+            coerce_it((void*)&(pOD->pz_DisablePfx));
+        }
+        /* prevent re-translation */
+        srptoolOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
+    }
+}
+
+#endif /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+/* srptool-args.c ends here */
diff --git a/src/srptool-args.h b/src/srptool-args.h
new file mode 100644
index 0000000..7666351
--- /dev/null
+++ b/src/srptool-args.h
@@ -0,0 +1,199 @@
+/*   -*- buffer-read-only: t -*- vi: set ro:
+ *  
+ *  DO NOT EDIT THIS FILE   (srptool-args.h)
+ *  
+ *  It has been AutoGen-ed  May  9, 2012 at 08:05:24 PM by AutoGen 5.16
+ *  From the definitions    srptool-args.def
+ *  and the template file   options
+ *
+ * Generated from AutoOpts 36:4:11 templates.
+ *
+ *  AutoOpts is a copyrighted work.  This header file is not encumbered
+ *  by AutoOpts licensing, but is provided under the licensing terms chosen
+ *  by the srptool 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 srptool program is copyrighted and licensed
+ * under the following terms:
+ *
+ *  Copyright (C) 2000-2012 Free Software Foundation, 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>
+ *
+ *  srptool 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.
+ *  
+ *  srptool 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/>.
+ */
+/*
+ *  This file contains the programmatic interface to the Automated
+ *  Options generated for the srptool program.
+ *  These macros are documented in the AutoGen info file in the
+ *  "AutoOpts" chapter.  Please refer to that doc for usage help.
+ */
+#ifndef AUTOOPTS_SRPTOOL_ARGS_H_GUARD
+#define AUTOOPTS_SRPTOOL_ARGS_H_GUARD 1
+#include "config.h"
+#include <autoopts/options.h>
+
+/*
+ *  Ensure that the library used for compiling this generated header is at
+ *  least as new as the version current when the header template was released
+ *  (not counting patch version increments).  Also ensure that the oldest
+ *  tolerable version is at least as old as what was current when the header
+ *  template was released.
+ */
+#define AO_TEMPLATE_VERSION 147460
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+  Choke Me.
+#endif
+
+/*
+ *  Enumeration of each option:
+ */
+typedef enum {
+    INDEX_OPT_DEBUG        =  0,
+    INDEX_OPT_INDEX        =  1,
+    INDEX_OPT_USERNAME     =  2,
+    INDEX_OPT_PASSWD       =  3,
+    INDEX_OPT_SALT         =  4,
+    INDEX_OPT_VERIFY       =  5,
+    INDEX_OPT_PASSWD_CONF  =  6,
+    INDEX_OPT_CREATE_CONF  =  7,
+    INDEX_OPT_VERSION      =  8,
+    INDEX_OPT_HELP         =  9,
+    INDEX_OPT_MORE_HELP    = 10
+} teOptIndex;
+
+#define OPTION_CT    11
+#define SRPTOOL_VERSION       "@VERSION@"
+#define SRPTOOL_FULL_VERSION  "srptool @VERSION@"
+
+/*
+ *  Interface defines for all options.  Replace "n" with the UPPER_CASED
+ *  option name (as in the teOptIndex enumeration above).
+ *  e.g. HAVE_OPT(DEBUG)
+ */
+#define         DESC(n) (srptoolOptions.pOptDesc[INDEX_OPT_## n])
+#define     HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define      OPT_ARG(n) (DESC(n).optArg.argString)
+#define    STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define    COUNT_OPT(n) (DESC(n).optOccCt)
+#define    ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define  ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define  STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define    CLEAR_OPT(n) STMTS( \
+                DESC(n).fOptState &= OPTST_PERSISTENT_MASK;   \
+                if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+                    DESC(n).fOptState |= OPTST_DISABLED; \
+                DESC(n).optCookie = NULL )
+
+/* * * * * *
+ *
+ *  Enumeration of srptool exit codes
+ */
+typedef enum {
+    SRPTOOL_EXIT_SUCCESS = 0,
+    SRPTOOL_EXIT_FAILURE = 1,
+    SRPTOOL_EXIT_LIBOPTS_FAILURE = 70
+} srptool_exit_code_t;
+/* * * * * *
+ *
+ *  Interface defines for specific options.
+ */
+#define VALUE_OPT_DEBUG          'd'
+
+#define OPT_VALUE_DEBUG          (DESC(DEBUG).optArg.argInt)
+#define VALUE_OPT_INDEX          'i'
+#define VALUE_OPT_USERNAME       'u'
+#define VALUE_OPT_PASSWD         'p'
+#define VALUE_OPT_SALT           's'
+
+#define OPT_VALUE_SALT           (DESC(SALT).optArg.argInt)
+#define VALUE_OPT_VERIFY         5
+#define VALUE_OPT_PASSWD_CONF    'v'
+#define VALUE_OPT_CREATE_CONF    7
+#define VALUE_OPT_HELP          'h'
+#define VALUE_OPT_MORE_HELP     '!'
+#define VALUE_OPT_VERSION       'v'
+/*
+ *  Interface defines not associated with particular options
+ */
+#define ERRSKIP_OPTERR  STMTS(srptoolOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR  STMTS(srptoolOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n)  STMTS( \
+                srptoolOptions.curOptIdx = (n); \
+                srptoolOptions.pzCurOpt  = NULL)
+#define START_OPT       RESTART_OPT(1)
+#define USAGE(c)        (*srptoolOptions.pUsageProc)(&srptoolOptions, c)
+/* extracted from opthead.tlib near line 484 */
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+/*
+ *  global exported definitions
+ */
+#include <gettext.h>
+
+
+/* * * * * *
+ *
+ *  Declare the srptool option descriptor.
+ */
+extern tOptions srptoolOptions;
+
+#if defined(ENABLE_NLS)
+# ifndef _
+#   include <stdio.h>
+static inline char* aoGetsText(char const* pz) {
+    if (pz == NULL) return NULL;
+    return (char*)gettext(pz);
+}
+#   define _(s)  aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES  STMTS(srptoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES  STMTS(srptoolOptions.fOptSet |= \
+                                    OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES     STMTS(srptoolOptions.fOptSet &= \
+                                  ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES     STMTS(srptoolOptions.fOptSet &= \
+                                  ~OPTPROC_NXLAT_OPT;)
+
+#else   /* ENABLE_NLS */
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+#   define _(_s)  _s
+# endif
+#endif  /* ENABLE_NLS */
+
+#ifdef  __cplusplus
+}
+#endif
+#endif /* AUTOOPTS_SRPTOOL_ARGS_H_GUARD */
+/* srptool-args.h ends here */


hooks/post-receive
-- 
GNU gnutls
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.