aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--awkgram.c6
-rw-r--r--awkgram.y6
-rw-r--r--builtin.c131
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/awkcard.in15
-rw-r--r--doc/gawk.124
-rw-r--r--doc/gawk.info825
-rw-r--r--doc/gawk.texi15
9 files changed, 516 insertions, 519 deletions
diff --git a/ChangeLog b/ChangeLog
index f6086c69..e8d904e4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-07-04 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (tokentab): Remove limit on number of arguments
+ for "and", "or", and "xor".
+ * builtin.c (do_and, do_or, do_xor): Modify code to perform the
+ respective operation on any number of arguments. There must be
+ at least two.
+
2012-06-29 Arnold D. Robbins <arnold@skeeve.com>
* gawkapi.h: Improve the documentation of the return values
diff --git a/awkgram.c b/awkgram.c
index 104c5545..5d3cd6c2 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -4542,7 +4542,7 @@ static const struct token tokentab[] = {
#ifdef ARRAYDEBUG
{"adump", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2), do_adump, 0},
#endif
-{"and", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_and, MPF(and)},
+{"and", Op_builtin, LEX_BUILTIN, GAWKX, do_and, MPF(and)},
{"asort", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3), do_asort, 0},
{"asorti", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3), do_asorti, 0},
{"atan2", Op_builtin, LEX_BUILTIN, NOT_OLD|A(2), do_atan2, MPF(atan2)},
@@ -4583,7 +4583,7 @@ static const struct token tokentab[] = {
{"mktime", Op_builtin, LEX_BUILTIN, GAWKX|A(1), do_mktime, 0},
{"next", Op_K_next, LEX_NEXT, 0, 0, 0},
{"nextfile", Op_K_nextfile, LEX_NEXTFILE, GAWKX, 0, 0},
-{"or", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_or, MPF(or)},
+{"or", Op_builtin, LEX_BUILTIN, GAWKX, do_or, MPF(or)},
{"patsplit", Op_builtin, LEX_BUILTIN, GAWKX|A(2)|A(3)|A(4), do_patsplit, 0},
{"print", Op_K_print, LEX_PRINT, 0, 0, 0},
{"printf", Op_K_printf, LEX_PRINTF, 0, 0, 0},
@@ -4608,7 +4608,7 @@ static const struct token tokentab[] = {
{"tolower", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_tolower, 0},
{"toupper", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_toupper, 0},
{"while", Op_K_while, LEX_WHILE, BREAK|CONTINUE, 0, 0},
-{"xor", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_xor, MPF(xor)},
+{"xor", Op_builtin, LEX_BUILTIN, GAWKX, do_xor, MPF(xor)},
};
#if MBS_SUPPORT
diff --git a/awkgram.y b/awkgram.y
index eed06934..ad2fb35b 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1822,7 +1822,7 @@ static const struct token tokentab[] = {
#ifdef ARRAYDEBUG
{"adump", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2), do_adump, 0},
#endif
-{"and", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_and, MPF(and)},
+{"and", Op_builtin, LEX_BUILTIN, GAWKX, do_and, MPF(and)},
{"asort", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3), do_asort, 0},
{"asorti", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3), do_asorti, 0},
{"atan2", Op_builtin, LEX_BUILTIN, NOT_OLD|A(2), do_atan2, MPF(atan2)},
@@ -1863,7 +1863,7 @@ static const struct token tokentab[] = {
{"mktime", Op_builtin, LEX_BUILTIN, GAWKX|A(1), do_mktime, 0},
{"next", Op_K_next, LEX_NEXT, 0, 0, 0},
{"nextfile", Op_K_nextfile, LEX_NEXTFILE, GAWKX, 0, 0},
-{"or", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_or, MPF(or)},
+{"or", Op_builtin, LEX_BUILTIN, GAWKX, do_or, MPF(or)},
{"patsplit", Op_builtin, LEX_BUILTIN, GAWKX|A(2)|A(3)|A(4), do_patsplit, 0},
{"print", Op_K_print, LEX_PRINT, 0, 0, 0},
{"printf", Op_K_printf, LEX_PRINTF, 0, 0, 0},
@@ -1888,7 +1888,7 @@ static const struct token tokentab[] = {
{"tolower", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_tolower, 0},
{"toupper", Op_builtin, LEX_BUILTIN, NOT_OLD|A(1), do_toupper, 0},
{"while", Op_K_while, LEX_WHILE, BREAK|CONTINUE, 0, 0},
-{"xor", Op_builtin, LEX_BUILTIN, GAWKX|A(2), do_xor, MPF(xor)},
+{"xor", Op_builtin, LEX_BUILTIN, GAWKX, do_xor, MPF(xor)},
};
#if MBS_SUPPORT
diff --git a/builtin.c b/builtin.c
index 87b596e6..3576372c 100644
--- a/builtin.c
+++ b/builtin.c
@@ -3021,33 +3021,30 @@ do_rshift(int nargs)
NODE *
do_and(int nargs)
{
- NODE *s1, *s2;
- uintmax_t uleft, uright, res;
- AWKNUM left, right;
+ NODE *s1;
+ uintmax_t res, uval;
+ AWKNUM val;
+ int i;
- POP_TWO_SCALARS(s1, s2);
- if (do_lint) {
- if ((s1->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("and: received non-numeric first argument"));
- if ((s2->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("and: received non-numeric second argument"));
- }
- left = force_number(s1)->numbr;
- right = force_number(s2)->numbr;
- if (do_lint) {
- if (left < 0 || right < 0)
- lintwarn(_("and(%f, %f): negative values will give strange results"), left, right);
- if (double_to_int(left) != left || double_to_int(right) != right)
- lintwarn(_("and(%f, %f): fractional values will be truncated"), left, right);
- }
+ res = ~0; /* start off with all ones */
+ if (nargs < 2)
+ fatal(_("and: called with less than two arguments"));
- DEREF(s1);
- DEREF(s2);
+ for (i = 1; nargs > 0; nargs--, i++) {
+ s1 = POP_SCALAR();
+ if (do_lint && (s1->flags & (NUMCUR|NUMBER)) == 0)
+ lintwarn(_("and: argument %d is non-numeric"), i);
- uleft = (uintmax_t) left;
- uright = (uintmax_t) right;
+ val = force_number(s1)->numbr;
+ if (do_lint && val < 0)
+ lintwarn(_("and: argument %d negative value %g will give strange results"), i, val);
+
+ uval = (uintmax_t) val;
+ res &= uval;
+
+ DEREF(s1);
+ }
- res = uleft & uright;
return make_integer(res);
}
@@ -3056,33 +3053,30 @@ do_and(int nargs)
NODE *
do_or(int nargs)
{
- NODE *s1, *s2;
- uintmax_t uleft, uright, res;
- AWKNUM left, right;
+ NODE *s1;
+ uintmax_t res, uval;
+ AWKNUM val;
+ int i;
- POP_TWO_SCALARS(s1, s2);
- if (do_lint) {
- if ((s1->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("or: received non-numeric first argument"));
- if ((s2->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("or: received non-numeric second argument"));
- }
- left = force_number(s1)->numbr;
- right = force_number(s2)->numbr;
- if (do_lint) {
- if (left < 0 || right < 0)
- lintwarn(_("or(%f, %f): negative values will give strange results"), left, right);
- if (double_to_int(left) != left || double_to_int(right) != right)
- lintwarn(_("or(%f, %f): fractional values will be truncated"), left, right);
- }
+ res = 0;
+ if (nargs < 2)
+ fatal(_("or: called with less than two arguments"));
- DEREF(s1);
- DEREF(s2);
+ for (i = 1; nargs > 0; nargs--, i++) {
+ s1 = POP_SCALAR();
+ if (do_lint && (s1->flags & (NUMCUR|NUMBER)) == 0)
+ lintwarn(_("or: argument %d is non-numeric"), i);
+
+ val = force_number(s1)->numbr;
+ if (do_lint && val < 0)
+ lintwarn(_("or: argument %d negative value %g will give strange results"), i, val);
- uleft = (uintmax_t) left;
- uright = (uintmax_t) right;
+ uval = (uintmax_t) val;
+ res |= uval;
+
+ DEREF(s1);
+ }
- res = uleft | uright;
return make_integer(res);
}
@@ -3091,34 +3085,33 @@ do_or(int nargs)
NODE *
do_xor(int nargs)
{
- NODE *s1, *s2;
- uintmax_t uleft, uright, res;
- AWKNUM left, right;
+ NODE *s1;
+ uintmax_t res, uval;
+ AWKNUM val;
+ int i;
- POP_TWO_SCALARS(s1, s2);
+ if (nargs < 2)
+ fatal(_("xor: called with less than two arguments"));
- if (do_lint) {
- if ((s1->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("xor: received non-numeric first argument"));
- if ((s2->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("xor: received non-numeric second argument"));
- }
- left = force_number(s1)->numbr;
- right = force_number(s2)->numbr;
- if (do_lint) {
- if (left < 0 || right < 0)
- lintwarn(_("xor(%f, %f): negative values will give strange results"), left, right);
- if (double_to_int(left) != left || double_to_int(right) != right)
- lintwarn(_("xor(%f, %f): fractional values will be truncated"), left, right);
- }
+ res = 0; /* silence compiler warning */
+ for (i = 1; nargs > 0; nargs--, i++) {
+ s1 = POP_SCALAR();
+ if (do_lint && (s1->flags & (NUMCUR|NUMBER)) == 0)
+ lintwarn(_("xor: argument %d is non-numeric"), i);
- DEREF(s1);
- DEREF(s2);
+ val = force_number(s1)->numbr;
+ if (do_lint && val < 0)
+ lintwarn(_("xor: argument %d negative value %g will give strange results"), i, val);
- uleft = (uintmax_t) left;
- uright = (uintmax_t) right;
+ uval = (uintmax_t) val;
+ if (i == 1)
+ res = uval;
+ else
+ res ^= uval;
+
+ DEREF(s1);
+ }
- res = uleft ^ uright;
return make_integer(res);
}
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 421be549..1628e796 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-04 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawk.texi, gawk.1, awkcard.in: Document that and(), or(), and
+ xor() can all take any number of arguments, with a minimum of two.
+
2012-06-10 Andrew J. Schorr <aschorr@telemetry-investments.com>
* gawk.texi: Rename gettimeofday function to getlocaltime, since
diff --git a/doc/awkcard.in b/doc/awkcard.in
index b7d87691..d0c1578a 100644
--- a/doc/awkcard.in
+++ b/doc/awkcard.in
@@ -1811,10 +1811,9 @@ provides the following functions for doing bitwise operations.
.fi
.in +.2i
.ti -.2i
-\*(FCand(\*(FIv1\*(FC, \*(FIv2\*(FC)\*(FR
+\*(FCand(\*(FIv1\*(FC, \*(FIv2\*(FR [\*(FC,\*(FR ... ]\*(FC)\*(FR
.br
-Return the bitwise AND of the values provided by
-\*(FIv1\*(FR and \*(FIv2\*(FR.
+Return the bitwise AND of the arguments.
.ti -.2i
\*(FCcompl(\*(FIval\*(FC)\*(FR
.br
@@ -1826,20 +1825,18 @@ Return the bitwise complement of
Return the value of \*(FIval\*(FR,
shifted left by \*(FIcount\*(FR bits.
.ti -.2i
-\*(FCor(\*(FIv1\*(FC, \*(FIv2\*(FC)\*(FR
+\*(FCor(\*(FIv1\*(FC, \*(FIv2\*(FR [\*(FC,\*(FR ... ]\*(FC)\*(FR
.br
-Return the bitwise OR of the values provided by
-\*(FIv1\*(FR and \*(FIv2\*(FR.
+Return the bitwise OR of the arguments.
.ti -.2i
\*(FCrshift(\*(FIval\*(FC, \*(FIcount\*(FC)\*(FR
.br
Return the value of \*(FIval\*(FR,
shifted right by \*(FIcount\*(FR bits.
.ti -.2i
-\*(FCxor(\*(FIv1\*(FC, \*(FIv2\*(FC)\*(FR
+\*(FCxor(\*(FIv1\*(FC, \*(FIv2\*(FR [\*(FC,\*(FR ... ]\*(FC)\*(FR
.br
-Return the bitwise XOR of the values provided by
-\*(FIv1\*(FR and \*(FIv2\*(FR.\*(CB
+Return the bitwise XOR of the arguments.\*(CB
.in -.2i
.EB "\s+2\f(HBBIT MANIPULATION FUNCTIONS (\*(GK\f(HB)\*(FR\s0"
.sp .6
diff --git a/doc/gawk.1 b/doc/gawk.1
index a2cfab6e..4a19219a 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -2977,11 +2977,9 @@ integers, doing the operation, and then converting the
result back to floating point.
The functions are:
.TP "\w'\fBrshift(\fIval\fB, \fIcount\fB)\fR'u+2n"
-\fBand(\fIv1\fB, \fIv2\fB)\fR
-Return the bitwise AND of the values provided by
-.I v1
-and
-.IR v2 .
+\fBand(\fIv1\fB, \fIv2 \fR[, ...]\fB)\fR
+Return the bitwise AND of the values provided in the argument list.
+There must be at least two.
.TP
\fBcompl(\fIval\fB)\fR
Return the bitwise complement of
@@ -2994,11 +2992,9 @@ shifted left by
.I count
bits.
.TP
-\fBor(\fIv1\fB, \fIv2\fB)\fR
-Return the bitwise OR of the values provided by
-.I v1
-and
-.IR v2 .
+\fBor(\fIv1\fB, \fIv2 \fR[, ...]\fB)\fR
+Return the bitwise OR of the values provided in the argument list.
+There must be at least two.
.TP
\fBrshift(\fIval\fB, \fIcount\fB)\fR
Return the value of
@@ -3007,11 +3003,9 @@ shifted right by
.I count
bits.
.TP
-\fBxor(\fIv1\fB, \fIv2\fB)\fR
-Return the bitwise XOR of the values provided by
-.I v1
-and
-.IR v2 .
+\fBxor(\fIv1\fB, \fIv2 \fR[, ...]\fB)\fR
+Return the bitwise XOR of the values provided in the argument list.
+There must be at least two.
.PP
.SS Type Function
The following function is for use with multidimensional arrays.
diff --git a/doc/gawk.info b/doc/gawk.info
index 8c939844..57c5ec26 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -3384,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
@@ -5347,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
@@ -7015,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
@@ -7357,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.
@@ -7662,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
@@ -11500,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
@@ -11525,8 +11525,7 @@ 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
@@ -11555,7 +11554,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
@@ -11582,7 +11581,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 `\\'.
@@ -11614,7 +11613,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
@@ -12163,7 +12162,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.
@@ -12179,8 +12178,9 @@ again with `10111001' and shift it left by three bits, you end up with
`11001000'. `gawk' provides built-in functions that implement the
bitwise operations just described. They are:
-`and(V1, V2)'
- Return the bitwise AND of the values provided by V1 and V2.
+`and(V1, V2 [, ...])'
+ Return the bitwise AND of the arguments. There must be at least
+ two.
`compl(VAL)'
Return the bitwise complement of VAL.
@@ -12188,14 +12188,15 @@ bitwise operations just described. They are:
`lshift(VAL, COUNT)'
Return the value of VAL, shifted left by COUNT bits.
-`or(V1, V2)'
- Return the bitwise OR of the values provided by V1 and V2.
+`or(V1, V2 [, ...])'
+ Return the bitwise OR of the arguments. There must be at least two.
`rshift(VAL, COUNT)'
Return the value of VAL, shifted right by COUNT bits.
-`xor(V1, V2)'
- Return the bitwise XOR of the values provided by V1 and V2.
+`xor(V1, V2 [, ...])'
+ Return the bitwise XOR of the arguments. There must be at least
+ two.
For all of these functions, first the double precision
floating-point value is converted to the widest C unsigned integer
@@ -13975,7 +13976,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.
@@ -14018,7 +14019,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
@@ -25724,7 +25725,7 @@ Index
* * (asterisk), * operator, as regexp operator: Regexp Operators.
(line 87)
* * (asterisk), * operator, null strings, matching: Gory Details.
- (line 165)
+ (line 164)
* * (asterisk), ** operator <1>: Precedence. (line 49)
* * (asterisk), ** operator: Arithmetic Ops. (line 81)
* * (asterisk), **= operator <1>: Precedence. (line 95)
@@ -25971,7 +25972,7 @@ Index
(line 23)
* advanced features, network connections, See Also networks, connections: Advanced Features.
(line 6)
-* advanced features, null strings, matching: Gory Details. (line 165)
+* advanced features, null strings, matching: Gory Details. (line 164)
* advanced features, operators, precedence: Increment Ops. (line 61)
* advanced features, piping into sh: Redirection. (line 143)
* advanced features, regexp constants: Assignment Ops. (line 148)
@@ -26070,7 +26071,7 @@ Index
* asterisk (*), * operator, as regexp operator: Regexp Operators.
(line 87)
* asterisk (*), * operator, null strings, matching: Gory Details.
- (line 165)
+ (line 164)
* asterisk (*), ** operator <1>: Precedence. (line 49)
* asterisk (*), ** operator: Arithmetic Ops. (line 81)
* asterisk (*), **= operator <1>: Precedence. (line 95)
@@ -26231,7 +26232,7 @@ Index
(line 33)
* BINMODE variable <1>: PC Using. (line 34)
* BINMODE variable: User-modified. (line 10)
-* bits2str() user-defined function: Bitwise Functions. (line 68)
+* bits2str() user-defined function: Bitwise Functions. (line 70)
* bitwise, complement: Bitwise Functions. (line 25)
* bitwise, operations: Bitwise Functions. (line 6)
* bitwise, shift: Bitwise Functions. (line 32)
@@ -26400,7 +26401,7 @@ Index
* compiling gawk for MS-DOS and MS-Windows: PC Compiling. (line 13)
* compiling gawk for VMS: VMS Compilation. (line 6)
* compiling gawk with EMX for OS/2: PC Compiling. (line 28)
-* compl() function (gawk): Bitwise Functions. (line 42)
+* compl() function (gawk): Bitwise Functions. (line 43)
* complement, bitwise: Bitwise Functions. (line 25)
* compound statements, control statements and: Statements. (line 10)
* concatenating: Concatenation. (line 9)
@@ -26426,9 +26427,9 @@ Index
* converting, dates to timestamps: Time Functions. (line 74)
* converting, during subscripting: Numeric Array Subscripts.
(line 31)
-* converting, numbers to strings <1>: Bitwise Functions. (line 107)
+* converting, numbers to strings <1>: Bitwise Functions. (line 109)
* converting, numbers to strings: Conversion. (line 6)
-* converting, strings to numbers <1>: Bitwise Functions. (line 107)
+* converting, strings to numbers <1>: Bitwise Functions. (line 109)
* converting, strings to numbers: Conversion. (line 6)
* CONVFMT variable <1>: User-modified. (line 28)
* CONVFMT variable: Conversion. (line 29)
@@ -27502,7 +27503,7 @@ Index
* loops, See Also while statement: While Statement. (line 6)
* Lost In Space: Dynamic Extensions. (line 6)
* ls utility: More Complex. (line 15)
-* lshift() function (gawk): Bitwise Functions. (line 45)
+* lshift() function (gawk): Bitwise Functions. (line 46)
* lvalues/rvalues: Assignment Ops. (line 32)
* mailing labels, printing: Labels Program. (line 6)
* mailing list, GNITS: Acknowledgments. (line 52)
@@ -27520,7 +27521,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 165)
+* matching, null strings: Gory Details. (line 164)
* mawk program: Other Versions. (line 35)
* McPhee, Patrick: Contributors. (line 100)
* memory, releasing: Internals. (line 92)
@@ -27605,7 +27606,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 165)
+* null strings, matching: Gory Details. (line 164)
* null strings, quoting and: Quoting. (line 62)
* number sign (#), #! (executable scripts): Executable Scripts.
(line 6)
@@ -27618,7 +27619,7 @@ Index
* numbers, as values of characters: Ordinal Functions. (line 6)
* numbers, Cliff random: Cliff Random Function.
(line 6)
-* numbers, converting <1>: Bitwise Functions. (line 107)
+* numbers, converting <1>: Bitwise Functions. (line 109)
* numbers, converting: Conversion. (line 6)
* numbers, converting, to strings: User-modified. (line 28)
* numbers, floating-point: Basic Data Typing. (line 21)
@@ -27692,7 +27693,7 @@ Index
* 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)
+* or() function (gawk): Bitwise Functions. (line 49)
* ord() user-defined function: Ordinal Functions. (line 16)
* order of evaluation, concatenation: Concatenation. (line 42)
* ORS variable <1>: User-modified. (line 129)
@@ -28056,7 +28057,7 @@ Index
* RS variable <1>: User-modified. (line 143)
* RS variable: Records. (line 20)
* RS variable, multiline records and: Multiple Line. (line 17)
-* rshift() function (gawk): Bitwise Functions. (line 51)
+* rshift() function (gawk): Bitwise Functions. (line 52)
* RSTART variable: Auto-set. (line 207)
* RSTART variable, match() function and: String Functions. (line 223)
* RT variable <1>: Auto-set. (line 214)
@@ -28220,7 +28221,7 @@ Index
* string operators: Concatenation. (line 9)
* string-matching operators: Regexp Usage. (line 19)
* strings: Internals. (line 77)
-* strings, converting <1>: Bitwise Functions. (line 107)
+* strings, converting <1>: Bitwise Functions. (line 109)
* strings, converting: Conversion. (line 6)
* strings, converting, numbers to: User-modified. (line 28)
* strings, empty, See null strings: Records. (line 102)
@@ -28267,7 +28268,7 @@ Index
* tee utility: Tee Program. (line 6)
* tee.awk program: Tee Program. (line 26)
* terminating records: Records. (line 112)
-* testbits.awk program: Bitwise Functions. (line 68)
+* testbits.awk program: Bitwise Functions. (line 70)
* Texinfo <1>: Adding Code. (line 99)
* Texinfo <2>: Distribution contents.
(line 79)
@@ -28476,7 +28477,7 @@ Index
* xgettext utility: String Extraction. (line 13)
* XML (eXtensible Markup Language): Internals. (line 157)
* XOR bitwise operation: Bitwise Functions. (line 6)
-* xor() function (gawk): Bitwise Functions. (line 54)
+* xor() function (gawk): Bitwise Functions. (line 55)
* Yawitz, Efraim: Contributors. (line 106)
* Zaretskii, Eli <1>: Bugs. (line 70)
* Zaretskii, Eli <2>: Contributors. (line 56)
@@ -28573,381 +28574,381 @@ Ref: Regexp Operators-Footnote-1149826
Ref: Regexp Operators-Footnote-2149973
Node: Bracket Expressions150071
Ref: table-char-classes151961
-Node: GNU Regexp Operators154487
-Node: Case-sensitivity158210
-Ref: Case-sensitivity-Footnote-1161178
-Ref: Case-sensitivity-Footnote-2161413
-Node: Leftmost Longest161521
-Node: Computed Regexps162722
-Node: Reading Files166132
-Node: Records168136
-Ref: Records-Footnote-1176810
-Node: Fields176847
-Ref: Fields-Footnote-1179880
-Node: Nonconstant Fields179966
-Node: Changing Fields182168
-Node: Field Separators188149
-Node: Default Field Splitting190778
-Node: Regexp Field Splitting191895
-Node: Single Character Fields195237
-Node: Command Line Field Separator196296
-Node: Field Splitting Summary199737
-Ref: Field Splitting Summary-Footnote-1202929
-Node: Constant Size203030
-Node: Splitting By Content207614
-Ref: Splitting By Content-Footnote-1211340
-Node: Multiple Line211380
-Ref: Multiple Line-Footnote-1217227
-Node: Getline217406
-Node: Plain Getline219622
-Node: Getline/Variable221711
-Node: Getline/File222852
-Node: Getline/Variable/File224174
-Ref: Getline/Variable/File-Footnote-1225773
-Node: Getline/Pipe225860
-Node: Getline/Variable/Pipe228420
-Node: Getline/Coprocess229527
-Node: Getline/Variable/Coprocess230770
-Node: Getline Notes231484
-Node: Getline Summary233426
-Ref: table-getline-variants233769
-Node: Read Timeout234628
-Ref: Read Timeout-Footnote-1238373
-Node: Command line directories238430
-Node: Printing239060
-Node: Print240691
-Node: Print Examples242028
-Node: Output Separators244812
-Node: OFMT246572
-Node: Printf247930
-Node: Basic Printf248836
-Node: Control Letters250375
-Node: Format Modifiers254187
-Node: Printf Examples260196
-Node: Redirection262911
-Node: Special Files269895
-Node: Special FD270428
-Ref: Special FD-Footnote-1274053
-Node: Special Network274127
-Node: Special Caveats274977
-Node: Close Files And Pipes275773
-Ref: Close Files And Pipes-Footnote-1282796
-Ref: Close Files And Pipes-Footnote-2282944
-Node: Expressions283094
-Node: Values284226
-Node: Constants284902
-Node: Scalar Constants285582
-Ref: Scalar Constants-Footnote-1286441
-Node: Nondecimal-numbers286623
-Node: Regexp Constants289682
-Node: Using Constant Regexps290157
-Node: Variables293212
-Node: Using Variables293867
-Node: Assignment Options295591
-Node: Conversion297463
-Ref: table-locale-affects302839
-Ref: Conversion-Footnote-1303466
-Node: All Operators303575
-Node: Arithmetic Ops304205
-Node: Concatenation306710
-Ref: Concatenation-Footnote-1309503
-Node: Assignment Ops309623
-Ref: table-assign-ops314611
-Node: Increment Ops316022
-Node: Truth Values and Conditions319492
-Node: Truth Values320575
-Node: Typing and Comparison321624
-Node: Variable Typing322413
-Ref: Variable Typing-Footnote-1326310
-Node: Comparison Operators326432
-Ref: table-relational-ops326842
-Node: POSIX String Comparison330394
-Ref: POSIX String Comparison-Footnote-1331350
-Node: Boolean Ops331488
-Ref: Boolean Ops-Footnote-1335566
-Node: Conditional Exp335657
-Node: Function Calls337389
-Node: Precedence340983
-Node: Locales344652
-Node: Patterns and Actions345741
-Node: Pattern Overview346795
-Node: Regexp Patterns348464
-Node: Expression Patterns349007
-Node: Ranges352692
-Node: BEGIN/END355658
-Node: Using BEGIN/END356420
-Ref: Using BEGIN/END-Footnote-1359151
-Node: I/O And BEGIN/END359257
-Node: BEGINFILE/ENDFILE361539
-Node: Empty364432
-Node: Using Shell Variables364748
-Node: Action Overview367033
-Node: Statements369390
-Node: If Statement371244
-Node: While Statement372743
-Node: Do Statement374787
-Node: For Statement375943
-Node: Switch Statement379095
-Node: Break Statement381192
-Node: Continue Statement383182
-Node: Next Statement384975
-Node: Nextfile Statement387365
-Node: Exit Statement389910
-Node: Built-in Variables392326
-Node: User-modified393421
-Ref: User-modified-Footnote-1401776
-Node: Auto-set401838
-Ref: Auto-set-Footnote-1411746
-Node: ARGC and ARGV411951
-Node: Arrays415802
-Node: Array Basics417307
-Node: Array Intro418133
-Node: Reference to Elements422451
-Node: Assigning Elements424721
-Node: Array Example425212
-Node: Scanning an Array426944
-Node: Controlling Scanning429258
-Ref: Controlling Scanning-Footnote-1434191
-Node: Delete434507
-Ref: Delete-Footnote-1436942
-Node: Numeric Array Subscripts436999
-Node: Uninitialized Subscripts439182
-Node: Multi-dimensional440810
-Node: Multi-scanning443904
-Node: Arrays of Arrays445495
-Node: Functions450140
-Node: Built-in450962
-Node: Calling Built-in452040
-Node: Numeric Functions454028
-Ref: Numeric Functions-Footnote-1457860
-Ref: Numeric Functions-Footnote-2458217
-Ref: Numeric Functions-Footnote-3458265
-Node: String Functions458534
-Ref: String Functions-Footnote-1482031
-Ref: String Functions-Footnote-2482160
-Ref: String Functions-Footnote-3482408
-Node: Gory Details482495
-Ref: table-sub-escapes484174
-Ref: table-sub-posix-92485531
-Ref: table-sub-proposed486877
-Ref: table-posix-sub488230
-Ref: table-gensub-escapes489779
-Ref: Gory Details-Footnote-1490989
-Ref: Gory Details-Footnote-2491040
-Node: I/O Functions491191
-Ref: I/O Functions-Footnote-1497846
-Node: Time Functions497993
-Ref: Time Functions-Footnote-1508885
-Ref: Time Functions-Footnote-2508953
-Ref: Time Functions-Footnote-3509111
-Ref: Time Functions-Footnote-4509222
-Ref: Time Functions-Footnote-5509334
-Ref: Time Functions-Footnote-6509561
-Node: Bitwise Functions509827
-Ref: table-bitwise-ops510385
-Ref: Bitwise Functions-Footnote-1514548
-Node: Type Functions514732
-Node: I18N Functions515202
-Node: User-defined516829
-Node: Definition Syntax517633
-Ref: Definition Syntax-Footnote-1522543
-Node: Function Example522612
-Node: Function Caveats525206
-Node: Calling A Function525627
-Node: Variable Scope526742
-Node: Pass By Value/Reference528717
-Node: Return Statement532157
-Node: Dynamic Typing535138
-Node: Indirect Calls535873
-Node: Internationalization545558
-Node: I18N and L10N546997
-Node: Explaining gettext547683
-Ref: Explaining gettext-Footnote-1552749
-Ref: Explaining gettext-Footnote-2552933
-Node: Programmer i18n553098
-Node: Translator i18n557298
-Node: String Extraction558091
-Ref: String Extraction-Footnote-1559052
-Node: Printf Ordering559138
-Ref: Printf Ordering-Footnote-1561922
-Node: I18N Portability561986
-Ref: I18N Portability-Footnote-1564435
-Node: I18N Example564498
-Ref: I18N Example-Footnote-1567133
-Node: Gawk I18N567205
-Node: Arbitrary Precision Arithmetic567822
-Ref: Arbitrary Precision Arithmetic-Footnote-1570697
-Node: Floating-point Programming570845
-Node: Floating-point Representation576115
-Node: Floating-point Context577219
-Ref: table-ieee-formats578054
-Node: Rounding Mode579426
-Ref: table-rounding-modes580053
-Ref: Rounding Mode-Footnote-1583178
-Node: Arbitrary Precision Floats583359
-Ref: Arbitrary Precision Floats-Footnote-1585400
-Node: Setting Precision585711
-Node: Setting Rounding Mode588469
-Node: Floating-point Constants589386
-Node: Changing Precision590805
-Ref: Changing Precision-Footnote-1592205
-Node: Exact Arithmetic592378
-Node: Integer Programming595391
-Node: Arbitrary Precision Integers597171
-Ref: Arbitrary Precision Integers-Footnote-1600195
-Node: MPFR and GMP Libraries600341
-Node: Advanced Features600726
-Node: Nondecimal Data602249
-Node: Array Sorting603832
-Node: Controlling Array Traversal604529
-Node: Array Sorting Functions612766
-Ref: Array Sorting Functions-Footnote-1616440
-Ref: Array Sorting Functions-Footnote-2616533
-Node: Two-way I/O616727
-Ref: Two-way I/O-Footnote-1622159
-Node: TCP/IP Networking622229
-Node: Profiling625073
-Node: Library Functions632527
-Ref: Library Functions-Footnote-1635534
-Node: Library Names635705
-Ref: Library Names-Footnote-1639176
-Ref: Library Names-Footnote-2639396
-Node: General Functions639482
-Node: Strtonum Function640435
-Node: Assert Function643365
-Node: Round Function646691
-Node: Cliff Random Function648234
-Node: Ordinal Functions649250
-Ref: Ordinal Functions-Footnote-1652320
-Ref: Ordinal Functions-Footnote-2652572
-Node: Join Function652781
-Ref: Join Function-Footnote-1654552
-Node: Getlocaltime Function654752
-Node: Data File Management658467
-Node: Filetrans Function659099
-Node: Rewind Function663238
-Node: File Checking664625
-Node: Empty Files665719
-Node: Ignoring Assigns667949
-Node: Getopt Function669502
-Ref: Getopt Function-Footnote-1680806
-Node: Passwd Functions681009
-Ref: Passwd Functions-Footnote-1689984
-Node: Group Functions690072
-Node: Walking Arrays698156
-Node: Sample Programs699725
-Node: Running Examples700390
-Node: Clones701118
-Node: Cut Program702342
-Node: Egrep Program712187
-Ref: Egrep Program-Footnote-1719960
-Node: Id Program720070
-Node: Split Program723686
-Ref: Split Program-Footnote-1727205
-Node: Tee Program727333
-Node: Uniq Program730136
-Node: Wc Program737565
-Ref: Wc Program-Footnote-1741831
-Ref: Wc Program-Footnote-2742031
-Node: Miscellaneous Programs742123
-Node: Dupword Program743311
-Node: Alarm Program745342
-Node: Translate Program750091
-Ref: Translate Program-Footnote-1754478
-Ref: Translate Program-Footnote-2754706
-Node: Labels Program754840
-Ref: Labels Program-Footnote-1758211
-Node: Word Sorting758295
-Node: History Sorting762179
-Node: Extract Program764018
-Ref: Extract Program-Footnote-1771501
-Node: Simple Sed771629
-Node: Igawk Program774691
-Ref: Igawk Program-Footnote-1789848
-Ref: Igawk Program-Footnote-2790049
-Node: Anagram Program790187
-Node: Signature Program793255
-Node: Debugger794355
-Node: Debugging795307
-Node: Debugging Concepts795740
-Node: Debugging Terms797596
-Node: Awk Debugging800193
-Node: Sample Debugging Session801085
-Node: Debugger Invocation801605
-Node: Finding The Bug802934
-Node: List of Debugger Commands809422
-Node: Breakpoint Control810756
-Node: Debugger Execution Control814420
-Node: Viewing And Changing Data817780
-Node: Execution Stack821136
-Node: Debugger Info822603
-Node: Miscellaneous Debugger Commands826584
-Node: Readline Support832029
-Node: Limitations832860
-Node: Language History835112
-Node: V7/SVR3.1836624
-Node: SVR4838945
-Node: POSIX840387
-Node: BTL841395
-Node: POSIX/GNU842129
-Node: Common Extensions847420
-Node: Ranges and Locales848527
-Ref: Ranges and Locales-Footnote-1853131
-Node: Contributors853352
-Node: Installation857613
-Node: Gawk Distribution858507
-Node: Getting858991
-Node: Extracting859817
-Node: Distribution contents861509
-Node: Unix Installation866731
-Node: Quick Installation867348
-Node: Additional Configuration Options869310
-Node: Configuration Philosophy870787
-Node: Non-Unix Installation873129
-Node: PC Installation873587
-Node: PC Binary Installation874886
-Node: PC Compiling876734
-Node: PC Testing879678
-Node: PC Using880854
-Node: Cygwin885039
-Node: MSYS886039
-Node: VMS Installation886553
-Node: VMS Compilation887156
-Ref: VMS Compilation-Footnote-1888163
-Node: VMS Installation Details888221
-Node: VMS Running889856
-Node: VMS Old Gawk891463
-Node: Bugs891937
-Node: Other Versions895789
-Node: Notes901104
-Node: Compatibility Mode901796
-Node: Additions902579
-Node: Accessing The Source903391
-Node: Adding Code904816
-Node: New Ports910783
-Node: Dynamic Extensions914896
-Node: Internals916336
-Node: Plugin License925158
-Node: Loading Extensions925796
-Node: Sample Library927637
-Node: Internal File Description928327
-Node: Internal File Ops932042
-Ref: Internal File Ops-Footnote-1936607
-Node: Using Internal File Ops936747
-Node: Future Extensions939125
-Node: Basic Concepts941629
-Node: Basic High Level942386
-Ref: Basic High Level-Footnote-1946421
-Node: Basic Data Typing946606
-Node: Floating Point Issues951131
-Node: String Conversion Precision952214
-Ref: String Conversion Precision-Footnote-1953914
-Node: Unexpected Results954023
-Node: POSIX Floating Point Problems955849
-Ref: POSIX Floating Point Problems-Footnote-1959554
-Node: Glossary959592
-Node: Copying984568
-Node: GNU Free Documentation License1022125
-Node: Index1047262
+Node: GNU Regexp Operators154484
+Node: Case-sensitivity158207
+Ref: Case-sensitivity-Footnote-1161175
+Ref: Case-sensitivity-Footnote-2161410
+Node: Leftmost Longest161518
+Node: Computed Regexps162719
+Node: Reading Files166129
+Node: Records168133
+Ref: Records-Footnote-1176807
+Node: Fields176844
+Ref: Fields-Footnote-1179877
+Node: Nonconstant Fields179963
+Node: Changing Fields182165
+Node: Field Separators188146
+Node: Default Field Splitting190775
+Node: Regexp Field Splitting191892
+Node: Single Character Fields195234
+Node: Command Line Field Separator196293
+Node: Field Splitting Summary199734
+Ref: Field Splitting Summary-Footnote-1202926
+Node: Constant Size203027
+Node: Splitting By Content207611
+Ref: Splitting By Content-Footnote-1211337
+Node: Multiple Line211377
+Ref: Multiple Line-Footnote-1217224
+Node: Getline217403
+Node: Plain Getline219619
+Node: Getline/Variable221708
+Node: Getline/File222849
+Node: Getline/Variable/File224171
+Ref: Getline/Variable/File-Footnote-1225770
+Node: Getline/Pipe225857
+Node: Getline/Variable/Pipe228417
+Node: Getline/Coprocess229524
+Node: Getline/Variable/Coprocess230767
+Node: Getline Notes231481
+Node: Getline Summary233423
+Ref: table-getline-variants233766
+Node: Read Timeout234622
+Ref: Read Timeout-Footnote-1238367
+Node: Command line directories238424
+Node: Printing239054
+Node: Print240685
+Node: Print Examples242022
+Node: Output Separators244806
+Node: OFMT246566
+Node: Printf247924
+Node: Basic Printf248830
+Node: Control Letters250369
+Node: Format Modifiers254181
+Node: Printf Examples260190
+Node: Redirection262905
+Node: Special Files269889
+Node: Special FD270422
+Ref: Special FD-Footnote-1274047
+Node: Special Network274121
+Node: Special Caveats274971
+Node: Close Files And Pipes275767
+Ref: Close Files And Pipes-Footnote-1282790
+Ref: Close Files And Pipes-Footnote-2282938
+Node: Expressions283088
+Node: Values284220
+Node: Constants284896
+Node: Scalar Constants285576
+Ref: Scalar Constants-Footnote-1286435
+Node: Nondecimal-numbers286617
+Node: Regexp Constants289676
+Node: Using Constant Regexps290151
+Node: Variables293206
+Node: Using Variables293861
+Node: Assignment Options295585
+Node: Conversion297457
+Ref: table-locale-affects302833
+Ref: Conversion-Footnote-1303457
+Node: All Operators303566
+Node: Arithmetic Ops304196
+Node: Concatenation306701
+Ref: Concatenation-Footnote-1309494
+Node: Assignment Ops309614
+Ref: table-assign-ops314602
+Node: Increment Ops316010
+Node: Truth Values and Conditions319480
+Node: Truth Values320563
+Node: Typing and Comparison321612
+Node: Variable Typing322401
+Ref: Variable Typing-Footnote-1326298
+Node: Comparison Operators326420
+Ref: table-relational-ops326830
+Node: POSIX String Comparison330379
+Ref: POSIX String Comparison-Footnote-1331335
+Node: Boolean Ops331473
+Ref: Boolean Ops-Footnote-1335551
+Node: Conditional Exp335642
+Node: Function Calls337374
+Node: Precedence340968
+Node: Locales344637
+Node: Patterns and Actions345726
+Node: Pattern Overview346780
+Node: Regexp Patterns348449
+Node: Expression Patterns348992
+Node: Ranges352677
+Node: BEGIN/END355643
+Node: Using BEGIN/END356405
+Ref: Using BEGIN/END-Footnote-1359136
+Node: I/O And BEGIN/END359242
+Node: BEGINFILE/ENDFILE361524
+Node: Empty364417
+Node: Using Shell Variables364733
+Node: Action Overview367018
+Node: Statements369375
+Node: If Statement371229
+Node: While Statement372728
+Node: Do Statement374772
+Node: For Statement375928
+Node: Switch Statement379080
+Node: Break Statement381177
+Node: Continue Statement383167
+Node: Next Statement384960
+Node: Nextfile Statement387350
+Node: Exit Statement389895
+Node: Built-in Variables392311
+Node: User-modified393406
+Ref: User-modified-Footnote-1401761
+Node: Auto-set401823
+Ref: Auto-set-Footnote-1411731
+Node: ARGC and ARGV411936
+Node: Arrays415787
+Node: Array Basics417292
+Node: Array Intro418118
+Node: Reference to Elements422436
+Node: Assigning Elements424706
+Node: Array Example425197
+Node: Scanning an Array426929
+Node: Controlling Scanning429243
+Ref: Controlling Scanning-Footnote-1434176
+Node: Delete434492
+Ref: Delete-Footnote-1436927
+Node: Numeric Array Subscripts436984
+Node: Uninitialized Subscripts439167
+Node: Multi-dimensional440795
+Node: Multi-scanning443889
+Node: Arrays of Arrays445480
+Node: Functions450125
+Node: Built-in450947
+Node: Calling Built-in452025
+Node: Numeric Functions454013
+Ref: Numeric Functions-Footnote-1457845
+Ref: Numeric Functions-Footnote-2458202
+Ref: Numeric Functions-Footnote-3458250
+Node: String Functions458519
+Ref: String Functions-Footnote-1482016
+Ref: String Functions-Footnote-2482145
+Ref: String Functions-Footnote-3482393
+Node: Gory Details482480
+Ref: table-sub-escapes484159
+Ref: table-sub-posix-92485513
+Ref: table-sub-proposed486856
+Ref: table-posix-sub488206
+Ref: table-gensub-escapes489752
+Ref: Gory Details-Footnote-1490959
+Ref: Gory Details-Footnote-2491010
+Node: I/O Functions491161
+Ref: I/O Functions-Footnote-1497816
+Node: Time Functions497963
+Ref: Time Functions-Footnote-1508855
+Ref: Time Functions-Footnote-2508923
+Ref: Time Functions-Footnote-3509081
+Ref: Time Functions-Footnote-4509192
+Ref: Time Functions-Footnote-5509304
+Ref: Time Functions-Footnote-6509531
+Node: Bitwise Functions509797
+Ref: table-bitwise-ops510355
+Ref: Bitwise Functions-Footnote-1514576
+Node: Type Functions514760
+Node: I18N Functions515230
+Node: User-defined516857
+Node: Definition Syntax517661
+Ref: Definition Syntax-Footnote-1522571
+Node: Function Example522640
+Node: Function Caveats525234
+Node: Calling A Function525655
+Node: Variable Scope526770
+Node: Pass By Value/Reference528745
+Node: Return Statement532185
+Node: Dynamic Typing535166
+Node: Indirect Calls535901
+Node: Internationalization545586
+Node: I18N and L10N547025
+Node: Explaining gettext547711
+Ref: Explaining gettext-Footnote-1552777
+Ref: Explaining gettext-Footnote-2552961
+Node: Programmer i18n553126
+Node: Translator i18n557326
+Node: String Extraction558119
+Ref: String Extraction-Footnote-1559080
+Node: Printf Ordering559166
+Ref: Printf Ordering-Footnote-1561950
+Node: I18N Portability562014
+Ref: I18N Portability-Footnote-1564463
+Node: I18N Example564526
+Ref: I18N Example-Footnote-1567161
+Node: Gawk I18N567233
+Node: Arbitrary Precision Arithmetic567850
+Ref: Arbitrary Precision Arithmetic-Footnote-1570725
+Node: Floating-point Programming570873
+Node: Floating-point Representation576143
+Node: Floating-point Context577247
+Ref: table-ieee-formats578082
+Node: Rounding Mode579452
+Ref: table-rounding-modes580079
+Ref: Rounding Mode-Footnote-1583202
+Node: Arbitrary Precision Floats583383
+Ref: Arbitrary Precision Floats-Footnote-1585424
+Node: Setting Precision585735
+Node: Setting Rounding Mode588493
+Node: Floating-point Constants589410
+Node: Changing Precision590829
+Ref: Changing Precision-Footnote-1592229
+Node: Exact Arithmetic592402
+Node: Integer Programming595415
+Node: Arbitrary Precision Integers597195
+Ref: Arbitrary Precision Integers-Footnote-1600219
+Node: MPFR and GMP Libraries600365
+Node: Advanced Features600750
+Node: Nondecimal Data602273
+Node: Array Sorting603856
+Node: Controlling Array Traversal604553
+Node: Array Sorting Functions612790
+Ref: Array Sorting Functions-Footnote-1616464
+Ref: Array Sorting Functions-Footnote-2616557
+Node: Two-way I/O616751
+Ref: Two-way I/O-Footnote-1622183
+Node: TCP/IP Networking622253
+Node: Profiling625097
+Node: Library Functions632551
+Ref: Library Functions-Footnote-1635558
+Node: Library Names635729
+Ref: Library Names-Footnote-1639200
+Ref: Library Names-Footnote-2639420
+Node: General Functions639506
+Node: Strtonum Function640459
+Node: Assert Function643389
+Node: Round Function646715
+Node: Cliff Random Function648258
+Node: Ordinal Functions649274
+Ref: Ordinal Functions-Footnote-1652344
+Ref: Ordinal Functions-Footnote-2652596
+Node: Join Function652805
+Ref: Join Function-Footnote-1654576
+Node: Getlocaltime Function654776
+Node: Data File Management658491
+Node: Filetrans Function659123
+Node: Rewind Function663262
+Node: File Checking664649
+Node: Empty Files665743
+Node: Ignoring Assigns667973
+Node: Getopt Function669526
+Ref: Getopt Function-Footnote-1680830
+Node: Passwd Functions681033
+Ref: Passwd Functions-Footnote-1690008
+Node: Group Functions690096
+Node: Walking Arrays698180
+Node: Sample Programs699749
+Node: Running Examples700414
+Node: Clones701142
+Node: Cut Program702366
+Node: Egrep Program712211
+Ref: Egrep Program-Footnote-1719984
+Node: Id Program720094
+Node: Split Program723710
+Ref: Split Program-Footnote-1727229
+Node: Tee Program727357
+Node: Uniq Program730160
+Node: Wc Program737589
+Ref: Wc Program-Footnote-1741855
+Ref: Wc Program-Footnote-2742055
+Node: Miscellaneous Programs742147
+Node: Dupword Program743335
+Node: Alarm Program745366
+Node: Translate Program750115
+Ref: Translate Program-Footnote-1754502
+Ref: Translate Program-Footnote-2754730
+Node: Labels Program754864
+Ref: Labels Program-Footnote-1758235
+Node: Word Sorting758319
+Node: History Sorting762203
+Node: Extract Program764042
+Ref: Extract Program-Footnote-1771525
+Node: Simple Sed771653
+Node: Igawk Program774715
+Ref: Igawk Program-Footnote-1789872
+Ref: Igawk Program-Footnote-2790073
+Node: Anagram Program790211
+Node: Signature Program793279
+Node: Debugger794379
+Node: Debugging795331
+Node: Debugging Concepts795764
+Node: Debugging Terms797620
+Node: Awk Debugging800217
+Node: Sample Debugging Session801109
+Node: Debugger Invocation801629
+Node: Finding The Bug802958
+Node: List of Debugger Commands809446
+Node: Breakpoint Control810780
+Node: Debugger Execution Control814444
+Node: Viewing And Changing Data817804
+Node: Execution Stack821160
+Node: Debugger Info822627
+Node: Miscellaneous Debugger Commands826608
+Node: Readline Support832053
+Node: Limitations832884
+Node: Language History835136
+Node: V7/SVR3.1836648
+Node: SVR4838969
+Node: POSIX840411
+Node: BTL841419
+Node: POSIX/GNU842153
+Node: Common Extensions847444
+Node: Ranges and Locales848551
+Ref: Ranges and Locales-Footnote-1853155
+Node: Contributors853376
+Node: Installation857637
+Node: Gawk Distribution858531
+Node: Getting859015
+Node: Extracting859841
+Node: Distribution contents861533
+Node: Unix Installation866755
+Node: Quick Installation867372
+Node: Additional Configuration Options869334
+Node: Configuration Philosophy870811
+Node: Non-Unix Installation873153
+Node: PC Installation873611
+Node: PC Binary Installation874910
+Node: PC Compiling876758
+Node: PC Testing879702
+Node: PC Using880878
+Node: Cygwin885063
+Node: MSYS886063
+Node: VMS Installation886577
+Node: VMS Compilation887180
+Ref: VMS Compilation-Footnote-1888187
+Node: VMS Installation Details888245
+Node: VMS Running889880
+Node: VMS Old Gawk891487
+Node: Bugs891961
+Node: Other Versions895813
+Node: Notes901128
+Node: Compatibility Mode901820
+Node: Additions902603
+Node: Accessing The Source903415
+Node: Adding Code904840
+Node: New Ports910807
+Node: Dynamic Extensions914920
+Node: Internals916360
+Node: Plugin License925182
+Node: Loading Extensions925820
+Node: Sample Library927661
+Node: Internal File Description928351
+Node: Internal File Ops932066
+Ref: Internal File Ops-Footnote-1936631
+Node: Using Internal File Ops936771
+Node: Future Extensions939149
+Node: Basic Concepts941653
+Node: Basic High Level942410
+Ref: Basic High Level-Footnote-1946445
+Node: Basic Data Typing946630
+Node: Floating Point Issues951155
+Node: String Conversion Precision952238
+Ref: String Conversion Precision-Footnote-1953938
+Node: Unexpected Results954047
+Node: POSIX Floating Point Problems955873
+Ref: POSIX Floating Point Problems-Footnote-1959578
+Node: Glossary959616
+Node: Copying984592
+Node: GNU Free Documentation License1022149
+Node: Index1047286

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index b8ce91a1..940dc783 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -16473,8 +16473,8 @@ bitwise operations just described. They are:
@cindex @command{gawk}, bitwise operations in
@table @code
@cindex @code{and()} function (@command{gawk})
-@item and(@var{v1}, @var{v2})
-Return the bitwise AND of the values provided by @var{v1} and @var{v2}.
+@item and(@var{v1}, @var{v2} @r{[}, @r{@dots{}]})
+Return the bitwise AND of the arguments. There must be at least two.
@cindex @code{compl()} function (@command{gawk})
@item compl(@var{val})
@@ -16485,16 +16485,16 @@ Return the bitwise complement of @var{val}.
Return the value of @var{val}, shifted left by @var{count} bits.
@cindex @code{or()} function (@command{gawk})
-@item or(@var{v1}, @var{v2})
-Return the bitwise OR of the values provided by @var{v1} and @var{v2}.
+@item or(@var{v1}, @var{v2} @r{[}, @r{@dots{}]})
+Return the bitwise OR of the arguments. There must be at least two.
@cindex @code{rshift()} function (@command{gawk})
@item rshift(@var{val}, @var{count})
Return the value of @var{val}, shifted right by @var{count} bits.
@cindex @code{xor()} function (@command{gawk})
-@item xor(@var{v1}, @var{v2})
-Return the bitwise XOR of the values provided by @var{v1} and @var{v2}.
+@item xor(@var{v1}, @var{v2} @r{[}, @r{@dots{}]})
+Return the bitwise XOR of the arguments. There must be at least two.
@end table
For all of these functions, first the double precision floating-point value is
@@ -27583,8 +27583,6 @@ This @value{CHAPTER} briefly describes the
evolution of the @command{awk} language, with cross-references to other parts
of the @value{DOCUMENT} where you can find more information.
-@c FIXME: Try to determine whether it was 3.1 or 3.2 that had new awk.
-
@menu
* V7/SVR3.1:: The major changes between V7 and System V
Release 3.1.
@@ -27999,6 +27997,7 @@ and
@code{xor()}
functions for bit manipulation
(@pxref{Bitwise Functions}).
+@c In 4.1, and(), or() and xor() grew the ability to take > 2 arguments
@item
The @code{asort()} and @code{asorti()} functions for sorting arrays