xref: /freebsd/contrib/ntp/sntp/libopts/genshell.c (revision fcb560670601b2a4d87bb31d7531c8dcc37ee71b)
1 /*   -*- buffer-read-only: t -*- vi: set ro:
2  *
3  *  DO NOT EDIT THIS FILE   (genshell.c)
4  *
5  *  It has been AutoGen-ed  Saturday May  5, 2007 at 12:02:35 PM PDT
6  *  From the definitions    genshell.def
7  *  and the template file   options
8  *
9  * Generated from AutoOpts 29:0:4 templates.
10  */
11 
12 /*
13  *  This file was produced by an AutoOpts template.  AutoOpts is a
14  *  copyrighted work.  This source file is not encumbered by AutoOpts
15  *  licensing, but is provided under the licensing terms chosen by the
16  *  genshellopt author or copyright holder.  AutoOpts is licensed under
17  *  the terms of the LGPL.  The redistributable library (``libopts'') is
18  *  licensed under the terms of either the LGPL or, at the users discretion,
19  *  the BSD license.  See the AutoOpts and/or libopts sources for details.
20  *
21  * This source file is copyrighted and licensed under the following terms:
22  *
23  * genshellopt copyright 1999-2007 Bruce Korb - all rights reserved
24  *
25  * genshellopt is free software; you can redistribute it and/or
26  * modify it under the terms of the GNU Lesser General Public
27  * License as published by the Free Software Foundation; either
28  * version 2.1 of the License, or (at your option) any later version.
29  *
30  * genshellopt is distributed in the hope that it will be useful,
31  * but WITHOUT ANY WARRANTY; without even the implied warranty of
32  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
33  * Lesser General Public License for more details.
34  *
35  * You should have received a copy of the GNU Lesser General Public
36  * License along with genshellopt.  If not, write to:
37  * 	The Free Software Foundation, Inc.,
38  * 	51 Franklin Street, Fifth Floor
39  * 	Boston, MA  02110-1301, USA.
40  */
41 
42 
43 #include <limits.h>
44 
45 #define OPTION_CODE_COMPILE 1
46 #include "genshell.h"
47 
48 #ifdef  __cplusplus
49 extern "C" {
50 #endif
51 tSCC zCopyright[] =
52        "genshellopt copyright (c) 1999-2007 Bruce Korb, all rights reserved";
53 tSCC zCopyrightNotice[] =
54        "genshellopt is free software; you can redistribute it and/or\n\
55 modify it under the terms of the GNU Lesser General Public\n\
56 License as published by the Free Software Foundation; either\n\
57 version 2.1 of the License, or (at your option) any later version.\n\n\
58 genshellopt is distributed in the hope that it will be useful,\n\
59 but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
60 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n\
61 Lesser General Public License for more details.\n\n\
62 You should have received a copy of the GNU Lesser General Public\n\
63 License along with genshellopt.  If not, write to:\n\
64 \tThe Free Software Foundation, Inc.,\n\
65 \t51 Franklin Street, Fifth Floor\n\
66 \tBoston, MA  02110-1301, USA.";
67 extern tUsageProc genshelloptUsage;
68 
69 #ifndef NULL
70 #  define NULL 0
71 #endif
72 #ifndef EXIT_SUCCESS
73 #  define  EXIT_SUCCESS 0
74 #endif
75 #ifndef EXIT_FAILURE
76 #  define  EXIT_FAILURE 1
77 #endif
78 /*
79  *  Script option description:
80  */
81 tSCC    zScriptText[] =
82         "Output Script File";
83 tSCC    zScript_NAME[]             = "SCRIPT";
84 tSCC    zScript_Name[]             = "script";
85 #define SCRIPT_FLAGS       (OPTST_DISABLED \
86         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
87 
88 /*
89  *  Shell option description:
90  */
91 tSCC    zShellText[] =
92         "Shell name (follows \"#!\" magic)";
93 tSCC    zShell_NAME[]              = "SHELL";
94 tSCC    zNotShell_Name[]           = "no-shell";
95 tSCC    zNotShell_Pfx[]            = "no";
96 #define zShell_Name                  (zNotShell_Name + 3)
97 #define SHELL_FLAGS       (OPTST_INITENABLED \
98         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
99 
100 /*
101  *  Help/More_Help/Version option descriptions:
102  */
103 tSCC zHelpText[]       = "Display usage information and exit";
104 tSCC zHelp_Name[]      = "help";
105 
106 tSCC zMore_HelpText[]  = "Extended usage information passed thru pager";
107 tSCC zMore_Help_Name[] = "more-help";
108 
109 tSCC zVersionText[]    = "Output version information and exit";
110 tSCC zVersion_Name[]   = "version";
111 /*
112  *  Declare option callback procedures
113  */
114 extern tOptProc
115     optionPagedUsage, optionPrintVersion;
116 static tOptProc
117     doUsageOpt;
118 
119 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
120  *
121  *  Define the Genshellopt Option Descriptions.
122  */
123 static tOptDesc optDesc[ OPTION_CT ] = {
124   {  /* entry idx, value */ 0, VALUE_OPT_SCRIPT,
125      /* equiv idx, value */ 0, VALUE_OPT_SCRIPT,
126      /* equivalenced to  */ NO_EQUIVALENT,
127      /* min, max, act ct */ 0, 1, 0,
128      /* opt state flags  */ SCRIPT_FLAGS, 0,
129      /* last opt argumnt */ { NULL },
130      /* arg list/cookie  */ NULL,
131      /* must/cannot opts */ NULL, NULL,
132      /* option proc      */ NULL,
133      /* desc, NAME, name */ zScriptText, zScript_NAME, zScript_Name,
134      /* disablement strs */ NULL, NULL },
135 
136   {  /* entry idx, value */ 1, VALUE_OPT_SHELL,
137      /* equiv idx, value */ 1, VALUE_OPT_SHELL,
138      /* equivalenced to  */ NO_EQUIVALENT,
139      /* min, max, act ct */ 0, 1, 0,
140      /* opt state flags  */ SHELL_FLAGS, 0,
141      /* last opt argumnt */ { NULL },
142      /* arg list/cookie  */ NULL,
143      /* must/cannot opts */ NULL, NULL,
144      /* option proc      */ NULL,
145      /* desc, NAME, name */ zShellText, zShell_NAME, zShell_Name,
146      /* disablement strs */ zNotShell_Name, zNotShell_Pfx },
147 
148 #ifdef NO_OPTIONAL_OPT_ARGS
149 #  define VERSION_OPT_FLAGS     OPTST_IMM | OPTST_NO_INIT
150 #else
151 #  define VERSION_OPT_FLAGS     OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
152                                 OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
153 #endif
154 
155   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
156      /* equiv idx value  */ NO_EQUIVALENT, 0,
157      /* equivalenced to  */ NO_EQUIVALENT,
158      /* min, max, act ct */ 0, 1, 0,
159      /* opt state flags  */ VERSION_OPT_FLAGS, 0,
160      /* last opt argumnt */ { NULL },
161      /* arg list/cookie  */ NULL,
162      /* must/cannot opts */ NULL, NULL,
163      /* option proc      */ optionPrintVersion,
164      /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
165      /* disablement strs */ NULL, NULL },
166 
167 #undef VERSION_OPT_FLAGS
168 
169 
170   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
171      /* equiv idx value  */ NO_EQUIVALENT, 0,
172      /* equivalenced to  */ NO_EQUIVALENT,
173      /* min, max, act ct */ 0, 1, 0,
174      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
175      /* last opt argumnt */ { NULL },
176      /* arg list/cookie  */ NULL,
177      /* must/cannot opts */ NULL, NULL,
178      /* option proc      */ doUsageOpt,
179      /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
180      /* disablement strs */ NULL, NULL },
181 
182   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
183      /* equiv idx value  */ NO_EQUIVALENT, 0,
184      /* equivalenced to  */ NO_EQUIVALENT,
185      /* min, max, act ct */ 0, 1, 0,
186      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
187      /* last opt argumnt */ { NULL },
188      /* arg list/cookie  */ NULL,
189      /* must/cannot opts */ NULL,  NULL,
190      /* option proc      */ optionPagedUsage,
191      /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
192      /* disablement strs */ NULL, NULL }
193 };
194 
195 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
196  *
197  *  Define the Genshellopt Option Environment
198  */
199 tSCC   zPROGNAME[]   = "GENSHELLOPT";
200 tSCC   zUsageTitle[] =
201 "genshellopt - Generate Shell Option Processing Script - Ver. 1\n\
202 USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n";
203 #define zRcName     NULL
204 #define apzHomeList NULL
205 
206 tSCC   zBugsAddr[]    = "autogen-users@lists.sourceforge.net";
207 tSCC   zExplain[]     = "\n\
208 Note that `shell' is only useful if the output file does not already\n\
209 exist.  If it does, then the shell name and optional first argument\n\
210 will be extracted from the script file.\n";
211 tSCC    zDetail[]     = "\n\
212 If the script file already exists and contains Automated Option Processing\n\
213 text, the second line of the file through the ending tag will be replaced\n\
214 by the newly generated text.  The first `#!' line will be regenerated.\n";
215 tSCC    zFullVersion[] = GENSHELLOPT_FULL_VERSION;
216 /* extracted from optcode.tpl near line 408 */
217 
218 #if defined(ENABLE_NLS)
219 # define OPTPROC_BASE OPTPROC_TRANSLATE
220   static tOptionXlateProc translate_option_strings;
221 #else
222 # define OPTPROC_BASE OPTPROC_NONE
223 # define translate_option_strings NULL
224 #endif /* ENABLE_NLS */
225 
226 tOptions genshelloptOptions = {
227     OPTIONS_STRUCT_VERSION,
228     0, NULL,                    /* original argc + argv    */
229     ( OPTPROC_BASE
230     + OPTPROC_ERRSTOP
231     + OPTPROC_SHORTOPT
232     + OPTPROC_LONGOPT
233     + OPTPROC_NO_REQ_OPT
234     + OPTPROC_NEGATIONS
235     + OPTPROC_NO_ARGS ),
236     0, NULL,                    /* current option index, current option */
237     NULL,         NULL,         zPROGNAME,
238     zRcName,      zCopyright,   zCopyrightNotice,
239     zFullVersion, apzHomeList,  zUsageTitle,
240     zExplain,     zDetail,      optDesc,
241     zBugsAddr,                  /* address to send bugs to */
242     NULL, NULL,                 /* extensions/saved state  */
243     genshelloptUsage,       /* usage procedure */
244     translate_option_strings,   /* translation procedure */
245     /*
246      *  Indexes to special options
247      */
248     { INDEX_OPT_MORE_HELP,
249        0 /* no option state saving */,
250       NO_EQUIVALENT /* index of '-#' option */,
251       NO_EQUIVALENT /* index of default opt */
252     },
253     5 /* full option count */, 2 /* user option count */
254 };
255 
256 /*
257  *  Create the static procedure(s) declared above.
258  */
259 static void
260 doUsageOpt(
261     tOptions*   pOptions,
262     tOptDesc*   pOptDesc )
263 {
264     USAGE( EXIT_SUCCESS );
265 }
266 /* extracted from optcode.tpl near line 514 */
267 
268 #if ENABLE_NLS
269 #include <stdio.h>
270 #include <stdlib.h>
271 #include <string.h>
272 #include <unistd.h>
273 #include <autoopts/usage-txt.h>
274 
275 static char* AO_gettext( char const* pz );
276 static void  coerce_it(void** s);
277 
278 static char*
279 AO_gettext( char const* pz )
280 {
281     char* pzRes;
282     if (pz == NULL)
283         return NULL;
284     pzRes = _(pz);
285     if (pzRes == pz)
286         return pzRes;
287     pzRes = strdup( pzRes );
288     if (pzRes == NULL) {
289         fputs( _("No memory for duping translated strings\n"), stderr );
290         exit( EXIT_FAILURE );
291     }
292     return pzRes;
293 }
294 
295 static void coerce_it(void** s) { *s = AO_gettext(*s); }
296 #define COERSION(_f) \
297   coerce_it((void*)&(genshelloptOptions._f))
298 
299 /*
300  *  This invokes the translation code (e.g. gettext(3)).
301  */
302 static void
303 translate_option_strings( void )
304 {
305     /*
306      *  Guard against re-translation.  It won't work.  The strings will have
307      *  been changed by the first pass through this code.  One shot only.
308      */
309     if (option_usage_text.field_ct == 0)
310         return;
311     /*
312      *  Do the translations.  The first pointer follows the field count field.
313      *  The field count field is the size of a pointer.
314      */
315     {
316         char** ppz = (char**)(void*)&(option_usage_text);
317         int    ix  = option_usage_text.field_ct;
318 
319         do {
320             ppz++;
321             *ppz = AO_gettext(*ppz);
322         } while (--ix > 0);
323     }
324     option_usage_text.field_ct = 0;
325 
326     {
327         tOptDesc* pOD = genshelloptOptions.pOptDesc;
328         int       ix  = genshelloptOptions.optCt;
329 
330         for (;;) {
331             pOD->pzText           = AO_gettext(pOD->pzText);
332             pOD->pz_NAME          = AO_gettext(pOD->pz_NAME);
333             pOD->pz_Name          = AO_gettext(pOD->pz_Name);
334             pOD->pz_DisableName   = AO_gettext(pOD->pz_DisableName);
335             pOD->pz_DisablePfx    = AO_gettext(pOD->pz_DisablePfx);
336             if (--ix <= 0)
337                 break;
338             pOD++;
339         }
340     }
341     COERSION(pzCopyright);
342     COERSION(pzCopyNotice);
343     COERSION(pzFullVersion);
344     COERSION(pzUsageTitle);
345     COERSION(pzExplain);
346     COERSION(pzDetail);
347 }
348 
349 #endif /* ENABLE_NLS */
350 
351 #ifdef  __cplusplus
352 }
353 #endif
354 /* genshell.c ends here */
355