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