Home | History | Annotate | Line # | Download | only in ntpsnmpd
ntpsnmpd-opts.c revision 1.1.1.2.6.1
      1 /*	$NetBSD: ntpsnmpd-opts.c,v 1.1.1.2.6.1 2014/08/19 23:51:43 tls Exp $	*/
      2 
      3 /*
      4  *  EDIT THIS FILE WITH CAUTION  (ntpsnmpd-opts.c)
      5  *
      6  *  It has been AutoGen-ed  December 24, 2013 at 11:39:05 AM by AutoGen 5.18.3pre5
      7  *  From the definitions    ntpsnmpd-opts.def
      8  *  and the template file   options
      9  *
     10  * Generated from AutoOpts 40:1:15 templates.
     11  *
     12  *  AutoOpts is a copyrighted work.  This source file is not encumbered
     13  *  by AutoOpts licensing, but is provided under the licensing terms chosen
     14  *  by the ntpsnmpd author or copyright holder.  AutoOpts is
     15  *  licensed under the terms of the LGPL.  The redistributable library
     16  *  (``libopts'') is licensed under the terms of either the LGPL or, at the
     17  *  users discretion, the BSD license.  See the AutoOpts and/or libopts sources
     18  *  for details.
     19  *
     20  * The ntpsnmpd program is copyrighted and licensed
     21  * under the following terms:
     22  *
     23  *  Copyright (C) 1970-2013 The University of Delaware, all rights reserved.
     24  *  This is free software. It is licensed for use, modification and
     25  *  redistribution under the terms of the NTP License, copies of which
     26  *  can be seen at:
     27  *    <http://ntp.org/license>
     28  *    <http://opensource.org/licenses/ntp-license.php>
     29  *
     30  *  Permission to use, copy, modify, and distribute this software and its
     31  *  documentation for any purpose with or without fee is hereby granted,
     32  *  provided that the above copyright notice appears in all copies and that
     33  *  both the copyright notice and this permission notice appear in
     34  *  supporting documentation, and that the name The University of Delaware not be used in
     35  *  advertising or publicity pertaining to distribution of the software
     36  *  without specific, written prior permission. The University of Delaware makes no
     37  *  representations about the suitability this software for any purpose. It
     38  *  is provided "as is" without express or implied warranty.
     39  */
     40 
     41 #ifndef __doxygen__
     42 #define OPTION_CODE_COMPILE 1
     43 #include "ntpsnmpd-opts.h"
     44 #include <sys/types.h>
     45 
     46 #include <limits.h>
     47 #include <stdio.h>
     48 #include <stdlib.h>
     49 
     50 #ifdef  __cplusplus
     51 extern "C" {
     52 #endif
     53 extern FILE * option_usage_fp;
     54 #define zCopyright      (ntpsnmpd_opt_strs+0)
     55 #define zLicenseDescrip (ntpsnmpd_opt_strs+318)
     56 
     57 
     58 #ifndef NULL
     59 #  define NULL 0
     60 #endif
     61 
     62 /**
     63  *  static const strings for ntpsnmpd options
     64  */
     65 static char const ntpsnmpd_opt_strs[1560] =
     66 /*     0 */ "ntpsnmpd 4.2.7p404\n"
     67             "Copyright (C) 1970-2013 The University of Delaware, all rights reserved.\n"
     68             "This is free software. It is licensed for use, modification and\n"
     69             "redistribution under the terms of the NTP License, copies of which\n"
     70             "can be seen at:\n"
     71             "  <http://ntp.org/license>\n"
     72             "  <http://opensource.org/licenses/ntp-license.php>\n\0"
     73 /*   318 */ "Permission to use, copy, modify, and distribute this software and its\n"
     74             "documentation for any purpose with or without fee is hereby granted,\n"
     75             "provided that the above copyright notice appears in all copies and that\n"
     76             "both the copyright notice and this permission notice appear in supporting\n"
     77             "documentation, and that the name The University of Delaware not be used in\n"
     78             "advertising or publicity pertaining to distribution of the software without\n"
     79             "specific, written prior permission.  The University of Delaware makes no\n"
     80             "representations about the suitability this software for any purpose.  It is\n"
     81             "provided \"as is\" without express or implied warranty.\n\0"
     82 /*   958 */ "Do not fork\0"
     83 /*   970 */ "NOFORK\0"
     84 /*   977 */ "nofork\0"
     85 /*   984 */ "Log to syslog()\0"
     86 /*  1000 */ "SYSLOG\0"
     87 /*  1007 */ "syslog\0"
     88 /*  1014 */ "The socket address ntpsnmpd uses to connect to net-snmpd\0"
     89 /*  1071 */ "AGENTXSOCKET\0"
     90 /*  1084 */ "agentxsocket\0"
     91 /*  1097 */ "unix:/var/agentx/master\0"
     92 /*  1121 */ "display extended usage information and exit\0"
     93 /*  1165 */ "help\0"
     94 /*  1170 */ "extended usage information passed thru pager\0"
     95 /*  1215 */ "more-help\0"
     96 /*  1225 */ "output version information and exit\0"
     97 /*  1261 */ "version\0"
     98 /*  1269 */ "save the option state to a config file\0"
     99 /*  1308 */ "save-opts\0"
    100 /*  1318 */ "load options from a config file\0"
    101 /*  1350 */ "LOAD_OPTS\0"
    102 /*  1360 */ "no-load-opts\0"
    103 /*  1373 */ "no\0"
    104 /*  1376 */ "NTPSNMPD\0"
    105 /*  1385 */ "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.7p404\n"
    106             "Usage:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
    107 /*  1490 */ "$HOME\0"
    108 /*  1496 */ ".\0"
    109 /*  1498 */ ".ntprc\0"
    110 /*  1505 */ "http://bugs.ntp.org, bugs (at) ntp.org\0"
    111 /*  1539 */ "\n\0"
    112 /*  1541 */ "ntpsnmpd 4.2.7p404";
    113 
    114 /**
    115  *  nofork option description:
    116  */
    117 /** Descriptive text for the nofork option */
    118 #define NOFORK_DESC      (ntpsnmpd_opt_strs+958)
    119 /** Upper-cased name for the nofork option */
    120 #define NOFORK_NAME      (ntpsnmpd_opt_strs+970)
    121 /** Name string for the nofork option */
    122 #define NOFORK_name      (ntpsnmpd_opt_strs+977)
    123 /** Compiled in flag settings for the nofork option */
    124 #define NOFORK_FLAGS     (OPTST_DISABLED)
    125 
    126 /**
    127  *  syslog option description:
    128  */
    129 /** Descriptive text for the syslog option */
    130 #define SYSLOG_DESC      (ntpsnmpd_opt_strs+984)
    131 /** Upper-cased name for the syslog option */
    132 #define SYSLOG_NAME      (ntpsnmpd_opt_strs+1000)
    133 /** Name string for the syslog option */
    134 #define SYSLOG_name      (ntpsnmpd_opt_strs+1007)
    135 /** Compiled in flag settings for the syslog option */
    136 #define SYSLOG_FLAGS     (OPTST_DISABLED)
    137 
    138 /**
    139  *  agentXSocket option description:
    140  */
    141 /** Descriptive text for the agentXSocket option */
    142 #define AGENTXSOCKET_DESC      (ntpsnmpd_opt_strs+1014)
    143 /** Upper-cased name for the agentXSocket option */
    144 #define AGENTXSOCKET_NAME      (ntpsnmpd_opt_strs+1071)
    145 /** Name string for the agentXSocket option */
    146 #define AGENTXSOCKET_name      (ntpsnmpd_opt_strs+1084)
    147 /** The compiled in default value for the agentXSocket option argument */
    148 #define AGENTXSOCKET_DFT_ARG   (ntpsnmpd_opt_strs+1097)
    149 /** Compiled in flag settings for the agentXSocket option */
    150 #define AGENTXSOCKET_FLAGS     (OPTST_DISABLED \
    151         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
    152 
    153 /*
    154  *  Help/More_Help/Version option descriptions:
    155  */
    156 #define HELP_DESC       (ntpsnmpd_opt_strs+1121)
    157 #define HELP_name       (ntpsnmpd_opt_strs+1165)
    158 #ifdef HAVE_WORKING_FORK
    159 #define MORE_HELP_DESC  (ntpsnmpd_opt_strs+1170)
    160 #define MORE_HELP_name  (ntpsnmpd_opt_strs+1215)
    161 #define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
    162 #else
    163 #define MORE_HELP_DESC  HELP_DESC
    164 #define MORE_HELP_name  HELP_name
    165 #define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
    166 #endif
    167 #ifdef NO_OPTIONAL_OPT_ARGS
    168 #  define VER_FLAGS     (OPTST_IMM | OPTST_NO_INIT)
    169 #else
    170 #  define VER_FLAGS     (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
    171                          OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
    172 #endif
    173 #define VER_DESC        (ntpsnmpd_opt_strs+1225)
    174 #define VER_name        (ntpsnmpd_opt_strs+1261)
    175 #define SAVE_OPTS_DESC  (ntpsnmpd_opt_strs+1269)
    176 #define SAVE_OPTS_name  (ntpsnmpd_opt_strs+1308)
    177 #define LOAD_OPTS_DESC     (ntpsnmpd_opt_strs+1318)
    178 #define LOAD_OPTS_NAME     (ntpsnmpd_opt_strs+1350)
    179 #define NO_LOAD_OPTS_name  (ntpsnmpd_opt_strs+1360)
    180 #define LOAD_OPTS_pfx      (ntpsnmpd_opt_strs+1373)
    181 #define LOAD_OPTS_name     (NO_LOAD_OPTS_name + 3)
    182 /**
    183  *  Declare option callback procedures
    184  */
    185 /* extracted from optmain.tlib near line 723 */
    186 
    187 #if defined(TEST_NTPSNMPD_OPTS)
    188 /*
    189  *  Under test, omit argument processing, or call optionStackArg,
    190  *  if multiple copies are allowed.
    191  */
    192 static tOptProc
    193     doUsageOpt;
    194 
    195 #else /* NOT defined TEST_NTPSNMPD_OPTS */
    196 /*
    197  *  When not under test, there are different procs to use
    198  */
    199 extern tOptProc
    200     ntpOptionPrintVersion, optionBooleanVal,      optionNestedVal,
    201     optionNumericVal,      optionPagedUsage,      optionResetOpt,
    202     optionStackArg,        optionTimeDate,        optionTimeVal,
    203     optionUnstackArg,      optionVendorOption,    optionVersionStderr;
    204 static tOptProc
    205     doUsageOpt;
    206 #endif /* TEST_NTPSNMPD_OPTS */
    207 #define VER_PROC        ntpOptionPrintVersion
    208 
    209 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    210 /**
    211  *  Define the ntpsnmpd Option Descriptions.
    212  * This is an array of OPTION_CT entries, one for each
    213  * option that the ntpsnmpd program responds to.
    214  */
    215 static tOptDesc optDesc[OPTION_CT] = {
    216   {  /* entry idx, value */ 0, VALUE_OPT_NOFORK,
    217      /* equiv idx, value */ 0, VALUE_OPT_NOFORK,
    218      /* equivalenced to  */ NO_EQUIVALENT,
    219      /* min, max, act ct */ 0, 1, 0,
    220      /* opt state flags  */ NOFORK_FLAGS, 0,
    221      /* last opt argumnt */ { NULL }, /* --nofork */
    222      /* arg list/cookie  */ NULL,
    223      /* must/cannot opts */ NULL, NULL,
    224      /* option proc      */ NULL,
    225      /* desc, NAME, name */ NOFORK_DESC, NOFORK_NAME, NOFORK_name,
    226      /* disablement strs */ NULL, NULL },
    227 
    228   {  /* entry idx, value */ 1, VALUE_OPT_SYSLOG,
    229      /* equiv idx, value */ 1, VALUE_OPT_SYSLOG,
    230      /* equivalenced to  */ NO_EQUIVALENT,
    231      /* min, max, act ct */ 0, 1, 0,
    232      /* opt state flags  */ SYSLOG_FLAGS, 0,
    233      /* last opt argumnt */ { NULL }, /* --syslog */
    234      /* arg list/cookie  */ NULL,
    235      /* must/cannot opts */ NULL, NULL,
    236      /* option proc      */ NULL,
    237      /* desc, NAME, name */ SYSLOG_DESC, SYSLOG_NAME, SYSLOG_name,
    238      /* disablement strs */ NULL, NULL },
    239 
    240   {  /* entry idx, value */ 2, VALUE_OPT_AGENTXSOCKET,
    241      /* equiv idx, value */ 2, VALUE_OPT_AGENTXSOCKET,
    242      /* equivalenced to  */ NO_EQUIVALENT,
    243      /* min, max, act ct */ 0, 1, 0,
    244      /* opt state flags  */ AGENTXSOCKET_FLAGS, 0,
    245      /* last opt argumnt */ { AGENTXSOCKET_DFT_ARG },
    246      /* arg list/cookie  */ NULL,
    247      /* must/cannot opts */ NULL, NULL,
    248      /* option proc      */ NULL,
    249      /* desc, NAME, name */ AGENTXSOCKET_DESC, AGENTXSOCKET_NAME, AGENTXSOCKET_name,
    250      /* disablement strs */ NULL, NULL },
    251 
    252   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
    253      /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_VERSION,
    254      /* equivalenced to  */ NO_EQUIVALENT,
    255      /* min, max, act ct */ 0, 1, 0,
    256      /* opt state flags  */ VER_FLAGS, AOUSE_VERSION,
    257      /* last opt argumnt */ { NULL },
    258      /* arg list/cookie  */ NULL,
    259      /* must/cannot opts */ NULL, NULL,
    260      /* option proc      */ VER_PROC,
    261      /* desc, NAME, name */ VER_DESC, NULL, VER_name,
    262      /* disablement strs */ NULL, NULL },
    263 
    264 
    265 
    266   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
    267      /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_HELP,
    268      /* equivalenced to  */ NO_EQUIVALENT,
    269      /* min, max, act ct */ 0, 1, 0,
    270      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP,
    271      /* last opt argumnt */ { NULL },
    272      /* arg list/cookie  */ NULL,
    273      /* must/cannot opts */ NULL, NULL,
    274      /* option proc      */ doUsageOpt,
    275      /* desc, NAME, name */ HELP_DESC, NULL, HELP_name,
    276      /* disablement strs */ NULL, NULL },
    277 
    278   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
    279      /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP,
    280      /* equivalenced to  */ NO_EQUIVALENT,
    281      /* min, max, act ct */ 0, 1, 0,
    282      /* opt state flags  */ MORE_HELP_FLAGS, AOUSE_MORE_HELP,
    283      /* last opt argumnt */ { NULL },
    284      /* arg list/cookie  */ NULL,
    285      /* must/cannot opts */ NULL,  NULL,
    286      /* option proc      */ optionPagedUsage,
    287      /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name,
    288      /* disablement strs */ NULL, NULL },
    289 
    290   {  /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS,
    291      /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_SAVE_OPTS,
    292      /* equivalenced to  */ NO_EQUIVALENT,
    293      /* min, max, act ct */ 0, 1, 0,
    294      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
    295                        | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, AOUSE_SAVE_OPTS,
    296      /* last opt argumnt */ { NULL },
    297      /* arg list/cookie  */ NULL,
    298      /* must/cannot opts */ NULL,  NULL,
    299      /* option proc      */ NULL,
    300      /* desc, NAME, name */ SAVE_OPTS_DESC, NULL, SAVE_OPTS_name,
    301      /* disablement strs */ NULL, NULL },
    302 
    303   {  /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS,
    304      /* equiv idx value  */ NO_EQUIVALENT, VALUE_OPT_LOAD_OPTS,
    305      /* equivalenced to  */ NO_EQUIVALENT,
    306      /* min, max, act ct */ 0, NOLIMIT, 0,
    307      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
    308 			  | OPTST_DISABLE_IMM, AOUSE_LOAD_OPTS,
    309      /* last opt argumnt */ { NULL },
    310      /* arg list/cookie  */ NULL,
    311      /* must/cannot opts */ NULL, NULL,
    312      /* option proc      */ optionLoadOpt,
    313      /* desc, NAME, name */ LOAD_OPTS_DESC, LOAD_OPTS_NAME, LOAD_OPTS_name,
    314      /* disablement strs */ NO_LOAD_OPTS_name, LOAD_OPTS_pfx }
    315 };
    316 
    317 
    318 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    319 /** Reference to the upper cased version of ntpsnmpd. */
    320 #define zPROGNAME       (ntpsnmpd_opt_strs+1376)
    321 /** Reference to the title line for ntpsnmpd usage. */
    322 #define zUsageTitle     (ntpsnmpd_opt_strs+1385)
    323 /** ntpsnmpd configuration file name. */
    324 #define zRcName         (ntpsnmpd_opt_strs+1498)
    325 /** Directories to search for ntpsnmpd config files. */
    326 static char const * const apzHomeList[3] = {
    327     ntpsnmpd_opt_strs+1490,
    328     ntpsnmpd_opt_strs+1496,
    329     NULL };
    330 /** The ntpsnmpd program bug email address. */
    331 #define zBugsAddr       (ntpsnmpd_opt_strs+1505)
    332 /** Clarification/explanation of what ntpsnmpd does. */
    333 #define zExplain        (ntpsnmpd_opt_strs+1539)
    334 /** Extra detail explaining what ntpsnmpd does. */
    335 #define zDetail         (NULL)
    336 /** The full version string for ntpsnmpd. */
    337 #define zFullVersion    (ntpsnmpd_opt_strs+1541)
    338 /* extracted from optcode.tlib near line 364 */
    339 
    340 #if defined(ENABLE_NLS)
    341 # define OPTPROC_BASE OPTPROC_TRANSLATE
    342   static tOptionXlateProc translate_option_strings;
    343 #else
    344 # define OPTPROC_BASE OPTPROC_NONE
    345 # define translate_option_strings NULL
    346 #endif /* ENABLE_NLS */
    347 
    348 #define ntpsnmpd_full_usage (NULL)
    349 #define ntpsnmpd_short_usage (NULL)
    350 
    351 #endif /* not defined __doxygen__ */
    352 
    353 /*
    354  *  Create the static procedure(s) declared above.
    355  */
    356 /**
    357  * The callout function that invokes the optionUsage function.
    358  *
    359  * @param[in] opts the AutoOpts option description structure
    360  * @param[in] od   the descriptor for the "help" (usage) option.
    361  * @noreturn
    362  */
    363 static void
    364 doUsageOpt(tOptions * opts, tOptDesc * od)
    365 {
    366     int ex_code;
    367     ex_code = NTPSNMPD_EXIT_SUCCESS;
    368     optionUsage(&ntpsnmpdOptions, ex_code);
    369     /* NOTREACHED */
    370     exit(1);
    371     (void)opts;
    372     (void)od;
    373 }
    374 /* extracted from optmain.tlib near line 46 */
    375 
    376 #if defined(TEST_NTPSNMPD_OPTS) /* TEST-MAIN-PROCEDURE: */
    377 
    378 extern void optionPutShell(tOptions*);
    379 
    380 /**
    381  * Generated main procedure.  This will emit text that a Bourne shell can
    382  * process to handle its command line arguments.
    383  *
    384  * @param[in] argc argument count
    385  * @param[in] argv argument vector
    386  * @returns program exit code
    387  */
    388 int
    389 main(int argc, char ** argv)
    390 {
    391     int res = NTPSNMPD_EXIT_SUCCESS;
    392     (void)optionProcess(&ntpsnmpdOptions, argc, argv);
    393     optionPutShell(&ntpsnmpdOptions);
    394     res = ferror(stdout);
    395     if (res != 0)
    396         fputs("output error writing to stdout\n", stderr);
    397     return res;
    398 }
    399 #endif  /* TEST_NTPSNMPD_OPTS END-TEST-MAIN-PROCEDURE */
    400 /* extracted from optmain.tlib near line 1245 */
    401 
    402 /**
    403  * The directory containing the data associated with ntpsnmpd.
    404  */
    405 #ifndef  PKGDATADIR
    406 # define PKGDATADIR ""
    407 #endif
    408 
    409 /**
    410  * Information about the person or institution that packaged ntpsnmpd
    411  * for the current distribution.
    412  */
    413 #ifndef  WITH_PACKAGER
    414 # define ntpsnmpd_packager_info NULL
    415 #else
    416 /** Packager information for ntpsnmpd. */
    417 static char const ntpsnmpd_packager_info[] =
    418     "Packaged by " WITH_PACKAGER
    419 
    420 # ifdef WITH_PACKAGER_VERSION
    421         " ("WITH_PACKAGER_VERSION")"
    422 # endif
    423 
    424 # ifdef WITH_PACKAGER_BUG_REPORTS
    425     "\nReport ntpsnmpd bugs to " WITH_PACKAGER_BUG_REPORTS
    426 # endif
    427     "\n";
    428 #endif
    429 #ifndef __doxygen__
    430 
    431 #endif /* __doxygen__ */
    432 /**
    433  * The option definitions for ntpsnmpd.  The one structure that
    434  * binds them all.
    435  */
    436 tOptions ntpsnmpdOptions = {
    437     OPTIONS_STRUCT_VERSION,
    438     0, NULL,                    /* original argc + argv    */
    439     ( OPTPROC_BASE
    440     + OPTPROC_ERRSTOP
    441     + OPTPROC_SHORTOPT
    442     + OPTPROC_LONGOPT
    443     + OPTPROC_NO_REQ_OPT
    444     + OPTPROC_ENVIRON
    445     + OPTPROC_NO_ARGS
    446     + OPTPROC_MISUSE
    447     + OPTPROC_SHELL_OUTPUT ),
    448     0, NULL,                    /* current option index, current option */
    449     NULL,         NULL,         zPROGNAME,
    450     zRcName,      zCopyright,   zLicenseDescrip,
    451     zFullVersion, apzHomeList,  zUsageTitle,
    452     zExplain,     zDetail,      optDesc,
    453     zBugsAddr,                  /* address to send bugs to */
    454     NULL, NULL,                 /* extensions/saved state  */
    455     optionUsage, /* usage procedure */
    456     translate_option_strings,   /* translation procedure */
    457     /*
    458      *  Indexes to special options
    459      */
    460     { INDEX_OPT_MORE_HELP, /* more-help option index */
    461       INDEX_OPT_SAVE_OPTS, /* save option index */
    462       NO_EQUIVALENT, /* '-#' option index */
    463       NO_EQUIVALENT /* index of default opt */
    464     },
    465     8 /* full option count */, 3 /* user option count */,
    466     ntpsnmpd_full_usage, ntpsnmpd_short_usage,
    467     NULL, NULL,
    468     PKGDATADIR, ntpsnmpd_packager_info
    469 };
    470 
    471 #if ENABLE_NLS
    472 /**
    473  * This code is designed to translate translatable option text for the
    474  * ntpsnmpd program.  These translations happen upon entry
    475  * to optionProcess().
    476  */
    477 #include <stdio.h>
    478 #include <stdlib.h>
    479 #include <string.h>
    480 #include <unistd.h>
    481 #ifdef HAVE_DCGETTEXT
    482 # include <gettext.h>
    483 #endif
    484 #include <autoopts/usage-txt.h>
    485 
    486 static char * AO_gettext(char const * pz);
    487 static void   coerce_it(void ** s);
    488 
    489 /**
    490  * AutoGen specific wrapper function for gettext.  It relies on the macro _()
    491  * to convert from English to the target language, then strdup-duplicates the
    492  * result string.  It tries the "libopts" domain first, then whatever has been
    493  * set via the \a textdomain(3) call.
    494  *
    495  * @param[in] pz the input text used as a lookup key.
    496  * @returns the translated text (if there is one),
    497  *   or the original text (if not).
    498  */
    499 static char *
    500 AO_gettext(char const * pz)
    501 {
    502     char * res;
    503     if (pz == NULL)
    504         return NULL;
    505 #ifdef HAVE_DCGETTEXT
    506     /*
    507      * While processing the option_xlateable_txt data, try to use the
    508      * "libopts" domain.  Once we switch to the option descriptor data,
    509      * do *not* use that domain.
    510      */
    511     if (option_xlateable_txt.field_ct != 0) {
    512         res = dgettext("libopts", pz);
    513         if (res == pz)
    514             res = (char *)(void *)_(pz);
    515     } else
    516         res = (char *)(void *)_(pz);
    517 #else
    518     res = (char *)(void *)_(pz);
    519 #endif
    520     if (res == pz)
    521         return res;
    522     res = strdup(res);
    523     if (res == NULL) {
    524         fputs(_("No memory for duping translated strings\n"), stderr);
    525         exit(NTPSNMPD_EXIT_FAILURE);
    526     }
    527     return res;
    528 }
    529 
    530 /**
    531  * All the pointers we use are marked "* const", but they are stored in
    532  * writable memory.  Coerce the mutability and set the pointer.
    533  */
    534 static void coerce_it(void ** s) { *s = AO_gettext(*s);
    535 }
    536 
    537 /**
    538  * Translate all the translatable strings in the ntpsnmpdOptions
    539  * structure defined above.  This is done only once.
    540  */
    541 static void
    542 translate_option_strings(void)
    543 {
    544     tOptions * const opts = &ntpsnmpdOptions;
    545 
    546     /*
    547      *  Guard against re-translation.  It won't work.  The strings will have
    548      *  been changed by the first pass through this code.  One shot only.
    549      */
    550     if (option_xlateable_txt.field_ct != 0) {
    551         /*
    552          *  Do the translations.  The first pointer follows the field count
    553          *  field.  The field count field is the size of a pointer.
    554          */
    555         char ** ppz = (char**)(void*)&(option_xlateable_txt);
    556         int     ix  = option_xlateable_txt.field_ct;
    557 
    558         do {
    559             ppz++; /* skip over field_ct */
    560             *ppz = AO_gettext(*ppz);
    561         } while (--ix > 0);
    562         /* prevent re-translation and disable "libopts" domain lookup */
    563         option_xlateable_txt.field_ct = 0;
    564 
    565         coerce_it((void*)&(opts->pzCopyright));
    566         coerce_it((void*)&(opts->pzCopyNotice));
    567         coerce_it((void*)&(opts->pzFullVersion));
    568         coerce_it((void*)&(opts->pzUsageTitle));
    569         coerce_it((void*)&(opts->pzExplain));
    570         coerce_it((void*)&(opts->pzDetail));
    571         {
    572             tOptDesc * od = opts->pOptDesc;
    573             for (ix = opts->optCt; ix > 0; ix--, od++)
    574                 coerce_it((void*)&(od->pzText));
    575         }
    576     }
    577 }
    578 #endif /* ENABLE_NLS */
    579 
    580 #ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT
    581 /** I18N function strictly for xgettext.  Do not compile. */
    582 static void bogus_function(void) {
    583   /* TRANSLATORS:
    584 
    585      The following dummy function was crated solely so that xgettext can
    586      extract the correct strings.  These strings are actually referenced
    587      by a field name in the ntpsnmpdOptions structure noted in the
    588      comments below.  The literal text is defined in ntpsnmpd_opt_strs.
    589 
    590      NOTE: the strings below are segmented with respect to the source string
    591      ntpsnmpd_opt_strs.  The strings above are handed off for translation
    592      at run time a paragraph at a time.  Consequently, they are presented here
    593      for translation a paragraph at a time.
    594 
    595      ALSO: often the description for an option will reference another option
    596      by name.  These are set off with apostrophe quotes (I hope).  Do not
    597      translate option names.
    598    */
    599   /* referenced via ntpsnmpdOptions.pzCopyright */
    600   puts(_("ntpsnmpd 4.2.7p404\n\
    601 Copyright (C) 1970-2013 The University of Delaware, all rights reserved.\n\
    602 This is free software. It is licensed for use, modification and\n\
    603 redistribution under the terms of the NTP License, copies of which\n\
    604 can be seen at:\n"));
    605   puts(_("  <http://ntp.org/license>\n\
    606   <http://opensource.org/licenses/ntp-license.php>\n"));
    607 
    608   /* referenced via ntpsnmpdOptions.pzCopyNotice */
    609   puts(_("Permission to use, copy, modify, and distribute this software and its\n\
    610 documentation for any purpose with or without fee is hereby granted,\n\
    611 provided that the above copyright notice appears in all copies and that\n\
    612 both the copyright notice and this permission notice appear in supporting\n\
    613 documentation, and that the name The University of Delaware not be used in\n\
    614 advertising or publicity pertaining to distribution of the software without\n\
    615 specific, written prior permission.  The University of Delaware makes no\n\
    616 representations about the suitability this software for any purpose.  It is\n\
    617 provided \"as is\" without express or implied warranty.\n"));
    618 
    619   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    620   puts(_("Do not fork"));
    621 
    622   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    623   puts(_("Log to syslog()"));
    624 
    625   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    626   puts(_("The socket address ntpsnmpd uses to connect to net-snmpd"));
    627 
    628   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    629   puts(_("display extended usage information and exit"));
    630 
    631   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    632   puts(_("extended usage information passed thru pager"));
    633 
    634   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    635   puts(_("output version information and exit"));
    636 
    637   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    638   puts(_("save the option state to a config file"));
    639 
    640   /* referenced via ntpsnmpdOptions.pOptDesc->pzText */
    641   puts(_("load options from a config file"));
    642 
    643   /* referenced via ntpsnmpdOptions.pzUsageTitle */
    644   puts(_("ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.7p404\n\
    645 Usage:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
    646 
    647   /* referenced via ntpsnmpdOptions.pzExplain */
    648   puts(_("\n"));
    649 
    650   /* referenced via ntpsnmpdOptions.pzFullVersion */
    651   puts(_("ntpsnmpd 4.2.7p404"));
    652 
    653   /* referenced via ntpsnmpdOptions.pzFullUsage */
    654   puts(_("<<<NOT-FOUND>>>"));
    655 
    656   /* referenced via ntpsnmpdOptions.pzShortUsage */
    657   puts(_("<<<NOT-FOUND>>>"));
    658   /* LIBOPTS-MESSAGES: */
    659 #line 67 "../autoopts.c"
    660   puts(_("allocation of %d bytes failed\n"));
    661 #line 93 "../autoopts.c"
    662   puts(_("allocation of %d bytes failed\n"));
    663 #line 53 "../init.c"
    664   puts(_("AutoOpts function called without option descriptor\n"));
    665 #line 90 "../init.c"
    666   puts(_("\tThis exceeds the compiled library version:  "));
    667 #line 88 "../init.c"
    668   puts(_("Automated Options Processing Error!\n"
    669        "\t%s called AutoOpts function with structure version %d:%d:%d.\n"));
    670 #line 80 "../autoopts.c"
    671   puts(_("realloc of %d bytes at 0x%p failed\n"));
    672 #line 92 "../init.c"
    673   puts(_("\tThis is less than the minimum library version:  "));
    674 #line 121 "../version.c"
    675   puts(_("Automated Options version %s\n"
    676        "\tCopyright (C) 1999-2013 by Bruce Korb - all rights reserved\n"));
    677 #line 82 "../makeshell.c"
    678   puts(_("(AutoOpts bug):  %s.\n"));
    679 #line 90 "../reset.c"
    680   puts(_("optionResetOpt() called, but reset-option not configured"));
    681 #line 292 "../usage.c"
    682   puts(_("could not locate the 'help' option"));
    683 #line 336 "../autoopts.c"
    684   puts(_("optionProcess() was called with invalid data"));
    685 #line 748 "../usage.c"
    686   puts(_("invalid argument type specified"));
    687 #line 598 "../find.c"
    688   puts(_("defaulted to option with optional arg"));
    689 #line 76 "../alias.c"
    690   puts(_("aliasing option is out of range."));
    691 #line 234 "../enum.c"
    692   puts(_("%s error:  the keyword '%s' is ambiguous for %s\n"));
    693 #line 108 "../find.c"
    694   puts(_("  The following options match:\n"));
    695 #line 293 "../find.c"
    696   puts(_("%s: ambiguous option name: %s (matches %d options)\n"));
    697 #line 161 "../check.c"
    698   puts(_("%s: Command line arguments required\n"));
    699 #line 43 "../alias.c"
    700   puts(_("%d %s%s options allowed\n"));
    701 #line 89 "../makeshell.c"
    702   puts(_("%s error %d (%s) calling %s for '%s'\n"));
    703 #line 301 "../makeshell.c"
    704   puts(_("interprocess pipe"));
    705 #line 168 "../version.c"
    706   puts(_("error: version option argument '%c' invalid.  Use:\n"
    707        "\t'v' - version only\n"
    708        "\t'c' - version and copyright\n"
    709        "\t'n' - version and full copyright notice\n"));
    710 #line 58 "../check.c"
    711   puts(_("%s error:  the '%s' and '%s' options conflict\n"));
    712 #line 217 "../find.c"
    713   puts(_("%s: The '%s' option has been disabled."));
    714 #line 430 "../find.c"
    715   puts(_("%s: The '%s' option has been disabled."));
    716 #line 38 "../alias.c"
    717   puts(_("-equivalence"));
    718 #line 469 "../find.c"
    719   puts(_("%s: illegal option -- %c\n"));
    720 #line 110 "../reset.c"
    721   puts(_("%s: illegal option -- %c\n"));
    722 #line 271 "../find.c"
    723   puts(_("%s: illegal option -- %s\n"));
    724 #line 755 "../find.c"
    725   puts(_("%s: illegal option -- %s\n"));
    726 #line 118 "../reset.c"
    727   puts(_("%s: illegal option -- %s\n"));
    728 #line 335 "../find.c"
    729   puts(_("%s: unknown vendor extension option -- %s\n"));
    730 #line 159 "../enum.c"
    731   puts(_("  or an integer from %d through %d\n"));
    732 #line 169 "../enum.c"
    733   puts(_("  or an integer from %d through %d\n"));
    734 #line 747 "../usage.c"
    735   puts(_("%s error:  invalid option descriptor for %s\n"));
    736 #line 1081 "../usage.c"
    737   puts(_("%s error:  invalid option descriptor for %s\n"));
    738 #line 385 "../find.c"
    739   puts(_("%s: invalid option name: %s\n"));
    740 #line 527 "../find.c"
    741   puts(_("%s: The '%s' option requires an argument.\n"));
    742 #line 156 "../autoopts.c"
    743   puts(_("(AutoOpts bug):  Equivalenced option '%s' was equivalenced to both\n"
    744        "\t'%s' and '%s'."));
    745 #line 94 "../check.c"
    746   puts(_("%s error:  The %s option is required\n"));
    747 #line 632 "../find.c"
    748   puts(_("%s: The '%s' option cannot have an argument.\n"));
    749 #line 151 "../check.c"
    750   puts(_("%s: Command line arguments are not allowed.\n"));
    751 #line 535 "../save.c"
    752   puts(_("error %d (%s) creating %s\n"));
    753 #line 234 "../enum.c"
    754   puts(_("%s error:  '%s' does not match any %s keywords.\n"));
    755 #line 93 "../reset.c"
    756   puts(_("%s error: The '%s' option requires an argument.\n"));
    757 #line 184 "../save.c"
    758   puts(_("error %d (%s) stat-ing %s\n"));
    759 #line 238 "../save.c"
    760   puts(_("error %d (%s) stat-ing %s\n"));
    761 #line 143 "../restore.c"
    762   puts(_("%s error: no saved option state\n"));
    763 #line 231 "../autoopts.c"
    764   puts(_("'%s' is not a command line option.\n"));
    765 #line 114 "../time.c"
    766   puts(_("%s error:  '%s' is not a recognizable date/time.\n"));
    767 #line 132 "../save.c"
    768   puts(_("'%s' not defined\n"));
    769 #line 53 "../time.c"
    770   puts(_("%s error:  '%s' is not a recognizable time duration.\n"));
    771 #line 92 "../check.c"
    772   puts(_("%s error:  The %s option must appear %d times.\n"));
    773 #line 157 "../numeric.c"
    774   puts(_("%s error:  '%s' is not a recognizable number.\n"));
    775 #line 200 "../enum.c"
    776   puts(_("%s error:  %s exceeds %s keyword count\n"));
    777 #line 330 "../usage.c"
    778   puts(_("Try '%s %s' for more information.\n"));
    779 #line 45 "../alias.c"
    780   puts(_("one %s%s option allowed\n"));
    781 #line 203 "../makeshell.c"
    782   puts(_("standard output"));
    783 #line 938 "../makeshell.c"
    784   puts(_("standard output"));
    785 #line 274 "../usage.c"
    786   puts(_("standard output"));
    787 #line 415 "../usage.c"
    788   puts(_("standard output"));
    789 #line 625 "../usage.c"
    790   puts(_("standard output"));
    791 #line 175 "../version.c"
    792   puts(_("standard output"));
    793 #line 274 "../usage.c"
    794   puts(_("standard error"));
    795 #line 415 "../usage.c"
    796   puts(_("standard error"));
    797 #line 625 "../usage.c"
    798   puts(_("standard error"));
    799 #line 175 "../version.c"
    800   puts(_("standard error"));
    801 #line 203 "../makeshell.c"
    802   puts(_("write"));
    803 #line 938 "../makeshell.c"
    804   puts(_("write"));
    805 #line 273 "../usage.c"
    806   puts(_("write"));
    807 #line 414 "../usage.c"
    808   puts(_("write"));
    809 #line 624 "../usage.c"
    810   puts(_("write"));
    811 #line 174 "../version.c"
    812   puts(_("write"));
    813 #line 60 "../numeric.c"
    814   puts(_("%s error:  %s option value %ld is out of range.\n"));
    815 #line 44 "../check.c"
    816   puts(_("%s error:  %s option requires the %s option\n"));
    817 #line 131 "../save.c"
    818   puts(_("%s warning:  cannot save options - %s not regular file\n"));
    819 #line 183 "../save.c"
    820   puts(_("%s warning:  cannot save options - %s not regular file\n"));
    821 #line 237 "../save.c"
    822   puts(_("%s warning:  cannot save options - %s not regular file\n"));
    823 #line 256 "../save.c"
    824   puts(_("%s warning:  cannot save options - %s not regular file\n"));
    825 #line 534 "../save.c"
    826   puts(_("%s warning:  cannot save options - %s not regular file\n"));
    827   /* END-LIBOPTS-MESSAGES */
    828 
    829   /* USAGE-TEXT: */
    830 #line 873 "../usage.c"
    831   puts(_("\t\t\t\t- an alternate for '%s'\n"));
    832 #line 1148 "../usage.c"
    833   puts(_("Version, usage and configuration options:"));
    834 #line 924 "../usage.c"
    835   puts(_("\t\t\t\t- default option for unnamed options\n"));
    836 #line 837 "../usage.c"
    837   puts(_("\t\t\t\t- disabled as '--%s'\n"));
    838 #line 1117 "../usage.c"
    839   puts(_(" --- %-14s %s\n"));
    840 #line 1115 "../usage.c"
    841   puts(_("This option has been disabled"));
    842 #line 864 "../usage.c"
    843   puts(_("\t\t\t\t- enabled by default\n"));
    844 #line 40 "../alias.c"
    845   puts(_("%s error:  only "));
    846 #line 1194 "../usage.c"
    847   puts(_(" - examining environment variables named %s_*\n"));
    848 #line 168 "../file.c"
    849   puts(_("\t\t\t\t- file must not pre-exist\n"));
    850 #line 172 "../file.c"
    851   puts(_("\t\t\t\t- file must pre-exist\n"));
    852 #line 380 "../usage.c"
    853   puts(_("Options are specified by doubled hyphens and their name or by a single\n"
    854        "hyphen and the flag character.\n"));
    855 #line 916 "../makeshell.c"
    856   puts(_("\n"
    857        "= = = = = = = =\n\n"
    858        "This incarnation of genshell will produce\n"
    859        "a shell script to parse the options for %s:\n\n"));
    860 #line 166 "../enum.c"
    861   puts(_("  or an integer mask with any of the lower %d bits set\n"));
    862 #line 897 "../usage.c"
    863   puts(_("\t\t\t\t- is a set membership option\n"));
    864 #line 918 "../usage.c"
    865   puts(_("\t\t\t\t- must appear between %d and %d times\n"));
    866 #line 382 "../usage.c"
    867   puts(_("Options are specified by single or double hyphens and their name.\n"));
    868 #line 904 "../usage.c"
    869   puts(_("\t\t\t\t- may appear multiple times\n"));
    870 #line 891 "../usage.c"
    871   puts(_("\t\t\t\t- may not be preset\n"));
    872 #line 1309 "../usage.c"
    873   puts(_("   Arg Option-Name    Description\n"));
    874 #line 1245 "../usage.c"
    875   puts(_("  Flg Arg Option-Name    Description\n"));
    876 #line 1303 "../usage.c"
    877   puts(_("  Flg Arg Option-Name    Description\n"));
    878 #line 1304 "../usage.c"
    879   puts(_(" %3s %s"));
    880 #line 1310 "../usage.c"
    881   puts(_(" %3s %s"));
    882 #line 387 "../usage.c"
    883   puts(_("The '-#<number>' option may omit the hash char\n"));
    884 #line 383 "../usage.c"
    885   puts(_("All arguments are named options.\n"));
    886 #line 971 "../usage.c"
    887   puts(_(" - reading file %s"));
    888 #line 409 "../usage.c"
    889   puts(_("\n"
    890        "Please send bug reports to:  <%s>\n"));
    891 #line 100 "../version.c"
    892   puts(_("\n"
    893        "Please send bug reports to:  <%s>\n"));
    894 #line 129 "../version.c"
    895   puts(_("\n"
    896        "Please send bug reports to:  <%s>\n"));
    897 #line 903 "../usage.c"
    898   puts(_("\t\t\t\t- may NOT appear - preset only\n"));
    899 #line 944 "../usage.c"
    900   puts(_("\n"
    901        "The following option preset mechanisms are supported:\n"));
    902 #line 1192 "../usage.c"
    903   puts(_("\n"
    904        "The following option preset mechanisms are supported:\n"));
    905 #line 682 "../usage.c"
    906   puts(_("prohibits these options:\n"));
    907 #line 677 "../usage.c"
    908   puts(_("prohibits the option '%s'\n"));
    909 #line 81 "../numeric.c"
    910   puts(_("%s%ld to %ld"));
    911 #line 79 "../numeric.c"
    912   puts(_("%sgreater than or equal to %ld"));
    913 #line 75 "../numeric.c"
    914   puts(_("%s%ld exactly"));
    915 #line 68 "../numeric.c"
    916   puts(_("%sit must lie in one of the ranges:\n"));
    917 #line 68 "../numeric.c"
    918   puts(_("%sit must be in the range:\n"));
    919 #line 88 "../numeric.c"
    920   puts(_(", or\n"));
    921 #line 66 "../numeric.c"
    922   puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n"));
    923 #line 77 "../numeric.c"
    924   puts(_("%sless than or equal to %ld"));
    925 #line 390 "../usage.c"
    926   puts(_("Operands and options may be intermixed.  They will be reordered.\n"));
    927 #line 652 "../usage.c"
    928   puts(_("requires the option '%s'\n"));
    929 #line 655 "../usage.c"
    930   puts(_("requires these options:\n"));
    931 #line 1321 "../usage.c"
    932   puts(_("   Arg Option-Name   Req?  Description\n"));
    933 #line 1315 "../usage.c"
    934   puts(_("  Flg Arg Option-Name   Req?  Description\n"));
    935 #line 167 "../enum.c"
    936   puts(_("or you may use a numeric representation.  Preceding these with a '!'\n"
    937        "will clear the bits, specifying 'none' will clear all bits, and 'all'\n"
    938        "will set them all.  Multiple entries may be passed as an option\n"
    939        "argument list.\n"));
    940 #line 910 "../usage.c"
    941   puts(_("\t\t\t\t- may appear up to %d times\n"));
    942 #line 77 "../enum.c"
    943   puts(_("The valid \"%s\" option keywords are:\n"));
    944 #line 1152 "../usage.c"
    945   puts(_("The next option supports vendor supported extra options:"));
    946 #line 773 "../usage.c"
    947   puts(_("These additional options are:"));
    948   /* END-USAGE-TEXT */
    949 }
    950 #endif /* uncompilable code */
    951 #ifdef  __cplusplus
    952 }
    953 #endif
    954 /* ntpsnmpd-opts.c ends here */
    955