diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | TODO.xgawk | 201 | ||||
-rw-r--r-- | awkgram.c | 39 | ||||
-rw-r--r-- | awkgram.y | 39 | ||||
-rw-r--r-- | doc/ChangeLog | 5 | ||||
-rw-r--r-- | doc/gawk.1 | 26 | ||||
-rw-r--r-- | doc/gawk.info | 1056 | ||||
-rw-r--r-- | doc/gawk.texi | 27 | ||||
-rw-r--r-- | io.c | 8 | ||||
-rw-r--r-- | main.c | 9 | ||||
-rw-r--r-- | test/ChangeLog | 11 | ||||
-rw-r--r-- | test/Makefile.am | 33 | ||||
-rw-r--r-- | test/Makefile.in | 38 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/badargs.ok | 1 | ||||
-rw-r--r-- | test/hello.awk | 3 | ||||
-rw-r--r-- | test/incdupe.ok | 3 | ||||
-rw-r--r-- | test/incdupe2.ok | 2 | ||||
-rw-r--r-- | test/incdupe3.ok | 2 | ||||
-rw-r--r-- | test/inclib.awk | 7 | ||||
-rw-r--r-- | test/include.awk | 5 | ||||
-rw-r--r-- | test/include.ok | 2 | ||||
-rw-r--r-- | test/include2.ok | 2 |
23 files changed, 881 insertions, 653 deletions
@@ -1,3 +1,13 @@ +2012-05-19 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Update to reflect progress and new issues. + * main.c (main): Add -i (--include) option. + (usage): Ditto. + * awkgram.y (add_srcfile): Eliminate duplicates only for SRC_INC + and SRC_EXTLIB sources (i.e. -f duplicates should not be removed). + * io.c (find_source): Set DEFAULT_FILETYPE to ".awk" if not defined + elsewhere. + 2012-05-15 Arnold D. Robbins <arnold@skeeve.com> * awk.h: Include "gawkapi.h" to get IOBUF. @@ -1,86 +1,37 @@ To-do list for xgawk enhancements: +- Finish implementing new interface using gawkapi.h -Done: - -- Add AWKLIBPATH with default pointing to ${libexecdir}/$PACKAGE/$VERSION - -- Change default shared library extension from ".so" to ".$shlibext" - -- Patch build infrastructure so that the current code in the - extension subdirectory gets built and installed into the default $AWKLIBPATH - location. - -- Implement @load - -- Patch ERRNO handling to create a simple API for use by extensions: - extern void update_ERRNO_int(int) - enum errno_translate { TRANSLATE, DONT_TRANSLATE }; - extern void update_ERRNO_string(const char *string, enum errno_translate); - extern void unset_ERRNO(void); - -- Add valgrind-noleak target. - -- Fix minor bug in fork extension, and add wait function. - -- Patch filefuncs extension to read symbolic links more robustly. - -- Add shared library tests. - -- Delete extension/xreadlink.[ch] - - -To do (not necessarily in this order): - -- Add a -i (--include) option. - -- The -f flag should not eliminate duplicates. - -- Enable default ".awk" search in io.c:find_source(). The simple change - is to add this code inline in io.c: - #ifndef DEFAULT_FILETYPE - #define DEFAULT_FILETYPE ".awk" - #endif - -- Implement new interface using gawkapi.h +- Consider behavior when -i and -f include the same file. Currently, + -f always loads the code, regardless of whether it has already been loaded + using -i or -f. By contrast, -i will ignore the file if has already been + loaded with either -i or -f. Thus, if you say "gawk -f lib.awk -i lib.awk", + it will not be included the second time. But if you flip the order + and say "gawk -i lib.awk -f lib.awk", the file will be loaded twice. + Is this the most sensible behavior? - Add time extension to the gawk distro. This defines sleep and gettimeofday. - Rename existing gettimeofday by adding some underscores. + Rename existing gettimeofday by adding some underscores. Awaiting + confirmation of copyright assignment from FSF... -- Enhance extension/fork.c waitpid to allow the caller to specify the options. - And add an optional array argument to wait and waitpid in which to return - exit status information. +- Running "make install" should install gawkapi.h in /usr/include. -- Maybe add more shared library tests. +- Decide how to transition from the old extension API to the new one. + When will the old approach be abandoned? -- Fix extension/rwarray.c. It does not currently compile due to changes - in the NODE structure relating to array support. The MPFR changes will - also make this more complicated. - -- Figure out how to support xgawk on platforms such as Cygwin where a DLL - cannot be linked with unresolved references. There are currently 3 - possible solutions: - 1. Restructure gawk as a stub calling into a shared library. - 2. Move a subset of gawk interfaces into a shared library that can be - called by extensions. - 3. Change the interface between gawk and extensions so that gawk will - pass a pointer to a structure into dlload that contains the addresses - of all variables and functions to which the extension may need access. +- Eliminate libtool from the top-level configure.ac. Create a separate + configure.ac in the extensions subdirectory, and hide all the libtool + stuff in there. I think AC_CONFIG_SUBDIRS may do this. Should building + the extensions be optional (e.g. by adding a --without-extensions option + to the top-level configure)? If not, I do not understand what is + accomplished by using a separate configure script for the extensions... -- Fix lint complaints about shared library functions being called without - having been defined. For example, try: - gawk --lint -lordchr 'BEGIN {print chr(65)}' - gawk: warning: function `chr' called but never defined - A - In ext.c, make_builtin needs to call awkgram.y:func_use. If done naively, - I think this would result in complaints about shared library functions - defined but not used. So there should probably be an enhancement to func_use - and ftable to indicate if it's a shared library function. +- Develop a libgawk shared library for use by extensions. Should this + be hosted in a separate project? -- Develop a libgawk shared library for use by extensions. In particular, - a few existing extensions use a hash API for mapping string handles to - structures. In xgawk, we had this API inside array.c, but it probably - belongs in a separate libgawk shared library: + A few existing extensions use a hash API for mapping string + handles to structures. In xgawk, we had this API inside array.c, but it + probably belongs in a separate libgawk shared library: typedef struct _strhash strhash; extern strhash *strhash_create P((size_t min_table_size)); @@ -96,19 +47,28 @@ To do (not necessarily in this order): strhash_delete_func, void *opaque)); extern void strhash_destroy P((strhash *, strhash_delete_func, void *opaque)); -- Running "make install" should install the new libgawk shared library - as well as header files needed to build extensions under /usr/include/gawk. - The extensions include "awk.h", and that pulls in the following headers - (according to gcc -M) : - awk.h config.h custom.h gettext.h mbsupport.h protos.h getopt.h \ - regex.h dfa.h - Most likely, most of this is not required. Arnold has suggested - creating a smaller header to define the public interface for use by shared - libraries. One could imagine having "awk-ext.h" that is included by "awk.h". - - -Separate projects for major standalone extensions. Where should these -be hosted? +- Review open hook implementation. Arnold's comments on this: + I think the code flow in io.c needs reviewing. It's not + clear to me under what circumstances open hooks (a) are called, or + (b) should be called. Only the XML extension uses them now, but I + think it'd be a nice mechanism to generalize if possible, and to + document. + + E.g., I can easily envision an open hook to turn directories into records + of the form + + type link-count mode owner group atime mtime ctime name + + I could also envision an open hook to provide an interface to libiconv + (somehow). More discussion / explanation of the vision behind this + would be welcome. + +- Can the IOBUF internals be removed from gawkapi.h? I think this may be + possible if we revise the open hook implementation. + + +Separate projects for major standalone extensions. We need to set up +hosting for these projects: - XML @@ -116,10 +76,33 @@ be hosted? - GD -- MPFR. Is this still useful if MPFR support will be integrated into gawk? +- MPFR. This is probably not useful now that MPFR support has been + integrated into gawk. Are there any users who need this extension? + + +Low priority: +- Fix extension/rwarray.c. It does not currently compile due to changes + in the NODE structure relating to array support. The MPFR changes will + also make this more complicated. John is best equipped to solve this + problem. + +- Enhance extension/fork.c waitpid to allow the caller to specify the options. + And add an optional array argument to wait and waitpid in which to return + exit status information. -Possible changes requiring (further) discussion: +- Fix lint complaints about shared library functions being called without + having been defined. For example, try: + gawk --lint -lordchr 'BEGIN {print chr(65)}' + gawk: warning: function `chr' called but never defined + A + In ext.c, make_builtin needs to call awkgram.y:func_use. If done naively, + I think this would result in complaints about shared library functions + defined but not used. So there should probably be an enhancement to func_use + and ftable to indicate if it's a shared library function. + + +Possible future changes requiring (further) discussion: - Change from dlopen to using the libltdl library (i.e. lt_dlopen). This may support more platforms. @@ -139,6 +122,48 @@ Possible changes requiring (further) discussion: etc, I'd like to keep things simple. But how we design this is going to be very important. + +Unlikely: + - Include a sample rpm spec file in a new packaging subdirectory. - Patch lexer for @include and @load to make quotes optional. + + +Done: + +- Add AWKLIBPATH with default pointing to ${libexecdir}/$PACKAGE/$VERSION + +- Change default shared library extension from ".so" to ".$shlibext" + +- Patch build infrastructure so that the current code in the + extension subdirectory gets built and installed into the default $AWKLIBPATH + location. + +- Implement @load + +- Patch ERRNO handling to create a simple API for use by extensions: + extern void update_ERRNO_int(int) + enum errno_translate { TRANSLATE, DONT_TRANSLATE }; + extern void update_ERRNO_string(const char *string, enum errno_translate); + extern void unset_ERRNO(void); + +- Add valgrind-noleak target. + +- Fix minor bug in fork extension, and add wait function. + +- Patch filefuncs extension to read symbolic links more robustly. + +- Add shared library tests. + +- Delete extension/xreadlink.[ch] + +- Add a -i (--include) option. + +- Enable default ".awk" search in io.c:find_source(). The simple change + is to add this code inline in io.c: + #ifndef DEFAULT_FILETYPE + #define DEFAULT_FILETYPE ".awk" + #endif + +- The -f flag should not eliminate duplicates. @@ -5045,25 +5045,28 @@ add_srcfile(int stype, char *src, SRCFILE *thisfile, bool *already_included, int errno_val ? strerror(errno_val) : _("reason unknown")); } - for (s = srcfiles->next; s != srcfiles; s = s->next) { - if ((s->stype == SRC_FILE || s->stype == SRC_INC || s->stype == SRC_EXTLIB) - && files_are_same(path, s) - ) { - if (do_lint) { - int line = sourceline; - /* Kludge: the line number may be off for `@include file'. - * Since, this function is also used for '-f file' in main.c, - * sourceline > 1 check ensures that the call is at - * parse time. - */ - if (sourceline > 1 && lasttok == NEWLINE) - line--; - lintwarn_ln(line, _("already included source file `%s'"), src); + /* N.B. We do not eliminate duplicate SRC_FILE (-f) programs. */ + if (stype == SRC_INC || stype == SRC_EXTLIB) { + for (s = srcfiles->next; s != srcfiles; s = s->next) { + if ((s->stype == SRC_FILE || s->stype == SRC_INC || s->stype == SRC_EXTLIB) + && files_are_same(path, s) + ) { + if (do_lint) { + int line = sourceline; + /* Kludge: the line number may be off for `@include file'. + * Since, this function is also used for '-f file' in main.c, + * sourceline > 1 check ensures that the call is at + * parse time. + */ + if (sourceline > 1 && lasttok == NEWLINE) + line--; + lintwarn_ln(line, _("already included source file `%s'"), src); + } + efree(path); + if (already_included) + *already_included = true; + return NULL; } - efree(path); - if (already_included) - *already_included = true; - return NULL; } } @@ -2325,25 +2325,28 @@ add_srcfile(int stype, char *src, SRCFILE *thisfile, bool *already_included, int errno_val ? strerror(errno_val) : _("reason unknown")); } - for (s = srcfiles->next; s != srcfiles; s = s->next) { - if ((s->stype == SRC_FILE || s->stype == SRC_INC || s->stype == SRC_EXTLIB) - && files_are_same(path, s) - ) { - if (do_lint) { - int line = sourceline; - /* Kludge: the line number may be off for `@include file'. - * Since, this function is also used for '-f file' in main.c, - * sourceline > 1 check ensures that the call is at - * parse time. - */ - if (sourceline > 1 && lasttok == NEWLINE) - line--; - lintwarn_ln(line, _("already included source file `%s'"), src); + /* N.B. We do not eliminate duplicate SRC_FILE (-f) programs. */ + if (stype == SRC_INC || stype == SRC_EXTLIB) { + for (s = srcfiles->next; s != srcfiles; s = s->next) { + if ((s->stype == SRC_FILE || s->stype == SRC_INC || s->stype == SRC_EXTLIB) + && files_are_same(path, s) + ) { + if (do_lint) { + int line = sourceline; + /* Kludge: the line number may be off for `@include file'. + * Since, this function is also used for '-f file' in main.c, + * sourceline > 1 check ensures that the call is at + * parse time. + */ + if (sourceline > 1 && lasttok == NEWLINE) + line--; + lintwarn_ln(line, _("already included source file `%s'"), src); + } + efree(path); + if (already_included) + *already_included = true; + return NULL; } - efree(path); - if (already_included) - *already_included = true; - return NULL; } } diff --git a/doc/ChangeLog b/doc/ChangeLog index a04db485..57572590 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-19 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawk.texi, gawk.1: Document new -i option, and describe new default + .awk suffix behavior. + 2012-04-01 Andrew J. Schorr <aschorr@telemetry-investments.com> * gawk.texi: Replace documentation of removed functions update_ERRNO and @@ -323,6 +323,19 @@ the standard output. these options cause an immediate, successful exit.) .TP .PD 0 +.BI "\-i " include-file +.TP +.PD +.BI \-\^\-include " include-file" +Load an awk source library. +This searches for the library using the +.B AWKPATH +environment variable. If the initial search fails, another attempt will +be made after appending the ".awk" suffix. The file will be loaded only +once (i.e. duplicates are eliminated), and the code does not constitute +the main program source. +.TP +.PD 0 .BI "\-l " lib .TP .PD @@ -619,7 +632,9 @@ The environment variable specifies a search path to use when finding source files named with the .B \-f -option. If this variable does not exist, the default path is +and +.B \-i +options. If this variable does not exist, the default path is \fB".:/usr/local/share/awk"\fR. (The actual directory may vary, depending upon how .I gawk @@ -3643,9 +3658,14 @@ environment variable can be used to provide a list of directories that .I gawk searches when looking for files named via the .B \-f -and +, .B \-\^\-file -options. +, +.B \-i +and +.B \-\^\-include +options. If the initial search fails, the path is searched again after +appending ".awk" to the filename. .PP The .B AWKLIBPATH diff --git a/doc/gawk.info b/doc/gawk.info index 68460636..0eb5dad7 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -2168,6 +2168,20 @@ The following list describes options mandated by the POSIX standard: `awk' program consists of the concatenation the contents of each specified SOURCE-FILE. +`-i SOURCE-FILE' +`--include SOURCE-FILE' + Read `awk' source library from SOURCE-FILE. This option is + completely equivalent to using the `@include' directive inside + your program. This option is very similar to the `-f' option, but + there are two important differences. First, when `-i' is used, + the program source will not be loaded if it has been previously + loaded, whereas the `-f' will always load the file. Second, + because this option is intended to be used with code libraries, the + `awk' command does not recognize such files as constituting main + program input. Thus, after processing an `-i' argument, we still + expect to find the main source code via the `-f' option or on the + command-line. + `-v VAR=VAL' `--assign VAR=VAL' Set the variable VAR to the value VAL _before_ execution of the @@ -2594,9 +2608,9 @@ The previous minor node described how `awk' program files can be named on the command-line with the `-f' option. In most `awk' implementations, you must supply a precise path name for each program file, unless the file is in the current directory. But in `gawk', if -the file name supplied to the `-f' option does not contain a `/', then -`gawk' searches a list of directories (called the "search path"), one -by one, looking for a file with the specified name. +the file name supplied to the `-f' or `-i' options does not contain a +`/', then `gawk' searches a list of directories (called the "search +path"), one by one, looking for a file with the specified name. The search path is a string consisting of directory names separated by colons. `gawk' gets its search path from the `AWKPATH' environment @@ -2609,11 +2623,15 @@ standard directory in the default path and then specified on the command line with a short file name. Otherwise, the full file name would have to be typed for each file. - By using both the `--source' and `-f' options, your command-line -`awk' programs can use facilities in `awk' library files (*note Library -Functions::). Path searching is not done if `gawk' is in compatibility -mode. This is true for both `--traditional' and `--posix'. *Note -Options::. + By using the `-i' option, or the `--source' and `-f' options, your +command-line `awk' programs can use facilities in `awk' library files +(*note Library Functions::). Path searching is not done if `gawk' is +in compatibility mode. This is true for both `--traditional' and +`--posix'. *Note Options::. + + If the source code is not found after the initial search, the path +is searched again after adding the default `.awk' suffix to the +filename. NOTE: To include the current directory in the path, either place `.' explicitly in the path or write a null entry in the path. (A @@ -2752,7 +2770,8 @@ into smaller, more manageable pieces, and also lets you reuse common together `awk' functions, used to carry out specific tasks, into external files. These files can be used just like function libraries, using the `@include' keyword in conjunction with the `AWKPATH' -environment variable. +environment variable. Note that source files may also be included +using the `-i' option. Let's see an example. We'll start with two (trivial) `awk' scripts, namely `test1' and `test2'. Here is the `test1' script: @@ -3365,7 +3384,7 @@ Class Meaning `[:upper:]' Uppercase alphabetic characters. `[:xdigit:]'Characters that are hexadecimal digits. -Table 3.1: POSIX Character Classes +Table 3.1: POSIX Character Classes For example, before the POSIX standard, you had to write `/[A-Za-z0-9]/' to match alphanumeric characters. If your character @@ -5328,7 +5347,7 @@ COMMAND `|& getline' Sets `$0' and `NF' Extension COMMAND `|& getline' Sets VAR Extension VAR -Table 4.1: getline Variants and What They Set +Table 4.1: getline Variants and What They Set File: gawk.info, Node: Read Timeout, Next: Command line directories, Prev: Getline, Up: Reading Files @@ -6996,7 +7015,7 @@ Feature Default `--posix' or `--use-lc-numeric' Input Use period Use locale `strtonum()'Use period Use locale -Table 6.1: Locale Decimal Point versus A Period +Table 6.1: Locale Decimal Point versus A Period Finally, modern day formal standards and IEEE standard floating point representation can have an unusual but important effect on the way @@ -7338,7 +7357,7 @@ LVALUE `%=' MODULUS Sets LVALUE to its remainder by MODULUS. LVALUE `^=' POWER LVALUE `**=' POWER Raises LVALUE to the power POWER. (c.e.) -Table 6.2: Arithmetic Assignment Operators +Table 6.2: Arithmetic Assignment Operators NOTE: Only the `^=' operator is specified by POSIX. For maximum portability, do not use the `**=' operator. @@ -7643,7 +7662,7 @@ X `!~' Y True if the string X does not match the regexp SUBSCRIPT `in' True if the array ARRAY has an element with the ARRAY subscript SUBSCRIPT. -Table 6.3: Relational Operators +Table 6.3: Relational Operators Comparison expressions have the value one if true and zero if false. When comparing operands of mixed types, numeric operands are converted @@ -11481,7 +11500,7 @@ is illustrated in *note table-sub-escapes::. `\\\\\\&' `\\\&' a literal `\\&' `\\q' `\q' a literal `\q' -Table 9.1: Historical Escape Sequence Processing for `sub()' and +Table 9.1: Historical Escape Sequence Processing for `sub()' and `gsub()' This table shows both the lexical-level processing, where an odd number @@ -11506,7 +11525,8 @@ literally. The interpretation of `\' and `&' then becomes as shown in `\\\\&' `\\&' a literal `\', then the matched text `\\\\\\&' `\\\&' a literal `\&' -Table 9.2: 1992 POSIX Rules for sub and gsub Escape Sequence Processing +Table 9.2: 1992 POSIX Rules for sub and gsub Escape Sequence +Processing This appears to solve the problem. Unfortunately, the phrasing of the standard is unusual. It says, in effect, that `\' turns off the special @@ -11535,7 +11555,7 @@ table-sub-proposed::. `\\q' `\q' a literal `\q' `\\\\' `\\' `\\' -Table 9.3: Proposed rules for sub and backslash +Table 9.3: Proposed rules for sub and backslash In a nutshell, at the runtime level, there are now three special sequences of characters (`\\\&', `\\&' and `\&') whereas historically @@ -11562,7 +11582,7 @@ rules are presented in *note table-posix-sub::. `\\q' `\q' a literal `\q' `\\\\' `\\' `\' -Table 9.4: POSIX rules for `sub()' and `gsub()' +Table 9.4: POSIX rules for `sub()' and `gsub()' The only case where the difference is noticeable is the last one: `\\\\' is seen as `\\' and produces `\' instead of `\\'. @@ -11594,7 +11614,7 @@ the `\' does not, as shown in *note table-gensub-escapes::. `\\\\\\&' `\\\&' a literal `\&' `\\q' `\q' a literal `q' -Table 9.5: Escape Sequence Processing for `gensub()' +Table 9.5: Escape Sequence Processing for `gensub()' Because of the complexity of the lexical and runtime level processing and the special cases for `sub()' and `gsub()', we recommend the use of @@ -12143,7 +12163,7 @@ table-bitwise-ops::. 0 | 0 0 | 0 1 | 0 1 1 | 0 1 | 1 1 | 1 0 -Table 9.6: Bitwise Operations +Table 9.6: Bitwise Operations As you can see, the result of an AND operation is 1 only when _both_ bits are 1. The result of an OR operation is 1 if _either_ bit is 1. @@ -13955,7 +13975,7 @@ Single 32 24 -126 +127 Double 64 53 -1022 +1023 Quadruple 128 113 -16382 +16383 -Table 11.1: Basic IEEE Formats +Table 11.1: Basic IEEE Formats NOTE: The precision numbers include the implied leading one that gives them one extra bit of significand. @@ -13998,7 +14018,7 @@ Round toward zero `roundTowardZero' `"Z"' or `"z"' Round to nearest, ties away `roundTiesToAway' `"A"' or `"a"' from zero -Table 11.2: Rounding Modes +Table 11.2: Rounding Modes The default mode `roundTiesToEven' is the most preferred, but the least intuitive. This method does the obvious thing for most values, by @@ -25713,7 +25733,7 @@ Index * * (asterisk), * operator, as regexp operator: Regexp Operators. (line 87) * * (asterisk), * operator, null strings, matching: Gory Details. - (line 164) + (line 165) * * (asterisk), ** operator <1>: Precedence. (line 49) * * (asterisk), ** operator: Arithmetic Ops. (line 81) * * (asterisk), **= operator <1>: Precedence. (line 95) @@ -25734,84 +25754,86 @@ Index * - (hyphen), -- operator: Increment Ops. (line 48) * - (hyphen), -= operator <1>: Precedence. (line 95) * - (hyphen), -= operator: Assignment Ops. (line 129) -* - (hyphen), filenames beginning with: Options. (line 59) +* - (hyphen), filenames beginning with: Options. (line 73) * - (hyphen), in bracket expressions: Bracket Expressions. (line 17) -* --assign option: Options. (line 32) -* --bignum option: Options. (line 187) -* --c option: Options. (line 81) -* --characters-as-bytes option: Options. (line 68) -* --copyright option: Options. (line 88) -* --debug option: Options. (line 108) +* --assign option: Options. (line 46) +* --bignum option: Options. (line 201) +* --c option: Options. (line 95) +* --characters-as-bytes option: Options. (line 82) +* --copyright option: Options. (line 102) +* --debug option: Options. (line 122) * --disable-lint configuration option: Additional Configuration Options. (line 9) * --disable-nls configuration option: Additional Configuration Options. (line 24) * --dump-variables option <1>: Library Names. (line 45) -* --dump-variables option: Options. (line 93) -* --exec option: Options. (line 125) +* --dump-variables option: Options. (line 107) +* --exec option: Options. (line 139) * --field-separator option: Options. (line 21) * --file option: Options. (line 25) * --gen-pot option <1>: String Extraction. (line 6) -* --gen-pot option: Options. (line 147) -* --help option: Options. (line 154) -* --L option: Options. (line 274) -* --lint option <1>: Options. (line 168) +* --gen-pot option: Options. (line 161) +* --help option: Options. (line 168) +* --include option: Options. (line 32) +* --L option: Options. (line 288) +* --lint option <1>: Options. (line 182) * --lint option: Command Line. (line 20) -* --lint-old option: Options. (line 274) -* --load option: Options. (line 159) +* --lint-old option: Options. (line 288) +* --load option: Options. (line 173) * --non-decimal-data option <1>: Nondecimal Data. (line 6) -* --non-decimal-data option: Options. (line 193) +* --non-decimal-data option: Options. (line 207) * --non-decimal-data option, strtonum() function and: Nondecimal Data. (line 36) -* --optimize option: Options. (line 214) -* --posix option: Options. (line 233) -* --posix option, --traditional option and: Options. (line 252) -* --pretty-print option: Options. (line 206) +* --optimize option: Options. (line 228) +* --posix option: Options. (line 247) +* --posix option, --traditional option and: Options. (line 266) +* --pretty-print option: Options. (line 220) * --profile option <1>: Profiling. (line 12) -* --profile option: Options. (line 221) -* --re-interval option: Options. (line 258) -* --sandbox option: Options. (line 265) +* --profile option: Options. (line 235) +* --re-interval option: Options. (line 272) +* --sandbox option: Options. (line 279) * --sandbox option, disabling system() function: I/O Functions. (line 85) * --sandbox option, input redirection with getline: Getline. (line 19) * --sandbox option, output redirection with print, printf: Redirection. (line 6) -* --source option: Options. (line 117) -* --traditional option: Options. (line 81) -* --traditional option, --posix option and: Options. (line 252) -* --use-lc-numeric option: Options. (line 201) -* --version option: Options. (line 279) +* --source option: Options. (line 131) +* --traditional option: Options. (line 95) +* --traditional option, --posix option and: Options. (line 266) +* --use-lc-numeric option: Options. (line 215) +* --version option: Options. (line 293) * --with-whiny-user-strftime configuration option: Additional Configuration Options. (line 29) -* -b option: Options. (line 68) -* -C option: Options. (line 88) -* -D option: Options. (line 108) -* -d option: Options. (line 93) -* -E option: Options. (line 125) -* -e option: Options. (line 117) +* -b option: Options. (line 82) +* -C option: Options. (line 102) +* -D option: Options. (line 122) +* -d option: Options. (line 107) +* -E option: Options. (line 139) +* -e option: Options. (line 131) * -F option: Command Line Field Separator. (line 6) * -f option: Options. (line 25) * -F option: Options. (line 21) * -f option: Long. (line 12) -* -F option, -Ft sets FS to TAB: Options. (line 287) -* -f option, on command line: Options. (line 292) -* -g option: Options. (line 147) -* -h option: Options. (line 154) -* -l option: Options. (line 159) -* -M option: Options. (line 187) -* -N option: Options. (line 201) -* -n option: Options. (line 193) -* -O option: Options. (line 214) -* -o option: Options. (line 206) -* -P option: Options. (line 233) -* -p option: Options. (line 221) -* -r option: Options. (line 258) -* -S option: Options. (line 265) -* -V option: Options. (line 279) -* -v option: Options. (line 32) +* -F option, -Ft sets FS to TAB: Options. (line 301) +* -f option, on command line: Options. (line 306) +* -g option: Options. (line 161) +* -h option: Options. (line 168) +* -i option: Options. (line 32) +* -l option: Options. (line 173) +* -M option: Options. (line 201) +* -N option: Options. (line 215) +* -n option: Options. (line 207) +* -O option: Options. (line 228) +* -o option: Options. (line 220) +* -P option: Options. (line 247) +* -p option: Options. (line 235) +* -r option: Options. (line 272) +* -S option: Options. (line 279) +* -V option: Options. (line 293) +* -v option: Options. (line 46) * -v option, variables, assigning: Assignment Options. (line 12) -* -W option: Options. (line 46) +* -W option: Options. (line 60) * . (period): Regexp Operators. (line 43) * .mo files: Explaining gettext. (line 41) * .mo files, converting from .po: I18N Example. (line 62) @@ -25958,7 +25980,7 @@ Index (line 23) * advanced features, network connections, See Also networks, connections: Advanced Features. (line 6) -* advanced features, null strings, matching: Gory Details. (line 164) +* advanced features, null strings, matching: Gory Details. (line 165) * advanced features, operators, precedence: Increment Ops. (line 61) * advanced features, piping into sh: Redirection. (line 143) * advanced features, regexp constants: Assignment Ops. (line 148) @@ -26057,7 +26079,7 @@ Index * asterisk (*), * operator, as regexp operator: Regexp Operators. (line 87) * asterisk (*), * operator, null strings, matching: Gory Details. - (line 164) + (line 165) * asterisk (*), ** operator <1>: Precedence. (line 49) * asterisk (*), ** operator: Arithmetic Ops. (line 81) * asterisk (*), **= operator <1>: Precedence. (line 95) @@ -26066,10 +26088,10 @@ Index * asterisk (*), *= operator: Assignment Ops. (line 129) * atan2() function: Numeric Functions. (line 11) * awf (amazingly workable formatter) program: Glossary. (line 25) -* awk debugging, enabling: Options. (line 108) -* awk enabling: Options. (line 206) +* awk debugging, enabling: Options. (line 122) +* awk enabling: Options. (line 220) * awk language, POSIX version: Assignment Ops. (line 136) -* awk profiling, enabling: Options. (line 221) +* awk profiling, enabling: Options. (line 235) * awk programs <1>: Two Rules. (line 6) * awk programs <2>: Executable Scripts. (line 6) * awk programs: Getting Started. (line 12) @@ -26127,7 +26149,7 @@ Index * AWKPATH environment variable: AWKPATH Variable. (line 6) * awkprof.out file: Profiling. (line 6) * awksed.awk program: Simple Sed. (line 25) -* awkvars.out file: Options. (line 93) +* awkvars.out file: Options. (line 107) * b debugger command (alias for break): Breakpoint Control. (line 11) * backslash (\) <1>: Regexp Operators. (line 18) * backslash (\) <2>: Quoting. (line 31) @@ -26271,7 +26293,7 @@ Index * built-in functions: Functions. (line 6) * built-in functions, evaluation order: Calling Built-in. (line 30) * built-in variables: Built-in Variables. (line 6) -* built-in variables, -v option, setting with: Options. (line 40) +* built-in variables, -v option, setting with: Options. (line 54) * built-in variables, conveying information: Auto-set. (line 6) * built-in variables, user-modifiable: User-modified. (line 6) * Busybox Awk: Other Versions. (line 79) @@ -26294,7 +26316,7 @@ Index * case sensitivity, regexps and <1>: User-modified. (line 82) * case sensitivity, regexps and: Case-sensitivity. (line 6) * case sensitivity, string comparisons and: User-modified. (line 82) -* CGI, awk scripts for: Options. (line 125) +* CGI, awk scripts for: Options. (line 139) * character lists, See bracket expressions: Regexp Operators. (line 55) * character sets (machine character encodings) <1>: Glossary. (line 141) * character sets (machine character encodings): Ordinal Functions. @@ -26344,7 +26366,7 @@ Index (line 6) * command line, options <2>: Options. (line 6) * command line, options: Long. (line 12) -* command line, options, end of: Options. (line 54) +* command line, options, end of: Options. (line 68) * command line, variables, assigning on: Assignment Options. (line 6) * command-line options, processing: Getopt Function. (line 6) * command-line options, string extraction: String Extraction. (line 6) @@ -26380,7 +26402,7 @@ Index (line 60) * compatibility mode (gawk), octal numbers: Nondecimal-numbers. (line 60) -* compatibility mode (gawk), specifying: Options. (line 81) +* compatibility mode (gawk), specifying: Options. (line 95) * compiled programs <1>: Glossary. (line 161) * compiled programs: Basic High Level. (line 14) * compiling gawk for Cygwin: Cygwin. (line 6) @@ -26429,7 +26451,7 @@ Index * cos() function: Numeric Functions. (line 15) * counting: Wc Program. (line 6) * csh utility: Statements/Lines. (line 44) -* csh utility, POSIXLY_CORRECT environment variable: Options. (line 334) +* csh utility, POSIXLY_CORRECT environment variable: Options. (line 348) * csh utility, |& operator, comparison with: Two-way I/O. (line 44) * ctime() user-defined function: Function Example. (line 72) * currency symbols, localization: Explaining gettext. (line 103) @@ -26598,7 +26620,7 @@ Index (line 67) * debugging awk programs: Debugger. (line 6) * debugging gawk, bug reports: Bugs. (line 9) -* decimal point character, locale specific: Options. (line 249) +* decimal point character, locale specific: Options. (line 263) * decrement operators: Increment Ops. (line 35) * default keyword: Switch Statement. (line 6) * Deifik, Scott <1>: Bugs. (line 70) @@ -26896,7 +26918,7 @@ Index * files, as single records: Records. (line 196) * files, awk programs in: Long. (line 6) * files, awkprof.out: Profiling. (line 6) -* files, awkvars.out: Options. (line 93) +* files, awkvars.out: Options. (line 107) * files, closing: I/O Functions. (line 10) * files, descriptors, See file descriptors: Special FD. (line 6) * files, group: Group Functions. (line 6) @@ -26924,7 +26946,7 @@ Index * files, portable object template: Explaining gettext. (line 30) * files, portable object, converting to message object files: I18N Example. (line 62) -* files, portable object, generating: Options. (line 147) +* files, portable object, generating: Options. (line 161) * files, processing, ARGIND variable and: Auto-set. (line 47) * files, reading: Rewind Function. (line 6) * files, reading, multiline records: Multiple Line. (line 6) @@ -26982,7 +27004,7 @@ Index * FS variable, --field-separator option and: Options. (line 21) * FS variable, as null string: Single Character Fields. (line 20) -* FS variable, as TAB character: Options. (line 245) +* FS variable, as TAB character: Options. (line 259) * FS variable, changing value of: Field Separators. (line 34) * FS variable, running awk programs and: Cut Program. (line 68) * FS variable, setting from command line: Command Line Field Separator. @@ -27068,7 +27090,7 @@ Index (line 139) * gawk, ERRNO variable in: Getline. (line 19) * gawk, escape sequences: Escape Sequences. (line 125) -* gawk, extensions, disabling: Options. (line 233) +* gawk, extensions, disabling: Options. (line 247) * gawk, features, adding: Adding Code. (line 6) * gawk, features, advanced: Advanced Features. (line 6) * gawk, fflush() function in: I/O Functions. (line 44) @@ -27133,7 +27155,7 @@ Index * gawk, TEXTDOMAIN variable in: User-modified. (line 162) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 36) -* gawk, versions of, information about, printing: Options. (line 279) +* gawk, versions of, information about, printing: Options. (line 293) * gawk, VMS version of: VMS Installation. (line 6) * gawk, word-boundary operator: GNU Regexp Operators. (line 63) @@ -27195,7 +27217,7 @@ Index * GNU Lesser General Public License: Glossary. (line 397) * GNU long options <1>: Options. (line 6) * GNU long options: Command Line. (line 13) -* GNU long options, printing list of: Options. (line 154) +* GNU long options, printing list of: Options. (line 168) * GNU Project <1>: Glossary. (line 319) * GNU Project: Manual History. (line 11) * GNU/Linux <1>: Glossary. (line 611) @@ -27203,7 +27225,7 @@ Index * GNU/Linux: Manual History. (line 28) * GPL (General Public License) <1>: Glossary. (line 310) * GPL (General Public License): Manual History. (line 11) -* GPL (General Public License), printing: Options. (line 88) +* GPL (General Public License), printing: Options. (line 102) * grcat program: Group Functions. (line 16) * Grigera, Juan: Contributors. (line 58) * group database, reading: Group Functions. (line 6) @@ -27226,7 +27248,7 @@ Index * help debugger command: Miscellaneous Debugger Commands. (line 68) * hexadecimal numbers: Nondecimal-numbers. (line 6) -* hexadecimal values, enabling interpretation of: Options. (line 193) +* hexadecimal values, enabling interpretation of: Options. (line 207) * histsort.awk program: History Sorting. (line 25) * Hughes, Phil: Acknowledgments. (line 43) * HUP signal: Profiling. (line 203) @@ -27235,7 +27257,7 @@ Index * hyphen (-), -- operator: Increment Ops. (line 48) * hyphen (-), -= operator <1>: Precedence. (line 95) * hyphen (-), -= operator: Assignment Ops. (line 129) -* hyphen (-), filenames beginning with: Options. (line 59) +* hyphen (-), filenames beginning with: Options. (line 73) * hyphen (-), in bracket expressions: Bracket Expressions. (line 17) * i debugger command (alias for info): Debugger Info. (line 13) * id utility: Id Program. (line 6) @@ -27456,9 +27478,9 @@ Index * lint checking, array subscripts: Uninitialized Subscripts. (line 43) * lint checking, empty programs: Command Line. (line 16) -* lint checking, issuing warnings: Options. (line 168) +* lint checking, issuing warnings: Options. (line 182) * lint checking, POSIXLY_CORRECT environment variable: Options. - (line 318) + (line 332) * lint checking, undefined functions: Pass By Value/Reference. (line 88) * LINT variable: User-modified. (line 98) @@ -27468,10 +27490,10 @@ Index * list debugger command: Miscellaneous Debugger Commands. (line 74) * loading extension: Loading Extensions. (line 6) -* loading, library: Options. (line 159) +* loading, library: Options. (line 173) * local variables: Variable Scope. (line 6) * locale categories: Explaining gettext. (line 80) -* locale decimal point character: Options. (line 249) +* locale decimal point character: Options. (line 263) * locale, definition of: Locales. (line 6) * localization: I18N and L10N. (line 6) * localization, See internationalization, localization: I18N and L10N. @@ -27507,7 +27529,7 @@ Index * matching, expressions, See comparison expressions: Typing and Comparison. (line 9) * matching, leftmost longest: Multiple Line. (line 26) -* matching, null strings: Gory Details. (line 164) +* matching, null strings: Gory Details. (line 165) * mawk program: Other Versions. (line 35) * McPhee, Patrick: Contributors. (line 100) * memory, releasing: Internals. (line 92) @@ -27543,7 +27565,7 @@ Index * networks, programming: TCP/IP Networking. (line 6) * networks, support for: Special Network. (line 6) * newlines <1>: Boolean Ops. (line 67) -* newlines <2>: Options. (line 239) +* newlines <2>: Options. (line 253) * newlines: Statements/Lines. (line 6) * newlines, as field separators: Default Field Splitting. (line 6) @@ -27592,7 +27614,7 @@ Index * null strings, as array subscripts: Uninitialized Subscripts. (line 43) * null strings, converting numbers to strings: Conversion. (line 21) -* null strings, matching: Gory Details. (line 164) +* null strings, matching: Gory Details. (line 165) * null strings, quoting and: Quoting. (line 62) * number sign (#), #! (executable scripts): Executable Scripts. (line 6) @@ -27623,7 +27645,7 @@ Index * oawk utility: Names. (line 17) * obsolete features: Obsolete. (line 6) * octal numbers: Nondecimal-numbers. (line 6) -* octal values, enabling interpretation of: Options. (line 193) +* octal values, enabling interpretation of: Options. (line 207) * OFMT variable <1>: User-modified. (line 115) * OFMT variable <2>: Conversion. (line 55) * OFMT variable: OFMT. (line 15) @@ -27670,13 +27692,13 @@ Index (line 6) * options, command-line <2>: Options. (line 6) * options, command-line: Long. (line 12) -* options, command-line, end of: Options. (line 54) +* options, command-line, end of: Options. (line 68) * options, command-line, invoking awk: Command Line. (line 6) * options, command-line, processing: Getopt Function. (line 6) * options, deprecated: Obsolete. (line 6) * options, long <1>: Options. (line 6) * options, long: Command Line. (line 13) -* options, printing list of: Options. (line 154) +* options, printing list of: Options. (line 168) * OR bitwise operation: Bitwise Functions. (line 6) * or Boolean-logic operator: Boolean Ops. (line 6) * or() function (gawk): Bitwise Functions. (line 48) @@ -27768,13 +27790,13 @@ Index * portability, NF variable, decrementing: Changing Fields. (line 115) * portability, operators: Increment Ops. (line 61) * portability, operators, not in POSIX awk: Precedence. (line 98) -* portability, POSIXLY_CORRECT environment variable: Options. (line 339) +* portability, POSIXLY_CORRECT environment variable: Options. (line 353) * portability, substr() function: String Functions. (line 512) * portable object files <1>: Translator i18n. (line 6) * portable object files: Explaining gettext. (line 36) * portable object files, converting to message object files: I18N Example. (line 62) -* portable object files, generating: Options. (line 147) +* portable object files, generating: Options. (line 161) * portable object template files: Explaining gettext. (line 30) * porting gawk: New Ports. (line 6) * positional specifiers, printf statement <1>: Printf Ordering. @@ -27818,11 +27840,11 @@ Index * POSIX awk, regular expressions and: Regexp Operators. (line 161) * POSIX awk, timestamps and: Time Functions. (line 6) * POSIX awk, | I/O operator and: Getline/Pipe. (line 52) -* POSIX mode: Options. (line 233) +* POSIX mode: Options. (line 247) * POSIX, awk and: Preface. (line 23) * POSIX, gawk extensions not included in: POSIX/GNU. (line 6) * POSIX, programs, implementing in awk: Clones. (line 6) -* POSIXLY_CORRECT environment variable: Options. (line 318) +* POSIXLY_CORRECT environment variable: Options. (line 332) * PREC variable <1>: Setting Precision. (line 6) * PREC variable: User-modified. (line 134) * precedence <1>: Precedence. (line 6) @@ -27858,7 +27880,7 @@ Index * printf statement, sprintf() function and: Round Function. (line 6) * printf statement, syntax of: Basic Printf. (line 6) * printing: Printing. (line 6) -* printing, list of options: Options. (line 154) +* printing, list of options: Options. (line 168) * printing, mailing labels: Labels Program. (line 6) * printing, unduplicated lines of text: Uniq Program. (line 6) * printing, user information: Id Program. (line 6) @@ -27981,7 +28003,7 @@ Index (line 59) * regular expressions, gawk, command-line options: GNU Regexp Operators. (line 70) -* regular expressions, interval expressions and: Options. (line 258) +* regular expressions, interval expressions and: Options. (line 272) * regular expressions, leftmost longest match: Leftmost Longest. (line 6) * regular expressions, operators <1>: Regexp Operators. (line 6) @@ -28059,7 +28081,7 @@ Index * rvalues/lvalues: Assignment Ops. (line 32) * s debugger command (alias for step): Debugger Execution Control. (line 68) -* sandbox mode: Options. (line 265) +* sandbox mode: Options. (line 279) * scalar values: Basic Data Typing. (line 13) * Schorr, Andrew: Acknowledgments. (line 60) * Schreiber, Bert: Acknowledgments. (line 38) @@ -28157,7 +28179,7 @@ Index * source code, jawk: Other Versions. (line 97) * source code, libmawk: Other Versions. (line 105) * source code, mawk: Other Versions. (line 35) -* source code, mixing: Options. (line 117) +* source code, mixing: Options. (line 131) * source code, pawk: Other Versions. (line 69) * source code, QSE Awk: Other Versions. (line 109) * source code, QuikTrim Awk: Other Versions. (line 113) @@ -28297,7 +28319,7 @@ Index * trace debugger command: Miscellaneous Debugger Commands. (line 110) * translate.awk program: Translate Program. (line 55) -* troubleshooting, --non-decimal-data option: Options. (line 193) +* troubleshooting, --non-decimal-data option: Options. (line 207) * troubleshooting, == operator: Comparison Operators. (line 37) * troubleshooting, awk uses FS not IFS: Field Separators. (line 29) @@ -28329,7 +28351,7 @@ Index * troubleshooting, substr() function: String Functions. (line 499) * troubleshooting, system() function: I/O Functions. (line 85) * troubleshooting, typographical errors, global variables: Options. - (line 98) + (line 112) * true, logical: Truth Values. (line 6) * Trueman, David <1>: Contributors. (line 31) * Trueman, David <2>: Acknowledgments. (line 47) @@ -28390,7 +28412,7 @@ Index * variables, assigning on command line: Assignment Options. (line 6) * variables, built-in <1>: Built-in Variables. (line 6) * variables, built-in: Using Variables. (line 20) -* variables, built-in, -v option, setting with: Options. (line 40) +* variables, built-in, -v option, setting with: Options. (line 54) * variables, built-in, conveying information: Auto-set. (line 6) * variables, flag: Boolean Ops. (line 67) * variables, getline command into, using <1>: Getline/Variable/Coprocess. @@ -28401,12 +28423,12 @@ Index (line 6) * variables, getline command into, using: Getline/Variable. (line 6) * variables, global, for library functions: Library Names. (line 11) -* variables, global, printing list of: Options. (line 93) +* variables, global, printing list of: Options. (line 107) * variables, initializing: Using Variables. (line 20) * variables, local: Variable Scope. (line 6) * variables, names of: Arrays. (line 18) * variables, private: Library Names. (line 11) -* variables, setting: Options. (line 32) +* variables, setting: Options. (line 46) * variables, shadowing: Definition Syntax. (line 61) * variables, types of: Assignment Ops. (line 40) * variables, types of, comparison expressions and: Typing and Comparison. @@ -28431,7 +28453,7 @@ Index * Wall, Larry <1>: Future Extensions. (line 6) * Wall, Larry: Array Intro. (line 6) * Wallin, Anders: Acknowledgments. (line 60) -* warnings, issuing: Options. (line 168) +* warnings, issuing: Options. (line 182) * watch debugger command: Viewing And Changing Data. (line 67) * wc utility: Wc Program. (line 6) @@ -28443,7 +28465,7 @@ Index * whitespace, as field separators: Default Field Splitting. (line 6) * whitespace, functions, calling: Calling Built-in. (line 10) -* whitespace, newlines as: Options. (line 239) +* whitespace, newlines as: Options. (line 253) * Williams, Kent: Contributors. (line 35) * Woehlke, Matthew: Contributors. (line 79) * Woods, John: Contributors. (line 28) @@ -28539,402 +28561,402 @@ Node: When96625 Node: Invoking Gawk98772 Node: Command Line100233 Node: Options101016 -Ref: Options-Footnote-1115658 -Node: Other Arguments115683 -Node: Naming Standard Input118341 -Node: Environment Variables119435 -Node: AWKPATH Variable119993 -Ref: AWKPATH Variable-Footnote-1122582 -Node: AWKLIBPATH Variable122842 -Node: Other Environment Variables123439 -Node: Exit Status125934 -Node: Include Files126609 -Node: Loading Shared Libraries130110 -Node: Obsolete131335 -Node: Undocumented132032 -Node: Regexp132275 -Node: Regexp Usage133664 -Node: Escape Sequences135690 -Node: Regexp Operators141453 -Ref: Regexp Operators-Footnote-1148833 -Ref: Regexp Operators-Footnote-2148980 -Node: Bracket Expressions149078 -Ref: table-char-classes150968 -Node: GNU Regexp Operators153491 -Node: Case-sensitivity157214 -Ref: Case-sensitivity-Footnote-1160182 -Ref: Case-sensitivity-Footnote-2160417 -Node: Leftmost Longest160525 -Node: Computed Regexps161726 -Node: Reading Files165136 -Node: Records167140 -Ref: Records-Footnote-1175814 -Node: Fields175851 -Ref: Fields-Footnote-1178884 -Node: Nonconstant Fields178970 -Node: Changing Fields181172 -Node: Field Separators187153 -Node: Default Field Splitting189782 -Node: Regexp Field Splitting190899 -Node: Single Character Fields194241 -Node: Command Line Field Separator195300 -Node: Field Splitting Summary198741 -Ref: Field Splitting Summary-Footnote-1201933 -Node: Constant Size202034 -Node: Splitting By Content206618 -Ref: Splitting By Content-Footnote-1210344 -Node: Multiple Line210384 -Ref: Multiple Line-Footnote-1216231 -Node: Getline216410 -Node: Plain Getline218626 -Node: Getline/Variable220715 -Node: Getline/File221856 -Node: Getline/Variable/File223178 -Ref: Getline/Variable/File-Footnote-1224777 -Node: Getline/Pipe224864 -Node: Getline/Variable/Pipe227424 -Node: Getline/Coprocess228531 -Node: Getline/Variable/Coprocess229774 -Node: Getline Notes230488 -Node: Getline Summary232430 -Ref: table-getline-variants232773 -Node: Read Timeout233629 -Ref: Read Timeout-Footnote-1237374 -Node: Command line directories237431 -Node: Printing238061 -Node: Print239692 -Node: Print Examples241029 -Node: Output Separators243813 -Node: OFMT245573 -Node: Printf246931 -Node: Basic Printf247837 -Node: Control Letters249376 -Node: Format Modifiers253188 -Node: Printf Examples259197 -Node: Redirection261912 -Node: Special Files268896 -Node: Special FD269429 -Ref: Special FD-Footnote-1273054 -Node: Special Network273128 -Node: Special Caveats273978 -Node: Close Files And Pipes274774 -Ref: Close Files And Pipes-Footnote-1281797 -Ref: Close Files And Pipes-Footnote-2281945 -Node: Expressions282095 -Node: Values283227 -Node: Constants283903 -Node: Scalar Constants284583 -Ref: Scalar Constants-Footnote-1285442 -Node: Nondecimal-numbers285624 -Node: Regexp Constants288683 -Node: Using Constant Regexps289158 -Node: Variables292213 -Node: Using Variables292868 -Node: Assignment Options294592 -Node: Conversion296464 -Ref: table-locale-affects301840 -Ref: Conversion-Footnote-1302464 -Node: All Operators302573 -Node: Arithmetic Ops303203 -Node: Concatenation305708 -Ref: Concatenation-Footnote-1308501 -Node: Assignment Ops308621 -Ref: table-assign-ops313609 -Node: Increment Ops315017 -Node: Truth Values and Conditions318487 -Node: Truth Values319570 -Node: Typing and Comparison320619 -Node: Variable Typing321408 -Ref: Variable Typing-Footnote-1325305 -Node: Comparison Operators325427 -Ref: table-relational-ops325837 -Node: POSIX String Comparison329386 -Ref: POSIX String Comparison-Footnote-1330342 -Node: Boolean Ops330480 -Ref: Boolean Ops-Footnote-1334558 -Node: Conditional Exp334649 -Node: Function Calls336381 -Node: Precedence339975 -Node: Locales343644 -Node: Patterns and Actions344733 -Node: Pattern Overview345787 -Node: Regexp Patterns347456 -Node: Expression Patterns347999 -Node: Ranges351684 -Node: BEGIN/END354650 -Node: Using BEGIN/END355412 -Ref: Using BEGIN/END-Footnote-1358143 -Node: I/O And BEGIN/END358249 -Node: BEGINFILE/ENDFILE360531 -Node: Empty363424 -Node: Using Shell Variables363740 -Node: Action Overview366025 -Node: Statements368382 -Node: If Statement370236 -Node: While Statement371735 -Node: Do Statement373779 -Node: For Statement374935 -Node: Switch Statement378087 -Node: Break Statement380184 -Node: Continue Statement382174 -Node: Next Statement383967 -Node: Nextfile Statement386357 -Node: Exit Statement388902 -Node: Built-in Variables391318 -Node: User-modified392413 -Ref: User-modified-Footnote-1400768 -Node: Auto-set400830 -Ref: Auto-set-Footnote-1410738 -Node: ARGC and ARGV410943 -Node: Arrays414794 -Node: Array Basics416299 -Node: Array Intro417125 -Node: Reference to Elements421443 -Node: Assigning Elements423713 -Node: Array Example424204 -Node: Scanning an Array425936 -Node: Controlling Scanning428250 -Ref: Controlling Scanning-Footnote-1433183 -Node: Delete433499 -Ref: Delete-Footnote-1435934 -Node: Numeric Array Subscripts435991 -Node: Uninitialized Subscripts438174 -Node: Multi-dimensional439802 -Node: Multi-scanning442896 -Node: Arrays of Arrays444487 -Node: Functions449132 -Node: Built-in449954 -Node: Calling Built-in451032 -Node: Numeric Functions453020 -Ref: Numeric Functions-Footnote-1456852 -Ref: Numeric Functions-Footnote-2457209 -Ref: Numeric Functions-Footnote-3457257 -Node: String Functions457526 -Ref: String Functions-Footnote-1481023 -Ref: String Functions-Footnote-2481152 -Ref: String Functions-Footnote-3481400 -Node: Gory Details481487 -Ref: table-sub-escapes483166 -Ref: table-sub-posix-92484520 -Ref: table-sub-proposed485863 -Ref: table-posix-sub487213 -Ref: table-gensub-escapes488759 -Ref: Gory Details-Footnote-1489966 -Ref: Gory Details-Footnote-2490017 -Node: I/O Functions490168 -Ref: I/O Functions-Footnote-1496823 -Node: Time Functions496970 -Ref: Time Functions-Footnote-1507862 -Ref: Time Functions-Footnote-2507930 -Ref: Time Functions-Footnote-3508088 -Ref: Time Functions-Footnote-4508199 -Ref: Time Functions-Footnote-5508311 -Ref: Time Functions-Footnote-6508538 -Node: Bitwise Functions508804 -Ref: table-bitwise-ops509362 -Ref: Bitwise Functions-Footnote-1513522 -Node: Type Functions513706 -Node: I18N Functions514176 -Node: User-defined515803 -Node: Definition Syntax516607 -Ref: Definition Syntax-Footnote-1521517 -Node: Function Example521586 -Node: Function Caveats524180 -Node: Calling A Function524601 -Node: Variable Scope525716 -Node: Pass By Value/Reference527691 -Node: Return Statement531131 -Node: Dynamic Typing534112 -Node: Indirect Calls534847 -Node: Internationalization544532 -Node: I18N and L10N545971 -Node: Explaining gettext546657 -Ref: Explaining gettext-Footnote-1551723 -Ref: Explaining gettext-Footnote-2551907 -Node: Programmer i18n552072 -Node: Translator i18n556272 -Node: String Extraction557065 -Ref: String Extraction-Footnote-1558026 -Node: Printf Ordering558112 -Ref: Printf Ordering-Footnote-1560896 -Node: I18N Portability560960 -Ref: I18N Portability-Footnote-1563409 -Node: I18N Example563472 -Ref: I18N Example-Footnote-1566107 -Node: Gawk I18N566179 -Node: Arbitrary Precision Arithmetic566796 -Ref: Arbitrary Precision Arithmetic-Footnote-1569671 -Node: Floating-point Programming569819 -Node: Floating-point Representation575089 -Node: Floating-point Context576193 -Ref: table-ieee-formats577028 -Node: Rounding Mode578398 -Ref: table-rounding-modes579025 -Ref: Rounding Mode-Footnote-1582148 -Node: Arbitrary Precision Floats582329 -Ref: Arbitrary Precision Floats-Footnote-1584370 -Node: Setting Precision584681 -Node: Setting Rounding Mode587439 -Node: Floating-point Constants588356 -Node: Changing Precision589775 -Ref: Changing Precision-Footnote-1591175 -Node: Exact Arithmetic591348 -Node: Integer Programming594361 -Node: Arbitrary Precision Integers596141 -Ref: Arbitrary Precision Integers-Footnote-1599165 -Node: MPFR and GMP Libraries599311 -Node: Advanced Features599696 -Node: Nondecimal Data601219 -Node: Array Sorting602802 -Node: Controlling Array Traversal603499 -Node: Array Sorting Functions611736 -Ref: Array Sorting Functions-Footnote-1615410 -Ref: Array Sorting Functions-Footnote-2615503 -Node: Two-way I/O615697 -Ref: Two-way I/O-Footnote-1621129 -Node: TCP/IP Networking621199 -Node: Profiling624043 -Node: Library Functions631497 -Ref: Library Functions-Footnote-1634504 -Node: Library Names634675 -Ref: Library Names-Footnote-1638146 -Ref: Library Names-Footnote-2638366 -Node: General Functions638452 -Node: Strtonum Function639405 -Node: Assert Function642335 -Node: Round Function645661 -Node: Cliff Random Function647204 -Node: Ordinal Functions648220 -Ref: Ordinal Functions-Footnote-1651290 -Ref: Ordinal Functions-Footnote-2651542 -Node: Join Function651751 -Ref: Join Function-Footnote-1653522 -Node: Gettimeofday Function653722 -Node: Data File Management657437 -Node: Filetrans Function658069 -Node: Rewind Function662208 -Node: File Checking663595 -Node: Empty Files664689 -Node: Ignoring Assigns666919 -Node: Getopt Function668472 -Ref: Getopt Function-Footnote-1679776 -Node: Passwd Functions679979 -Ref: Passwd Functions-Footnote-1688954 -Node: Group Functions689042 -Node: Walking Arrays697126 -Node: Sample Programs698695 -Node: Running Examples699360 -Node: Clones700088 -Node: Cut Program701312 -Node: Egrep Program711157 -Ref: Egrep Program-Footnote-1718930 -Node: Id Program719040 -Node: Split Program722656 -Ref: Split Program-Footnote-1726175 -Node: Tee Program726303 -Node: Uniq Program729106 -Node: Wc Program736535 -Ref: Wc Program-Footnote-1740801 -Ref: Wc Program-Footnote-2741001 -Node: Miscellaneous Programs741093 -Node: Dupword Program742281 -Node: Alarm Program744312 -Node: Translate Program749061 -Ref: Translate Program-Footnote-1753448 -Ref: Translate Program-Footnote-2753676 -Node: Labels Program753810 -Ref: Labels Program-Footnote-1757181 -Node: Word Sorting757265 -Node: History Sorting761149 -Node: Extract Program762988 -Ref: Extract Program-Footnote-1770471 -Node: Simple Sed770599 -Node: Igawk Program773661 -Ref: Igawk Program-Footnote-1788818 -Ref: Igawk Program-Footnote-2789019 -Node: Anagram Program789157 -Node: Signature Program792225 -Node: Debugger793325 -Node: Debugging794277 -Node: Debugging Concepts794710 -Node: Debugging Terms796566 -Node: Awk Debugging799163 -Node: Sample Debugging Session800055 -Node: Debugger Invocation800575 -Node: Finding The Bug801904 -Node: List of Debugger Commands808392 -Node: Breakpoint Control809726 -Node: Debugger Execution Control813390 -Node: Viewing And Changing Data816750 -Node: Execution Stack820106 -Node: Debugger Info821573 -Node: Miscellaneous Debugger Commands825554 -Node: Readline Support830999 -Node: Limitations831830 -Node: Language History834082 -Node: V7/SVR3.1835594 -Node: SVR4837915 -Node: POSIX839357 -Node: BTL840365 -Node: POSIX/GNU841099 -Node: Common Extensions846390 -Node: Ranges and Locales847497 -Ref: Ranges and Locales-Footnote-1852101 -Node: Contributors852322 -Node: Installation856583 -Node: Gawk Distribution857477 -Node: Getting857961 -Node: Extracting858787 -Node: Distribution contents860479 -Node: Unix Installation865701 -Node: Quick Installation866318 -Node: Additional Configuration Options868280 -Node: Configuration Philosophy869757 -Node: Non-Unix Installation872099 -Node: PC Installation872557 -Node: PC Binary Installation873856 -Node: PC Compiling875704 -Node: PC Testing878648 -Node: PC Using879824 -Node: Cygwin884009 -Node: MSYS885009 -Node: VMS Installation885523 -Node: VMS Compilation886126 -Ref: VMS Compilation-Footnote-1887133 -Node: VMS Installation Details887191 -Node: VMS Running888826 -Node: VMS Old Gawk890433 -Node: Bugs890907 -Node: Other Versions894759 -Node: Notes900074 -Node: Compatibility Mode900766 -Node: Additions901549 -Node: Accessing The Source902361 -Node: Adding Code903786 -Node: New Ports909753 -Node: Dynamic Extensions913866 -Node: Internals915306 -Node: Plugin License924128 -Node: Loading Extensions924766 -Node: Sample Library926605 -Node: Internal File Description927295 -Node: Internal File Ops931010 -Ref: Internal File Ops-Footnote-1935752 -Node: Using Internal File Ops935892 -Node: Future Extensions938269 -Node: Basic Concepts940773 -Node: Basic High Level941530 -Ref: Basic High Level-Footnote-1945565 -Node: Basic Data Typing945750 -Node: Floating Point Issues950275 -Node: String Conversion Precision951358 -Ref: String Conversion Precision-Footnote-1953058 -Node: Unexpected Results953167 -Node: POSIX Floating Point Problems954993 -Ref: POSIX Floating Point Problems-Footnote-1958698 -Node: Glossary958736 -Node: Copying983712 -Node: GNU Free Documentation License1021269 -Node: Index1046406 +Ref: Options-Footnote-1116413 +Node: Other Arguments116438 +Node: Naming Standard Input119096 +Node: Environment Variables120190 +Node: AWKPATH Variable120748 +Ref: AWKPATH Variable-Footnote-1123506 +Node: AWKLIBPATH Variable123766 +Node: Other Environment Variables124363 +Node: Exit Status126858 +Node: Include Files127533 +Node: Loading Shared Libraries131102 +Node: Obsolete132327 +Node: Undocumented133024 +Node: Regexp133267 +Node: Regexp Usage134656 +Node: Escape Sequences136682 +Node: Regexp Operators142445 +Ref: Regexp Operators-Footnote-1149825 +Ref: Regexp Operators-Footnote-2149972 +Node: Bracket Expressions150070 +Ref: table-char-classes151960 +Node: GNU Regexp Operators154486 +Node: Case-sensitivity158209 +Ref: Case-sensitivity-Footnote-1161177 +Ref: Case-sensitivity-Footnote-2161412 +Node: Leftmost Longest161520 +Node: Computed Regexps162721 +Node: Reading Files166131 +Node: Records168135 +Ref: Records-Footnote-1176809 +Node: Fields176846 +Ref: Fields-Footnote-1179879 +Node: Nonconstant Fields179965 +Node: Changing Fields182167 +Node: Field Separators188148 +Node: Default Field Splitting190777 +Node: Regexp Field Splitting191894 +Node: Single Character Fields195236 +Node: Command Line Field Separator196295 +Node: Field Splitting Summary199736 +Ref: Field Splitting Summary-Footnote-1202928 +Node: Constant Size203029 +Node: Splitting By Content207613 +Ref: Splitting By Content-Footnote-1211339 +Node: Multiple Line211379 +Ref: Multiple Line-Footnote-1217226 +Node: Getline217405 +Node: Plain Getline219621 +Node: Getline/Variable221710 +Node: Getline/File222851 +Node: Getline/Variable/File224173 +Ref: Getline/Variable/File-Footnote-1225772 +Node: Getline/Pipe225859 +Node: Getline/Variable/Pipe228419 +Node: Getline/Coprocess229526 +Node: Getline/Variable/Coprocess230769 +Node: Getline Notes231483 +Node: Getline Summary233425 +Ref: table-getline-variants233768 +Node: Read Timeout234627 +Ref: Read Timeout-Footnote-1238372 +Node: Command line directories238429 +Node: Printing239059 +Node: Print240690 +Node: Print Examples242027 +Node: Output Separators244811 +Node: OFMT246571 +Node: Printf247929 +Node: Basic Printf248835 +Node: Control Letters250374 +Node: Format Modifiers254186 +Node: Printf Examples260195 +Node: Redirection262910 +Node: Special Files269894 +Node: Special FD270427 +Ref: Special FD-Footnote-1274052 +Node: Special Network274126 +Node: Special Caveats274976 +Node: Close Files And Pipes275772 +Ref: Close Files And Pipes-Footnote-1282795 +Ref: Close Files And Pipes-Footnote-2282943 +Node: Expressions283093 +Node: Values284225 +Node: Constants284901 +Node: Scalar Constants285581 +Ref: Scalar Constants-Footnote-1286440 +Node: Nondecimal-numbers286622 +Node: Regexp Constants289681 +Node: Using Constant Regexps290156 +Node: Variables293211 +Node: Using Variables293866 +Node: Assignment Options295590 +Node: Conversion297462 +Ref: table-locale-affects302838 +Ref: Conversion-Footnote-1303465 +Node: All Operators303574 +Node: Arithmetic Ops304204 +Node: Concatenation306709 +Ref: Concatenation-Footnote-1309502 +Node: Assignment Ops309622 +Ref: table-assign-ops314610 +Node: Increment Ops316021 +Node: Truth Values and Conditions319491 +Node: Truth Values320574 +Node: Typing and Comparison321623 +Node: Variable Typing322412 +Ref: Variable Typing-Footnote-1326309 +Node: Comparison Operators326431 +Ref: table-relational-ops326841 +Node: POSIX String Comparison330393 +Ref: POSIX String Comparison-Footnote-1331349 +Node: Boolean Ops331487 +Ref: Boolean Ops-Footnote-1335565 +Node: Conditional Exp335656 +Node: Function Calls337388 +Node: Precedence340982 +Node: Locales344651 +Node: Patterns and Actions345740 +Node: Pattern Overview346794 +Node: Regexp Patterns348463 +Node: Expression Patterns349006 +Node: Ranges352691 +Node: BEGIN/END355657 +Node: Using BEGIN/END356419 +Ref: Using BEGIN/END-Footnote-1359150 +Node: I/O And BEGIN/END359256 +Node: BEGINFILE/ENDFILE361538 +Node: Empty364431 +Node: Using Shell Variables364747 +Node: Action Overview367032 +Node: Statements369389 +Node: If Statement371243 +Node: While Statement372742 +Node: Do Statement374786 +Node: For Statement375942 +Node: Switch Statement379094 +Node: Break Statement381191 +Node: Continue Statement383181 +Node: Next Statement384974 +Node: Nextfile Statement387364 +Node: Exit Statement389909 +Node: Built-in Variables392325 +Node: User-modified393420 +Ref: User-modified-Footnote-1401775 +Node: Auto-set401837 +Ref: Auto-set-Footnote-1411745 +Node: ARGC and ARGV411950 +Node: Arrays415801 +Node: Array Basics417306 +Node: Array Intro418132 +Node: Reference to Elements422450 +Node: Assigning Elements424720 +Node: Array Example425211 +Node: Scanning an Array426943 +Node: Controlling Scanning429257 +Ref: Controlling Scanning-Footnote-1434190 +Node: Delete434506 +Ref: Delete-Footnote-1436941 +Node: Numeric Array Subscripts436998 +Node: Uninitialized Subscripts439181 +Node: Multi-dimensional440809 +Node: Multi-scanning443903 +Node: Arrays of Arrays445494 +Node: Functions450139 +Node: Built-in450961 +Node: Calling Built-in452039 +Node: Numeric Functions454027 +Ref: Numeric Functions-Footnote-1457859 +Ref: Numeric Functions-Footnote-2458216 +Ref: Numeric Functions-Footnote-3458264 +Node: String Functions458533 +Ref: String Functions-Footnote-1482030 +Ref: String Functions-Footnote-2482159 +Ref: String Functions-Footnote-3482407 +Node: Gory Details482494 +Ref: table-sub-escapes484173 +Ref: table-sub-posix-92485530 +Ref: table-sub-proposed486876 +Ref: table-posix-sub488229 +Ref: table-gensub-escapes489778 +Ref: Gory Details-Footnote-1490988 +Ref: Gory Details-Footnote-2491039 +Node: I/O Functions491190 +Ref: I/O Functions-Footnote-1497845 +Node: Time Functions497992 +Ref: Time Functions-Footnote-1508884 +Ref: Time Functions-Footnote-2508952 +Ref: Time Functions-Footnote-3509110 +Ref: Time Functions-Footnote-4509221 +Ref: Time Functions-Footnote-5509333 +Ref: Time Functions-Footnote-6509560 +Node: Bitwise Functions509826 +Ref: table-bitwise-ops510384 +Ref: Bitwise Functions-Footnote-1514547 +Node: Type Functions514731 +Node: I18N Functions515201 +Node: User-defined516828 +Node: Definition Syntax517632 +Ref: Definition Syntax-Footnote-1522542 +Node: Function Example522611 +Node: Function Caveats525205 +Node: Calling A Function525626 +Node: Variable Scope526741 +Node: Pass By Value/Reference528716 +Node: Return Statement532156 +Node: Dynamic Typing535137 +Node: Indirect Calls535872 +Node: Internationalization545557 +Node: I18N and L10N546996 +Node: Explaining gettext547682 +Ref: Explaining gettext-Footnote-1552748 +Ref: Explaining gettext-Footnote-2552932 +Node: Programmer i18n553097 +Node: Translator i18n557297 +Node: String Extraction558090 +Ref: String Extraction-Footnote-1559051 +Node: Printf Ordering559137 +Ref: Printf Ordering-Footnote-1561921 +Node: I18N Portability561985 +Ref: I18N Portability-Footnote-1564434 +Node: I18N Example564497 +Ref: I18N Example-Footnote-1567132 +Node: Gawk I18N567204 +Node: Arbitrary Precision Arithmetic567821 +Ref: Arbitrary Precision Arithmetic-Footnote-1570696 +Node: Floating-point Programming570844 +Node: Floating-point Representation576114 +Node: Floating-point Context577218 +Ref: table-ieee-formats578053 +Node: Rounding Mode579425 +Ref: table-rounding-modes580052 +Ref: Rounding Mode-Footnote-1583177 +Node: Arbitrary Precision Floats583358 +Ref: Arbitrary Precision Floats-Footnote-1585399 +Node: Setting Precision585710 +Node: Setting Rounding Mode588468 +Node: Floating-point Constants589385 +Node: Changing Precision590804 +Ref: Changing Precision-Footnote-1592204 +Node: Exact Arithmetic592377 +Node: Integer Programming595390 +Node: Arbitrary Precision Integers597170 +Ref: Arbitrary Precision Integers-Footnote-1600194 +Node: MPFR and GMP Libraries600340 +Node: Advanced Features600725 +Node: Nondecimal Data602248 +Node: Array Sorting603831 +Node: Controlling Array Traversal604528 +Node: Array Sorting Functions612765 +Ref: Array Sorting Functions-Footnote-1616439 +Ref: Array Sorting Functions-Footnote-2616532 +Node: Two-way I/O616726 +Ref: Two-way I/O-Footnote-1622158 +Node: TCP/IP Networking622228 +Node: Profiling625072 +Node: Library Functions632526 +Ref: Library Functions-Footnote-1635533 +Node: Library Names635704 +Ref: Library Names-Footnote-1639175 +Ref: Library Names-Footnote-2639395 +Node: General Functions639481 +Node: Strtonum Function640434 +Node: Assert Function643364 +Node: Round Function646690 +Node: Cliff Random Function648233 +Node: Ordinal Functions649249 +Ref: Ordinal Functions-Footnote-1652319 +Ref: Ordinal Functions-Footnote-2652571 +Node: Join Function652780 +Ref: Join Function-Footnote-1654551 +Node: Gettimeofday Function654751 +Node: Data File Management658466 +Node: Filetrans Function659098 +Node: Rewind Function663237 +Node: File Checking664624 +Node: Empty Files665718 +Node: Ignoring Assigns667948 +Node: Getopt Function669501 +Ref: Getopt Function-Footnote-1680805 +Node: Passwd Functions681008 +Ref: Passwd Functions-Footnote-1689983 +Node: Group Functions690071 +Node: Walking Arrays698155 +Node: Sample Programs699724 +Node: Running Examples700389 +Node: Clones701117 +Node: Cut Program702341 +Node: Egrep Program712186 +Ref: Egrep Program-Footnote-1719959 +Node: Id Program720069 +Node: Split Program723685 +Ref: Split Program-Footnote-1727204 +Node: Tee Program727332 +Node: Uniq Program730135 +Node: Wc Program737564 +Ref: Wc Program-Footnote-1741830 +Ref: Wc Program-Footnote-2742030 +Node: Miscellaneous Programs742122 +Node: Dupword Program743310 +Node: Alarm Program745341 +Node: Translate Program750090 +Ref: Translate Program-Footnote-1754477 +Ref: Translate Program-Footnote-2754705 +Node: Labels Program754839 +Ref: Labels Program-Footnote-1758210 +Node: Word Sorting758294 +Node: History Sorting762178 +Node: Extract Program764017 +Ref: Extract Program-Footnote-1771500 +Node: Simple Sed771628 +Node: Igawk Program774690 +Ref: Igawk Program-Footnote-1789847 +Ref: Igawk Program-Footnote-2790048 +Node: Anagram Program790186 +Node: Signature Program793254 +Node: Debugger794354 +Node: Debugging795306 +Node: Debugging Concepts795739 +Node: Debugging Terms797595 +Node: Awk Debugging800192 +Node: Sample Debugging Session801084 +Node: Debugger Invocation801604 +Node: Finding The Bug802933 +Node: List of Debugger Commands809421 +Node: Breakpoint Control810755 +Node: Debugger Execution Control814419 +Node: Viewing And Changing Data817779 +Node: Execution Stack821135 +Node: Debugger Info822602 +Node: Miscellaneous Debugger Commands826583 +Node: Readline Support832028 +Node: Limitations832859 +Node: Language History835111 +Node: V7/SVR3.1836623 +Node: SVR4838944 +Node: POSIX840386 +Node: BTL841394 +Node: POSIX/GNU842128 +Node: Common Extensions847419 +Node: Ranges and Locales848526 +Ref: Ranges and Locales-Footnote-1853130 +Node: Contributors853351 +Node: Installation857612 +Node: Gawk Distribution858506 +Node: Getting858990 +Node: Extracting859816 +Node: Distribution contents861508 +Node: Unix Installation866730 +Node: Quick Installation867347 +Node: Additional Configuration Options869309 +Node: Configuration Philosophy870786 +Node: Non-Unix Installation873128 +Node: PC Installation873586 +Node: PC Binary Installation874885 +Node: PC Compiling876733 +Node: PC Testing879677 +Node: PC Using880853 +Node: Cygwin885038 +Node: MSYS886038 +Node: VMS Installation886552 +Node: VMS Compilation887155 +Ref: VMS Compilation-Footnote-1888162 +Node: VMS Installation Details888220 +Node: VMS Running889855 +Node: VMS Old Gawk891462 +Node: Bugs891936 +Node: Other Versions895788 +Node: Notes901103 +Node: Compatibility Mode901795 +Node: Additions902578 +Node: Accessing The Source903390 +Node: Adding Code904815 +Node: New Ports910782 +Node: Dynamic Extensions914895 +Node: Internals916335 +Node: Plugin License925157 +Node: Loading Extensions925795 +Node: Sample Library927634 +Node: Internal File Description928324 +Node: Internal File Ops932039 +Ref: Internal File Ops-Footnote-1936781 +Node: Using Internal File Ops936921 +Node: Future Extensions939298 +Node: Basic Concepts941802 +Node: Basic High Level942559 +Ref: Basic High Level-Footnote-1946594 +Node: Basic Data Typing946779 +Node: Floating Point Issues951304 +Node: String Conversion Precision952387 +Ref: String Conversion Precision-Footnote-1954087 +Node: Unexpected Results954196 +Node: POSIX Floating Point Problems956022 +Ref: POSIX Floating Point Problems-Footnote-1959727 +Node: Glossary959765 +Node: Copying984741 +Node: GNU Free Documentation License1022298 +Node: Index1047435 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index d3f5c672..7e35e769 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -3022,6 +3022,22 @@ This option may be given multiple times; the @command{awk} program consists of the concatenation the contents of each specified @var{source-file}. +@item -i @var{source-file} +@itemx --include @var{source-file} +@cindex @code{-i} option +@cindex @code{--include} option +@cindex @command{awk} programs, location of +Read @command{awk} source library from @var{source-file}. This option is +completely equivalent to using the @samp{@@include} directive inside +your program. This option is very +similar to the @option{-f} option, but there are two important differences. +First, when @option{-i} is used, the program source will not be loaded if it has +been previously loaded, whereas the @option{-f} will always load the file. +Second, because this option is intended to be used with code libraries, the +@command{awk} command does not recognize such files as constituting main program +input. Thus, after processing an @option{-i} argument, we still expect to +find the main source code via the @option{-f} option or on the command-line. + @item -v @var{var}=@var{val} @itemx --assign @var{var}=@var{val} @cindex @code{-v} option @@ -3619,7 +3635,8 @@ on the command-line with the @option{-f} option. In most @command{awk} implementations, you must supply a precise path name for each program file, unless the file is in the current directory. -But in @command{gawk}, if the @value{FN} supplied to the @option{-f} option +But in @command{gawk}, if the @value{FN} supplied to the @option{-f} +or @option{-i} options does not contain a @samp{/}, then @command{gawk} searches a list of directories (called the @dfn{search path}), one by one, looking for a file with the specified name. @@ -3641,13 +3658,16 @@ standard directory in the default path and then specified on the command line with a short @value{FN}. Otherwise, the full @value{FN} would have to be typed for each file. -By using both the @option{--source} and @option{-f} options, your command-line +By using the @option{-i} option, or the @option{--source} and @option{-f} options, your command-line @command{awk} programs can use facilities in @command{awk} library files (@pxref{Library Functions}). Path searching is not done if @command{gawk} is in compatibility mode. This is true for both @option{--traditional} and @option{--posix}. @xref{Options}. +If the source code is not found after the initial search, the path is searched +again after adding the default @samp{.awk} suffix to the filename. + @quotation NOTE To include the current directory in the path, either place @@ -3794,7 +3814,8 @@ code from various @command{awk} scripts. In other words, you can group together @command{awk} functions, used to carry out specific tasks, into external files. These files can be used just like function libraries, using the @samp{@@include} keyword in conjunction with the @env{AWKPATH} -environment variable. +environment variable. Note that source files may also be included +using the @option{-i} option. Let's see an example. We'll start with two (trivial) @command{awk} scripts, namely @@ -2538,6 +2538,14 @@ find_source(const char *src, struct stat *stb, int *errcode, int is_extlib) #undef EXTLIB_SUFFIX } +/* + * Try searching with .awk appended if the platform headers have not specified + * another suffix. + */ +#ifndef DEFAULT_FILETYPE +#define DEFAULT_FILETYPE ".awk" +#endif + #ifdef DEFAULT_FILETYPE if (! do_traditional && path == NULL) { char *file_awk; @@ -202,7 +202,7 @@ main(int argc, char **argv) /* * The + on the front tells GNU getopt not to rearrange argv. */ - const char *optlist = "+F:f:v:W;m:bcCd::D::e:E:gh:l:L:nNo::Op::MPrStVY"; + const char *optlist = "+F:f:v:W;m:bcCd::D::e:E:gh:i:l:L:nNo::Op::MPrStVY"; bool stopped_early = false; int old_optind; int i; @@ -397,6 +397,10 @@ main(int argc, char **argv) usage(EXIT_SUCCESS, stdout); break; + case 'i': + (void) add_srcfile(SRC_INC, optarg, srcfiles, NULL, NULL); + break; + case 'l': (void) add_srcfile(SRC_EXTLIB, optarg, srcfiles, NULL, NULL); break; @@ -638,7 +642,7 @@ out: for (s = srcfiles->next; s != srcfiles; s = s->next) { if (s->stype == SRC_EXTLIB) (void) load_ext(s->fullpath, "dlload", NULL); - else + else if (s->stype != SRC_INC) have_srcfile++; } @@ -781,6 +785,7 @@ usage(int exitval, FILE *fp) fputs(_("\t-E file\t\t\t--exec=file\n"), fp); fputs(_("\t-g\t\t\t--gen-pot\n"), fp); fputs(_("\t-h\t\t\t--help\n"), fp); + fputs(_("\t-i includefile\t\t--include=includefile\n"), fp); fputs(_("\t-l library\t\t--load=library\n"), fp); fputs(_("\t-L [fatal]\t\t--lint[=fatal]\n"), fp); fputs(_("\t-n\t\t\t--non-decimal-data\n"), fp); diff --git a/test/ChangeLog b/test/ChangeLog index 95bd42dd..755caeb2 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,14 @@ +2012-05-19 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * Makefile.am (EXTRA_DIST): Add new files hello.awk, inclib.awk, + include.awk, include.ok, include2.ok, incdupe.ok, incdupe2.ok and + incdupe3.ok. + (GAWK_EXT_TESTS): Add include, include2, incdupe, incdupe2 and incdupe3. + (include2, incdupe, incdupe2, incdupe3): New tests. + * badargs.ok: Fix usage message to include new -i option. + * hello.awk, incdupe.ok, incdupe2.ok, incdupe3.ok, inclib.awk, + include.awk, include.ok, include2.ok: New files. + 2012-05-09 Arnold D. Robbins <arnold@skeeve.com> * Makefile.am (jarebug): New test. diff --git a/test/Makefile.am b/test/Makefile.am index 726c89ce..e782d1c0 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -347,6 +347,7 @@ EXTRA_DIST = \ gsubtst8.in \ gsubtst8.ok \ gtlnbufv.awk \ + hello.awk \ hex.awk \ hex.ok \ hsprint.awk \ @@ -367,6 +368,13 @@ EXTRA_DIST = \ ignrcase.ok \ ignrcas2.awk \ ignrcas2.ok \ + inclib.awk \ + include.awk \ + include.ok \ + include2.ok \ + incdupe.ok \ + incdupe2.ok \ + incdupe3.ok \ indirectcall.awk \ indirectcall.in \ indirectcall.ok \ @@ -859,7 +867,8 @@ GAWK_EXT_TESTS = \ profile1 profile2 profile3 pty1 \ rebuf regx8bit reint reint2 rsstart1 \ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ - strtonum switch2 + strtonum switch2 \ + include include2 incdupe incdupe2 incdupe3 EXTRA_TESTS = inftest regtest @@ -892,7 +901,7 @@ CHECK_MPFR = \ rand fnarydel fnparydl # List of the files that appear in manual tests or are for reserve testing: -GENTESTS_UNUSED = Makefile.in gtlnbufv.awk printfloat.awk +GENTESTS_UNUSED = Makefile.in gtlnbufv.awk printfloat.awk inclib.awk hello.awk CMP = cmp AWKPROG = ../gawk$(EXEEXT) @@ -1548,6 +1557,26 @@ readfile:: @$(AWK) -l readfile 'BEGIN {printf "%s", readfile("Makefile")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) Makefile _$@ && rm -f _$@ || cp -p Makefile $@.ok +include2:: + @echo $@ + @$(AWK) -i inclib 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +incdupe:: + @echo $@ + @$(AWK) --lint -i inclib -i inclib.awk 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +incdupe2:: + @echo $@ + @$(AWK) --lint -f inclib -f inclib.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +incdupe3:: + @echo $@ + @$(AWK) --lint -f hello -f hello.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + # Targets generated for other tests: include Maketests diff --git a/test/Makefile.in b/test/Makefile.in index fb48935d..d6ffc309 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -579,6 +579,7 @@ EXTRA_DIST = \ gsubtst8.in \ gsubtst8.ok \ gtlnbufv.awk \ + hello.awk \ hex.awk \ hex.ok \ hsprint.awk \ @@ -599,6 +600,13 @@ EXTRA_DIST = \ ignrcase.ok \ ignrcas2.awk \ ignrcas2.ok \ + inclib.awk \ + include.awk \ + include.ok \ + include2.ok \ + incdupe.ok \ + incdupe2.ok \ + incdupe3.ok \ indirectcall.awk \ indirectcall.in \ indirectcall.ok \ @@ -1091,7 +1099,8 @@ GAWK_EXT_TESTS = \ profile1 profile2 profile3 pty1 \ rebuf regx8bit reint reint2 rsstart1 \ rsstart2 rsstart3 rstest6 shadow sortfor sortu splitarg4 strftime \ - strtonum switch2 + strtonum switch2 \ + include include2 incdupe incdupe2 incdupe3 EXTRA_TESTS = inftest regtest INET_TESTS = inetdayu inetdayt inetechu inetecht @@ -1123,7 +1132,7 @@ CHECK_MPFR = \ # List of the files that appear in manual tests or are for reserve testing: -GENTESTS_UNUSED = Makefile.in gtlnbufv.awk printfloat.awk +GENTESTS_UNUSED = Makefile.in gtlnbufv.awk printfloat.awk inclib.awk hello.awk CMP = cmp AWKPROG = ../gawk$(EXEEXT) @@ -1955,6 +1964,26 @@ readfile:: @echo $@ @$(AWK) -l readfile 'BEGIN {printf "%s", readfile("Makefile")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) Makefile _$@ && rm -f _$@ || cp -p Makefile $@.ok + +include2:: + @echo $@ + @$(AWK) -i inclib 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +incdupe:: + @echo $@ + @$(AWK) --lint -i inclib -i inclib.awk 'BEGIN {print sandwich("a", "b", "c")}' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +incdupe2:: + @echo $@ + @$(AWK) --lint -f inclib -f inclib.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +incdupe3:: + @echo $@ + @$(AWK) --lint -f hello -f hello.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ Gt-dummy: # file Maketests, generated from Makefile.am by the Gentests program addcomma: @@ -3092,6 +3121,11 @@ switch2: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +include: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + double1: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index e6a985b0..6856b870 100644 --- a/test/Maketests +++ b/test/Maketests @@ -1135,6 +1135,11 @@ switch2: @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +include: + @echo $@ + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + double1: @echo $@ @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/badargs.ok b/test/badargs.ok index 35c7d027..1be81ec3 100644 --- a/test/badargs.ok +++ b/test/badargs.ok @@ -15,6 +15,7 @@ Short options: GNU long options: (extensions) -E file --exec=file -g --gen-pot -h --help + -i includefile --include=includefile -l library --load=library -L [fatal] --lint[=fatal] -n --non-decimal-data diff --git a/test/hello.awk b/test/hello.awk new file mode 100644 index 00000000..9e6d569d --- /dev/null +++ b/test/hello.awk @@ -0,0 +1,3 @@ +BEGIN { + print "Hello" +} diff --git a/test/incdupe.ok b/test/incdupe.ok new file mode 100644 index 00000000..63c85e41 --- /dev/null +++ b/test/incdupe.ok @@ -0,0 +1,3 @@ +gawk: warning: already included source file `inclib.awk' +Include library loaded. +abc diff --git a/test/incdupe2.ok b/test/incdupe2.ok new file mode 100644 index 00000000..11787238 --- /dev/null +++ b/test/incdupe2.ok @@ -0,0 +1,2 @@ +gawk: inclib.awk:5: error: function name `sandwich' previously defined +EXIT CODE: 1 diff --git a/test/incdupe3.ok b/test/incdupe3.ok new file mode 100644 index 00000000..af17d2f8 --- /dev/null +++ b/test/incdupe3.ok @@ -0,0 +1,2 @@ +Hello +Hello diff --git a/test/inclib.awk b/test/inclib.awk new file mode 100644 index 00000000..51785283 --- /dev/null +++ b/test/inclib.awk @@ -0,0 +1,7 @@ +BEGIN { + print "Include library loaded." +} + +function sandwich(pfx,x,sfx) { + return (pfx x sfx) +} diff --git a/test/include.awk b/test/include.awk new file mode 100644 index 00000000..8fc7837d --- /dev/null +++ b/test/include.awk @@ -0,0 +1,5 @@ +@include "inclib.awk" + +BEGIN { + print sandwich("a", "b", "c") +} diff --git a/test/include.ok b/test/include.ok new file mode 100644 index 00000000..a720efca --- /dev/null +++ b/test/include.ok @@ -0,0 +1,2 @@ +Include library loaded. +abc diff --git a/test/include2.ok b/test/include2.ok new file mode 100644 index 00000000..a720efca --- /dev/null +++ b/test/include2.ok @@ -0,0 +1,2 @@ +Include library loaded. +abc |