gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, gawk_performance, updated. 0b11e4c50a7f5


From: John Haque
Subject: [gawk-diffs] [SCM] gawk branch, gawk_performance, updated. 0b11e4c50a7f583300ec92fca2d6c4f54df5d30b
Date: Wed, 31 Aug 2011 13:02:57 +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, gawk_performance has been updated
       via  0b11e4c50a7f583300ec92fca2d6c4f54df5d30b (commit)
      from  15010185527cdfbbe1adedcb1551ba7a84156aa5 (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=0b11e4c50a7f583300ec92fca2d6c4f54df5d30b

commit 0b11e4c50a7f583300ec92fca2d6c4f54df5d30b
Author: john haque <address@hidden>
Date:   Wed Aug 31 07:49:14 2011 -0500

    ChangeLog entry, minor cleanups, and doc update.

diff --git a/ChangeLog b/ChangeLog
index bf0f749..24013e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,100 @@
+2011-08-31         John Haque     <address@hidden>
+
+       Grammar related changes: Simplify grammar for user-defined
+       functions and general cleanups.
+
+       * symbol.c: New file.
+       * awkgram.y: Move symbol table related routines to the
+       new file.
+       (rule, func_name, function_prologue, param_list): Reworked.
+       (install_function, check_params): Do all error checkings
+       for the function name and parameters before installing in
+       the symbol table.
+       (mk_function): Finalize function definition.
+       (func_install, append_param, dup_params): Nuked.
+       * symbol.c (make_params): allocate function parameter nodes
+       for the symbol table. Use the hash node as Node_param_list;
+       Saves a NODE for each parameter.
+       (install_params): Install function parameters into the symbol
+       table.
+       (remove_params): Remove parameters out of the symbol table.
+       * awk.h (parmlist, FUNC): Nuked.
+       (fparms): New define.
+
+
+       Dynamically loaded function parameters are now handled like
+       those for a builtin.
+
+       * awk.h (Node_ext_func, Op_ext_builtin): New types.
+       (Op_ext_func): Nuked.
+       * ext.c (make_builtin): Simplified.
+       (get_curfunc_arg_count): Nuked; Use the argument 'nargs' of
+       the extension function instead.
+       (get_argument, get_actual_argument): Adjust.
+       * eval.c (r_interpret): Update case Op_func_call for a dynamic
+       extension function. Handle the new opcode Op_ext_builtin.
+       * pprint (profile.c): Adjust.
+
+
+       Use a single variable to process gawk options.
+
+       * awk.h (do_flags): New variable.
+       (DO_LINT_INVALID, DO_LINT_ALL, DO_LINT_OLD, DO_TRADITIONAL,
+       DO_POSIX, DO_INTL, DO_NON_DEC_DATA, DO_INTERVALS,
+       DO_PROFILING, DO_DUMP_VARS, DO_TIDY_MEM,
+       DO_SANDBOX): New defines.
+       (do_traditional, do_posix, do_intervals, do_intl,
+       do_non_decimal_data, do_profiling, do_dump_vars,
+       do_tidy_mem, do_sandbox, do_lint,
+       do_lint_old): Defined as macros.        
+       * main.c: Remove definitions of the do_XX variables. Add
+       do_flags definition.
+       * debug.c (execute_code, do_eval, parse_condition): Save
+       do_flags before executing/parsing and restore afterwards.
+
+
+       Nuke PERM flag. Always increment/decrement the reference
+       count for a Node_val. Simplifies macros and avoids
+       occassional memory leaks, specially in the debugger.
+
+       * awk.h (UPREF, DEREF, dupnode, unref): Simplified.
+       (mk_number): Nuked.
+       * (*.c): Increment the reference count of Nnull_string before
+       assigning as a value.
+
+
+       Revamped array handling mechanism for more speed and
+       less memory consumption.
+
+       * awk.h (union bucket_item, BUCKET): New definitions. Used as
+       bucket elements for the hash table implementations of arrays;
+       40% space saving in 32 bit x86.
+       (buckets, nodes, array_funcs, array_base, array_capacity,
+       xarray, alookup, aexists, aclear, aremove, alist,
+       acopy, adump, NUM_AFUNCS): New defines.
+       (array_empty): New macro to test for an empty array.
+       (assoc_lookup, in_array): Defined as macros.
+       (enum assoc_list_flags): New declaration.
+       (Node_ahash, NUMIND): Nuked.
+       * eval.c (r_interpret): Adjust cases Op_subscript,
+       Op_subscript_lhs, Op_store_var and Op_arrayfor_incr.
+       * node.c (dupnode, unref): Removed code related to Node_ahash. 
+       * str_array.c: New file to handle array with string indices.
+       * int_array.c: New file to handle array with integer indices.
+       * cint_array.c: New file. Special handling of arrays with
+       (mostly) consecutive integer indices.
+
+
+       Memory pool management reworked to handle NODE and BUCKET.
+
+       * awk.h (struct block_item, BLOCK, block_id): New definitions.
+       (getblock, freeblock): New macros.
+       (getbucket, freebucket): New macros to allocate and deallocate
+       a BUCKET.
+       (getnode, freenode): Adjusted.
+       * node.c (more_nodes): Nuked.
+       (more_blocks): New routine to allocate blocks of memory.
+
 2011-06-24         Arnold D. Robbins     <address@hidden>
 
        * Makefile.am (EXTRA_DIST): Add ChangeLog.0.
diff --git a/array.c b/array.c
index 4806686..436002a 100644
--- a/array.c
+++ b/array.c
@@ -48,6 +48,8 @@ static array_ptr *atypes[MAX_ATYPE];
 static int num_atypes = 0;
 
 /*
+ * register_array_func --- add routines to handle arrays.
+ *
  *     index 0 : initialization.
  *     index 1 : check if index is compatible.
  *     index 8 : array dump, memory and other statistics (do_adump).
@@ -68,6 +70,7 @@ register_array_func(array_ptr *afunc)
        return FALSE;
 }
 
+
 /* array_init --- register all builtin array types */
 
 void
@@ -78,6 +81,7 @@ array_init()
        (void) register_array_func(cint_array_func);
 }
 
+
 /* make_array --- create an array node */
 
 NODE *
@@ -437,7 +441,7 @@ concat_exp(int nargs, int do_subsep)
                DEREF(r);
        }
 
-       return make_str_node(str, len);
+       return make_str_node(str, len, ALREADY_MALLOCED);
 }
 
 
diff --git a/awk.h b/awk.h
index 985e1c0..f5e1325 100644
--- a/awk.h
+++ b/awk.h
@@ -1155,8 +1155,11 @@ extern STACK_ITEM *stack_top;
 #define getbucket(b)   getblock(b, BLOCK_BUCKET, BUCKET *)
 #define freebucket(b)  freeblock(b, BLOCK_BUCKET)
 
-#define        make_string(s, l)       r_make_str_node((s), (size_t) (l), 
FALSE)
-#define make_str_node(s, l)    r_make_str_node((s), (size_t) (l), TRUE)
+#define        make_string(s, l)       r_make_str_node((s), (l), 0)
+#define make_str_node(s, l, f) r_make_str_node((s), (l), (f))
+
+#define                SCAN                    1
+#define                ALREADY_MALLOCED        2
 
 #define        cant_happen()   r_fatal("internal error line %d, file: %s", \
                                __LINE__, __FILE__)
@@ -1253,6 +1256,7 @@ extern NODE *get_array(NODE *symbol, int canfatal);
 extern const char *make_aname(const NODE *symbol);
 extern const char *array_vname(const NODE *symbol);
 extern void array_init(void);
+extern int register_array_func(array_ptr *afunc);
 extern void set_SUBSEP(void);
 extern NODE *concat_exp(int nargs, int do_subsep);
 extern void assoc_clear(NODE *symbol);
@@ -1457,11 +1461,10 @@ extern AWKNUM r_force_number(NODE *n);
 extern NODE *format_val(const char *format, int index, NODE *s);
 extern NODE *r_dupnode(NODE *n);
 extern NODE *make_number(AWKNUM x);
-extern NODE *r_make_str_node(const char *s, size_t len, int already_malloced);
+extern NODE *r_make_str_node(const char *s, size_t len, int flags);
 extern void *more_blocks(int id);
 extern void r_unref(NODE *tmp);
 extern int parse_escape(const char **string_ptr);
-extern size_t scan_escape(char *s, size_t len);
 
 #ifdef MBS_SUPPORT
 extern NODE *str2wstr(NODE *n, size_t **ptr);
diff --git a/awkgram.c b/awkgram.c
index efc0739..d6474f2 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -2330,7 +2330,7 @@ yyreduce:
                                        _("regexp constant `/%s/' looks like a 
C comment, but is not"), re);
                  }
 
-                 exp = make_str_node(re, len);
+                 exp = make_str_node(re, len, ALREADY_MALLOCED);
                  n = make_regnode(Node_regex, exp);
                  if (n == NULL) {
                        unref(exp);
@@ -5439,7 +5439,6 @@ yylex(void)
        int mid;
        static int did_newline = FALSE;
        char *tokkey;
-       size_t toklen;
        int inhex = FALSE;
        int intlstr = FALSE;
        AWKNUM d;
@@ -5874,16 +5873,14 @@ retry:
                        tokadd(c);
                }
                yylval = GET_INSTRUCTION(Op_token);
-               toklen = tok - tokstart;
                if (want_source) {
-                       yylval->lextok = estrdup(tokstart, toklen);
+                       yylval->lextok = estrdup(tokstart, tok - tokstart);
                        return lasttok = FILENAME;
                }
                
                yylval->opcode = Op_push_i;
-               if (esc_seen)
-                       toklen = scan_escape(tokstart, toklen);
-               yylval->memory = make_string(tokstart, toklen);
+               yylval->memory = make_str_node(tokstart,
+                                       tok - tokstart, esc_seen ? SCAN : 0);
                if (intlstr) {
                        yylval->memory->flags |= INTLSTR;
                        intlstr = FALSE;
diff --git a/awkgram.y b/awkgram.y
index 36bf3f9..b606453 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -392,7 +392,7 @@ regexp
                                        _("regexp constant `/%s/' looks like a 
C comment, but is not"), re);
                  }
 
-                 exp = make_str_node(re, len);
+                 exp = make_str_node(re, len, ALREADY_MALLOCED);
                  n = make_regnode(Node_regex, exp);
                  if (n == NULL) {
                        unref(exp);
@@ -2742,7 +2742,6 @@ yylex(void)
        int mid;
        static int did_newline = FALSE;
        char *tokkey;
-       size_t toklen;
        int inhex = FALSE;
        int intlstr = FALSE;
        AWKNUM d;
@@ -3177,16 +3176,14 @@ retry:
                        tokadd(c);
                }
                yylval = GET_INSTRUCTION(Op_token);
-               toklen = tok - tokstart;
                if (want_source) {
-                       yylval->lextok = estrdup(tokstart, toklen);
+                       yylval->lextok = estrdup(tokstart, tok - tokstart);
                        return lasttok = FILENAME;
                }
                
                yylval->opcode = Op_push_i;
-               if (esc_seen)
-                       toklen = scan_escape(tokstart, toklen);
-               yylval->memory = make_string(tokstart, toklen);
+               yylval->memory = make_str_node(tokstart,
+                                       tok - tokstart, esc_seen ? SCAN : 0);
                if (intlstr) {
                        yylval->memory->flags |= INTLSTR;
                        intlstr = FALSE;
diff --git a/builtin.c b/builtin.c
index 6ed7abd..92b211f 100644
--- a/builtin.c
+++ b/builtin.c
@@ -1349,7 +1349,7 @@ out2:
                        _("too many arguments supplied for format string"));
        }
        bchunk(s0, s1 - s0);
-       r = make_str_node(obuf, obufout - obuf);
+       r = make_str_node(obuf, obufout - obuf, ALREADY_MALLOCED);
        obuf = NULL;
 out:
        {
@@ -1613,7 +1613,7 @@ do_substr(int nargs)
                        wp++;
                }
                *cp = '\0';
-               r = make_str_node(substr, cp - substr);
+               r = make_str_node(substr, cp - substr, ALREADY_MALLOCED);
        }
 #else
        r = make_string(t1->stptr + indx, length);
@@ -2642,7 +2642,7 @@ sub_common(int nargs, long how_many, int backdigs)
        if (lhs != NULL) {
                if (matches > 0) {
                        unref(*lhs);
-                       *lhs = make_str_node(buf, textlen);     
+                       *lhs = make_str_node(buf, textlen, ALREADY_MALLOCED);   
                } else
                        efree(buf);
        } else {
diff --git a/command.c b/command.c
index b705d5e..c3fea2b 100644
--- a/command.c
+++ b/command.c
@@ -3177,6 +3177,7 @@ again:
 
        if (c == '"') {
                char *str, *p;
+               int flags = ALREADY_MALLOCED;
                int esc_seen = FALSE;
 
                toklen = lexend - lexptr;
@@ -3209,12 +3210,10 @@ err:
                        append_cmdarg(yylval);
                        return D_STRING;
                } else {        /* awk string */
-                       size_t len;
-                       len = p - str;
                        if (esc_seen)
-                               len = scan_escape(str, len);
+                               flags |= SCAN;
                        yylval = mk_cmdarg(D_node);
-                       yylval->a_node = make_str_node(str, len);
+                       yylval->a_node = make_str_node(str, p - str, flags);
                        append_cmdarg(yylval);
                        return D_NODE;
                }
@@ -3364,7 +3363,7 @@ concat_args(CMDARG *arg, int count)
        }
        str[len] = '\0';
        efree(tmp);
-       return make_str_node(str, len);
+       return make_str_node(str, len, ALREADY_MALLOCED);
 }
 
 /* find_command --- find the index in 'cmdtab' using exact,
diff --git a/command.y b/command.y
index d2a61a0..18ef061 100644
--- a/command.y
+++ b/command.y
@@ -1163,6 +1163,7 @@ again:
 
        if (c == '"') {
                char *str, *p;
+               int flags = ALREADY_MALLOCED;
                int esc_seen = FALSE;
 
                toklen = lexend - lexptr;
@@ -1195,12 +1196,10 @@ err:
                        append_cmdarg(yylval);
                        return D_STRING;
                } else {        /* awk string */
-                       size_t len;
-                       len = p - str;
                        if (esc_seen)
-                               len = scan_escape(str, len);
+                               flags |= SCAN;
                        yylval = mk_cmdarg(D_node);
-                       yylval->a_node = make_str_node(str, len);
+                       yylval->a_node = make_str_node(str, p - str, flags);
                        append_cmdarg(yylval);
                        return D_NODE;
                }
@@ -1350,7 +1349,7 @@ concat_args(CMDARG *arg, int count)
        }
        str[len] = '\0';
        efree(tmp);
-       return make_str_node(str, len);
+       return make_str_node(str, len, ALREADY_MALLOCED);
 }
 
 /* find_command --- find the index in 'cmdtab' using exact,
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 2ae225b..0632fd3 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,6 @@
+2011-08-31         John Haque     <address@hidden>
+       * gawk.texi: Updated gawk dynamic extension doc.
+
 2011-06-24         Arnold D. Robbins     <address@hidden>
 
        * Makefile.am (EXTRA_DIST): Add ChangeLog.0.
diff --git a/doc/gawk.info b/doc/gawk.info
index 3dd9d73..67268f6 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -1,4 +1,4 @@
-This is gawk.info, produced by makeinfo version 4.13 from gawk.texi.
+This is gawk.info, produced by makeinfo version 4.8 from gawk.texi.
 
 INFO-DIR-SECTION Text creation and manipulation
 START-INFO-DIR-ENTRY
@@ -780,7 +780,7 @@ A Rose by Any Other Name
 ========================
 
 The `awk' language has evolved over the years. Full details are
-provided in *note Language History::.  The language described in this
+provided in *Note Language History::.  The language described in this
 Info file is often referred to as "new `awk'" (`nawk').
 
    Because of this, there are systems with multiple versions of `awk'.
@@ -841,78 +841,78 @@ illustrates the concept currently being described.
    While this Info file is aimed principally at people who have not been
 exposed to `awk', there is a lot of information here that even the `awk'
 expert should find useful.  In particular, the description of POSIX
-`awk' and the example programs in *note Library Functions::, and in
-*note Sample Programs::, should be of interest.
+`awk' and the example programs in *Note Library Functions::, and in
+*Note Sample Programs::, should be of interest.
 
-   *note Getting Started::, provides the essentials you need to know to
+   *Note Getting Started::, provides the essentials you need to know to
 begin using `awk'.
 
-   *note Invoking Gawk::, describes how to run `gawk', the meaning of
+   *Note Invoking Gawk::, describes how to run `gawk', the meaning of
 its command-line options, and how it finds `awk' program source files.
 
-   *note Regexp::, introduces regular expressions in general, and in
+   *Note Regexp::, introduces regular expressions in general, and in
 particular the flavors supported by POSIX `awk' and `gawk'.
 
-   *note Reading Files::, describes how `awk' reads your data.  It
+   *Note Reading Files::, describes how `awk' reads your data.  It
 introduces the concepts of records and fields, as well as the `getline'
 command.  I/O redirection is first described here.  Network I/O is also
 briefly introduced here.
 
-   *note Printing::, describes how `awk' programs can produce output
+   *Note Printing::, describes how `awk' programs can produce output
 with `print' and `printf'.
 
-   *note Expressions::, describes expressions, which are the basic
+   *Note Expressions::, describes expressions, which are the basic
 building blocks for getting most things done in a program.
 
-   *note Patterns and Actions::, describes how to write patterns for
+   *Note Patterns and Actions::, describes how to write patterns for
 matching records, actions for doing something when a record is matched,
 and the built-in variables `awk' and `gawk' use.
 
-   *note Arrays::, covers `awk''s one-and-only data structure:
+   *Note Arrays::, covers `awk''s one-and-only data structure:
 associative arrays.  Deleting array elements and whole arrays is also
 described, as well as sorting arrays in `gawk'.  It also describes how
 `gawk' provides arrays of arrays.
 
-   *note Functions::, describes the built-in functions `awk' and `gawk'
+   *Note Functions::, describes the built-in functions `awk' and `gawk'
 provide, as well as how to define your own functions.
 
-   *note Internationalization::, describes special features in `gawk'
+   *Note Internationalization::, describes special features in `gawk'
 for translating program messages into different languages at runtime.
 
-   *note Advanced Features::, describes a number of `gawk'-specific
+   *Note Advanced Features::, describes a number of `gawk'-specific
 advanced features.  Of particular note are the abilities to have
 two-way communications with another process, perform TCP/IP networking,
 and profile your `awk' programs.
 
-   *note Library Functions::, and *note Sample Programs::, provide many
+   *Note Library Functions::, and *Note Sample Programs::, provide many
 sample `awk' programs.  Reading them allows you to see `awk' solving
 real problems.
 
-   *note Debugger::, describes the `awk' debugger, `dgawk'.
+   *Note Debugger::, describes the `awk' debugger, `dgawk'.
 
-   *note Language History::, describes how the `awk' language has
+   *Note Language History::, describes how the `awk' language has
 evolved since its first release to present.  It also describes how
 `gawk' has acquired features over time.
 
-   *note Installation::, describes how to get `gawk', how to compile it
+   *Note Installation::, describes how to get `gawk', how to compile it
 on POSIX-compatible systems, and how to compile and use it on different
 non-POSIX systems.  It also describes how to report bugs in `gawk' and
 where to get other freely available `awk' implementations.
 
-   *note Notes::, describes how to disable `gawk''s extensions, as well
+   *Note Notes::, describes how to disable `gawk''s extensions, as well
 as how to contribute new code to `gawk', how to write extension
 libraries, and some possible future directions for `gawk' development.
 
-   *note Basic Concepts::, provides some very cursory background
+   *Note Basic Concepts::, provides some very cursory background
 material for those who are completely unfamiliar with computer
 programming.  Also centralized there is a discussion of some of the
 issues surrounding floating-point numbers.
 
-   The *note Glossary::, defines most, if not all, the significant
+   The *Note Glossary::, defines most, if not all, the significant
 terms used throughout the book.  If you find terms that you aren't
 familiar with, try looking them up here.
 
-   *note Copying::, and *note GNU Free Documentation License::, present
+   *Note Copying::, and *Note GNU Free Documentation License::, present
 the licenses that cover the `gawk' source code and this Info file,
 respectively.
 
@@ -1028,7 +1028,7 @@ Guide'.
    This edition maintains the basic structure of the previous editions.
 For Edition 4.0, the content has been thoroughly reviewed and updated.
 All references to versions prior to 4.0 have been removed.  Of
-significant note for this edition is *note Debugger::.
+significant note for this edition is *Note Debugger::.
 
    `GAWK: Effective AWK Programming' will undoubtedly continue to
 evolve.  An electronic version comes with the `gawk' distribution from
@@ -1040,7 +1040,7 @@ electronically.
 
    (1) GNU stands for "GNU's not Unix."
 
-   (2) The terminology "GNU/Linux" is explained in the *note Glossary::.
+   (2) The terminology "GNU/Linux" is explained in the *Note Glossary::.
 
 
 File: gawk.info,  Node: How To Contribute,  Next: Acknowledgments,  Prev: 
Manual History,  Up: Preface
@@ -1142,7 +1142,7 @@ this team of fine people.
 byte-code interpreter, including the debugger. Stephen Davies
 contributed to the effort to bring the byte-code changes into the
 mainstream code base.  Efraim Yawitz contributed the initial text of
-*note Debugger::.
+*Note Debugger::.
 
    I would like to thank Brian Kernighan for invaluable assistance
 during the testing and debugging of `gawk', and for ongoing help and
@@ -1276,7 +1276,7 @@ programs from shell scripts, because it avoids the need 
for a separate
 file for the `awk' program.  A self-contained shell script is more
 reliable because there are no other files to misplace.
 
-   *note Very Simple::, presents several short, self-contained programs.
+   *Note Very Simple::, presents several short, self-contained programs.
 
 
 File: gawk.info,  Node: Read Terminal,  Next: Long,  Prev: One-shot,  Up: 
Running gawk
@@ -1461,7 +1461,7 @@ programs, but this usually isn't very useful; the purpose 
of a comment
 is to help you or another person understand the program when reading it
 at a later time.
 
-     CAUTION: As mentioned in *note One-shot::, you can enclose small
+     CAUTION: As mentioned in *Note One-shot::, you can enclose small
      to medium programs in single quotes, in order to keep your shell
      scripts self-contained.  When doing so, _don't_ put an apostrophe
      (i.e., a single quote) into a comment (or anywhere else in your
@@ -1523,7 +1523,7 @@ Shell).  If you use the C shell, you're on your own.
      quotes.  The shell does no interpretation of the quoted text,
      passing it on verbatim to the command.  It is _impossible_ to
      embed a single quote inside single-quoted text.  Refer back to
-     *note Comments::, for an example of what happens if you try.
+     *Note Comments::, for an example of what happens if you try.
 
    * Double quotes protect most things between the opening and closing
      quotes.  The shell does at least variable and command substitution
@@ -1535,7 +1535,7 @@ Shell).  If you use the C shell, you're on your own.
      the characters `$', ``', `\', and `"', all of which must be
      preceded by a backslash within double-quoted text if they are to
      be passed on literally to the program.  (The leading backslash is
-     stripped first.)  Thus, the example seen in *note Read Terminal::,
+     stripped first.)  Thus, the example seen in *Note Read Terminal::,
      is applicable:
 
           $ awk "BEGIN { print \"Don't Panic!\" }"
@@ -1690,7 +1690,7 @@ Miscellaneous File Operations: (emacs)Misc File Ops, for 
more
 information).  Using this information, create your own `BBS-list' and
 `inventory-shipped' files and practice what you learn in this Info file.
 
-   If you are using the stand-alone version of Info, see *note Extract
+   If you are using the stand-alone version of Info, see *Note Extract
 Program::, for an `awk' program that extracts these data files from
 `gawk.texi', the Texinfo source file for this Info file.
 
@@ -2032,7 +2032,7 @@ minor node could also be written this way:
    ---------- Footnotes ----------
 
    (1) The `?' and `:' referred to here is the three-operand
-conditional expression described in *note Conditional Exp::.  Splitting
+conditional expression described in *Note Conditional Exp::.  Splitting
 lines after `?' and `:' is a minor `gawk' extension; if `--posix' is
 specified (*note Options::), then this extension is disabled.
 
@@ -2055,7 +2055,7 @@ determining the type of a variable, and array sorting.
 
    As we develop our presentation of the `awk' language, we introduce
 most of the variables and many of the functions. They are described
-systematically in *note Built-in Variables::, and *note Built-in::.
+systematically in *Note Built-in Variables::, and *Note Built-in::.
 
 
 File: gawk.info,  Node: When,  Prev: Other Features,  Up: Getting Started
@@ -2213,7 +2213,7 @@ The following list describes options mandated by the 
POSIX standard:
      This is useful if you have file names that start with `-', or in
      shell scripts, if you have file names that will be specified by
      the user that could start with `-'.  It is also useful for passing
-     options on to the `awk' program; see *note Getopt Function::.
+     options on to the `awk' program; see *Note Getopt Function::.
 
    The following list describes `gawk'-specific options:
 
@@ -2232,7 +2232,7 @@ The following list describes options mandated by the 
POSIX standard:
      Specify "compatibility mode", in which the GNU extensions to the
      `awk' language are disabled, so that `gawk' behaves just like
      Brian Kernighan's version `awk'.  *Note POSIX/GNU::, which
-     summarizes the extensions.  Also see *note Compatibility Mode::.
+     summarizes the extensions.  Also see *Note Compatibility Mode::.
 
 `-C'
 `--copyright'
@@ -2420,7 +2420,7 @@ if they had been concatenated together into one big file. 
 This is
 useful for creating libraries of `awk' functions.  These functions can
 be written once and then retrieved from a standard place, instead of
 having to be included into each individual program.  (As mentioned in
-*note Definition Syntax::, function names must be unique.)
+*Note Definition Syntax::, function names must be unique.)
 
    With standard `awk', library functions can still be used, even if
 the program is entered at the terminal, by specifying `-f /dev/tty'.
@@ -2475,7 +2475,7 @@ File: gawk.info,  Node: Other Arguments,  Next: Naming 
Standard Input,  Prev: Op
 Any additional arguments on the command line are normally treated as
 input files to be processed in the order specified.   However, an
 argument that has the form `VAR=VALUE', assigns the value VALUE to the
-variable VAR--it does not specify a file at all.  (See *note Assignment
+variable VAR--it does not specify a file at all.  (See *Note Assignment
 Options::.)
 
    All these arguments are made available to your `awk' program in the
@@ -2791,7 +2791,7 @@ reducing the need for writing complex and tedious command 
lines.  In
 particular, address@hidden' is very useful for writing CGI scripts to be run
 from web pages.
 
-   As mentioned in *note AWKPATH Variable::, the current directory is
+   As mentioned in *Note AWKPATH Variable::, the current directory is
 always searched first for source files, before searching in `AWKPATH',
 and this also applies to files named with address@hidden'.
 
@@ -2809,7 +2809,7 @@ they will _not_ be in the next release).
    The process-related special files `/dev/pid', `/dev/ppid',
 `/dev/pgrpid', and `/dev/user' were deprecated in `gawk' 3.1, but still
 worked.  As of version 4.0, they are no longer interpreted specially by
-`gawk'.  (Use `PROCINFO' instead; see *note Auto-set::.)
+`gawk'.  (Use `PROCINFO' instead; see *Note Auto-set::.)
 
 
 File: gawk.info,  Node: Undocumented,  Prev: Obsolete,  Up: Invoking Gawk
@@ -3002,7 +3002,7 @@ with a backslash have special meaning in regexps.  *Note 
GNU Regexp
 Operators::.
 
    In a regexp, a backslash before any character that is not in the
-previous list and not listed in *note GNU Regexp Operators::, means
+previous list and not listed in *Note GNU Regexp Operators::, means
 that the next character should be taken literally, even if it would
 normally be a regexp operator.  For example, `/a\+b/' matches the three
 characters `a+b'.
@@ -3017,7 +3017,7 @@ character not shown in the previous list.
      early, as soon as `awk' reads your program.
 
    * `gawk' processes both regexp constants and dynamic regexps (*note
-     Computed Regexps::), for the special operators listed in *note GNU
+     Computed Regexps::), for the special operators listed in *Note GNU
      Regexp Operators::.
 
    * A backslash before any other character means to treat that
@@ -3046,7 +3046,7 @@ Advanced Notes: Escape Sequences for Metacharacters
 ---------------------------------------------------
 
 Suppose you use an octal or hexadecimal escape to represent a regexp
-metacharacter.  (See *note Regexp Operators::.)  Does `awk' treat the
+metacharacter.  (See *Note Regexp Operators::.)  Does `awk' treat the
 character as a literal character or as a regexp operator?
 
    Historically, such characters were taken literally.  (d.c.)
@@ -3066,7 +3066,7 @@ You can combine regular expressions with special 
characters, called
 "regular expression operators" or "metacharacters", to increase the
 power and versatility of regular expressions.
 
-   The escape sequences described in *note Escape Sequences::, are
+   The escape sequences described in *Note Escape Sequences::, are
 valid inside a regexp.  They are introduced by a `\' and are recognized
 and converted into corresponding real characters as the very first step
 in processing regexps.
@@ -3116,7 +3116,7 @@ sequences and that are not listed in the table stand for 
themselves:
      the characters that are enclosed in the square brackets.  For
      example, `[MVX]' matches any one of the characters `M', `V', or
      `X' in a string.  A full discussion of what can be inside the
-     square brackets of a bracket expression is given in *note Bracket
+     square brackets of a bracket expression is given in *Note Bracket
      Expressions::.
 
 `[^ ...]'
@@ -3243,7 +3243,7 @@ those listed between the opening and closing square 
brackets.
 characters separated by a hyphen.  It matches any single character that
 sorts between the two characters, based upon the system's native
 character set.  For example, `[0-9]' is equivalent to `[0123456789]'.
-(See *note Ranges and Locales::, for an explanation of how the POSIX
+(See *Note Ranges and Locales::, for an explanation of how the POSIX
 standard and `gawk' have changed over time.  This is mainly of
 historical interest.)
 
@@ -3269,7 +3269,7 @@ differs between the United States and France.
 
    A character class is only valid in a regexp _inside_ the brackets of
 a bracket expression.  Character classes consist of `[:', a keyword
-denoting the class, and `:]'.  *note table-char-classes:: lists the
+denoting the class, and `:]'.  *Note table-char-classes:: lists the
 character classes defined by the POSIX standard.
 
 Class       Meaning
@@ -3400,7 +3400,7 @@ GNU `\b' appears to be the lesser of two evils.
 
 No options
      In the default case, `gawk' provides all the facilities of POSIX
-     regexps and the GNU regexp operators described in *note Regexp
+     regexps and the GNU regexp operators described in *Note Regexp
      Operators::.
 
 `--posix'
@@ -3951,7 +3951,7 @@ that the multiplication is done before the `$' operation; 
they are
 necessary whenever there is a binary operator in the field-number
 expression.  This example, then, prints the hours of operation (the
 fourth field) for every line of the file `BBS-list'.  (All of the `awk'
-operators are listed, in order of decreasing precedence, in *note
+operators are listed, in order of decreasing precedence, in *Note
 Precedence::.)
 
    If the field number you compute is zero, you get the entire record.
@@ -3961,7 +3961,7 @@ not allowed; trying to reference one usually terminates 
the program.
 negative field number.  `gawk' notices this and terminates your
 program.  Other `awk' implementations may behave differently.)
 
-   As mentioned in *note Fields::, `awk' stores the current record's
+   As mentioned in *Note Fields::, `awk' stores the current record's
 number of fields in the built-in variable `NF' (also *note Built-in
 Variables::).  The expression `$NF' is not a special feature--it is the
 direct consequence of evaluating `NF' and using its value as a field
@@ -5222,7 +5222,7 @@ in mind:
      probably by accident, and you should reconsider what it is you're
      trying to accomplish.
 
-   * *note Getline Summary::, presents a table summarizing the
+   * *Note Getline Summary::, presents a table summarizing the
      `getline' variants and which variables they can affect.  It is
      worth noting that those variants which do not use redirection can
      cause `FILENAME' to be updated if they cause `awk' to start
@@ -5234,7 +5234,7 @@ File: gawk.info,  Node: Getline Summary,  Prev: Getline 
Notes,  Up: Getline
 4.9.10 Summary of `getline' Variants
 ------------------------------------
 
-*note table-getline-variants:: summarizes the eight variants of
+*Note table-getline-variants:: summarizes the eight variants of
 `getline', listing which built-in variables are set by each one, and
 whether the variant is standard or a `gawk' extension.
 
@@ -5282,7 +5282,7 @@ and the `printf' statement for fancier formatting.  The 
`print'
 statement is not limited when computing _which_ values to print.
 However, with two exceptions, you cannot specify _how_ to print
 them--how many columns, whether to use exponential notation or not, and
-so on.  (For the exceptions, *note Output Separators::, and *note
+so on.  (For the exceptions, *note Output Separators::, and *Note
 OFMT::.)  For printing with specifications, you need the `printf'
 statement (*note Printf::).
 
@@ -5469,7 +5469,7 @@ that string.  `awk' uses the `sprintf()' function to do 
this conversion
 `sprintf()' function accepts a "format specification" that tells it how
 to format numbers (or strings), and that there are a number of
 different ways in which numbers can be formatted.  The different format
-specifications are discussed more fully in *note Control Letters::.
+specifications are discussed more fully in *Note Control Letters::.
 
    The built-in variable `OFMT' contains the default format
 specification that `print' uses with `sprintf()' when it wants to
@@ -5519,8 +5519,8 @@ A simple `printf' statement looks like this:
      printf FORMAT, ITEM1, ITEM2, ...
 
 The entire list of arguments may optionally be enclosed in parentheses.
-The parentheses are necessary if any of the item expressions use the `>'
-relational operator; otherwise, it can be confused with an output
+The parentheses are necessary if any of the item expressions use the
+`>' relational operator; otherwise, it can be confused with an output
 redirection (*note Redirection::).
 
    The difference between `printf' and `print' is the FORMAT argument.
@@ -5726,12 +5726,12 @@ which they may appear:
           -| 1,234,567                 Results in US English UTF locale
 
      For more information about locales and internationalization issues,
-     see *note Locales::.
+     see *Note Locales::.
 
           NOTE: The `'' flag is a nice feature, but its use complicates
           things: it becomes difficult to use it in command-line
           programs.  For information on appropriate quoting tricks, see
-          *note Quoting::.
+          *Note Quoting::.
 
 `WIDTH'
      This is a number specifying the desired minimum width of a field.
@@ -5972,7 +5972,7 @@ work identically for `printf':
      The message is built using string concatenation and saved in the
      variable `m'.  It's then sent down the pipeline to the `mail'
      program.  (The parentheses group the items to concatenate--see
-     *note Concatenation::.)
+     *Note Concatenation::.)
 
      The `close()' function is called here because it's a good idea to
      close the pipe as soon as all the intended output has been sent to
@@ -6157,7 +6157,7 @@ essential pieces of information for making a networking 
connection.
 These file names are used with the `|&' operator for communicating with
 a coprocess (*note Two-way I/O::).  This is an advanced feature,
 mentioned here only for completeness.  Full discussion is delayed until
-*note TCP/IP Networking::.
+*Note TCP/IP Networking::.
 
 
 File: gawk.info,  Node: Special Caveats,  Prev: Special Network,  Up: Special 
Files
@@ -6304,7 +6304,7 @@ to `close()'.  As in any other call to `close()', the 
first argument is
 the name of the command or special file used to start the coprocess.
 The second argument should be a string, with either of the values
 `"to"' or `"from"'.  Case does not matter.  As this is an advanced
-feature, a more complete discussion is delayed until *note Two-way
+feature, a more complete discussion is delayed until *Note Two-way
 I/O::, which discusses it in more detail and gives an example.
 
 Advanced Notes: Using `close()''s Return Value
@@ -6493,7 +6493,7 @@ option; *note Nondecimal Data::.)  If you have octal or 
hexadecimal
 data, you can use the `strtonum()' function (*note String Functions::)
 to convert the data into a number.  Most of the time, you will want to
 use octal or hexadecimal constants when working with the built-in bit
-manipulation functions; see *note Bitwise Functions::, for more
+manipulation functions; see *Note Bitwise Functions::, for more
 information.
 
    Unlike some early C implementations, `8' and `9' are not valid in
@@ -6776,7 +6776,7 @@ your programs, just port `gawk' itself.  *Note Print::, 
for more
 information on the `print' statement.
 
    And, once again, where you are can matter when it comes to converting
-between numbers and strings.  In *note Locales::, we mentioned that the
+between numbers and strings.  In *Note Locales::, we mentioned that the
 local character set and language (the locale) can affect how `gawk'
 matches characters.  The locale also affects numeric formats.  In
 particular, for `awk' programs, it affects the decimal point character.
@@ -6817,7 +6817,7 @@ character.  (`gawk' also uses the locale's decimal point 
character when
 in POSIX mode, either via `--posix', or the `POSIXLY_CORRECT'
 environment variable.)
 
-   *note table-locale-affects:: describes the cases in which the
+   *Note table-locale-affects:: describes the cases in which the
 locale's decimal point character is used and when a period is used.
 Some of these features have not been described yet.
 
@@ -6833,7 +6833,7 @@ 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
 `gawk' converts some special string values to numbers.  The details are
-presented in *note POSIX Floating Point Problems::.
+presented in *Note POSIX Floating Point Problems::.
 
    ---------- Footnotes ----------
 
@@ -7144,7 +7144,7 @@ righthand expression.  For example:
 The indices of `bar' are practically guaranteed to be different, because
 `rand()' returns different values each time it is called.  (Arrays and
 the `rand()' function haven't been covered yet.  *Note Arrays::, and
-see *note Numeric Functions::, for more information).  This example
+see *Note Numeric Functions::, for more information).  This example
 illustrates an important fact about assignment operators: the lefthand
 expression is only evaluated _once_.  It is up to the implementation as
 to which expression is evaluated first, the lefthand or the righthand.
@@ -7155,7 +7155,7 @@ Consider this example:
 
 The value of `a[3]' could be either two or four.
 
-   *note table-assign-ops:: lists the arithmetic assignment operators.
+   *Note table-assign-ops:: lists the arithmetic assignment operators.
 In each case, the righthand operand is an expression whose value is
 converted to a number.
 
@@ -7193,7 +7193,7 @@ A workaround is:
      awk '/[=]=/' /dev/null
 
    `gawk' does not have this problem, nor do the other freely available
-versions described in *note Other Versions::.
+versions described in *Note Other Versions::.
 
 
 File: gawk.info,  Node: Increment Ops,  Prev: Assignment Ops,  Up: All 
Operators
@@ -7458,7 +7458,7 @@ File: gawk.info,  Node: Comparison Operators,  Next: 
POSIX String Comparison,  P
 
 "Comparison expressions" compare strings or numbers for relationships
 such as equality.  They are written using "relational operators", which
-are a superset of those in C.  *note table-relational-ops:: describes
+are a superset of those in C.  *Note table-relational-ops:: describes
 them.
 
 Expression         Result
@@ -7634,8 +7634,8 @@ Boolean operators are:
           if ($0 ~ /2400/ || $0 ~ /foo/) print
 
      The subexpression BOOLEAN2 is evaluated only if BOOLEAN1 is false.
-     This can make a difference when BOOLEAN2 contains expressions that
-     have side effects.
+     This can make a difference when BOOLEAN2 contains expressions
+     that have side effects.
 
 `! BOOLEAN'
      True if BOOLEAN is false.  For example, the following program
@@ -7645,7 +7645,7 @@ Boolean operators are:
           BEGIN { if (! ("HOME" in ENVIRON))
                          print "no home!" }
 
-     (The `in' operator is described in *note Reference to Elements::.)
+     (The `in' operator is described in *Note Reference to Elements::.)
 
    The `&&' and `||' operators are called "short-circuit" operators
 because of the way they work.  Evaluation of the full expression is
@@ -7675,7 +7675,7 @@ using `!'. The next rule prints lines as long as 
`interested' is true.
 When a line is seen whose first field is `END', `interested' is toggled
 back to false.(1)
 
-     NOTE: The `next' statement is discussed in *note Next Statement::.
+     NOTE: The `next' statement is discussed in *Note Next Statement::.
      `next' tells `awk' to skip the rest of the rules, get the next
      record, and start processing the rules over again at the top.  The
      reason it's there is to avoid printing the bracketing `START' and
@@ -7778,7 +7778,7 @@ User-defined::).
    As an advanced feature, `gawk' provides indirect function calls,
 which is a way to choose the function to call at runtime, instead of
 when you write the source code to your program. We defer discussion of
-this feature until later; see *note Indirect Calls::.
+this feature until later; see *Note Indirect Calls::.
 
    Like every other expression, the function call has a value, which is
 computed by the function based on the arguments you give it.  In this
@@ -7938,12 +7938,12 @@ make several function calls, _per input character_, to 
find the record
 terminator.
 
    According to POSIX, string comparison is also affected by locales
-(similar to regular expressions).  The details are presented in *note
+(similar to regular expressions).  The details are presented in *Note
 POSIX String Comparison::.
 
    Finally, the locale affects the value of the decimal point character
 used when `gawk' parses input data.  This is discussed in detail in
-*note Conversion::.
+*Note Conversion::.
 
 
 File: gawk.info,  Node: Patterns and Actions,  Next: Arrays,  Prev: 
Expressions,  Up: Top
@@ -8044,7 +8044,7 @@ otherwise, it depends on only what has happened so far in 
the execution
 of the `awk' program.
 
    Comparison expressions, using the comparison operators described in
-*note Typing and Comparison::, are a very common kind of pattern.
+*Note Typing and Comparison::, are a very common kind of pattern.
 Regexp matching and nonmatching are also very common expressions.  The
 left operand of the `~' and `!~' operators is a string.  The right
 operand is either a constant regular expression enclosed in slashes
@@ -8293,7 +8293,7 @@ explicitly.
 `BEGIN' rule, because the implicit
 read-a-record-and-match-against-the-rules loop has not started yet.
 Similarly, those statements are not valid in an `END' rule, since all
-the input has been read.  (*Note Next Statement::, and see *note
+the input has been read.  (*Note Next Statement::, and see *Note
 Nextfile Statement::.)
 
 
@@ -8831,7 +8831,7 @@ Statement::.)
      }
 
    The `break' statement is also used to break out of the `switch'
-statement.  This is discussed in *note Switch Statement::.
+statement.  This is discussed in *Note Switch Statement::.
 
    The `break' statement has no meaning when used outside the body of a
 loop or `switch'.  However, although it was never documented,
@@ -8928,7 +8928,7 @@ beginning, in the following manner:
 Because of the `next' statement, the program's subsequent rules won't
 see the bad record.  The error message is redirected to the standard
 error output stream, as error messages should be.  For more detail see
-*note Special Files::.
+*Note Special Files::.
 
    If the `next' statement causes the end of the input to be reached,
 then the code in any `END' rules is executed.  *Note BEGIN/END::.
@@ -9095,7 +9095,7 @@ specific to `gawk' are marked with a pound sign (`#').
      string value of `"rw"' or `"wr"' indicates that all files should
      use binary I/O.  Any other string value is treated the same as
      `"rw"', but causes `gawk' to generate a warning message.
-     `BINMODE' is described in more detail in *note PC Using::.
+     `BINMODE' is described in more detail in *Note PC Using::.
 
      This variable is a `gawk' extension.  In other `awk'
      implementations (except `mawk', *note Other Versions::), or if
@@ -9399,7 +9399,7 @@ with a pound sign (`#').
           If this element exists in `PROCINFO', its value controls the
           order in which array indices will be processed by `for (index
           in array) ...' loops.  Since this is an advanced feature, we
-          defer the full description until later; see *note Scanning an
+          defer the full description until later; see *Note Scanning an
           Array::.
 
     `PROCINFO["strftime"]'
@@ -9420,7 +9420,7 @@ with a pound sign (`#').
 
      The `PROCINFO' array is also used to cause coprocesses to
      communicate over pseudo-ttys instead of through two-way pipes;
-     this is discussed further in *note Two-way I/O::.
+     this is discussed further in *Note Two-way I/O::.
 
      This array is a `gawk' extension.  In other `awk' implementations,
      or if `gawk' is in compatibility mode (*note Options::), it is not
@@ -9482,7 +9482,7 @@ File: gawk.info,  Node: ARGC and ARGV,  Prev: Auto-set,  
Up: Built-in Variables
 7.5.3 Using `ARGC' and `ARGV'
 -----------------------------
 
-*note Auto-set::, presented the following program describing the
+*Note Auto-set::, presented the following program describing the
 information contained in `ARGC' and `ARGV':
 
      $ awk 'BEGIN {
@@ -9538,7 +9538,7 @@ elements from `ARGV' (*note Delete::).
 
    All of these actions are typically done in the `BEGIN' rule, before
 actual processing of the input begins.  *Note Split Program::, and see
-*note Tee Program::, for examples of each way of removing elements from
+*Note Tee Program::, for examples of each way of removing elements from
 `ARGV'.  The following fragment processes `ARGV' in order to examine,
 and then remove, command-line options:
 
@@ -9718,7 +9718,7 @@ from English to French:
 Here we decided to translate the number one in both spelled-out and
 numeric form--thus illustrating that a single array can have both
 numbers and strings as indices.  In fact, array subscripts are always
-strings; this is discussed in more detail in *note Numeric Array
+strings; this is discussed in more detail in *Note Numeric Array
 Subscripts::.  Here, the number `1' isn't double-quoted, since `awk'
 automatically converts it to a string.
 
@@ -9919,11 +9919,11 @@ produce strange results.  It is best to avoid such 
things.
    As an extension, `gawk' makes it possible for you to loop over the
 elements of an array in order, based on the value of
 `PROCINFO["sorted_in"]' (*note Auto-set::).  This is an advanced
-feature, so discussion of it is delayed until *note Controlling Array
+feature, so discussion of it is delayed until *Note Controlling Array
 Traversal::.
 
    In addition, `gawk' provides built-in functions for sorting arrays;
-see *note Array Sorting Functions::.
+see *Note Array Sorting Functions::.
 
 
 File: gawk.info,  Node: Delete,  Next: Numeric Array Subscripts,  Prev: Array 
Basics,  Up: Arrays
@@ -10624,7 +10624,7 @@ pound sign (`#'):
 
           asort(a, a, "descending")
 
-     The `asort()' function is described in more detail in *note Array
+     The `asort()' function is described in more detail in *Note Array
      Sorting Functions::.  `asort()' is a `gawk' extension; it is not
      available in compatibility mode (*note Options::).
 
@@ -10633,7 +10633,7 @@ pound sign (`#'):
      similarly to `asort()', however, the _indices_ are sorted, instead
      of the values. (Here too, `IGNORECASE' affects the sorting.)
 
-     The `asorti()' function is described in more detail in *note Array
+     The `asorti()' function is described in more detail in *Note Array
      Sorting Functions::.  `asorti()' is a `gawk' extension; it is not
      available in compatibility mode (*note Options::).
 
@@ -11116,7 +11116,7 @@ replacement string to determine what to generate.
 
    At both levels, `awk' looks for a defined set of characters that can
 come after a backslash.  At the lexical level, it looks for the escape
-sequences listed in *note Escape Sequences::.  Thus, for every `\' that
+sequences listed in *Note Escape Sequences::.  Thus, for every `\' that
 `awk' processes at the runtime level, you must type two backslashes at
 the lexical level.  When a character that is not valid for an escape
 sequence follows the `\', Brian Kernighan's `awk' and `gawk' both
@@ -11129,7 +11129,7 @@ Historically, the `sub()' and `gsub()' functions 
treated the two
 character sequence `\&' specially; this sequence was replaced in the
 generated text with a single `&'.  Any other `\' within the REPLACEMENT
 string that did not precede an `&' was passed through unchanged.  This
-is illustrated in *note table-sub-escapes::.
+is illustrated in *Note table-sub-escapes::.
 
       You type         `sub()' sees          `sub()' generates
       -------         ---------          --------------
@@ -11141,8 +11141,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
-`gsub()'
+Table 9.1: Historical Escape Sequence Processing for `sub()' and `gsub()'
 
 This table shows both the lexical-level processing, where an odd number
 of backslashes becomes an even number at the runtime level, as well as
@@ -11156,7 +11155,7 @@ get a literal `\' followed by the matched text.
    The POSIX rules state that `\&' in the replacement string produces a
 literal `&', `\\' produces a literal `\', and `\' followed by anything
 else is not special; the `\' is placed straight into the output.  These
-rules are presented in *note table-posix-sub::.
+rules are presented in *Note table-posix-sub::.
 
       You type         `sub()' sees         `sub()' generates
       -------         ---------         --------------
@@ -11175,7 +11174,7 @@ level, whenever `gawk' sees a `\', if the following 
character is a
 digit, then the text that matched the corresponding parenthesized
 subexpression is placed in the generated output.  Otherwise, no matter
 what character follows the `\', it appears in the generated text and
-the `\' does not, as shown in *note table-gensub-escapes::.
+the `\' does not, as shown in *Note table-gensub-escapes::.
 
        You type          `gensub()' sees         `gensub()' generates
        -------          ------------         -----------------
@@ -11696,7 +11695,7 @@ supports all of the conversions listed here.
 
    (5) If you don't understand any of this, don't worry about it; these
 facilities are meant to make it easier to "internationalize" programs.
-Other internationalization features are described in *note
+Other internationalization features are described in *Note
 Internationalization::.
 
    (6) This is because ISO C leaves the behavior of the C version of
@@ -11716,7 +11715,7 @@ File: gawk.info,  Node: Bitwise Functions,  Next: Type 
Functions,  Prev: Time Fu
    Many languages provide the ability to perform "bitwise" operations
 on two integer numbers.  In other words, the operation is performed on
 each successive pair of bits in the operands.  Three common operations
-are bitwise AND, OR, and XOR.  The operations are described in *note
+are bitwise AND, OR, and XOR.  The operations are described in *Note
 table-bitwise-ops::.
 
                      Bit Operator
@@ -11984,7 +11983,7 @@ act of a function calling itself is called "recursion".
 
    All the built-in functions return a value to their caller.
 User-defined functions can do also, using the `return' statement, which
-is described in detail in *note Return Statement::.  Many of the
+is described in detail in *Note Return Statement::.  Many of the
 subsequent examples in this minor node use the `return' statement.
 
    In many `awk' implementations, including `gawk', the keyword
@@ -12917,7 +12916,7 @@ internationalization:
      `"LC_MESSAGES"'.
 
      If you supply a value for CATEGORY, it must be a string equal to
-     one of the known locale categories described in *note Explaining
+     one of the known locale categories described in *Note Explaining
      gettext::.  You must also supply a text domain.  Use `TEXTDOMAIN'
      if you want to use the current domain.
 
@@ -12949,7 +12948,7 @@ internationalization:
      current binding for the given DOMAIN.
 
    To use these facilities in your `awk' program, follow the steps
-outlined in *note Explaining gettext::, like so:
+outlined in *Note Explaining gettext::, like so:
 
   1. Set the variable `TEXTDOMAIN' to the text domain of your program.
      This is best done in a `BEGIN' rule (*note BEGIN/END::), or it can
@@ -13312,7 +13311,7 @@ full detail, along with the basics of TCP/IP 
networking.  Finally,
 `gawk' can "profile" an `awk' program, making it possible to tune it
 for performance.
 
-   *note Dynamic Extensions::, discusses the ability to dynamically add
+   *Note Dynamic Extensions::, discusses the ability to dynamically add
 new built-in functions to `gawk'.  As this feature is still immature
 and likely to change, its description is relegated to an appendix.
 
@@ -13630,7 +13629,7 @@ File: gawk.info,  Node: Controlling Scanning,  Prev: 
Controlling Scanning With A
 11.2.1.2 Controlling Array Scanning Order
 .........................................
 
-As described in *note Controlling Scanning With A Function::, you can
+As described in *Note Controlling Scanning With A Function::, you can
 provide the name of a function as the value of `PROCINFO["sorted_in"]'
 to specify custom sorting criteria.
 
@@ -14263,14 +14262,14 @@ File: gawk.info,  Node: Library Functions,  Next: 
Sample Programs,  Prev: Advanc
 12 A Library of `awk' Functions
 *******************************
 
-*note User-defined::, describes how to write your own `awk' functions.
+*Note User-defined::, describes how to write your own `awk' functions.
 Writing functions is important, because it allows you to encapsulate
 algorithms and program tasks in a single place.  It simplifies
 programming, making program development more manageable, and making
 programs more readable.
 
    One valuable way to learn a new programming language is to _read_
-programs in that language.  To that end, this major node and *note
+programs in that language.  To that end, this major node and *Note
 Sample Programs::, provide a good-sized body of code for you to read,
 and hopefully, to learn from.
 
@@ -14279,16 +14278,16 @@ of the sample programs presented later in this Info 
file use these
 functions.  The functions are presented here in a progression from
 simple to complex.
 
-   *note Extract Program::, presents a program that you can use to
+   *Note Extract Program::, presents a program that you can use to
 extract the source code for these example library functions and
 programs from the Texinfo source for this Info file.  (This has already
 been done as part of the `gawk' distribution.)
 
    If you have written one or more useful, general-purpose `awk'
 functions and would like to contribute them to the `awk' user
-community, see *note How To Contribute::, for more information.
+community, see *Note How To Contribute::, for more information.
 
-   The programs in this major node and in *note Sample Programs::,
+   The programs in this major node and in *Note Sample Programs::,
 freely use features that are `gawk'-specific.  Rewriting these programs
 for different implementations of `awk' is pretty straightforward.
 
@@ -14390,7 +14389,7 @@ program, leading to bugs that are very difficult to 
track down:
 single associative array to hold the values needed by the library
 function(s), or "package."  This significantly decreases the number of
 actual global names in use.  For example, the functions described in
-*note Passwd Functions::, might have used array elements
+*Note Passwd Functions::, might have used array elements
 `PW_data["inited"]', `PW_data["total"]', `PW_data["count"]', and
 `PW_data["awklib"]', instead of `_pw_inited', `_pw_awklib', `_pw_total',
 and `_pw_count'.
@@ -14828,7 +14827,7 @@ File: gawk.info,  Node: Gettimeofday Function,  Prev: 
Join Function,  Up: Genera
 12.2.7 Managing the Time of Day
 -------------------------------
 
-The `systime()' and `strftime()' functions described in *note Time
+The `systime()' and `strftime()' functions described in *Note Time
 Functions::, provide the minimum functionality necessary for dealing
 with the time of day in human readable form.  While `strftime()' is
 extensive, the control formats are not necessarily easy to remember or
@@ -14900,7 +14899,7 @@ current time formatted in the same way as the `date' 
utility:
 
    The string indices are easier to use and read than the various
 formats required by `strftime()'.  The `alarm' program presented in
-*note Alarm Program::, uses this function.  A more general design for
+*Note Alarm Program::, uses this function.  A more general design for
 the `gettimeofday()' function would have allowed the user to supply an
 optional timestamp value to use instead of the current time.
 
@@ -15001,7 +15000,7 @@ solves the problem:
 
      END  { endfile(_filename_) }
 
-   *note Wc Program::, shows how this library function can be used and
+   *Note Wc Program::, shows how this library function can be used and
 how it simplifies writing the main program.
 
 Advanced Notes: So Why Does `gawk' have `BEGINFILE' and `ENDFILE'?
@@ -15055,7 +15054,7 @@ over with it from the top.  For lack of a better name, 
we'll call it
 
    This code relies on the `ARGIND' variable (*note Auto-set::), which
 is specific to `gawk'.  If you are not using `gawk', you can use ideas
-presented in *note Filetrans Function::, to either update `ARGIND' on
+presented in *Note Filetrans Function::, to either update `ARGIND' on
 your own or modify this code as appropriate.
 
    The `rewind()' function also relies on the `nextfile' keyword (*note
@@ -15088,7 +15087,7 @@ program to your `awk' program:
 
    This works, because the `getline' won't be fatal.  Removing the
 element from `ARGV' with `delete' skips the file (since it's no longer
-in the list).  See also *note ARGC and ARGV::.
+in the list).  See also *Note ARGC and ARGV::.
 
 
 File: gawk.info,  Node: Empty Files,  Next: Ignoring Assigns,  Prev: File 
Checking,  Up: Data File Management
@@ -15106,7 +15105,7 @@ program code.
 
    Using `gawk''s `ARGIND' variable (*note Built-in Variables::), it is
 possible to detect when an empty data file has been skipped.  Similar
-to the library file presented in *note Filetrans Function::, the
+to the library file presented in *Note Filetrans Function::, the
 following library file calls a function named `zerofile()' that the
 user must provide.  The arguments passed are the file name and the
 position in `ARGV' where it was found:
@@ -15474,7 +15473,7 @@ that it does not try to interpret the `-a', etc., as 
its own options.
      `Optind', so that `awk' does not try to process the command-line
      options as file names.
 
-   Several of the sample programs presented in *note Sample Programs::,
+   Several of the sample programs presented in *Note Sample Programs::,
 use `getopt()' to process their arguments.
 
    ---------- Footnotes ----------
@@ -15719,7 +15718,7 @@ once.  If you are worried about squeezing every last 
cycle out of your
 this is not necessary, since most `awk' programs are I/O-bound, and
 such a change would clutter up the code.
 
-   The `id' program in *note Id Program::, uses these functions.
+   The `id' program in *Note Id Program::, uses these functions.
 
    ---------- Footnotes ----------
 
@@ -15732,7 +15731,7 @@ File: gawk.info,  Node: Group Functions,  Next: Walking 
Arrays,  Prev: Passwd Fu
 12.6 Reading the Group Database
 ===============================
 
-Much of the discussion presented in *note Passwd Functions::, applies
+Much of the discussion presented in *Note Passwd Functions::, applies
 to the group database as well.  Although there has traditionally been a
 well-known file (`/etc/group') in a well-known format, the POSIX
 standard only provides a set of C library routines (`<grp.h>' and
@@ -15958,7 +15957,7 @@ body of `_gr_init()' into a `BEGIN' rule).
 associative arrays.  The functions that the user calls are themselves
 very simple, relying on `awk''s associative arrays to do work.
 
-   The `id' program in *note Id Program::, uses these functions.
+   The `id' program in *Note Id Program::, uses these functions.
 
 
 File: gawk.info,  Node: Walking Arrays,  Prev: Group Functions,  Up: Library 
Functions
@@ -15966,7 +15965,7 @@ File: gawk.info,  Node: Walking Arrays,  Prev: Group 
Functions,  Up: Library Fun
 12.7 Traversing Arrays of Arrays
 ================================
 
-*note Arrays of Arrays::, described how `gawk' provides arrays of
+*Note Arrays of Arrays::, described how `gawk' provides arrays of
 arrays.  In particular, any element of an array may be either a scalar,
 or another array. The `isarray()' function (*note Type Functions::)
 lets you distinguish an array from a scalar.  The following function,
@@ -16017,12 +16016,12 @@ File: gawk.info,  Node: Sample Programs,  Next: 
Debugger,  Prev: Library Functio
 13 Practical `awk' Programs
 ***************************
 
-*note Library Functions::, presents the idea that reading programs in a
+*Note Library Functions::, presents the idea that reading programs in a
 language contributes to learning that language.  This major node
 continues that theme, presenting a potpourri of `awk' programs for your
 reading enjoyment.
 
-   Many of these programs use library functions presented in *note
+   Many of these programs use library functions presented in *Note
 Library Functions::.
 
 * Menu:
@@ -16197,7 +16196,7 @@ by characters, the output field separator is set to the 
null string:
 Using a single space (`" "') for the value of `FS' is incorrect--`awk'
 would separate fields with runs of spaces, TABs, and/or newlines, and
 we want them to be separated with individual spaces.  Also remember
-that after `getopt()' is through (as described in *note Getopt
+that after `getopt()' is through (as described in *Note Getopt
 Function::), we have to clear out all the elements of `ARGV' from 1 to
 `Optind', so that `awk' does not try to process the command-line options
 as file names.
@@ -16702,7 +16701,7 @@ to something like `myfileaa', `myfileab', and so on, 
supply an
 additional argument that specifies the file name prefix.
 
    Here is a version of `split' in `awk'. It uses the `ord()' and
-`chr()' functions presented in *note Ordinal Functions::.
+`chr()' functions presented in *Note Ordinal Functions::.
 
    The program first sets its defaults, and then tests to make sure
 there are not too many arguments.  It then looks at each argument in
@@ -17236,7 +17235,7 @@ in its length.  Next, `lines' is incremented for each 
line read, and
    ---------- Footnotes ----------
 
    (1) `wc' can't just use the value of `FNR' in `endfile()'. If you
-examine the code in *note Filetrans Function::, you will see that `FNR'
+examine the code in *Note Filetrans Function::, you will see that `FNR'
 has already been reset by the time `endfile()' is called.
 
    (2) Since `gawk' understands multibyte locales, this code counts
@@ -17332,7 +17331,7 @@ prints the message on the standard output. In addition, 
you can give it
 the number of times to repeat the message as well as a delay between
 repetitions.
 
-   This program uses the `gettimeofday()' function from *note
+   This program uses the `gettimeofday()' function from *Note
 Gettimeofday Function::.
 
    All the work is done in the `BEGIN' rule.  The first part is argument
@@ -17840,7 +17839,7 @@ File: gawk.info,  Node: Extract Program,  Next: Simple 
Sed,  Prev: History Sorti
 13.3.7 Extracting Programs from Texinfo Source Files
 ----------------------------------------------------
 
-The nodes *note Library Functions::, and *note Sample Programs::, are
+The nodes *Note Library Functions::, and *Note Sample Programs::, are
 the top level nodes for a large number of `awk' programs.  If you want
 to experiment with these programs, it is tedious to have to type them
 in by hand.  Here we present a program that can extract parts of a
@@ -18121,7 +18120,7 @@ File: gawk.info,  Node: Igawk Program,  Next: Anagram 
Program,  Prev: Simple Sed
 13.3.9 An Easy Way to Use Library Functions
 -------------------------------------------
 
-In *note Include Files::, we saw how `gawk' provides a built-in
+In *Note Include Files::, we saw how `gawk' provides a built-in
 file-inclusion capability.  However, this is a `gawk' extension.  This
 minor node provides the motivation for making file inclusion available
 for standard `awk', and shows how to do it using a combination of shell
@@ -19236,7 +19235,7 @@ execution of the program than we saw in our earlier 
example:
 `si' [COUNT]
      Execute one (or COUNT) instruction(s), stepping inside function
      calls.  (For illustration of what is meant by an "instruction" in
-     `gawk', see the output shown under `dump' in *note Miscellaneous
+     `gawk', see the output shown under `dump' in *Note Miscellaneous
      Dgawk Commands::.)
 
 `until' [[FILENAME`:']N | FUNCTION]
@@ -19642,7 +19641,7 @@ limitations.  A few which are worth being aware of are:
      Rather, it just responds `syntax error'.  When you do figure out
      what your mistake was, though, you'll feel like a real guru.
 
-   * If you perused the dump of opcodes in *note Miscellaneous Dgawk
+   * If you perused the dump of opcodes in *Note Miscellaneous Dgawk
      Commands::, (or if you are already familiar with `gawk' internals),
      you will realize that much of the internal manipulation of data in
      `gawk', as in many interpreters, is done on a stack.  `Op_push',
@@ -19662,7 +19661,7 @@ limitations.  A few which are worth being aware of are:
      you are expected to know what `/[^[:alnum:][:blank:]]/' means.
 
    * `dgawk' is designed to be used by running a program (with all its
-     parameters) on the command line, as described in *note dgawk
+     parameters) on the command line, as described in *Note dgawk
      invocation::.  There is no way (as of now) to attach or "break in"
      to a running program.  This seems reasonable for a language which
      is used mainly for quickly executing, short programs.
@@ -19852,7 +19851,7 @@ Other Versions::).
    This minor node describes common extensions that originally appeared
 in his version of `awk'.
 
-   * The `**' and `**=' operators (*note Arithmetic Ops:: and *note
+   * The `**' and `**=' operators (*note Arithmetic Ops:: and *Note
      Assignment Ops::).
 
    * The use of `func' as an abbreviation for `function' (*note
@@ -20245,7 +20244,7 @@ Info file, in approximate chronological order:
    * John Haque reworked the `gawk' internals to use a byte-code engine,
      providing the `dgawk' debugger for `awk' programs.
 
-   * Efraim Yawitz contributed the original text for *note Debugger::.
+   * Efraim Yawitz contributed the original text for *Note Debugger::.
 
    * Arnold Robbins has been working on `gawk' since 1988, at first
      helping David Trueman, and as the primary maintainer since around
@@ -20449,7 +20448,7 @@ Various `.c', `.y', and `.h' files
 
 `doc/igawk.1'
      The `troff' source for a manual page describing the `igawk'
-     program presented in *note Igawk Program::.
+     program presented in *Note Igawk Program::.
 
 `doc/Makefile.in'
      The input file used during the configuration process to generate
@@ -20469,7 +20468,7 @@ Various `.c', `.y', and `.h' files
 `missing_d/*'
 `m4/*'
      These files and subdirectories are used when configuring `gawk'
-     for various Unix systems.  They are explained in *note Unix
+     for various Unix systems.  They are explained in *Note Unix
      Installation::.
 
 `po/*'
@@ -20484,8 +20483,8 @@ Various `.c', `.y', and `.h' files
      programs from the Texinfo source file for this Info file. It also
      contains a `Makefile.in' file, which `configure' uses to generate
      a `Makefile'.  `Makefile.am' is used by GNU Automake to create
-     `Makefile.in'.  The library functions from *note Library
-     Functions::, and the `igawk' program from *note Igawk Program::,
+     `Makefile.in'.  The library functions from *Note Library
+     Functions::, and the `igawk' program from *Note Igawk Program::,
      are included as ready-to-use files in the `gawk' distribution.
      They are installed as part of the installation process.  The rest
      of the programs in this Info file are available in appropriate
@@ -20850,7 +20849,7 @@ MS-DOS or MS-Windows.  EMX (OS/2 only) does support at 
least the `|&'
 operator.
 
    The MS-DOS and MS-Windows versions of `gawk' search for program
-files as described in *note AWKPATH Variable::.  However, semicolons
+files as described in *Note AWKPATH Variable::.  However, semicolons
 (rather than colons) separate elements in the `AWKPATH' variable.  If
 `AWKPATH' is not set or is empty, then the default search path for
 MS-Windows and MS-DOS versions is `".;c:/lib/awk;c:/gnu/lib/awk"'.
@@ -21384,7 +21383,7 @@ File: gawk.info,  Node: Accessing The Source,  Next: 
Adding Code,  Up: Additions
 C.2.1 Accessing The `gawk' Git Repository
 -----------------------------------------
 
-As `gawk' is Free Software, the source code is always available.  *note
+As `gawk' is Free Software, the source code is always available.  *Note
 Gawk Distribution::, describes how to get and build the formal,
 released versions of `gawk'.
 
@@ -21404,7 +21403,7 @@ access the repository using:
      git clone http://git.savannah.gnu.org/r/gawk.git
 
    Once you have made changes, you can use `git diff' to produce a
-patch, and send that to the `gawk' maintainer; see *note Bugs:: for how
+patch, and send that to the `gawk' maintainer; see *Note Bugs:: for how
 to do that.
 
    Finally, if you cannot install Git (e.g., if it hasn't been ported
@@ -21553,7 +21552,7 @@ C.2.3 Porting `gawk' to a New Operating System
 If you want to port `gawk' to a new operating system, there are several
 steps:
 
-  1. Follow the guidelines in *note Adding Code::, concerning coding
+  1. Follow the guidelines in *Note Adding Code::, concerning coding
      style, submission of diffs, and so on.
 
   2. Be prepared to sign the appropriate paperwork.  In order for the
@@ -21703,16 +21702,9 @@ when writing extensions.  The next minor node shows 
how they are used:
      is current.  It may end up calling an internal `gawk' function.
      It also guarantees that the wide string is zero-terminated.
 
-`size_t get_curfunc_arg_count(void)'
-     This function returns the actual number of parameters passed to
-     the current function.  Inside the code of an extension this can be
-     used to determine the maximum index which is safe to use with
-     `get_actual_argument'.  If this value is greater than `nargs', the
-     function was called incorrectly from the `awk' program.
-
 `nargs'
-     Inside an extension function, this is the maximum number of
-     expected parameters, as set by the `make_builtin()' function.
+     Inside an extension function, this is the actual number of
+     parameters passed to the current function.
 
 `n->stptr'
 `n->stlen'
@@ -21740,12 +21732,10 @@ when writing extensions.  The next minor node shows 
how they are used:
      Clears the associative array pointed to by `n'.  Make sure that
      `n->type == Node_var_array' first.
 
-`NODE **assoc_lookup(NODE *symbol, NODE *subs, int reference)'
+`NODE **assoc_lookup(NODE *symbol, NODE *subs)'
      Finds, and installs if necessary, array elements.  `symbol' is the
      array, `subs' is the subscript.  This is usually a value created
-     with `make_string()' (see below).  `reference' should be `TRUE' if
-     it is an error to use the value before it is created. Typically,
-     `FALSE' is the correct value to use from extension functions.
+     with `make_string()' (see below).
 
 `NODE *make_string(char *s, size_t len)'
      Take a C string and turn it into a pointer to a `NODE' that can be
@@ -22047,7 +22037,7 @@ other POSIX-compliant systems:(1)
          NODE *newdir;
          int ret = -1;
 
-         if (do_lint && get_curfunc_arg_count() != 1)
+         if (do_lint && nargs != 1)
              lintwarn("chdir: called with incorrect number of arguments");
 
          newdir = get_scalar_argument(0, FALSE);
@@ -22104,7 +22094,7 @@ declarations and argument checking:
          char *pmode;    /* printable mode */
          char *type = "unknown";
 
-         if (do_lint && get_curfunc_arg_count() > 2)
+         if (do_lint && nargs > 2)
              lintwarn("stat: called with too many arguments");
 
    Then comes the actual work. First, the function gets the arguments.
@@ -22131,15 +22121,15 @@ link.  If there's an error, it sets `ERRNO' and 
returns:
 calls are shown here, since they all follow the same pattern:
 
          /* fill in the array */
-         aptr = assoc_lookup(array, tmp = make_string("name", 4), FALSE);
+         aptr = assoc_lookup(array, tmp = make_string("name", 4));
          *aptr = dupnode(file);
          unref(tmp);
 
-         aptr = assoc_lookup(array, tmp = make_string("mode", 4), FALSE);
+         aptr = assoc_lookup(array, tmp = make_string("mode", 4));
          *aptr = make_number((AWKNUM) sbuf.st_mode);
          unref(tmp);
 
-         aptr = assoc_lookup(array, tmp = make_string("pmode", 5), FALSE);
+         aptr = assoc_lookup(array, tmp = make_string("pmode", 5));
          pmode = format_mode(sbuf.st_mode);
          *aptr = make_string(pmode, strlen(pmode));
          unref(tmp);
@@ -22470,7 +22460,7 @@ larger range of values.  The disadvantage is that there 
are numbers
 that they cannot represent exactly.  `awk' uses "double precision"
 floating-point numbers, which can hold more digits than "single
 precision" floating-point numbers.  Floating-point issues are discussed
-more fully in *note Floating Point Issues::.
+more fully in *Note Floating Point Issues::.
 
    At the very lowest level, computers store values as groups of binary
 digits, or "bits".  Modern computers group bits into groups of eight,
@@ -22493,7 +22483,7 @@ or "binary", base 8 or "octal", and base 16 or 
"hexadecimal".  In
 binary, each column represents two times the value in the column to its
 right. Each column may contain either a 0 or a 1.  Thus, binary 1010
 represents 1 times 8, plus 0 times 4, plus 1 times 2, plus 0 times 1,
-or decimal 10.  Octal and hexadecimal are discussed more in *note
+or decimal 10.  Octal and hexadecimal are discussed more in *Note
 Nondecimal-numbers::.
 
    Programs are written in programming languages.  Hundreds, if not
@@ -22810,7 +22800,7 @@ Bit
      floating-point numbers, character data, addresses of other memory
      objects, or other data.  `awk' lets you work with floating-point
      numbers and strings.  `gawk' lets you manipulate bit values with
-     the built-in functions described in *note Bitwise Functions::.
+     the built-in functions described in *Note Bitwise Functions::.
 
      Computers are often defined by how many bits they use to represent
      integer values.  Typical systems are 32-bit systems, but 64-bit
@@ -22993,7 +22983,7 @@ Field
      built-in variable `FIELDWIDTHS' to describe their lengths.  If you
      wish to specify the contents of fields instead of the field
      separator, you can use the built-in variable `FPAT' to do so.
-     (*Note Field Separators::, *note Constant Size::, and *note
+     (*Note Field Separators::, *Note Constant Size::, and *Note
      Splitting By Content::.)
 
 Flag
@@ -23228,7 +23218,7 @@ Redirection
      `|', and `|&' operators.  You can redirect the output of the
      `print' and `printf' statements to a file or a system command,
      using the `>', `>>', `|', and `|&' operators.  (*Note Getline::,
-     and *note Redirection::.)
+     and *Note Redirection::.)
 
 Regexp
      See "Regular Expression."
@@ -24621,7 +24611,7 @@ Index
 * * (asterisk), * operator, as regexp operator: Regexp Operators.
                                                               (line  87)
 * * (asterisk), * operator, null strings, matching: Gory Details.
-                                                              (line  96)
+                                                              (line  95)
 * * (asterisk), ** operator <1>:         Precedence.          (line  49)
 * * (asterisk), ** operator:             Arithmetic Ops.      (line  81)
 * * (asterisk), **= operator <1>:        Precedence.          (line  95)
@@ -24861,7 +24851,7 @@ Index
                                                               (line  23)
 * advanced features, network connections, See Also networks, connections: 
Advanced Features.
                                                               (line   6)
-* advanced features, null strings, matching: Gory Details.    (line  96)
+* advanced features, null strings, matching: Gory Details.    (line  95)
 * advanced features, operators, precedence: Increment Ops.    (line  61)
 * advanced features, piping into sh:     Redirection.         (line 143)
 * advanced features, regexp constants:   Assignment Ops.      (line 148)
@@ -24900,18 +24890,18 @@ Index
 * arguments, command-line, invoking awk: Command Line.        (line   6)
 * arguments, in function calls:          Function Calls.      (line  16)
 * arguments, processing:                 Getopt Function.     (line   6)
-* arguments, retrieving:                 Internals.           (line 120)
+* arguments, retrieving:                 Internals.           (line 111)
 * arithmetic operators:                  Arithmetic Ops.      (line   6)
 * arrays:                                Arrays.              (line   6)
 * arrays, as parameters to functions:    Pass By Value/Reference.
                                                               (line  47)
 * arrays, associative:                   Array Intro.         (line  50)
-* arrays, associative, clearing:         Internals.           (line  75)
+* arrays, associative, clearing:         Internals.           (line  68)
 * arrays, associative, library functions and: Library Names.  (line  57)
 * arrays, deleting entire contents:      Delete.              (line  39)
 * arrays, elements, assigning:           Assigning Elements.  (line   6)
 * arrays, elements, deleting:            Delete.              (line   6)
-* arrays, elements, installing:          Internals.           (line  79)
+* arrays, elements, installing:          Internals.           (line  72)
 * arrays, elements, order of:            Scanning an Array.   (line  48)
 * arrays, elements, referencing:         Reference to Elements.
                                                               (line   6)
@@ -24950,15 +24940,15 @@ Index
 * assignment operators, evaluation order: Assignment Ops.     (line 111)
 * assignment operators, lvalues/rvalues: Assignment Ops.      (line  32)
 * assignments as filenames:              Ignoring Assigns.    (line   6)
-* assoc_clear() internal function:       Internals.           (line  75)
-* assoc_lookup() internal function:      Internals.           (line  79)
+* assoc_clear() internal function:       Internals.           (line  68)
+* assoc_lookup() internal function:      Internals.           (line  72)
 * associative arrays:                    Array Intro.         (line  50)
 * asterisk (*), * operator, as multiplication operator: Precedence.
                                                               (line  55)
 * asterisk (*), * operator, as regexp operator: Regexp Operators.
                                                               (line  87)
 * asterisk (*), * operator, null strings, matching: Gory Details.
-                                                              (line  96)
+                                                              (line  95)
 * asterisk (*), ** operator <1>:         Precedence.          (line  49)
 * asterisk (*), ** operator:             Arithmetic Ops.      (line  81)
 * asterisk (*), **= operator <1>:        Precedence.          (line  95)
@@ -25222,7 +25212,7 @@ Index
 * close() function, two-way pipes and:   Two-way I/O.         (line  77)
 * Close, Diane <1>:                      Contributors.        (line  21)
 * Close, Diane:                          Manual History.      (line  41)
-* close_func() input method:             Internals.           (line 160)
+* close_func() input method:             Internals.           (line 151)
 * collating elements:                    Bracket Expressions. (line  69)
 * collating symbols:                     Bracket Expressions. (line  76)
 * Colombo, Antonio:                      Acknowledgments.     (line  60)
@@ -25595,7 +25585,7 @@ Index
 * DuBois, John:                          Acknowledgments.     (line  60)
 * dump debugger command:                 Miscellaneous Dgawk Commands.
                                                               (line   9)
-* dupnode() internal function:           Internals.           (line  96)
+* dupnode() internal function:           Internals.           (line  87)
 * dupword.awk program:                   Dupword Program.     (line  31)
 * e debugger command (alias for enable): Breakpoint Control.  (line  72)
 * EBCDIC:                                Ordinal Functions.   (line  45)
@@ -25636,7 +25626,7 @@ Index
 * endgrent() user-defined function:      Group Functions.     (line 218)
 * endpwent() function (C library):       Passwd Functions.    (line 210)
 * endpwent() user-defined function:      Passwd Functions.    (line 213)
-* ENVIRON array <1>:                     Internals.           (line 149)
+* ENVIRON array <1>:                     Internals.           (line 140)
 * ENVIRON array:                         Auto-set.            (line  60)
 * environment variables:                 Auto-set.            (line  60)
 * epoch, definition of:                  Glossary.            (line 239)
@@ -25645,7 +25635,7 @@ Index
 * equals sign (=), == operator:          Comparison Operators.
                                                               (line  11)
 * EREs (Extended Regular Expressions):   Bracket Expressions. (line  24)
-* ERRNO variable <1>:                    Internals.           (line 139)
+* ERRNO variable <1>:                    Internals.           (line 130)
 * ERRNO variable <2>:                    TCP/IP Networking.   (line  54)
 * ERRNO variable <3>:                    Auto-set.            (line  72)
 * ERRNO variable <4>:                    BEGINFILE/ENDFILE.   (line  26)
@@ -25694,7 +25684,7 @@ Index
                                                               (line   9)
 * expressions, selecting:                Conditional Exp.     (line   6)
 * Extended Regular Expressions (EREs):   Bracket Expressions. (line  24)
-* eXtensible Markup Language (XML):      Internals.           (line 160)
+* eXtensible Markup Language (XML):      Internals.           (line 151)
 * extension() function (gawk):           Using Internal File Ops.
                                                               (line  15)
 * extensions, Brian Kernighan's awk <1>: Other Versions.      (line  13)
@@ -25916,7 +25906,7 @@ Index
 * functions, names of <1>:               Definition Syntax.   (line  20)
 * functions, names of:                   Arrays.              (line  18)
 * functions, recursive:                  Definition Syntax.   (line  73)
-* functions, return values, setting:     Internals.           (line 139)
+* functions, return values, setting:     Internals.           (line 130)
 * functions, string-translation:         I18N Functions.      (line   6)
 * functions, undefined:                  Pass By Value/Reference.
                                                               (line  71)
@@ -26030,12 +26020,11 @@ Index
 * gensub() function (gawk):              Using Constant Regexps.
                                                               (line  43)
 * gensub() function (gawk), escape processing: Gory Details.  (line   6)
-* get_actual_argument() internal function: Internals.         (line 125)
-* get_argument() internal function:      Internals.           (line 120)
-* get_array_argument() internal macro:   Internals.           (line 136)
-* get_curfunc_arg_count() internal function: Internals.       (line  42)
-* get_record() input method:             Internals.           (line 160)
-* get_scalar_argument() internal macro:  Internals.           (line 133)
+* get_actual_argument() internal function: Internals.         (line 116)
+* get_argument() internal function:      Internals.           (line 111)
+* get_array_argument() internal macro:   Internals.           (line 127)
+* get_record() input method:             Internals.           (line 151)
+* get_scalar_argument() internal macro:  Internals.           (line 124)
 * getaddrinfo() function (C library):    TCP/IP Networking.   (line  38)
 * getgrent() function (C library):       Group Functions.     (line   6)
 * getgrent() user-defined function:      Group Functions.     (line   6)
@@ -26188,37 +26177,36 @@ Index
 * integers:                              Basic Data Typing.   (line  21)
 * integers, unsigned:                    Basic Data Typing.   (line  30)
 * interacting with other programs:       I/O Functions.       (line  63)
-* internal constant, INVALID_HANDLE:     Internals.           (line 160)
-* internal function, assoc_clear():      Internals.           (line  75)
-* internal function, assoc_lookup():     Internals.           (line  79)
-* internal function, dupnode():          Internals.           (line  96)
+* internal constant, INVALID_HANDLE:     Internals.           (line 151)
+* internal function, assoc_clear():      Internals.           (line  68)
+* internal function, assoc_lookup():     Internals.           (line  72)
+* internal function, dupnode():          Internals.           (line  87)
 * internal function, force_number():     Internals.           (line  27)
 * internal function, force_string():     Internals.           (line  32)
 * internal function, force_wstring():    Internals.           (line  37)
-* internal function, get_actual_argument(): Internals.        (line 125)
-* internal function, get_argument():     Internals.           (line 120)
-* internal function, get_curfunc_arg_count(): Internals.      (line  42)
-* internal function, iop_alloc():        Internals.           (line 160)
-* internal function, make_builtin():     Internals.           (line 106)
-* internal function, make_number():      Internals.           (line  91)
-* internal function, make_string():      Internals.           (line  86)
-* internal function, register_deferred_variable(): Internals. (line 149)
-* internal function, register_open_hook(): Internals.         (line 160)
-* internal function, unref():            Internals.           (line 101)
-* internal function, update_ERRNO():     Internals.           (line 139)
-* internal function, update_ERRNO_saved(): Internals.         (line 144)
-* internal macro, get_array_argument():  Internals.           (line 136)
-* internal macro, get_scalar_argument(): Internals.           (line 133)
-* internal structure, IOBUF:             Internals.           (line 160)
+* internal function, get_actual_argument(): Internals.        (line 116)
+* internal function, get_argument():     Internals.           (line 111)
+* internal function, iop_alloc():        Internals.           (line 151)
+* internal function, make_builtin():     Internals.           (line  97)
+* internal function, make_number():      Internals.           (line  82)
+* internal function, make_string():      Internals.           (line  77)
+* internal function, register_deferred_variable(): Internals. (line 140)
+* internal function, register_open_hook(): Internals.         (line 151)
+* internal function, unref():            Internals.           (line  92)
+* internal function, update_ERRNO():     Internals.           (line 130)
+* internal function, update_ERRNO_saved(): Internals.         (line 135)
+* internal macro, get_array_argument():  Internals.           (line 127)
+* internal macro, get_scalar_argument(): Internals.           (line 124)
+* internal structure, IOBUF:             Internals.           (line 151)
 * internal type, AWKNUM:                 Internals.           (line  19)
 * internal type, NODE:                   Internals.           (line  23)
-* internal variable, nargs:              Internals.           (line  49)
-* internal variable, stlen:              Internals.           (line  53)
-* internal variable, stptr:              Internals.           (line  53)
-* internal variable, type:               Internals.           (line  66)
-* internal variable, vname:              Internals.           (line  71)
-* internal variable, wstlen:             Internals.           (line  61)
-* internal variable, wstptr:             Internals.           (line  61)
+* internal variable, nargs:              Internals.           (line  42)
+* internal variable, stlen:              Internals.           (line  46)
+* internal variable, stptr:              Internals.           (line  46)
+* internal variable, type:               Internals.           (line  59)
+* internal variable, vname:              Internals.           (line  64)
+* internal variable, wstlen:             Internals.           (line  54)
+* internal variable, wstptr:             Internals.           (line  54)
 * internationalization <1>:              I18N and L10N.       (line   6)
 * internationalization:                  I18N Functions.      (line   6)
 * internationalization, localization <1>: Internationalization.
@@ -26238,10 +26226,10 @@ Index
 * interpreted programs <1>:              Glossary.            (line 361)
 * interpreted programs:                  Basic High Level.    (line  14)
 * interval expressions:                  Regexp Operators.    (line 116)
-* INVALID_HANDLE internal constant:      Internals.           (line 160)
+* INVALID_HANDLE internal constant:      Internals.           (line 151)
 * inventory-shipped file:                Sample Data Files.   (line  32)
-* IOBUF internal structure:              Internals.           (line 160)
-* iop_alloc() internal function:         Internals.           (line 160)
+* IOBUF internal structure:              Internals.           (line 151)
+* iop_alloc() internal function:         Internals.           (line 151)
 * isarray() function (gawk):             Type Functions.      (line  11)
 * ISO:                                   Glossary.            (line 372)
 * ISO 8859-1:                            Glossary.            (line 141)
@@ -26368,9 +26356,9 @@ Index
 * lvalues/rvalues:                       Assignment Ops.      (line  32)
 * mailing labels, printing:              Labels Program.      (line   6)
 * mailing list, GNITS:                   Acknowledgments.     (line  52)
-* make_builtin() internal function:      Internals.           (line 106)
-* make_number() internal function:       Internals.           (line  91)
-* make_string() internal function:       Internals.           (line  86)
+* make_builtin() internal function:      Internals.           (line  97)
+* make_number() internal function:       Internals.           (line  82)
+* make_string() internal function:       Internals.           (line  77)
 * mark parity:                           Ordinal Functions.   (line  45)
 * marked string extraction (internationalization): String Extraction.
                                                               (line   6)
@@ -26382,10 +26370,10 @@ Index
 * matching, expressions, See comparison expressions: Typing and Comparison.
                                                               (line   9)
 * matching, leftmost longest:            Multiple Line.       (line  26)
-* matching, null strings:                Gory Details.        (line  96)
+* matching, null strings:                Gory Details.        (line  95)
 * mawk program:                          Other Versions.      (line  35)
 * McPhee, Patrick:                       Contributors.        (line 100)
-* memory, releasing:                     Internals.           (line 101)
+* memory, releasing:                     Internals.           (line  92)
 * message object files:                  Explaining gettext.  (line  41)
 * message object files, converting from portable object files: I18N Example.
                                                               (line  62)
@@ -26407,7 +26395,7 @@ Index
 * namespace issues <1>:                  Library Names.       (line   6)
 * namespace issues:                      Arrays.              (line  18)
 * namespace issues, functions:           Definition Syntax.   (line  20)
-* nargs internal variable:               Internals.           (line  49)
+* nargs internal variable:               Internals.           (line  42)
 * nawk utility:                          Names.               (line  17)
 * negative zero:                         Unexpected Results.  (line  28)
 * NetBSD:                                Glossary.            (line 611)
@@ -26449,7 +26437,7 @@ Index
                                                               (line  49)
 * noassign.awk program:                  Ignoring Assigns.    (line  15)
 * NODE internal type:                    Internals.           (line  23)
-* nodes, duplicating:                    Internals.           (line  96)
+* nodes, duplicating:                    Internals.           (line  87)
 * not Boolean-logic operator:            Boolean Ops.         (line   6)
 * NR variable <1>:                       Auto-set.            (line 118)
 * NR variable:                           Records.             (line   6)
@@ -26463,14 +26451,14 @@ 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  96)
+* null strings, matching:                Gory Details.        (line  95)
 * null strings, quoting and:             Quoting.             (line  62)
 * number sign (#), #! (executable scripts): Executable Scripts.
                                                               (line   6)
 * number sign (#), #! (executable scripts), portability issues with: 
Executable Scripts.
                                                               (line   6)
 * number sign (#), commenting:           Comments.            (line   6)
-* numbers:                               Internals.           (line  91)
+* numbers:                               Internals.           (line  82)
 * numbers, as array subscripts:          Numeric Array Subscripts.
                                                               (line   6)
 * numbers, as values of characters:      Ordinal Functions.   (line   6)
@@ -26573,7 +26561,7 @@ Index
                                                               (line  36)
 * P1003.1 POSIX standard:                Glossary.            (line 454)
 * P1003.2 POSIX standard:                Glossary.            (line 454)
-* parameters, number of:                 Internals.           (line  49)
+* parameters, number of:                 Internals.           (line  42)
 * parentheses ():                        Regexp Operators.    (line  79)
 * parentheses (), pgawk program:         Profiling.           (line 141)
 * password file:                         Passwd Functions.    (line  16)
@@ -26736,7 +26724,7 @@ Index
 * private variables:                     Library Names.       (line  11)
 * processes, two-way communications with: Two-way I/O.        (line  23)
 * processing data:                       Basic High Level.    (line   6)
-* PROCINFO array <1>:                    Internals.           (line 149)
+* PROCINFO array <1>:                    Internals.           (line 140)
 * PROCINFO array <2>:                    Id Program.          (line  15)
 * PROCINFO array <3>:                    Group Functions.     (line   6)
 * PROCINFO array <4>:                    Passwd Functions.    (line   6)
@@ -26832,8 +26820,8 @@ Index
 * regexp constants, slashes vs. quotes:  Computed Regexps.    (line  28)
 * regexp constants, vs. string constants: Computed Regexps.   (line  38)
 * regexp, See regular expressions:       Regexp.              (line   6)
-* register_deferred_variable() internal function: Internals.  (line 149)
-* register_open_hook() internal function: Internals.          (line 160)
+* register_deferred_variable() internal function: Internals.  (line 140)
+* register_open_hook() internal function: Internals.          (line 151)
 * regular expressions:                   Regexp.              (line   6)
 * regular expressions as field separators: Field Separators.  (line  50)
 * regular expressions, anchors in:       Regexp Operators.    (line  22)
@@ -27059,8 +27047,8 @@ Index
                                                               (line  68)
 * stepi debugger command:                Dgawk Execution Control.
                                                               (line  76)
-* stlen internal variable:               Internals.           (line  53)
-* stptr internal variable:               Internals.           (line  53)
+* stlen internal variable:               Internals.           (line  46)
+* stptr internal variable:               Internals.           (line  46)
 * stream editors <1>:                    Simple Sed.          (line   6)
 * stream editors:                        Field Splitting Summary.
                                                               (line  47)
@@ -27071,7 +27059,7 @@ Index
                                                               (line   6)
 * string operators:                      Concatenation.       (line   9)
 * string-matching operators:             Regexp Usage.        (line  19)
-* strings:                               Internals.           (line  86)
+* strings:                               Internals.           (line  77)
 * strings, converting <1>:               Bitwise Functions.   (line 107)
 * strings, converting:                   Conversion.          (line   6)
 * strings, converting, numbers to:       User-modified.       (line  28)
@@ -27201,7 +27189,7 @@ Index
 * trunc-mod operation:                   Arithmetic Ops.      (line  66)
 * truth values:                          Truth Values.        (line   6)
 * type conversion:                       Conversion.          (line  21)
-* type internal variable:                Internals.           (line  66)
+* type internal variable:                Internals.           (line  59)
 * u debugger command (alias for until):  Dgawk Execution Control.
                                                               (line  83)
 * undefined functions:                   Pass By Value/Reference.
@@ -27227,15 +27215,15 @@ Index
                                                               (line  72)
 * Unix, awk scripts and:                 Executable Scripts.  (line   6)
 * UNIXROOT variable, on OS/2 systems:    PC Using.            (line  17)
-* unref() internal function:             Internals.           (line 101)
+* unref() internal function:             Internals.           (line  92)
 * unsigned integers:                     Basic Data Typing.   (line  30)
 * until debugger command:                Dgawk Execution Control.
                                                               (line  83)
 * unwatch debugger command:              Viewing And Changing Data.
                                                               (line  84)
 * up debugger command:                   Dgawk Stack.         (line  33)
-* update_ERRNO() internal function:      Internals.           (line 139)
-* update_ERRNO_saved() internal function: Internals.          (line 144)
+* update_ERRNO() internal function:      Internals.           (line 130)
+* update_ERRNO_saved() internal function: Internals.          (line 135)
 * user database, reading:                Passwd Functions.    (line   6)
 * user-defined, functions:               User-defined.        (line   6)
 * user-defined, functions, counts:       Profiling.           (line 132)
@@ -27286,7 +27274,7 @@ Index
 * vertical bar (|), || operator <1>:     Precedence.          (line  89)
 * vertical bar (|), || operator:         Boolean Ops.         (line  57)
 * Vinschen, Corinna:                     Acknowledgments.     (line  60)
-* vname internal variable:               Internals.           (line  71)
+* vname internal variable:               Internals.           (line  64)
 * w debugger command (alias for watch):  Viewing And Changing Data.
                                                               (line  67)
 * w utility:                             Constant Size.       (line  22)
@@ -27320,11 +27308,11 @@ Index
 * words, counting:                       Wc Program.          (line   6)
 * words, duplicate, searching for:       Dupword Program.     (line   6)
 * words, usage counts, generating:       Word Sorting.        (line   6)
-* wstlen internal variable:              Internals.           (line  61)
-* wstptr internal variable:              Internals.           (line  61)
+* wstlen internal variable:              Internals.           (line  54)
+* wstptr internal variable:              Internals.           (line  54)
 * xgawk:                                 Other Versions.      (line 119)
 * xgettext utility:                      String Extraction.   (line  13)
-* XML (eXtensible Markup Language):      Internals.           (line 160)
+* XML (eXtensible Markup Language):      Internals.           (line 151)
 * XOR bitwise operation:                 Bitwise Functions.   (line   6)
 * xor() function (gawk):                 Bitwise Functions.   (line  54)
 * Yawitz, Efraim:                        Contributors.        (line 106)
@@ -27361,414 +27349,414 @@ Index
 
 
 Tag Table:
-Node: Top1346
-Node: Foreword33440
-Node: Preface37785
-Ref: Preface-Footnote-140752
-Ref: Preface-Footnote-240858
-Node: History41090
-Node: Names43481
-Ref: Names-Footnote-144958
-Node: This Manual45030
-Ref: This Manual-Footnote-149977
-Node: Conventions50077
-Node: Manual History52211
-Ref: Manual History-Footnote-155481
-Ref: Manual History-Footnote-255522
-Node: How To Contribute55596
-Node: Acknowledgments56740
-Node: Getting Started61071
-Node: Running gawk63450
-Node: One-shot64636
-Node: Read Terminal65861
-Ref: Read Terminal-Footnote-167511
-Ref: Read Terminal-Footnote-267787
-Node: Long67958
-Node: Executable Scripts69334
-Ref: Executable Scripts-Footnote-171203
-Ref: Executable Scripts-Footnote-271305
-Node: Comments71756
-Node: Quoting74223
-Node: DOS Quoting78846
-Node: Sample Data Files79521
-Node: Very Simple82553
-Node: Two Rules87152
-Node: More Complex89299
-Ref: More Complex-Footnote-192229
-Node: Statements/Lines92314
-Ref: Statements/Lines-Footnote-196776
-Node: Other Features97041
-Node: When97969
-Node: Invoking Gawk100116
-Node: Command Line101501
-Node: Options102284
-Ref: Options-Footnote-1115562
-Node: Other Arguments115587
-Node: Naming Standard Input118245
-Node: Environment Variables119339
-Node: AWKPATH Variable119783
-Ref: AWKPATH Variable-Footnote-1122380
-Node: Other Environment Variables122640
-Node: Exit Status124980
-Node: Include Files125655
-Node: Obsolete129140
-Node: Undocumented129826
-Node: Regexp130067
-Node: Regexp Usage131456
-Node: Escape Sequences133482
-Node: Regexp Operators139245
-Ref: Regexp Operators-Footnote-1146442
-Ref: Regexp Operators-Footnote-2146589
-Node: Bracket Expressions146687
-Ref: table-char-classes148577
-Node: GNU Regexp Operators151100
-Node: Case-sensitivity154823
-Ref: Case-sensitivity-Footnote-1157791
-Ref: Case-sensitivity-Footnote-2158026
-Node: Leftmost Longest158134
-Node: Computed Regexps159335
-Node: Reading Files162745
-Node: Records164686
-Ref: Records-Footnote-1173360
-Node: Fields173397
-Ref: Fields-Footnote-1176430
-Node: Nonconstant Fields176516
-Node: Changing Fields178718
-Node: Field Separators184696
-Node: Default Field Splitting187325
-Node: Regexp Field Splitting188442
-Node: Single Character Fields191784
-Node: Command Line Field Separator192843
-Node: Field Splitting Summary196284
-Ref: Field Splitting Summary-Footnote-1199476
-Node: Constant Size199577
-Node: Splitting By Content204161
-Ref: Splitting By Content-Footnote-1207887
-Node: Multiple Line207927
-Ref: Multiple Line-Footnote-1213774
-Node: Getline213953
-Node: Plain Getline216181
-Node: Getline/Variable218270
-Node: Getline/File219411
-Node: Getline/Variable/File220733
-Ref: Getline/Variable/File-Footnote-1222332
-Node: Getline/Pipe222419
-Node: Getline/Variable/Pipe224979
-Node: Getline/Coprocess226086
-Node: Getline/Variable/Coprocess227329
-Node: Getline Notes228043
-Node: Getline Summary229985
-Ref: table-getline-variants230328
-Node: Command line directories231184
-Node: Printing231809
-Node: Print233440
-Node: Print Examples234777
-Node: Output Separators237561
-Node: OFMT239321
-Node: Printf240679
-Node: Basic Printf241585
-Node: Control Letters243124
-Node: Format Modifiers246936
-Node: Printf Examples252945
-Node: Redirection255660
-Node: Special Files262644
-Node: Special FD263177
-Ref: Special FD-Footnote-1266802
-Node: Special Network266876
-Node: Special Caveats267726
-Node: Close Files And Pipes268522
-Ref: Close Files And Pipes-Footnote-1275545
-Ref: Close Files And Pipes-Footnote-2275693
-Node: Expressions275843
-Node: Values276975
-Node: Constants277651
-Node: Scalar Constants278331
-Ref: Scalar Constants-Footnote-1279190
-Node: Nondecimal-numbers279372
-Node: Regexp Constants282431
-Node: Using Constant Regexps282906
-Node: Variables285961
-Node: Using Variables286616
-Node: Assignment Options288340
-Node: Conversion290212
-Ref: table-locale-affects295588
-Ref: Conversion-Footnote-1296212
-Node: All Operators296321
-Node: Arithmetic Ops296951
-Node: Concatenation299456
-Ref: Concatenation-Footnote-1302249
-Node: Assignment Ops302369
-Ref: table-assign-ops307357
-Node: Increment Ops308765
-Node: Truth Values and Conditions312235
-Node: Truth Values313318
-Node: Typing and Comparison314367
-Node: Variable Typing315156
-Ref: Variable Typing-Footnote-1319053
-Node: Comparison Operators319175
-Ref: table-relational-ops319585
-Node: POSIX String Comparison323134
-Ref: POSIX String Comparison-Footnote-1324090
-Node: Boolean Ops324228
-Ref: Boolean Ops-Footnote-1328306
-Node: Conditional Exp328397
-Node: Function Calls330129
-Node: Precedence333723
-Node: Locales337392
-Node: Patterns and Actions338481
-Node: Pattern Overview339535
-Node: Regexp Patterns341201
-Node: Expression Patterns341744
-Node: Ranges345318
-Node: BEGIN/END348284
-Node: Using BEGIN/END349046
-Ref: Using BEGIN/END-Footnote-1351777
-Node: I/O And BEGIN/END351883
-Node: BEGINFILE/ENDFILE354165
-Node: Empty356998
-Node: Using Shell Variables357314
-Node: Action Overview359599
-Node: Statements361956
-Node: If Statement363810
-Node: While Statement365309
-Node: Do Statement367353
-Node: For Statement368509
-Node: Switch Statement371661
-Node: Break Statement373758
-Node: Continue Statement375748
-Node: Next Statement377535
-Node: Nextfile Statement379925
-Node: Exit Statement382222
-Node: Built-in Variables384638
-Node: User-modified385733
-Ref: User-modified-Footnote-1393759
-Node: Auto-set393821
-Ref: Auto-set-Footnote-1403112
-Node: ARGC and ARGV403317
-Node: Arrays407168
-Node: Array Basics408673
-Node: Array Intro409384
-Node: Reference to Elements413702
-Node: Assigning Elements415972
-Node: Array Example416463
-Node: Scanning an Array418195
-Node: Delete420861
-Ref: Delete-Footnote-1423296
-Node: Numeric Array Subscripts423353
-Node: Uninitialized Subscripts425536
-Node: Multi-dimensional427164
-Node: Multi-scanning430258
-Node: Arrays of Arrays431842
-Node: Functions436419
-Node: Built-in437241
-Node: Calling Built-in438319
-Node: Numeric Functions440307
-Ref: Numeric Functions-Footnote-1444072
-Ref: Numeric Functions-Footnote-2444429
-Ref: Numeric Functions-Footnote-3444477
-Node: String Functions444746
-Ref: String Functions-Footnote-1468243
-Ref: String Functions-Footnote-2468372
-Ref: String Functions-Footnote-3468620
-Node: Gory Details468707
-Ref: table-sub-escapes470386
-Ref: table-posix-sub471700
-Ref: table-gensub-escapes472613
-Node: I/O Functions473784
-Ref: I/O Functions-Footnote-1480439
-Node: Time Functions480586
-Ref: Time Functions-Footnote-1491478
-Ref: Time Functions-Footnote-2491546
-Ref: Time Functions-Footnote-3491704
-Ref: Time Functions-Footnote-4491815
-Ref: Time Functions-Footnote-5491927
-Ref: Time Functions-Footnote-6492154
-Node: Bitwise Functions492420
-Ref: table-bitwise-ops492978
-Ref: Bitwise Functions-Footnote-1497138
-Node: Type Functions497322
-Node: I18N Functions497792
-Node: User-defined499419
-Node: Definition Syntax500223
-Ref: Definition Syntax-Footnote-1505133
-Node: Function Example505202
-Node: Function Caveats507796
-Node: Calling A Function508217
-Node: Variable Scope509332
-Node: Pass By Value/Reference511307
-Node: Return Statement514747
-Node: Dynamic Typing517728
-Node: Indirect Calls518463
-Node: Internationalization528148
-Node: I18N and L10N529574
-Node: Explaining gettext530260
-Ref: Explaining gettext-Footnote-1535326
-Ref: Explaining gettext-Footnote-2535510
-Node: Programmer i18n535675
-Node: Translator i18n539875
-Node: String Extraction540668
-Ref: String Extraction-Footnote-1541629
-Node: Printf Ordering541715
-Ref: Printf Ordering-Footnote-1544499
-Node: I18N Portability544563
-Ref: I18N Portability-Footnote-1547012
-Node: I18N Example547075
-Ref: I18N Example-Footnote-1549710
-Node: Gawk I18N549782
-Node: Advanced Features550399
-Node: Nondecimal Data551912
-Node: Array Sorting553495
-Node: Controlling Array Traversal554195
-Node: Controlling Scanning With A Function554942
-Node: Controlling Scanning562645
-Ref: Controlling Scanning-Footnote-1566446
-Node: Array Sorting Functions566762
-Ref: Array Sorting Functions-Footnote-1570278
-Ref: Array Sorting Functions-Footnote-2570371
-Node: Two-way I/O570565
-Ref: Two-way I/O-Footnote-1575997
-Node: TCP/IP Networking576067
-Node: Profiling578911
-Node: Library Functions586385
-Ref: Library Functions-Footnote-1589392
-Node: Library Names589563
-Ref: Library Names-Footnote-1593034
-Ref: Library Names-Footnote-2593254
-Node: General Functions593340
-Node: Strtonum Function594293
-Node: Assert Function597223
-Node: Round Function600549
-Node: Cliff Random Function602092
-Node: Ordinal Functions603108
-Ref: Ordinal Functions-Footnote-1606178
-Ref: Ordinal Functions-Footnote-2606430
-Node: Join Function606639
-Ref: Join Function-Footnote-1608410
-Node: Gettimeofday Function608610
-Node: Data File Management612325
-Node: Filetrans Function612957
-Node: Rewind Function617096
-Node: File Checking618483
-Node: Empty Files619577
-Node: Ignoring Assigns621807
-Node: Getopt Function623360
-Ref: Getopt Function-Footnote-1634664
-Node: Passwd Functions634867
-Ref: Passwd Functions-Footnote-1643842
-Node: Group Functions643930
-Node: Walking Arrays652014
-Node: Sample Programs653583
-Node: Running Examples654248
-Node: Clones654976
-Node: Cut Program656200
-Node: Egrep Program666045
-Ref: Egrep Program-Footnote-1673818
-Node: Id Program673928
-Node: Split Program677544
-Ref: Split Program-Footnote-1681063
-Node: Tee Program681191
-Node: Uniq Program683994
-Node: Wc Program691423
-Ref: Wc Program-Footnote-1695689
-Ref: Wc Program-Footnote-2695889
-Node: Miscellaneous Programs695981
-Node: Dupword Program697169
-Node: Alarm Program699200
-Node: Translate Program703949
-Ref: Translate Program-Footnote-1708336
-Ref: Translate Program-Footnote-2708564
-Node: Labels Program708698
-Ref: Labels Program-Footnote-1712069
-Node: Word Sorting712153
-Node: History Sorting716037
-Node: Extract Program717876
-Ref: Extract Program-Footnote-1725359
-Node: Simple Sed725487
-Node: Igawk Program728549
-Ref: Igawk Program-Footnote-1743706
-Ref: Igawk Program-Footnote-2743907
-Node: Anagram Program744045
-Node: Signature Program747113
-Node: Debugger748213
-Node: Debugging749124
-Node: Debugging Concepts749537
-Node: Debugging Terms751393
-Node: Awk Debugging754016
-Node: Sample dgawk session754908
-Node: dgawk invocation755400
-Node: Finding The Bug756582
-Node: List of Debugger Commands763068
-Node: Breakpoint Control764379
-Node: Dgawk Execution Control768015
-Node: Viewing And Changing Data771366
-Node: Dgawk Stack774703
-Node: Dgawk Info776163
-Node: Miscellaneous Dgawk Commands780111
-Node: Readline Support785539
-Node: Dgawk Limitations786377
-Node: Language History788566
-Node: V7/SVR3.1790078
-Node: SVR4792399
-Node: POSIX793841
-Node: BTL794849
-Node: POSIX/GNU795583
-Node: Common Extensions800734
-Node: Ranges and Locales801841
-Ref: Ranges and Locales-Footnote-1806448
-Node: Contributors806669
-Node: Installation810931
-Node: Gawk Distribution811825
-Node: Getting812309
-Node: Extracting813135
-Node: Distribution contents814827
-Node: Unix Installation820049
-Node: Quick Installation820666
-Node: Additional Configuration Options822628
-Node: Configuration Philosophy824105
-Node: Non-Unix Installation826447
-Node: PC Installation826905
-Node: PC Binary Installation828204
-Node: PC Compiling830052
-Node: PC Testing832996
-Node: PC Using834172
-Node: Cygwin838357
-Node: MSYS839357
-Node: VMS Installation839871
-Node: VMS Compilation840474
-Ref: VMS Compilation-Footnote-1841481
-Node: VMS Installation Details841539
-Node: VMS Running843174
-Node: VMS Old Gawk844781
-Node: Bugs845255
-Node: Other Versions849108
-Node: Notes854389
-Node: Compatibility Mode855081
-Node: Additions855864
-Node: Accessing The Source856676
-Node: Adding Code858101
-Node: New Ports864068
-Node: Dynamic Extensions868181
-Node: Internals869557
-Node: Plugin License878660
-Node: Sample Library879294
-Node: Internal File Description879980
-Node: Internal File Ops883695
-Ref: Internal File Ops-Footnote-1888476
-Node: Using Internal File Ops888616
-Node: Future Extensions890993
-Node: Basic Concepts893497
-Node: Basic High Level894254
-Ref: Basic High Level-Footnote-1898289
-Node: Basic Data Typing898474
-Node: Floating Point Issues902999
-Node: String Conversion Precision904082
-Ref: String Conversion Precision-Footnote-1905782
-Node: Unexpected Results905891
-Node: POSIX Floating Point Problems907717
-Ref: POSIX Floating Point Problems-Footnote-1911422
-Node: Glossary911460
-Node: Copying936436
-Node: GNU Free Documentation License973993
-Node: Index999130
+Node: Top1345
+Node: Foreword33439
+Node: Preface37784
+Ref: Preface-Footnote-140751
+Ref: Preface-Footnote-240857
+Node: History41089
+Node: Names43480
+Ref: Names-Footnote-144957
+Node: This Manual45029
+Ref: This Manual-Footnote-149976
+Node: Conventions50076
+Node: Manual History52210
+Ref: Manual History-Footnote-155480
+Ref: Manual History-Footnote-255521
+Node: How To Contribute55595
+Node: Acknowledgments56739
+Node: Getting Started61070
+Node: Running gawk63449
+Node: One-shot64635
+Node: Read Terminal65860
+Ref: Read Terminal-Footnote-167510
+Ref: Read Terminal-Footnote-267786
+Node: Long67957
+Node: Executable Scripts69333
+Ref: Executable Scripts-Footnote-171202
+Ref: Executable Scripts-Footnote-271304
+Node: Comments71755
+Node: Quoting74222
+Node: DOS Quoting78845
+Node: Sample Data Files79520
+Node: Very Simple82552
+Node: Two Rules87151
+Node: More Complex89298
+Ref: More Complex-Footnote-192228
+Node: Statements/Lines92313
+Ref: Statements/Lines-Footnote-196775
+Node: Other Features97040
+Node: When97968
+Node: Invoking Gawk100115
+Node: Command Line101500
+Node: Options102283
+Ref: Options-Footnote-1115561
+Node: Other Arguments115586
+Node: Naming Standard Input118244
+Node: Environment Variables119338
+Node: AWKPATH Variable119782
+Ref: AWKPATH Variable-Footnote-1122379
+Node: Other Environment Variables122639
+Node: Exit Status124979
+Node: Include Files125654
+Node: Obsolete129139
+Node: Undocumented129825
+Node: Regexp130066
+Node: Regexp Usage131455
+Node: Escape Sequences133481
+Node: Regexp Operators139244
+Ref: Regexp Operators-Footnote-1146441
+Ref: Regexp Operators-Footnote-2146588
+Node: Bracket Expressions146686
+Ref: table-char-classes148576
+Node: GNU Regexp Operators151099
+Node: Case-sensitivity154822
+Ref: Case-sensitivity-Footnote-1157790
+Ref: Case-sensitivity-Footnote-2158025
+Node: Leftmost Longest158133
+Node: Computed Regexps159334
+Node: Reading Files162744
+Node: Records164685
+Ref: Records-Footnote-1173359
+Node: Fields173396
+Ref: Fields-Footnote-1176429
+Node: Nonconstant Fields176515
+Node: Changing Fields178717
+Node: Field Separators184695
+Node: Default Field Splitting187324
+Node: Regexp Field Splitting188441
+Node: Single Character Fields191783
+Node: Command Line Field Separator192842
+Node: Field Splitting Summary196283
+Ref: Field Splitting Summary-Footnote-1199475
+Node: Constant Size199576
+Node: Splitting By Content204160
+Ref: Splitting By Content-Footnote-1207886
+Node: Multiple Line207926
+Ref: Multiple Line-Footnote-1213773
+Node: Getline213952
+Node: Plain Getline216180
+Node: Getline/Variable218269
+Node: Getline/File219410
+Node: Getline/Variable/File220732
+Ref: Getline/Variable/File-Footnote-1222331
+Node: Getline/Pipe222418
+Node: Getline/Variable/Pipe224978
+Node: Getline/Coprocess226085
+Node: Getline/Variable/Coprocess227328
+Node: Getline Notes228042
+Node: Getline Summary229984
+Ref: table-getline-variants230327
+Node: Command line directories231183
+Node: Printing231808
+Node: Print233439
+Node: Print Examples234776
+Node: Output Separators237560
+Node: OFMT239320
+Node: Printf240678
+Node: Basic Printf241584
+Node: Control Letters243123
+Node: Format Modifiers246935
+Node: Printf Examples252944
+Node: Redirection255659
+Node: Special Files262643
+Node: Special FD263176
+Ref: Special FD-Footnote-1266801
+Node: Special Network266875
+Node: Special Caveats267725
+Node: Close Files And Pipes268521
+Ref: Close Files And Pipes-Footnote-1275544
+Ref: Close Files And Pipes-Footnote-2275692
+Node: Expressions275842
+Node: Values276974
+Node: Constants277650
+Node: Scalar Constants278330
+Ref: Scalar Constants-Footnote-1279189
+Node: Nondecimal-numbers279371
+Node: Regexp Constants282430
+Node: Using Constant Regexps282905
+Node: Variables285960
+Node: Using Variables286615
+Node: Assignment Options288339
+Node: Conversion290211
+Ref: table-locale-affects295587
+Ref: Conversion-Footnote-1296211
+Node: All Operators296320
+Node: Arithmetic Ops296950
+Node: Concatenation299455
+Ref: Concatenation-Footnote-1302248
+Node: Assignment Ops302368
+Ref: table-assign-ops307356
+Node: Increment Ops308764
+Node: Truth Values and Conditions312234
+Node: Truth Values313317
+Node: Typing and Comparison314366
+Node: Variable Typing315155
+Ref: Variable Typing-Footnote-1319052
+Node: Comparison Operators319174
+Ref: table-relational-ops319584
+Node: POSIX String Comparison323133
+Ref: POSIX String Comparison-Footnote-1324089
+Node: Boolean Ops324227
+Ref: Boolean Ops-Footnote-1328305
+Node: Conditional Exp328396
+Node: Function Calls330128
+Node: Precedence333722
+Node: Locales337391
+Node: Patterns and Actions338480
+Node: Pattern Overview339534
+Node: Regexp Patterns341200
+Node: Expression Patterns341743
+Node: Ranges345317
+Node: BEGIN/END348283
+Node: Using BEGIN/END349045
+Ref: Using BEGIN/END-Footnote-1351776
+Node: I/O And BEGIN/END351882
+Node: BEGINFILE/ENDFILE354164
+Node: Empty356997
+Node: Using Shell Variables357313
+Node: Action Overview359598
+Node: Statements361955
+Node: If Statement363809
+Node: While Statement365308
+Node: Do Statement367352
+Node: For Statement368508
+Node: Switch Statement371660
+Node: Break Statement373757
+Node: Continue Statement375747
+Node: Next Statement377534
+Node: Nextfile Statement379924
+Node: Exit Statement382221
+Node: Built-in Variables384637
+Node: User-modified385732
+Ref: User-modified-Footnote-1393758
+Node: Auto-set393820
+Ref: Auto-set-Footnote-1403111
+Node: ARGC and ARGV403316
+Node: Arrays407167
+Node: Array Basics408672
+Node: Array Intro409383
+Node: Reference to Elements413701
+Node: Assigning Elements415971
+Node: Array Example416462
+Node: Scanning an Array418194
+Node: Delete420860
+Ref: Delete-Footnote-1423295
+Node: Numeric Array Subscripts423352
+Node: Uninitialized Subscripts425535
+Node: Multi-dimensional427163
+Node: Multi-scanning430257
+Node: Arrays of Arrays431841
+Node: Functions436418
+Node: Built-in437240
+Node: Calling Built-in438318
+Node: Numeric Functions440306
+Ref: Numeric Functions-Footnote-1444071
+Ref: Numeric Functions-Footnote-2444428
+Ref: Numeric Functions-Footnote-3444476
+Node: String Functions444745
+Ref: String Functions-Footnote-1468242
+Ref: String Functions-Footnote-2468371
+Ref: String Functions-Footnote-3468619
+Node: Gory Details468706
+Ref: table-sub-escapes470385
+Ref: table-posix-sub471699
+Ref: table-gensub-escapes472612
+Node: I/O Functions473783
+Ref: I/O Functions-Footnote-1480438
+Node: Time Functions480585
+Ref: Time Functions-Footnote-1491477
+Ref: Time Functions-Footnote-2491545
+Ref: Time Functions-Footnote-3491703
+Ref: Time Functions-Footnote-4491814
+Ref: Time Functions-Footnote-5491926
+Ref: Time Functions-Footnote-6492153
+Node: Bitwise Functions492419
+Ref: table-bitwise-ops492977
+Ref: Bitwise Functions-Footnote-1497137
+Node: Type Functions497321
+Node: I18N Functions497791
+Node: User-defined499418
+Node: Definition Syntax500222
+Ref: Definition Syntax-Footnote-1505132
+Node: Function Example505201
+Node: Function Caveats507795
+Node: Calling A Function508216
+Node: Variable Scope509331
+Node: Pass By Value/Reference511306
+Node: Return Statement514746
+Node: Dynamic Typing517727
+Node: Indirect Calls518462
+Node: Internationalization528147
+Node: I18N and L10N529573
+Node: Explaining gettext530259
+Ref: Explaining gettext-Footnote-1535325
+Ref: Explaining gettext-Footnote-2535509
+Node: Programmer i18n535674
+Node: Translator i18n539874
+Node: String Extraction540667
+Ref: String Extraction-Footnote-1541628
+Node: Printf Ordering541714
+Ref: Printf Ordering-Footnote-1544498
+Node: I18N Portability544562
+Ref: I18N Portability-Footnote-1547011
+Node: I18N Example547074
+Ref: I18N Example-Footnote-1549709
+Node: Gawk I18N549781
+Node: Advanced Features550398
+Node: Nondecimal Data551911
+Node: Array Sorting553494
+Node: Controlling Array Traversal554194
+Node: Controlling Scanning With A Function554941
+Node: Controlling Scanning562644
+Ref: Controlling Scanning-Footnote-1566445
+Node: Array Sorting Functions566761
+Ref: Array Sorting Functions-Footnote-1570277
+Ref: Array Sorting Functions-Footnote-2570370
+Node: Two-way I/O570564
+Ref: Two-way I/O-Footnote-1575996
+Node: TCP/IP Networking576066
+Node: Profiling578910
+Node: Library Functions586384
+Ref: Library Functions-Footnote-1589391
+Node: Library Names589562
+Ref: Library Names-Footnote-1593033
+Ref: Library Names-Footnote-2593253
+Node: General Functions593339
+Node: Strtonum Function594292
+Node: Assert Function597222
+Node: Round Function600548
+Node: Cliff Random Function602091
+Node: Ordinal Functions603107
+Ref: Ordinal Functions-Footnote-1606177
+Ref: Ordinal Functions-Footnote-2606429
+Node: Join Function606638
+Ref: Join Function-Footnote-1608409
+Node: Gettimeofday Function608609
+Node: Data File Management612324
+Node: Filetrans Function612956
+Node: Rewind Function617095
+Node: File Checking618482
+Node: Empty Files619576
+Node: Ignoring Assigns621806
+Node: Getopt Function623359
+Ref: Getopt Function-Footnote-1634663
+Node: Passwd Functions634866
+Ref: Passwd Functions-Footnote-1643841
+Node: Group Functions643929
+Node: Walking Arrays652013
+Node: Sample Programs653582
+Node: Running Examples654247
+Node: Clones654975
+Node: Cut Program656199
+Node: Egrep Program666044
+Ref: Egrep Program-Footnote-1673817
+Node: Id Program673927
+Node: Split Program677543
+Ref: Split Program-Footnote-1681062
+Node: Tee Program681190
+Node: Uniq Program683993
+Node: Wc Program691422
+Ref: Wc Program-Footnote-1695688
+Ref: Wc Program-Footnote-2695888
+Node: Miscellaneous Programs695980
+Node: Dupword Program697168
+Node: Alarm Program699199
+Node: Translate Program703948
+Ref: Translate Program-Footnote-1708335
+Ref: Translate Program-Footnote-2708563
+Node: Labels Program708697
+Ref: Labels Program-Footnote-1712068
+Node: Word Sorting712152
+Node: History Sorting716036
+Node: Extract Program717875
+Ref: Extract Program-Footnote-1725358
+Node: Simple Sed725486
+Node: Igawk Program728548
+Ref: Igawk Program-Footnote-1743705
+Ref: Igawk Program-Footnote-2743906
+Node: Anagram Program744044
+Node: Signature Program747112
+Node: Debugger748212
+Node: Debugging749123
+Node: Debugging Concepts749536
+Node: Debugging Terms751392
+Node: Awk Debugging754015
+Node: Sample dgawk session754907
+Node: dgawk invocation755399
+Node: Finding The Bug756581
+Node: List of Debugger Commands763067
+Node: Breakpoint Control764378
+Node: Dgawk Execution Control768014
+Node: Viewing And Changing Data771365
+Node: Dgawk Stack774702
+Node: Dgawk Info776162
+Node: Miscellaneous Dgawk Commands780110
+Node: Readline Support785538
+Node: Dgawk Limitations786376
+Node: Language History788565
+Node: V7/SVR3.1790077
+Node: SVR4792398
+Node: POSIX793840
+Node: BTL794848
+Node: POSIX/GNU795582
+Node: Common Extensions800733
+Node: Ranges and Locales801840
+Ref: Ranges and Locales-Footnote-1806447
+Node: Contributors806668
+Node: Installation810930
+Node: Gawk Distribution811824
+Node: Getting812308
+Node: Extracting813134
+Node: Distribution contents814826
+Node: Unix Installation820048
+Node: Quick Installation820665
+Node: Additional Configuration Options822627
+Node: Configuration Philosophy824104
+Node: Non-Unix Installation826446
+Node: PC Installation826904
+Node: PC Binary Installation828203
+Node: PC Compiling830051
+Node: PC Testing832995
+Node: PC Using834171
+Node: Cygwin838356
+Node: MSYS839356
+Node: VMS Installation839870
+Node: VMS Compilation840473
+Ref: VMS Compilation-Footnote-1841480
+Node: VMS Installation Details841538
+Node: VMS Running843173
+Node: VMS Old Gawk844780
+Node: Bugs845254
+Node: Other Versions849107
+Node: Notes854388
+Node: Compatibility Mode855080
+Node: Additions855863
+Node: Accessing The Source856675
+Node: Adding Code858100
+Node: New Ports864067
+Node: Dynamic Extensions868180
+Node: Internals869556
+Node: Plugin License878075
+Node: Sample Library878709
+Node: Internal File Description879395
+Node: Internal File Ops883110
+Ref: Internal File Ops-Footnote-1887834
+Node: Using Internal File Ops887974
+Node: Future Extensions890351
+Node: Basic Concepts892855
+Node: Basic High Level893612
+Ref: Basic High Level-Footnote-1897647
+Node: Basic Data Typing897832
+Node: Floating Point Issues902357
+Node: String Conversion Precision903440
+Ref: String Conversion Precision-Footnote-1905140
+Node: Unexpected Results905249
+Node: POSIX Floating Point Problems907075
+Ref: POSIX Floating Point Problems-Footnote-1910780
+Node: Glossary910818
+Node: Copying935794
+Node: GNU Free Documentation License973351
+Node: Index998488
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index a74773c..aa36bbe 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -29048,22 +29048,12 @@ macro guarantees that a @code{NODE}'s wide-string 
value is current.
 It may end up calling an internal @command{gawk} function.
 It also guarantees that the wide string is zero-terminated.
 
address@hidden @code{get_curfunc_arg_count()} internal function
address@hidden internal function, @code{get_curfunc_arg_count()}
address@hidden size_t get_curfunc_arg_count(void)
-This function returns the actual number of parameters passed
-to the current function.  Inside the code of an extension
-this can be used to determine the maximum index which is
-safe to use with @code{get_actual_argument}.  If this value is
-greater than @code{nargs}, the function was
-called incorrectly from the @command{awk} program.
-
 @cindex address@hidden number of
 @cindex @code{nargs} internal variable
 @cindex internal variable, @code{nargs}
 @item nargs
-Inside an extension function, this is the maximum number of
-expected parameters, as set by the @code{make_builtin()} function.
+Inside an extension function, this is the actual number of
+parameters passed to the current function.
 
 @cindex @code{stptr} internal variable
 @cindex internal variable, @code{stptr}
@@ -29109,13 +29099,10 @@ Make sure that @samp{n->type == Node_var_array} first.
 @cindex arrays, elements, installing
 @cindex @code{assoc_lookup()} internal function
 @cindex internal function, @code{assoc_lookup()}
address@hidden NODE **assoc_lookup(NODE *symbol, NODE *subs, int reference)
address@hidden NODE **assoc_lookup(NODE *symbol, NODE *subs)
 Finds, and installs if necessary, array elements.
 @code{symbol} is the array, @code{subs} is the subscript.
 This is usually a value created with @code{make_string()} (see below).
address@hidden should be @code{TRUE} if it is an error to use the
-value before it is created. Typically, @code{FALSE} is the
-correct value to use from extension functions.
 
 @cindex strings
 @cindex @code{make_string()} internal function
@@ -29499,7 +29486,7 @@ do_chdir(int nargs)
     NODE *newdir;
     int ret = -1;
 
-    if (do_lint && get_curfunc_arg_count() != 1)
+    if (do_lint && nargs != 1)
         lintwarn("chdir: called with incorrect number of arguments");
 
     newdir = get_scalar_argument(0, FALSE);
@@ -29572,7 +29559,7 @@ do_stat(int nargs)
     char *pmode;    /* printable mode */
     char *type = "unknown";
 
-    if (do_lint && get_curfunc_arg_count() > 2)
+    if (do_lint && nargs > 2)
         lintwarn("stat: called with too many arguments");
 @end example
 
@@ -29606,15 +29593,15 @@ calls are shown here, since they all follow the same 
pattern:
 
 @example
     /* fill in the array */
-    aptr = assoc_lookup(array, tmp = make_string("name", 4), FALSE);
+    aptr = assoc_lookup(array, tmp = make_string("name", 4));
     *aptr = dupnode(file);
     unref(tmp);
 
-    aptr = assoc_lookup(array, tmp = make_string("mode", 4), FALSE);
+    aptr = assoc_lookup(array, tmp = make_string("mode", 4));
     *aptr = make_number((AWKNUM) sbuf.st_mode);
     unref(tmp);
 
-    aptr = assoc_lookup(array, tmp = make_string("pmode", 5), FALSE);
+    aptr = assoc_lookup(array, tmp = make_string("pmode", 5));
     pmode = format_mode(sbuf.st_mode);
     *aptr = make_string(pmode, strlen(pmode));
     unref(tmp);
diff --git a/eval.c b/eval.c
index 916cad0..3077a40 100644
--- a/eval.c
+++ b/eval.c
@@ -2131,7 +2131,7 @@ mod:
                                memcpy(p, t1->stptr, t1->stlen);
                                memcpy(p + t1->stlen, t2->stptr, t2->stlen);
                                unref(*lhs);
-                               t1 = *lhs = make_str_node(p, nlen); 
+                               t1 = *lhs = make_str_node(p, nlen, 
ALREADY_MALLOCED); 
                        }
                        DEREF(t2);
                        break;
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 8aaeb41..dff4cf6 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,7 @@
+2011-08-31         John Haque     <address@hidden>
+        * arrayparm.c, filefuncs.c, fork.c, ordchr.c, readfile.c,
+        rwarray.c, testarg.c: Updated.
+
 2011-06-23         Arnold D. Robbins     <address@hidden>
 
        * ChangeLog.0: Rotated ChangeLog into this file.
diff --git a/field.c b/field.c
index 67973a9..2bb4b91 100644
--- a/field.c
+++ b/field.c
@@ -185,7 +185,7 @@ rebuild_record()
                        }
                }
        }
-       tmp = make_str_node(ops, tlen);
+       tmp = make_str_node(ops, tlen, ALREADY_MALLOCED);
 
        /*
         * Since we are about to unref fields_arr[0], we want to find
diff --git a/int_array.c b/int_array.c
index 3020fb2..7bbfb58 100644
--- a/int_array.c
+++ b/int_array.c
@@ -663,28 +663,21 @@ static uint32_t
 int_hash(uint32_t k, uint32_t hsize)
 {
 
-/*
- * Bob Jenkins
- * http://burtleburtle.net/bob/hash/integer.html
+/* Code snippet copied from:
+ *     Hash functions (http://www.azillionmonkeys.com/qed/hash.html).
+ *     Copyright 2004-2008 by Paul Hsieh. Licenced under LGPL 2.1.
  */
 
-#if 0
-       /* 6-shifts vs 7-shifts below */
-       k = (k+0x7ed55d16) + (k<<12);
-       k = (k^0xc761c23c) ^ (k>>19);
-       k = (k+0x165667b1) + (k<<5);
-       k = (k+0xd3a2646c) ^ (k<<9);
-       k = (k+0xfd7046c5) + (k<<3);
-       k = (k^0xb55a4f09) ^ (k>>16);
-#endif
-
-       k -= (k << 6);
-       k ^= (k >> 17);
-       k -= (k << 9);
-       k ^= (k << 4);
-       k -= (k << 3);
-       k ^= (k << 10);
-       k ^= (k >> 15);
+       /* This is the final mixing function used by Paul Hsieh
+        * in SuperFastHash.
+        */
+ 
+       k ^= k << 3;
+       k += k >> 5;
+       k ^= k << 4;
+       k += k >> 17;
+       k ^= k << 25;
+       k += k >> 6;
 
        if (k >= hsize)
                k %= hsize;
diff --git a/main.c b/main.c
index f3f1524..c143b8c 100644
--- a/main.c
+++ b/main.c
@@ -829,7 +829,6 @@ static void
 cmdline_fs(char *str)
 {
        NODE **tmp;
-       size_t len;
 
        tmp = &FS_node->var_value;
        unref(*tmp);
@@ -847,8 +846,7 @@ cmdline_fs(char *str)
                        str[0] = '\t';
        }
 
-       len = scan_escape(str, strlen(str)); /* do process escapes */
-       *tmp = make_string(str, len);
+       *tmp = make_str_node(str, strlen(str), SCAN); /* do process escapes */
        set_FS();
 }
 
@@ -1119,7 +1117,6 @@ int
 arg_assign(char *arg, int initing)
 {
        char *cp, *cp2;
-       size_t cplen;
        int badvar;
        NODE *var;
        NODE *it;
@@ -1181,8 +1178,7 @@ arg_assign(char *arg, int initing)
                 * BWK awk expands escapes inside assignments.
                 * This makes sense, so we do it too.
                 */
-               cplen = scan_escape(cp, strlen(cp));
-               it = make_string(cp, cplen);
+               it = make_str_node(cp, strlen(cp), SCAN);
                it->flags |= MAYBE_NUM;
 #ifdef LC_NUMERIC
                /*
diff --git a/node.c b/node.c
index 36c6004..1524f36 100644
--- a/node.c
+++ b/node.c
@@ -340,29 +340,78 @@ make_number(AWKNUM x)
 /* r_make_str_node --- make a string node */
 
 NODE *
-r_make_str_node(const char *s, size_t len, int already_malloced)
+r_make_str_node(const char *s, size_t len, int flags)
 {
        NODE *r;
-
        getnode(r);
        r->type = Node_val;
+       r->numbr = 0;
        r->flags = (MALLOC|STRING|STRCUR);
        r->valref = 1;
-       r->numbr = 0;
        r->stfmt = -1;
-       r->stlen = len;
-       if (already_malloced)
+
+#ifdef MBS_SUPPORT
+       r->wstptr = NULL;
+       r->wstlen = 0;
+#endif /* defined MBS_SUPPORT */
+
+       if (flags & ALREADY_MALLOCED)
                r->stptr = (char *) s;
        else {
-               emalloc(r->stptr, char *, len + 2, "make_string");
+               emalloc(r->stptr, char *, len + 2, "r_make_str_node");
                memcpy(r->stptr, s, len);
        }
        r->stptr[len] = '\0';
+       
+       if ((flags & SCAN) != 0) {      /* scan for escape sequences */
+               const char *pf;
+               char *ptm;
+               int c;
+               const char *end;
+#ifdef MBS_SUPPORT
+               mbstate_t cur_state;
+
+               memset(& cur_state, 0, sizeof(cur_state));
+#endif
 
+               end = &(r->stptr[len]);
+               for (pf = ptm = r->stptr; pf < end;) {
 #ifdef MBS_SUPPORT
-       r->wstptr = NULL;
-       r->wstlen = 0;
-#endif /* defined MBS_SUPPORT */
+                       /*
+                        * Keep multibyte characters together. This avoids
+                        * problems if a subsequent byte of a multibyte
+                        * character happens to be a backslash.
+                        */
+                       if (gawk_mb_cur_max > 1) {
+                               int mblen = mbrlen(pf, end-pf, &cur_state);
+
+                               if (mblen > 1) {
+                                       int i;
+
+                                       for (i = 0; i < mblen; i++)
+                                               *ptm++ = *pf++;
+                                       continue;
+                               }
+                       }
+#endif
+                       c = *pf++;
+                       if (c == '\\') {
+                               c = parse_escape(&pf);
+                               if (c < 0) {
+                                       if (do_lint)
+                                               lintwarn(_("backslash at end of 
string"));
+                                       c = '\\';
+                               }
+                               *ptm++ = c;
+                       } else
+                               *ptm++ = c;
+               }
+               len = ptm - r->stptr;
+               erealloc(r->stptr, char *, len + 1, "r_make_str_node");
+               r->stptr[len] = '\0';
+       }
+       r->stlen = len;
+
        return r;
 }
 
@@ -529,60 +578,6 @@ parse_escape(const char **string_ptr)
 }
 
 
-/* scan_escape --- scan for escape sequences */
-
-size_t
-scan_escape(char *s, size_t len)
-{
-       const char *pf;
-       char *ptm;
-       int c;
-       const char *end;
-#ifdef MBS_SUPPORT
-       mbstate_t cur_state;
-
-       memset(& cur_state, 0, sizeof(cur_state));
-#endif
-
-       end = & s[len];
-       for (pf = ptm = s; pf < end;) {
-#ifdef MBS_SUPPORT
-               /*
-                * Keep multibyte characters together. This avoids
-                * problems if a subsequent byte of a multibyte
-                * character happens to be a backslash.
-                */
-               if (gawk_mb_cur_max > 1) {
-                       int mblen = mbrlen(pf, end-pf, &cur_state);
-
-                       if (mblen > 1) {
-                               int i;
-
-                               for (i = 0; i < mblen; i++)
-                                       *ptm++ = *pf++;
-                               continue;
-                       }
-               }
-#endif
-               c = *pf++;
-               if (c == '\\') {
-                       c = parse_escape(&pf);
-                       if (c < 0) {
-                               if (do_lint)
-                                       lintwarn(_("backslash at end of 
string"));
-                               c = '\\';
-                       }
-                       *ptm++ = c;
-               } else
-                       *ptm++ = c;
-       }
-
-       len = ptm - s;
-       s[len] = '\0';
-       return len;
-}
-
-
 /* isnondecimal --- return true if number is not a decimal number */
 
 int

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

Summary of changes:
 ChangeLog           |   97 ++++
 array.c             |    6 +-
 awk.h               |   11 +-
 awkgram.c           |   11 +-
 awkgram.y           |   11 +-
 builtin.c           |    6 +-
 command.c           |    9 +-
 command.y           |    9 +-
 doc/ChangeLog       |    3 +
 doc/gawk.info       | 1278 +++++++++++++++++++++++++--------------------------
 doc/gawk.texi       |   29 +-
 eval.c              |    2 +-
 extension/ChangeLog |    4 +
 field.c             |    2 +-
 int_array.c         |   33 +-
 main.c              |    8 +-
 node.c              |  121 +++---
 17 files changed, 851 insertions(+), 789 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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