xref: /netbsd/external/bsd/ntp/dist/sntp/sntp-opts.c (revision 6550d01e)
1 /*	$NetBSD: sntp-opts.c,v 1.1.1.1 2009/12/13 16:57:11 kardel Exp $	*/
2 
3 /*
4  *  EDIT THIS FILE WITH CAUTION  (sntp-opts.c)
5  *
6  *  It has been AutoGen-ed  December 10, 2009 at 05:07:30 AM by AutoGen 5.10
7  *  From the definitions    sntp-opts.def
8  *  and the template file   options
9  *
10  * Generated from AutoOpts 33:0:8 templates.
11  */
12 
13 /*
14  *  This file was produced by an AutoOpts template.  AutoOpts is a
15  *  copyrighted work.  This source file is not encumbered by AutoOpts
16  *  licensing, but is provided under the licensing terms chosen by the
17  *  sntp author or copyright holder.  AutoOpts is licensed under
18  *  the terms of the LGPL.  The redistributable library (``libopts'') is
19  *  licensed under the terms of either the LGPL or, at the users discretion,
20  *  the BSD license.  See the AutoOpts and/or libopts sources for details.
21  *
22  * This source file is copyrighted and licensed under the following terms:
23  *
24  * sntp copyright (c) 1970-2009 David L. Mills and/or others - all rights reserved
25  *
26  * see html/copyright.html
27  */
28 
29 #include <sys/types.h>
30 #include <limits.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 
34 #define OPTION_CODE_COMPILE 1
35 #include "sntp-opts.h"
36 
37 #ifdef  __cplusplus
38 extern "C" {
39 #endif
40 
41 /* TRANSLATORS: choose the translation for option names wisely because you
42                 cannot ever change your mind. */
43 tSCC zCopyright[] =
44        "sntp copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"
45 /* extracted from ../include/copyright.def near line 8 */
46 ;
47 tSCC zCopyrightNotice[24] =
48 "see html/copyright.html";
49 
50 extern tUsageProc optionUsage;
51 
52 #ifndef NULL
53 #  define NULL 0
54 #endif
55 #ifndef EXIT_SUCCESS
56 #  define  EXIT_SUCCESS 0
57 #endif
58 #ifndef EXIT_FAILURE
59 #  define  EXIT_FAILURE 1
60 #endif
61 
62 /*
63  *  Ipv4 option description with
64  *  "Must also have options" and "Incompatible options":
65  */
66 tSCC    zIpv4Text[] =
67         "Force IPv4 DNS name resolution";
68 tSCC    zIpv4_NAME[]               = "IPV4";
69 tSCC    zIpv4_Name[]               = "ipv4";
70 static const int
71     aIpv4CantList[] = {
72     INDEX_OPT_IPV6, NO_EQUIVALENT };
73 #define IPV4_FLAGS       (OPTST_DISABLED)
74 
75 /*
76  *  Ipv6 option description with
77  *  "Must also have options" and "Incompatible options":
78  */
79 tSCC    zIpv6Text[] =
80         "Force IPv6 DNS name resolution";
81 tSCC    zIpv6_NAME[]               = "IPV6";
82 tSCC    zIpv6_Name[]               = "ipv6";
83 static const int
84     aIpv6CantList[] = {
85     INDEX_OPT_IPV4, NO_EQUIVALENT };
86 #define IPV6_FLAGS       (OPTST_DISABLED)
87 
88 /*
89  *  Normalverbose option description:
90  */
91 tSCC    zNormalverboseText[] =
92         "Normal verbose";
93 tSCC    zNormalverbose_NAME[]      = "NORMALVERBOSE";
94 tSCC    zNormalverbose_Name[]      = "normalverbose";
95 #define NORMALVERBOSE_FLAGS       (OPTST_DISABLED)
96 
97 /*
98  *  Kod option description:
99  */
100 tSCC    zKodText[] =
101         "KoD history filename";
102 tSCC    zKod_NAME[]                = "KOD";
103 tSCC    zKod_Name[]                = "kod";
104 #define KOD_FLAGS       (OPTST_DISABLED \
105         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
106 
107 /*
108  *  Syslog option description with
109  *  "Must also have options" and "Incompatible options":
110  */
111 tSCC    zSyslogText[] =
112         "Logging with syslog";
113 tSCC    zSyslog_NAME[]             = "SYSLOG";
114 tSCC    zSyslog_Name[]             = "syslog";
115 static const int
116     aSyslogCantList[] = {
117     INDEX_OPT_FILELOG, NO_EQUIVALENT };
118 #define SYSLOG_FLAGS       (OPTST_DISABLED)
119 
120 /*
121  *  Filelog option description with
122  *  "Must also have options" and "Incompatible options":
123  */
124 tSCC    zFilelogText[] =
125         "Log to specified logfile";
126 tSCC    zFilelog_NAME[]            = "FILELOG";
127 tSCC    zFilelog_Name[]            = "filelog";
128 static const int
129     aFilelogCantList[] = {
130     INDEX_OPT_SYSLOG, NO_EQUIVALENT };
131 #define FILELOG_FLAGS       (OPTST_DISABLED \
132         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
133 
134 /*
135  *  Settod option description with
136  *  "Must also have options" and "Incompatible options":
137  */
138 tSCC    zSettodText[] =
139         "Set (step) the time with settimeofday()";
140 tSCC    zSettod_NAME[]             = "SETTOD";
141 tSCC    zSettod_Name[]             = "settod";
142 static const int
143     aSettodCantList[] = {
144     INDEX_OPT_ADJTIME, NO_EQUIVALENT };
145 #define SETTOD_FLAGS       (OPTST_DISABLED)
146 
147 /*
148  *  Adjtime option description with
149  *  "Must also have options" and "Incompatible options":
150  */
151 tSCC    zAdjtimeText[] =
152         "Set (slew) the time with adjtime()";
153 tSCC    zAdjtime_NAME[]            = "ADJTIME";
154 tSCC    zAdjtime_Name[]            = "adjtime";
155 static const int
156     aAdjtimeCantList[] = {
157     INDEX_OPT_SETTOD, NO_EQUIVALENT };
158 #define ADJTIME_FLAGS       (OPTST_DISABLED)
159 
160 /*
161  *  Broadcast option description:
162  */
163 tSCC    zBroadcastText[] =
164         "Use broadcasts to the address specified for synchronisation";
165 tSCC    zBroadcast_NAME[]          = "BROADCAST";
166 tSCC    zBroadcast_Name[]          = "broadcast";
167 #define BROADCAST_FLAGS       (OPTST_DISABLED \
168         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
169 
170 /*
171  *  Timeout option description:
172  */
173 tSCC    zTimeoutText[] =
174         "Specify the number of seconds to wait for broadcasts";
175 tSCC    zTimeout_NAME[]            = "TIMEOUT";
176 tSCC    zTimeout_Name[]            = "timeout";
177 #define zTimeoutDefaultArg           ((char const*)68)
178 #define TIMEOUT_FLAGS       (OPTST_DISABLED \
179         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
180 
181 /*
182  *  Authentication option description:
183  */
184 tSCC    zAuthenticationText[] =
185         "Enable authentication with the key auth-keynumber";
186 tSCC    zAuthentication_NAME[]     = "AUTHENTICATION";
187 tSCC    zAuthentication_Name[]     = "authentication";
188 #define AUTHENTICATION_FLAGS       (OPTST_DISABLED \
189         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
190 
191 /*
192  *  Keyfile option description:
193  */
194 tSCC    zKeyfileText[] =
195         "Specify a keyfile. SNTP will look in this file for the key specified with -a";
196 tSCC    zKeyfile_NAME[]            = "KEYFILE";
197 tSCC    zKeyfile_Name[]            = "keyfile";
198 #define KEYFILE_FLAGS       (OPTST_DISABLED \
199         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
200 
201 /*
202  *  Help/More_Help/Version option descriptions:
203  */
204 tSCC zHelpText[]          = "Display extended usage information and exit";
205 tSCC zHelp_Name[]         = "help";
206 #ifdef HAVE_WORKING_FORK
207 #define OPTST_MORE_HELP_FLAGS   (OPTST_IMM | OPTST_NO_INIT)
208 tSCC zMore_Help_Name[]    = "more-help";
209 tSCC zMore_HelpText[]     = "Extended usage information passed thru pager";
210 #else
211 #define OPTST_MORE_HELP_FLAGS   (OPTST_OMITTED | OPTST_NO_INIT)
212 #define zMore_Help_Name   NULL
213 #define zMore_HelpText    NULL
214 #endif
215 #ifdef NO_OPTIONAL_OPT_ARGS
216 #  define OPTST_VERSION_FLAGS   OPTST_IMM | OPTST_NO_INIT
217 #else
218 #  define OPTST_VERSION_FLAGS   OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
219                                 OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
220 #endif
221 
222 tSCC zVersionText[]       = "Output version information and exit";
223 tSCC zVersion_Name[]      = "version";
224 tSCC zSave_OptsText[]     = "Save the option state to a config file";
225 tSCC zSave_Opts_Name[]    = "save-opts";
226 tSCC zLoad_OptsText[]     = "Load options from a config file";
227 tSCC zLoad_Opts_NAME[]    = "LOAD_OPTS";
228 tSCC zNotLoad_Opts_Name[] = "no-load-opts";
229 tSCC zNotLoad_Opts_Pfx[]  = "no";
230 #define zLoad_Opts_Name   (zNotLoad_Opts_Name + 3)
231 /*
232  *  Declare option callback procedures
233  */
234 #if defined(TEST_SNTP_OPTS)
235 /*
236  *  Under test, omit argument processing, or call optionStackArg,
237  *  if multiple copies are allowed.
238  */
239 extern tOptProc
240     optionNumericVal, optionPagedUsage, optionVersionStderr;
241 static tOptProc
242     doUsageOpt;
243 
244 #else /* NOT defined TEST_SNTP_OPTS */
245 /*
246  *  When not under test, there are different procs to use
247  */
248 extern tOptProc
249     optionNumericVal, optionPagedUsage, optionPrintVersion;
250 static tOptProc
251     doUsageOpt;
252 #endif /* defined(TEST_SNTP_OPTS) */
253 #ifdef TEST_SNTP_OPTS
254 # define DOVERPROC optionVersionStderr
255 #else
256 # define DOVERPROC optionPrintVersion
257 #endif /* TEST_SNTP_OPTS */
258 
259 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
260  *
261  *  Define the Sntp Option Descriptions.
262  */
263 static tOptDesc optDesc[ OPTION_CT ] = {
264   {  /* entry idx, value */ 0, VALUE_OPT_IPV4,
265      /* equiv idx, value */ 0, VALUE_OPT_IPV4,
266      /* equivalenced to  */ NO_EQUIVALENT,
267      /* min, max, act ct */ 0, 1, 0,
268      /* opt state flags  */ IPV4_FLAGS, 0,
269      /* last opt argumnt */ { NULL },
270      /* arg list/cookie  */ NULL,
271      /* must/cannot opts */ NULL, aIpv4CantList,
272      /* option proc      */ NULL,
273      /* desc, NAME, name */ zIpv4Text, zIpv4_NAME, zIpv4_Name,
274      /* disablement strs */ NULL, NULL },
275 
276   {  /* entry idx, value */ 1, VALUE_OPT_IPV6,
277      /* equiv idx, value */ 1, VALUE_OPT_IPV6,
278      /* equivalenced to  */ NO_EQUIVALENT,
279      /* min, max, act ct */ 0, 1, 0,
280      /* opt state flags  */ IPV6_FLAGS, 0,
281      /* last opt argumnt */ { NULL },
282      /* arg list/cookie  */ NULL,
283      /* must/cannot opts */ NULL, aIpv6CantList,
284      /* option proc      */ NULL,
285      /* desc, NAME, name */ zIpv6Text, zIpv6_NAME, zIpv6_Name,
286      /* disablement strs */ NULL, NULL },
287 
288   {  /* entry idx, value */ 2, VALUE_OPT_NORMALVERBOSE,
289      /* equiv idx, value */ 2, VALUE_OPT_NORMALVERBOSE,
290      /* equivalenced to  */ NO_EQUIVALENT,
291      /* min, max, act ct */ 0, 1, 0,
292      /* opt state flags  */ NORMALVERBOSE_FLAGS, 0,
293      /* last opt argumnt */ { NULL },
294      /* arg list/cookie  */ NULL,
295      /* must/cannot opts */ NULL, NULL,
296      /* option proc      */ NULL,
297      /* desc, NAME, name */ zNormalverboseText, zNormalverbose_NAME, zNormalverbose_Name,
298      /* disablement strs */ NULL, NULL },
299 
300   {  /* entry idx, value */ 3, VALUE_OPT_KOD,
301      /* equiv idx, value */ 3, VALUE_OPT_KOD,
302      /* equivalenced to  */ NO_EQUIVALENT,
303      /* min, max, act ct */ 0, 1, 0,
304      /* opt state flags  */ KOD_FLAGS, 0,
305      /* last opt argumnt */ { NULL },
306      /* arg list/cookie  */ NULL,
307      /* must/cannot opts */ NULL, NULL,
308      /* option proc      */ NULL,
309      /* desc, NAME, name */ zKodText, zKod_NAME, zKod_Name,
310      /* disablement strs */ NULL, NULL },
311 
312   {  /* entry idx, value */ 4, VALUE_OPT_SYSLOG,
313      /* equiv idx, value */ 4, VALUE_OPT_SYSLOG,
314      /* equivalenced to  */ NO_EQUIVALENT,
315      /* min, max, act ct */ 0, 1, 0,
316      /* opt state flags  */ SYSLOG_FLAGS, 0,
317      /* last opt argumnt */ { NULL },
318      /* arg list/cookie  */ NULL,
319      /* must/cannot opts */ NULL, aSyslogCantList,
320      /* option proc      */ NULL,
321      /* desc, NAME, name */ zSyslogText, zSyslog_NAME, zSyslog_Name,
322      /* disablement strs */ NULL, NULL },
323 
324   {  /* entry idx, value */ 5, VALUE_OPT_FILELOG,
325      /* equiv idx, value */ 5, VALUE_OPT_FILELOG,
326      /* equivalenced to  */ NO_EQUIVALENT,
327      /* min, max, act ct */ 0, 1, 0,
328      /* opt state flags  */ FILELOG_FLAGS, 0,
329      /* last opt argumnt */ { NULL },
330      /* arg list/cookie  */ NULL,
331      /* must/cannot opts */ NULL, aFilelogCantList,
332      /* option proc      */ NULL,
333      /* desc, NAME, name */ zFilelogText, zFilelog_NAME, zFilelog_Name,
334      /* disablement strs */ NULL, NULL },
335 
336   {  /* entry idx, value */ 6, VALUE_OPT_SETTOD,
337      /* equiv idx, value */ 6, VALUE_OPT_SETTOD,
338      /* equivalenced to  */ NO_EQUIVALENT,
339      /* min, max, act ct */ 0, 1, 0,
340      /* opt state flags  */ SETTOD_FLAGS, 0,
341      /* last opt argumnt */ { NULL },
342      /* arg list/cookie  */ NULL,
343      /* must/cannot opts */ NULL, aSettodCantList,
344      /* option proc      */ NULL,
345      /* desc, NAME, name */ zSettodText, zSettod_NAME, zSettod_Name,
346      /* disablement strs */ NULL, NULL },
347 
348   {  /* entry idx, value */ 7, VALUE_OPT_ADJTIME,
349      /* equiv idx, value */ 7, VALUE_OPT_ADJTIME,
350      /* equivalenced to  */ NO_EQUIVALENT,
351      /* min, max, act ct */ 0, 1, 0,
352      /* opt state flags  */ ADJTIME_FLAGS, 0,
353      /* last opt argumnt */ { NULL },
354      /* arg list/cookie  */ NULL,
355      /* must/cannot opts */ NULL, aAdjtimeCantList,
356      /* option proc      */ NULL,
357      /* desc, NAME, name */ zAdjtimeText, zAdjtime_NAME, zAdjtime_Name,
358      /* disablement strs */ NULL, NULL },
359 
360   {  /* entry idx, value */ 8, VALUE_OPT_BROADCAST,
361      /* equiv idx, value */ 8, VALUE_OPT_BROADCAST,
362      /* equivalenced to  */ NO_EQUIVALENT,
363      /* min, max, act ct */ 0, 1, 0,
364      /* opt state flags  */ BROADCAST_FLAGS, 0,
365      /* last opt argumnt */ { NULL },
366      /* arg list/cookie  */ NULL,
367      /* must/cannot opts */ NULL, NULL,
368      /* option proc      */ NULL,
369      /* desc, NAME, name */ zBroadcastText, zBroadcast_NAME, zBroadcast_Name,
370      /* disablement strs */ NULL, NULL },
371 
372   {  /* entry idx, value */ 9, VALUE_OPT_TIMEOUT,
373      /* equiv idx, value */ 9, VALUE_OPT_TIMEOUT,
374      /* equivalenced to  */ NO_EQUIVALENT,
375      /* min, max, act ct */ 0, 1, 0,
376      /* opt state flags  */ TIMEOUT_FLAGS, 0,
377      /* last opt argumnt */ { zTimeoutDefaultArg },
378      /* arg list/cookie  */ NULL,
379      /* must/cannot opts */ NULL, NULL,
380      /* option proc      */ optionNumericVal,
381      /* desc, NAME, name */ zTimeoutText, zTimeout_NAME, zTimeout_Name,
382      /* disablement strs */ NULL, NULL },
383 
384   {  /* entry idx, value */ 10, VALUE_OPT_AUTHENTICATION,
385      /* equiv idx, value */ 10, VALUE_OPT_AUTHENTICATION,
386      /* equivalenced to  */ NO_EQUIVALENT,
387      /* min, max, act ct */ 0, 1, 0,
388      /* opt state flags  */ AUTHENTICATION_FLAGS, 0,
389      /* last opt argumnt */ { NULL },
390      /* arg list/cookie  */ NULL,
391      /* must/cannot opts */ NULL, NULL,
392      /* option proc      */ optionNumericVal,
393      /* desc, NAME, name */ zAuthenticationText, zAuthentication_NAME, zAuthentication_Name,
394      /* disablement strs */ NULL, NULL },
395 
396   {  /* entry idx, value */ 11, VALUE_OPT_KEYFILE,
397      /* equiv idx, value */ 11, VALUE_OPT_KEYFILE,
398      /* equivalenced to  */ NO_EQUIVALENT,
399      /* min, max, act ct */ 0, 1, 0,
400      /* opt state flags  */ KEYFILE_FLAGS, 0,
401      /* last opt argumnt */ { NULL },
402      /* arg list/cookie  */ NULL,
403      /* must/cannot opts */ NULL, NULL,
404      /* option proc      */ NULL,
405      /* desc, NAME, name */ zKeyfileText, zKeyfile_NAME, zKeyfile_Name,
406      /* disablement strs */ NULL, NULL },
407 
408   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
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_VERSION_FLAGS, 0,
413      /* last opt argumnt */ { NULL },
414      /* arg list/cookie  */ NULL,
415      /* must/cannot opts */ NULL, NULL,
416      /* option proc      */ DOVERPROC,
417      /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
418      /* disablement strs */ NULL, NULL },
419 
420 
421 
422   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
423      /* equiv idx value  */ NO_EQUIVALENT, 0,
424      /* equivalenced to  */ NO_EQUIVALENT,
425      /* min, max, act ct */ 0, 1, 0,
426      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
427      /* last opt argumnt */ { NULL },
428      /* arg list/cookie  */ NULL,
429      /* must/cannot opts */ NULL, NULL,
430      /* option proc      */ doUsageOpt,
431      /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
432      /* disablement strs */ NULL, NULL },
433 
434   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
435      /* equiv idx value  */ NO_EQUIVALENT, 0,
436      /* equivalenced to  */ NO_EQUIVALENT,
437      /* min, max, act ct */ 0, 1, 0,
438      /* opt state flags  */ OPTST_MORE_HELP_FLAGS, 0,
439      /* last opt argumnt */ { NULL },
440      /* arg list/cookie  */ NULL,
441      /* must/cannot opts */ NULL,  NULL,
442      /* option proc      */ optionPagedUsage,
443      /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
444      /* disablement strs */ NULL, NULL },
445 
446   {  /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS,
447      /* equiv idx value  */ NO_EQUIVALENT, 0,
448      /* equivalenced to  */ NO_EQUIVALENT,
449      /* min, max, act ct */ 0, 1, 0,
450      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
451                           | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, 0,
452      /* last opt argumnt */ { NULL },
453      /* arg list/cookie  */ NULL,
454      /* must/cannot opts */ NULL,  NULL,
455      /* option proc      */ NULL,
456      /* desc, NAME, name */ zSave_OptsText, NULL, zSave_Opts_Name,
457      /* disablement strs */ NULL, NULL },
458 
459   {  /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS,
460      /* equiv idx value  */ NO_EQUIVALENT, 0,
461      /* equivalenced to  */ NO_EQUIVALENT,
462      /* min, max, act ct */ 0, NOLIMIT, 0,
463      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
464 			  | OPTST_DISABLE_IMM, 0,
465      /* last opt argumnt */ { NULL },
466      /* arg list/cookie  */ NULL,
467      /* must/cannot opts */ NULL, NULL,
468      /* option proc      */ optionLoadOpt,
469      /* desc, NAME, name */ zLoad_OptsText, zLoad_Opts_NAME, zLoad_Opts_Name,
470      /* disablement strs */ zNotLoad_Opts_Name, zNotLoad_Opts_Pfx }
471 };
472 
473 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
474  *
475  *  Define the Sntp Option Environment
476  */
477 tSCC   zPROGNAME[]   = "SNTP";
478 tSCC   zUsageTitle[] =
479 "sntp - standard SNTP program - Ver. 4.2.6\n\
480 USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... hostname-or-IP ...\n";
481 tSCC   zRcName[]     = ".ntprc";
482 tSCC*  apzHomeList[] = {
483        "$HOME",
484        ".",
485        NULL };
486 
487 tSCC   zBugsAddr[]    = "http://bugs.ntp.org, bugs@ntp.org";
488 #define zExplain NULL
489 tSCC    zDetail[]     = "\n\
490 .I sntp\n\
491 implements the Simple Network Time Protocol, and is used\n\
492 to query an NTP or SNTP server and either\n\
493 display the time\n\
494 or\n\
495 set the local system's time (given suitable privilege).\n\n\
496 It can be\n\
497 run interactively from the command line or as a\n\
498 .I cron\n\
499 job.\n\n\
500 NTP and SNTP are defined by draft-ietf-ntp-ntpv4-proto-13, which\n\
501 obsoletes RFC 4330 and RFC 1305.\n";
502 tSCC    zFullVersion[] = SNTP_FULL_VERSION;
503 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 495 */
504 
505 #if defined(ENABLE_NLS)
506 # define OPTPROC_BASE OPTPROC_TRANSLATE
507   static tOptionXlateProc translate_option_strings;
508 #else
509 # define OPTPROC_BASE OPTPROC_NONE
510 # define translate_option_strings NULL
511 #endif /* ENABLE_NLS */
512 
513 
514 #define sntp_full_usage NULL
515 #define sntp_short_usage NULL
516 tOptions sntpOptions = {
517     OPTIONS_STRUCT_VERSION,
518     0, NULL,                    /* original argc + argv    */
519     ( OPTPROC_BASE
520     + OPTPROC_ERRSTOP
521     + OPTPROC_SHORTOPT
522     + OPTPROC_LONGOPT
523     + OPTPROC_NO_REQ_OPT
524     + OPTPROC_ENVIRON
525     + OPTPROC_ARGS_REQ ),
526     0, NULL,                    /* current option index, current option */
527     NULL,         NULL,         zPROGNAME,
528     zRcName,      zCopyright,   zCopyrightNotice,
529     zFullVersion, apzHomeList,  zUsageTitle,
530     zExplain,     zDetail,      optDesc,
531     zBugsAddr,                  /* address to send bugs to */
532     NULL, NULL,                 /* extensions/saved state  */
533     optionUsage,       /* usage procedure */
534     translate_option_strings,   /* translation procedure */
535     /*
536      *  Indexes to special options
537      */
538     { INDEX_OPT_MORE_HELP, /* more-help option index */
539       INDEX_OPT_SAVE_OPTS, /* save option index */
540       NO_EQUIVALENT, /* '-#' option index */
541       NO_EQUIVALENT /* index of default opt */
542     },
543     17 /* full option count */, 12 /* user option count */,
544     sntp_full_usage, sntp_short_usage,
545     NULL, NULL
546 };
547 
548 /*
549  *  Create the static procedure(s) declared above.
550  */
551 static void
552 doUsageOpt(
553     tOptions*   pOptions,
554     tOptDesc*   pOptDesc )
555 {
556     (void)pOptions;
557     USAGE( EXIT_SUCCESS );
558 }
559 /* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 109 */
560 
561 #if defined(TEST_SNTP_OPTS) /* TEST MAIN PROCEDURE: */
562 
563 extern void optionPutShell( tOptions* );
564 
565 int
566 main(int argc, char** argv)
567 {
568     int res = EXIT_SUCCESS;
569     (void)optionProcess( &sntpOptions, argc, argv );
570     optionPutShell( &sntpOptions );
571     return res;
572 }
573 #endif  /* defined TEST_SNTP_OPTS */
574 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 627 */
575 
576 #if ENABLE_NLS
577 #include <stdio.h>
578 #include <stdlib.h>
579 #include <string.h>
580 #include <unistd.h>
581 #include <autoopts/usage-txt.h>
582 
583 static char* AO_gettext( char const* pz );
584 static void  coerce_it(void** s);
585 
586 static char*
587 AO_gettext( char const* pz )
588 {
589     char* pzRes;
590     if (pz == NULL)
591         return NULL;
592     pzRes = _(pz);
593     if (pzRes == pz)
594         return pzRes;
595     pzRes = strdup( pzRes );
596     if (pzRes == NULL) {
597         fputs( _("No memory for duping translated strings\n"), stderr );
598         exit( EXIT_FAILURE );
599     }
600     return pzRes;
601 }
602 
603 static void coerce_it(void** s) { *s = AO_gettext(*s); }
604 #define COERSION(_f) \
605   coerce_it((void*)&(sntpOptions._f))
606 
607 /*
608  *  This invokes the translation code (e.g. gettext(3)).
609  */
610 static void
611 translate_option_strings( void )
612 {
613     /*
614      *  Guard against re-translation.  It won't work.  The strings will have
615      *  been changed by the first pass through this code.  One shot only.
616      */
617     if (option_usage_text.field_ct != 0) {
618 
619         /*
620          *  Do the translations.  The first pointer follows the field count
621          *  field.  The field count field is the size of a pointer.
622          */
623         tOptDesc* pOD = sntpOptions.pOptDesc;
624         char**    ppz = (char**)(void*)&(option_usage_text);
625         int       ix  = option_usage_text.field_ct;
626 
627         do {
628             ppz++;
629             *ppz = AO_gettext(*ppz);
630         } while (--ix > 0);
631 
632         COERSION(pzCopyright);
633         COERSION(pzCopyNotice);
634         COERSION(pzFullVersion);
635         COERSION(pzUsageTitle);
636         COERSION(pzExplain);
637         COERSION(pzDetail);
638         option_usage_text.field_ct = 0;
639 
640         for (ix = sntpOptions.optCt; ix > 0; ix--, pOD++)
641             coerce_it((void*)&(pOD->pzText));
642     }
643 
644     if ((sntpOptions.fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
645         tOptDesc* pOD = sntpOptions.pOptDesc;
646         int       ix;
647 
648         for (ix = sntpOptions.optCt; ix > 0; ix--, pOD++) {
649             coerce_it((void*)&(pOD->pz_Name));
650             coerce_it((void*)&(pOD->pz_DisableName));
651             coerce_it((void*)&(pOD->pz_DisablePfx));
652         }
653         /* prevent re-translation */
654         sntpOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
655     }
656 }
657 
658 #endif /* ENABLE_NLS */
659 
660 #ifdef  __cplusplus
661 }
662 #endif
663 /* sntp-opts.c ends here */
664