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