summaryrefslogtreecommitdiff
path: root/autoopts/tpl/opthead.tlib
diff options
context:
space:
mode:
Diffstat (limited to 'autoopts/tpl/opthead.tlib')
-rw-r--r--autoopts/tpl/opthead.tlib601
1 files changed, 601 insertions, 0 deletions
diff --git a/autoopts/tpl/opthead.tlib b/autoopts/tpl/opthead.tlib
new file mode 100644
index 0000000..86e87bf
--- /dev/null
+++ b/autoopts/tpl/opthead.tlib
@@ -0,0 +1,601 @@
+[= autogen5 template -*- Mode: C -*-
+
+# Time-stamp: "2012-08-11 08:56:26 bkorb"
+#
+## This file is part of AutoOpts, a companion to AutoGen.
+## AutoOpts is free software.
+## AutoOpts is Copyright (c) 1992-2012 by Bruce Korb - all rights reserved
+##
+## AutoOpts is available under any one of two licenses. The license
+## in use must be one of these two and the choice is under the control
+## of the user of the license.
+##
+## The GNU Lesser General Public License, version 3 or later
+## See the files "COPYING.lgplv3" and "COPYING.gplv3"
+##
+## The Modified Berkeley Software Distribution License
+## See the file "COPYING.mbsd"
+##
+## These files have the following md5sums:
+##
+## 43b91e8ca915626ed3818ffb1b71248b COPYING.gplv3
+## 06a1a2e4760c90ea5e1dad8dfaac4d39 COPYING.lgplv3
+## 66a5cedaf62c4b2637025f049f9b826f COPYING.mbsd
+
+=]
+/*
+ * This file contains the programmatic interface to the Automated
+ * Options generated for the [=prog-name=] program.
+ * These macros are documented in the AutoGen info file in the
+ * "AutoOpts" chapter. Please refer to that doc for usage help.
+ */
+[= (make-header-guard "autoopts") =][=
+% config-header "\n#include \"%s\"" =]
+#include <autoopts/options.h>[=
+(if (or (exist? "usage-message") (exist? "die-code"))
+ "\n#include <stdarg.h>") =]
+[= IF
+
+ (define option-ct 0)
+ (define index-sep-str "")
+
+ (set! max-name-len (+ max-name-len 2))
+ (define index-fmt (sprintf "%%s\n %s%%-%ds=%%3d" INDEX-pfx max-name-len))
+
+ (define add-opt-index (lambda (opt-nm) (begin
+ (ag-fprintf 0 index-fmt index-sep-str opt-nm option-ct)
+ (set! option-ct (+ option-ct 1))
+ (set! index-sep-str ",")
+ ) ) )
+
+ (not (exist? "library")) =]
+/*
+ * Ensure that the library used for compiling this generated header is at
+ * least as new as the version current when the header template was released
+ * (not counting patch version increments). Also ensure that the oldest
+ * tolerable version is at least as old as what was current when the header
+ * template was released.
+ */
+#define AO_TEMPLATE_VERSION [=(. ao-template-ver)=]
+#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
+ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
+# error option template version mismatches autoopts/options.h header
+ Choke Me.
+#endif
+[= ENDIF not a library =]
+/*
+ * Enumeration of each option:
+ */
+typedef enum {[=
+FOR flag =][=
+ (if (exist? "documentation")
+ (set! option-ct (+ option-ct 1))
+ (add-opt-index (get-up-name "name"))
+ )
+ =][=
+ENDFOR flag =][=
+
+IF (exist? "library") =],
+ LIBRARY_OPTION_COUNT[=
+
+ELSE not exists library =][=
+
+ (if (exist? "resettable") (add-opt-index "RESET_OPTION"))
+ (if (exist? "version") (add-opt-index "VERSION"))
+ (add-opt-index "HELP")
+ (if (not (exist? "no-libopts")) (add-opt-index "MORE_HELP"))
+ (if (exist? "usage-opt") (add-opt-index "USAGE"))
+ (if (exist? "vendor-opt") (add-opt-index "VENDOR_OPT"))
+
+ (if (exist? "homerc") (begin
+ (if (not (exist? "disable-save")) (add-opt-index "SAVE_OPTS"))
+ (add-opt-index "LOAD_OPTS")
+ ) ) =][=
+ENDIF not exist library =]
+} te[=(. Cap-prefix)=]OptIndex;
+
+#define [=(. UP-prefix)=]OPTION_CT [= (. option-ct) =][=
+IF (exist? "version") =]
+#define [=(. pname-up)=]_VERSION [=(c-string (get "version"))=]
+#define [=(. pname-up)=]_FULL_VERSION [=(c-string version-text) =][=
+ENDIF (exist? version) =]
+
+/*
+ * Interface defines for all options. Replace "n" with the UPPER_CASED
+ * option name (as in the te[=(. Cap-prefix)=]OptIndex enumeration above).
+ * e.g. HAVE_[=(. UP-prefix)=]OPT([= (get-up-name "flag[].name") =])
+ */[=
+
+IF (exist? "library")
+
+=]
+extern tOptDesc * const [= (. lib-opt-ptr) =];[=
+
+ENDIF is a library =][=
+
+CASE guard-option-names =][=
+!E =][=
+ (set! tmp-val (string-append "[" INDEX-pfx "## n]"))
+ =][=
+
+= full-enum =][=
+ (set! tmp-val "[n]") =][=
+
+=* no-warn =][=
+ (set! tmp-val (string-append "[" INDEX-pfx "## n]"))
+ =][=
+
+* =][=
+ (set! tmp-val (string-append "[" INDEX-pfx "## n]"))
+ =][=
+
+ESAC =][=
+
+(if (exist? "library")
+ (set! tmp-val (string-append "(" lib-opt-ptr tmp-val ")"))
+ (set! tmp-val (string-append "(" pname "Options.pOptDesc" tmp-val ")")) )
+
+(ag-fprintf 0 "\n#define %8sDESC(n) " UP-prefix) tmp-val
+
+=][=
+
+IF (> 1 (string-length UP-prefix))
+
+=]
+#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
+#define OPT_ARG(n) (DESC(n).optArg.argString)
+#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
+#define COUNT_OPT(n) (DESC(n).optOccCt)
+#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
+#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
+#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
+#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
+#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
+#define CLEAR_OPT(n) STMTS( \
+ DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \
+ if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \
+ DESC(n).fOptState |= OPTST_DISABLED; \
+ DESC(n).optCookie = NULL )[=
+
+ELSE we have a prefix:
+
+=][= (sprintf "
+#define HAVE_%1$sOPT(n) (! UNUSED_OPT(& %1$sDESC(n)))
+#define %1$sOPT_ARG(n) (%1$sDESC(n).optArg.argString)
+#define STATE_%1$sOPT(n) (%1$sDESC(n).fOptState & OPTST_SET_MASK)
+#define COUNT_%1$sOPT(n) (%1$sDESC(n).optOccCt)
+#define ISSEL_%1$sOPT(n) (SELECTED_OPT(&%1$sDESC(n)))
+#define ISUNUSED_%1$sOPT(n) (UNUSED_OPT(& %1$sDESC(n)))
+#define ENABLED_%1$sOPT(n) (! DISABLED_OPT(& %1$sDESC(n)))
+#define STACKCT_%1$sOPT(n) (((tArgList*)(%1$sDESC(n).optCookie))->useCt)
+#define STACKLST_%1$sOPT(n) (((tArgList*)(%1$sDESC(n).optCookie))->apzArgs)
+#define CLEAR_%1$sOPT(n) STMTS( \\
+ %1$sDESC(n).fOptState &= OPTST_PERSISTENT_MASK; \\
+ if ((%1$sDESC(n).fOptState & OPTST_INITENABLED) == 0) \\
+ %1$sDESC(n).fOptState |= OPTST_DISABLED; \\
+ %1$sDESC(n).optCookie = NULL )"
+
+ UP-prefix ) =][=
+
+ENDIF prefix/not =]
+
+/* * * * * *
+ *
+ * Enumeration of [= prog-name =] exit codes
+ */
+typedef enum {[=
+ #/*
+ ;; Assume no definitions for exit-name[0] and [1]. If not true,
+ ;; then change the strings associated with the ones defined to the
+ ;; specified name. If the assumption is correct, we'll need to
+ ;; emit the a default value into the enumeration..
+ =][= ;; */
+ (set! tmp-val "")
+ (define need-ex-noinput (exist? "homerc"))
+ (define need-ex-software #t)
+
+ (define succ-exit-code (string-append pname-up "_EXIT_SUCCESS"))
+ (if (exist? "exit-name[0]")
+ (set! succ-exit-code (string-append
+ pname-up "_EXIT_" (get-up-name "exit-name[0]") ))
+
+ (set! tmp-val (string-append
+ "\n " pname-up "_EXIT_SUCCESS = 0" ))
+ )
+
+ (define fail-exit-code (string-append pname-up "_EXIT_FAILURE"))
+ (if (exist? "exit-name[1]")
+ (set! fail-exit-code (string-append
+ pname-up "_EXIT_" (get-up-name "exit-name[1]") ))
+
+ (set! tmp-val (string-append tmp-val
+ (if (> (string-length tmp-val) 1) "," "")
+ "\n " pname-up "_EXIT_FAILURE = 1" ))
+ )
+
+ (define nomem-exit-code
+ (if (exist? "nomem-fail-code")
+ (string-append pname-up "_EXIT_" (get-up-name "nomem-fail-code"))
+ fail-exit-code))
+
+ (define file-fail-exit-code
+ (if (exist? "file-fail-code")
+ (string-append pname-up "_EXIT_" (get-up-name "file-fail-code"))
+ fail-exit-code))
+
+ (if (and (exist? "exit-name") (> (string-length tmp-val) 1))
+ (set! tmp-val (string-append tmp-val ",")) )
+
+ tmp-val =][=
+
+ FOR exit-name "," =]
+ [=
+ (if (= (for-index) 66)
+ (set! need-ex-noinput #f)
+ (if (= (for-index) 70)
+ (set! need-ex-software #f) ))
+
+ pname-up =]_EXIT_[= (get-up-name "exit-name")
+ =] = [= (for-index) =][=
+ ENDFOR =][=
+ (if need-ex-noinput
+ (ag-fprintf 0 ",\n %s_EXIT_NO_CONFIG_INPUT = 66" pname-up))
+ (if need-ex-software
+ (ag-fprintf 0 ",\n %s_EXIT_LIBOPTS_FAILURE = 70" pname-up))
+=]
+} [= (. pname-down) =]_exit_code_t;[=
+
+CASE guard-option-names =][=
+!E =][=
+= full-enum =][=
+
+
+=* no-warn =]
+/*
+ * Make sure there are no #define name conflicts with the option names
+ */[=
+ FOR flag =]
+#undef [= (get-up-name "name") =][=
+ ENDFOR flag =][=
+
+* =][=
+
+ (define undef-list "\n#else /* NO_OPTION_NAME_WARNINGS */")
+ (define conf-warn-fmt (string-append
+ "\n# ifdef %1$s"
+ "\n# warning undefining %1$s due to option name conflict"
+ "\n# undef %1$s"
+ "\n# endif" ))
+
+=]
+/*
+ * Make sure there are no #define name conflicts with the option names
+ */
+#ifndef NO_OPTION_NAME_WARNINGS[=
+ FOR flag =][=
+
+ (set! opt-name (get-up-name "name"))
+ (set! undef-list (string-append undef-list "\n# undef " opt-name))
+ (sprintf conf-warn-fmt opt-name)
+ =][=
+
+ ENDFOR flag =][=
+
+ (. undef-list)=]
+#endif /* NO_OPTION_NAME_WARNINGS */
+[=
+
+ESAC on guard-option-names
+
+=]
+/* * * * * *
+ *
+ * Interface defines for specific options.
+ */[=
+
+FOR flag =][=
+ (define flag-index (for-index)) =][=
+
+ INVOKE save-name-morphs =][=
+
+ IF (set! opt-name (string-append OPT-pfx UP-name))
+ (set! descriptor (string-append UP-prefix "DESC(" UP-name ")" ))
+
+ (exist? "documentation")
+
+ =][=
+ IF (hash-ref have-cb-procs flg-name)
+=]
+#define SET_[= (string-append OPT-pfx UP-name) =] STMTS( \
+ (*([=(. descriptor)=].pOptProc))(&[=(. pname)=]Options, \
+ [=(. pname)=]Options.pOptDesc + [=(for-index)=])[=
+
+ ENDIF =][=
+ ELSE =][=
+ INVOKE option-defines =][=
+ ENDIF =][=
+ENDFOR flag
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+Autoopts maintained option values.
+
+If *any* option flag value is specified,
+then we provide flag characters for our options.
+Otherwise, we will use the INDEX_* values for the option value.
+
+There are no documentation strings because these defines
+are used identically to the user-generated VALUE defines.
+
+=][=
+
+DEFINE set-std-value =]
+#define [= (sprintf "%-23s " (string-append VALUE-pfx (get "val-UPNAME"))) =][=
+ CASE (define tmp-val (get "val-name"))
+ (get tmp-val) =][=
+ == "" =][=
+
+ (if (exist? tmp-val)
+ (if (not (exist? "long-opts"))
+ (error (sprintf "'%s' may not be empty" tmp-val))
+ (string-append INDEX-pfx (get "val-UPNAME")) )
+ (sprintf "'%s'" (get "std-value"))
+ ) =][=
+
+ == "'" =]'\''[=
+ ~~ . =]'[=(get tmp-val)=]'[=
+ * =][=(error "value (flag) codes must be single characters") =][=
+ ESAC =][=
+ENDDEF set-std-value =][=
+
+IF (exist? "flag.value") =][=
+
+ INVOKE set-std-value
+ val-name = "help-value"
+ val-UPNAME = "HELP"
+ std-value = "?" =][=
+
+ IF (not (exist? "no-libopts")) =][=
+ INVOKE set-std-value
+ val-name = "more-help-value"
+ val-UPNAME = "MORE_HELP"
+ std-value = "!" =][=
+ ENDIF don't have no-libopts ' =][=
+
+ IF (exist? "resettable") =][=
+ INVOKE set-std-value
+ val-name = "reset-value"
+ val-UPNAME = "RESET_OPTION"
+ std-value = "R" =][=
+ ENDIF have "reset" =][=
+
+ IF (exist? "version") =][=
+ INVOKE set-std-value
+ val-name = "version-value"
+ val-UPNAME = "VERSION"
+ std-value = "v" =][=
+ ENDIF have "version" =][=
+
+ IF (exist? "usage-opt") =][=
+ INVOKE set-std-value
+ val-name = "usage-value"
+ val-UPNAME = "USAGE"
+ std-value = "u" =][=
+ ENDIF have "usage-opt" =][=
+
+ IF (exist? "vendor-opt") =][=
+ INVOKE set-std-value
+ val-name = "vendor-value"
+ val-UPNAME = "VENDOR_OPT"
+ std-value = "W" =][=
+ ENDIF have "vendor-opt" =][=
+
+ IF (exist? "homerc") =][=
+
+ IF (not (exist? "disable-save")) =][=
+ INVOKE set-std-value
+ val-name = "save-opts-value"
+ val-UPNAME = "SAVE_OPTS"
+ std-value = ">" =][=
+ ELSE =]
+#define [= (sprintf "%-23s 0" (string-append VALUE-pfx "SAVE_OPTS"))
+ =][=
+ ENDIF =][=
+ IF (not (exist? "disable-load")) =][=
+ INVOKE set-std-value
+ val-name = "load-opts-value"
+ val-UPNAME = "LOAD_OPTS"
+ std-value = "<" =][=
+ ELSE =]
+#define [= (sprintf "%-23s 0" (string-append VALUE-pfx "LOAD_OPTS"))
+ =][=
+ ENDIF =][=
+ ENDIF have "homerc" =][=
+
+ELSE NO "flag.value" =]
+[=
+(set! index-fmt (string-append
+ "\n#define " VALUE-pfx "%1$-16s " INDEX-pfx "%1$s"))
+(define std-vals (lambda (std-nm)
+ (ag-fprintf 0 index-fmt std-nm) ))
+
+(if (exist? "resettable") (std-vals "RESET_OPTION"))
+(if (exist? "version") (std-vals "VERSION"))
+(std-vals "HELP")
+(if (not (exist? "no-libopts")) (std-vals "MORE_HELP"))
+(if (exist? "usage-opt") (std-vals "USAGE"))
+(if (exist? "homerc") (begin
+ (if (not (exist? "disable-save"))
+ (std-vals "SAVE_OPTS"))
+ (if (not (exist? "disable-load"))
+ (std-vals "LOAD_OPTS"))
+) ) =][=
+
+ENDIF have flag.value/not =][=
+
+IF (and (exist? "homerc") (not (exist? "disable-save")))
+
+=]
+#define SET_[=(. OPT-pfx)=]SAVE_OPTS(a) STMTS( \
+ [=(. UP-prefix)=]DESC(SAVE_OPTS).fOptState &= OPTST_PERSISTENT_MASK; \
+ [=(. UP-prefix)=]DESC(SAVE_OPTS).fOptState |= OPTST_SET; \
+ [=(. UP-prefix)=]DESC(SAVE_OPTS).optArg.argString = (char const*)(a) )[=
+ENDIF
+=][=
+
+IF (not (exist? "library"))
+
+=]
+/*
+ * Interface defines not associated with particular options
+ */
+#define ERRSKIP_[=
+
+ IF (> 1 (string-length UP-prefix))
+
+=][= (sprintf "OPTERR STMTS(%1$sOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_OPTERR STMTS(%1$sOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_OPT(n) STMTS( \\
+ %1$sOptions.curOptIdx = (n); \\
+ %1$sOptions.pzCurOpt = NULL)
+#define START_OPT RESTART_OPT(1)
+#define USAGE(c) (*%1$sOptions.pUsageProc)(&%1$sOptions, c)"
+ pname ) =][=
+
+ ELSE we have a prefix
+
+=][= (sprintf "%1$sOPTERR STMTS(%2$sOptions.fOptSet &= ~OPTPROC_ERRSTOP)
+#define ERRSTOP_%1$sOPTERR STMTS(%2$sOptions.fOptSet |= OPTPROC_ERRSTOP)
+#define RESTART_%1$sOPT(n) STMTS( \\
+ %2$sOptions.curOptIdx = (n); \\
+ %2$sOptions.pzCurOpt = NULL )
+#define START_%1$sOPT RESTART_%1$sOPT(1)
+#define %1$sUSAGE(c) (*%2$sOptions.pUsageProc)(&%2$sOptions, c)"
+
+ UP-prefix pname ) =][=
+
+ ENDIF have/don't have prefix ' =][=
+
+ENDIF is not a library
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+=][=
+(tpl-file-line extract-fmt)
+=][=
+
+IF (not (exist? "library"))
+
+=]
+#ifdef __cplusplus
+extern "C" {
+#endif
+[=INVOKE join-or-expand join-type = "export" =][=
+
+ IF (exist? "usage-message") =]
+extern void [=(. lc-prefix)=]vusage_message(char const * fmt, va_list ap);
+extern void [=(. lc-prefix)=]usage_message(char const * fmt, ...);
+[=ENDIF have usage-message =]
+
+/* * * * * *
+ *
+ * Declare the [=prog-name=] option descriptor.
+ */
+extern tOptions [=(. pname)=]Options;[=
+
+ (if (> (string-length added-hdr) 0)
+ (begin
+ (emit "\n")
+ (shellf "sort -u <<_EOF_\n%s_EOF_" added-hdr)
+ ) ) =][=
+
+ IF (not omit-nls-code) =]
+
+#if defined(ENABLE_NLS)
+# ifndef _
+# include <stdio.h>
+# ifndef HAVE_GETTEXT
+ extern char * gettext(char const *);
+# else
+# include <libintl.h>
+# endif
+
+static inline char* aoGetsText(char const* pz) {
+ if (pz == NULL) return NULL;
+ return (char*)gettext(pz);
+}
+# define _(s) aoGetsText(s)
+# endif /* _() */
+
+# define OPT_NO_XLAT_CFG_NAMES STMTS([=(. pname)=]Options.fOptSet |= \
+ OPTPROC_NXLAT_OPT_CFG;)
+# define OPT_NO_XLAT_OPT_NAMES STMTS([=(. pname)=]Options.fOptSet |= \
+ OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;)
+
+# define OPT_XLAT_CFG_NAMES STMTS([=(. pname)=]Options.fOptSet &= \
+ ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);)
+# define OPT_XLAT_OPT_NAMES STMTS([=(. pname)=]Options.fOptSet &= \
+ ~OPTPROC_NXLAT_OPT;)
+
+#else /* ENABLE_NLS */[=
+ ENDIF no-nls-support =]
+# define OPT_NO_XLAT_CFG_NAMES
+# define OPT_NO_XLAT_OPT_NAMES
+
+# define OPT_XLAT_CFG_NAMES
+# define OPT_XLAT_OPT_NAMES
+
+# ifndef _
+# define _(_s) _s
+# endif[=
+
+(if (not omit-nls-code) (emit "\n#endif /* ENABLE_NLS */")) =][=
+
+IF (exist? "die-code") =]
+
+extern void [=(. lc-prefix)=]vdie( int exit_code, char const * fmt, va_list);
+extern void [=(. lc-prefix)=]die( int exit_code, char const * fmt, ...);
+extern void [=(. lc-prefix)
+=]fserr(int exit_code, char const * op, char const * fname);[=
+
+ENDIF die-code exists =]
+
+#ifdef __cplusplus
+}
+#endif[=
+
+ENDIF this is not a lib
+
+=]
+#endif /* [=(. header-guard)=] */[=
+DEFINE join-or-expand =][=
+ IF (define join-type (get "join-type"))
+ (exist? join-type) \=]
+/*
+ * global [=(string-append join-type (if (==* join-type "inc") "d" "ed"))
+ =] definitions
+ */
+[=
+ IF
+ (set! tmp-text (join "\n\n" (stack join-type)))
+ (~* (get join-type) "^[^a-z0-9_]{2,}[ \t]+autogen5[ \t]+template")
+ =][=
+ INCLUDE (begin
+ (set! tmp-val (string-append tmp-dir "/" join-type "-text"))
+ (out-push-new tmp-val)
+ (emit tmp-text)
+ (out-pop)
+ tmp-val
+ ) =][=
+ ELSE text is not template =][=
+ (. tmp-text) =][=
+ ENDIF text is template =]
+[=ENDIF join-type =][=
+ENDDEF join-or-expand
+/*
+ * Local Variables:
+ * mode: C
+ * c-file-style: "stroustrup"
+ * indent-tabs-mode: nil
+ * End:
+ * opthead.tpl ends here */=]