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