gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, extgawk, updated. 7d37bcd5a8066718b15de8


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, extgawk, updated. 7d37bcd5a8066718b15de8c03725708819389931
Date: Mon, 09 Jul 2012 18:17:45 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, extgawk has been updated
       via  7d37bcd5a8066718b15de8c03725708819389931 (commit)
       via  e1749c3c853ace06796efd7dd3bd3e9bf025a549 (commit)
      from  518bcc6e640648717bc5512d3fd5c2bf16d6fec3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=7d37bcd5a8066718b15de8c03725708819389931

commit 7d37bcd5a8066718b15de8c03725708819389931
Author: Arnold D. Robbins <address@hidden>
Date:   Mon Jul 9 21:17:10 2012 +0300

    API: Update set_array_element(). Adjust extensions.

diff --git a/ChangeLog b/ChangeLog
index e8d904e..861f410 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-07-08         Arnold D. Robbins     <address@hidden>
+
+       * gawkapi.h (set_array_element): Use index + value instead
+       of element structure. Matches get_array_element.
+       (set_array_element_by_elem): New macro to use an element.
+       * gawkapi.c (api_set_array_element): Make the necessary adjustments.
+
 2012-07-04         Arnold D. Robbins     <address@hidden>
 
        * awkgram.y (tokentab): Remove limit on number of arguments
diff --git a/extension/ChangeLog b/extension/ChangeLog
index a0cc713..4022458 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,13 @@
+2012-07-08         Arnold D. Robbins     <address@hidden>
+
+       * filefuncs.c (array_set): Adjust for change in set_array_element API.
+       * fork.c (array_set_numeric): Ditto.
+       * rwarray.c (read_array): Use set_array_element_by_elem.
+       (read_value): Add a cast to silence a compiler warning.
+       * testext.c (test_array_elem): Adjust for change in set_array_element
+       API.
+       (fill_in_array): Ditto. Change parameter name to new_array.
+
 2012-06-29         Arnold D. Robbins     <address@hidden>
 
        * ordchr.c (do_ord, do_chr): Improve argument checking and
diff --git a/extension/filefuncs.c b/extension/filefuncs.c
index d4e1b57..32a3cee 100644
--- a/extension/filefuncs.c
+++ b/extension/filefuncs.c
@@ -211,15 +211,12 @@ read_symlink(const char *fname, size_t bufsize, ssize_t 
*linksize)
 static void
 array_set(awk_array_t array, const char *sub, awk_value_t *value)
 {
-       awk_element_t element;
-       awk_value_t tmp;
-
-       memset(& element, 0, sizeof(element));
+       awk_value_t index;
 
-       element.index = *make_string(sub, strlen(sub), & tmp);
-       element.value = *value;
+       set_array_element(array,
+                       make_string(sub, strlen(sub), & index),
+                       value);
 
-       set_array_element(array, & element);
 }
 
 /* array_set_numeric --- set an array element with a number */
diff --git a/extension/fork.c b/extension/fork.c
index 58089d5..efad17e 100644
--- a/extension/fork.c
+++ b/extension/fork.c
@@ -50,15 +50,12 @@ int plugin_is_GPL_compatible;
 static void
 array_set_numeric(awk_array_t array, const char *sub, double num)
 {
-       awk_element_t element;
-       awk_value_t tmp;
+       awk_value_t index, value;
 
-       memset(& element, 0, sizeof(element));
+       set_array_element(array,
+               make_string(sub, strlen(sub), & index),
+               make_number(num, & value));
 
-       element.index = *make_string(sub, strlen(sub), & tmp);
-       make_number(num, &element.value);
-
-       set_array_element(array, & element);
 }
 
 /*  do_fork --- provide dynamically loaded fork() builtin for gawk */
diff --git a/extension/rwarray.c b/extension/rwarray.c
index e4ddde3..a63fa3d 100644
--- a/extension/rwarray.c
+++ b/extension/rwarray.c
@@ -344,7 +344,7 @@ read_array(int fd, awk_array_t array)
        for (i = 0; i < count; i++) {
                if (read_elem(fd, & new_elem)) {
                        /* add to array */
-                       if (! set_array_element(array, & new_elem)) {
+                       if (! set_array_element_by_elem(array, & new_elem)) {
                                printf("read_array: set_array_element 
failed\n");
                                return 0;
                        }
@@ -445,7 +445,7 @@ read_value(int fd, awk_value_t *value)
                value->str_value.str = malloc(len + 2);
                memset(value->str_value.str, '\0', len + 2);
 
-               if (read(fd, value->str_value.str, len) != len) {
+               if (read(fd, value->str_value.str, len) != (ssize_t) len) {
                        free(value->str_value.str);
                        return 0;
                }
diff --git a/extension/testext.c b/extension/testext.c
index e3975b2..e54055c 100644
--- a/extension/testext.c
+++ b/extension/testext.c
@@ -335,9 +335,7 @@ static awk_value_t *
 test_array_elem(int nargs, awk_value_t *result)
 {
        awk_value_t array, index, value;
-       awk_element_t element;
 
-       memset(& element, 0, sizeof(element));
        make_number(0.0, result);       /* default return until full success */
 
        assert(result != NULL);
@@ -366,9 +364,8 @@ test_array_elem(int nargs, awk_value_t *result)
                        valrep2str(& value));
 
        /* change the element - "3" */
-       element.index = index;
-       (void) make_number(42.0, & element.value);
-       if (! set_array_element(array.array_cookie, & element)) {
+       (void) make_number(42.0, & value);
+       if (! set_array_element(array.array_cookie, & index, & value)) {
                printf("test_array_elem: set_array_element failed\n");
                goto out;
        }
@@ -382,18 +379,16 @@ test_array_elem(int nargs, awk_value_t *result)
 
        /* add a new element - "7" */
        (void) make_string("7", 1, & index);
-       element.index = index;
-       (void) make_string("seven", 5, & element.value);
-       if (! set_array_element(array.array_cookie, & element)) {
+       (void) make_string("seven", 5, & value);
+       if (! set_array_element(array.array_cookie, & index, & value)) {
                printf("test_array_elem: set_array_element failed\n");
                goto out;
        }
 
        /* add a subarray */
        (void) make_string("subarray", 8, & index);
-       element.index = index;
-       fill_in_array(& element.value);
-       if (! set_array_element(array.array_cookie, & element)) {
+       fill_in_array(& value);
+       if (! set_array_element(array.array_cookie, & index, & value)) {
                printf("test_array_elem: set_array_element (subarray) 
failed\n");
                goto out;
        }
@@ -486,33 +481,29 @@ out:
 /* fill_in_array --- fill in a new array */
 
 static void
-fill_in_array(awk_value_t *value)
+fill_in_array(awk_value_t *new_array)
 {
-       awk_element_t element;
        awk_array_t a_cookie;
-       awk_value_t index;
+       awk_value_t index, value;
 
        a_cookie = create_array();
 
        (void) make_string("hello", 5, & index);
-       element.index = index;
-       (void) make_string("world", 5, & element.value);
-       if (! set_array_element(a_cookie, & element)) {
+       (void) make_string("world", 5, & value);
+       if (! set_array_element(a_cookie, & index, & value)) {
                printf("fill_in_array:%d: set_array_element failed\n", 
__LINE__);
                return;
        }
 
        (void) make_string("answer", 6, & index);
-       element.index = index;
-       (void) make_number(42.0, & element.value);
-       if (! set_array_element(a_cookie, & element)) {
+       (void) make_number(42.0, & value);
+       if (! set_array_element(a_cookie, & index, & value)) {
                printf("fill_in_array:%d: set_array_element failed\n", 
__LINE__);
                return;
        }
 
-       value->val_type = AWK_ARRAY;
-       value->array_cookie = a_cookie;
-
+       new_array->val_type = AWK_ARRAY;
+       new_array->array_cookie = a_cookie;
 }
 
 /* create_new_array --- create a named array */
diff --git a/gawkapi.c b/gawkapi.c
index 0a00be6..ad82f6f 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -524,7 +524,8 @@ api_get_array_element(awk_ext_id_t id,
  */
 static awk_bool_t
 api_set_array_element(awk_ext_id_t id, awk_array_t a_cookie,
-                               awk_element_t *element)
+                                       const awk_value_t *const index,
+                                       const awk_value_t *const value)
 {
        NODE *array = (NODE *)a_cookie;
        NODE *tmp;
@@ -534,20 +535,20 @@ api_set_array_element(awk_ext_id_t id, awk_array_t 
a_cookie,
        /* don't check for index len zero, null str is ok as index */
        if (   array == NULL
            || array->type != Node_var_array
-           || element == NULL
-           || element->index.str_value.str == NULL)
+           || index == NULL
+           || value == NULL
+           || index->str_value.str == NULL)
                return false;
 
-       tmp = make_string(element->index.str_value.str,
-                       element->index.str_value.len);
+       tmp = make_string(index->str_value.str, index->str_value.len);
        aptr = assoc_lookup(array, tmp);
        unref(tmp);
        unref(*aptr);
-       elem = *aptr = awk_value_to_node(& element->value);
+       elem = *aptr = awk_value_to_node(value);
        if (elem->type == Node_var_array) {
                elem->parent_array = array;
-               elem->vname = estrdup(element->index.str_value.str,
-                                       element->index.str_value.len);
+               elem->vname = estrdup(index->str_value.str,
+                                       index->str_value.len);
                make_aname(elem);
        }
 
diff --git a/gawkapi.h b/gawkapi.h
index 10f1e0c..5be5ea0 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -316,7 +316,8 @@ typedef struct gawk_api {
         * element->index and element->value.
         */
        awk_bool_t (*set_array_element)(awk_ext_id_t id, awk_array_t a_cookie,
-                                       awk_element_t *element);
+                                       const awk_value_t *const index,
+                                       const awk_value_t *const value);
 
        /*
         * Remove the element with the given index.
@@ -391,8 +392,11 @@ typedef struct gawk_api {
 #define get_array_element(array, index, wanted, result) \
        (api->get_array_element(ext_id, array, index, wanted, result))
 
-#define set_array_element(array, element) \
-       (api->set_array_element(ext_id, array, element))
+#define set_array_element(array, index, value) \
+       (api->set_array_element(ext_id, array, index, value))
+
+#define set_array_element_by_elem(array, elem) \
+       (set_array_element(array, & (elem)->index, & (elem)->value))
 
 #define del_array_element(array, index) \
        (api->del_array_element(ext_id, array, index))

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=e1749c3c853ace06796efd7dd3bd3e9bf025a549

commit e1749c3c853ace06796efd7dd3bd3e9bf025a549
Author: Arnold D. Robbins <address@hidden>
Date:   Mon Jul 9 21:11:54 2012 +0300

    Extend or(), and(), xor() to N arguments, N >= 2.

diff --git a/ChangeLog b/ChangeLog
index f6086c6..e8d904e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-07-04         Arnold D. Robbins     <address@hidden>
+
+       * 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     <address@hidden>
 
        * gawkapi.h: Improve the documentation of the return values
diff --git a/awkgram.c b/awkgram.c
index 104c554..5d3cd6c 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 eed0693..ad2fb35 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 87b596e..3576372 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 421be54..1628e79 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-04         Arnold D. Robbins     <address@hidden>
+
+       * 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     <address@hidden>
 
        * gawk.texi: Rename gettimeofday function to getlocaltime, since
diff --git a/doc/awkcard.in b/doc/awkcard.in
index b7d8769..d0c1578 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 a2cfab6..4a19219 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 8c93984..57c5ec2 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 b8ce91a..940dc78 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})
address@hidden and(@var{v1}, @var{v2})
-Return the bitwise AND of the values provided by @var{v1} and @var{v2}.
address@hidden and(@var{v1}, @var{v2} @r{[}, @address@hidden)
+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})
address@hidden or(@var{v1}, @var{v2})
-Return the bitwise OR of the values provided by @var{v1} and @var{v2}.
address@hidden or(@var{v1}, @var{v2} @r{[}, @address@hidden)
+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})
address@hidden xor(@var{v1}, @var{v2})
-Return the bitwise XOR of the values provided by @var{v1} and @var{v2}.
address@hidden xor(@var{v1}, @var{v2} @r{[}, @address@hidden)
+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.
 
address@hidden 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}).
address@hidden 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

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog             |   15 +
 awkgram.c             |    6 +-
 awkgram.y             |    6 +-
 builtin.c             |  131 ++++----
 doc/ChangeLog         |    5 +
 doc/awkcard.in        |   15 +-
 doc/gawk.1            |   24 +-
 doc/gawk.info         |  825 +++++++++++++++++++++++++------------------------
 doc/gawk.texi         |   15 +-
 extension/ChangeLog   |   10 +
 extension/filefuncs.c |   11 +-
 extension/fork.c      |   11 +-
 extension/rwarray.c   |    4 +-
 extension/testext.c   |   37 +--
 gawkapi.c             |   17 +-
 gawkapi.h             |   10 +-
 16 files changed, 573 insertions(+), 569 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]