diff options
Diffstat (limited to 'doc/autogen.info-2')
-rw-r--r-- | doc/autogen.info-2 | 7195 |
1 files changed, 7195 insertions, 0 deletions
diff --git a/doc/autogen.info-2 b/doc/autogen.info-2 new file mode 100644 index 0000000..ae59b42 --- /dev/null +++ b/doc/autogen.info-2 @@ -0,0 +1,7195 @@ +This is autogen.info, produced by makeinfo version 4.13 from +/old-home/bkorb/ag/ag/doc//agdoc.texi. + +This manual is for GNU AutoGen version 5.16, updated August 2012. + + Copyright (C) 1992-2012 by Bruce Korb. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. + +INFO-DIR-SECTION GNU programming tools +START-INFO-DIR-ENTRY +* AutoGen: (autogen). The Automated Program Generator +END-INFO-DIR-ENTRY + + This file documents GNU AutoGen Version 5.16. + + AutoGen copyright (C) 1992-2012 Bruce Korb AutoOpts copyright (C) +1992-2012 Bruce Korb snprintfv copyright (C) 1999-2000 Gary V. Vaughan + + AutoGen is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation, either version 3 of the License, or (at your +option) any later version. + + AutoGen is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + + You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + + +File: autogen.info, Node: opt-attr default option, Next: opt-attr documentation, Prev: opt-attr aliases, Up: option attributes + +7.5.5.9 Default Option +...................... + +If your program processes its arguments in named option mode (See +`long-opts' in *note program attributes::), then you may select *one* +of your options to be the default option. Do so by using attribute +`default' with one of the options. The option so specified must have +an `arg-type' (*note Option Arguments::) specified, but not the +`arg-optional' (*note arg-optional::) attribute. That is to say, the +option argument must be required. + + If you have done this, then any arguments that do not match an +option name and do not contain an equal sign (`=') will be interpreted +as an option argument to the default option. + + +File: autogen.info, Node: opt-attr documentation, Next: opt-attr translators, Prev: opt-attr default option, Up: option attributes + +7.5.5.10 Option Sectioning Comment +.................................. + +This attribute means the option exists for the purpose of separating +option description text in the usage output and texi documentation. +Without this attribute, every option is a separate node in the texi +docs. With this attribute, the documentation options become texi doc +nodes and the options are collected under them. Choose the name +attribute carefully because it will appear in the texi documentation. + + Libraries may also choose to make it settable so that the library can +determine which command line option is the first one that pertains to +the library. + + If the `documentation' attribute is present, then all other +attributes are disabled except `settable', `call-proc' and `flag-code'. +`settable' must be and is only specified if `call-proc', `extract-code' +or `flag-code' has been specified. When present, the `descrip' +attribute will be displayed only when the `--help' option has been +specified. It will be displayed flush to the left hand margin and may +consist of one or more lines of text, filled to 72 columns. + + The name of the option will not be printed in the help text. It +will, however, be printed as section headers in the texi documentation. +If the attribute is given a non-empty value, this text will be +reproduced in the man page and texi doc immediately after the `descrip' +text. + + +File: autogen.info, Node: opt-attr translators, Prev: opt-attr documentation, Up: option attributes + +7.5.5.11 Translator Notes +......................... + +If you need to give the translators a special note about a particular +option, please use the "`translators'" attribute. The attribute text +will be emitted into the generated `.c' text where the option related +strings get defined. To make a general comment about all of the option +code, add comments to an `include' attribute (*note program +attributes::). Do *not* use this attribute globally, or it will get +emitted into every option definition block. + + +File: autogen.info, Node: Option Arguments, Next: Option Argument Handling, Prev: option attributes, Up: Option Definitions + +7.5.6 Option Argument Specification +----------------------------------- + +Command line options come in three flavors: options that do not take +arguments, those that do and those that may. Without an "arg-type" +attribute, AutoOpts will not process an argument to an option. If +"arg-type" is specified and "arg-optional" is also specified, then the +next command line token will be taken to be an argument, unless it +looks like the name of another option. + + If the argument type is specified to be anything other than +"str[ing]", then AutoOpts will specify a callback procedure to handle +the argument. Some of these procedures will be created and inserted +into the generated `.c' file, and others are already built into the +`libopts' library. Therefore, if you write your own callback procedure +(*note Option Argument Handling::), then you must either not specify an +"arg-type" attribute, or else specify it to be of type "str[ing]". Your +callback function will be able to place its own restrictions on what +that string may contain or represent. + + Option argument handling attributes depend upon the value set for the `arg-type' +attribute. It specifies the type of argument the option will take. If +not present, the option cannot take an argument. If present, it must +be an entry in the following table. The first three letters is +sufficient. + +* Menu: + +* arg-type string:: Arg Type String +* arg-type number:: Arg Type Number +* arg-type boolean:: Arg Type Boolean +* arg-type keyword:: Arg Type Keyword +* arg-type set membership:: Arg Type Set Membership +* arg-type hierarchy:: Arg Type Hierarchical +* arg-type file name:: Arg Type File Name +* arg-type time-duration:: Arg Type Time Duration +* arg-type time-date:: Arg Type Time and Date + +Supporting attributes for particular argument types: + +* arg-keyword:: Keyword list +* arg-optional:: Option Argument Optional +* arg-default:: Default Option Argument Value + + +File: autogen.info, Node: arg-type string, Next: arg-type number, Up: Option Arguments + +7.5.6.1 Arg Type String +....................... + +`arg-type = string;' + + The argument may be any arbitrary string, though your program or +option callback procedure may place additional constraints upon it. + + +File: autogen.info, Node: arg-type number, Next: arg-type boolean, Prev: arg-type string, Up: Option Arguments + +7.5.6.2 Arg Type Number +....................... + +`arg-type = number;' + + The argument must be a correctly formed integer, without any +trailing U's or L's. AutoOpts contains a library procedure to convert +the string to a number. If you specify range checking with `arg-range' +(see below), then AutoOpts produces a special purpose procedure for +this option. + +`scaled' + `scaled' marks the option so that suffixes of `k', `K', `m', `M', + `g', `G', `t', and `T' will multiply the given number by a power + of 1000 or 1024. Lower case letters scale by a power of 1000 and + upper case scale by a power of 1024. + +`arg-range' + `arg-range' is used to create a callback procedure for validating + the range of the option argument. It must match one of the range + entries. Each `arg-range' should consist of either an integer by + itself or an integer range. The integer range is specified by one + or two integers separated by the two character sequence, `->'. Be + sure to quote the entire range string. The definitions parser + will not accept the range syntax as a single string token. + + The generated procedure imposes the range constraints as follows: + * A number by itself will match that one value. + + * The high end of the range may not be `INT_MIN', both for + obvious reasons and because that value is used to indicate a + single-valued match. + + * An omitted lower value implies a lower bound of INT_MIN. + + * An omitted upper value implies a upper bound of INT_MAX. + + * The argument value is required. It may not be optional. + + * The value must match one of the entries. If it can match + more than one, then you have redundancies, but no harm will + come of it. + + +File: autogen.info, Node: arg-type boolean, Next: arg-type keyword, Prev: arg-type number, Up: Option Arguments + +7.5.6.3 Arg Type Boolean +........................ + +`arg-type = boolean;' + + The argument will be interpreted and always yield either AG_TRUE or +AG_FALSE. False values are the empty string, the number zero, or a +string that starts with `f', `F', `n' or `N' (representing False or +No). Anything else will be interpreted as True. + + +File: autogen.info, Node: arg-type keyword, Next: arg-type set membership, Prev: arg-type boolean, Up: Option Arguments + +7.5.6.4 Arg Type Keyword +........................ + +`arg-type = keyword;' + + The argument must match a specified list of strings (*note +arg-keyword::). Assuming you have named the option, `optn-name', the +strings will be converted into an enumeration of type `te_Optn_Name' +with the values `OPTN_NAME_KEYWORD'.* If you have *not* specified a +default value, the value `OPTN_NAME_UNDEFINED' will be inserted with +the value zero. The option will be initialized to that value. You may +now use this in your code as follows: + + te_Optn_Name opt = OPT_VALUE_OPTN_NAME; + switch (opt) { + case OPTN_NAME_UNDEFINED: /* undefined things */ break; + case OPTN_NAME_KEYWORD: /* `keyword' things */ break; + default: /* utterly impossible */ ; + } + + AutoOpts produces a special purpose procedure for this option. You +may not specify an alternate handling procedure. + + If you have need for the string name of the selected keyword, you +may obtain this with the macro, `OPT_OPTN_NAME_VAL2STR(val)'. The +value you pass would normally be `OPT_VALUE_OPTN_NAME', but anything +with numeric value that is legal for `te_Optn_Name' may be passed. +Anything out of range will result in the string, `"*INVALID*"' being +returned. The strings are read only. It may be used as in: + + te_Optn_Name opt = OPT_VALUE_OPTN_NAME; + printf( "you selected the %s keyword\n", + OPT_OPTN_NAME_VAL2STR(opt) ); + + * Note: you may replace the `OPTN_NAME' enumeration prefix with +another prefix by specifying a `prefix-enum' attribute. + + Finally, users may specify the argument either by name or by number. +Since the numeric equivalents change by having new entries inserted +into the keyword list, this would not be a recommended practice. +However, either `-1' or `~0' will always be equivalent to specifying +the last keyword. + + +File: autogen.info, Node: arg-type set membership, Next: arg-type hierarchy, Prev: arg-type keyword, Up: Option Arguments + +7.5.6.5 Arg Type Set Membership +............................... + +`arg-type = set;' + + The argument must be a list of names each of which must match the +strings "`all'", "`none'" or one of the keywords (*note arg-keyword::) +specified for this option. `all' will turn on all membership bits and +`none' will turn them all off. Specifying one of the keywords will turn +on the corresponding set membership bit. Literal numbers may also be +used and may, thereby, set or clear more than one bit. Preceding a +keyword or literal number with a bang (`!' - exclamation point) will +turn the bit(s) off. The number of keywords allowed is constrained by +the number of bits in a pointer, as the bit set is kept in a `void*'. + + If, for example, you specified `first' in your list of keywords, +then you can use the following code to test to see if either `first' or +`all' was specified: + + uintptr_t opt = OPT_VALUE_OPTN_NAME; + if (opt & OPTN_NAME_FIRST) + /* OPTN_NAME_FIRST bit was set */ ; + + AutoOpts produces a special purpose procedure for this option. To +set multiple bits as the default (initial) value, you must specify an +initial numeric value (which might become inaccurate over time), or +else specify `arg-default' multiple times. Do not specify a series of +names conjoined with `+' symbols as the value for any of the +`arg-default' attributes. That works for option parsing, but not for +the option code generation. + + +File: autogen.info, Node: arg-type hierarchy, Next: arg-type file name, Prev: arg-type set membership, Up: Option Arguments + +7.5.6.6 Arg Type Hierarchical +............................. + +`arg-type = hierarchy;' +`arg-type = nested;' + + This denotes an option with a structure-valued argument, a.k.a. +"subopts" in `getopts' terminology. The argument is parsed and the +values made available to the program via the find and find next calls +(*Note libopts-optionFindValue::, *Note libopts-optionGetValue::, and +*note libopts-optionFindNextValue::). + + tOptionValue * val = optionGetValue(VALUE_OPT_OPTN_NAME, "name"); + while (val != NULL) { + process(val); + val = optionNextValue(VALUE_OPT_OPTN_NAME, val); + if (wrong_name(val, "name")) + break; + } + + +File: autogen.info, Node: arg-type file name, Next: arg-type time-duration, Prev: arg-type hierarchy, Up: Option Arguments + +7.5.6.7 Arg Type File Name +.......................... + +`arg-type = file;' + + This argument type will have some validations on the argument and, +optionally, actually open the file. You must specify several additonal +attributes for the option: + +`file-exists' + If not specified or empty, then the directory portion of the name + is checked. The directory must exist or the argument is rejected + and the usage procedure is invoked. + + Otherwise, both the directory as above and the full name is tested + for existence. If the value begins with the two letters "no", + then the file must not pre-exist. Otherwise, the file is expected + to exist. + +`open-file' + If not specified or empty, the file is left alone. If the value + begins with the four letters "desc"[riptor], then `open(2)' is + used and `optArg.argFd' is set. Otherwise, the file is opened + with `fopen' and `optArg.argFp' is set. + +`file-mode' + If "open-file" is set and not empty, then you must specify the + open mode. Set the value to the flag bits or mode string as + appropriate for the open type. + + +File: autogen.info, Node: arg-type time-duration, Next: arg-type time-date, Prev: arg-type file name, Up: Option Arguments + +7.5.6.8 Arg Type Time Duration +.............................. + +`arg-type = time-duration;' + + The argument will be converted into a number of seconds. It may be +a multi-part number with different parts being multiplied into a seconds +value and added into the final result. Valid forms are in the table +below. Upper cased letters represent numbers that must be used in the +expressions. + +`[[HH:]MM:]SS' + `HH' is multiplied by `3600' and `MM' multiplied by `60' before + they are added to `SS'. This time specification may not be + followed by any other time specs. `HH' and `MM' are both optional, + though `HH' cannot be specified without `MM'. + +`DAYS d' + `DAYS' is multiplied by the number of seconds in a day. This + value may be followed by (and added to) values specified by + `HH:MM:SS' or the suffixed values below. If present, it must + always be first. + +`HRS h' + `HRS' is multiplied by the number of seconds in an hour. This + value may be followed by (and added to) values specified by + `MM:SS' or the suffixed values below. + +`MINS m' + `MINS' is multiplied by the number of seconds in a minute. This + value may be followed by (and added to) a count of seconds. + +`SECS s' + This value can only be the last value in a time specification. + The `s' suffix is optional. + + 5 d 1:10:05 ==> 5 days + 1 hour 10 minutes and 5 seconds + 5 d 1 h 10 m 5 ==> yields: 436205 seconds + 5d1h10m5s ==> same result -- spaces are optional. + + When saved into a config file, the value will be stored as a simple +count of seconds. There are actually more (many) accepted time +duration strings. The full documentation can be found with ISO-8601 +documentation and the more extedded documentation when +"parse_duration()" becomes more widely available. + + +File: autogen.info, Node: arg-type time-date, Next: arg-keyword, Prev: arg-type time-duration, Up: Option Arguments + +7.5.6.9 Arg Type Time and Date +.............................. + +`arg-type = time-date;' + + The argument will be converted into the number of seconds since the +epoch. The conversion rules are very complicated, please see the +`getdate_r(3GNU)' man page. There are some additional restrictions: + + 1. Your project must be compiled with `PKGDATADIR' defined and naming + a valid directory. + + 2. The `DATEMSK' environment variable will be set to the `datemsk' + file within that directory. + + If that file is not accessible for any reason, the string will be +parsed as a time duration (*note arg-type time-duration::) instead of a +specific date and time. + + +File: autogen.info, Node: arg-keyword, Next: arg-optional, Prev: arg-type time-date, Up: Option Arguments + +7.5.6.10 Keyword list +..................... + +If the `arg-type' is `keyword' (*note arg-type keyword::) or +`set-membership' (*note arg-type set membership::), then you must +specify the list of keywords by a series of `keyword' entries. The +interface file will contain values for `<OPTN_NAME>_<KEYWORD>' for each +keyword entry. `keyword' option types will have an enumeration and +`set-membership' option types will have a set of unsigned bits +`#define'-d. + + If the `arg-type' is specifically `keyword', you may also add +special handling code with a `extra-code' attribute. After +`optionEnumerationVal' has converted the input string into an +enumeration, you may insert code to process this enumeration value +(`pOptDesc->optArg.argEnum'). + + +File: autogen.info, Node: arg-optional, Next: arg-default, Prev: arg-keyword, Up: Option Arguments + +7.5.6.11 Option Argument Optional +................................. + +This attribute indicates that the user does not have to supply an +argument for the option. This is only valid if the ARG-TYPE is `string' +(*note arg-type string::) or `keyword' (*note arg-type keyword::). If +it is `keyword', then this attribute may also specify the default +keyword to assume when the argument is not supplied. If left empty, +ARG-DEFAULT (*note arg-default::) or the zero-valued keyword will be +used. + + This is overridden and the options are required if the libopts +library gets configured with `--disable-optional-args'. + + +File: autogen.info, Node: arg-default, Prev: arg-optional, Up: Option Arguments + +7.5.6.12 Default Option Argument Value +...................................... + +This specifies the default option argument value to be used when the +option is not specified or preset. You may specify multiple +`arg-default' values if the argument type is `set membership'. + + +File: autogen.info, Node: Option Argument Handling, Next: Internationalizing Options, Prev: Option Arguments, Up: Option Definitions + +7.5.7 Option Argument Handling +------------------------------ + +AutoOpts will either specify or automatically generate callback +procedures for options that take specialized arguments. The only +option argument types that are not specialized are plain string +arguments and no argument at all. For options that fall into one of +those two categories, you may specify your own callback function, as +specified below. If you do this and if you specify that options are +resettable (*note automatic options::), then your option handling code +*must* look for the `OPTST_RESET' bit in the `fOptState' field of the +option descriptor. + + If the option takes a string argument, then you may specify that the +option is to be handled by the `libopts' library procedures +`stackOptArg()' or `unstackOptArg()' (see below). In this case, you +may not provide option handling code. + + Finally, `documentation' options (*note opt-attr documentation::) may +also be marked as `settable' (*note opt-attr settable::) and have +special callback functions (either `flag-code', `extract-code', or +`call-proc'). + +`flag-code' + statements to execute when the option is encountered. This may be + used in conjunction with option argument types that cause AutoOpts + to emit handler code. If you do this, the `flag-code' with index + zero (0) is emitted into the handler code _before_ the argument is + handled, and the entry with index one (1) is handled afterward. + + The generated procedure will be laid out something like this: + + static void + doOpt<name>(tOptions* pOptions, tOptDesc* pOptDesc) + { + <flag-code[0]> + <AutoOpts defined handler code> + <flag-code[1]> + } + + Only certain fields within the `tOptions' and `tOptDesc' + structures may be accessed. *Note Option Processing Data::. When + writing this code, you must be very careful with the `pOptions' + pointer. The handler code is called with this pointer set to + special values for handling special situations. Your code must + handle them. As an example, look at `optionEnumerationVal' in + `enum.c'. + +`extract-code' + This is effectively identical to `flag-code', except that the + source is kept in the output file instead of the definitions file + and you cannot use this in conjunction with options with arguments, + other than string arguments. + + A long comment is used to demarcate the code. You must not modify + that marker. Before regenerating the option code file, the old + file is renamed from MUMBLE.c to MUMBLE.c.save. The template will + be looking there for the text to copy into the new output file. + +`call-proc' + external procedure to call when option is encountered. The calling + sequence must conform to the sequence defined above for the + generated procedure, `doOpt<name>'. It has the same restrictions + regarding the fields within the structures passed in as arguments. + *Note Option Processing Data::. + +`flag-proc' + Name of another option whose `flag-code' can be executed when this + option is encountered. + +`stack-arg' + Call a special library routine to stack the option's arguments. + Special macros in the interface file are provided for determining + how many of the options were found (`STACKCT_OPT(NAME)') and to + obtain a pointer to a list of pointers to the argument values + (`STACKLST_OPT(NAME)'). Obviously, for a stackable argument, the + `max' attribute (*note Common Attributes::) needs to be set higher + than `1'. + + If this stacked argument option has a disablement prefix, then the + entire stack of arguments will be cleared by specifying the option + with that disablement prefix. + +`unstack-arg' + Call a special library routine to remove ("unstack") strings from + a `stack-arg' option stack. This attribute must name the option + that is to be "unstacked". Neither this option nor the stacked + argument option it references may be equivalenced to another + option. + + +File: autogen.info, Node: Internationalizing Options, Next: documentation attributes, Prev: Option Argument Handling, Up: Option Definitions + +7.5.8 Internationalizing Options +-------------------------------- + +Normally, AutoOpts produces usage text that is difficult to translate. +It is pieced together on the fly using words and phrases scattered +around here and there, piecing together toe document. This does not +translate well. + + Incorporated into this package are some ways around the problem. +First, you should specify the `full-usage' and `short-usage' program +attributes (*note program attributes::). This will enable your +translators to translate the usage text as a whole. + + Your translators will also be able to translate long option names. +The option name translations will then become the names searched for +both on the command line and in configuration files. However, it will +not affect the names of environment variable names used to configure +your program. + + If it is considered desireable to keep configuration files in the "C" +locale, then several macros are available to suppress or delay the +translations of option names at run time. These are all disabled if +`ENABLE_NLS' is not defined at compile time or if `no-xlate' has been +set to the value _anything_. These macros *must* be invoked before the +first invocation of `optionProcess'. + +`OPT_NO_XLAT_CFG_NAMES;' +`OPT_XLAT_CFG_NAMES;' + Disable (or enable) the translations of option names for + configuration files. If you enable translation for config files, + then they will be translated for command line options. + +`OPT_NO_XLAT_OPT_NAMES;' +`OPT_XLAT_OPT_NAMES;' + Disable (or enable) the translations of option names for command + line processing. If you disable the translation for command line + processing, you will also disable it for configuration file + processing. Once translated, the option names will remain + translated. + + +File: autogen.info, Node: documentation attributes, Next: automatic options, Prev: Internationalizing Options, Up: Option Definitions + +7.5.9 Man and Info doc Attributes +--------------------------------- + +AutoOpts includes AutoGen templates for producing abbreviated man pages +and for producing the invoking section of an info document. To take +advantage of these templates, you must add several attributes to your +option definitions. + +`arg-name' + If an option has an argument, the argument should have a name for + documentation purposes. It will default to `arg-type', but it + will likely be clearer with something else like, `file-name' + instead of `string' (the type). + +`doc' + First, every `flag' definition _other than_ "documentation" + definitions, must have a `doc' attribute defined. If the option + takes an argument, then it will need an `arg-name' attribute as + well. The `doc' text should be in plain sentences with minimal + formatting. The Texinfo commands `@code', and `@var' will have + its enclosed text made into *\fB* entries in the man page, and the + `@file' text will be made into *\fI* entries. The `arg-name' + attribute is used to display the option's argument in the man page. + + Options marked with the "documentation" attribute are for + documenting the usage text. All other options should have the + "doc" attribute in order to document the usage of the option in + the generated man pages. + +`option-info' + This text will be inserted as a lead-in paragraph in the `OPTIONS' + section of the generated man page. + +`doc-section' + This is a compound attribute that requires three subattributes: + ds-type + This describes the section type. Basically, the title of the + section that will be added to all output documentation. + There may be only one `doc-section' for any given `ds-type'. + If there are duplicates, the results are undefined (it might + work, it might not). + + There are five categories of `ds-type' sections. They are + those that the documentation templates would otherwise: + 1. always create itself, ignoring any `ds-type's by this + name. These are marked, below, as `ao-only'. + + 2. create, if none have been provided. These are marked, + `alternate'. + + 3. create, but augment if the `doc-section' was provided. + These are marked, `augments'. + + 4. do nothing, but inserts them into the output in a + prescribed order. These are marked, `known' + + 5. knows nothing about them. They will be alphabetized and + inserted after the list of leading sections and before + the list of trailing sections. These are not marked + because I don't know their names. + + Some of these are emitted by the documentation templates only + if certain conditions are met. If there are conditions, they + are explained below. If there are no conditions, then you + will always see the named section in the output. + + The output sections will appear in this order: + `NAME' + `ao-only'. + + `SYNOPSIS' + `alternate'. + + `DESCRIPTION' + `augments'. + + `OPTIONS' + `ao-only'. + + `OPTION PRESETS' + `ao-only', if environment presets or configuration file + processing has been specified. + + `unknown' + At this point, the unknown, alphabetized sections are + inserted. + + `IMPLEMENTATION NOTES' + `known' + + `ENVIRONMENT' + `augments', if environment presets have been specified. + + `FILES' + `augments', if configuration file processing has been + specified. + + `EXAMPLES' + `known' + + `EXIT STATUS' + `augments'. + + `ERRORS' + `known' + + `COMPATIBILITY' + `known' + + `SEE ALSO' + `known' + + `CONFORMING TO' + `known' + + `HISTORY' + `known' + + `AUTHORS' + `alternate', if the `copyright' stanza has either an + `author' or an `owner' attribute. + + `COPYRIGHT' + `alternate', if there is a `copyright' stanza. + + `BUGS' + `augments', if the `copyright' stanza has an `eaddr' + attribute. + + `NOTES' + `augments'. + + ds-format + This describes the format of the associated `ds-text' section. + `man', `mdoc' and `texi' formats are supported. Regardless + of the chosen format, the formatting tags in the output text + will be converted to `man' macros for `man' pages, `mdoc' + macros for `mdoc' pages, and `texi' macros for `texinfo' + pages. + + ds-text + This is the descriptive text, written according to the rules + for `ds-format' documents. + + Here is an example of a "doc-section" for a "SEE ALSO" type. + + doc-section = { + ds-type = 'SEE ALSO'; // or anything else + ds-format = 'man'; // or texi or mdoc format + ds-text = <<-_EOText_ + text relevant to this section type, + in the chosen format + _EOText_; + }; + +`prog-man-descrip' +`prog-info-descrip' + These attributes are now deprecated. Please use a `doc-section' + stanza with a `ds-type' attribute set to `DESCRIPTION' instead. + +`detail' + This attribute is used to add a very short explanation about what + a program is used for when the "title" attribute is insufficient. + If there is no "doc-section" stanza of type "DESCRIPTION", then + this text is used for the man page DESCRIPTION section, too. + + +File: autogen.info, Node: automatic options, Next: standard options, Prev: documentation attributes, Up: Option Definitions + +7.5.10 Automatically Supported Options +-------------------------------------- + +AutoOpts provides automated support for several options. `help' and +`more-help' are always provided. The others are conditional upon +various global program attributes being defined *Note program +attributes::. + + Below are the option names and default flag values. The flags are +activated if and only if at least one user-defined option also uses a +flag value. The long names are supported as option names if +`long-opts' has been specified. These option flags may be deleted or +changed to characters of your choosing by specifying `xxx-value = +"y";', where `xxx' is one of the option names below and `y' is either +empty or the character of your choice. For example, to change the help +flag from `?' to `h', specify `help-value = "h";'; and to require that +`save-opts' be specified only with its long option name, specify `save-opts-value += "";'. + + Additionally, the procedure that prints out the program version may +be replaced by specifying `version-proc'. This procedure must be +defined to be of external scope (non-static). By default, the AutoOpts +library provides `optionPrintVersion' and it will be the specified +callback function in the option definition structure. + + With the exception of the `load-opts' option, none of these +automatically supported options will be recognized in configuration +files or environment variables. + +`help -?' + This option will immediately invoke the `USAGE()' procedure and + display the usage line, a description of each option with its + description and option usage information. This is followed by the + contents of the definition of the `detail' text macro. + +`more-help -!' + This option is identical to the `help' option, except that the + output is passed through a pager program. (`more' by default, or + the program identified by the `PAGER' environment variable.) + +`usage -u' + This option must be requested by specifying, `usage-opt' in the + option definition file. It will produce abbreviated help text to + `stdout' and exit with zero status (`EXIT_SUCCESS'). + +`version -v' + This will print the program name, title and version. If it is + followed by the letter `c' and a value for `copyright' and `owner' + have been provided, then the copyright will be printed, too. If + it is followed by the letter `n', then the full copyright notice + (if available) will be printed. The `version' attribute must be + specified in the option definition file. + +`load-opts -<' + This option will load options from the named file. They will be + treated exactly as if they were loaded from the normally found + configuration files, but will not be loaded until the option is + actually processed. This can also be used within another + configuration file, causing them to nest. This is the *only* + automatically supported option that can be activated inside of + config files or with environment variables. + + Specifying the negated form of the option (`--no-load-opts') will + suppress the processing of configuration files and environment + variables. + + This option is activated by specifying one or more `homerc' + attributes. + +`save-opts ->' + This option will cause the option state to be printed in the + configuration file format when option processing is done but not + yet verified for consistency. The program will terminate + successfully without running when this has completed. Note that + for most shells you will have to quote or escape the flag + character to restrict special meanings to the shell. + + The output file will be the configuration file name (default or + provided by `rcfile') in the last directory named in a `homerc' + definition. + + This option may be set from within your program by invoking the + "`SET_OPT_SAVE_OPTS(filename)'" macro (*note SET_OPT_name::). + Invoking this macro will set the file name for saving the option + processing state, but the state will *not* actually be saved. You + must call `optionSaveFile' to do that (*note + libopts-optionSaveFile::). *CAVEAT:* if, after invoking this + macro, you call `optionProcess', the option processing state will + be saved to this file and `optionProcess' will not return. You + may wish to invoke `CLEAR_OPT( SAVE_OPTS )' (*note CLEAR_OPT::) + beforehand if you do need to reinvoke `optionProcess'. + + This option is activated by specifying one or more `homerc' + attributes. + +`reset-option -R' + This option takes the name of an option for the current program + and resets its state such that it is set back to its original, + compile-time initialized value. If the option state is + subsequently stored (via `--save-opts'), the named option will not + appear in that file. + + This option is activated by specifying the `resettable' attribute. + + *BEWARE*: If the `resettable' attribute is specified, all option + callbacks *must* look for the `OPTST_RESET' bit in the `fOptState' + field of the option descriptor. If set, the `optCookie' and + `optArg' fields will be unchanged from their last setting. When + the callback returns, these fields will be set to their original + values. If you use this feature and you have allocated data + hanging off of the cookie, you need to deallocate it. + + +File: autogen.info, Node: standard options, Prev: automatic options, Up: Option Definitions + +7.5.11 Library of Standard Options +---------------------------------- + +AutoOpts has developed a set of standardized options. You may +incorporate these options in your program simply by _first_ adding a +`#define' for the options you want, and then the line, + + #include stdoptions.def + +in your option definitions. The supported options are specified thus: + + #define DEBUG + #define DIRECTORY + #define DRY_RUN + #define INPUT + #define INTERACTIVE + #define OUTPUT + #define WARN + + #define SILENT + #define QUIET + #define BRIEF + #define VERBOSE + + By default, only the long form of the option will be available. To +specify the short (flag) form, suffix these names with `_FLAG'. e.g., + + #define DEBUG_FLAG + + `--silent', `--quiet', `--brief' and `--verbose' are related in that +they all indicate some level of diagnostic output. These options are +all designed to conflict with each other. Instead of four different +options, however, several levels can be incorporated by `#define'-ing +`VERBOSE_ENUM'. In conjunction with `VERBOSE', it incorporates the +notion of 5 levels in an enumeration: `silent', `quiet', `brief', +`informative' and `verbose'; with the default being `brief'. + + Here is an example program that uses the following set of +definitions: + + AutoGen Definitions options; + + prog-name = default-test; + prog-title = 'Default Option Example'; + homerc = '$$/../share/default-test', '$HOME', '.'; + environrc; + long-opts; + gnu-usage; + usage-opt; + version = '1.0'; + main = { + main-type = shell-process; + }; + #define DEBUG_FLAG + #define WARN_FLAG + #define WARN_LEVEL + #define VERBOSE_FLAG + #define VERBOSE_ENUM + #define DRY_RUN_FLAG + #define OUTPUT_FLAG + #define INPUT_FLAG + #define DIRECTORY_FLAG + #define INTERACTIVE_FLAG + #include stdoptions.def + +Running a few simple commands on that definition file: + + autogen default-test.def + copts="-DTEST_DEFAULT_TEST_OPTS `autoopts-config cflags`" + lopts="`autoopts-config ldflags`" + cc -o default-test ${copts} default-test.c ${lopts} + +Yields a program which, when run with `--help', prints out: + + default-test - Default Option Example - Ver. 1.0 + USAGE: default-test [ -<flag> [<val>] | --<name>[{=| }<val>] ]... + + + The following options are commonly used and are provided and supported + by AutoOpts: + + -D, --debug run program with debugging info + -V, --verbose=KWd run program with progress info + -w, --warn=num specify a warning-level threshhold + - disabled as --no-warn + -R, --dry-run program will make no changes + -I, --interactive=str prompt for confirmation + -i, --input=str redirect input from file + -o, --output=str redirect output to file + -d, --directory=str use specified dir for I/O + + version, usage and configuration options: + + -v, --version[=arg] Output version information and exit + -?, --help Display extended usage information and exit + -!, --more-help Extended usage information passed thru pager + -u, --usage Abbreviated usage to stdout + ->, --save-opts[=arg] Save the option state to a config file + -<, --load-opts=str Load options from a config file + - disabled as --no-load-opts + - may appear multiple times + + Options are specified by doubled hyphens and their name or by a single + hyphen and the flag character. + + The following option preset mechanisms are supported: + - reading file $$/../share/default-test + - reading file $HOME/.default_testrc + - reading file ./.default_testrc + - examining environment variables named DEFAULT_TEST_* + + The valid "verbose" option keywords are: + silent quiet brief informative verbose + or an integer from 0 through 4 + Packaged by Bruce (2012-08-11) + Report default_test bugs to bkorb@gnu.org + + +File: autogen.info, Node: AutoOpts API, Next: Multi-Threading, Prev: Option Definitions, Up: AutoOpts + +7.6 Programmatic Interface +========================== + +The user interface for access to the argument information is completely +defined in the generated header file and in the portions of the +distributed file "options.h" that are marked "public". + + In the following macros, text marked `<NAME>' or `name' is the name +of the option *in upper case* and *segmented with underscores `_'*. +The macros and enumerations defined in the options header (interface) +file are used as follows: + + To see how these `#define' macros are used in a program, the reader +is referred to the several `opts.h' files included with the AutoGen +sources. + +* Menu: + +* Option Processing Data:: Data for Option Processing +* CLEAR_OPT:: CLEAR_OPT( <NAME> ) - Clear Option Markings +* COUNT_OPT:: COUNT_OPT( <NAME> ) - Definition Count +* DESC:: DESC( <NAME> ) - Option Descriptor +* DISABLE_OPT_name:: DISABLE_OPT_name - Disable an option +* ENABLED_OPT:: ENABLED_OPT( <NAME> ) - Is Option Enabled? +* ERRSKIP_OPTERR:: ERRSKIP_OPTERR - Ignore Option Errors +* ERRSTOP_OPTERR:: ERRSTOP_OPTERR - Stop on Errors +* HAVE_OPT:: HAVE_OPT( <NAME> ) - Have this option? +* ISSEL_OPT:: ISSEL_OPT( <NAME> ) - Is Option Selected? +* ISUNUSED_OPT:: ISUNUSED_OPT( <NAME> ) - Never Specified? +* OPTION_CT:: OPTION_CT - Full Count of Options +* OPT_ARG:: OPT_ARG( <NAME> ) - Option Argument String +* OPT_NO_XLAT_CFG_NAMES:: OPT_NO_XLAT_CFG_NAMES - option name xlation +* OPT_NO_XLAT_OPT_NAMES:: OPT_NO_XLAT_OPT_NAMES - option name xlation +* OPT_VALUE_name:: OPT_VALUE_name - Option Argument Value +* OPT_XLAT_CFG_NAMES:: OPT_XLAT_CFG_NAMES - option name xlation +* OPT_XLAT_OPT_NAMES:: OPT_XLAT_OPT_NAMES - option name xlation +* RESTART_OPT:: RESTART_OPT( n ) - Resume Option Processing +* SET_OPT_name:: SET_OPT_name - Force an option to be set +* STACKCT_OPT:: STACKCT_OPT( <NAME> ) - Stacked Arg Count +* STACKLST_OPT:: STACKLST_OPT( <NAME> ) - Argument Stack +* START_OPT:: START_OPT - Restart Option Processing +* STATE_OPT:: STATE_OPT( <NAME> ) - Option State +* USAGE:: USAGE( exit-code ) - Usage invocation macro +* VALUE_OPT_name:: VALUE_OPT_name - Option Flag Value +* VERSION:: VERSION - Version and Full Version +* WHICH_IDX_name:: WHICH_IDX_name - Which Equivalenced Index +* WHICH_OPT_name:: WHICH_OPT_name - Which Equivalenced Option +* teOptIndex:: teOptIndex - Option Index and Enumeration +* OPTIONS_STRUCT_VERSION:: OPTIONS_STRUCT_VERSION - active version +* libopts procedures:: libopts External Procedures + + +File: autogen.info, Node: Option Processing Data, Next: CLEAR_OPT, Up: AutoOpts API + +7.6.1 Data for Option Processing +-------------------------------- + +This section describes the data that may be accessed from within the +option processing callback routines. The following fields may be used +in the following ways and may be used for read only. The first set is +addressed from the `tOptDesc*' pointer: + +`optIndex' + +`optValue' + These may be used by option procedures to determine which option + they are working on (in case they handle several options). + +`optActualIndex' + +`optActualValue' + These may be used by option procedures to determine which option + was used to set the current option. This may be different from + the above if the options are members of an equivalence class. + +`optOccCt' + If AutoOpts is processing command line arguments, then this value + will contain the current occurrence count. During the option + preset phase (reading configuration files and examining + environment variables), the value is zero. + +`fOptState' + The field may be tested for the following bit values (prefix each + name with `OPTST_', e.g. `OPTST_INIT'): + + `INIT' + Initial compiled value. As a bit test, it will always yield + FALSE. + + `SET' + The option was set via the `SET_OPT()' macro. + + `PRESET' + The option was set via a configuration file. + + `DEFINED' + The option was set via a command line option. + + `SET_MASK' + This is a mask of flags that show the set state, one of the + above four values. + + `EQUIVALENCE' + This bit is set when the option was selected by an + equivalenced option. + + `DISABLED' + This bit is set if the option is to be disabled. (Meaning it + was a long option prefixed by the disablement prefix, or the + option has not been specified yet and initializes as + `disabled'.) + + As an example of how this might be used, in AutoGen I want to allow + template writers to specify that the template output can be left + in a writable or read-only state. To support this, there is a + Guile function named `set-writable' (*note SCM set-writable::). + Also, I provide for command options `--writable' and + `--not-writable'. I give precedence to command line and RC file + options, thus: + + switch (STATE_OPT( WRITABLE )) { + case OPTST_DEFINED: + case OPTST_PRESET: + fprintf(stderr, zOverrideWarn, pCurTemplate->pzFileName, + pCurMacro->lineNo); + break; + + default: + if (gh_boolean_p( set ) && (set == SCM_BOOL_F)) + CLEAR_OPT( WRITABLE ); + else + SET_OPT_WRITABLE; + } + +`pzLastArg' + Pointer to the latest argument string. BEWARE If the argument type + is numeric, an enumeration or a bit mask, then this will be the + argument *value* and not a pointer to a string. + + The following two fields are addressed from the `tOptions*' pointer: + +`pzProgName' + Points to a NUL-terminated string containing the current program + name, as retrieved from the argument vector. + +`pzProgPath' + Points to a NUL-terminated string containing the full path of the + current program, as retrieved from the argument vector. (If + available on your system.) + + + Note these fields get filled in during the first call to +`optionProcess()'. All other fields are private, for the exclusive use +of AutoOpts code and are subject to change. + + +File: autogen.info, Node: CLEAR_OPT, Next: COUNT_OPT, Prev: Option Processing Data, Up: AutoOpts API + +7.6.2 CLEAR_OPT( <NAME> ) - Clear Option Markings +------------------------------------------------- + +Make as if the option had never been specified. `HAVE_OPT(<NAME>)' +will yield `FALSE' after invoking this macro. + + +File: autogen.info, Node: COUNT_OPT, Next: DESC, Prev: CLEAR_OPT, Up: AutoOpts API + +7.6.3 COUNT_OPT( <NAME> ) - Definition Count +-------------------------------------------- + +This macro will tell you how many times the option was specified on the +command line. It does not include counts of preset options. + + if (COUNT_OPT( NAME ) != desired-count) { + make-an-undesirable-message. + } + + +File: autogen.info, Node: DESC, Next: DISABLE_OPT_name, Prev: COUNT_OPT, Up: AutoOpts API + +7.6.4 DESC( <NAME> ) - Option Descriptor +---------------------------------------- + +This macro is used internally by other AutoOpt macros. It is not for +general use. It is used to obtain the option description corresponding +to its *UPPER CASED* option name argument. This is primarily used in +other macro definitions. + + +File: autogen.info, Node: DISABLE_OPT_name, Next: ENABLED_OPT, Prev: DESC, Up: AutoOpts API + +7.6.5 DISABLE_OPT_name - Disable an option +------------------------------------------ + +This macro is emitted if it is both settable and it can be disabled. +If it cannot be disabled, it may always be CLEAR-ed (see above). + + The form of the macro will actually depend on whether the option is +equivalenced to another, and/or has an assigned handler procedure. +Unlike the `SET_OPT' macro, this macro does not allow an option +argument. + + DISABLE_OPT_NAME; + + +File: autogen.info, Node: ENABLED_OPT, Next: ERRSKIP_OPTERR, Prev: DISABLE_OPT_name, Up: AutoOpts API + +7.6.6 ENABLED_OPT( <NAME> ) - Is Option Enabled? +------------------------------------------------ + +Yields true if the option defaults to disabled and `ISUNUSED_OPT()' +would yield true. It also yields true if the option has been specified +with a disablement prefix, disablement value or the `DISABLE_OPT_NAME' +macro was invoked. + + +File: autogen.info, Node: ERRSKIP_OPTERR, Next: ERRSTOP_OPTERR, Prev: ENABLED_OPT, Up: AutoOpts API + +7.6.7 ERRSKIP_OPTERR - Ignore Option Errors +------------------------------------------- + +When it is necessary to continue (return to caller) on option errors, +invoke this option. It is reversible. *Note ERRSTOP_OPTERR::. + + +File: autogen.info, Node: ERRSTOP_OPTERR, Next: HAVE_OPT, Prev: ERRSKIP_OPTERR, Up: AutoOpts API + +7.6.8 ERRSTOP_OPTERR - Stop on Errors +------------------------------------- + +After invoking this macro, if `optionProcess()' encounters an error, it +will call `exit(1)' rather than return. This is the default processing +mode. It can be overridden by specifying `allow-errors' in the +definitions file, or invoking the macro *Note ERRSKIP_OPTERR::. + + +File: autogen.info, Node: HAVE_OPT, Next: ISSEL_OPT, Prev: ERRSTOP_OPTERR, Up: AutoOpts API + +7.6.9 HAVE_OPT( <NAME> ) - Have this option? +-------------------------------------------- + +This macro yields true if the option has been specified in any fashion +at all. It is used thus: + + if (HAVE_OPT( NAME )) { + <do-things-associated-with-opt-name>; + } + + +File: autogen.info, Node: ISSEL_OPT, Next: ISUNUSED_OPT, Prev: HAVE_OPT, Up: AutoOpts API + +7.6.10 ISSEL_OPT( <NAME> ) - Is Option Selected? +------------------------------------------------ + +This macro yields true if the option has been specified either on the +command line or via a SET/DISABLE macro. + + +File: autogen.info, Node: ISUNUSED_OPT, Next: OPTION_CT, Prev: ISSEL_OPT, Up: AutoOpts API + +7.6.11 ISUNUSED_OPT( <NAME> ) - Never Specified? +------------------------------------------------ + +This macro yields true if the option has never been specified, or has +been cleared via the `CLEAR_OPT()' macro. + + +File: autogen.info, Node: OPTION_CT, Next: OPT_ARG, Prev: ISUNUSED_OPT, Up: AutoOpts API + +7.6.12 OPTION_CT - Full Count of Options +---------------------------------------- + +The full count of all options, both those defined and those generated +automatically by AutoOpts. This is primarily used to initialize the +program option descriptor structure. + + +File: autogen.info, Node: OPT_ARG, Next: OPT_NO_XLAT_CFG_NAMES, Prev: OPTION_CT, Up: AutoOpts API + +7.6.13 OPT_ARG( <NAME> ) - Option Argument String +------------------------------------------------- + +The option argument value as a pointer to string. Note that argument +values that have been specified as numbers are stored as numbers or +keywords. For such options, use instead the `OPT_VALUE_name' define. +It is used thus: + + if (HAVE_OPT( NAME )) { + char* p = OPT_ARG( NAME ); + <do-things-with-opt-name-argument-string>; + } + + +File: autogen.info, Node: OPT_NO_XLAT_CFG_NAMES, Next: OPT_NO_XLAT_OPT_NAMES, Prev: OPT_ARG, Up: AutoOpts API + +7.6.14 OPT_NO_XLAT_CFG_NAMES - option name xlation +-------------------------------------------------- + +Invoking this macro will disable the translation of option names only +while processing configuration files and environment variables. This +must be invoked before the first call to `optionProcess'.. You need +not invoke this if your option definition file contains the attribute +assignment, "`no-xlate = opt-cfg;'". + + +File: autogen.info, Node: OPT_NO_XLAT_OPT_NAMES, Next: OPT_VALUE_name, Prev: OPT_NO_XLAT_CFG_NAMES, Up: AutoOpts API + +7.6.15 OPT_NO_XLAT_OPT_NAMES - option name xlation +-------------------------------------------------- + +Invoking this macro will completely disable the translation of option +names. This must be invoked before the first call to `optionProcess'. +You need not invoke this if your option definition file contains the +attribute assignment, "`no-xlate = opt;'". + + +File: autogen.info, Node: OPT_VALUE_name, Next: OPT_XLAT_CFG_NAMES, Prev: OPT_NO_XLAT_OPT_NAMES, Up: AutoOpts API + +7.6.16 OPT_VALUE_name - Option Argument Value +--------------------------------------------- + +This macro gets emitted only for options that take numeric, keyword or +set membership arguments. The macro yields a word-sized integer +containing the enumeration, bit set or numeric value for the option +argument. + + int opt_val = OPT_VALUE_name; + + +File: autogen.info, Node: OPT_XLAT_CFG_NAMES, Next: OPT_XLAT_OPT_NAMES, Prev: OPT_VALUE_name, Up: AutoOpts API + +7.6.17 OPT_XLAT_CFG_NAMES - option name xlation +----------------------------------------------- + +If `ENABLE_NLS' is defined and `no-xlate' has been not set to the value +_anything_, this macro will cause the translation of option names to +happen before starting the processing of configuration files and +environment variables. This will change the recognition of options +within the `$PROGRAMNAME' environment variable, but will not alter the +names used for setting options via `$PROGRAMNAME_name' environment +variables. + + This must be invoked before the first call to `optionProcess'. You +might need to use this macro if your option definition file contains +the attribute assignment, "`no-xlate = opt;'" or "`no-xlate = +opt-cfg;'", and you have determined in some way that you wish to +override that. + + +File: autogen.info, Node: OPT_XLAT_OPT_NAMES, Next: RESTART_OPT, Prev: OPT_XLAT_CFG_NAMES, Up: AutoOpts API + +7.6.18 OPT_XLAT_OPT_NAMES - option name xlation +----------------------------------------------- + +If `ENABLE_NLS' is defined and `no-xlate' has been not set to the value +_anything_, translate the option names before processing the command +line options. Long option names may thus be localized. (If the names +were translated before configuration processing, they will not be +re-translated.) + + This must be invoked before the first call to `optionProcess'. You +might need to use this macro if your option definition file contains +the attribute assignment, "`no-xlate = opt;'" and you have determined +in some way that you wish to override that. + + +File: autogen.info, Node: RESTART_OPT, Next: SET_OPT_name, Prev: OPT_XLAT_OPT_NAMES, Up: AutoOpts API + +7.6.19 RESTART_OPT( n ) - Resume Option Processing +-------------------------------------------------- + +If option processing has stopped (either because of an error or +something was encountered that looked like a program argument), it can +be resumed by providing this macro with the index `n' of the next +option to process and calling `optionProcess()' again. + + +File: autogen.info, Node: SET_OPT_name, Next: STACKCT_OPT, Prev: RESTART_OPT, Up: AutoOpts API + +7.6.20 SET_OPT_name - Force an option to be set +----------------------------------------------- + +This macro gets emitted only when the given option has the `settable' +attribute specified. + + The form of the macro will actually depend on whether the option is +equivalenced to another, has an option argument and/or has an assigned +handler procedure. If the option has an argument, then this macro will +too. Beware that the argument is not reallocated, so the value must not +be on the stack or deallocated in any other way for as long as the value +might get referenced. + + If you have supplied at least one `homerc' file (*note program +attributes::), this macro will be emitted for the `--save-opts' option. + + SET_OPT_SAVE_OPTS( "filename" ); + +*Note automatic options::, for a discussion of the implications of using +this particular example. + + +File: autogen.info, Node: STACKCT_OPT, Next: STACKLST_OPT, Prev: SET_OPT_name, Up: AutoOpts API + +7.6.21 STACKCT_OPT( <NAME> ) - Stacked Arg Count +------------------------------------------------ + +When the option handling attribute is specified as `stack_arg', this +macro may be used to determine how many of them actually got stacked. + + Do not use this on options that have not been stacked or has not been +specified (the `stack_arg' attribute must have been specified, and +`HAVE_OPT(<NAME>)' must yield TRUE). Otherwise, you will likely seg +fault. + + if (HAVE_OPT( NAME )) { + int ct = STACKCT_OPT( NAME ); + char** pp = STACKLST_OPT( NAME ); + + do { + char* p = *pp++; + do-things-with-p; + } while (--ct > 0); + } + + +File: autogen.info, Node: STACKLST_OPT, Next: START_OPT, Prev: STACKCT_OPT, Up: AutoOpts API + +7.6.22 STACKLST_OPT( <NAME> ) - Argument Stack +---------------------------------------------- + +The address of the list of pointers to the option arguments. The +pointers are ordered by the order in which they were encountered in the +option presets and command line processing. + + Do not use this on options that have not been stacked or has not been +specified (the `stack_arg' attribute must have been specified, and +`HAVE_OPT(<OPTION>)' must yield TRUE). Otherwise, you will likely seg +fault. + + if (HAVE_OPT( NAME )) { + int ct = STACKCT_OPT( NAME ); + char** pp = STACKLST_OPT( NAME ); + + do { + char* p = *pp++; + do-things-with-p; + } while (--ct > 0); + } + + +File: autogen.info, Node: START_OPT, Next: STATE_OPT, Prev: STACKLST_OPT, Up: AutoOpts API + +7.6.23 START_OPT - Restart Option Processing +-------------------------------------------- + +This is just a shortcut for RESTART_OPT(1) (*Note RESTART_OPT::.) + + +File: autogen.info, Node: STATE_OPT, Next: USAGE, Prev: START_OPT, Up: AutoOpts API + +7.6.24 STATE_OPT( <NAME> ) - Option State +----------------------------------------- + +If you need to know if an option was set because of presetting actions +(configuration file processing or environment variables), versus a +command line entry versus one of the SET/DISABLE macros, then use this +macro. It will yield one of four values: `OPTST_INIT', `OPTST_SET', +`OPTST_PRESET' or `OPTST_DEFINED'. It is used thus: + + switch (STATE_OPT( NAME )) { + case OPTST_INIT: + not-preset, set or on the command line. (unless CLEAR-ed) + + case OPTST_SET: + option set via the SET_OPT_NAME() macro. + + case OPTST_PRESET: + option set via an configuration file or environment variable + + case OPTST_DEFINED: + option set via a command line option. + + default: + cannot happen :) + } + + +File: autogen.info, Node: USAGE, Next: VALUE_OPT_name, Prev: STATE_OPT, Up: AutoOpts API + +7.6.25 USAGE( exit-code ) - Usage invocation macro +-------------------------------------------------- + +This macro invokes the procedure registered to display the usage text. +Normally, this will be `optionUsage' from the AutoOpts library, but you +may select another procedure by specifying `usage = "proc_name"' +program attribute. This procedure must take two arguments first, a +pointer to the option descriptor, and second the exit code. The macro +supplies the option descriptor automatically. This routine is expected +to call `exit(3)' with the provided exit code. + + The `optionUsage' routine also behaves differently depending on the +exit code: + +`EXIT_SUCCESS (the value zero)' + It is assumed that full usage help has been requested. + Consequently, more information is provided than when displaying + usage and exiting with a non-zero exit code. Output will be sent + to `stdout' and the program will exit with a zero status code. + +`EX_USAGE (64)' + The abbreviated usage will be printed to `stdout' and the program + will exit with a zero status code. "EX_USAGE" may or may not be + 64. If your system provides "/usr/include/sysexits.h" that has a + different value, then that value will be used. + +`any other value' + The abbreviated usage will be printed to stderr and the program + will exit with the provided status code. + + +File: autogen.info, Node: VALUE_OPT_name, Next: VERSION, Prev: USAGE, Up: AutoOpts API + +7.6.26 VALUE_OPT_name - Option Flag Value +----------------------------------------- + +This is a #define for the flag character used to specify an option on +the command line. If `value' was not specified for the option, then it +is a unique number associated with the option. `option value' refers +to this value, `option argument' refers to the (optional) argument to +the option. + + switch (WHICH_OPT_OTHER_OPT) { + case VALUE_OPT_NAME: + this-option-was-really-opt-name; + case VALUE_OPT_OTHER_OPT: + this-option-was-really-other-opt; + } + + +File: autogen.info, Node: VERSION, Next: WHICH_IDX_name, Prev: VALUE_OPT_name, Up: AutoOpts API + +7.6.27 VERSION - Version and Full Version +----------------------------------------- + +If the `version' attribute is defined for the program, then a +stringified version will be #defined as PROGRAM_VERSION and +PROGRAM_FULL_VERSION. PROGRAM_FULL_VERSION is used for printing the +program version in response to the version option. The version option +is automatically supplied in response to this attribute, too. + + You may access PROGRAM_VERSION via `programOptions.pzFullVersion'. + + +File: autogen.info, Node: WHICH_IDX_name, Next: WHICH_OPT_name, Prev: VERSION, Up: AutoOpts API + +7.6.28 WHICH_IDX_name - Which Equivalenced Index +------------------------------------------------ + +This macro gets emitted only for equivalenced-to options. It is used to +obtain the index for the one of the several equivalence class members +set the equivalenced-to option. + + switch (WHICH_IDX_OTHER_OPT) { + case INDEX_OPT_NAME: + this-option-was-really-opt-name; + case INDEX_OPT_OTHER_OPT: + this-option-was-really-other-opt; + } + + +File: autogen.info, Node: WHICH_OPT_name, Next: teOptIndex, Prev: WHICH_IDX_name, Up: AutoOpts API + +7.6.29 WHICH_OPT_name - Which Equivalenced Option +------------------------------------------------- + +This macro gets emitted only for equivalenced-to options. It is used to +obtain the value code for the one of the several equivalence class +members set the equivalenced-to option. + + switch (WHICH_OPT_OTHER_OPT) { + case VALUE_OPT_NAME: + this-option-was-really-opt-name; + case VALUE_OPT_OTHER_OPT: + this-option-was-really-other-opt; + } + + +File: autogen.info, Node: teOptIndex, Next: OPTIONS_STRUCT_VERSION, Prev: WHICH_OPT_name, Up: AutoOpts API + +7.6.30 teOptIndex - Option Index and Enumeration +------------------------------------------------ + +This enum defines the complete set of options, both user specified and +automatically provided. This can be used, for example, to distinguish +which of the equivalenced options was actually used. + + switch (pOptDesc->optActualIndex) { + case INDEX_OPT_FIRST: + stuff; + case INDEX_OPT_DIFFERENT: + different-stuff; + default: + unknown-things; + } + + +File: autogen.info, Node: OPTIONS_STRUCT_VERSION, Next: libopts procedures, Prev: teOptIndex, Up: AutoOpts API + +7.6.31 OPTIONS_STRUCT_VERSION - active version +---------------------------------------------- + +You will not actually need to reference this value, but you need to be +aware that it is there. It is the first value in the option descriptor +that you pass to `optionProcess'. It contains a magic number and +version information. Normally, you should be able to work with a more +recent option library than the one you compiled with. However, if the +library is changed incompatibly, then the library will detect the out of +date magic marker, explain the difficulty and exit. You will then need +to rebuild and recompile your option definitions. This has rarely been +necessary. + + +File: autogen.info, Node: libopts procedures, Prev: OPTIONS_STRUCT_VERSION, Up: AutoOpts API + +7.6.32 libopts External Procedures +---------------------------------- + +These are the routines that libopts users may call directly from their +code. There are several other routines that can be called by code +generated by the libopts option templates, but they are not to be +called from any other user code. The `options.h' header is fairly +clear about this, too. + +* Menu: + +* libopts-ao_string_tokenize:: ao_string_tokenize +* libopts-configFileLoad:: configFileLoad +* libopts-optionFileLoad:: optionFileLoad +* libopts-optionFindNextValue:: optionFindNextValue +* libopts-optionFindValue:: optionFindValue +* libopts-optionFree:: optionFree +* libopts-optionGetValue:: optionGetValue +* libopts-optionLoadLine:: optionLoadLine +* libopts-optionNextValue:: optionNextValue +* libopts-optionOnlyUsage:: optionOnlyUsage +* libopts-optionProcess:: optionProcess +* libopts-optionRestore:: optionRestore +* libopts-optionSaveFile:: optionSaveFile +* libopts-optionSaveState:: optionSaveState +* libopts-optionUnloadNested:: optionUnloadNested +* libopts-optionVersion:: optionVersion +* libopts-pathfind:: pathfind +* libopts-strequate:: strequate +* libopts-streqvcmp:: streqvcmp +* libopts-streqvmap:: streqvmap +* libopts-strneqvcmp:: strneqvcmp +* libopts-strtransform:: strtransform + + This subsection was automatically generated by AutoGen using +extracted information and the aginfo3.tpl template. + + +File: autogen.info, Node: libopts-ao_string_tokenize, Next: libopts-configFileLoad, Up: libopts procedures + +7.6.32.1 ao_string_tokenize +........................... + +tokenize an input string + +Usage: + token_list_t* res = ao_string_tokenize( string ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + string `char const*' string to be tokenized + returns token_list_t* pointer to a structure that lists each + token + + This function will convert one input string into a list of strings. +The list of strings is derived by separating the input based on white +space separation. However, if the input contains either single or +double quote characters, then the text after that character up to a +matching quote will become the string in the list. + + The returned pointer should be deallocated with `free(3C)' when are +done using the data. The data are placed in a single block of +allocated memory. Do not deallocate individual token/strings. + + The structure pointed to will contain at least these two fields: +`tkn_ct' + The number of tokens found in the input string. + +`tok_list' + An array of `tkn_ct + 1' pointers to substring tokens, with the + last pointer set to NULL. + + There are two types of quoted strings: single quoted (`'') and +double quoted (`"'). Singly quoted strings are fairly raw in that +escape characters (`\\') are simply another character, except when +preceding the following characters: + `\\' double backslashes reduce to one + `'' incorporates the single quote into the string + `\n' suppresses both the backslash and newline character + + Double quote strings are formed according to the rules of string +constants in ANSI-C programs. + + NULL is returned and `errno' will be set to indicate the problem: + * `EINVAL' - There was an unterminated quoted string. + + * `ENOENT' - The input string was empty. + + * `ENOMEM' - There is not enough memory. + + +File: autogen.info, Node: libopts-configFileLoad, Next: libopts-optionFileLoad, Prev: libopts-ao_string_tokenize, Up: libopts procedures + +7.6.32.2 configFileLoad +....................... + +parse a configuration file + +Usage: + const tOptionValue* res = configFileLoad( pzFile ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pzFile `char const*' the file to load + returns const An allocated, compound value structure + tOptionValue* + + This routine will load a named configuration file and parse the text +as a hierarchically valued option. The option descriptor created from +an option definition file is not used via this interface. The returned +value is "named" with the input file name and is of type +"`OPARG_TYPE_HIERARCHY'". It may be used in calls to +`optionGetValue()', `optionNextValue()' and `optionUnloadNested()'. + + If the file cannot be loaded or processed, `NULL' is returned and +ERRNO is set. It may be set by a call to either `open(2)' `mmap(2)' or +other file system calls, or it may be: + * `ENOENT' - the file was not found. + + * `ENOMSG' - the file was empty. + + * `EINVAL' - the file contents are invalid - not properly formed. + + * `ENOMEM' - not enough memory to allocate the needed structures. + + +File: autogen.info, Node: libopts-optionFileLoad, Next: libopts-optionFindNextValue, Prev: libopts-configFileLoad, Up: libopts procedures + +7.6.32.3 optionFileLoad +....................... + +Load the locatable config files, in order + +Usage: + int res = optionFileLoad( pOpts, pzProg ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + pzProg `char const*' program name + returns int 0 -> SUCCESS, -1 -> FAILURE + + This function looks in all the specified directories for a +configuration file ("rc" file or "ini" file) and processes any found +twice. The first time through, they are processed in reverse order +(last file first). At that time, only "immediate action" configurables +are processed. For example, if the last named file specifies not +processing any more configuration files, then no more configuration +files will be processed. Such an option in the *first* named directory +will have no effect. + + Once the immediate action configurables have been handled, then the +directories are handled in normal, forward order. In that way, later +config files can override the settings of earlier config files. + + See the AutoOpts documentation for a thorough discussion of the +config file format. + + Configuration files not found or not decipherable are simply ignored. + + Returns the value, "-1" if the program options descriptor is out of +date or indecipherable. Otherwise, the value "0" will always be +returned. + + +File: autogen.info, Node: libopts-optionFindNextValue, Next: libopts-optionFindValue, Prev: libopts-optionFileLoad, Up: libopts procedures + +7.6.32.4 optionFindNextValue +............................ + +find a hierarcicaly valued option instance + +Usage: + const tOptionValue* res = optionFindNextValue( pOptDesc, pPrevVal, name, value ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOptDesc `const an option with a nested arg type + tOptDesc*' + pPrevVal `const the last entry + tOptionValue*' + name `char const*' name of value to find + value `char const*' the matching value + returns const a compound value structure + tOptionValue* + + This routine will find the next entry in a nested value option or +configurable. It will search through the list and return the next entry +that matches the criteria. + + The returned result is NULL and errno is set: + * `EINVAL' - the `pOptValue' does not point to a valid hierarchical + option value. + + * `ENOENT' - no entry matched the given name. + + +File: autogen.info, Node: libopts-optionFindValue, Next: libopts-optionFree, Prev: libopts-optionFindNextValue, Up: libopts procedures + +7.6.32.5 optionFindValue +........................ + +find a hierarcicaly valued option instance + +Usage: + const tOptionValue* res = optionFindValue( pOptDesc, name, value ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOptDesc `const an option with a nested arg type + tOptDesc*' + name `char const*' name of value to find + value `char const*' the matching value + returns const a compound value structure + tOptionValue* + + This routine will find an entry in a nested value option or +configurable. It will search through the list and return a matching +entry. + + The returned result is NULL and errno is set: + * `EINVAL' - the `pOptValue' does not point to a valid hierarchical + option value. + + * `ENOENT' - no entry matched the given name. + + +File: autogen.info, Node: libopts-optionFree, Next: libopts-optionGetValue, Prev: libopts-optionFindValue, Up: libopts procedures + +7.6.32.6 optionFree +................... + +free allocated option processing memory + +Usage: + optionFree( pOpts ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + + AutoOpts sometimes allocates memory and puts pointers to it in the +option state structures. This routine deallocates all such memory. + + As long as memory has not been corrupted, this routine is always +successful. + + +File: autogen.info, Node: libopts-optionGetValue, Next: libopts-optionLoadLine, Prev: libopts-optionFree, Up: libopts procedures + +7.6.32.7 optionGetValue +....................... + +get a specific value from a hierarcical list + +Usage: + const tOptionValue* res = optionGetValue( pOptValue, valueName ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOptValue `const a hierarchcal value + tOptionValue*' + valueName `char const*' name of value to get + returns const a compound value structure + tOptionValue* + + This routine will find an entry in a nested value option or +configurable. If "valueName" is NULL, then the first entry is +returned. Otherwise, the first entry with a name that exactly matches +the argument will be returned. If there is no matching value, NULL is +returned and errno is set to ENOENT. If the provided option value is +not a hierarchical value, NULL is also returned and errno is set to +EINVAL. + + The returned result is NULL and errno is set: + * `EINVAL' - the `pOptValue' does not point to a valid hierarchical + option value. + + * `ENOENT' - no entry matched the given name. + + +File: autogen.info, Node: libopts-optionLoadLine, Next: libopts-optionNextValue, Prev: libopts-optionGetValue, Up: libopts procedures + +7.6.32.8 optionLoadLine +....................... + +process a string for an option name and value + +Usage: + optionLoadLine( opts, line ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + opts `tOptions*' program options descriptor + line `char const*' NUL-terminated text + + This is a client program callable routine for setting options from, +for example, the contents of a file that they read in. Only one option +may appear in the text. It will be treated as a normal (non-preset) +option. + + When passed a pointer to the option struct and a string, it will find +the option named by the first token on the string and set the option +argument to the remainder of the string. The caller must NUL terminate +the string. The caller need not skip over any introductory hyphens. +Any embedded new lines will be included in the option argument. If the +input looks like one or more quoted strings, then the input will be +"cooked". The "cooking" is identical to the string formation used in +AutoGen definition files (*note basic expression::), except that you +may not use backquotes. + + Invalid options are silently ignored. Invalid option arguments will +cause a warning to print, but the function should return. + + +File: autogen.info, Node: libopts-optionNextValue, Next: libopts-optionOnlyUsage, Prev: libopts-optionLoadLine, Up: libopts procedures + +7.6.32.9 optionNextValue +........................ + +get the next value from a hierarchical list + +Usage: + const tOptionValue* res = optionNextValue( pOptValue, pOldValue ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOptValue `const a hierarchcal list value + tOptionValue*' + pOldValue `const a value from this list + tOptionValue*' + returns const a compound value structure + tOptionValue* + + This routine will return the next entry after the entry passed in. +At the end of the list, NULL will be returned. If the entry is not +found on the list, NULL will be returned and "ERRNO" will be set to +EINVAL. The "POLDVALUE" must have been gotten from a prior call to this +routine or to "`opitonGetValue()'". + + The returned result is NULL and errno is set: + * `EINVAL' - the `pOptValue' does not point to a valid hierarchical + option value or `pOldValue' does not point to a member of that + option value. + + * `ENOENT' - the supplied `pOldValue' pointed to the last entry. + + +File: autogen.info, Node: libopts-optionOnlyUsage, Next: libopts-optionProcess, Prev: libopts-optionNextValue, Up: libopts procedures + +7.6.32.10 optionOnlyUsage +......................... + +Print usage text for just the options + +Usage: + optionOnlyUsage( pOpts, ex_code ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + ex_code `int' exit code for calling exit(3) + + This routine will print only the usage for each option. This +function may be used when the emitted usage must incorporate +information not available to AutoOpts. + + +File: autogen.info, Node: libopts-optionProcess, Next: libopts-optionRestore, Prev: libopts-optionOnlyUsage, Up: libopts procedures + +7.6.32.11 optionProcess +....................... + +this is the main option processing routine + +Usage: + int res = optionProcess( pOpts, argc, argv ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + argc `int' program arg count + argv `char**' program arg vector + returns int the count of the arguments processed + + This is the main entry point for processing options. It is intended +that this procedure be called once at the beginning of the execution of +a program. Depending on options selected earlier, it is sometimes +necessary to stop and restart option processing, or to select completely +different sets of options. This can be done easily, but you generally +do not want to do this. + + The number of arguments processed always includes the program name. +If one of the arguments is "-", then it is counted and the processing +stops. If an error was encountered and errors are to be tolerated, then +the returned value is the index of the argument causing the error. A +hyphen by itself ("-") will also cause processing to stop and will +_not_ be counted among the processed arguments. A hyphen by itself is +treated as an operand. Encountering an operand stops option processing. + + Errors will cause diagnostics to be printed. `exit(3)' may or may +not be called. It depends upon whether or not the options were +generated with the "allow-errors" attribute, or if the ERRSKIP_OPTERR +or ERRSTOP_OPTERR macros were invoked. + + +File: autogen.info, Node: libopts-optionRestore, Next: libopts-optionSaveFile, Prev: libopts-optionProcess, Up: libopts procedures + +7.6.32.12 optionRestore +....................... + +restore option state from memory copy + +Usage: + optionRestore( pOpts ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + + Copy back the option state from saved memory. The allocated memory +is left intact, so this routine can be called repeatedly without having +to call optionSaveState again. If you are restoring a state that was +saved before the first call to optionProcess(3AO), then you may change +the contents of the argc/argv parameters to optionProcess. + + If you have not called `optionSaveState' before, a diagnostic is +printed to `stderr' and exit is called. + + +File: autogen.info, Node: libopts-optionSaveFile, Next: libopts-optionSaveState, Prev: libopts-optionRestore, Up: libopts procedures + +7.6.32.13 optionSaveFile +........................ + +saves the option state to a file + +Usage: + optionSaveFile( pOpts ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + + This routine will save the state of option processing to a file. +The name of that file can be specified with the argument to the +`--save-opts' option, or by appending the `rcfile' attribute to the last +`homerc' attribute. If no `rcfile' attribute was specified, it will +default to `.programnamerc'. If you wish to specify another file, you +should invoke the `SET_OPT_SAVE_OPTS(filename)' macro. + + The recommend usage is as follows: + optionProcess(&progOptions, argc, argv); + if (i_want_a_non_standard_place_for_this) + SET_OPT_SAVE_OPTS("myfilename"); + optionSaveFile(&progOptions); + + If no `homerc' file was specified, this routine will silently return +and do nothing. If the output file cannot be created or updated, a +message will be printed to `stderr' and the routine will return. + + +File: autogen.info, Node: libopts-optionSaveState, Next: libopts-optionUnloadNested, Prev: libopts-optionSaveFile, Up: libopts procedures + +7.6.32.14 optionSaveState +......................... + +saves the option state to memory + +Usage: + optionSaveState( pOpts ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOpts `tOptions*' program options descriptor + + This routine will allocate enough memory to save the current option +processing state. If this routine has been called before, that memory +will be reused. You may only save one copy of the option state. This +routine may be called before optionProcess(3AO). If you do call it +before the first call to optionProcess, then you may also change the +contents of argc/argv after you call optionRestore(3AO) + + In fact, more strongly put: it is safest to only use this function +before having processed any options. In particular, the saving and +restoring of stacked string arguments and hierarchical values is +disabled. The values are not saved. + + If it fails to allocate the memory, it will print a message to +stderr and exit. Otherwise, it will always succeed. + + +File: autogen.info, Node: libopts-optionUnloadNested, Next: libopts-optionVersion, Prev: libopts-optionSaveState, Up: libopts procedures + +7.6.32.15 optionUnloadNested +............................ + +Deallocate the memory for a nested value + +Usage: + optionUnloadNested( pOptVal ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + pOptVal `tOptionValue the hierarchical value + const *' + + A nested value needs to be deallocated. The pointer passed in should +have been gotten from a call to `configFileLoad()' (See *note +libopts-configFileLoad::). + + +File: autogen.info, Node: libopts-optionVersion, Next: libopts-pathfind, Prev: libopts-optionUnloadNested, Up: libopts procedures + +7.6.32.16 optionVersion +....................... + +return the compiled AutoOpts version number + +Usage: + char const* res = optionVersion(); + Where the arguments are: + Name Type Description + ---- ---- ------------ + returns char const* the version string in constant memory + + Returns the full version string compiled into the library. The +returned string cannot be modified. + + +File: autogen.info, Node: libopts-pathfind, Next: libopts-strequate, Prev: libopts-optionVersion, Up: libopts procedures + +7.6.32.17 pathfind +.................. + +fild a file in a list of directories + +Usage: + char* res = pathfind( path, file, mode ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + path `char const*' colon separated list of search + directories + file `char const*' the name of the file to look for + mode `char const*' the mode bits that must be set to match + returns char* the path to the located file + + pathfind looks for a a file with name "FILE" and "MODE" access along +colon delimited "PATH", and returns the full pathname as a string, or +NULL if not found. If "FILE" contains a slash, then it is treated as a +relative or absolute path and "PATH" is ignored. + + *NOTE*: this function is compiled into `libopts' only if it is not +natively supplied. + + The "MODE" argument is a string of option letters chosen from the +list below: + Letter Meaning + r readable + w writable + x executable + f normal file (NOT IMPLEMENTED) + b block special (NOT IMPLEMENTED) + c character special (NOT IMPLEMENTED) + d directory (NOT IMPLEMENTED) + p FIFO (pipe) (NOT IMPLEMENTED) + u set user ID bit (NOT IMPLEMENTED) + g set group ID bit (NOT IMPLEMENTED) + k sticky bit (NOT IMPLEMENTED) + s size nonzero (NOT IMPLEMENTED) + + returns NULL if the file is not found. + + +File: autogen.info, Node: libopts-strequate, Next: libopts-streqvcmp, Prev: libopts-pathfind, Up: libopts procedures + +7.6.32.18 strequate +................... + +map a list of characters to the same value + +Usage: + strequate( ch_list ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + ch_list `char const*' characters to equivalence + + Each character in the input string get mapped to the first character +in the string. This function name is mapped to option_strequate so as +to not conflict with the POSIX name space. + + none. + + +File: autogen.info, Node: libopts-streqvcmp, Next: libopts-streqvmap, Prev: libopts-strequate, Up: libopts procedures + +7.6.32.19 streqvcmp +................... + +compare two strings with an equivalence mapping + +Usage: + int res = streqvcmp( str1, str2 ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + str1 `char const*' first string + str2 `char const*' second string + returns int the difference between two differing + characters + + Using a character mapping, two strings are compared for +"equivalence". Each input character is mapped to a comparison +character and the mapped-to characters are compared for the two NUL +terminated input strings. This function name is mapped to +option_streqvcmp so as to not conflict with the POSIX name space. + + none checked. Caller responsible for seg faults. + + +File: autogen.info, Node: libopts-streqvmap, Next: libopts-strneqvcmp, Prev: libopts-streqvcmp, Up: libopts procedures + +7.6.32.20 streqvmap +................... + +Set the character mappings for the streqv functions + +Usage: + streqvmap( From, To, ct ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + From `char' Input character + To `char' Mapped-to character + ct `int' compare length + + Set the character mapping. If the count (`ct') is set to zero, then +the map is cleared by setting all entries in the map to their index +value. Otherwise, the "`From'" character is mapped to the "`To'" +character. If `ct' is greater than 1, then `From' and `To' are +incremented and the process repeated until `ct' entries have been set. +For example, + streqvmap('a', 'A', 26); + will alter the mapping so that all English lower case letters will +map to upper case. + + This function name is mapped to option_streqvmap so as to not +conflict with the POSIX name space. + + none. + + +File: autogen.info, Node: libopts-strneqvcmp, Next: libopts-strtransform, Prev: libopts-streqvmap, Up: libopts procedures + +7.6.32.21 strneqvcmp +.................... + +compare two strings with an equivalence mapping + +Usage: + int res = strneqvcmp( str1, str2, ct ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + str1 `char const*' first string + str2 `char const*' second string + ct `int' compare length + returns int the difference between two differing + characters + + Using a character mapping, two strings are compared for +"equivalence". Each input character is mapped to a comparison +character and the mapped-to characters are compared for the two NUL +terminated input strings. The comparison is limited to `ct' bytes. +This function name is mapped to option_strneqvcmp so as to not conflict +with the POSIX name space. + + none checked. Caller responsible for seg faults. + + +File: autogen.info, Node: libopts-strtransform, Prev: libopts-strneqvcmp, Up: libopts procedures + +7.6.32.22 strtransform +...................... + +convert a string into its mapped-to value + +Usage: + strtransform( dest, src ); + Where the arguments are: + Name Type Description + ---- ---- ------------ + dest `char*' output string + src `char const*' input string + + Each character in the input string is mapped and the mapped-to +character is put into the output. This function name is mapped to +option_strtransform so as to not conflict with the POSIX name space. + + The source and destination may be the same. + + none. + + +File: autogen.info, Node: Multi-Threading, Next: option descriptor, Prev: AutoOpts API, Up: AutoOpts + +7.7 Multi-Threading +=================== + +AutoOpts was designed to configure a program for running. This +generally happens before much real work has been started. +Consequently, it is expected to be run before multi-threaded +applications have started multiple threads. However, this is not +always the case. Some applications may need to reset and reload their +running configuration, and some may use `SET_OPT_xxx()' macros during +processing. If you need to dynamically change your option +configuration in your multi-threaded application, it is your +responsibility to prevent all threads from accessing the option +configuration state, except the one altering the configuration. + + The various accessor macros (`HAVE_OPT()', etc.) do not modify state +and are safe to use in a multi-threaded application. It is safe as long +as no other thread is concurrently modifying state, of course. + + +File: autogen.info, Node: option descriptor, Next: Using AutoOpts, Prev: Multi-Threading, Up: AutoOpts + +7.8 Option Descriptor File +========================== + +This is the module that is to be compiled and linked with your program. +It contains internal data and procedures subject to change. Basically, +it contains a single global data structure containing all the +information provided in the option definitions, plus a number of static +strings and any callout procedures that are specified or required. You +should never have need for looking at this, except, perhaps, to examine +the code generated for implementing the `flag-code' construct. + + +File: autogen.info, Node: Using AutoOpts, Next: Presetting Options, Prev: option descriptor, Up: AutoOpts + +7.9 Using AutoOpts +================== + +There are actually several levels of "using" autoopts. Which you +choose depends upon how you plan to distribute (or not) your +application. + +* Menu: + +* local use:: local-only use +* binary not installed:: binary distro, AutoOpts not installed +* binary pre-installed:: binary distro, AutoOpts pre-installed +* source pre-installed:: source distro, AutoOpts pre-installed +* source not installed:: source distro, AutoOpts not installed + + +File: autogen.info, Node: local use, Next: binary not installed, Up: Using AutoOpts + +7.9.1 local-only use +-------------------- + +To use AutoOpts in your application where you do not have to worry +about distribution issues, your issues are simple and few. + + * Create a file `myopts.def', according to the documentation above. + It is probably easiest to start with the example in *note Quick + Start:: and edit it into the form you need. + + * Run AutoGen to create the option interface file (`myopts.h') and + the option descriptor code (`myopts.c'): + + autogen myopts.def + + * In all your source files where you need to refer to option state, + `#include "myopts.h"'. + + * In your main routine, code something along the lines of: + + #define ARGC_MIN some-lower-limit + #define ARGC_MAX some-upper-limit + main( int argc, char** argv ) + { + { + int arg_ct = optionProcess( &myprogOptions, argc, argv ); + argc -= arg_ct; + if ((argc < ARGC_MIN) || (argc > ARGC_MAX)) { + fprintf( stderr, "%s ERROR: remaining args (%d) " + "out of range\n", myprogOptions.pzProgName, + argc ); + + USAGE( EXIT_FAILURE ); + } + argv += arg_ct; + } + if (HAVE_OPT(OPTN_NAME)) + respond_to_optn_name(); + ... + } + + * Compile `myopts.c' and link your program with the following + additional arguments: + + `autoopts-config cflags ldflags` myopts.c + + +File: autogen.info, Node: binary not installed, Next: binary pre-installed, Prev: local use, Up: Using AutoOpts + +7.9.2 binary distro, AutoOpts not installed +------------------------------------------- + +If you will be distributing (or copying) your project to a system that +does not have AutoOpts installed, you will need to statically link the +AutoOpts library, "libopts" into your program. Get the link information +with "`static-libs'" instead of "`ldflags'": + + `autoopts-config static-libs` + + +File: autogen.info, Node: binary pre-installed, Next: source pre-installed, Prev: binary not installed, Up: Using AutoOpts + +7.9.3 binary distro, AutoOpts pre-installed +------------------------------------------- + +If you will be distributing (or copying) your project to a system that +does have AutoOpts (or only "libopts") installed, you will still need +to ensure that the library is findable at program load time, or you +will still have to statically link. The former can be accomplished by +linking your project with `--rpath' or by setting the `LD_LIBRARY_PATH' +appropriately. Otherwise, *Note binary not installed::. + + +File: autogen.info, Node: source pre-installed, Next: source not installed, Prev: binary pre-installed, Up: Using AutoOpts + +7.9.4 source distro, AutoOpts pre-installed +------------------------------------------- + +If you will be distributing your project to a system that will build +your product but it may not be pre-installed with AutoOpts, you will +need to do some configuration checking before you start the build. +Assuming you are willing to fail the build if AutoOpts has not been +installed, you will still need to do a little work. + + AutoOpts is distributed with a configuration check M4 script, +`autoopts.m4'. It will add an `autoconf' macro named, +`AG_PATH_AUTOOPTS'. Add this to your `configure.ac' script and use the +following substitution values: + +`AUTOGEN' + the name of the autogen executable + +`AUTOGEN_TPLIB' + the directory where AutoGen template library is stored + +`AUTOOPTS_CFLAGS' + the compile time options needed to find the AutoOpts headers + +`AUTOOPTS_LIBS' + the link options required to access the `libopts' library + + +File: autogen.info, Node: source not installed, Prev: source pre-installed, Up: Using AutoOpts + +7.9.5 source distro, AutoOpts not installed +------------------------------------------- + +If you will be distributing your project to a system that will build +your product but it may not be pre-installed with AutoOpts, you may +wish to incorporate the sources for `libopts' in your project. To do +this, I recommend reading the tear-off libopts library `README' that +you can find in the `pkg/libopts' directory. You can also examine an +example package (blocksort) that incorporates this tear off library in +the autogen distribution directory. There is also a web page that +describes what you need to do: + `http://autogen.sourceforge.net/blocksort.html' + + Alternatively, you can pull the `libopts' library sources into a +build directory and build it for installation along with your package. +This can be done approximately as follows: + tar -xzvf `autoopts-config libsrc` + cd libopts-* + ./bootstrap + configure + make + make install + That will install the library, but not the headers or anything else. + + +File: autogen.info, Node: Presetting Options, Next: Config File Format, Prev: Using AutoOpts, Up: AutoOpts + +7.10 Configuring your program +============================= + +AutoOpts supports the notion of "presetting" the value or state of an +option. The values may be obtained either from environment variables +or from configuration files (`rc' or `ini' files). In order to take +advantage of this, the AutoOpts client program must specify these +features in the option descriptor file (*note program attributes::) +with the `rcfile' or `environrc' attributes. + +* Menu: + +* loading rcfile:: configuration file presets +* saving rcfile:: Saving the presets into a configuration file +* sample rcfile:: Creating a sample configuration file +* environrc:: environment variable presets +* config example:: Config file only example + + It is also possible to configure your program without using the +command line option parsing code. This is done by using only the +following four functions from the `libopts' library: + +`configFileLoad' + (*note libopts-configFileLoad::) will parse the contents of a + config file and return a pointer to a structure representing the + hierarchical value. The values are sorted alphabetically by the + value name and all entries with the same name will retain their + original order. Insertion sort is used. + +`optionGetValue' + (*note libopts-optionGetValue::) will find the first value within + the hierarchy with a name that matches the name passed in. + +`optionNextValue' + (*note libopts-optionNextValue::) will return the next value that + follows the value passed in as an argument. If you wish to get all + the values for a particular name, you must take note when the name + changes. + +`optionUnloadNested' + (*note libopts-optionUnloadNested::). The pointer passed in must + be of type, `OPARG_TYPE_HIERARCHY' (see the autoopts/options.h + header file). `configFileLoad' will return a `tOptionValue' + pointer of that type. This function will release all the + associated memory. `AutoOpts' generated code uses this function + for its own needs. Client code should only call this function + with pointers gotten from `configFileLoad'. + + +File: autogen.info, Node: loading rcfile, Next: saving rcfile, Up: Presetting Options + +7.10.1 configuration file presets +--------------------------------- + +Configuration files are enabled by specifying the program attribute +`homerc' (*note program attributes::). Any option not marked with the +"no-preset" attribute may appear in a configuration file. The files +loaded are selected both by the `homerc' entries and, optionally, via a +command line option. The first component of the `homerc' entry may be +an environment variable such as `$HOME', or it may also be `$$' (*two* +dollar sign characters) to specify the directory of the executable. +For example: + + homerc = "$$/../share/autogen"; + +will cause the AutoOpts library to look in the normal autogen datadir +relative to the current installation directory for autogen. + + The configuration files are processed in the order they are +specified by the `homerc' attribute, so that each new file will +normally override the settings of the previous files. This may be +overridden by marking some options for `immediate action' (*note +Immediate Action::). Any such options are acted upon in *reverse* +order. The disabled `load-opts' (`--no-load-opts') option, for +example, is an immediate action option. Its presence in the last +`homerc' file will prevent the processing of any prior `homerc' files +because its effect is immediate. + + Configuration file processing can be completely suppressed by +specifying `--no-load-opts' on the command line, or +`PROGRAM_LOAD_OPTS=no' in the environment (if `environrc' has been +specified). + + See the "Configuration File Format" section (*note Config File +Format::) for details on the format of the file. + + +File: autogen.info, Node: saving rcfile, Next: sample rcfile, Prev: loading rcfile, Up: Presetting Options + +7.10.2 Saving the presets into a configuration file +--------------------------------------------------- + +When configuration files are enabled for an application, the user is +also provided with an automatically supplied `--save-opts' option. All +of the known option state will be written to either the specified +output file or, if it is not specified, then to the last specified +`homerc' file. + + +File: autogen.info, Node: sample rcfile, Next: environrc, Prev: saving rcfile, Up: Presetting Options + +7.10.3 Creating a sample configuration file +------------------------------------------- + +AutoOpts is shipped with a template named, `rc-sample.tpl'. If your +option definition file specifies the `homerc' attribute, then you may +invoke `autogen' thus: + + autogen -Trc-sample <your-option-def-file> + + This will, by default, produce a sample file named, +`sample-<prog-name>rc'. It will be named differently if you specify +your configuration (rc) file name with the `rcfile' attribute. In that +case, the output file will be named, `sample-<rcfile-name>'. It will +contain all of the program options not marked as `no-preset'. It will +also include the text from the `doc' attribute. + +Doing so with getdefs' option definitions yields this sample-getdefsrc +file. I tend to be wordy in my `doc' attributes: + + # getdefs sample configuration file + ## This source file is copyrighted and licensed under the following terms: + # + # Copyright (C) 1999-2012 Bruce Korb, all rights reserved. + # This is free software. It is licensed for use, modification and + # redistribution under the terms of the + # GNU General Public License, version 3 or later + # <http://gnu.org/licenses/gpl.html> + # + # getdefs is free software: you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by the + # Free Software Foundation, either version 3 of the License, or + # (at your option) any later version. + # + # getdefs is distributed in the hope that it will be useful, but + # WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + # See the GNU General Public License for more details. + # + # You should have received a copy of the GNU General Public License along + # with this program. If not, see <http://www.gnu.org/licenses/>. + + # defs_to_get -- Regexp to look for after the "/*=" + # + # + # + # + # If you want definitions only from a particular category, or even + # with names matching particular patterns, then specify this regular + # expression for the text that must follow the @code{/*=}. + # Example: + # + #defs_to_get reg-ex + + # subblock -- subblock definition names + # + # + # + # + # This option is used to create shorthand entries for nested definitions. + # For example, with: + # @table @r + # @item using subblock thus + # @code{--subblock=arg=argname,type,null} + # @item and defining an @code{arg} thus + # @code{arg: this, char *} + # @item will then expand to: + # @code{arg = @{ argname = this; type = "char *"; @};} + # @end table + # The "this, char *" string is separated at the commas, with the + # white space removed. You may use characters other than commas by + # starting the value string with a punctuation character other than + # a single or double quote character. You may also omit intermediate + # values by placing the commas next to each other with no intervening + # white space. For example, "+mumble++yes+" will expand to: + # @* + # @code{arg = @{ argname = mumble; null = "yes"; @};}. + # Example: + # + #subblock sub-def + + # listattr -- attribute with list of values + # + # + # + # + # This option is used to create shorthand entries for definitions + # that generally appear several times. That is, they tend to be + # a list of values. For example, with: + # @* + # @code{listattr=foo} defined, the text: + # @* + # @code{foo: this, is, a, multi-list} will then expand to: + # @* + # @code{foo = 'this', 'is', 'a', 'multi-list';} + # @* + # The texts are separated by the commas, with the + # white space removed. You may use characters other than commas by + # starting the value string with a punctuation character other than + # a single or double quote character. + # Example: + # + #listattr def + + # ordering -- Alphabetize or use named file + # + # + # + # + # By default, ordering is alphabetical by the entry name. Use, + # @code{no-ordering} if order is unimportant. Use @code{ordering} + # with no argument to order without case sensitivity. Use + # @code{ordering=<file-name>} if chronological order is important. + # getdefs will maintain the text content of @code{file-name}. + # @code{file-name} need not exist. + # Example: + # + #ordering file-name + + # first_index -- The first index to apply to groups + # + # This configuration value takes an integer number as its argument. + # + # + # By default, the first occurrence of a named definition will have an + # index of zero. Sometimes, that needs to be a reserved value. Provide + # this option to specify a different starting point. + # Example: + # + #first_index 0 + + # filelist -- Insert source file names into defs + # + # + # + # + # Inserts the name of each input file into the output definitions. + # If no argument is supplied, the format will be: + # @example + # infile = '%s'; + # @end example + # If an argument is supplied, that string will be used for the entry + # name instead of @var{infile}. + # Example: + # + #filelist file + + # assign -- Global assignments + # + # + # + # + # The argument to each copy of this option will be inserted into + # the output definitions, with only a semicolon attached. + # Example: + # + #assign ag-def + + # common_assign -- Assignments common to all blocks + # + # + # + # + # The argument to each copy of this option will be inserted into + # each output definition, with only a semicolon attached. + # Example: + # + #common_assign ag-def + + # copy -- File(s) to copy into definitions + # + # + # + # + # The content of each file named by these options will be inserted into + # the output definitions. + # Example: + # + #copy file + + # srcfile -- Insert source file name into each def + # + # + # + # + # Inserts the name of the input file where a definition was found + # into the output definition. + # If no argument is supplied, the format will be: + # @example + # srcfile = '%s'; + # @end example + # If an argument is supplied, that string will be used for the entry + # name instead of @var{srcfile}. + # Example: + # + #srcfile file + + # linenum -- Insert source line number into each def + # + # + # + # + # Inserts the line number in the input file where a definition + # was found into the output definition. + # If no argument is supplied, the format will be: + # @example + # linenum = '%s'; + # @end example + # If an argument is supplied, that string will be used for the entry + # name instead of @var{linenum}. + # Example: + # + #linenum def-name + + # input -- Input file to search for defs + # + # + # + # + # All files that are to be searched for definitions must be named on + # the command line or read from @code{stdin}. If there is only one + # @code{input} option and it is the string, "-", then the input file + # list is read from @code{stdin}. If a command line argument is not + # an option name and does not contain an assignment operator + # (@code{=}), then it defaults to being an input file name. + # At least one input file must be specified. + # Example: + # + #input src-file + + # output -- Output file to open + # + # + # + # + # If you are not sending the output to an AutoGen process, + # you may name an output file instead. + # Example: + # + #output file + + # autogen -- Invoke AutoGen with defs + # + # + # + # + # This is the default output mode. Specifying @code{no-autogen} is + # equivalent to @code{output=-}. If you supply an argument to this + # option, that program will be started as if it were AutoGen and + # its standard in will be set to the output definitions of this program. + # Example: + # + #autogen ag-cmd + + # template -- Template Name + # + # + # + # + # Specifies the template name to be used for generating the final output. + # Example: + # + #template file + + # agarg -- AutoGen Argument + # + # + # + # + # This is a pass-through argument. It allows you to specify any + # arbitrary argument to be passed to AutoGen. + # Example: + # + #agarg ag-opt + + # base_name -- Base name for output file(s) + # + # + # + # + # When output is going to AutoGen, a base name must either be supplied + # or derived. If this option is not supplied, then it is taken from + # the @code{template} option. If that is not provided either, then + # it is set to the base name of the current directory. + # Example: + # + #base_name name + + +File: autogen.info, Node: environrc, Next: config example, Prev: sample rcfile, Up: Presetting Options + +7.10.4 environment variable presets +----------------------------------- + +If the AutoOpts client program specifies `environrc' in its option +descriptor file, then environment variables will be used for presetting +option state. Variables will be looked for that are named, +`PROGRAM_OPTNAME' and `PROGRAM'. `PROGRAM' is the upper cased `C-name' +of the program, and `OPTNAME' is the upper cased `C-name' of a specific +option. (The `C-name's are the regular names with all special +characters converted to underscores (`_').) + + Option specific environment variables are processed after (and thus +take precedence over) the contents of the `PROGRAM' environment +variable. The option argument string for these options takes on the +string value gotten from the environment. Consequently, you can only +have one instance of the `OPTNAME'. + + If a particular option may be disabled, then its disabled state is +indicated by setting the `PROGRAM_OPTNAME' value to the disablement +prefix. So, for example, if the disablement prefix were `dont', then +you can disable the `optname' option by setting the `PROGRAM_OPTNAME'' +environment variable to `dont'. *Note Common Attributes::. + + The `PROGRAM' environment string is tokenized and parsed much like a +command line. Doubly quoted strings have backslash escapes processed +the same way they are processed in C program constant strings. Singly +quoted strings are "pretty raw" in that backslashes are honored before +other backslashes, apostrophes, newlines and cr/newline pairs. The +options must be introduced with hyphens in the same way as the command +line. + + Note that not all options may be preset. Options that are specified +with the `no-preset' attribute and the `--help', `--more-help', and +`--save-opts' auto-supported options may not be preset. + + +File: autogen.info, Node: config example, Prev: environrc, Up: Presetting Options + +7.10.5 Config file only example +------------------------------- + +If for some reason it is difficult or unworkable to integrate +configuration file processing with command line option parsing, the +`libopts' (*note libopts procedures::) library can still be used to +process configuration files. Below is a "Hello, World!" greeting +program that tries to load a configuration file `hello.conf' to see if +it should use an alternate greeting or to personalize the salutation. + #include <config.h> + #include <sys/types.h> + #include <stdio.h> + #include <pwd.h> + #include <string.h> + #ifdef HAVE_UNISTD_H + #include <unistd.h> + #endif + #include <autoopts/options.h> + int main(int argc, char ** argv) { + char const * greeting = "Hello"; + char const * greeted = "World"; + tOptionValue const * pOV = configFileLoad("hello.conf"); + + if (pOV != NULL) { + const tOptionValue* pGetV = optionGetValue(pOV, "greeting"); + + if ( (pGetV != NULL) + && (pGetV->valType == OPARG_TYPE_STRING)) + greeting = strdup(pGetV->v.strVal); + + pGetV = optionGetValue(pOV, "personalize"); + if (pGetV != NULL) { + struct passwd * pwe = getpwuid(getuid()); + if (pwe != NULL) + greeted = strdup(pwe->pw_gecos); + } + + optionUnloadNested(pOV); /* deallocate config data */ + } + printf("%s, %s!\n", greeting, greeted); + return 0; + } + +With that text in a file named "hello.c", this short script: + + cc -o hello hello.c `autoopts-config cflags ldflags` + ./hello + echo 'greeting Buzz off' > hello.conf + ./hello + echo personalize > hello.conf + ./hello + +will produce the following output: + + Hello, World! + Buzz off, World! + Hello, Bruce Korb! + + +File: autogen.info, Node: Config File Format, Next: shell options, Prev: Presetting Options, Up: AutoOpts + +7.11 Configuration File Format +============================== + +The configuration file is designed to associate names and values, much +like an AutoGen Definition File (*note Definitions File::). +Unfortunately, the file formats are different. Specifically, AutoGen +Definitions provide for simpler methods for the precise control of a +value string and provides for dynamically computed content. +Configuration files have some established traditions in their layout. +So, they are different, even though they do both allow for a single +name to be associated with multiple values and they both allow for +hierarchical values. + +* Menu: + +* config name/string-value:: assigning a string value to a configurable +* config integer-values:: integer values +* config nested-values:: hierarchical values +* config directives:: configuration file directives +* config comments:: comments in the configuration file + + +File: autogen.info, Node: config name/string-value, Next: config integer-values, Up: Config File Format + +7.11.1 assigning a string value to a configurable +------------------------------------------------- + +The basic syntax is a name followed by a value on a single line. They +are separated from each other by either white space, a colon (`:') or an +equal sign (`='). The colon or equal sign may optionally be surrounded +by additional white space. If more than one value line is needed, a +backslash (`\') may be used to continue the value. The backslash (but +not the newline) will be erased. Leading and trailing white space is +always stripped from the value. + + Fundamentally, it looks like this: + + name value for that name + name = another \ + multi-line value \ + for that name. + name: a *third* value for ``name'' + + If you need more control over the content of the value, you may +enclose the value in XML style brackets: + <name>value </name> + Within these brackets you need not (must not) continue the value +data with backslashes. You may also select the string formation rules +to use, just add the attribute after the name, thus: `<name keep>'. + +`keep' + This mode will keep all text between the brackets and not strip any + white space. + +`uncooked' + This mode strips leading and trailing white space, but not do any + quote processing. This is the default and need not be specified. + +`cooked' + The text is trimmed of leading and trailing white space and XML + encodings are processed. These encodings are slightly expanded + over the XML specification. They are specified with an ampersand + followed by a value name or numeric value and then a semicolon: + + `amp' + `lt' + `gt' + `quot' + `apos' + `#dd' + `#xHH' + These are all per fairly standad HTML and/or XML encodings. + Additionally: + + `bs' + The ASCII back space character. + + `ff' + The ASCII form feed character. + + `ht' + The ASCII horizontal (normal) tab character. + + `cr' + The ASCII carriage return character. + + `vt' + The ASCII vertical tab character. + + `bel' + The ASCII alarm bell character. + + `nl' + The ASCII new line character. + + `space' + The ASCII space character. Normally not necessary, but if + you want to preserve leading or trailing space characters, + then use this. + + And here is an example of an XML-styled value: + + <name cooked> + This is&nl;&ht;another multi-line + &ht;string example. + </name> + + The string value associated with "name" will be exactly the text +enclosed in quotes with the encoded characters "cooked" as you would +expect (three text lines with the last line not ending with a newline, +but ending with a period). + + +File: autogen.info, Node: config integer-values, Next: config nested-values, Prev: config name/string-value, Up: Config File Format + +7.11.2 integer values +--------------------- + +A name can be specified as having an integer value. To do this, you +must use the XML-ish format and specify a "type" attribute for the name: + + <name type=integer> 1234 </name> + + Boolean, enumeration and set membership types will be added as time +allows. "type=string" is also supported, but also is the default. + + +File: autogen.info, Node: config nested-values, Next: config directives, Prev: config integer-values, Up: Config File Format + +7.11.3 hierarchical values +-------------------------- + +In order to specify a hierarchical value, you *must* use XML-styled +formatting, specifying a type that is shorter and easier to spell: + + <structured-name type=nested> + [[....]] + </structured-name> + +The ellipsis may be filled with any legal configuration file name/value +assignments. + + +File: autogen.info, Node: config directives, Next: config comments, Prev: config nested-values, Up: Config File Format + +7.11.4 configuration file directives +------------------------------------ + +The `<?' marker indicates an XML directive. There is only one +directive supported: program sectioning, though two syntaxes are +supported. + + If, for example, you have a collection of programs that work closely +together and, likely, have a common set of options, these programs may +use a single, sectioned, configuration file. The file may be sectioned +in either of two ways. The two ways may not be intermixed in a single +configuration file. All text before the first segmentation line is +processed, then only the segment that applies: + +`<?auto-options ...>' + The `...' ellipsis may contain AutoOpts option processing options. + Currently, that consists of one or both of: + + `gnu' + `autoopts' + to indicate GNU-standard or AutoOpts-standard layout of usage + and version information, and/or + + `misuse-usage' + `no-misuse-usage' + to indicate whether the available options should be listed + when an invalid option appears on the command line. + Anything else will be silently ignored. + +`<?program prog-name>' + The `<?' marker indicates an XML directive. The file is + partitioned by these lines and the options are processed for the + `prog-name' program only before the first `<?program' directive + and the program section with a matching program name. + +`[PROG_NAME]' + This is basically an alias for `<?program prog-name>', except that + the program name must be upper cased and segmented only with + underscores. + +Segmentation does not apply if the config file is being parsed with the +`configFileLoad(3AutoOpts)' function. + + +File: autogen.info, Node: config comments, Prev: config directives, Up: Config File Format + +7.11.5 comments in the configuration file +----------------------------------------- + +Comments are lines beginning with a hash mark (`#'), XML-style comments +(`<!-- arbitrary text -->'), and unrecognized XML directives. + + # this is a comment + <!-- this is also + a comment --> + <?this is + a bad comment ;-> + + +File: autogen.info, Node: shell options, Next: AutoInfo, Prev: Config File Format, Up: AutoOpts + +7.12 AutoOpts for Shell Scripts +=============================== + +AutoOpts may be used with shell scripts either by automatically +creating a complete program that will process command line options and +pass back the results to the invoking shell by issuing shell variable +assignment commands, or it may be used to generate portable shell code +that can be inserted into your script. + + The functionality of these features, of course, is somewhat +constrained compared with the normal program facilities. Specifically, +you cannot invoke callout procedures with either of these methods. +Additionally, if you generate a shell script to do the parsing: + + 1. You cannot obtain options from configuration files. + + 2. You cannot obtain options from environment variables. + + 3. You cannot save the option state to an option file. + + 4. Option conflict/requirement verification is disabled. + + Both of these methods are enabled by running AutoGen on the +definitions file with the additional main procedure attribute: + + main = { main-type = shell-process; }; + or: + main = { main-type = shell-parser; }; + + If you do not supply a `proc-to-call', it will default to +`optionPutShell'. That will produce a program that will process the +options and generate shell text for the invoking shell to interpret +(*note binary-parser::). If you supply the name, `optionParseShell', +then you will have a program that will generate a shell script that can +parse the options (*note script-parser::). If you supply a different +procedure name, you will have to provide that routine and it may do +whatever you like. + +* Menu: + +* binary-parser:: Parsing with an Executable +* script-parser:: Parsing with a Portable Script + + +File: autogen.info, Node: binary-parser, Next: script-parser, Up: shell options + +7.12.1 Parsing with an Executable +--------------------------------- + +The following commands are approximately all that is needed to build a +shell script command line option parser from an option definition file: + + autogen -L <opt-template-dir> test-errors.def + cc -o test-errors -L <opt-lib-dir> -I <opt-include-dir> \ + -DTEST_PROGRAM_OPTS test-errors.c -lopts + + The resulting program can then be used within your shell script as +follows: + + eval `./test-errors "$@"` + if [ -z "${OPTION_CT}" ] ; then exit 1 ; fi + test ${OPTION_CT} -gt 0 && shift ${OPTION_CT} + + Here is the usage output example from AutoOpts error handling tests. +The option definition has argument reordering enabled: + + test_errors - Test AutoOpts for errors + USAGE: errors [ -<flag> [<val>] | --<name>[{=| }<val>] ]... arg ... + Flg Arg Option-Name Description + -o no option The option option descrip + -s Str second The second option descrip + - may appear up to 10 times + -i --- ignored we have dumped this + -X no another Another option descrip + - may appear up to 5 times + -? no help Display extended usage information and exit + -! no more-help Extended usage information passed thru pager + -> opt save-opts Save the option state to a config file + -< Str load-opts Load options from a config file + - disabled as --no-load-opts + - may appear multiple times + + Options are specified by doubled hyphens and their name or by a single + hyphen and the flag character. + Operands and options may be intermixed. They will be reordered. + + The following option preset mechanisms are supported: + - reading file errorsRC + Packaged by Bruce (2012-08-11) + Report test_errors bugs to bkorb@gnu.org + + Using the invocation, + test-errors operand1 -s first operand2 -X -- -s operand3 + you get the following output for your shell script to evaluate: + + OPTION_CT=4 + export OPTION_CT + TEST_ERRORS_SECOND='first' + export TEST_ERRORS_SECOND + TEST_ERRORS_ANOTHER=1 # 0x1 + export TEST_ERRORS_ANOTHER + set -- 'operand1' 'operand2' '-s' 'operand3' + OPTION_CT=0 + + +File: autogen.info, Node: script-parser, Prev: binary-parser, Up: shell options + +7.12.2 Parsing with a Portable Script +------------------------------------- + +If you had used `test-main = optionParseShell' instead, then you can, +at this point, merely run the program and it will write the parsing +script to standard out. You may also provide this program with command +line options to specify the shell script file to create or edit, and you +may specify the shell program to use on the first shell script line. +That program's usage text would look something like the following and +the script parser itself would be very verbose: + + genshellopt - Generate Shell Option Processing Script - Ver. 1 + USAGE: genshellopt [ -<flag> [<val>] | --<name>[{=| }<val>] ]... + Flg Arg Option-Name Description + -o Str script Output Script File + -s Str shell Shell name (follows "#!" magic) + - disabled as --no-shell + - enabled by default + -v opt version Output version information and exit + -? no help Display extended usage information and exit + -! no more-help Extended usage information passed thru pager + + Options are specified by doubled hyphens and their name or by a single + hyphen and the flag character. + + Note that ``shell'' is only useful if the output file does not already + exist. If it does, then the shell name and optional first argument will be + extracted from the script file. + + If the script file already exists and contains Automated Option Processing + text, the second line of the file through the ending tag will be replaced + by the newly generated text. The first ``#!'' line will be regenerated. + Packaged by Bruce (2012-08-11) + Report genshellopt bugs to bkorb@gnu.org + + = = = = = = = = + + This incarnation of genshell will produce + a shell script to parse the options for getdefs: + + getdefs (GNU AutoGen) - AutoGen Definition Extraction Tool - Ver. 1.5 + USAGE: getdefs [ <option-name>[{=| }<val>] ]... + Arg Option-Name Description + Str defs-to-get Regexp to look for after the "/*=" + Str subblock subblock definition names + Str listattr attribute with list of values + opt ordering Alphabetize or use named file + Num first-index The first index to apply to groups + opt filelist Insert source file names into defs + Str assign Global assignments + Str common-assign Assignments common to all blocks + Str copy File(s) to copy into definitions + opt srcfile Insert source file name into each def + opt linenum Insert source line number into each def + Str input Input file to search for defs + Str output Output file to open + opt autogen Invoke AutoGen with defs + Str template Template Name + Str agarg AutoGen Argument + Str base-name Base name for output file(s) + opt version Output version information and exit + no help Display extended usage information and exit + no more-help Extended usage information passed thru pager + opt save-opts Save the option state to a config file + Str load-opts Load options from a config file + + All arguments are named options. + + If no ``input'' argument is provided or is set to simply "-", and if + ``stdin'' is not a ``tty'', then the list of input files will be read from + ``stdin''. + Packaged by Bruce (2012-08-11) + Report getdefs bugs to bkorb@gnu.org + +Resulting in the following script: + #! /bin/sh + # # # # # # # # # # -- do not modify this marker -- + # + # DO NOT EDIT THIS SECTION OF /old-home/bkorb/ag/ag/doc/ag-texi-30133.d/.ag-eFukQW/genshellopt.sh + # + # From here to the next `-- do not modify this marker --', + # the text has been generated Saturday August 11, 2012 at 09:42:46 AM PDT + # From the GETDEFS option definitions + # + GETDEFS_LONGUSAGE_TEXT='getdefs (GNU AutoGen) - AutoGen Definition Extraction Tool - Ver. 1.5 + USAGE: getdefs [ <option-name>[{=| }<val>] ]... + + Specify which definitions are of interest and what to say about them: + + Arg Option-Name Description + Str defs-to-get Regexp to look for after the "/*=" + Str subblock subblock definition names + - may appear multiple times + Str listattr attribute with list of values + - may appear multiple times + + specify how to number the definitions: + + Arg Option-Name Description + opt ordering Alphabetize or use named file + - disabled as --no-ordering + - enabled by default + Num first-index The first index to apply to groups + + Definition insertion options: + + Arg Option-Name Description + opt filelist Insert source file names into defs + Str assign Global assignments + - may appear multiple times + Str common-assign Assignments common to all blocks + - may appear multiple times + Str copy File(s) to copy into definitions + - may appear multiple times + opt srcfile Insert source file name into each def + opt linenum Insert source line number into each def + + specify which files to search for markers: + + Arg Option-Name Description + Str input Input file to search for defs + - may appear multiple times + - default option for unnamed options + + Definition output disposition options:: + + Arg Option-Name Description + Str output Output file to open + - an alternate for autogen + opt autogen Invoke AutoGen with defs + - disabled as --no-autogen + - enabled by default + Str template Template Name + Str agarg AutoGen Argument + - prohibits these options: + output + - may appear multiple times + Str base-name Base name for output file(s) + - prohibits these options: + output + + version, usage and configuration options: + + Arg Option-Name Description + opt version Output version information and exit + no help Display extended usage information and exit + no more-help Extended usage information passed thru pager + opt save-opts Save the option state to a config file + Str load-opts Load options from a config file + - disabled as --no-load-opts + - may appear multiple times + + All arguments are named options. + + If no ``input'\'''\'' argument is provided or is set to simply "-", and if + ``stdin'\'''\'' is not a ``tty'\'''\'', then the list of input files will be read from + ``stdin'\'''\''. + + The following option preset mechanisms are supported: + - reading file /dev/null + + This program extracts AutoGen definitions from a list of source files. + Definitions are delimited by ``/*=<entry-type> <entry-name>\n'\'''\'' and + ``=*/\n'\'''\''. + Packaged by Bruce (2012-08-11) + Report getdefs bugs to bkorb@gnu.org' + + GETDEFS_USAGE_TEXT='getdefs (GNU AutoGen) - AutoGen Definition Extraction Tool - Ver. 1.5 + USAGE: getdefs [ <option-name>[{=| }<val>] ]... + Arg Option-Name Description + Str defs-to-get Regexp to look for after the "/*=" + Str subblock subblock definition names + Str listattr attribute with list of values + opt ordering Alphabetize or use named file + Num first-index The first index to apply to groups + opt filelist Insert source file names into defs + Str assign Global assignments + Str common-assign Assignments common to all blocks + Str copy File(s) to copy into definitions + opt srcfile Insert source file name into each def + opt linenum Insert source line number into each def + Str input Input file to search for defs + Str output Output file to open + opt autogen Invoke AutoGen with defs + Str template Template Name + Str agarg AutoGen Argument + Str base-name Base name for output file(s) + opt version Output version information and exit + no help Display extended usage information and exit + no more-help Extended usage information passed thru pager + opt save-opts Save the option state to a config file + Str load-opts Load options from a config file + + All arguments are named options. + + If no ``input'\'''\'' argument is provided or is set to simply "-", and if + ``stdin'\'''\'' is not a ``tty'\'''\'', then the list of input files will be read from + ``stdin'\'''\''. + Packaged by Bruce (2012-08-11) + Report getdefs bugs to bkorb@gnu.org' + + + GETDEFS_DEFS_TO_GET=${GETDEFS_DEFS_TO_GET} + GETDEFS_DEFS_TO_GET_set=false + export GETDEFS_DEFS_TO_GET + + if test -z "${GETDEFS_SUBBLOCK}" + then + GETDEFS_SUBBLOCK_CT=0 + else + GETDEFS_SUBBLOCK_CT=1 + GETDEFS_SUBBLOCK_1=${GETDEFS_SUBBLOCK} + fi + export GETDEFS_SUBBLOCK_CT + if test -z "${GETDEFS_LISTATTR}" + then + GETDEFS_LISTATTR_CT=0 + else + GETDEFS_LISTATTR_CT=1 + GETDEFS_LISTATTR_1=${GETDEFS_LISTATTR} + fi + export GETDEFS_LISTATTR_CT + GETDEFS_ORDERING=${GETDEFS_ORDERING} + GETDEFS_ORDERING_set=false + export GETDEFS_ORDERING + + GETDEFS_FIRST_INDEX=${GETDEFS_FIRST_INDEX-'0'} + GETDEFS_FIRST_INDEX_set=false + export GETDEFS_FIRST_INDEX + GETDEFS_FILELIST=${GETDEFS_FILELIST} + GETDEFS_FILELIST_set=false + export GETDEFS_FILELIST + + if test -z "${GETDEFS_ASSIGN}" + then + GETDEFS_ASSIGN_CT=0 + else + GETDEFS_ASSIGN_CT=1 + GETDEFS_ASSIGN_1=${GETDEFS_ASSIGN} + fi + export GETDEFS_ASSIGN_CT + if test -z "${GETDEFS_COMMON_ASSIGN}" + then + GETDEFS_COMMON_ASSIGN_CT=0 + else + GETDEFS_COMMON_ASSIGN_CT=1 + GETDEFS_COMMON_ASSIGN_1=${GETDEFS_COMMON_ASSIGN} + fi + export GETDEFS_COMMON_ASSIGN_CT + if test -z "${GETDEFS_COPY}" + then + GETDEFS_COPY_CT=0 + else + GETDEFS_COPY_CT=1 + GETDEFS_COPY_1=${GETDEFS_COPY} + fi + export GETDEFS_COPY_CT + GETDEFS_SRCFILE=${GETDEFS_SRCFILE} + GETDEFS_SRCFILE_set=false + export GETDEFS_SRCFILE + + GETDEFS_LINENUM=${GETDEFS_LINENUM} + GETDEFS_LINENUM_set=false + export GETDEFS_LINENUM + + if test -z "${GETDEFS_INPUT}" + then + GETDEFS_INPUT_CT=0 + else + GETDEFS_INPUT_CT=1 + GETDEFS_INPUT_1=${GETDEFS_INPUT} + fi + export GETDEFS_INPUT_CT + GETDEFS_OUTPUT=${GETDEFS_OUTPUT} + GETDEFS_OUTPUT_set=false + export GETDEFS_OUTPUT + + GETDEFS_AUTOGEN=${GETDEFS_AUTOGEN} + GETDEFS_AUTOGEN_set=false + export GETDEFS_AUTOGEN + + GETDEFS_TEMPLATE=${GETDEFS_TEMPLATE} + GETDEFS_TEMPLATE_set=false + export GETDEFS_TEMPLATE + + if test -z "${GETDEFS_AGARG}" + then + GETDEFS_AGARG_CT=0 + else + GETDEFS_AGARG_CT=1 + GETDEFS_AGARG_1=${GETDEFS_AGARG} + fi + export GETDEFS_AGARG_CT + GETDEFS_BASE_NAME=${GETDEFS_BASE_NAME} + GETDEFS_BASE_NAME_set=false + export GETDEFS_BASE_NAME + + OPT_ARG=$1 + while [ $# -gt 0 ] + do + OPT_ELEMENT='' + OPT_ARG_VAL='' + OPT_ARG=${1} + OPT_CODE=`echo "X${OPT_ARG}"|sed 's/^X-*//'` + shift + OPT_ARG=$1 + case "${OPT_CODE}" in *=* ) + OPT_ARG_VAL=`echo "${OPT_CODE}"|sed 's/^[^=]*=//'` + OPT_CODE=`echo "${OPT_CODE}"|sed 's/=.*$//'` ;; esac + case "${OPT_CODE}" in + 'de' | \ + 'def' | \ + 'defs' | \ + 'defs-' | \ + 'defs-t' | \ + 'defs-to' | \ + 'defs-to-' | \ + 'defs-to-g' | \ + 'defs-to-ge' | \ + 'defs-to-get' ) + if [ -n "${GETDEFS_DEFS_TO_GET}" ] && ${GETDEFS_DEFS_TO_GET_set} ; then + echo Error: duplicate DEFS_TO_GET option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_DEFS_TO_GET_set=true + OPT_NAME='DEFS_TO_GET' + OPT_ARG_NEEDED=YES + ;; + + 'su' | \ + 'sub' | \ + 'subb' | \ + 'subbl' | \ + 'subblo' | \ + 'subbloc' | \ + 'subblock' ) + GETDEFS_SUBBLOCK_CT=`expr ${GETDEFS_SUBBLOCK_CT} + 1` + OPT_ELEMENT="_${GETDEFS_SUBBLOCK_CT}" + OPT_NAME='SUBBLOCK' + OPT_ARG_NEEDED=YES + ;; + + 'lis' | \ + 'list' | \ + 'lista' | \ + 'listat' | \ + 'listatt' | \ + 'listattr' ) + GETDEFS_LISTATTR_CT=`expr ${GETDEFS_LISTATTR_CT} + 1` + OPT_ELEMENT="_${GETDEFS_LISTATTR_CT}" + OPT_NAME='LISTATTR' + OPT_ARG_NEEDED=YES + ;; + + 'or' | \ + 'ord' | \ + 'orde' | \ + 'order' | \ + 'orderi' | \ + 'orderin' | \ + 'ordering' ) + if [ -n "${GETDEFS_ORDERING}" ] && ${GETDEFS_ORDERING_set} ; then + echo Error: duplicate ORDERING option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_ORDERING_set=true + OPT_NAME='ORDERING' + eval GETDEFS_ORDERING${OPT_ELEMENT}=true + export GETDEFS_ORDERING${OPT_ELEMENT} + OPT_ARG_NEEDED=OK + ;; + + 'no-o' | \ + 'no-or' | \ + 'no-ord' | \ + 'no-orde' | \ + 'no-order' | \ + 'no-orderi' | \ + 'no-orderin' | \ + 'no-ordering' ) + if [ -n "${GETDEFS_ORDERING}" ] && ${GETDEFS_ORDERING_set} ; then + echo 'Error: duplicate ORDERING option' >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_ORDERING_set=true + GETDEFS_ORDERING='no' + export GETDEFS_ORDERING + OPT_NAME='ORDERING' + OPT_ARG_NEEDED=NO + ;; + + 'fir' | \ + 'firs' | \ + 'first' | \ + 'first-' | \ + 'first-i' | \ + 'first-in' | \ + 'first-ind' | \ + 'first-inde' | \ + 'first-index' ) + if [ -n "${GETDEFS_FIRST_INDEX}" ] && ${GETDEFS_FIRST_INDEX_set} ; then + echo Error: duplicate FIRST_INDEX option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_FIRST_INDEX_set=true + OPT_NAME='FIRST_INDEX' + OPT_ARG_NEEDED=YES + ;; + + 'fil' | \ + 'file' | \ + 'filel' | \ + 'fileli' | \ + 'filelis' | \ + 'filelist' ) + if [ -n "${GETDEFS_FILELIST}" ] && ${GETDEFS_FILELIST_set} ; then + echo Error: duplicate FILELIST option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_FILELIST_set=true + OPT_NAME='FILELIST' + eval GETDEFS_FILELIST${OPT_ELEMENT}=true + export GETDEFS_FILELIST${OPT_ELEMENT} + OPT_ARG_NEEDED=OK + ;; + + 'as' | \ + 'ass' | \ + 'assi' | \ + 'assig' | \ + 'assign' ) + GETDEFS_ASSIGN_CT=`expr ${GETDEFS_ASSIGN_CT} + 1` + OPT_ELEMENT="_${GETDEFS_ASSIGN_CT}" + OPT_NAME='ASSIGN' + OPT_ARG_NEEDED=YES + ;; + + 'com' | \ + 'comm' | \ + 'commo' | \ + 'common' | \ + 'common-' | \ + 'common-a' | \ + 'common-as' | \ + 'common-ass' | \ + 'common-assi' | \ + 'common-assig' | \ + 'common-assign' ) + GETDEFS_COMMON_ASSIGN_CT=`expr ${GETDEFS_COMMON_ASSIGN_CT} + 1` + OPT_ELEMENT="_${GETDEFS_COMMON_ASSIGN_CT}" + OPT_NAME='COMMON_ASSIGN' + OPT_ARG_NEEDED=YES + ;; + + 'cop' | \ + 'copy' ) + GETDEFS_COPY_CT=`expr ${GETDEFS_COPY_CT} + 1` + OPT_ELEMENT="_${GETDEFS_COPY_CT}" + OPT_NAME='COPY' + OPT_ARG_NEEDED=YES + ;; + + 'sr' | \ + 'src' | \ + 'srcf' | \ + 'srcfi' | \ + 'srcfil' | \ + 'srcfile' ) + if [ -n "${GETDEFS_SRCFILE}" ] && ${GETDEFS_SRCFILE_set} ; then + echo Error: duplicate SRCFILE option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_SRCFILE_set=true + OPT_NAME='SRCFILE' + eval GETDEFS_SRCFILE${OPT_ELEMENT}=true + export GETDEFS_SRCFILE${OPT_ELEMENT} + OPT_ARG_NEEDED=OK + ;; + + 'lin' | \ + 'line' | \ + 'linen' | \ + 'linenu' | \ + 'linenum' ) + if [ -n "${GETDEFS_LINENUM}" ] && ${GETDEFS_LINENUM_set} ; then + echo Error: duplicate LINENUM option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_LINENUM_set=true + OPT_NAME='LINENUM' + eval GETDEFS_LINENUM${OPT_ELEMENT}=true + export GETDEFS_LINENUM${OPT_ELEMENT} + OPT_ARG_NEEDED=OK + ;; + + 'in' | \ + 'inp' | \ + 'inpu' | \ + 'input' ) + GETDEFS_INPUT_CT=`expr ${GETDEFS_INPUT_CT} + 1` + OPT_ELEMENT="_${GETDEFS_INPUT_CT}" + OPT_NAME='INPUT' + OPT_ARG_NEEDED=YES + ;; + + 'ou' | \ + 'out' | \ + 'outp' | \ + 'outpu' | \ + 'output' ) + if [ -n "${GETDEFS_OUTPUT}" ] && ${GETDEFS_OUTPUT_set} ; then + echo Error: duplicate OUTPUT option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_OUTPUT_set=true + OPT_NAME='OUTPUT' + OPT_ARG_NEEDED=YES + ;; + + 'au' | \ + 'aut' | \ + 'auto' | \ + 'autog' | \ + 'autoge' | \ + 'autogen' ) + if [ -n "${GETDEFS_AUTOGEN}" ] && ${GETDEFS_AUTOGEN_set} ; then + echo Error: duplicate AUTOGEN option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_AUTOGEN_set=true + OPT_NAME='AUTOGEN' + eval GETDEFS_AUTOGEN${OPT_ELEMENT}=true + export GETDEFS_AUTOGEN${OPT_ELEMENT} + OPT_ARG_NEEDED=OK + ;; + + 'no-a' | \ + 'no-au' | \ + 'no-aut' | \ + 'no-auto' | \ + 'no-autog' | \ + 'no-autoge' | \ + 'no-autogen' ) + if [ -n "${GETDEFS_AUTOGEN}" ] && ${GETDEFS_AUTOGEN_set} ; then + echo 'Error: duplicate AUTOGEN option' >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_AUTOGEN_set=true + GETDEFS_AUTOGEN='no' + export GETDEFS_AUTOGEN + OPT_NAME='AUTOGEN' + OPT_ARG_NEEDED=NO + ;; + + 'te' | \ + 'tem' | \ + 'temp' | \ + 'templ' | \ + 'templa' | \ + 'templat' | \ + 'template' ) + if [ -n "${GETDEFS_TEMPLATE}" ] && ${GETDEFS_TEMPLATE_set} ; then + echo Error: duplicate TEMPLATE option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_TEMPLATE_set=true + OPT_NAME='TEMPLATE' + OPT_ARG_NEEDED=YES + ;; + + 'ag' | \ + 'aga' | \ + 'agar' | \ + 'agarg' ) + GETDEFS_AGARG_CT=`expr ${GETDEFS_AGARG_CT} + 1` + OPT_ELEMENT="_${GETDEFS_AGARG_CT}" + OPT_NAME='AGARG' + OPT_ARG_NEEDED=YES + ;; + + 'ba' | \ + 'bas' | \ + 'base' | \ + 'base-' | \ + 'base-n' | \ + 'base-na' | \ + 'base-nam' | \ + 'base-name' ) + if [ -n "${GETDEFS_BASE_NAME}" ] && ${GETDEFS_BASE_NAME_set} ; then + echo Error: duplicate BASE_NAME option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 ; fi + GETDEFS_BASE_NAME_set=true + OPT_NAME='BASE_NAME' + OPT_ARG_NEEDED=YES + ;; + + 've' | \ + 'ver' | \ + 'vers' | \ + 'versi' | \ + 'versio' | \ + 'version' ) + echo "$GETDEFS_LONGUSAGE_TEXT" + exit 0 + ;; + + 'he' | \ + 'hel' | \ + 'help' ) + echo "$GETDEFS_LONGUSAGE_TEXT" + exit 0 + ;; + + 'mo' | \ + 'mor' | \ + 'more' | \ + 'more-' | \ + 'more-h' | \ + 'more-he' | \ + 'more-hel' | \ + 'more-help' ) + echo "$GETDEFS_LONGUSAGE_TEXT" | ${PAGER-more} + exit 0 + ;; + + 'sa' | \ + 'sav' | \ + 'save' | \ + 'save-' | \ + 'save-o' | \ + 'save-op' | \ + 'save-opt' | \ + 'save-opts' ) + echo 'Warning: Cannot save options files' >&2 + OPT_ARG_NEEDED=OK + ;; + + 'lo' | \ + 'loa' | \ + 'load' | \ + 'load-' | \ + 'load-o' | \ + 'load-op' | \ + 'load-opt' | \ + 'load-opts' ) + echo 'Warning: Cannot load options files' >&2 + OPT_ARG_NEEDED=YES + ;; + + 'no-l' | \ + 'no-lo' | \ + 'no-loa' | \ + 'no-load' | \ + 'no-load-' | \ + 'no-load-o' | \ + 'no-load-op' | \ + 'no-load-opt' | \ + 'no-load-opts' ) + echo 'Warning: Cannot suppress the loading of options files' >&2 + OPT_ARG_NEEDED=NO + ;; + + * ) + echo Unknown option: "${OPT_CODE}" >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 + ;; + esac + + case "${OPT_ARG_NEEDED}" in + NO ) + OPT_ARG_VAL='' + ;; + YES ) + if [ -z "${OPT_ARG_VAL}" ] + then + if [ $# -eq 0 ] + then + echo No argument provided for ${OPT_NAME} option >&2 + echo "$GETDEFS_USAGE_TEXT" + exit 1 + fi + OPT_ARG_VAL=${OPT_ARG} + shift + OPT_ARG=$1 + fi + ;; + OK ) + if [ -z "${OPT_ARG_VAL}" ] && [ $# -gt 0 ] + then + case "${OPT_ARG}" in -* ) ;; * ) + OPT_ARG_VAL=${OPT_ARG} + shift + OPT_ARG=$1 ;; esac + fi + ;; + esac + if [ -n "${OPT_ARG_VAL}" ] + then + eval GETDEFS_${OPT_NAME}${OPT_ELEMENT}="'${OPT_ARG_VAL}'" + export GETDEFS_${OPT_NAME}${OPT_ELEMENT} + fi + done + unset OPT_PROCESS || : + unset OPT_ELEMENT || : + unset OPT_ARG || : + unset OPT_ARG_NEEDED || : + unset OPT_NAME || : + unset OPT_CODE || : + unset OPT_ARG_VAL || : + + # # # # # # # # # # + # + # END OF AUTOMATED OPTION PROCESSING + # + # # # # # # # # # # -- do not modify this marker -- + + env | grep '^GETDEFS_' + + +File: autogen.info, Node: AutoInfo, Next: AutoMan pages, Prev: shell options, Up: AutoOpts + +7.13 Automated Info Docs +======================== + +AutoOpts provides two templates for producing `.texi' documentation. +`agtexi-cmd.tpl' for the invoking section, and `aginfo3.tpl' for +describing exported library functions and macros. + + For both types of documents, the documentation level is selected by +passing a `-DLEVEL=<level-name>' argument to AutoGen when you build the +document. (See the example invocation below.) + + Two files will be produced, a `.texi' file and a `.menu' file. You +should include the text in the `.menu' file in a `@menu' list, either +with `@include'-ing it or just copying text. The `.texi' file should +be `@include'-ed where the invoking section belongs in your document. + + The `.texi' file will contain an introductory paragraph, a menu and +a subordinate section for the invocation usage and for each documented +option. The introductory paragraph is normally the boiler plate text, +along the lines of: + + This chapter documents the @file{AutoOpts} generated usage text + and option meanings for the @file{your-program} program. + +or: + + These are the publicly exported procedures from the libname library. + Any other functions mentioned in the header file are for the private use + of the library. + +* Menu: + +* command-info:: ``invoking'' info docs +* library-info:: library info docs + + +File: autogen.info, Node: command-info, Next: library-info, Up: AutoInfo + +7.13.1 "invoking" info docs +--------------------------- + +Using the option definitions for an AutoOpt client program, the +`agtexi-cmd.tpl' template will produce texinfo text that documents the +invocation of your program. The text emitted is designed to be included +in the full texinfo document for your product. It is not a stand-alone +document. The usage text for the *note autogen usage::, *note getdefs +usage:: and *note columns usage:: programs, are included in this +document and are all generated using this template. + + If your program's option definitions include a `prog-info-descrip' +section, then that text will replace the boilerplate introductory +paragraph. + +These files are produced by invoking the following command: + + autogen -L ${prefix}/share/autogen -Tagtexi-cmd.tpl \ + -DLEVEL=section your-opts.def + +Where `${prefix}' is the AutoGen installation prefix and +`your-opts.def' is the name of your product's option definition file. + + +File: autogen.info, Node: library-info, Prev: command-info, Up: AutoInfo + +7.13.2 library info docs +------------------------ + +The `texinfo' doc for libraries is derived from mostly the same +information as is used for producing man pages *Note man3::. The main +difference is that there is only one output file and the individual +functions are referenced from a `.texi' menu. There is also a small +difference in the global attributes used: + + lib_description A description of the library. This text + appears before the menu. If not provided, the + standard boilerplate version will be inserted. + + see_also The `SEE ALSO' functionality is not supported + for the `texinfo' documentation, so any + `see_also' attribute will be ignored. + +These files are produced by invoking the following commands: + + getdefs linenum srcfile template=aginfo3.tpl output=libexport.def \ + <source-file-list> + + autogen -L ${prefix}/share/autogen -DLEVEL=section libexport.def + +Where `${prefix}' is the AutoGen installation prefix and +`libexport.def' is some name that suits you. + + An example of this can be seen in this document, *Note libopts +procedures::. + + +File: autogen.info, Node: AutoMan pages, Next: getopt_long, Prev: AutoInfo, Up: AutoOpts + +7.14 Automated Man Pages +======================== + +AutoOpts provides two templates for producing man pages. The command +(`man1') pages are derived from the options definition file, and the +library (`man3') pages are derived from stylized comments (*note +getdefs Invocation::). + +* Menu: + +* man1:: command line man pages +* man3:: library man pages + + +File: autogen.info, Node: man1, Next: man3, Up: AutoMan pages + +7.14.1 command line man pages +----------------------------- + +Using the option definitions for an AutoOpts client program, the +`agman-cmd.tpl' template will produce an nroff document suitable for +use as a `man(1)' page document for a command line command. The +description section of the document is either the `prog-man-descrip' +text, if present, or the `detail' text. + + Each option in the option definitions file is fully documented in +its usage. This includes all the information documented above for each +option (*note option attributes::), plus the `doc' attribute is +appended. Since the `doc' text is presumed to be designed for +`texinfo' documentation, `sed' is used to convert some constructs from +`texi' to `nroff'-for-`man'-pages. Specifically, + + convert @code, @var and @samp into \fB...\fP phrases + convert @file into \fI...\fP phrases + Remove the '@' prefix from curly braces + Indent example regions + Delete the example commands + Replace `end example' command with ".br" + Replace the `@*' command with ".br" + +This document is produced by invoking the following command: + + autogen -L ${prefix}/share/autogen -Tagman-cmd.tpl options.def + +Where `${prefix}' is the AutoGen installation prefix and `options.def' +is the name of your product's option definition file. I do not use +this very much, so any feedback or improvements would be greatly +appreciated. + + +File: autogen.info, Node: man3, Prev: man1, Up: AutoMan pages + +7.14.2 library man pages +------------------------ + +Two global definitions are required, and then one library man page is +produced for each `export_func' definition that is found. It is +generally convenient to place these definitions as `getdefs' comments +(*note getdefs Invocation::) near the procedure definition, but they +may also be a separate AutoGen definitions file (*note Definitions +File::). Each function will be cross referenced with their sister +functions in a `SEE ALSO' section. A global `see_also' definition will +be appended to this cross referencing text. + +The two global definitions required are: + + library This is the name of your library, without the `lib' + prefix. The AutoOpts library is named + `libopts.so...', so the `library' attribute would have + the value `opts'. + + header Generally, using a library with a compiled program + entails `#include'-ing a header file. Name that + header with this attribute. In the case of AutoOpts, + it is generated and will vary based on the name of the + option definition file. Consequently, `your-opts.h' is + specified. + +The `export_func' definition should contain the following attributes: + + name The name of the procedure the library user may call. + what A brief sentence describing what the procedure does. + doc A detailed description of what the procedure does. It + may ramble on for as long as necessary to properly + describe it. + err A short description of how errors are handled. + ret_type The data type returned by the procedure. Omit this + for `void' procedures. + ret_desc Describe what the returned value is, if needed. + private If specified, the function will *not* be documented. + This is used, for example, to produce external + declarations for functions that are not available for + public use, but are used in the generated text. + + arg This is a compound attribute that contains: + + arg_type The data type of the argument. + arg_name A short name for it. + arg_desc A brief description. + +As a `getdefs' comment, this would appear something like this: + + /*=--subblock=arg=arg_type,arg_name,arg_desc =*/ + /*=* + * library: opts + * header: your-opts.h + =*/ + /*=export_func optionProcess + * + * what: this is the main option processing routine + * arg: + tOptions* + pOpts + program options descriptor + + * arg: + int + argc + program arg count + + * arg: + char** + argv + program arg vector + + * ret_type: int + * ret_desc: the count of the arguments processed + * + * doc: This is what it does. + * err: When it can't, it does this. + =*/ + +Note the `subblock' and `library' comments. `subblock' is an embedded +`getdefs' option (*note getdefs subblock::) that tells it how to parse +the `arg' attribute. The `library' and `header' entries are global +definitions that apply to all the documented functions. + + +File: autogen.info, Node: getopt_long, Next: i18n, Prev: AutoMan pages, Up: AutoOpts + +7.15 Using getopt(3C) +===================== + +There is a template named, `getopt.tpl' that is distributed with +AutoOpts. Using that template instead of `options.tpl' will produce +completely independent source code that will parse command line +options. It will utilize either the standard `getopt(3C)' or the GNU +`getopt_long(3GNU)' function to drive the parsing. Which is used is +selected by the presence or absence of the `long-opts' program +attribute. It will save you from being dependent upon the `libopts' +library and it produces code ready for internationalization. However, +it also carries with it some limitations on the use of AutoOpts +features and some requirements on the build environment. + +* Menu: + +* getopt limitations:: getopt feature limitations +* getopt building:: getopt build requirements + + +File: autogen.info, Node: getopt limitations, Next: getopt building, Up: getopt_long + +7.15.1 getopt feature limitations +--------------------------------- + +This list of limitations is relative to the full list of AutoOpts +supported features, *Note Features::. + + 1. You cannot automatically take advantage of environment variable + options or automated parsing of configuration files ("rc" or "ini" + files). Consequently, the resulting code does not support + `--load-opts' or `--save-opts' options automatically. + + 2. You cannot use set membership, enumerated, range checked or stacked + argument type options. In fact, you cannot use anything that + depends upon the `libopts' library. You are constrained to + options that take "`string'" arguments, though you may handle the + option argument with a callback procedure. + + 3. Special disablement and/or enablement prefixes are not recognized. + + 4. Generated `main()' procedures will not work. + + 5. Option coordination with external libraries will not work. + + 6. Every option must be "settable" because the emitted code depends + upon the `SET_OPT_XXX' macros having been defined. Specify this + as a global (program) attribute. + + 7. You must specify a main procedure of type "main". The + `getopt.tpl' template depends upon being able to compile the + traditional .c file into a program and get it to emit the usage + text. + + 8. For the same reason, the traditional option parsing table code + must be emitted before the `getopt.tpl' template gets expanded. + + 9. The usage text is, therefore, statically defined. + + +File: autogen.info, Node: getopt building, Prev: getopt limitations, Up: getopt_long + +7.15.2 getopt build requirements +-------------------------------- + +You must supply some compile and link options via environment variables. + +`srcdir' + In case the option definition file lives in a different directory. + +`CFLAGS' + Any special flags required to compile. The flags from + `autoopts-config cflags' will be included automatically. Since + the creation of the option parsing code includes creating a program + that prints out help text, if it is necessary to include files from + various directories to compile that program, you will need to + specify those directories with "-Idirpath" text in the `CFLAGS'. + Some experimentation may be necessary in that case. + + *NOTE*: the "-Idirpath" text is only needed if your option callback + functions include code that require additional "#include" + directives. + +`LDFLAGS' + Any special flags required to link. The flags from + `autoopts-config ldflags' will be included automatically. This is + required only if additional link flags for the help text emission + program might be needed. + +`CC' + This is needed only if "`cc'" cannot be found in `$PATH' (or it is + not the one you want). + + To use this, set the exported environment variables and specify +"getopt" as the default template in your option definitions file (*note +Identification::). You will have four new files. Assuming your +definitions were in a file named `myprog-opts.def' and your program +name was specified as `progname', the resulting files would be created: +`myprog-opts.h', `myprog-opts.c', `getopt-progname.h' and +`getopt-progname.c'. You must compile and link both `.c' files into +your program. If there are link failures, then you are using AutoOpts +features that require the `libopts' library. You must remove these +features, *Note getopt limitations::. + + These generated files depend upon configure defines to work +correctly. Therefore, you must specify a `config-header' attribute +(*note programming attributes::) and ensure it has `#defines' for +either `HAVE_STDINT_H' or `HAVE_INTTYPES_H'; either `HAVE_SYS_LIMITS_H' +or `HAVE_LIMITS_H'; and `HAVE_SYSEXITS_H', if the `sysexits.h' header +is available. The required header files for these defines are, +respectively, the `/usr/include' files named: + * stdint.h + + * inttypes.h + + * sys/limits.h + + * limits.h + + * sysexits.h + +The following header files must also exist on the build platform: + * sys/types.h + + * stdio.h + + * string.h + + * unistd.h - or, for getopt_long: + + * getopt.h + + +File: autogen.info, Node: i18n, Next: Naming Conflicts, Prev: getopt_long, Up: AutoOpts + +7.16 Internationalizing AutoOpts +================================ + +The generated code for AutoOpts will enable and disable the translation +of AutoOpts run time messages. If `ENABLE_NLS' is defined at compile +time and `no-xlate' has been not set to the value _anything_, then the +`_()' macro may be used to specify a translation function. If +undefined, it will default to `gettext(3GNU)'. This define will also +enable a callback function that `optionProcess' invokes at the +beginning of option processing. The AutoOpts `libopts' library will +always check for this _compiled with NLS_ flag, so `libopts' does not +need to be specially compiled. The strings returned by the translation +function will be `strdup(3)-ed' and kept. They will not be +re-translated, even if the locale changes, but they will also not be +dependent upon reused or unmappable memory. + + To internationalize option processing, you should first +internationalize your program. Then, the option processing strings can +be added to your translation text by processing the AutoOpts-generated +`my-opts.c' file and adding the distributed `po/usage-txt.pot' file. +(Also by extracting the strings yourself from the `usage-txt.h' file.) +When you call `optionProcess', all of the user visible AutoOpts strings +will be passed through the localization procedure established with the +`_()' preprocessing macro. + + All of this is _dis_-abled if you specify the global attribute +`no-xlate' to _anything_. + + +File: autogen.info, Node: Naming Conflicts, Next: All Attribute Names, Prev: i18n, Up: AutoOpts + +7.17 Naming Conflicts +===================== + +AutoOpts generates a header file that contains many C preprocessing +macros and several external names. For the most part, they begin with +either `opt_' or `option', or else they end with `_opt'. If this +happens to conflict with other macros you are using, or if you are +compiling multiple option sets in the same compilation unit, the +conflicts can be avoided. You may specify an external name `prefix' +(*note program attributes::) for all of the names generated for each +set of option definitions. + + Among these macros, several take an option name as a macro argument. +Sometimes, this will inconveniently conflict. For example, if you +specify an option named, `debug', the emitted code will presume that +`DEBUG' is not a preprocessing name. Or also, if you are building on a +Windows platform, you may find that MicroSoft has usurped a number of +user space names in its header files. Consequently, you will get a +preprocessing error if you use, for example, `HAVE_OPT(DEBUG)' or +`HAVE_OPT(INTERNAL)' (*note HAVE_OPT::) in your code. You may trigger +an obvious warning for such conflicts by specifying the +`guard-option-names' attribute (*note program attributes::). That +emitted code will also `#undef'-ine the conflicting name. + + +File: autogen.info, Node: All Attribute Names, Next: Option Define Names, Prev: Naming Conflicts, Up: AutoOpts + +7.18 All Attribute Names +======================== + +This is the list of all the option attributes used in the various +option processing templates. There are several flavors of attributes, +and these are not distinguished here. + + * Valid, current attributes that you are encouraged to use. + + * Internally generated attributes that you cannot use at all. I + need to prefix these with a distinguished prefix. e.g. "ao-" + + * Valid attributes, but are deprecated. Alternates should be + documented. + + This list is derived by running many example option definitions +through the option generation and man page templates and noting which +attributes are actually used. There may be a few that are used but not +exercised in my testing. If so, I need to ferret those out and test +them, too. + + aliases allow-errors arg-default + arg-optional arg-range arg-type + argument call-proc code + config-header copyright default + deprecated descrip detail + disable documentation eaddr + enable enabled environrc + equivalence exit-name explain + export extract-code field + file-fail-code flag flag-code + flag-proc flags-cant flags-must + full-usage gnu-usage guard-option-names + help-value homerc ifdef + ifndef immed-disable immediate + include lib-name library + long-opts main main-text + main-type max min + more-help-value must-set name + no-command no-libopts no-misuse-usage + no-preset no-xlate nomem-fail-code + omitted-usage package prefix + prefix-enum preserve-case prog-name + prog-title reorder-args resettable + scaled settable short-usage + stack-arg std-value test-main + translators unstack-arg usage + usage-message usage-opt usage-type + val-name val-upname value + version + + +File: autogen.info, Node: Option Define Names, Prev: All Attribute Names, Up: AutoOpts + +7.19 Option Definition Name Index +================================= + + +* Menu: + +* allow-errors: presentation attributes. + (line 9) +* arg-default: arg-default. (line 6) +* arg-name: documentation attributes. + (line 12) +* arg-optional: arg-optional. (line 6) +* arg-range: arg-type number. (line 21) +* arg-type: Option Arguments. (line 23) +* argument: program attributes. (line 22) +* author: information attributes. + (line 29) +* before-guile-boot: main guile. (line 9) +* call-proc: Option Argument Handling. + (line 63) +* comment-char: main for-each. (line 127) +* config-header <1>: programming attributes. + (line 10) +* config-header: program attributes. (line 33) +* copyright: information attributes. + (line 10) +* date: information attributes. + (line 13) +* default: opt-attr default option. + (line 6) +* deprecated: Common Attributes. (line 29) +* descrip: Required Attributes. (line 36) +* detail <1>: documentation attributes. + (line 164) +* detail: information attributes. + (line 44) +* die-code: programming attributes. + (line 43) +* disable: Common Attributes. (line 34) +* disable-load: config attributes. (line 13) +* disable-save: config attributes. (line 13) +* doc: documentation attributes. + (line 18) +* doc-section: documentation attributes. + (line 37) +* documentation <1>: opt-attr documentation. + (line 17) +* documentation: lib and program. (line 17) +* eaddr: information attributes. + (line 32) +* enable: Common Attributes. (line 47) +* enabled: Common Attributes. (line 51) +* environrc: config attributes. (line 17) +* equivalence: opt-attr equivalence. + (line 6) +* exit-desc: programming attributes. + (line 16) +* exit-name: programming attributes. + (line 16) +* explain: information attributes. + (line 48) +* export: programming attributes. + (line 54) +* extra-code: arg-keyword. (line 15) +* extract-code: Option Argument Handling. + (line 52) +* file-exists: arg-type file name. (line 13) +* file-mode: arg-type file name. (line 29) +* flag-code: Option Argument Handling. + (line 27) +* flag-proc: Option Argument Handling. + (line 70) +* full-usage: usage attributes. (line 10) +* gnu-usage <1>: information attributes. + (line 87) +* gnu-usage: usage attributes. (line 39) +* guard-option-names: programming attributes. + (line 62) +* guile-main: main guile. (line 15) +* handler-proc: main for-each. (line 20) +* handler-type: main for-each. (line 45) +* help-value: automatic options. (line 18) +* homerc: config attributes. (line 26) +* ifdef: Common Attributes. (line 58) +* ifndef: Common Attributes. (line 58) +* immed-disable: Immediate Action. (line 31) +* immediate: Immediate Action. (line 24) +* include: programming attributes. + (line 93) +* keyword: arg-keyword. (line 6) +* lib-name: lib and program. (line 27) +* library: lib and program. (line 7) +* load-opts-value: automatic options. (line 15) +* long-opts: presentation attributes. + (line 15) +* main: Generated main. (line 8) +* main-fini: main for-each. (line 123) +* main-init: main for-each. (line 119) +* main-type: Generated main. (line 12) +* max: Common Attributes. (line 14) +* min: Common Attributes. (line 20) +* more-help-value: automatic options. (line 15) +* must-set: Common Attributes. (line 25) +* MYHANDLER-code: main for-each. (line 95) +* name: Required Attributes. (line 9) +* no-command: Common Attributes. (line 94) +* no-libopts: programming attributes. + (line 97) +* no-misuse-usage: usage attributes. (line 53) +* no-preset: opt-attr no-preset. (line 6) +* no-xlate: presentation attributes. + (line 38) +* omitted-usage: Common Attributes. (line 58) +* open-file: arg-type file name. (line 23) +* option-code: main main. (line 7) +* option-info: documentation attributes. + (line 33) +* opts-ptr: information attributes. + (line 66) +* owner: information attributes. + (line 15) +* package: information attributes. + (line 51) +* prefix: programming attributes. + (line 104) +* prefix-enum: arg-type keyword. (line 38) +* preserve-case: information attributes. + (line 57) +* prog-desc: information attributes. + (line 66) +* prog-group: usage attributes. (line 61) +* prog-info-descrip: documentation attributes. + (line 160) +* prog-man-descrip: documentation attributes. + (line 160) +* prog-name: program attributes. (line 15) +* prog-title: program attributes. (line 19) +* rcfile: config attributes. (line 58) +* reorder-args <1>: information attributes. + (line 96) +* reorder-args: presentation attributes. + (line 56) +* reset-value: automatic options. (line 15) +* resettable: presentation attributes. + (line 73) +* save-opts-value: automatic options. (line 19) +* scaled: arg-type number. (line 15) +* settable: opt-attr settable. (line 6) +* short-usage: usage attributes. (line 34) +* stack-arg: Option Argument Handling. + (line 74) +* text: information attributes. + (line 26) +* translators: opt-attr translators. + (line 6) +* type: information attributes. + (line 17) +* unstack-arg: Option Argument Handling. + (line 87) +* usage <1>: information attributes. + (line 79) +* usage: usage attributes. (line 69) +* usage-message: programming attributes. + (line 33) +* usage-opt <1>: usage attributes. (line 47) +* usage-opt: Features. (line 57) +* usage-value: automatic options. (line 15) +* value: Common Attributes. (line 10) +* vendor-opt: config attributes. (line 63) +* version: usage attributes. (line 86) +* version-proc: automatic options. (line 23) +* version-value: automatic options. (line 15) + + +File: autogen.info, Node: Add-Ons, Next: Future, Prev: AutoOpts, Up: Top + +8 Add-on packages for AutoGen +***************************** + +This chapter includes several programs that either work closely with +AutoGen (extracting definitions or providing special formatting +functions), or leverage off of AutoGen technology. There is also a +formatting library that helps make AutoGen possible. + + AutoOpts ought to appear in this list as well, but since it is the +primary reason why many people would even look into AutoGen at all, I +decided to leave it in the list of chapters. + +* Menu: + +* AutoFSM:: Automated Finite State Machine. +* AutoXDR:: Combined RPC Marshalling. +* AutoEvents:: Automated Event Management. +* columns Invocation:: Invoking columns. +* getdefs Invocation:: Invoking getdefs. +* xml2ag Invocation:: Invoking xml2ag. +* snprintfv:: The extensible format printing library. + + +File: autogen.info, Node: AutoFSM, Next: AutoXDR, Up: Add-Ons + +8.1 Automated Finite State Machine +================================== + +The templates to generate a finite state machine in C or C++ is included +with AutoGen. The documentation is not. The documentation is in HTML +format for viewing (http://www.gnu.org/software/autogen/autofsm.html), +or you can download FSM (http://download.sourceforge.net/autogen/). + + +File: autogen.info, Node: AutoXDR, Next: AutoEvents, Prev: AutoFSM, Up: Add-Ons + +8.2 Combined RPC Marshalling +============================ + +The templates and NFSv4 definitions are not included with AutoGen in +any way. The folks that designed NFSv4 noticed that much time and +bandwidth was wasted sending queries and responses when many of them +could be bundled. The protocol bundles the data, but there is no +support for it in rpcgen. That means you have to write your own code +to do that. Until now. Download this and you will have a large, +complex example of how to use `AutoXDR' for generating the marshaling +and unmarshaling of combined RPC calls. There is a brief example on +the web (http://www.gnu.org/software/autogen/xdr/index.html), but you +should download AutoXDR (http://download.sourceforge.net/autogen/). + + +File: autogen.info, Node: AutoEvents, Next: columns Invocation, Prev: AutoXDR, Up: Add-Ons + +8.3 Automated Event Management +============================== + +Large software development projects invariably have a need to manage +the distribution and display of state information and state changes. +In other words, they need to manage their software events. Generally, +each such project invents its own way of accomplishing this and then +struggles to get all of its components to play the same way. It is a +difficult process and not always completely successful. This project +helps with that. + + AutoEvents completely separates the tasks of supplying the data +needed for a particular event from the methods used to manage the +distribution and display of that event. Consequently, the programmer +writing the code no longer has to worry about that part of the problem. +Likewise the persons responsible for designing the event management and +distribution no longer have to worry about getting programmers to write +conforming code. + + This is a work in progress. See my web page +(http://www.gnu.org/software/autogen/autoevents.html) on the subject, +if you are interested. I have some useful things put together, but it +is not ready to call a product. + + +File: autogen.info, Node: columns Invocation, Next: getdefs Invocation, Prev: AutoEvents, Up: Add-Ons + +8.4 Invoking columns +==================== + +This program was designed for the purpose of generating compact, +columnized tables. It will read a list of text items from standard in +or a specified input file and produce a columnized listing of all the +non-blank lines. Leading white space on each line is preserved, but +trailing white space is stripped. Methods of applying per-entry and +per-line embellishments are provided. See the formatting and +separation arguments below. + + This program is used by AutoGen to help clean up and organize its +output. + + See `autogen/agen5/fsm.tpl' and the generated output `pseudo-fsm.h'. + + This function was not implemented as an expression function because +either it would have to be many expression functions, or a provision +would have to be added to provide options to expression functions. +Maybe not a bad idea, but it is not being implemented at the moment. + + A side benefit is that you can use it outside of `autogen' to +columnize input, a la the `ls' command. + + This section was generated by *AutoGen*, using the `agtexi-cmd' +template and the option descriptions for the `columns' program. This +software is released under the GNU General Public License, version 3 or +later. + +* Menu: + +* columns usage:: columns help/usage (`--help') +* columns dimensions:: dimensions options +* columns treatment:: treatment options +* columns ordering:: ordering options +* columns input-text:: input-text options +* columns config:: presetting/configuring columns +* columns exit status:: exit status +* columns See Also:: See Also + + +File: autogen.info, Node: columns usage, Next: columns dimensions, Up: columns Invocation + +8.4.1 columns help/usage (`--help') +----------------------------------- + +This is the automatically generated usage text for columns. + + The text printed is the same whether selected with the `help' option +(`--help') or the `more-help' option (`--more-help'). `more-help' will +print the usage text by passing it through a pager program. +`more-help' is disabled on platforms without a working `fork(2)' +function. The `PAGER' environment variable is used to select the +program, defaulting to `more'. Both will exit with a status code of 0. + +columns (GNU AutoGen) - Columnize Input Text - Ver. 1.2 +USAGE: columns [ -<flag> [<val>] | --<name>[{=| }<val>] ]... + +Specify the output dimensions: + + Flg Arg Option-Name Description + -W Num width Maximum Line Width + - It must be in the range: + 16 to 4095 + -c Num columns Desired number of columns + - It must be in the range: + 1 to 2048 + -w Num col-width Set width of each column + - It must be in the range: + 1 to 2048 + Num tab-width tab width + +Specify how to lay out the text: + + Flg Arg Option-Name Description + Num spread maximum spread added to column width + - It must be in the range: + 1 to 1024 + no fill Fill lines with input + - prohibits these options: + spread + col-width + by-columns + -I Str indent Line prefix or indentation + Str first-indent First line prefix + - requires these options: + indent + -f Str format Formatting string for each input + -S Str separation Separation string - follows all but last + Str line-separation string at end of all lines but last + Str ending string at end of last line + +Specify the ordering of the entries: + + Flg Arg Option-Name Description + no by-columns Print entries in column order + -s opt sort Sort input text + +Redirecting stdin to an alternate file: + + Flg Arg Option-Name Description + -i Str input Input file (if not stdin) + +version, usage and configuration options: + + Flg Arg Option-Name Description + -v opt version Output version information and exit + -? no help Display extended usage information and exit + -! no more-help Extended usage information passed thru pager + -> opt save-opts Save the option state to a config file + -< Str load-opts Load options from a config file + - disabled as --no-load-opts + - may appear multiple times + +Options are specified by doubled hyphens and their name or by a single +hyphen and the flag character. + +The following option preset mechanisms are supported: + - reading file ./.columnsrc + - reading file $HOME/.columnsrc + - examining environment variables named COLUMNS_* +Packaged by Bruce (2012-08-11) +Report columns bugs to bkorb@gnu.org + + +File: autogen.info, Node: columns dimensions, Next: columns treatment, Prev: columns usage, Up: columns Invocation + +8.4.2 dimensions options +------------------------ + +Specify the output dimensions. + +width option (-W). +.................. + +This is the "maximum line width" option. This option takes an argument +number `num'. This option specifies the full width of the output line, +including any start-of-line indentation. The output will fill each +line as completely as possible, unless the column width has been +explicitly specified. If the maximum width is less than the length of +the widest input, you will get a single column of output. + +columns option (-c). +.................... + +This is the "desired number of columns" option. This option takes an +argument number `count'. Use this option to specify exactly how many +columns to produce. If that many columns will not fit within +LINE_WIDTH, then the count will be reduced to the number that fit. + +col-width option (-w). +...................... + +This is the "set width of each column" option. This option takes an +argument number `num'. Use this option to specify exactly how many +characters are to be allocated for each column. If it is narrower than +the widest entry, it will be over-ridden with the required width. + +tab-width option. +................. + +This is the "tab width" option. This option takes an argument number +`num'. If an indentation string contains tabs, then this value is used +to compute the ending column of the prefix string. + + +File: autogen.info, Node: columns treatment, Next: columns ordering, Prev: columns dimensions, Up: columns Invocation + +8.4.3 treatment options +----------------------- + +Specify how to lay out the text. + +spread option. +.............. + +This is the "maximum spread added to column width" option. This option +takes an argument number `num'. Use this option to specify exactly how +many characters may be added to each column. It allows you to prevent +columns from becoming too far apart. Without this option, `columns' +will attempt to widen columns to fill the full width. + +fill option. +............ + +This is the "fill lines with input" option. + +This option has some usage constraints. It: + * must not appear in combination with any of the following options: + spread, col_width, by_columns. + + Instead of columnizing the input text, fill the output lines with +the input lines. Blank lines on input will cause a blank line in the +output, unless the output is sorted. With sorted output, blank lines +are ignored. + +indent option (-I). +................... + +This is the "line prefix or indentation" option. This option takes an +argument string `l-pfx'. If a number, then this many spaces will be +inserted at the start of every line. Otherwise, it is a line prefix +that will be inserted at the start of every line. + +first-indent option. +.................... + +This is the "first line prefix" option. This option takes an argument +string `l-pfx'. + +This option has some usage constraints. It: + * must appear in combination with the following options: indent. + + If a number, then this many spaces will be inserted at the start of +the first line. Otherwise, it is a line prefix that will be inserted +at the start of that line. If its length exceeds "indent", then it +will be emitted on a line by itself, suffixed by any line separation +string. For example: + + $ columns --first='#define TABLE' -c 2 -I4 --line=' \' <<_EOF_ + one + two + three + four + _EOF_ + #define TABLE \ + one two \ + three four + +format option (-f). +................... + +This is the "formatting string for each input" option. This option +takes an argument string `fmt-str'. If you need to reformat each input +text, the argument to this option is interpreted as an `sprintf(3)' +format that is used to produce each output entry. + +separation option (-S). +....................... + +This is the "separation string - follows all but last" option. This +option takes an argument string `sep-str'. Use this option if, for +example, you wish a comma to appear after each entry except the last. + +line-separation option. +....................... + +This is the "string at end of all lines but last" option. This option +takes an argument string `sep-str'. Use this option if, for example, +you wish a backslash to appear at the end of every line, except the +last. + +ending option. +.............. + +This is the "string at end of last line" option. This option takes an +argument string `end-str'. This option puts the specified string at +the end of the output. + + +File: autogen.info, Node: columns ordering, Next: columns input-text, Prev: columns treatment, Up: columns Invocation + +8.4.4 ordering options +---------------------- + +Specify the ordering of the entries. + +by-columns option. +.................. + +This is the "print entries in column order" option. Normally, the +entries are printed out in order by rows and then columns. This option +will cause the entries to be ordered within columns. The final column, +instead of the final row, may be shorter than the others. + +sort option (-s). +................. + +This is the "sort input text" option. This option takes an optional +argument string `key-pat'. Causes the input text to be sorted. If an +argument is supplied, it is presumed to be a pattern and the sort is +based upon the matched text. If the pattern starts with or consists of +an asterisk (`*'), then the sort is case insensitive. + + +File: autogen.info, Node: columns input-text, Next: columns config, Prev: columns ordering, Up: columns Invocation + +8.4.5 input-text options +------------------------ + +Redirecting stdin to an alternate file. + +input option (-i). +.................. + +This is the "input file (if not stdin)" option. This option takes an +argument string `file'. This program normally runs as a `filter', +reading from standard input, columnizing and writing to standard out. +This option redirects input to a file. + + +File: autogen.info, Node: columns config, Next: columns exit status, Prev: columns input-text, Up: columns Invocation + +8.4.6 presetting/configuring columns +------------------------------------ + +Any option that is not marked as not presettable may be preset by +loading values from configuration ("rc" or "ini") files, and values +from environment variables named `COLUMNS' and `COLUMNS_<OPTION_NAME>'. +`<OPTION_NAME>' must be one of the options listed above in upper case +and segmented with underscores. The `COLUMNS' variable will be +tokenized and parsed like the command line. The remaining variables +are tested for existence and their values are treated like option +arguments. + +`libopts' will search in 2 places for configuration files: + * $PWD + + * $HOME + The environment variables `PWD', and `HOME' are expanded and +replaced when `columns' runs. For any of these that are plain files, +they are simply processed. For any that are directories, then a file +named `.columnsrc' is searched for within that directory and processed. + + Configuration files may be in a wide variety of formats. The basic +format is an option name followed by a value (argument) on the same +line. Values may be separated from the option name with a colon, equal +sign or simply white space. Values may be continued across multiple +lines by escaping the newline with a backslash. + + Multiple programs may also share the same initialization file. +Common options are collected at the top, followed by program specific +segments. The segments are separated by lines like: + [COLUMNS] + or by + <?program columns> + Do not mix these styles within one configuration file. + + Compound values and carefully constructed string values may also be +specified using XML syntax: + <option-name> + <sub-opt>...<...>...</sub-opt> + </option-name> + yielding an `option-name.sub-opt' string value of + "...<...>..." + `AutoOpts' does not track suboptions. You simply note that it is a +hierarchicly valued option. `AutoOpts' does provide a means for +searching the associated name/value pair list (see: optionFindValue). + + The command line options relating to configuration and/or usage help +are: + +version (-v) +............ + +Print the program version to standard out, optionally with licensing +information, then exit 0. The optional argument specifies how much +licensing detail to provide. The default is to print just the version. +The licensing infomation may be selected with an option argument. Only +the first letter of the argument is examined: + +`version' + Only print the version. This is the default. + +`copyright' + Name the copyright usage licensing terms. + +`verbose' + Print the full copyright usage licensing terms. + + +File: autogen.info, Node: columns exit status, Next: columns See Also, Prev: columns config, Up: columns Invocation + +8.4.7 columns exit status +------------------------- + +One of the following exit values will be returned: +`0 (EXIT_SUCCESS)' + Successful program execution. + +`1 (EXIT_FAILURE)' + The operation failed or the command syntax was not valid. + +`66 (EX_NOINPUT)' + A specified configuration file could not be loaded. + +`70 (EX_SOFTWARE)' + libopts had an internal operational error. Please report it to + autogen-users@lists.sourceforge.net. Thank you. + + +File: autogen.info, Node: columns See Also, Prev: columns exit status, Up: columns Invocation + +8.4.8 columns See Also +---------------------- + +This program is documented more fully in the Columns section of the +Add-On chapter in the `AutoGen' Info system documentation. + + +File: autogen.info, Node: getdefs Invocation, Next: xml2ag Invocation, Prev: columns Invocation, Up: Add-Ons + +8.5 Invoking getdefs +==================== + +If no `input' argument is provided or is set to simply "-", and if +`stdin' is not a `tty', then the list of input files will be read from +`stdin'. This program extracts AutoGen definitions from a list of +source files. Definitions are delimited by `/*=<entry-type> +<entry-name>\n' and `=*/\n'. From that, this program creates a +definition of the following form: + + #line nnn "source-file-name" + entry_type = { + name = entry_name; + ... + }; + + 1. The ellipsis `...' is filled in by text found between the two + delimiters. Each line of text is stripped of anything before the + first asterisk, then leading asterisks, then any leading or + trailing white space. + + 2. If what is left starts with what looks like a name followed by a + colon, then it is interpreted as a name followed by a value. + + 3. If the first character of the value is either a single or double + quote, then you are responsible for quoting the text as it gets + inserted into the output definitions. So, if you want whitespace + at the beginnings of the lines of text, you must do something like + this: + + * mumble: + * " this is some\n" + * " indented text." + + 4. If the `<entry-name>' is followed by a comma, the word `ifdef' (or + `ifndef') and a name `if_name', then the above entry will be under + `ifdef' control. + + /*=group entry_name, ifdef FOO + * attr: attribute value + =*/ + + Will produce the following: + + #ifdef FOO + #line nnn "source-file-name" + group = { + name = entry_name; + attr = 'attribute value'; + }; + #endif + + 5. If you use of the `subblock' option, you can specify a nested + value, *Note getdefs subblock::. That is, this text: + + * arg: int, this, what-it-is + + with the `--subblock=arg=type,name,doc' option would yield: + + arg = { type = int; name = this; doc = what-it-is; }; + + This section was generated by *AutoGen*, using the `agtexi-cmd' +template and the option descriptions for the `getdefs' program. This +software is released under the GNU General Public License, version 3 or +later. + +* Menu: + +* getdefs usage:: getdefs help/usage (`help') +* getdefs def-selection:: def-selection options +* getdefs enumerating:: enumerating options +* getdefs doc-insert:: doc-insert options +* getdefs input-files:: input-files options +* getdefs doc-output:: doc-output options +* getdefs config:: presetting/configuring getdefs +* getdefs exit status:: exit status +* getdefs See Also:: See Also + + +File: autogen.info, Node: getdefs usage, Next: getdefs def-selection, Up: getdefs Invocation + +8.5.1 getdefs help/usage (`help') +--------------------------------- + +This is the automatically generated usage text for getdefs. + + The text printed is the same whether selected with the `help' option +(`help') or the `more-help' option (`more-help'). `more-help' will +print the usage text by passing it through a pager program. +`more-help' is disabled on platforms without a working `fork(2)' +function. The `PAGER' environment variable is used to select the +program, defaulting to `more'. Both will exit with a status code of 0. + +getdefs (GNU AutoGen) - AutoGen Definition Extraction Tool - Ver. 1.5 +USAGE: getdefs [ <option-name>[{=| }<val>] ]... + +Specify which definitions are of interest and what to say about them: + + Arg Option-Name Description + Str defs-to-get Regexp to look for after the "/*=" + Str subblock subblock definition names + - may appear multiple times + Str listattr attribute with list of values + - may appear multiple times + +specify how to number the definitions: + + Arg Option-Name Description + opt ordering Alphabetize or use named file + - disabled as --no-ordering + - enabled by default + Num first-index The first index to apply to groups + +Definition insertion options: + + Arg Option-Name Description + opt filelist Insert source file names into defs + Str assign Global assignments + - may appear multiple times + Str common-assign Assignments common to all blocks + - may appear multiple times + Str copy File(s) to copy into definitions + - may appear multiple times + opt srcfile Insert source file name into each def + opt linenum Insert source line number into each def + +specify which files to search for markers: + + Arg Option-Name Description + Str input Input file to search for defs + - may appear multiple times + - default option for unnamed options + +Definition output disposition options:: + + Arg Option-Name Description + Str output Output file to open + - an alternate for autogen + opt autogen Invoke AutoGen with defs + - disabled as --no-autogen + - enabled by default + Str template Template Name + Str agarg AutoGen Argument + - prohibits these options: + output + - may appear multiple times + Str base-name Base name for output file(s) + - prohibits these options: + output + +version, usage and configuration options: + + Arg Option-Name Description + opt version Output version information and exit + no help Display extended usage information and exit + no more-help Extended usage information passed thru pager + opt save-opts Save the option state to a config file + Str load-opts Load options from a config file + - disabled as --no-load-opts + - may appear multiple times + +All arguments are named options. + +If no ``input'' argument is provided or is set to simply "-", and if +``stdin'' is not a ``tty'', then the list of input files will be read from +``stdin''. + +The following option preset mechanisms are supported: + - reading file /dev/null + +This program extracts AutoGen definitions from a list of source files. +Definitions are delimited by ``/*=<entry-type> <entry-name>\n'' and +``=*/\n''. +Packaged by Bruce (2012-08-11) +Report getdefs bugs to bkorb@gnu.org + + +File: autogen.info, Node: getdefs def-selection, Next: getdefs enumerating, Prev: getdefs usage, Up: getdefs Invocation + +8.5.2 def-selection options +--------------------------- + +Specify which definitions are of interest and what to say about them. + +defs-to-get option. +................... + +This is the "regexp to look for after the "/*="" option. This option +takes an argument string `reg-ex'. If you want definitions only from a +particular category, or even with names matching particular patterns, +then specify this regular expression for the text that must follow the +`/*='. + +subblock option. +................ + +This is the "subblock definition names" option. This option takes an +argument string `sub-def'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + This option is used to create shorthand entries for nested +definitions. For example, with: +using subblock thus + `--subblock=arg=argname,type,null' + +and defining an `arg' thus + `arg: this, char *' + +will then expand to: + `arg = { argname = this; type = "char *"; };' + The "this, char *" string is separated at the commas, with the white +space removed. You may use characters other than commas by starting +the value string with a punctuation character other than a single or +double quote character. You may also omit intermediate values by +placing the commas next to each other with no intervening white space. +For example, "+mumble++yes+" will expand to: +`arg = { argname = mumble; null = "yes"; };'. + +listattr option. +................ + +This is the "attribute with list of values" option. This option takes +an argument string `def'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + This option is used to create shorthand entries for definitions that +generally appear several times. That is, they tend to be a list of +values. For example, with: +`listattr=foo' defined, the text: +`foo: this, is, a, multi-list' will then expand to: +`foo = 'this', 'is', 'a', 'multi-list';' +The texts are separated by the commas, with the white space removed. +You may use characters other than commas by starting the value string +with a punctuation character other than a single or double quote +character. + + +File: autogen.info, Node: getdefs enumerating, Next: getdefs doc-insert, Prev: getdefs def-selection, Up: getdefs Invocation + +8.5.3 enumerating options +------------------------- + +specify how to number the definitions. + +ordering option. +................ + +This is the "alphabetize or use named file" option. This option takes +an optional argument string `file-name'. + +This option has some usage constraints. It: + * is enabled by default. + + By default, ordering is alphabetical by the entry name. Use, +`no-ordering' if order is unimportant. Use `ordering' with no argument +to order without case sensitivity. Use `ordering=<file-name>' if +chronological order is important. getdefs will maintain the text +content of `file-name'. `file-name' need not exist. + +first-index option. +................... + +This is the "the first index to apply to groups" option. This option +takes an argument number `first-index'. By default, the first +occurrence of a named definition will have an index of zero. +Sometimes, that needs to be a reserved value. Provide this option to +specify a different starting point. + + +File: autogen.info, Node: getdefs doc-insert, Next: getdefs input-files, Prev: getdefs enumerating, Up: getdefs Invocation + +8.5.4 doc-insert options +------------------------ + +Definition insertion options. + +filelist option. +................ + +This is the "insert source file names into defs" option. This option +takes an optional argument string `file'. Inserts the name of each +input file into the output definitions. If no argument is supplied, +the format will be: + infile = '%s'; + If an argument is supplied, that string will be used for the entry +name instead of INFILE. + +assign option. +.............. + +This is the "global assignments" option. This option takes an argument +string `ag-def'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + The argument to each copy of this option will be inserted into the +output definitions, with only a semicolon attached. + +common-assign option. +..................... + +This is the "assignments common to all blocks" option. This option +takes an argument string `ag-def'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + The argument to each copy of this option will be inserted into each +output definition, with only a semicolon attached. + +copy option. +............ + +This is the "file(s) to copy into definitions" option. This option +takes an argument string `file'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + The content of each file named by these options will be inserted into +the output definitions. + +srcfile option. +............... + +This is the "insert source file name into each def" option. This +option takes an optional argument string `file'. Inserts the name of +the input file where a definition was found into the output definition. +If no argument is supplied, the format will be: + srcfile = '%s'; + If an argument is supplied, that string will be used for the entry +name instead of SRCFILE. + +linenum option. +............... + +This is the "insert source line number into each def" option. This +option takes an optional argument string `def-name'. Inserts the line +number in the input file where a definition was found into the output +definition. If no argument is supplied, the format will be: + linenum = '%s'; + If an argument is supplied, that string will be used for the entry +name instead of LINENUM. + + +File: autogen.info, Node: getdefs input-files, Next: getdefs doc-output, Prev: getdefs doc-insert, Up: getdefs Invocation + +8.5.5 input-files options +------------------------- + +specify which files to search for markers. + +input option. +............. + +This is the "input file to search for defs" option. This option takes +an argument string `src-file'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + All files that are to be searched for definitions must be named on +the command line or read from `stdin'. If there is only one `input' +option and it is the string, "-", then the input file list is read from +`stdin'. If a command line argument is not an option name and does not +contain an assignment operator (`='), then it defaults to being an +input file name. At least one input file must be specified. + + +File: autogen.info, Node: getdefs doc-output, Next: getdefs config, Prev: getdefs input-files, Up: getdefs Invocation + +8.5.6 doc-output options +------------------------ + +Definition output disposition options:. + +output option. +.............. + +This is the "output file to open" option. This option takes an +argument string `file'. + +This option has some usage constraints. It: + * is a member of the autogen class of options. + + If you are not sending the output to an AutoGen process, you may +name an output file instead. + +autogen option. +............... + +This is the "invoke autogen with defs" option. This option takes an +optional argument string `ag-cmd'. + +This option has some usage constraints. It: + * is enabled by default. + + * is a member of the autogen class of options. + + This is the default output mode. Specifying `no-autogen' is +equivalent to `output=-'. If you supply an argument to this option, +that program will be started as if it were AutoGen and its standard in +will be set to the output definitions of this program. + +template option. +................ + +This is the "template name" option. This option takes an argument +string `file'. Specifies the template name to be used for generating +the final output. + +agarg option. +............. + +This is the "autogen argument" option. This option takes an argument +string `ag-opt'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + * must not appear in combination with any of the following options: + output. + + This is a pass-through argument. It allows you to specify any +arbitrary argument to be passed to AutoGen. + +base-name option. +................. + +This is the "base name for output file(s)" option. This option takes +an argument string `name'. + +This option has some usage constraints. It: + * must not appear in combination with any of the following options: + output. + + When output is going to AutoGen, a base name must either be supplied +or derived. If this option is not supplied, then it is taken from the +`template' option. If that is not provided either, then it is set to +the base name of the current directory. + + +File: autogen.info, Node: getdefs config, Next: getdefs exit status, Prev: getdefs doc-output, Up: getdefs Invocation + +8.5.7 presetting/configuring getdefs +------------------------------------ + +Any option that is not marked as not presettable may be preset by +loading values from configuration ("rc" or "ini") files. + +`libopts' will search in `/dev/null' for configuration (option) data. +If this is a plain file, it is simply processed. If it is a directory, +then a file named `.getdefsrc' is searched for within that directory. + + Configuration files may be in a wide variety of formats. The basic +format is an option name followed by a value (argument) on the same +line. Values may be separated from the option name with a colon, equal +sign or simply white space. Values may be continued across multiple +lines by escaping the newline with a backslash. + + Multiple programs may also share the same initialization file. +Common options are collected at the top, followed by program specific +segments. The segments are separated by lines like: + [GETDEFS] + or by + <?program getdefs> + Do not mix these styles within one configuration file. + + Compound values and carefully constructed string values may also be +specified using XML syntax: + <option-name> + <sub-opt>...<...>...</sub-opt> + </option-name> + yielding an `option-name.sub-opt' string value of + "...<...>..." + `AutoOpts' does not track suboptions. You simply note that it is a +hierarchicly valued option. `AutoOpts' does provide a means for +searching the associated name/value pair list (see: optionFindValue). + + The command line options relating to configuration and/or usage help +are: + +version +....... + +Print the program version to standard out, optionally with licensing +information, then exit 0. The optional argument specifies how much +licensing detail to provide. The default is to print just the version. +The licensing infomation may be selected with an option argument. Only +the first letter of the argument is examined: + +`version' + Only print the version. This is the default. + +`copyright' + Name the copyright usage licensing terms. + +`verbose' + Print the full copyright usage licensing terms. + + +File: autogen.info, Node: getdefs exit status, Next: getdefs See Also, Prev: getdefs config, Up: getdefs Invocation + +8.5.8 getdefs exit status +------------------------- + +One of the following exit values will be returned: +`0 (EXIT_SUCCESS)' + Successful program execution. + +`1 (EXIT_FAILURE)' + The operation failed or the command syntax was not valid. + +`66 (EX_NOINPUT)' + A specified configuration file could not be loaded. + +`70 (EX_SOFTWARE)' + libopts had an internal operational error. Please report it to + autogen-users@lists.sourceforge.net. Thank you. + + +File: autogen.info, Node: getdefs See Also, Prev: getdefs exit status, Up: getdefs Invocation + +8.5.9 getdefs See Also +---------------------- + +This program is documented more fully in the Getdefs section of the +Add-On chapter in the `AutoGen' Info system documentation. + + +File: autogen.info, Node: xml2ag Invocation, Next: snprintfv, Prev: getdefs Invocation, Up: Add-Ons + +8.6 Invoking xml2ag +=================== + +This program will convert any arbitrary XML file into equivalent +AutoGen definitions, and invoke AutoGen. The template used will be +derived from either: + * The *-override-tpl* command line option + + * A top level XML attribute named, "`template'" + One or the other *must* be provided, or the program will exit with a +failure message. + + The _base-name_ for the output will similarly be either: + * The *-base-name* command line option. + + * The base name of the `.xml' file. + + The definitions derived from XML generally have an extra layer of +definition. Specifically, this XML input: + <mumble attr="foo"> + mumble-1 + <grumble> + grumble, grumble, grumble. + </grumble>mumble, mumble + </mumble> + Will get converted into this: + mumble = { + grumble = { + text = 'grumble, grumble, grumble'; + }; + text = 'mumble-1'; + text = 'mumble, mumble'; + }; + Please notice that some information is lost. AutoGen cannot tell +that "grumble" used to lie between the mumble texts. Also please note +that you cannot assign: + grumble = 'grumble, grumble, grumble.'; + because if another "grumble" has an attribute or multiple texts, it +becomes impossible to have the definitions be the same type (compound +or text values). + + This section was generated by *AutoGen*, using the `agtexi-cmd' +template and the option descriptions for the `xml2ag' program. This +software is released under the GNU General Public License, version 3 or +later. + +* Menu: + +* xml2ag usage:: xml2ag help/usage (`--help') +* xml2ag the-xml2ag-option:: the-xml2ag-option options +* xml2ag autogen-options:: autogen-options options +* xml2ag exit status:: exit status + + +File: autogen.info, Node: xml2ag usage, Next: xml2ag the-xml2ag-option, Up: xml2ag Invocation + +8.6.1 xml2ag help/usage (`--help') +---------------------------------- + +This is the automatically generated usage text for xml2ag. + + The text printed is the same whether selected with the `help' option +(`--help') or the `more-help' option (`--more-help'). `more-help' will +print the usage text by passing it through a pager program. +`more-help' is disabled on platforms without a working `fork(2)' +function. The `PAGER' environment variable is used to select the +program, defaulting to `more'. Both will exit with a status code of 0. + +xml2ag (GNU AutoGen) - XML to AutoGen Definiton Converter - Ver. 5.16.2 +USAGE: xml2ag [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ <def-file> ] + +All other options are derived from autogen: + + Flg Arg Option-Name Description + -O Str output Output file in lieu of AutoGen processing + +All other options: + + Flg Arg Option-Name Description + -L Str templ-dirs Template search directory list + - may appear multiple times + -T Str override-tpl Override template file + -l Str lib-template Library template file + - may appear multiple times + Str definitions Definitions input file + -S Str load-scheme Scheme code file to load + -F Str load-functions Load scheme function library + Str shell name or path name of shell to use + -m no no-fmemopen Do not use in-mem streams + Str equate characters considered equivalent + -b Str base-name Base name for output file(s) + no source-time set mod times to latest source + no writable Allow output files to be writable + - disabled as --not-writable + Num loop-limit Limit on increment loops + - is scalable with a suffix: k/K/m/M/g/G/t/T + - It must lie in one of the ranges: + -1 exactly, or + 1 to 16777216 + -t Num timeout Time limit for server shell + - It must be in the range: + 0 to 3600 + KWd trace tracing level of detail + Str trace-out tracing output file or filter + no show-defs Show the definition tree + no used-defines Show the definitions used + -C no core Leave a core dump on a failure exit + -s Str skip-suffix Omit the file with this suffix + - prohibits these options: + select-suffix + - may appear multiple times + -o Str select-suffix specify this output suffix + - may appear multiple times + -D Str define name to add to definition list + - may appear multiple times + -U Str undefine definition list removal pattern + - an alternate for define + -M opt make-dep emit make dependency file + - may appear multiple times + +version, usage and configuration options: + + Flg Arg Option-Name Description + -v opt version Output version information and exit + -? no help Display extended usage information and exit + -! no more-help Extended usage information passed thru pager + +Options are specified by doubled hyphens and their name or by a single +hyphen and the flag character. + +This program will convert any arbitrary XML file into equivalent AutoGen +definitions, and invoke AutoGen. + +The valid "trace" option keywords are: + nothing debug-message server-shell templates block-macros + expressions everything + or an integer from 0 through 6 + +The template will be derived from either: * the ``--override-tpl'' command +line option * a top level XML attribute named, "template" + +The ``base-name'' for the output will similarly be either: * the +``--base-name'' command line option * the base name of the .xml file +Packaged by Bruce (2012-08-11) +Report xml2ag bugs to bkorb@gnu.org + + +File: autogen.info, Node: xml2ag the-xml2ag-option, Next: xml2ag autogen-options, Prev: xml2ag usage, Up: xml2ag Invocation + +8.6.2 the-xml2ag-option options +------------------------------- + +All other options are derived from autogen. + +output option (-O). +................... + +This is the "output file in lieu of autogen processing" option. This +option takes an argument string `file'. By default, the output is +handed to an AutoGen for processing. However, you may save the +definitions to a file instead. + + +File: autogen.info, Node: xml2ag autogen-options, Next: xml2ag exit status, Prev: xml2ag the-xml2ag-option, Up: xml2ag Invocation + +8.6.3 autogen-options options +----------------------------- + +All other options. These options are mostly just passed throug to +`autogen'. The one exception is `--override-tpl' which replaces the +default template in the output definitions. It does not get passed +through on the command line. + +templ-dirs option (-L). +....................... + +This is the "template search directory list" option. This option takes +an argument string `dir'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + Pass-through AutoGen argument + +override-tpl option (-T). +......................... + +This is the "override template file" option. This option takes an +argument string `tpl-file'. Pass-through AutoGen argument + +lib-template option (-l). +......................... + +This is the "library template file" option. This option takes an +argument string `tpl-file'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + Pass-through AutoGen argument + +definitions option. +................... + +This is the "definitions input file" option. This option takes an +argument string `file'. Pass-through AutoGen argument + +load-scheme option (-S). +........................ + +This is the "scheme code file to load" option. This option takes an +argument string `file'. Pass-through AutoGen argument + +load-functions option (-F). +........................... + +This is the "load scheme function library" option. This option takes +an argument string `file'. + +This option has some usage constraints. It: + * must be compiled in by defining `HAVE_DLOPEN' during the + compilation. + + Pass-through AutoGen argument + +shell option. +............. + +This is the "name or path name of shell to use" option. This option +takes an argument string `shell'. Pass-through AutoGen argument + +no-fmemopen option (-m). +........................ + +This is the "do not use in-mem streams" option. Pass-through AutoGen +argument + +equate option. +.............. + +This is the "characters considered equivalent" option. This option +takes an argument string `char-list'. Pass-through AutoGen argument + +base-name option (-b). +...................... + +This is the "base name for output file(s)" option. This option takes +an argument string `name'. Pass-through AutoGen argument + +source-time option. +................... + +This is the "set mod times to latest source" option. Pass-through +AutoGen argument + +writable option. +................ + +This is the "allow output files to be writable" option. Pass-through +AutoGen argument + +loop-limit option. +.................. + +This is the "limit on increment loops" option. This option takes an +argument number `lim'. Pass-through AutoGen argument + +timeout option (-t). +.................... + +This is the "time limit for server shell" option. This option takes an +argument number `time-lim'. Pass-through AutoGen argument + +trace option. +............. + +This is the "tracing level of detail" option. This option takes an +argument keyword `level'. + +This option has some usage constraints. It: + * This option takes a keyword as its argument. The argument sets an + enumeration value that can be tested by comparing the option value + macro (OPT_VALUE_TRACE). The available keywords are: + nothing debug-message server-shell + templates block-macros expressions + everything + + or their numeric equivalent. + + Pass-through AutoGen argument + +trace-out option. +................. + +This is the "tracing output file or filter" option. This option takes +an argument string `file'. Pass-through AutoGen argument + +show-defs option. +................. + +This is the "show the definition tree" option. Pass-through AutoGen +argument + +used-defines option. +.................... + +This is the "show the definitions used" option. Pass-through AutoGen +argument + +core option (-C). +................. + +This is the "leave a core dump on a failure exit" option. + +This option has some usage constraints. It: + * must be compiled in by defining `HAVE_SYS_RESOURCE_H' during the + compilation. + + Many systems default to a zero sized core limit. If the system has +the sys/resource.h header and if this option is supplied, then in the +failure exit path, autogen will attempt to set the soft core limit to +whatever the hard core limit is. If that does not work, then an +administrator must raise the hard core size limit. + +skip-suffix option (-s). +........................ + +This is the "omit the file with this suffix" option. This option takes +an argument string `suffix'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + * must not appear in combination with any of the following options: + select-suffix. + + Pass-through AutoGen argument + +select-suffix option (-o). +.......................... + +This is the "specify this output suffix" option. This option takes an +argument string `suffix'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + Pass-through AutoGen argument + +define option (-D). +................... + +This is the "name to add to definition list" option. This option takes +an argument string `value'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + Pass-through AutoGen argument + +undefine option (-U). +..................... + +This is the "definition list removal pattern" option. This option +takes an argument string `name-pat'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + Pass-through AutoGen argument + +make-dep option (-M). +..................... + +This is the "emit make dependency file" option. This option takes an +optional argument string `type'. + +This option has some usage constraints. It: + * may appear an unlimited number of times. + + Pass-through AutoGen argument + + +File: autogen.info, Node: xml2ag exit status, Prev: xml2ag autogen-options, Up: xml2ag Invocation + +8.6.4 xml2ag exit status +------------------------ + +One of the following exit values will be returned: +`0 (EXIT_SUCCESS)' + Successful program execution. + +`1 (EXIT_OPTION_ERROR)' + The command options were misconfigured. + +`2 (EXIT_BAD_TEMPLATE)' + An error was encountered processing the template. + +`3 (EXIT_BAD_DEFINITIONS)' + The definitions could not be deciphered. + +`4 (EXIT_LOAD_ERROR)' + An error was encountered during the load phase. + +`5 (EXIT_SIGNAL)' + Program exited due to catching a signal. If your template includes + string formatting, a number argument to a "%s" formatting element + will trigger a segmentation fault. Autogen will catch the seg + fault signal and exit with `AUTOGEN_EXIT_SIGNAL(5)'. + Alternatively, AutoGen may have been interrupted with a `kill(2)' + signal. + + +File: autogen.info, Node: snprintfv, Prev: xml2ag Invocation, Up: Add-Ons + +8.7 Replacement for Stdio Formatting Library +============================================ + +Using the `printf' formatting routines in a portable fashion has always +been a pain, and this package has been way more pain than anyone ever +imagined. Hopefully, with this release of snprintfv, the pain is now +over for all time. + + The issues with portable usage are these: + + 1. Argument number specifiers are often either not implemented or are + buggy. Even GNU libc, version 1 got it wrong. + + 2. ANSI/ISO "forgot" to provide a mechanism for computing argument + lists for vararg procedures. + + 3. The argument array version of printf (`printfv()') is not + generally available, does not work with the native printf, and + does not have a working argument number specifier in the format + specification. (Last I knew, anyway.) + + 4. You cannot fake varargs by calling `vprintf()' with an array of + arguments, because ANSI does not require such an implementation + and some vendors play funny tricks because they are allowed to. + + These four issues made it impossible for AutoGen to ship without its +own implementation of the `printf' formatting routines. Since we were +forced to do this, we decided to make the formatting routines both +better and more complete :-). We addressed these issues and added the +following features to the common printf API: + + 5. The formatted output can be written to + + * a string allocated by the formatting function (`asprintf()'). + + * a file descriptor instead of a file stream (`dprintf()'). + + * a user specified stream (`stream_printf()'). + + 6. The formatting functions can be augmented with your own functions. + These functions are allowed to consume more than one character + from the format, but must commence with a unique character. For + example, + + "%{struct stat}\n" + + might be used with '{' registered to a procedure that would look + up "struct stat" in a symbol table and do appropriate things, + consuming the format string through the '}' character. + + Gary V. Vaughan was generous enough to supply this implementation. +Many thanks!! + + For further details, the reader is referred to the snprintfv +documentation. These functions are also available in the template +processing as `sprintf' (*note SCM sprintf::), `printf' (*note SCM +printf::), `fprintf' (*note SCM fprintf::), and `shellf' (*note SCM +shellf::). + + +File: autogen.info, Node: Future, Next: Copying This Manual, Prev: Add-Ons, Up: Top + +9 Some ideas for the future. +**************************** + +Here are some things that might happen in the distant future. + + * Fix up current tools that contain miserably complex perl, shell, + sed, awk and m4 scripts to instead use this tool. + + +File: autogen.info, Node: Copying This Manual, Next: Concept Index, Prev: Future, Up: Top + +Appendix A Copying This Manual +****************************** + +You may copy this manual under the terms of the FDL (the GNU Free +Documentation License (http://gnu.org/licenses/fdl.texi)). + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + copyright (c) 1992-2012 by Bruce Korb - all rights reserved + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: autogen.info, Node: Concept Index, Next: Function Index, Prev: Copying This Manual, Up: Top + +Concept Index +************* + + +* Menu: + +* #assert: Directives. (line 31) +* #define: Directives. (line 45) +* #elif: Directives. (line 53) +* #else: Directives. (line 57) +* #endif: Directives. (line 62) +* #endmac: Directives. (line 66) +* #endshell: Directives. (line 70) +* #error: Directives. (line 74) +* #if: Directives. (line 78) +* #ifdef: Directives. (line 82) +* #ifndef: Directives. (line 88) +* #include: Directives. (line 93) +* #line: Directives. (line 99) +* #macdef: Directives. (line 106) +* #option: Directives. (line 111) +* #shell: Directives. (line 126) +* #undef: Directives. (line 132) +* .: naming values. (line 24) +* .def file: Definitions File. (line 6) +* .tpl file: Template File. (line 6) +* Alternate Definition: Alternate Definition. + (line 6) +* assert directive: Directives. (line 31) +* Augmenting AutoGen: Augmenting AutoGen. (line 6) +* AutoEvents: AutoEvents. (line 6) +* AutoFSM: AutoFSM. (line 6) +* autogen: autogen Invocation. (line 6) +* AutoGen Definition Extraction Tool: getdefs Invocation. (line 6) +* autogen help: autogen usage. (line 6) +* autogen-base-name: autogen out-handling. + (line 11) +* autogen-core: autogen debug-tpl. (line 139) +* autogen-define: autogen processing. (line 49) +* autogen-definitions: autogen input-select. + (line 53) +* autogen-equate: autogen input-select. + (line 129) +* autogen-lib-template: autogen input-select. + (line 40) +* autogen-load-functions: autogen input-select. + (line 82) +* autogen-load-scheme: autogen input-select. + (line 71) +* autogen-loop-limit: autogen debug-tpl. (line 13) +* autogen-make-dep: autogen dep-track. (line 11) +* autogen-no-fmemopen: autogen input-select. + (line 112) +* autogen-override-tpl: autogen input-select. + (line 26) +* autogen-select-suffix: autogen processing. (line 33) +* autogen-shell: autogen input-select. + (line 96) +* autogen-show-defs: autogen debug-tpl. (line 106) +* autogen-skip-suffix: autogen processing. (line 13) +* autogen-source-time: autogen out-handling. + (line 33) +* autogen-templ-dirs: autogen input-select. + (line 12) +* autogen-timeout: autogen debug-tpl. (line 23) +* autogen-trace: autogen debug-tpl. (line 40) +* autogen-trace-out: autogen debug-tpl. (line 95) +* autogen-undefine: autogen processing. (line 83) +* autogen-used-defines: autogen debug-tpl. (line 121) +* autogen-writable: autogen out-handling. + (line 43) +* AutoInfo: AutoInfo. (line 6) +* AutoMan pages: AutoMan pages. (line 6) +* automatic options: automatic options. (line 6) +* autoopts <1>: Caveats. (line 26) +* autoopts: AutoOpts. (line 6) +* AutoOpts API: AutoOpts API. (line 6) +* autoopts directives: config directives. (line 6) +* AutoXDR: AutoXDR. (line 6) +* backtrack: naming values. (line 25) +* Columnize Input Text: columns Invocation. (line 6) +* columns: columns Invocation. (line 6) +* columns help: columns usage. (line 6) +* columns-by-columns: columns ordering. (line 11) +* columns-col-width: columns dimensions. (line 29) +* columns-columns: columns dimensions. (line 21) +* columns-ending: columns treatment. (line 90) +* columns-fill: columns treatment. (line 20) +* columns-first-indent: columns treatment. (line 42) +* columns-format: columns treatment. (line 67) +* columns-indent: columns treatment. (line 34) +* columns-input: columns input-text. (line 11) +* columns-line-separation: columns treatment. (line 82) +* columns-separation: columns treatment. (line 75) +* columns-sort: columns ordering. (line 19) +* columns-spread: columns treatment. (line 11) +* columns-tab-width: columns dimensions. (line 37) +* columns-width: columns dimensions. (line 11) +* comments: Comments. (line 6) +* Common Option Attributes: Common Attributes. (line 6) +* compound definitions: Definitions. (line 44) +* concat-string: concat-string. (line 6) +* conditional emit <1>: WHILE. (line 6) +* conditional emit: IF. (line 6) +* configuration file: shell options. (line 6) +* Configuration File <1>: Config File Format. (line 6) +* Configuration File: config example. (line 6) +* configuration file <1>: Option Processing Data. + (line 42) +* configuration file <2>: automatic options. (line 57) +* configuration file: opt-attr no-preset. (line 6) +* Configuration File example: config example. (line 6) +* configuring: configuring. (line 6) +* define directive: Directives. (line 45) +* define macro: DEFINE. (line 6) +* Definition Index: Index Assignments. (line 6) +* definitions: Definitions. (line 6) +* definitions file: Definitions File. (line 6) +* design goals: Generalities. (line 11) +* directives: Directives. (line 6) +* diversion: output controls. (line 6) +* documentation attributes: documentation attributes. + (line 6) +* Dynamic Definition Text: Dynamic Text. (line 6) +* elif directive: Directives. (line 53) +* else directive: Directives. (line 57) +* endif directive: Directives. (line 62) +* endmac directive: Directives. (line 66) +* endshell directive: Directives. (line 70) +* environrc: environrc. (line 6) +* error directive: Directives. (line 74) +* example, simple AutoGen: Example Usage. (line 6) +* example, simple AutoOpts: Quick Start. (line 6) +* expression syntax: expression syntax. (line 6) +* FDL, GNU Free Documentation License: Copying This Manual. (line 9) +* features: Features. (line 6) +* finite state machine: AutoFSM. (line 6) +* flags-cant: Option Conflict Attributes. + (line 19) +* flags-must: Option Conflict Attributes. + (line 15) +* fOptState: Option Processing Data. + (line 30) +* for loop: FOR. (line 6) +* futures: Future. (line 6) +* getdefs: getdefs Invocation. (line 6) +* getdefs help: getdefs usage. (line 6) +* getdefs-agarg: getdefs doc-output. (line 46) +* getdefs-assign: getdefs doc-insert. (line 22) +* getdefs-autogen: getdefs doc-output. (line 23) +* getdefs-base-name: getdefs doc-output. (line 61) +* getdefs-common-assign: getdefs doc-insert. (line 34) +* getdefs-copy: getdefs doc-insert. (line 46) +* getdefs-defs-to-get: getdefs def-selection. + (line 11) +* getdefs-filelist: getdefs doc-insert. (line 11) +* getdefs-first-index: getdefs enumerating. (line 26) +* getdefs-input: getdefs input-files. (line 11) +* getdefs-linenum: getdefs doc-insert. (line 69) +* getdefs-listattr: getdefs def-selection. + (line 47) +* getdefs-ordering: getdefs enumerating. (line 11) +* getdefs-output: getdefs doc-output. (line 11) +* getdefs-srcfile: getdefs doc-insert. (line 58) +* getdefs-subblock: getdefs def-selection. + (line 20) +* getdefs-template: getdefs doc-output. (line 39) +* getopt_long: getopt_long. (line 6) +* gnu: Caveats. (line 21) +* here-string: here-string. (line 6) +* identification: Identification. (line 6) +* if directive: Directives. (line 78) +* if test: IF. (line 6) +* ifdef directive: Directives. (line 82) +* ifndef directive: Directives. (line 88) +* immediate action: Immediate Action. (line 6) +* include directive: Directives. (line 93) +* information attributes: information attributes. + (line 6) +* Installing: installing. (line 6) +* Internationalizing AutoOpts: i18n. (line 6) +* Internationalizing Options: Internationalizing Options. + (line 6) +* Introduction: Introduction. (line 6) +* library attributes: library attributes. (line 6) +* Licensing: Licensing. (line 6) +* line directive: Directives. (line 99) +* looping, for: FOR. (line 6) +* m4: Testimonial. (line 42) +* macdef directive: Directives. (line 106) +* macro syntax: AGMacro syntax. (line 6) +* macro, pseudo: Template File. (line 10) +* main procedure: Generated main. (line 6) +* misuse-usage: Caveats. (line 34) +* named option mode: presentation attributes. + (line 15) +* Naming Conflicts: Naming Conflicts. (line 6) +* naming values: naming values. (line 6) +* native macros: native macros. (line 6) +* no-misuse-usage: Caveats. (line 30) +* optActualIndex: Option Processing Data. + (line 17) +* optActualValue: Option Processing Data. + (line 18) +* optIndex: Option Processing Data. + (line 11) +* Option Argument Handling: Option Argument Handling. + (line 6) +* Option Arguments: Option Arguments. (line 6) +* option attributes: option attributes. (line 6) +* Option Conflict Attributes: Option Conflict Attributes. + (line 6) +* Option Definitions: Option Definitions. (line 6) +* option descriptor: option descriptor. (line 6) +* option directive: Directives. (line 111) +* Option Processing Data: Option Processing Data. + (line 6) +* optOccCt: Option Processing Data. + (line 24) +* optValue: Option Processing Data. + (line 12) +* predefines: Predefines. (line 6) +* program attributes: program attributes. (line 6) +* pseudo macro <1>: pseudo macro. (line 6) +* pseudo macro: Template File. (line 10) +* pzLastArg: Option Processing Data. + (line 83) +* pzProgName: Option Processing Data. + (line 90) +* pzProgPath: Option Processing Data. + (line 94) +* rcfile <1>: config example. (line 6) +* rcfile: loading rcfile. (line 6) +* Redirecting Output: output controls. (line 6) +* remote procedure call: AutoXDR. (line 6) +* Required Attributes: Required Attributes. (line 6) +* RPC: AutoXDR. (line 6) +* rpcgen: AutoXDR. (line 6) +* sample rcfile: sample rcfile. (line 6) +* shell directive: Directives. (line 126) +* shell options <1>: shell options. (line 6) +* shell options: Presetting Options. (line 6) +* shell-generated string: shell-generated. (line 6) +* Signal Names: signal names. (line 6) +* simple definitions: Definitions. (line 44) +* standard options: standard options. (line 6) +* string, double quote: double-quote-string. (line 6) +* string, shell output: shell-generated. (line 6) +* string, single quote: single-quote-string. (line 6) +* template file <1>: Template File. (line 6) +* template file: Identification. (line 21) +* The Automated Program Generator: autogen Invocation. (line 6) +* undef directive: Directives. (line 132) +* using AutoOpts: Using AutoOpts. (line 6) +* while test: WHILE. (line 6) +* XDR: AutoXDR. (line 6) +* XML to AutoGen Definiton Converter: xml2ag Invocation. (line 6) +* xml2ag: xml2ag Invocation. (line 6) +* xml2ag help: xml2ag usage. (line 6) +* xml2ag-base-name: xml2ag autogen-options. + (line 84) +* xml2ag-core: xml2ag autogen-options. + (line 150) +* xml2ag-define: xml2ag autogen-options. + (line 190) +* xml2ag-definitions: xml2ag autogen-options. + (line 42) +* xml2ag-equate: xml2ag autogen-options. + (line 78) +* xml2ag-lib-template: xml2ag autogen-options. + (line 31) +* xml2ag-load-functions: xml2ag autogen-options. + (line 54) +* xml2ag-load-scheme: xml2ag autogen-options. + (line 48) +* xml2ag-loop-limit: xml2ag autogen-options. + (line 102) +* xml2ag-make-dep: xml2ag autogen-options. + (line 212) +* xml2ag-no-fmemopen: xml2ag autogen-options. + (line 72) +* xml2ag-output: xml2ag the-xml2ag-option. + (line 11) +* xml2ag-override-tpl: xml2ag autogen-options. + (line 25) +* xml2ag-select-suffix: xml2ag autogen-options. + (line 179) +* xml2ag-shell: xml2ag autogen-options. + (line 66) +* xml2ag-show-defs: xml2ag autogen-options. + (line 138) +* xml2ag-skip-suffix: xml2ag autogen-options. + (line 165) +* xml2ag-source-time: xml2ag autogen-options. + (line 90) +* xml2ag-templ-dirs: xml2ag autogen-options. + (line 14) +* xml2ag-timeout: xml2ag autogen-options. + (line 108) +* xml2ag-trace: xml2ag autogen-options. + (line 114) +* xml2ag-trace-out: xml2ag autogen-options. + (line 132) +* xml2ag-undefine: xml2ag autogen-options. + (line 201) +* xml2ag-used-defines: xml2ag autogen-options. + (line 144) +* xml2ag-writable: xml2ag autogen-options. + (line 96) + + +File: autogen.info, Node: Function Index, Prev: Concept Index, Up: Top + +Function Index +************** + + +* Menu: + +* *=: SCM *=. (line 6) +* *=*: SCM *=*. (line 6) +* *==: SCM *==. (line 6) +* *==*: SCM *==*. (line 6) +* *~: SCM *~. (line 6) +* *~*: SCM *~*. (line 6) +* *~~: SCM *~~. (line 6) +* *~~*: SCM *~~*. (line 6) +* =: SCM =. (line 6) +* =*: SCM =*. (line 6) +* ==: SCM ==. (line 6) +* ==*: SCM ==*. (line 6) +* ag-fprintf: SCM ag-fprintf. (line 6) +* ag-function?: SCM ag-function?. (line 6) +* agpl: SCM agpl. (line 6) +* ao_string_tokenize: libopts-ao_string_tokenize. + (line 6) +* autogen-version: SCM autogen-version. (line 6) +* base-name: SCM base-name. (line 6) +* BREAK: BREAK. (line 6) +* bsd: SCM bsd. (line 6) +* c-file-line-fmt: SCM c-file-line-fmt. (line 6) +* c-string: SCM c-string. (line 6) +* CASE: CASE. (line 6) +* chdir: SCM chdir. (line 6) +* CLEAR_OPT: CLEAR_OPT. (line 6) +* COMMENT: COMMENT. (line 6) +* configFileLoad: libopts-configFileLoad. + (line 6) +* CONTINUE: CONTINUE. (line 6) +* count: SCM count. (line 6) +* COUNT_OPT: COUNT_OPT. (line 6) +* DEBUG: DEBUG. (line 6) +* def-file: SCM def-file. (line 6) +* def-file-line: SCM def-file-line. (line 6) +* DEFINE: DEFINE. (line 6) +* DESC: DESC. (line 6) +* DISABLE_OPT_name: DISABLE_OPT_name. (line 6) +* dne: SCM dne. (line 6) +* ELIF: ELIF. (line 6) +* ELSE: ELSE. (line 6) +* emit: SCM emit. (line 6) +* emit-string-table: SCM emit-string-table. (line 6) +* ENABLED_OPT: ENABLED_OPT. (line 6) +* ENDDEF: ENDDEF. (line 6) +* ENDFOR: ENDFOR. (line 6) +* ENDIF: ENDIF. (line 6) +* ENDWHILE: ENDWHILE. (line 6) +* error: SCM error. (line 6) +* error-source-line: SCM error-source-line. (line 6) +* ERRSKIP_OPTERR: ERRSKIP_OPTERR. (line 6) +* ERRSTOP_OPTERR: ERRSTOP_OPTERR. (line 6) +* ESAC: ESAC. (line 6) +* exist?: SCM exist?. (line 6) +* EXPR: EXPR. (line 6) +* extract: SCM extract. (line 6) +* find-file: SCM find-file. (line 6) +* first-for?: SCM first-for?. (line 6) +* FOR: FOR. (line 6) +* for-by: SCM for-by. (line 6) +* for-from: SCM for-from. (line 6) +* for-index: SCM for-index. (line 6) +* for-sep: SCM for-sep. (line 6) +* for-to: SCM for-to. (line 6) +* format-arg-count: SCM format-arg-count. (line 6) +* fprintf: SCM fprintf. (line 6) +* get: SCM get. (line 6) +* get-c-name: SCM get-c-name. (line 6) +* get-down-name: SCM get-down-name. (line 6) +* get-up-name: SCM get-up-name. (line 6) +* gperf: SCM gperf. (line 6) +* gperf-code: SCM gperf-code. (line 6) +* gpl: SCM gpl. (line 6) +* HAVE_OPT: HAVE_OPT. (line 6) +* hide-email: SCM hide-email. (line 6) +* high-lim: SCM high-lim. (line 6) +* html-escape-encode: SCM html-escape-encode. + (line 6) +* IF: IF. (line 6) +* in?: SCM in?. (line 6) +* INCLUDE: INCLUDE. (line 6) +* INVOKE: INVOKE. (line 6) +* ISSEL_OPT: ISSEL_OPT. (line 6) +* ISUNUSED_OPT: ISUNUSED_OPT. (line 6) +* join: SCM join. (line 6) +* kr-string: SCM kr-string. (line 6) +* last-for?: SCM last-for?. (line 6) +* len: SCM len. (line 6) +* lgpl: SCM lgpl. (line 6) +* license: SCM license. (line 6) +* license-description: SCM license-description. + (line 6) +* license-full: SCM license-full. (line 6) +* license-info: SCM license-info. (line 6) +* license-name: SCM license-name. (line 6) +* low-lim: SCM low-lim. (line 6) +* make-gperf: SCM make-gperf. (line 6) +* make-header-guard: SCM make-header-guard. (line 6) +* make-tmp-dir: SCM make-tmp-dir. (line 6) +* makefile-script: SCM makefile-script. (line 6) +* match-value?: SCM match-value?. (line 6) +* max: SCM max. (line 6) +* min: SCM min. (line 6) +* OPT_ARG: OPT_ARG. (line 6) +* OPT_NO_XLAT_CFG_NAMES: OPT_NO_XLAT_CFG_NAMES. (line 6) +* OPT_NO_XLAT_OPT_NAMES: OPT_NO_XLAT_OPT_NAMES. (line 6) +* OPT_VALUE_name: OPT_VALUE_name. (line 6) +* OPT_XLAT_CFG_NAMES: OPT_XLAT_CFG_NAMES. (line 6) +* OPT_XLAT_OPT_NAMES: OPT_XLAT_OPT_NAMES. (line 6) +* OPTION_CT: OPTION_CT. (line 6) +* optionFileLoad: libopts-optionFileLoad. + (line 6) +* optionFindNextValue: libopts-optionFindNextValue. + (line 6) +* optionFindValue: libopts-optionFindValue. + (line 6) +* optionFree: libopts-optionFree. (line 6) +* optionGetValue: libopts-optionGetValue. + (line 6) +* optionLoadLine: libopts-optionLoadLine. + (line 6) +* optionNextValue: libopts-optionNextValue. + (line 6) +* optionOnlyUsage: libopts-optionOnlyUsage. + (line 6) +* optionProcess: libopts-optionProcess. (line 6) +* optionRestore: libopts-optionRestore. (line 6) +* optionSaveFile: libopts-optionSaveFile. + (line 6) +* optionSaveState: libopts-optionSaveState. + (line 6) +* optionUnloadNested: libopts-optionUnloadNested. + (line 6) +* optionVersion: libopts-optionVersion. (line 6) +* out-delete: SCM out-delete. (line 6) +* out-depth: SCM out-depth. (line 6) +* out-emit-suspended: SCM out-emit-suspended. + (line 6) +* out-line: SCM out-line. (line 6) +* out-move: SCM out-move. (line 6) +* out-name: SCM out-name. (line 6) +* out-pop: SCM out-pop. (line 6) +* out-push-add: SCM out-push-add. (line 6) +* out-push-new: SCM out-push-new. (line 6) +* out-resume: SCM out-resume. (line 6) +* out-suspend: SCM out-suspend. (line 6) +* out-switch: SCM out-switch. (line 6) +* output-file-next-line: SCM output-file-next-line. + (line 6) +* pathfind: libopts-pathfind. (line 6) +* prefix: SCM prefix. (line 6) +* printf: SCM printf. (line 6) +* raw-shell-str: SCM raw-shell-str. (line 6) +* RESTART_OPT: RESTART_OPT. (line 6) +* RETURN: RETURN. (line 6) +* SELECT: SELECT. (line 6) +* set-option: SCM set-option. (line 6) +* set-writable: SCM set-writable. (line 6) +* SET_OPT_name: SET_OPT_name. (line 6) +* shell: SCM shell. (line 6) +* shell-str: SCM shell-str. (line 6) +* shellf: SCM shellf. (line 6) +* sprintf: SCM sprintf. (line 6) +* stack: SCM stack. (line 6) +* stack-join: SCM stack-join. (line 6) +* STACKCT_OPT: STACKCT_OPT. (line 6) +* STACKLST_OPT: STACKLST_OPT. (line 6) +* START_OPT: START_OPT. (line 6) +* STATE_OPT: STATE_OPT. (line 6) +* strequate: libopts-strequate. (line 6) +* streqvcmp: libopts-streqvcmp. (line 6) +* streqvmap: libopts-streqvmap. (line 6) +* string->c-name!: SCM string->c-name!. (line 6) +* string->camelcase: SCM string->camelcase. (line 6) +* string-capitalize: SCM string-capitalize. (line 6) +* string-capitalize!: SCM string-capitalize!. + (line 6) +* string-contains-eqv?: SCM *=*. (line 6) +* string-contains?: SCM *==*. (line 6) +* string-downcase: SCM string-downcase. (line 6) +* string-downcase!: SCM string-downcase!. (line 6) +* string-end-eqv-match?: SCM *~. (line 6) +* string-end-match?: SCM *~~. (line 6) +* string-ends-eqv?: SCM *=. (line 6) +* string-ends-with?: SCM *==. (line 6) +* string-equals?: SCM ==. (line 6) +* string-eqv-match?: SCM ~. (line 6) +* string-eqv?: SCM =. (line 6) +* string-has-eqv-match?: SCM *~*. (line 6) +* string-has-match?: SCM *~~*. (line 6) +* string-match?: SCM ~~. (line 6) +* string-start-eqv-match?: SCM ~*. (line 6) +* string-start-match?: SCM ~~*. (line 6) +* string-starts-eqv?: SCM =*. (line 6) +* string-starts-with?: SCM ==*. (line 6) +* string-substitute: SCM string-substitute. (line 6) +* string-table-add: SCM string-table-add. (line 6) +* string-table-add-ref: SCM string-table-add-ref. + (line 6) +* string-table-new: SCM string-table-new. (line 6) +* string-table-size: SCM string-table-size. (line 6) +* string-tr: SCM string-tr. (line 6) +* string-tr!: SCM string-tr!. (line 6) +* string-upcase: SCM string-upcase. (line 6) +* string-upcase!: SCM string-upcase!. (line 6) +* strneqvcmp: libopts-strneqvcmp. (line 6) +* strtransform: libopts-strtransform. (line 6) +* sub-shell-str: SCM sub-shell-str. (line 6) +* suffix: SCM suffix. (line 6) +* sum: SCM sum. (line 6) +* teOptIndex: teOptIndex. (line 6) +* time-string->number: SCM time-string->number. + (line 6) +* tpl-file: SCM tpl-file. (line 6) +* tpl-file-line: SCM tpl-file-line. (line 6) +* tpl-file-next-line: SCM tpl-file-next-line. + (line 6) +* UNKNOWN: UNKNOWN. (line 6) +* USAGE: USAGE. (line 6) +* VALUE_OPT_name: VALUE_OPT_name. (line 6) +* VERSION: VERSION. (line 6) +* version-compare: SCM version-compare. (line 6) +* WHICH_IDX_name: WHICH_IDX_name. (line 6) +* WHICH_OPT_name: WHICH_OPT_name. (line 6) +* WHILE: WHILE. (line 6) +* ~: SCM ~. (line 6) +* ~*: SCM ~*. (line 6) +* ~~: SCM ~~. (line 6) +* ~~*: SCM ~~*. (line 6) + + |