1 /* 2 * EDIT THIS FILE WITH CAUTION (sntp-opts.c) 3 * 4 * It has been AutoGen-ed Sunday August 17, 2008 at 05:27:24 AM EDT 5 * From the definitions sntp-opts.def 6 * and the template file options 7 * 8 * Generated from AutoOpts 29:0:4 templates. 9 */ 10 11 /* 12 * This file was produced by an AutoOpts template. AutoOpts is a 13 * copyrighted work. This source file is not encumbered by AutoOpts 14 * licensing, but is provided under the licensing terms chosen by the 15 * sntp author or copyright holder. AutoOpts is licensed under 16 * the terms of the LGPL. The redistributable library (``libopts'') is 17 * licensed under the terms of either the LGPL or, at the users discretion, 18 * the BSD license. See the AutoOpts and/or libopts sources for details. 19 * 20 * This source file is copyrighted and licensed under the following terms: 21 * 22 * sntp copyright 1970-2006 ntp.org - all rights reserved 23 * 24 * General Public Licence for the software known as MSNTP 25 * ------------------------------------------------------ 26 * 27 * (c) Copyright, N.M. Maclaren, 1996, 1997, 2000 28 * (c) Copyright, University of Cambridge, 1996, 1997, 2000 29 * 30 * 31 * 32 * Free use of MSNTP in source and binary forms is permitted, provided that this 33 * entire licence is duplicated in all copies, and that any documentation, 34 * announcements, and other materials related to use acknowledge that the software 35 * was developed by N.M. Maclaren (hereafter refered to as the Author) at the 36 * University of Cambridge. Neither the name of the Author nor the University of 37 * Cambridge may be used to endorse or promote products derived from this material 38 * without specific prior written permission. 39 * 40 * The Author and the University of Cambridge retain the copyright and all other 41 * legal rights to the software and make it available non-exclusively. All users 42 * must ensure that the software in all its derivations carries a copyright notice 43 * in the form: 44 * (c) Copyright N.M. Maclaren, 45 * (c) Copyright University of Cambridge. 46 * 47 * 48 * 49 * NO WARRANTY 50 * 51 * Because the MSNTP software is licensed free of charge, the Author and the 52 * University of Cambridge provide absolutely no warranty, either expressed or 53 * implied, including, but not limited to, the implied warranties of 54 * merchantability and fitness for a particular purpose. The entire risk as to 55 * the quality and performance of the MSNTP software is with you. Should MSNTP 56 * prove defective, you assume the cost of all necessary servicing or repair. 57 * 58 * In no event, unless required by law, will the Author or the University of 59 * Cambridge, or any other party who may modify and redistribute this software as 60 * permitted in accordance with the provisions below, be liable for damages for 61 * any losses whatsoever, including but not limited to lost profits, lost monies, 62 * lost or corrupted data, or other special, incidental or consequential losses 63 * that may arise out of the use or inability to use the MSNTP software. 64 * 65 * 66 * 67 * COPYING POLICY 68 * 69 * Permission is hereby granted for copying and distribution of copies of the 70 * MSNTP source and binary files, and of any part thereof, subject to the 71 * following licence conditions: 72 * 73 * 1. You may distribute MSNTP or components of MSNTP, with or without additions 74 * developed by you or by others. No charge, other than an "at-cost" distribution 75 * fee, may be charged for copies, derivations, or distributions of this material 76 * without the express written consent of the copyright holders. 77 * 78 * 2. You may also distribute MSNTP along with any other product for sale, 79 * provided that the cost of the bundled package is the same regardless of whether 80 * MSNTP is included or not, and provided that those interested only in MSNTP must 81 * be notified that it is a product freely available from the University of 82 * Cambridge. 83 * 84 * 3. If you distribute MSNTP software or parts of MSNTP, with or without 85 * additions developed by you or others, then you must either make available the 86 * source to all portions of the MSNTP system (exclusive of any additions made by 87 * you or by others) upon request, or instead you may notify anyone requesting 88 * source that it is freely available from the University of Cambridge. 89 * 90 * 4. You may not omit any of the copyright notices on either the source files, 91 * the executable files, or the documentation. 92 * 93 * 5. You may not omit transmission of this License agreement with whatever 94 * portions of MSNTP that are distributed. 95 * 96 * 6. Any users of this software must be notified that it is without warranty or 97 * guarantee of any nature, express or implied, nor is there any fitness for use 98 * represented. 99 * 100 * 101 * October 1996 102 * April 1997 103 * October 2000 104 */ 105 106 107 #include <limits.h> 108 109 #define OPTION_CODE_COMPILE 1 110 #include "sntp-opts.h" 111 112 #ifdef __cplusplus 113 extern "C" { 114 #endif 115 tSCC zCopyright[] = 116 "sntp copyright (c) 1970-2006 ntp.org, all rights reserved"; 117 tSCC zCopyrightNotice[] = 118 119 /* extracted from sntp-opts.def near line 12 */ 120 " General Public Licence for the software known as MSNTP\n\ 121 ------------------------------------------------------\n\n\ 122 \t (c) Copyright, N.M. Maclaren, 1996, 1997, 2000\n\ 123 \t (c) Copyright, University of Cambridge, 1996, 1997, 2000\n\n\n\n\ 124 Free use of MSNTP in source and binary forms is permitted, provided that this\n\ 125 entire licence is duplicated in all copies, and that any documentation,\n\ 126 announcements, and other materials related to use acknowledge that the software\n\ 127 was developed by N.M. Maclaren (hereafter refered to as the Author) at the\n\ 128 University of Cambridge. Neither the name of the Author nor the University of\n\ 129 Cambridge may be used to endorse or promote products derived from this material\n\ 130 without specific prior written permission.\n\n\ 131 The Author and the University of Cambridge retain the copyright and all other\n\ 132 legal rights to the software and make it available non-exclusively. All users\n\ 133 must ensure that the software in all its derivations carries a copyright notice\n\ 134 in the form:\n\ 135 \t (c) Copyright N.M. Maclaren,\n\ 136 \t (c) Copyright University of Cambridge.\n\n\n\n\ 137 NO WARRANTY\n\n\ 138 Because the MSNTP software is licensed free of charge, the Author and the\n\ 139 University of Cambridge provide absolutely no warranty, either expressed or\n\ 140 implied, including, but not limited to, the implied warranties of\n\ 141 merchantability and fitness for a particular purpose. The entire risk as to\n\ 142 the quality and performance of the MSNTP software is with you. Should MSNTP\n\ 143 prove defective, you assume the cost of all necessary servicing or repair.\n\n\ 144 In no event, unless required by law, will the Author or the University of\n\ 145 Cambridge, or any other party who may modify and redistribute this software as\n\ 146 permitted in accordance with the provisions below, be liable for damages for\n\ 147 any losses whatsoever, including but not limited to lost profits, lost monies,\n\ 148 lost or corrupted data, or other special, incidental or consequential losses\n\ 149 that may arise out of the use or inability to use the MSNTP software.\n\n\n\n\ 150 COPYING POLICY\n\n\ 151 Permission is hereby granted for copying and distribution of copies of the\n\ 152 MSNTP source and binary files, and of any part thereof, subject to the\n\ 153 following licence conditions:\n\n\ 154 1. You may distribute MSNTP or components of MSNTP, with or without additions\n\ 155 developed by you or by others. No charge, other than an \"at-cost\" distribution\n\ 156 fee, may be charged for copies, derivations, or distributions of this material\n\ 157 without the express written consent of the copyright holders.\n\n\ 158 2. You may also distribute MSNTP along with any other product for sale,\n\ 159 provided that the cost of the bundled package is the same regardless of whether\n\ 160 MSNTP is included or not, and provided that those interested only in MSNTP must\n\ 161 be notified that it is a product freely available from the University of\n\ 162 Cambridge.\n\n\ 163 3. If you distribute MSNTP software or parts of MSNTP, with or without\n\ 164 additions developed by you or others, then you must either make available the\n\ 165 source to all portions of the MSNTP system (exclusive of any additions made by\n\ 166 you or by others) upon request, or instead you may notify anyone requesting\n\ 167 source that it is freely available from the University of Cambridge.\n\n\ 168 4. You may not omit any of the copyright notices on either the source files,\n\ 169 the executable files, or the documentation.\n\n\ 170 5. You may not omit transmission of this License agreement with whatever\n\ 171 portions of MSNTP that are distributed.\n\n\ 172 6. Any users of this software must be notified that it is without warranty or\n\ 173 guarantee of any nature, express or implied, nor is there any fitness for use\n\ 174 represented.\n\n\n\ 175 October 1996\n\ 176 April 1997\n\ 177 October 2000"; 178 extern tUsageProc optionUsage; 179 180 #ifndef NULL 181 # define NULL 0 182 #endif 183 #ifndef EXIT_SUCCESS 184 # define EXIT_SUCCESS 0 185 #endif 186 #ifndef EXIT_FAILURE 187 # define EXIT_FAILURE 1 188 #endif 189 /* 190 * Ipv4 option description: 191 */ 192 tSCC zIpv4Text[] = 193 "Force IPv4 DNS name resolution"; 194 tSCC zIpv4_NAME[] = "IPV4"; 195 tSCC zIpv4_Name[] = "ipv4"; 196 #define IPV4_FLAGS (OPTST_DISABLED) 197 198 /* 199 * Ipv6 option description: 200 */ 201 tSCC zIpv6Text[] = 202 "Force IPv6 DNS name resolution"; 203 tSCC zIpv6_NAME[] = "IPV6"; 204 tSCC zIpv6_Name[] = "ipv6"; 205 #define IPV6_FLAGS (OPTST_DISABLED) 206 207 /* 208 * Unprivport option description: 209 */ 210 tSCC zUnprivportText[] = 211 "Use an unprivileged port"; 212 tSCC zUnprivport_NAME[] = "UNPRIVPORT"; 213 tSCC zUnprivport_Name[] = "unprivport"; 214 #define UNPRIVPORT_FLAGS (OPTST_DISABLED) 215 216 /* 217 * Normalverbose option description with 218 * "Must also have options" and "Incompatible options": 219 */ 220 tSCC zNormalverboseText[] = 221 "Slightly verbose"; 222 tSCC zNormalverbose_NAME[] = "NORMALVERBOSE"; 223 tSCC zNormalverbose_Name[] = "normalverbose"; 224 static const int 225 aNormalverboseCantList[] = { 226 INDEX_OPT_EXTRAVERBOSE, 227 INDEX_OPT_MEGAVERBOSE, NO_EQUIVALENT }; 228 #define NORMALVERBOSE_FLAGS (OPTST_DISABLED) 229 230 /* 231 * Extraverbose option description with 232 * "Must also have options" and "Incompatible options": 233 */ 234 tSCC zExtraverboseText[] = 235 "Extra verbose"; 236 tSCC zExtraverbose_NAME[] = "EXTRAVERBOSE"; 237 tSCC zExtraverbose_Name[] = "extraverbose"; 238 static const int 239 aExtraverboseCantList[] = { 240 INDEX_OPT_NORMALVERBOSE, 241 INDEX_OPT_MEGAVERBOSE, NO_EQUIVALENT }; 242 #define EXTRAVERBOSE_FLAGS (OPTST_DISABLED) 243 244 /* 245 * Megaverbose option description with 246 * "Must also have options" and "Incompatible options": 247 */ 248 tSCC zMegaverboseText[] = 249 "Mega verbose"; 250 tSCC zMegaverbose_NAME[] = "MEGAVERBOSE"; 251 tSCC zMegaverbose_Name[] = "megaverbose"; 252 static const int 253 aMegaverboseCantList[] = { 254 INDEX_OPT_NORMALVERBOSE, 255 INDEX_OPT_EXTRAVERBOSE, NO_EQUIVALENT }; 256 #define MEGAVERBOSE_FLAGS (OPTST_DISABLED) 257 258 /* 259 * Settimeofday option description with 260 * "Must also have options" and "Incompatible options": 261 */ 262 tSCC zSettimeofdayText[] = 263 "Set (step) the time with settimeofday()"; 264 tSCC zSettimeofday_NAME[] = "SETTIMEOFDAY"; 265 tSCC zSettimeofday_Name[] = "settimeofday"; 266 static const int 267 aSettimeofdayCantList[] = { 268 INDEX_OPT_ADJTIME, NO_EQUIVALENT }; 269 #define SETTIMEOFDAY_FLAGS (OPTST_DISABLED) 270 271 /* 272 * Adjtime option description with 273 * "Must also have options" and "Incompatible options": 274 */ 275 tSCC zAdjtimeText[] = 276 "Set (slew) the time with adjtime()"; 277 tSCC zAdjtime_NAME[] = "ADJTIME"; 278 tSCC zAdjtime_Name[] = "adjtime"; 279 static const int 280 aAdjtimeCantList[] = { 281 INDEX_OPT_SETTIMEOFDAY, NO_EQUIVALENT }; 282 #define ADJTIME_FLAGS (OPTST_DISABLED) 283 284 /* 285 * Help/More_Help/Version option descriptions: 286 */ 287 tSCC zHelpText[] = "Display usage information and exit"; 288 tSCC zHelp_Name[] = "help"; 289 290 tSCC zMore_HelpText[] = "Extended usage information passed thru pager"; 291 tSCC zMore_Help_Name[] = "more-help"; 292 293 tSCC zVersionText[] = "Output version information and exit"; 294 tSCC zVersion_Name[] = "version"; 295 296 /* 297 * Save/Load_Opts option description: 298 */ 299 tSCC zSave_OptsText[] = "Save the option state to a config file"; 300 tSCC zSave_Opts_Name[] = "save-opts"; 301 302 tSCC zLoad_OptsText[] = "Load options from a config file"; 303 tSCC zLoad_Opts_NAME[] = "LOAD_OPTS"; 304 305 tSCC zNotLoad_Opts_Name[] = "no-load-opts"; 306 tSCC zNotLoad_Opts_Pfx[] = "no"; 307 #define zLoad_Opts_Name (zNotLoad_Opts_Name + 3) 308 /* 309 * Declare option callback procedures 310 */ 311 #if defined(TEST_SNTP_OPTS) 312 /* 313 * Under test, omit argument processing, or call optionStackArg, 314 * if multiple copies are allowed. 315 */ 316 extern tOptProc 317 optionPagedUsage, optionVersionStderr; 318 static tOptProc 319 doUsageOpt; 320 321 #else /* NOT defined TEST_SNTP_OPTS */ 322 /* 323 * When not under test, there are different procs to use 324 */ 325 extern tOptProc 326 optionPagedUsage, optionPrintVersion; 327 static tOptProc 328 doUsageOpt; 329 #endif /* defined(TEST_SNTP_OPTS) */ 330 #ifdef TEST_SNTP_OPTS 331 # define DOVERPROC optionVersionStderr 332 #else 333 # define DOVERPROC optionPrintVersion 334 #endif /* TEST_SNTP_OPTS */ 335 336 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 337 * 338 * Define the Sntp Option Descriptions. 339 */ 340 static tOptDesc optDesc[ OPTION_CT ] = { 341 { /* entry idx, value */ 0, VALUE_OPT_IPV4, 342 /* equiv idx, value */ NO_EQUIVALENT, 0, 343 /* equivalenced to */ NO_EQUIVALENT, 344 /* min, max, act ct */ 0, 1, 0, 345 /* opt state flags */ IPV4_FLAGS, 0, 346 /* last opt argumnt */ { NULL }, 347 /* arg list/cookie */ NULL, 348 /* must/cannot opts */ NULL, NULL, 349 /* option proc */ NULL, 350 /* desc, NAME, name */ zIpv4Text, zIpv4_NAME, zIpv4_Name, 351 /* disablement strs */ NULL, NULL }, 352 353 { /* entry idx, value */ 1, VALUE_OPT_IPV6, 354 /* equiv idx, value */ NOLIMIT, NOLIMIT, 355 /* equivalenced to */ INDEX_OPT_IPV4, 356 /* min, max, act ct */ 0, 1, 0, 357 /* opt state flags */ IPV6_FLAGS, 0, 358 /* last opt argumnt */ { NULL }, 359 /* arg list/cookie */ NULL, 360 /* must/cannot opts */ NULL, NULL, 361 /* option proc */ NULL, 362 /* desc, NAME, name */ zIpv6Text, zIpv6_NAME, zIpv6_Name, 363 /* disablement strs */ NULL, NULL }, 364 365 { /* entry idx, value */ 2, VALUE_OPT_UNPRIVPORT, 366 /* equiv idx, value */ 2, VALUE_OPT_UNPRIVPORT, 367 /* equivalenced to */ NO_EQUIVALENT, 368 /* min, max, act ct */ 0, 1, 0, 369 /* opt state flags */ UNPRIVPORT_FLAGS, 0, 370 /* last opt argumnt */ { NULL }, 371 /* arg list/cookie */ NULL, 372 /* must/cannot opts */ NULL, NULL, 373 /* option proc */ NULL, 374 /* desc, NAME, name */ zUnprivportText, zUnprivport_NAME, zUnprivport_Name, 375 /* disablement strs */ NULL, NULL }, 376 377 { /* entry idx, value */ 3, VALUE_OPT_NORMALVERBOSE, 378 /* equiv idx, value */ 3, VALUE_OPT_NORMALVERBOSE, 379 /* equivalenced to */ NO_EQUIVALENT, 380 /* min, max, act ct */ 0, 1, 0, 381 /* opt state flags */ NORMALVERBOSE_FLAGS, 0, 382 /* last opt argumnt */ { NULL }, 383 /* arg list/cookie */ NULL, 384 /* must/cannot opts */ NULL, aNormalverboseCantList, 385 /* option proc */ NULL, 386 /* desc, NAME, name */ zNormalverboseText, zNormalverbose_NAME, zNormalverbose_Name, 387 /* disablement strs */ NULL, NULL }, 388 389 { /* entry idx, value */ 4, VALUE_OPT_EXTRAVERBOSE, 390 /* equiv idx, value */ 4, VALUE_OPT_EXTRAVERBOSE, 391 /* equivalenced to */ NO_EQUIVALENT, 392 /* min, max, act ct */ 0, 1, 0, 393 /* opt state flags */ EXTRAVERBOSE_FLAGS, 0, 394 /* last opt argumnt */ { NULL }, 395 /* arg list/cookie */ NULL, 396 /* must/cannot opts */ NULL, aExtraverboseCantList, 397 /* option proc */ NULL, 398 /* desc, NAME, name */ zExtraverboseText, zExtraverbose_NAME, zExtraverbose_Name, 399 /* disablement strs */ NULL, NULL }, 400 401 { /* entry idx, value */ 5, VALUE_OPT_MEGAVERBOSE, 402 /* equiv idx, value */ 5, VALUE_OPT_MEGAVERBOSE, 403 /* equivalenced to */ NO_EQUIVALENT, 404 /* min, max, act ct */ 0, 1, 0, 405 /* opt state flags */ MEGAVERBOSE_FLAGS, 0, 406 /* last opt argumnt */ { NULL }, 407 /* arg list/cookie */ NULL, 408 /* must/cannot opts */ NULL, aMegaverboseCantList, 409 /* option proc */ NULL, 410 /* desc, NAME, name */ zMegaverboseText, zMegaverbose_NAME, zMegaverbose_Name, 411 /* disablement strs */ NULL, NULL }, 412 413 { /* entry idx, value */ 6, VALUE_OPT_SETTIMEOFDAY, 414 /* equiv idx, value */ 6, VALUE_OPT_SETTIMEOFDAY, 415 /* equivalenced to */ NO_EQUIVALENT, 416 /* min, max, act ct */ 0, 1, 0, 417 /* opt state flags */ SETTIMEOFDAY_FLAGS, 0, 418 /* last opt argumnt */ { NULL }, 419 /* arg list/cookie */ NULL, 420 /* must/cannot opts */ NULL, aSettimeofdayCantList, 421 /* option proc */ NULL, 422 /* desc, NAME, name */ zSettimeofdayText, zSettimeofday_NAME, zSettimeofday_Name, 423 /* disablement strs */ NULL, NULL }, 424 425 { /* entry idx, value */ 7, VALUE_OPT_ADJTIME, 426 /* equiv idx, value */ 7, VALUE_OPT_ADJTIME, 427 /* equivalenced to */ NO_EQUIVALENT, 428 /* min, max, act ct */ 0, 1, 0, 429 /* opt state flags */ ADJTIME_FLAGS, 0, 430 /* last opt argumnt */ { NULL }, 431 /* arg list/cookie */ NULL, 432 /* must/cannot opts */ NULL, aAdjtimeCantList, 433 /* option proc */ NULL, 434 /* desc, NAME, name */ zAdjtimeText, zAdjtime_NAME, zAdjtime_Name, 435 /* disablement strs */ NULL, NULL }, 436 437 #ifdef NO_OPTIONAL_OPT_ARGS 438 # define VERSION_OPT_FLAGS OPTST_IMM | OPTST_NO_INIT 439 #else 440 # define VERSION_OPT_FLAGS OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ 441 OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT 442 #endif 443 444 { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, 445 /* equiv idx value */ NO_EQUIVALENT, 0, 446 /* equivalenced to */ NO_EQUIVALENT, 447 /* min, max, act ct */ 0, 1, 0, 448 /* opt state flags */ VERSION_OPT_FLAGS, 0, 449 /* last opt argumnt */ { NULL }, 450 /* arg list/cookie */ NULL, 451 /* must/cannot opts */ NULL, NULL, 452 /* option proc */ DOVERPROC, 453 /* desc, NAME, name */ zVersionText, NULL, zVersion_Name, 454 /* disablement strs */ NULL, NULL }, 455 456 #undef VERSION_OPT_FLAGS 457 458 459 { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, 460 /* equiv idx value */ NO_EQUIVALENT, 0, 461 /* equivalenced to */ NO_EQUIVALENT, 462 /* min, max, act ct */ 0, 1, 0, 463 /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0, 464 /* last opt argumnt */ { NULL }, 465 /* arg list/cookie */ NULL, 466 /* must/cannot opts */ NULL, NULL, 467 /* option proc */ doUsageOpt, 468 /* desc, NAME, name */ zHelpText, NULL, zHelp_Name, 469 /* disablement strs */ NULL, NULL }, 470 471 { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, 472 /* equiv idx value */ NO_EQUIVALENT, 0, 473 /* equivalenced to */ NO_EQUIVALENT, 474 /* min, max, act ct */ 0, 1, 0, 475 /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0, 476 /* last opt argumnt */ { NULL }, 477 /* arg list/cookie */ NULL, 478 /* must/cannot opts */ NULL, NULL, 479 /* option proc */ optionPagedUsage, 480 /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name, 481 /* disablement strs */ NULL, NULL }, 482 483 { /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS, 484 /* equiv idx value */ NO_EQUIVALENT, 0, 485 /* equivalenced to */ NO_EQUIVALENT, 486 /* min, max, act ct */ 0, 1, 0, 487 /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) 488 | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, 0, 489 /* last opt argumnt */ { NULL }, 490 /* arg list/cookie */ NULL, 491 /* must/cannot opts */ NULL, NULL, 492 /* option proc */ NULL, 493 /* desc, NAME, name */ zSave_OptsText, NULL, zSave_Opts_Name, 494 /* disablement strs */ NULL, NULL }, 495 496 { /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS, 497 /* equiv idx value */ NO_EQUIVALENT, 0, 498 /* equivalenced to */ NO_EQUIVALENT, 499 /* min, max, act ct */ 0, NOLIMIT, 0, 500 /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) \ 501 | OPTST_DISABLE_IMM, 0, 502 /* last opt argumnt */ { NULL }, 503 /* arg list/cookie */ NULL, 504 /* must/cannot opts */ NULL, NULL, 505 /* option proc */ optionLoadOpt, 506 /* desc, NAME, name */ zLoad_OptsText, zLoad_Opts_NAME, zLoad_Opts_Name, 507 /* disablement strs */ zNotLoad_Opts_Name, zNotLoad_Opts_Pfx } 508 }; 509 510 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 511 * 512 * Define the Sntp Option Environment 513 */ 514 tSCC zPROGNAME[] = "SNTP"; 515 tSCC zUsageTitle[] = 516 "sntp - standard SNTP program - Ver. 4.2.4p5\n\ 517 USAGE: %s [ -<flag> | --<name> ]...\n"; 518 tSCC zRcName[] = ".ntprc"; 519 tSCC* apzHomeList[] = { 520 "$HOME", 521 ".", 522 NULL }; 523 524 tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; 525 #define zExplain NULL 526 tSCC zDetail[] = "\n\ 527 .I sntp\n\ 528 can be used as a SNTP client to query a NTP or SNTP server and either display\n\ 529 the time or set the local system's time (given suitable privilege). It can be\n\ 530 run as an interactive command or in a\n\ 531 .I cron\n\ 532 job.\n\ 533 NTP is the Network Time Protocol (RFC 1305) and SNTP is the\n\ 534 Simple Network Time Protocol (RFC 2030, which supersedes RFC 1769).\n"; 535 tSCC zFullVersion[] = SNTP_FULL_VERSION; 536 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ 537 538 #if defined(ENABLE_NLS) 539 # define OPTPROC_BASE OPTPROC_TRANSLATE 540 static tOptionXlateProc translate_option_strings; 541 #else 542 # define OPTPROC_BASE OPTPROC_NONE 543 # define translate_option_strings NULL 544 #endif /* ENABLE_NLS */ 545 546 tOptions sntpOptions = { 547 OPTIONS_STRUCT_VERSION, 548 0, NULL, /* original argc + argv */ 549 ( OPTPROC_BASE 550 + OPTPROC_ERRSTOP 551 + OPTPROC_SHORTOPT 552 + OPTPROC_LONGOPT 553 + OPTPROC_NO_REQ_OPT 554 + OPTPROC_ENVIRON 555 + OPTPROC_NO_ARGS 556 + OPTPROC_HAS_IMMED ), 557 0, NULL, /* current option index, current option */ 558 NULL, NULL, zPROGNAME, 559 zRcName, zCopyright, zCopyrightNotice, 560 zFullVersion, apzHomeList, zUsageTitle, 561 zExplain, zDetail, optDesc, 562 zBugsAddr, /* address to send bugs to */ 563 NULL, NULL, /* extensions/saved state */ 564 optionUsage, /* usage procedure */ 565 translate_option_strings, /* translation procedure */ 566 /* 567 * Indexes to special options 568 */ 569 { INDEX_OPT_MORE_HELP, 570 INDEX_OPT_SAVE_OPTS, 571 NO_EQUIVALENT /* index of '-#' option */, 572 NO_EQUIVALENT /* index of default opt */ 573 }, 574 13 /* full option count */, 8 /* user option count */ 575 }; 576 577 /* 578 * Create the static procedure(s) declared above. 579 */ 580 static void 581 doUsageOpt( 582 tOptions* pOptions, 583 tOptDesc* pOptDesc ) 584 { 585 USAGE( EXIT_SUCCESS ); 586 } 587 /* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ 588 589 #if defined(TEST_SNTP_OPTS) /* TEST MAIN PROCEDURE: */ 590 591 int 592 main( int argc, char** argv ) 593 { 594 int res = EXIT_SUCCESS; 595 (void)optionProcess( &sntpOptions, argc, argv ); 596 { 597 void optionPutShell( tOptions* ); 598 optionPutShell( &sntpOptions ); 599 } 600 return res; 601 } 602 #endif /* defined TEST_SNTP_OPTS */ 603 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ 604 605 #if ENABLE_NLS 606 #include <stdio.h> 607 #include <stdlib.h> 608 #include <string.h> 609 #include <unistd.h> 610 #include <autoopts/usage-txt.h> 611 612 static char* AO_gettext( char const* pz ); 613 static void coerce_it(void** s); 614 615 static char* 616 AO_gettext( char const* pz ) 617 { 618 char* pzRes; 619 if (pz == NULL) 620 return NULL; 621 pzRes = _(pz); 622 if (pzRes == pz) 623 return pzRes; 624 pzRes = strdup( pzRes ); 625 if (pzRes == NULL) { 626 fputs( _("No memory for duping translated strings\n"), stderr ); 627 exit( EXIT_FAILURE ); 628 } 629 return pzRes; 630 } 631 632 static void coerce_it(void** s) { *s = AO_gettext(*s); } 633 #define COERSION(_f) \ 634 coerce_it((void*)&(sntpOptions._f)) 635 636 /* 637 * This invokes the translation code (e.g. gettext(3)). 638 */ 639 static void 640 translate_option_strings( void ) 641 { 642 /* 643 * Guard against re-translation. It won't work. The strings will have 644 * been changed by the first pass through this code. One shot only. 645 */ 646 if (option_usage_text.field_ct == 0) 647 return; 648 /* 649 * Do the translations. The first pointer follows the field count field. 650 * The field count field is the size of a pointer. 651 */ 652 { 653 char** ppz = (char**)(void*)&(option_usage_text); 654 int ix = option_usage_text.field_ct; 655 656 do { 657 ppz++; 658 *ppz = AO_gettext(*ppz); 659 } while (--ix > 0); 660 } 661 option_usage_text.field_ct = 0; 662 663 { 664 tOptDesc* pOD = sntpOptions.pOptDesc; 665 int ix = sntpOptions.optCt; 666 667 for (;;) { 668 pOD->pzText = AO_gettext(pOD->pzText); 669 pOD->pz_NAME = AO_gettext(pOD->pz_NAME); 670 pOD->pz_Name = AO_gettext(pOD->pz_Name); 671 pOD->pz_DisableName = AO_gettext(pOD->pz_DisableName); 672 pOD->pz_DisablePfx = AO_gettext(pOD->pz_DisablePfx); 673 if (--ix <= 0) 674 break; 675 pOD++; 676 } 677 } 678 COERSION(pzCopyright); 679 COERSION(pzCopyNotice); 680 COERSION(pzFullVersion); 681 COERSION(pzUsageTitle); 682 COERSION(pzExplain); 683 COERSION(pzDetail); 684 } 685 686 #endif /* ENABLE_NLS */ 687 688 #ifdef __cplusplus 689 } 690 #endif 691 /* sntp-opts.c ends here */ 692