File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / sntp / libopts / version.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 7 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: 
    2: /*
    3:  * Time-stamp:      "2011-04-22 12:54:28 bkorb"
    4:  *
    5:  *  This module implements the default usage procedure for
    6:  *  Automated Options.  It may be overridden, of course.
    7:  */
    8: 
    9: /*
   10:  *  This file is part of AutoOpts, a companion to AutoGen.
   11:  *  AutoOpts is free software.
   12:  *  AutoOpts is Copyright (c) 1992-2011 by Bruce Korb - all rights reserved
   13:  *
   14:  *  AutoOpts is available under any one of two licenses.  The license
   15:  *  in use must be one of these two and the choice is under the control
   16:  *  of the user of the license.
   17:  *
   18:  *   The GNU Lesser General Public License, version 3 or later
   19:  *      See the files "COPYING.lgplv3" and "COPYING.gplv3"
   20:  *
   21:  *   The Modified Berkeley Software Distribution License
   22:  *      See the file "COPYING.mbsd"
   23:  *
   24:  *  These files have the following md5sums:
   25:  *
   26:  *  43b91e8ca915626ed3818ffb1b71248b pkg/libopts/COPYING.gplv3
   27:  *  06a1a2e4760c90ea5e1dad8dfaac4d39 pkg/libopts/COPYING.lgplv3
   28:  *  66a5cedaf62c4b2637025f049f9b826f pkg/libopts/COPYING.mbsd
   29:  */
   30: 
   31: /*=export_func  optionVersion
   32:  *
   33:  * what:     return the compiled AutoOpts version number
   34:  * ret_type: char const*
   35:  * ret_desc: the version string in constant memory
   36:  * doc:
   37:  *  Returns the full version string compiled into the library.
   38:  *  The returned string cannot be modified.
   39: =*/
   40: char const*
   41: optionVersion(void)
   42: {
   43:     static char const zVersion[] =
   44:         STR(AO_CURRENT.AO_REVISION);
   45: 
   46:     return zVersion;
   47: }
   48: 
   49: static void
   50: emit_simple_ver(tOptions * pOpts, FILE * fp)
   51: {
   52:     if (pOpts->pzFullVersion != NULL)
   53:         fputs(pOpts->pzFullVersion, fp);
   54: 
   55:     else if (pOpts->pzCopyright != NULL) {
   56:         char const * pe = strchr(pOpts->pzCopyright, '\n');
   57:         if (pe == NULL)
   58:             pe = pOpts->pzCopyright + strlen(pOpts->pzCopyright);
   59:         fwrite(pOpts->pzCopyright, 1, pe - pOpts->pzCopyright, fp);
   60:     }
   61: 
   62:     else {
   63:         char const * pe = strchr(pOpts->pzUsageTitle, '\n');
   64:         if (pe == NULL)
   65:             pe = pOpts->pzUsageTitle + strlen(pOpts->pzUsageTitle);
   66:         fwrite(pOpts->pzUsageTitle, 1, pe - pOpts->pzCopyright, fp);
   67:     }
   68:     fputc('\n', fp);
   69: }
   70: 
   71: static void
   72: emit_copy_ver(tOptions * pOpts, FILE * fp)
   73: {
   74:     if (pOpts->pzCopyright != NULL)
   75:         fputs(pOpts->pzCopyright, fp);
   76: 
   77:     else if (pOpts->pzFullVersion != NULL)
   78:         fputs(pOpts->pzFullVersion, fp);
   79: 
   80:     else {
   81:         char const * pe = strchr(pOpts->pzUsageTitle, '\n');
   82:         if (pe == NULL)
   83:             pe = pOpts->pzUsageTitle + strlen(pOpts->pzUsageTitle);
   84:         fwrite(pOpts->pzUsageTitle, 1, pe - pOpts->pzCopyright, fp);
   85:     }
   86: 
   87:     fputc('\n', fp);
   88: 
   89:     if (HAS_pzPkgDataDir(pOpts) && (pOpts->pzPackager != NULL))
   90:         fputs(pOpts->pzPackager, fp);
   91: 
   92:     else if (pOpts->pzBugAddr != NULL)
   93:         fprintf(fp, zPlsSendBugs, pOpts->pzBugAddr);
   94: }
   95: 
   96: static void
   97: emit_copy_note(tOptions * pOpts, FILE * fp)
   98: {
   99:     if (pOpts->pzCopyright != NULL) {
  100:         fputs(pOpts->pzCopyright, fp);
  101:         fputc('\n', fp);
  102:     }
  103: 
  104:     if (pOpts->pzCopyNotice != NULL) {
  105:         fputs(pOpts->pzCopyNotice, fp);
  106:         fputc('\n', fp);
  107:     }
  108: 
  109:     fprintf(fp, zAO_Ver, optionVersion());
  110: 
  111:     if (HAS_pzPkgDataDir(pOpts) && (pOpts->pzPackager != NULL))
  112:         fputs(pOpts->pzPackager, fp);
  113: 
  114:     else if (pOpts->pzBugAddr != NULL)
  115:         fprintf(fp, zPlsSendBugs, pOpts->pzBugAddr);
  116: }
  117: 
  118: static void
  119: print_ver(tOptions * pOpts, tOptDesc * pOD, FILE * fp)
  120: {
  121:     char ch;
  122: 
  123:     /*
  124:      *  IF the optional argument flag is off, or the argument
  125:      *  is not provided, then just print the version.
  126:      */
  127:     if (  ((pOD->fOptState & OPTST_ARG_OPTIONAL) == 0)
  128:        || (pOD->optArg.argString == NULL))
  129:          ch = 'v';
  130:     else ch = pOD->optArg.argString[0];
  131: 
  132:     switch (ch) {
  133:     case NUL: /* arg provided, but empty */
  134:     case 'v': case 'V': emit_simple_ver(pOpts, fp); break;
  135:     case 'c': case 'C': emit_copy_ver(pOpts, fp);   break;
  136:     case 'n': case 'N': emit_copy_note(pOpts, fp);  break;
  137: 
  138:     default:
  139:         fprintf(stderr, zBadVerArg, ch);
  140:         exit(EXIT_FAILURE);
  141:     }
  142: 
  143:     fflush(fp);
  144:     if (ferror(fp) != 0) {
  145:         fputs(zOutputFail, stderr);
  146:         exit(EXIT_FAILURE);
  147:     }
  148:     exit(EXIT_SUCCESS);
  149: }
  150: 
  151: /*=export_func  optionPrintVersion
  152:  * private:
  153:  *
  154:  * what:  Print the program version
  155:  * arg:   + tOptions* + pOpts    + program options descriptor +
  156:  * arg:   + tOptDesc* + pOptDesc + the descriptor for this arg +
  157:  *
  158:  * doc:
  159:  *  This routine will print the version to stdout.
  160: =*/
  161: void
  162: optionPrintVersion(tOptions * pOpts, tOptDesc * pOD)
  163: {
  164:     print_ver(pOpts, pOD, stdout);
  165: }
  166: 
  167: /*=export_func  optionVersionStderr
  168:  * private:
  169:  *
  170:  * what:  Print the program version to stderr
  171:  * arg:   + tOptions* + pOpts    + program options descriptor +
  172:  * arg:   + tOptDesc* + pOptDesc + the descriptor for this arg +
  173:  *
  174:  * doc:
  175:  *  This routine will print the version to stderr.
  176: =*/
  177: void
  178: optionVersionStderr(tOptions * pOpts, tOptDesc * pOD)
  179: {
  180:     print_ver(pOpts, pOD, stderr);
  181: }
  182: 
  183: /*
  184:  * Local Variables:
  185:  * mode: C
  186:  * c-file-style: "stroustrup"
  187:  * indent-tabs-mode: nil
  188:  * End:
  189:  * end of autoopts/version.c */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>