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