aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--TODO.xgawk201
-rw-r--r--awkgram.c39
-rw-r--r--awkgram.y39
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/gawk.126
-rw-r--r--doc/gawk.info1056
-rw-r--r--doc/gawk.texi27
-rw-r--r--io.c8
-rw-r--r--main.c9
-rw-r--r--test/ChangeLog11
-rw-r--r--test/Makefile.am33
-rw-r--r--test/Makefile.in38
-rw-r--r--test/Maketests5
-rw-r--r--test/badargs.ok1
-rw-r--r--test/hello.awk3
-rw-r--r--test/incdupe.ok3
-rw-r--r--test/incdupe2.ok2
-rw-r--r--test/incdupe3.ok2
-rw-r--r--test/inclib.awk7
-rw-r--r--test/include.awk5
-rw-r--r--test/include.ok2
-rw-r--r--test/include2.ok2
23 files changed, 881 insertions, 653 deletions
diff --git a/ChangeLog b/ChangeLog
index 2bee6d06..97b2e2d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/TODO.xgawk b/TODO.xgawk
index 1917c73d..04b82b5e 100644
--- a/TODO.xgawk
+++ b/TODO.xgawk
@@ -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.
diff --git a/awkgram.c b/awkgram.c
index dcd5ffec..fe3fd13c 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -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;
}
}
diff --git a/awkgram.y b/awkgram.y
index c0ba4f86..2a48a6fa 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -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
diff --git a/doc/gawk.1 b/doc/gawk.1
index dbc2582b..dbc527e1 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -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
diff --git a/io.c b/io.c
index 1e8870ec..a9fb3455 100644
--- a/io.c
+++ b/io.c
@@ -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;
diff --git a/main.c b/main.c
index fc75db0b..4bdbbc55 100644
--- a/main.c
+++ b/main.c
@@ -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