Annotation of embedaddon/ntp/ntpq/ntpq-opts.c, revision 1.1.1.1
1.1 misho 1: /*
2: * EDIT THIS FILE WITH CAUTION (ntpq-opts.c)
3: *
4: * It has been AutoGen-ed December 24, 2011 at 06:34:27 PM by AutoGen 5.12
5: * From the definitions ntpq-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 ntpq 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 "ntpq-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: "ntpq 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: /*
49: * global included definitions
50: */
51: #ifdef __windows
52: extern int atoi(const char*);
53: #else
54: # include <stdlib.h>
55: #endif
56:
57: #ifndef NULL
58: # define NULL 0
59: #endif
60:
61: /*
62: * Ipv4 option description with
63: * "Must also have options" and "Incompatible options":
64: */
65: static char const zIpv4Text[] =
66: "Force IPv4 DNS name resolution";
67: static char const zIpv4_NAME[] = "IPV4";
68: static char const zIpv4_Name[] = "ipv4";
69: static const int
70: aIpv4CantList[] = {
71: INDEX_OPT_IPV6, NO_EQUIVALENT };
72: #define IPV4_FLAGS (OPTST_DISABLED)
73:
74: /*
75: * Ipv6 option description with
76: * "Must also have options" and "Incompatible options":
77: */
78: static char const zIpv6Text[] =
79: "Force IPv6 DNS name resolution";
80: static char const zIpv6_NAME[] = "IPV6";
81: static char const zIpv6_Name[] = "ipv6";
82: static const int
83: aIpv6CantList[] = {
84: INDEX_OPT_IPV4, NO_EQUIVALENT };
85: #define IPV6_FLAGS (OPTST_DISABLED)
86:
87: /*
88: * Command option description:
89: */
90: static char const zCommandText[] =
91: "run a command and exit";
92: static char const zCommand_NAME[] = "COMMAND";
93: static char const zCommand_Name[] = "command";
94: #define COMMAND_FLAGS (OPTST_DISABLED \
95: | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
96:
97: /*
98: * Debug_Level option description:
99: */
100: static char const zDebug_LevelText[] =
101: "Increase output debug message level";
102: static char const zDebug_Level_NAME[] = "DEBUG_LEVEL";
103: static char const zDebug_Level_Name[] = "debug-level";
104: #define DEBUG_LEVEL_FLAGS (OPTST_DISABLED)
105:
106: /*
107: * Set_Debug_Level option description:
108: */
109: static char const zSet_Debug_LevelText[] =
110: "Set the output debug message level";
111: static char const zSet_Debug_Level_NAME[] = "SET_DEBUG_LEVEL";
112: static char const zSet_Debug_Level_Name[] = "set-debug-level";
113: #define SET_DEBUG_LEVEL_FLAGS (OPTST_DISABLED \
114: | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
115:
116: /*
117: * Peers option description with
118: * "Must also have options" and "Incompatible options":
119: */
120: static char const zPeersText[] =
121: "Print a list of the peers";
122: static char const zPeers_NAME[] = "PEERS";
123: static char const zPeers_Name[] = "peers";
124: static const int
125: aPeersCantList[] = {
126: INDEX_OPT_INTERACTIVE, NO_EQUIVALENT };
127: #define PEERS_FLAGS (OPTST_DISABLED)
128:
129: /*
130: * Interactive option description with
131: * "Must also have options" and "Incompatible options":
132: */
133: static char const zInteractiveText[] =
134: "Force ntpq to operate in interactive mode";
135: static char const zInteractive_NAME[] = "INTERACTIVE";
136: static char const zInteractive_Name[] = "interactive";
137: static const int
138: aInteractiveCantList[] = {
139: INDEX_OPT_COMMAND,
140: INDEX_OPT_PEERS, NO_EQUIVALENT };
141: #define INTERACTIVE_FLAGS (OPTST_DISABLED)
142:
143: /*
144: * Numeric option description:
145: */
146: static char const zNumericText[] =
147: "numeric host addresses";
148: static char const zNumeric_NAME[] = "NUMERIC";
149: static char const zNumeric_Name[] = "numeric";
150: #define NUMERIC_FLAGS (OPTST_DISABLED)
151:
152: /*
153: * Old_Rv option description:
154: */
155: static char const zOld_RvText[] =
156: "Always output status line with readvar";
157: static char const zOld_Rv_NAME[] = "OLD_RV";
158: static char const zOld_Rv_Name[] = "old-rv";
159: #define OLD_RV_FLAGS (OPTST_DISABLED)
160:
161: /*
162: * Help/More_Help/Version option descriptions:
163: */
164: static char const zHelpText[] = "Display extended usage information and exit";
165: static char const zHelp_Name[] = "help";
166: #ifdef HAVE_WORKING_FORK
167: #define OPTST_MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
168: static char const zMore_Help_Name[] = "more-help";
169: static char const zMore_HelpText[] = "Extended usage information passed thru pager";
170: #else
171: #define OPTST_MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
172: #define zMore_Help_Name NULL
173: #define zMore_HelpText NULL
174: #endif
175: #ifdef NO_OPTIONAL_OPT_ARGS
176: # define OPTST_VERSION_FLAGS OPTST_IMM | OPTST_NO_INIT
177: #else
178: # define OPTST_VERSION_FLAGS OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
179: OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
180: #endif
181:
182: static char const zVersionText[] = "Output version information and exit";
183: static char const zVersion_Name[] = "version";
184: static char const zSave_OptsText[] = "Save the option state to a config file";
185: static char const zSave_Opts_Name[] = "save-opts";
186: static char const zLoad_OptsText[] = "Load options from a config file";
187: static char const zLoad_Opts_NAME[] = "LOAD_OPTS";
188: static char const zNotLoad_Opts_Name[] = "no-load-opts";
189: static char const zNotLoad_Opts_Pfx[] = "no";
190: #define zLoad_Opts_Name (zNotLoad_Opts_Name + 3)
191: /*
192: * Declare option callback procedures
193: */
194: #if defined(TEST_NTPQ_OPTS)
195: /*
196: * Under test, omit argument processing, or call optionStackArg,
197: * if multiple copies are allowed.
198: */
199: extern tOptProc
200: optionStackArg;
201: static tOptProc
202: doUsageOpt;
203:
204: /*
205: * #define map the "normal" callout procs to the test ones...
206: */
207: #define COMMAND_OPT_PROC optionStackArg
208: #define SET_DEBUG_LEVEL_OPT_PROC optionStackArg
209: #define PEERS_OPT_PROC optionStackArg
210:
211:
212: #else /* NOT defined TEST_NTPQ_OPTS */
213: /*
214: * When not under test, there are different procs to use
215: */
216: extern tOptProc
217: ntpq_custom_opt_handler, optionBooleanVal, optionNestedVal,
218: optionNumericVal, optionPagedUsage, optionPrintVersion,
219: optionResetOpt, optionStackArg, optionTimeDate,
220: optionTimeVal, optionUnstackArg, optionVersionStderr;
221: static tOptProc
222: doOptSet_Debug_Level, doUsageOpt;
223:
224: /*
225: * #define map the "normal" callout procs
226: */
227: #define COMMAND_OPT_PROC ntpq_custom_opt_handler
228: #define SET_DEBUG_LEVEL_OPT_PROC doOptSet_Debug_Level
229: #define PEERS_OPT_PROC ntpq_custom_opt_handler
230:
231: #define COMMAND_OPT_PROC ntpq_custom_opt_handler
232: #define SET_DEBUG_LEVEL_OPT_PROC doOptSet_Debug_Level
233: #define PEERS_OPT_PROC ntpq_custom_opt_handler
234: #endif /* defined(TEST_NTPQ_OPTS) */
235: #ifdef TEST_NTPQ_OPTS
236: # define DOVERPROC optionVersionStderr
237: #else
238: # define DOVERPROC optionPrintVersion
239: #endif /* TEST_NTPQ_OPTS */
240:
241: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
242: *
243: * Define the Ntpq Option Descriptions.
244: */
245: static tOptDesc optDesc[OPTION_CT] = {
246: { /* entry idx, value */ 0, VALUE_OPT_IPV4,
247: /* equiv idx, value */ 0, VALUE_OPT_IPV4,
248: /* equivalenced to */ NO_EQUIVALENT,
249: /* min, max, act ct */ 0, 1, 0,
250: /* opt state flags */ IPV4_FLAGS, 0,
251: /* last opt argumnt */ { NULL },
252: /* arg list/cookie */ NULL,
253: /* must/cannot opts */ NULL, aIpv4CantList,
254: /* option proc */ NULL,
255: /* desc, NAME, name */ zIpv4Text, zIpv4_NAME, zIpv4_Name,
256: /* disablement strs */ NULL, NULL },
257:
258: { /* entry idx, value */ 1, VALUE_OPT_IPV6,
259: /* equiv idx, value */ 1, VALUE_OPT_IPV6,
260: /* equivalenced to */ NO_EQUIVALENT,
261: /* min, max, act ct */ 0, 1, 0,
262: /* opt state flags */ IPV6_FLAGS, 0,
263: /* last opt argumnt */ { NULL },
264: /* arg list/cookie */ NULL,
265: /* must/cannot opts */ NULL, aIpv6CantList,
266: /* option proc */ NULL,
267: /* desc, NAME, name */ zIpv6Text, zIpv6_NAME, zIpv6_Name,
268: /* disablement strs */ NULL, NULL },
269:
270: { /* entry idx, value */ 2, VALUE_OPT_COMMAND,
271: /* equiv idx, value */ 2, VALUE_OPT_COMMAND,
272: /* equivalenced to */ NO_EQUIVALENT,
273: /* min, max, act ct */ 0, NOLIMIT, 0,
274: /* opt state flags */ COMMAND_FLAGS, 0,
275: /* last opt argumnt */ { NULL },
276: /* arg list/cookie */ NULL,
277: /* must/cannot opts */ NULL, NULL,
278: /* option proc */ COMMAND_OPT_PROC,
279: /* desc, NAME, name */ zCommandText, zCommand_NAME, zCommand_Name,
280: /* disablement strs */ NULL, NULL },
281:
282: { /* entry idx, value */ 3, VALUE_OPT_DEBUG_LEVEL,
283: /* equiv idx, value */ 3, VALUE_OPT_DEBUG_LEVEL,
284: /* equivalenced to */ NO_EQUIVALENT,
285: /* min, max, act ct */ 0, NOLIMIT, 0,
286: /* opt state flags */ DEBUG_LEVEL_FLAGS, 0,
287: /* last opt argumnt */ { NULL },
288: /* arg list/cookie */ NULL,
289: /* must/cannot opts */ NULL, NULL,
290: /* option proc */ NULL,
291: /* desc, NAME, name */ zDebug_LevelText, zDebug_Level_NAME, zDebug_Level_Name,
292: /* disablement strs */ NULL, NULL },
293:
294: { /* entry idx, value */ 4, VALUE_OPT_SET_DEBUG_LEVEL,
295: /* equiv idx, value */ 4, VALUE_OPT_SET_DEBUG_LEVEL,
296: /* equivalenced to */ NO_EQUIVALENT,
297: /* min, max, act ct */ 0, NOLIMIT, 0,
298: /* opt state flags */ SET_DEBUG_LEVEL_FLAGS, 0,
299: /* last opt argumnt */ { NULL },
300: /* arg list/cookie */ NULL,
301: /* must/cannot opts */ NULL, NULL,
302: /* option proc */ SET_DEBUG_LEVEL_OPT_PROC,
303: /* desc, NAME, name */ zSet_Debug_LevelText, zSet_Debug_Level_NAME, zSet_Debug_Level_Name,
304: /* disablement strs */ NULL, NULL },
305:
306: { /* entry idx, value */ 5, VALUE_OPT_PEERS,
307: /* equiv idx, value */ 5, VALUE_OPT_PEERS,
308: /* equivalenced to */ NO_EQUIVALENT,
309: /* min, max, act ct */ 0, 1, 0,
310: /* opt state flags */ PEERS_FLAGS, 0,
311: /* last opt argumnt */ { NULL },
312: /* arg list/cookie */ NULL,
313: /* must/cannot opts */ NULL, aPeersCantList,
314: /* option proc */ PEERS_OPT_PROC,
315: /* desc, NAME, name */ zPeersText, zPeers_NAME, zPeers_Name,
316: /* disablement strs */ NULL, NULL },
317:
318: { /* entry idx, value */ 6, VALUE_OPT_INTERACTIVE,
319: /* equiv idx, value */ 6, VALUE_OPT_INTERACTIVE,
320: /* equivalenced to */ NO_EQUIVALENT,
321: /* min, max, act ct */ 0, 1, 0,
322: /* opt state flags */ INTERACTIVE_FLAGS, 0,
323: /* last opt argumnt */ { NULL },
324: /* arg list/cookie */ NULL,
325: /* must/cannot opts */ NULL, aInteractiveCantList,
326: /* option proc */ NULL,
327: /* desc, NAME, name */ zInteractiveText, zInteractive_NAME, zInteractive_Name,
328: /* disablement strs */ NULL, NULL },
329:
330: { /* entry idx, value */ 7, VALUE_OPT_NUMERIC,
331: /* equiv idx, value */ 7, VALUE_OPT_NUMERIC,
332: /* equivalenced to */ NO_EQUIVALENT,
333: /* min, max, act ct */ 0, 1, 0,
334: /* opt state flags */ NUMERIC_FLAGS, 0,
335: /* last opt argumnt */ { NULL },
336: /* arg list/cookie */ NULL,
337: /* must/cannot opts */ NULL, NULL,
338: /* option proc */ NULL,
339: /* desc, NAME, name */ zNumericText, zNumeric_NAME, zNumeric_Name,
340: /* disablement strs */ NULL, NULL },
341:
342: { /* entry idx, value */ 8, VALUE_OPT_OLD_RV,
343: /* equiv idx, value */ 8, VALUE_OPT_OLD_RV,
344: /* equivalenced to */ NO_EQUIVALENT,
345: /* min, max, act ct */ 0, 1, 0,
346: /* opt state flags */ OLD_RV_FLAGS, 0,
347: /* last opt argumnt */ { NULL },
348: /* arg list/cookie */ NULL,
349: /* must/cannot opts */ NULL, NULL,
350: /* option proc */ NULL,
351: /* desc, NAME, name */ zOld_RvText, zOld_Rv_NAME, zOld_Rv_Name,
352: /* disablement strs */ NULL, NULL },
353:
354: { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
355: /* equiv idx value */ NO_EQUIVALENT, 0,
356: /* equivalenced to */ NO_EQUIVALENT,
357: /* min, max, act ct */ 0, 1, 0,
358: /* opt state flags */ OPTST_VERSION_FLAGS, 0,
359: /* last opt argumnt */ { NULL },
360: /* arg list/cookie */ NULL,
361: /* must/cannot opts */ NULL, NULL,
362: /* option proc */ DOVERPROC,
363: /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
364: /* disablement strs */ NULL, NULL },
365:
366:
367:
368: { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
369: /* equiv idx value */ NO_EQUIVALENT, 0,
370: /* equivalenced to */ NO_EQUIVALENT,
371: /* min, max, act ct */ 0, 1, 0,
372: /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0,
373: /* last opt argumnt */ { NULL },
374: /* arg list/cookie */ NULL,
375: /* must/cannot opts */ NULL, NULL,
376: /* option proc */ doUsageOpt,
377: /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
378: /* disablement strs */ NULL, NULL },
379:
380: { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
381: /* equiv idx value */ NO_EQUIVALENT, 0,
382: /* equivalenced to */ NO_EQUIVALENT,
383: /* min, max, act ct */ 0, 1, 0,
384: /* opt state flags */ OPTST_MORE_HELP_FLAGS, 0,
385: /* last opt argumnt */ { NULL },
386: /* arg list/cookie */ NULL,
387: /* must/cannot opts */ NULL, NULL,
388: /* option proc */ optionPagedUsage,
389: /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
390: /* disablement strs */ NULL, NULL },
391:
392: { /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS,
393: /* equiv idx value */ NO_EQUIVALENT, 0,
394: /* equivalenced to */ NO_EQUIVALENT,
395: /* min, max, act ct */ 0, 1, 0,
396: /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
397: | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, 0,
398: /* last opt argumnt */ { NULL },
399: /* arg list/cookie */ NULL,
400: /* must/cannot opts */ NULL, NULL,
401: /* option proc */ NULL,
402: /* desc, NAME, name */ zSave_OptsText, NULL, zSave_Opts_Name,
403: /* disablement strs */ NULL, NULL },
404:
405: { /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS,
406: /* equiv idx value */ NO_EQUIVALENT, 0,
407: /* equivalenced to */ NO_EQUIVALENT,
408: /* min, max, act ct */ 0, NOLIMIT, 0,
409: /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
410: | OPTST_DISABLE_IMM, 0,
411: /* last opt argumnt */ { NULL },
412: /* arg list/cookie */ NULL,
413: /* must/cannot opts */ NULL, NULL,
414: /* option proc */ optionLoadOpt,
415: /* desc, NAME, name */ zLoad_OptsText, zLoad_Opts_NAME, zLoad_Opts_Name,
416: /* disablement strs */ zNotLoad_Opts_Name, zNotLoad_Opts_Pfx }
417: };
418:
419: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
420: *
421: * Define the Ntpq Option Environment
422: */
423: static char const zPROGNAME[5] = "NTPQ";
424: static char const zUsageTitle[119] =
425: "ntpq - standard NTP query program - Ver. 4.2.6p5\n\
426: USAGE: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n";
427: static char const zRcName[7] = ".ntprc";
428: static char const * const apzHomeList[3] = {
429: "$HOME",
430: ".",
431: NULL };
432:
433: static char const zBugsAddr[34] = "http://bugs.ntp.org, bugs@ntp.org";
434: #define zExplain NULL
435: static char const zDetail[384] = "\n\
436: The [= prog-name =] utility program is used to query NTP servers which\n\
437: implement the standard NTP mode 6 control message formats defined in\n\
438: Appendix B of the NTPv3 specification RFC1305, requesting information\n\
439: about current state and/or changes in that state. The same formats are\n\
440: used in NTPv4, although some of the variables have changed and new ones\n\
441: added.\n";
442: static char const zFullVersion[] = NTPQ_FULL_VERSION;
443: /* extracted from optcode.tlib near line 515 */
444:
445: #if defined(ENABLE_NLS)
446: # define OPTPROC_BASE OPTPROC_TRANSLATE
447: static tOptionXlateProc translate_option_strings;
448: #else
449: # define OPTPROC_BASE OPTPROC_NONE
450: # define translate_option_strings NULL
451: #endif /* ENABLE_NLS */
452:
453:
454: #define ntpq_full_usage NULL
455: #define ntpq_short_usage NULL
456: #ifndef PKGDATADIR
457: # define PKGDATADIR ""
458: #endif
459:
460: #ifndef WITH_PACKAGER
461: # define ntpq_packager_info NULL
462: #else
463: static char const ntpq_packager_info[] =
464: "Packaged by " WITH_PACKAGER
465:
466: # ifdef WITH_PACKAGER_VERSION
467: " ("WITH_PACKAGER_VERSION")"
468: # endif
469:
470: # ifdef WITH_PACKAGER_BUG_REPORTS
471: "\nReport ntpq bugs to " WITH_PACKAGER_BUG_REPORTS
472: # endif
473: "\n";
474: #endif
475:
476: tOptions ntpqOptions = {
477: OPTIONS_STRUCT_VERSION,
478: 0, NULL, /* original argc + argv */
479: ( OPTPROC_BASE
480: + OPTPROC_ERRSTOP
481: + OPTPROC_SHORTOPT
482: + OPTPROC_LONGOPT
483: + OPTPROC_NO_REQ_OPT
484: + OPTPROC_ENVIRON
485: + OPTPROC_MISUSE ),
486: 0, NULL, /* current option index, current option */
487: NULL, NULL, zPROGNAME,
488: zRcName, zCopyright, zLicenseDescrip,
489: zFullVersion, apzHomeList, zUsageTitle,
490: zExplain, zDetail, optDesc,
491: zBugsAddr, /* address to send bugs to */
492: NULL, NULL, /* extensions/saved state */
493: optionUsage, /* usage procedure */
494: translate_option_strings, /* translation procedure */
495: /*
496: * Indexes to special options
497: */
498: { INDEX_OPT_MORE_HELP, /* more-help option index */
499: INDEX_OPT_SAVE_OPTS, /* save option index */
500: NO_EQUIVALENT, /* '-#' option index */
501: NO_EQUIVALENT /* index of default opt */
502: },
503: 14 /* full option count */, 9 /* user option count */,
504: ntpq_full_usage, ntpq_short_usage,
505: NULL, NULL,
506: PKGDATADIR, ntpq_packager_info
507: };
508:
509: /*
510: * Create the static procedure(s) declared above.
511: */
512: static void
513: doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
514: {
515: (void)pOptions;
516: USAGE(NTPQ_EXIT_SUCCESS);
517: }
518:
519: #if ! defined(TEST_NTPQ_OPTS)
520:
521: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
522: *
523: * For the set-debug-level option.
524: */
525: static void
526: doOptSet_Debug_Level(tOptions* pOptions, tOptDesc* pOptDesc)
527: {
528: /* extracted from debug-opt.def, line 27 */
529: DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg );
530: }
531: #endif /* defined(TEST_NTPQ_OPTS) */
532: /* extracted from optmain.tlib near line 128 */
533:
534: #if defined(TEST_NTPQ_OPTS) /* TEST MAIN PROCEDURE: */
535:
536: extern void optionPutShell(tOptions*);
537:
538: int
539: main(int argc, char ** argv)
540: {
541: int res = NTPQ_EXIT_SUCCESS;
542: (void)optionProcess(&ntpqOptions, argc, argv);
543: optionPutShell(&ntpqOptions);
544: res = ferror(stdout);
545: if (res != 0)
546: fputs("output error writing to stdout\n", stderr);
547: return res;
548: }
549: #endif /* defined TEST_NTPQ_OPTS */
550: /* extracted from optcode.tlib near line 666 */
551:
552: #if ENABLE_NLS
553: #include <stdio.h>
554: #include <stdlib.h>
555: #include <string.h>
556: #include <unistd.h>
557: #include <autoopts/usage-txt.h>
558:
559: static char* AO_gettext(char const* pz);
560: static void coerce_it(void** s);
561:
562: static char*
563: AO_gettext(char const* pz)
564: {
565: char* pzRes;
566: if (pz == NULL)
567: return NULL;
568: pzRes = _(pz);
569: if (pzRes == pz)
570: return pzRes;
571: pzRes = strdup(pzRes);
572: if (pzRes == NULL) {
573: fputs(_("No memory for duping translated strings\n"), stderr);
574: exit(NTPQ_EXIT_FAILURE);
575: }
576: return pzRes;
577: }
578:
579: static void coerce_it(void** s) { *s = AO_gettext(*s);
580: }
581:
582: /*
583: * This invokes the translation code (e.g. gettext(3)).
584: */
585: static void
586: translate_option_strings(void)
587: {
588: tOptions * const pOpt = &ntpqOptions;
589:
590: /*
591: * Guard against re-translation. It won't work. The strings will have
592: * been changed by the first pass through this code. One shot only.
593: */
594: if (option_usage_text.field_ct != 0) {
595: /*
596: * Do the translations. The first pointer follows the field count
597: * field. The field count field is the size of a pointer.
598: */
599: tOptDesc * pOD = pOpt->pOptDesc;
600: char ** ppz = (char**)(void*)&(option_usage_text);
601: int ix = option_usage_text.field_ct;
602:
603: do {
604: ppz++;
605: *ppz = AO_gettext(*ppz);
606: } while (--ix > 0);
607:
608: coerce_it((void*)&(pOpt->pzCopyright));
609: coerce_it((void*)&(pOpt->pzCopyNotice));
610: coerce_it((void*)&(pOpt->pzFullVersion));
611: coerce_it((void*)&(pOpt->pzUsageTitle));
612: coerce_it((void*)&(pOpt->pzExplain));
613: coerce_it((void*)&(pOpt->pzDetail));
614: coerce_it((void*)&(pOpt->pzPackager));
615: option_usage_text.field_ct = 0;
616:
617: for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
618: coerce_it((void*)&(pOD->pzText));
619: }
620:
621: if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
622: tOptDesc * pOD = pOpt->pOptDesc;
623: int ix;
624:
625: for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
626: coerce_it((void*)&(pOD->pz_Name));
627: coerce_it((void*)&(pOD->pz_DisableName));
628: coerce_it((void*)&(pOD->pz_DisablePfx));
629: }
630: /* prevent re-translation */
631: ntpqOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
632: }
633: }
634:
635: #endif /* ENABLE_NLS */
636:
637: #ifdef __cplusplus
638: }
639: #endif
640: /* ntpq-opts.c ends here */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>