xref: /freebsd/contrib/ntp/ntpdc/ntpdc-opts.c (revision 39beb93c3f8bdbf72a61fda42300b5ebed7390c8)
1 /*
2  *  EDIT THIS FILE WITH CAUTION  (ntpdc-opts.c)
3  *
4  *  It has been AutoGen-ed  Sunday August 17, 2008 at 05:26:25 AM EDT
5  *  From the definitions    ntpdc-opts.def
6  *  and the template file   options
7  *
8  * Generated from AutoOpts 29:0:4 templates.
9  */
10 
11 /*
12  *  This file was produced by an AutoOpts template.  AutoOpts is a
13  *  copyrighted work.  This source file is not encumbered by AutoOpts
14  *  licensing, but is provided under the licensing terms chosen by the
15  *  ntpdc author or copyright holder.  AutoOpts is licensed under
16  *  the terms of the LGPL.  The redistributable library (``libopts'') is
17  *  licensed under the terms of either the LGPL or, at the users discretion,
18  *  the BSD license.  See the AutoOpts and/or libopts sources for details.
19  *
20  * This source file is copyrighted and licensed under the following terms:
21  *
22  * ntpdc copyright 1970-2008 David L. Mills and/or others - all rights reserved
23  *
24  * see html/copyright.html
25  */
26 
27 
28 #include <limits.h>
29 
30 #define OPTION_CODE_COMPILE 1
31 #include "ntpdc-opts.h"
32 
33 #ifdef  __cplusplus
34 extern "C" {
35 #endif
36 tSCC zCopyright[] =
37        "ntpdc copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved";
38 tSCC zCopyrightNotice[] =
39 
40 /* extracted from ../include/copyright.def near line 8 */
41 "see html/copyright.html";
42 extern tUsageProc optionUsage;
43 
44 /*
45  *  global included definitions
46  */
47 #ifdef __windows
48   extern int atoi(const char*);
49 #else
50 # include <stdlib.h>
51 #endif
52 
53 #ifndef NULL
54 #  define NULL 0
55 #endif
56 #ifndef EXIT_SUCCESS
57 #  define  EXIT_SUCCESS 0
58 #endif
59 #ifndef EXIT_FAILURE
60 #  define  EXIT_FAILURE 1
61 #endif
62 /*
63  *  Ipv4 option description:
64  */
65 tSCC    zIpv4Text[] =
66         "Force IPv4 DNS name resolution";
67 tSCC    zIpv4_NAME[]               = "IPV4";
68 tSCC    zIpv4_Name[]               = "ipv4";
69 #define IPV4_FLAGS       (OPTST_DISABLED)
70 
71 /*
72  *  Ipv6 option description:
73  */
74 tSCC    zIpv6Text[] =
75         "Force IPv6 DNS name resolution";
76 tSCC    zIpv6_NAME[]               = "IPV6";
77 tSCC    zIpv6_Name[]               = "ipv6";
78 #define IPV6_FLAGS       (OPTST_DISABLED)
79 
80 /*
81  *  Command option description:
82  */
83 tSCC    zCommandText[] =
84         "run a command and exit";
85 tSCC    zCommand_NAME[]            = "COMMAND";
86 tSCC    zCommand_Name[]            = "command";
87 #define COMMAND_FLAGS       (OPTST_DISABLED | OPTST_STACKED \
88         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
89 
90 /*
91  *  Listpeers option description with
92  *  "Must also have options" and "Incompatible options":
93  */
94 tSCC    zListpeersText[] =
95         "Print a list of the peers";
96 tSCC    zListpeers_NAME[]          = "LISTPEERS";
97 tSCC    zListpeers_Name[]          = "listpeers";
98 static const int
99     aListpeersCantList[] = {
100     INDEX_OPT_COMMAND, NO_EQUIVALENT };
101 #define LISTPEERS_FLAGS       (OPTST_DISABLED)
102 
103 /*
104  *  Peers option description with
105  *  "Must also have options" and "Incompatible options":
106  */
107 tSCC    zPeersText[] =
108         "Print a list of the peers";
109 tSCC    zPeers_NAME[]              = "PEERS";
110 tSCC    zPeers_Name[]              = "peers";
111 static const int
112     aPeersCantList[] = {
113     INDEX_OPT_COMMAND, NO_EQUIVALENT };
114 #define PEERS_FLAGS       (OPTST_DISABLED)
115 
116 /*
117  *  Showpeers option description with
118  *  "Must also have options" and "Incompatible options":
119  */
120 tSCC    zShowpeersText[] =
121         "Show a list of the peers";
122 tSCC    zShowpeers_NAME[]          = "SHOWPEERS";
123 tSCC    zShowpeers_Name[]          = "showpeers";
124 static const int
125     aShowpeersCantList[] = {
126     INDEX_OPT_COMMAND, NO_EQUIVALENT };
127 #define SHOWPEERS_FLAGS       (OPTST_DISABLED)
128 
129 /*
130  *  Interactive option description with
131  *  "Must also have options" and "Incompatible options":
132  */
133 tSCC    zInteractiveText[] =
134         "Force ntpq to operate in interactive mode";
135 tSCC    zInteractive_NAME[]        = "INTERACTIVE";
136 tSCC    zInteractive_Name[]        = "interactive";
137 static const int
138     aInteractiveCantList[] = {
139     INDEX_OPT_COMMAND,
140     INDEX_OPT_LISTPEERS,
141     INDEX_OPT_PEERS,
142     INDEX_OPT_SHOWPEERS, NO_EQUIVALENT };
143 #define INTERACTIVE_FLAGS       (OPTST_DISABLED)
144 
145 /*
146  *  Debug_Level option description:
147  */
148 #ifdef DEBUG
149 tSCC    zDebug_LevelText[] =
150         "Increase output debug message level";
151 tSCC    zDebug_Level_NAME[]        = "DEBUG_LEVEL";
152 tSCC    zDebug_Level_Name[]        = "debug-level";
153 #define DEBUG_LEVEL_FLAGS       (OPTST_DISABLED)
154 
155 #else   /* disable Debug_Level */
156 #define VALUE_OPT_DEBUG_LEVEL NO_EQUIVALENT
157 #define DEBUG_LEVEL_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
158 #define zDebug_LevelText       NULL
159 #define zDebug_Level_NAME      NULL
160 #define zDebug_Level_Name      NULL
161 #endif  /* DEBUG */
162 
163 /*
164  *  Set_Debug_Level option description:
165  */
166 #ifdef DEBUG
167 tSCC    zSet_Debug_LevelText[] =
168         "Set the output debug message level";
169 tSCC    zSet_Debug_Level_NAME[]    = "SET_DEBUG_LEVEL";
170 tSCC    zSet_Debug_Level_Name[]    = "set-debug-level";
171 #define SET_DEBUG_LEVEL_FLAGS       (OPTST_DISABLED \
172         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
173 
174 #else   /* disable Set_Debug_Level */
175 #define VALUE_OPT_SET_DEBUG_LEVEL NO_EQUIVALENT
176 #define SET_DEBUG_LEVEL_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
177 #define zSet_Debug_LevelText       NULL
178 #define zSet_Debug_Level_NAME      NULL
179 #define zSet_Debug_Level_Name      NULL
180 #endif  /* DEBUG */
181 
182 /*
183  *  Numeric option description:
184  */
185 tSCC    zNumericText[] =
186         "numeric host addresses";
187 tSCC    zNumeric_NAME[]            = "NUMERIC";
188 tSCC    zNumeric_Name[]            = "numeric";
189 #define NUMERIC_FLAGS       (OPTST_DISABLED)
190 
191 /*
192  *  Help/More_Help/Version option descriptions:
193  */
194 tSCC zHelpText[]       = "Display usage information and exit";
195 tSCC zHelp_Name[]      = "help";
196 
197 tSCC zMore_HelpText[]  = "Extended usage information passed thru pager";
198 tSCC zMore_Help_Name[] = "more-help";
199 
200 tSCC zVersionText[]    = "Output version information and exit";
201 tSCC zVersion_Name[]   = "version";
202 
203 /*
204  *  Save/Load_Opts option description:
205  */
206 tSCC zSave_OptsText[]     = "Save the option state to a config file";
207 tSCC zSave_Opts_Name[]    = "save-opts";
208 
209 tSCC zLoad_OptsText[]     = "Load options from a config file";
210 tSCC zLoad_Opts_NAME[]    = "LOAD_OPTS";
211 
212 tSCC zNotLoad_Opts_Name[] = "no-load-opts";
213 tSCC zNotLoad_Opts_Pfx[]  = "no";
214 #define zLoad_Opts_Name   (zNotLoad_Opts_Name + 3)
215 /*
216  *  Declare option callback procedures
217  */
218 #ifdef DEBUG
219   static tOptProc doOptSet_Debug_Level;
220 #else /* not DEBUG */
221 # define doOptSet_Debug_Level NULL
222 #endif /* def/not DEBUG */
223 #if defined(TEST_NTPDC_OPTS)
224 /*
225  *  Under test, omit argument processing, or call optionStackArg,
226  *  if multiple copies are allowed.
227  */
228 extern tOptProc
229     optionPagedUsage, optionStackArg, optionVersionStderr;
230 static tOptProc
231     doUsageOpt;
232 
233 /*
234  *  #define map the "normal" callout procs to the test ones...
235  */
236 #define SET_DEBUG_LEVEL_OPT_PROC optionStackArg
237 
238 
239 #else /* NOT defined TEST_NTPDC_OPTS */
240 /*
241  *  When not under test, there are different procs to use
242  */
243 extern tOptProc
244     optionPagedUsage, optionPrintVersion, optionStackArg;
245 static tOptProc
246     doUsageOpt;
247 
248 /*
249  *  #define map the "normal" callout procs
250  */
251 #define SET_DEBUG_LEVEL_OPT_PROC doOptSet_Debug_Level
252 
253 #define SET_DEBUG_LEVEL_OPT_PROC doOptSet_Debug_Level
254 #endif /* defined(TEST_NTPDC_OPTS) */
255 #ifdef TEST_NTPDC_OPTS
256 # define DOVERPROC optionVersionStderr
257 #else
258 # define DOVERPROC optionPrintVersion
259 #endif /* TEST_NTPDC_OPTS */
260 
261 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
262  *
263  *  Define the Ntpdc Option Descriptions.
264  */
265 static tOptDesc optDesc[ OPTION_CT ] = {
266   {  /* entry idx, value */ 0, VALUE_OPT_IPV4,
267      /* equiv idx, value */ NO_EQUIVALENT, 0,
268      /* equivalenced to  */ NO_EQUIVALENT,
269      /* min, max, act ct */ 0, 1, 0,
270      /* opt state flags  */ IPV4_FLAGS, 0,
271      /* last opt argumnt */ { NULL },
272      /* arg list/cookie  */ NULL,
273      /* must/cannot opts */ NULL, NULL,
274      /* option proc      */ NULL,
275      /* desc, NAME, name */ zIpv4Text, zIpv4_NAME, zIpv4_Name,
276      /* disablement strs */ NULL, NULL },
277 
278   {  /* entry idx, value */ 1, VALUE_OPT_IPV6,
279      /* equiv idx, value */ NOLIMIT, NOLIMIT,
280      /* equivalenced to  */ INDEX_OPT_IPV4,
281      /* min, max, act ct */ 0, 1, 0,
282      /* opt state flags  */ IPV6_FLAGS, 0,
283      /* last opt argumnt */ { NULL },
284      /* arg list/cookie  */ NULL,
285      /* must/cannot opts */ NULL, NULL,
286      /* option proc      */ NULL,
287      /* desc, NAME, name */ zIpv6Text, zIpv6_NAME, zIpv6_Name,
288      /* disablement strs */ NULL, NULL },
289 
290   {  /* entry idx, value */ 2, VALUE_OPT_COMMAND,
291      /* equiv idx, value */ 2, VALUE_OPT_COMMAND,
292      /* equivalenced to  */ NO_EQUIVALENT,
293      /* min, max, act ct */ 0, NOLIMIT, 0,
294      /* opt state flags  */ COMMAND_FLAGS, 0,
295      /* last opt argumnt */ { NULL },
296      /* arg list/cookie  */ NULL,
297      /* must/cannot opts */ NULL, NULL,
298      /* option proc      */ optionStackArg,
299      /* desc, NAME, name */ zCommandText, zCommand_NAME, zCommand_Name,
300      /* disablement strs */ NULL, NULL },
301 
302   {  /* entry idx, value */ 3, VALUE_OPT_LISTPEERS,
303      /* equiv idx, value */ 3, VALUE_OPT_LISTPEERS,
304      /* equivalenced to  */ NO_EQUIVALENT,
305      /* min, max, act ct */ 0, 1, 0,
306      /* opt state flags  */ LISTPEERS_FLAGS, 0,
307      /* last opt argumnt */ { NULL },
308      /* arg list/cookie  */ NULL,
309      /* must/cannot opts */ NULL, aListpeersCantList,
310      /* option proc      */ NULL,
311      /* desc, NAME, name */ zListpeersText, zListpeers_NAME, zListpeers_Name,
312      /* disablement strs */ NULL, NULL },
313 
314   {  /* entry idx, value */ 4, VALUE_OPT_PEERS,
315      /* equiv idx, value */ 4, VALUE_OPT_PEERS,
316      /* equivalenced to  */ NO_EQUIVALENT,
317      /* min, max, act ct */ 0, 1, 0,
318      /* opt state flags  */ PEERS_FLAGS, 0,
319      /* last opt argumnt */ { NULL },
320      /* arg list/cookie  */ NULL,
321      /* must/cannot opts */ NULL, aPeersCantList,
322      /* option proc      */ NULL,
323      /* desc, NAME, name */ zPeersText, zPeers_NAME, zPeers_Name,
324      /* disablement strs */ NULL, NULL },
325 
326   {  /* entry idx, value */ 5, VALUE_OPT_SHOWPEERS,
327      /* equiv idx, value */ 5, VALUE_OPT_SHOWPEERS,
328      /* equivalenced to  */ NO_EQUIVALENT,
329      /* min, max, act ct */ 0, 1, 0,
330      /* opt state flags  */ SHOWPEERS_FLAGS, 0,
331      /* last opt argumnt */ { NULL },
332      /* arg list/cookie  */ NULL,
333      /* must/cannot opts */ NULL, aShowpeersCantList,
334      /* option proc      */ NULL,
335      /* desc, NAME, name */ zShowpeersText, zShowpeers_NAME, zShowpeers_Name,
336      /* disablement strs */ NULL, NULL },
337 
338   {  /* entry idx, value */ 6, VALUE_OPT_INTERACTIVE,
339      /* equiv idx, value */ 6, VALUE_OPT_INTERACTIVE,
340      /* equivalenced to  */ NO_EQUIVALENT,
341      /* min, max, act ct */ 0, 1, 0,
342      /* opt state flags  */ INTERACTIVE_FLAGS, 0,
343      /* last opt argumnt */ { NULL },
344      /* arg list/cookie  */ NULL,
345      /* must/cannot opts */ NULL, aInteractiveCantList,
346      /* option proc      */ NULL,
347      /* desc, NAME, name */ zInteractiveText, zInteractive_NAME, zInteractive_Name,
348      /* disablement strs */ NULL, NULL },
349 
350   {  /* entry idx, value */ 7, VALUE_OPT_DEBUG_LEVEL,
351      /* equiv idx, value */ 7, VALUE_OPT_DEBUG_LEVEL,
352      /* equivalenced to  */ NO_EQUIVALENT,
353      /* min, max, act ct */ 0, NOLIMIT, 0,
354      /* opt state flags  */ DEBUG_LEVEL_FLAGS, 0,
355      /* last opt argumnt */ { NULL },
356      /* arg list/cookie  */ NULL,
357      /* must/cannot opts */ NULL, NULL,
358      /* option proc      */ NULL,
359      /* desc, NAME, name */ zDebug_LevelText, zDebug_Level_NAME, zDebug_Level_Name,
360      /* disablement strs */ NULL, NULL },
361 
362   {  /* entry idx, value */ 8, VALUE_OPT_SET_DEBUG_LEVEL,
363      /* equiv idx, value */ 8, VALUE_OPT_SET_DEBUG_LEVEL,
364      /* equivalenced to  */ NO_EQUIVALENT,
365      /* min, max, act ct */ 0, NOLIMIT, 0,
366      /* opt state flags  */ SET_DEBUG_LEVEL_FLAGS, 0,
367      /* last opt argumnt */ { NULL },
368      /* arg list/cookie  */ NULL,
369      /* must/cannot opts */ NULL, NULL,
370      /* option proc      */ SET_DEBUG_LEVEL_OPT_PROC,
371      /* desc, NAME, name */ zSet_Debug_LevelText, zSet_Debug_Level_NAME, zSet_Debug_Level_Name,
372      /* disablement strs */ NULL, NULL },
373 
374   {  /* entry idx, value */ 9, VALUE_OPT_NUMERIC,
375      /* equiv idx, value */ 9, VALUE_OPT_NUMERIC,
376      /* equivalenced to  */ NO_EQUIVALENT,
377      /* min, max, act ct */ 0, 1, 0,
378      /* opt state flags  */ NUMERIC_FLAGS, 0,
379      /* last opt argumnt */ { NULL },
380      /* arg list/cookie  */ NULL,
381      /* must/cannot opts */ NULL, NULL,
382      /* option proc      */ NULL,
383      /* desc, NAME, name */ zNumericText, zNumeric_NAME, zNumeric_Name,
384      /* disablement strs */ NULL, NULL },
385 
386 #ifdef NO_OPTIONAL_OPT_ARGS
387 #  define VERSION_OPT_FLAGS     OPTST_IMM | OPTST_NO_INIT
388 #else
389 #  define VERSION_OPT_FLAGS     OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
390                                 OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
391 #endif
392 
393   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
394      /* equiv idx value  */ NO_EQUIVALENT, 0,
395      /* equivalenced to  */ NO_EQUIVALENT,
396      /* min, max, act ct */ 0, 1, 0,
397      /* opt state flags  */ VERSION_OPT_FLAGS, 0,
398      /* last opt argumnt */ { NULL },
399      /* arg list/cookie  */ NULL,
400      /* must/cannot opts */ NULL, NULL,
401      /* option proc      */ DOVERPROC,
402      /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
403      /* disablement strs */ NULL, NULL },
404 
405 #undef VERSION_OPT_FLAGS
406 
407 
408   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
409      /* equiv idx value  */ NO_EQUIVALENT, 0,
410      /* equivalenced to  */ NO_EQUIVALENT,
411      /* min, max, act ct */ 0, 1, 0,
412      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
413      /* last opt argumnt */ { NULL },
414      /* arg list/cookie  */ NULL,
415      /* must/cannot opts */ NULL, NULL,
416      /* option proc      */ doUsageOpt,
417      /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
418      /* disablement strs */ NULL, NULL },
419 
420   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
421      /* equiv idx value  */ NO_EQUIVALENT, 0,
422      /* equivalenced to  */ NO_EQUIVALENT,
423      /* min, max, act ct */ 0, 1, 0,
424      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
425      /* last opt argumnt */ { NULL },
426      /* arg list/cookie  */ NULL,
427      /* must/cannot opts */ NULL,  NULL,
428      /* option proc      */ optionPagedUsage,
429      /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
430      /* disablement strs */ NULL, NULL },
431 
432   {  /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS,
433      /* equiv idx value  */ NO_EQUIVALENT, 0,
434      /* equivalenced to  */ NO_EQUIVALENT,
435      /* min, max, act ct */ 0, 1, 0,
436      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
437                           | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, 0,
438      /* last opt argumnt */ { NULL },
439      /* arg list/cookie  */ NULL,
440      /* must/cannot opts */ NULL,  NULL,
441      /* option proc      */ NULL,
442      /* desc, NAME, name */ zSave_OptsText, NULL, zSave_Opts_Name,
443      /* disablement strs */ NULL, NULL },
444 
445   {  /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS,
446      /* equiv idx value  */ NO_EQUIVALENT, 0,
447      /* equivalenced to  */ NO_EQUIVALENT,
448      /* min, max, act ct */ 0, NOLIMIT, 0,
449      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) \
450 			  | OPTST_DISABLE_IMM, 0,
451      /* last opt argumnt */ { NULL },
452      /* arg list/cookie  */ NULL,
453      /* must/cannot opts */ NULL, NULL,
454      /* option proc      */ optionLoadOpt,
455      /* desc, NAME, name */ zLoad_OptsText, zLoad_Opts_NAME, zLoad_Opts_Name,
456      /* disablement strs */ zNotLoad_Opts_Name, zNotLoad_Opts_Pfx }
457 };
458 
459 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
460  *
461  *  Define the Ntpdc Option Environment
462  */
463 tSCC   zPROGNAME[]   = "NTPDC";
464 tSCC   zUsageTitle[] =
465 "ntpdc - vendor-specific NTP query program - Ver. 4.2.4p5\n\
466 USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n";
467 tSCC   zRcName[]     = ".ntprc";
468 tSCC*  apzHomeList[] = {
469        "$HOME",
470        ".",
471        NULL };
472 
473 tSCC   zBugsAddr[]    = "http://bugs.ntp.isc.org, bugs@ntp.org";
474 #define zExplain NULL
475 tSCC    zDetail[]     = "\n\
476 The\n\
477 [= prog-name =]\n\
478 utility program is used to query an NTP daemon about its\n\
479 current state and to request changes in that state.\n\
480 It uses NTP mode 7 control message formats described in the source code.\n\
481 The program may\n\
482 be run either in interactive mode or controlled using command line\n\
483 arguments.\n\
484 Extensive state and statistics information is available\n\
485 through the\n\
486 [= prog-name =]\n\
487 interface.\n\
488 In addition, nearly all the\n\
489 configuration options which can be specified at startup using\n\
490 ntpd's configuration file may also be specified at run time using\n\
491 [= prog-name =] .\n";
492 tSCC    zFullVersion[] = NTPDC_FULL_VERSION;
493 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */
494 
495 #if defined(ENABLE_NLS)
496 # define OPTPROC_BASE OPTPROC_TRANSLATE
497   static tOptionXlateProc translate_option_strings;
498 #else
499 # define OPTPROC_BASE OPTPROC_NONE
500 # define translate_option_strings NULL
501 #endif /* ENABLE_NLS */
502 
503 tOptions ntpdcOptions = {
504     OPTIONS_STRUCT_VERSION,
505     0, NULL,                    /* original argc + argv    */
506     ( OPTPROC_BASE
507     + OPTPROC_ERRSTOP
508     + OPTPROC_SHORTOPT
509     + OPTPROC_LONGOPT
510     + OPTPROC_NO_REQ_OPT
511     + OPTPROC_ENVIRON
512     + OPTPROC_HAS_IMMED ),
513     0, NULL,                    /* current option index, current option */
514     NULL,         NULL,         zPROGNAME,
515     zRcName,      zCopyright,   zCopyrightNotice,
516     zFullVersion, apzHomeList,  zUsageTitle,
517     zExplain,     zDetail,      optDesc,
518     zBugsAddr,                  /* address to send bugs to */
519     NULL, NULL,                 /* extensions/saved state  */
520     optionUsage,       /* usage procedure */
521     translate_option_strings,   /* translation procedure */
522     /*
523      *  Indexes to special options
524      */
525     { INDEX_OPT_MORE_HELP,
526       INDEX_OPT_SAVE_OPTS,
527       NO_EQUIVALENT /* index of '-#' option */,
528       NO_EQUIVALENT /* index of default opt */
529     },
530     15 /* full option count */, 10 /* user option count */
531 };
532 
533 /*
534  *  Create the static procedure(s) declared above.
535  */
536 static void
537 doUsageOpt(
538     tOptions*   pOptions,
539     tOptDesc*   pOptDesc )
540 {
541     USAGE( EXIT_SUCCESS );
542 }
543 
544 #if ! defined(TEST_NTPDC_OPTS)
545 
546 /* * * * * * *
547  *
548  *   For the set-debug-level option, when DEBUG is #define-d.
549  */
550 #ifdef DEBUG
551 static void
552 doOptSet_Debug_Level(
553     tOptions*   pOptions,
554     tOptDesc*   pOptDesc )
555 {
556     /* extracted from ../include/debug-opt.def, line 29 */
557 DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg );
558 }
559 #endif /* defined DEBUG */
560 
561 #endif /* defined(TEST_NTPDC_OPTS) */
562 
563 /* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */
564 
565 #if defined(TEST_NTPDC_OPTS) /* TEST MAIN PROCEDURE: */
566 
567 int
568 main( int argc, char** argv )
569 {
570     int res = EXIT_SUCCESS;
571     (void)optionProcess( &ntpdcOptions, argc, argv );
572     {
573         void optionPutShell( tOptions* );
574         optionPutShell( &ntpdcOptions );
575     }
576     return res;
577 }
578 #endif  /* defined TEST_NTPDC_OPTS */
579 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */
580 
581 #if ENABLE_NLS
582 #include <stdio.h>
583 #include <stdlib.h>
584 #include <string.h>
585 #include <unistd.h>
586 #include <autoopts/usage-txt.h>
587 
588 static char* AO_gettext( char const* pz );
589 static void  coerce_it(void** s);
590 
591 static char*
592 AO_gettext( char const* pz )
593 {
594     char* pzRes;
595     if (pz == NULL)
596         return NULL;
597     pzRes = _(pz);
598     if (pzRes == pz)
599         return pzRes;
600     pzRes = strdup( pzRes );
601     if (pzRes == NULL) {
602         fputs( _("No memory for duping translated strings\n"), stderr );
603         exit( EXIT_FAILURE );
604     }
605     return pzRes;
606 }
607 
608 static void coerce_it(void** s) { *s = AO_gettext(*s); }
609 #define COERSION(_f) \
610   coerce_it((void*)&(ntpdcOptions._f))
611 
612 /*
613  *  This invokes the translation code (e.g. gettext(3)).
614  */
615 static void
616 translate_option_strings( void )
617 {
618     /*
619      *  Guard against re-translation.  It won't work.  The strings will have
620      *  been changed by the first pass through this code.  One shot only.
621      */
622     if (option_usage_text.field_ct == 0)
623         return;
624     /*
625      *  Do the translations.  The first pointer follows the field count field.
626      *  The field count field is the size of a pointer.
627      */
628     {
629         char** ppz = (char**)(void*)&(option_usage_text);
630         int    ix  = option_usage_text.field_ct;
631 
632         do {
633             ppz++;
634             *ppz = AO_gettext(*ppz);
635         } while (--ix > 0);
636     }
637     option_usage_text.field_ct = 0;
638 
639     {
640         tOptDesc* pOD = ntpdcOptions.pOptDesc;
641         int       ix  = ntpdcOptions.optCt;
642 
643         for (;;) {
644             pOD->pzText           = AO_gettext(pOD->pzText);
645             pOD->pz_NAME          = AO_gettext(pOD->pz_NAME);
646             pOD->pz_Name          = AO_gettext(pOD->pz_Name);
647             pOD->pz_DisableName   = AO_gettext(pOD->pz_DisableName);
648             pOD->pz_DisablePfx    = AO_gettext(pOD->pz_DisablePfx);
649             if (--ix <= 0)
650                 break;
651             pOD++;
652         }
653     }
654     COERSION(pzCopyright);
655     COERSION(pzCopyNotice);
656     COERSION(pzFullVersion);
657     COERSION(pzUsageTitle);
658     COERSION(pzExplain);
659     COERSION(pzDetail);
660 }
661 
662 #endif /* ENABLE_NLS */
663 
664 #ifdef  __cplusplus
665 }
666 #endif
667 /* ntpdc-opts.c ends here */
668