gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-574


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-574-g6a4160d
Date: Mon, 02 Feb 2015 04:13:28 +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-4.1-stable has been updated
       via  6a4160dab42fb7e952b0b91a99eedd4bb6bb1d67 (commit)
      from  ec0a8d6c8ed3855b440aeb90b92088115212fb78 (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=6a4160dab42fb7e952b0b91a99eedd4bb6bb1d67

commit 6a4160dab42fb7e952b0b91a99eedd4bb6bb1d67
Author: Arnold D. Robbins <address@hidden>
Date:   Mon Feb 2 06:13:07 2015 +0200

    More O'Reilly edits.

diff --git a/awklib/eg/lib/assert.awk b/awklib/eg/lib/assert.awk
index 75fd885..c8e1349 100644
--- a/awklib/eg/lib/assert.awk
+++ b/awklib/eg/lib/assert.awk
@@ -1,4 +1,4 @@
-# assert --- assert that a condition is true. Otherwise exit.
+# assert --- assert that a condition is true. Otherwise, exit.
 
 #
 # Arnold Robbins, address@hidden, Public Domain
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 865e343..b4eb2c7 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2015-02-02         Arnold D. Robbins     <address@hidden>
+
+       * gawktexi.in: O'Reilly fixes.
+
 2015-02-01         Arnold D. Robbins     <address@hidden>
 
        * gawktexi.in: POSIX requirement that function parameters cannot
diff --git a/doc/gawk.info b/doc/gawk.info
index 0e8bcb5..bebdf4b 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -14427,7 +14427,7 @@ File: gawk.info,  Node: Library Functions,  Next: 
Sample Programs,  Prev: Functi
 *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
+programming, making program development more manageable and making
 programs more readable.
 
    In their seminal 1976 book, `Software Tools',(1) Brian Kernighan and
@@ -14532,7 +14532,7 @@ often use variable names like these for their own 
purposes.
    The example programs shown in this major node all start the names of
 their private variables with an underscore (`_').  Users generally
 don't use leading underscores in their variable names, so this
-convention immediately decreases the chances that the variable name
+convention immediately decreases the chances that the variable names
 will be accidentally shared with the user's program.
 
    In addition, several of the library functions use a prefix that helps
@@ -14545,7 +14545,7 @@ for private function names.(1)
 
    As a final note on variable naming, if a function makes global
 variables available for use by a main program, it is a good convention
-to start that variable's name with a capital letter--for example,
+to start those variables' names with a capital letter--for example,
 `getopt()''s `Opterr' and `Optind' variables (*note Getopt Function::).
 The leading capital letter indicates that it is global, while the fact
 that the variable name is not all capital letters indicates that the
@@ -14553,7 +14553,7 @@ variable is not one of `awk''s predefined variables, 
such as `FS'.
 
    It is also important that _all_ variables in library functions that
 do not need to save state are, in fact, declared local.(2) If this is
-not done, the variable could accidentally be used in the user's
+not done, the variables could accidentally be used in the user's
 program, leading to bugs that are very difficult to track down:
 
      function lib_func(x, y,    l1, l2)
@@ -14731,7 +14731,7 @@ for use in printing the diagnostic message.  This is 
not possible in
 `awk', so this `assert()' function also requires a string version of
 the condition that is being tested.  Following is the function:
 
-     # assert --- assert that a condition is true. Otherwise exit.
+     # assert --- assert that a condition is true. Otherwise, exit.
 
      function assert(condition, string)
      {
@@ -14752,7 +14752,7 @@ the condition that is being tested.  Following is the 
function:
 false, it prints a message to standard error, using the `string'
 parameter to describe the failed condition.  It then sets the variable
 `_assert_exit' to one and executes the `exit' statement.  The `exit'
-statement jumps to the `END' rule. If the `END' rules finds
+statement jumps to the `END' rule. If the `END' rule finds
 `_assert_exit' to be true, it exits immediately.
 
    The purpose of the test in the `END' rule is to keep any other `END'
@@ -14967,9 +14967,9 @@ the strings in an array into one long string.  The 
following function,
 `join()', accomplishes this task.  It is used later in several of the
 application programs (*note Sample Programs::).
 
-   Good function design is important; this function needs to be general
-but it should also have a reasonable default behavior.  It is called
-with an array as well as the beginning and ending indices of the
+   Good function design is important; this function needs to be
+general, but it should also have a reasonable default behavior.  It is
+called with an array as well as the beginning and ending indices of the
 elements in the array to be merged.  This assumes that the array
 indices are numeric--a reasonable assumption, as the array was likely
 created with `split()' (*note String Functions::):
@@ -15088,7 +15088,7 @@ optional timestamp value to use instead of the current 
time.
 
 File: gawk.info,  Node: Readfile Function,  Next: Shell Quoting,  Prev: 
Getlocaltime Function,  Up: General Functions
 
-10.2.8 Reading a Whole File At Once
+10.2.8 Reading a Whole File at Once
 -----------------------------------
 
 Often, it is convenient to have the entire contents of a file available
@@ -15130,13 +15130,13 @@ reads the entire contents of the named file in one 
shot:
 
    It works by setting `RS' to `^$', a regular expression that will
 never match if the file has contents.  `gawk' reads data from the file
-into `tmp' attempting to match `RS'.  The match fails after each read,
+into `tmp', attempting to match `RS'.  The match fails after each read,
 but fails quickly, such that `gawk' fills `tmp' with the entire
 contents of the file.  (*Note Records::, for information on `RT' and
 `RS'.)
 
    In the case that `file' is empty, the return value is the null
-string.  Thus calling code may use something like:
+string.  Thus, calling code may use something like:
 
      contents = readfile("/some/path")
      if (length(contents) == 0)
@@ -15226,8 +15226,9 @@ File: gawk.info,  Node: Filetrans Function,  Next: 
Rewind Function,  Up: Data Fi
 The `BEGIN' and `END' rules are each executed exactly once, at the
 beginning and end of your `awk' program, respectively (*note
 BEGIN/END::).  We (the `gawk' authors) once had a user who mistakenly
-thought that the `BEGIN' rule is executed at the beginning of each data
-file and the `END' rule is executed at the end of each data file.
+thought that the `BEGIN' rules were executed at the beginning of each
+data file and the `END' rules were executed at the end of each data
+file.
 
    When informed that this was not the case, the user requested that we
 add new special patterns to `gawk', named `BEGIN_FILE' and `END_FILE',
@@ -15261,7 +15262,7 @@ does so _portably_; this works with any implementation 
of `awk':
    This file must be loaded before the user's "main" program, so that
 the rule it supplies is executed first.
 
-   This rule relies on `awk''s `FILENAME' variable that automatically
+   This rule relies on `awk''s `FILENAME' variable, which automatically
 changes for each new data file.  The current file name is saved in a
 private variable, `_oldfilename'.  If `FILENAME' does not equal
 `_oldfilename', then a new data file is being processed and it is
@@ -15276,7 +15277,7 @@ correctly even for the first data file.
    The program also supplies an `END' rule to do the final processing
 for the last file.  Because this `END' rule comes before any `END' rules
 supplied in the "main" program, `endfile()' is called first.  Once
-again the value of multiple `BEGIN' and `END' rules should be clear.
+again, the value of multiple `BEGIN' and `END' rules should be clear.
 
    If the same data file occurs twice in a row on the command line, then
 `endfile()' and `beginfile()' are not executed at the end of the first
@@ -15303,7 +15304,7 @@ how it simplifies writing the main program.
 
    You are probably wondering, if `beginfile()' and `endfile()'
 functions can do the job, why does `gawk' have `BEGINFILE' and
-`ENDFILE' patterns (*note BEGINFILE/ENDFILE::)?
+`ENDFILE' patterns?
 
    Good question.  Normally, if `awk' cannot open a file, this causes
 an immediate fatal error.  In this case, there is no way for a
@@ -15311,7 +15312,8 @@ user-defined function to deal with the problem, as the 
mechanism for
 calling it relies on the file being open and at the first record.  Thus,
 the main reason for `BEGINFILE' is to give you a "hook" to catch files
 that cannot be processed.  `ENDFILE' exists for symmetry, and because
-it provides an easy way to do per-file cleanup processing.
+it provides an easy way to do per-file cleanup processing.  For more
+information, refer to *note BEGINFILE/ENDFILE::.
 
 
 File: gawk.info,  Node: Rewind Function,  Next: File Checking,  Prev: 
Filetrans Function,  Up: Data File Management
@@ -15319,15 +15321,14 @@ File: gawk.info,  Node: Rewind Function,  Next: File 
Checking,  Prev: Filetrans
 10.3.2 Rereading the Current File
 ---------------------------------
 
-Another request for a new built-in function was for a `rewind()'
-function that would make it possible to reread the current file.  The
-requesting user didn't want to have to use `getline' (*note Getline::)
-inside a loop.
+Another request for a new built-in function was for a function that
+would make it possible to reread the current file.  The requesting user
+didn't want to have to use `getline' (*note Getline::) inside a loop.
 
    However, as long as you are not in the `END' rule, it is quite easy
 to arrange to immediately close the current input file and then start
-over with it from the top.  For lack of a better name, we'll call it
-`rewind()':
+over with it from the top.  For lack of a better name, we'll call the
+function `rewind()':
 
      # rewind.awk --- rewind the current file and start over
 
@@ -15385,7 +15386,7 @@ longer in the list).  See also *note ARGC and ARGV::.
 
    Because `awk' variable names only allow the English letters, the
 regular expression check purposely does not use character classes such
-as `[:alpha:]' and `[:alnum:]' (*note Bracket Expressions::)
+as `[:alpha:]' and `[:alnum:]' (*note Bracket Expressions::).
 
    ---------- Footnotes ----------
 
@@ -15396,14 +15397,14 @@ opened.  However, the code here provides a portable 
solution.
 
 File: gawk.info,  Node: Empty Files,  Next: Ignoring Assigns,  Prev: File 
Checking,  Up: Data File Management
 
-10.3.4 Checking for Zero-length Files
+10.3.4 Checking for Zero-Length Files
 -------------------------------------
 
 All known `awk' implementations silently skip over zero-length files.
 This is a by-product of `awk''s implicit
 read-a-record-and-match-against-the-rules loop: when `awk' tries to
-read a record from an empty file, it immediately receives an end of
-file indication, closes the file, and proceeds on to the next
+read a record from an empty file, it immediately receives an
+end-of-file indication, closes the file, and proceeds on to the next
 command-line data file, _without_ executing any user-level `awk'
 program code.
 
@@ -15453,7 +15454,7 @@ File: gawk.info,  Node: Ignoring Assigns,  Prev: Empty 
Files,  Up: Data File Man
 Occasionally, you might not want `awk' to process command-line variable
 assignments (*note Assignment Options::).  In particular, if you have a
 file name that contains an `=' character, `awk' treats the file name as
-an assignment, and does not process it.
+an assignment and does not process it.
 
    Some users have suggested an additional command-line option for
 `gawk' to disable command-line assignments.  However, some simple
@@ -15743,8 +15744,8 @@ which is in `ARGV[0]':
          }
      }
 
-   The rest of the `BEGIN' rule is a simple test program.  Here is the
-result of two sample runs of the test program:
+   The rest of the `BEGIN' rule is a simple test program.  Here are the
+results of two sample runs of the test program:
 
      $ awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x
      -| c = <a>, Optarg = <>
@@ -15790,10 +15791,10 @@ File: gawk.info,  Node: Passwd Functions,  Next: 
Group Functions,  Prev: Getopt
 ==============================
 
 The `PROCINFO' array (*note Built-in Variables::) provides access to
-the current user's real and effective user and group ID numbers, and if
-available, the user's supplementary group set.  However, because these
-are numbers, they do not provide very useful information to the average
-user.  There needs to be some way to find the user information
+the current user's real and effective user and group ID numbers, and,
+if available, the user's supplementary group set.  However, because
+these are numbers, they do not provide very useful information to the
+average user.  There needs to be some way to find the user information
 associated with the user and group ID numbers.  This minor node
 presents a suite of functions for retrieving information from the user
 database.  *Note Group Functions::, for a similar suite that retrieves
@@ -15804,7 +15805,7 @@ kept.  Instead, it provides the `<pwd.h>' header file 
and several C
 language subroutines for obtaining user information.  The primary
 function is `getpwent()', for "get password entry."  The "password"
 comes from the original user database file, `/etc/passwd', which stores
-user information, along with the encrypted passwords (hence the name).
+user information along with the encrypted passwords (hence the name).
 
    Although an `awk' program could simply read `/etc/passwd' directly,
 this file may not contain complete information about the system's set
@@ -15852,7 +15853,7 @@ Encrypted password
 
 User-ID
      The user's numeric user ID number.  (On some systems, it's a C
-     `long', and not an `int'.  Thus we cast it to `long' for all
+     `long', and not an `int'.  Thus, we cast it to `long' for all
      cases.)
 
 Group-ID
@@ -15951,8 +15952,8 @@ or on some other `awk' implementation.
 `PROCINFO["FS"]', is similar.
 
    The main part of the function uses a loop to read database lines,
-split the line into fields, and then store the line into each array as
-necessary.  When the loop is done, `_pw_init()' cleans up by closing
+split the lines into fields, and then store the lines into each array
+as necessary.  When the loop is done, `_pw_init()' cleans up by closing
 the pipeline, setting `_pw_inited' to one, and restoring `FS' (and
 `FIELDWIDTHS' or `FPAT' if necessary), `RS', and `$0'.  The use of
 `_pw_count' is explained shortly.
@@ -16080,7 +16081,7 @@ Group Password
 Group ID Number
      The group's numeric group ID number; the association of name to
      number must be unique within the file.  (On some systems it's a C
-     `long', and not an `int'.  Thus we cast it to `long' for all
+     `long', and not an `int'.  Thus, we cast it to `long' for all
      cases.)
 
 Group Member List
@@ -16170,29 +16171,30 @@ to ensure that the database is scanned no more than 
once.  The
 `_gr_init()' function first saves `FS', `RS', and `$0', and then sets
 `FS' and `RS' to the correct values for scanning the group information.
 It also takes care to note whether `FIELDWIDTHS' or `FPAT' is being
-used, and to restore the appropriate field splitting mechanism.
+used, and to restore the appropriate field-splitting mechanism.
 
-   The group information is stored is several associative arrays.  The
+   The group information is stored in several associative arrays.  The
 arrays are indexed by group name (`_gr_byname'), by group ID number
 (`_gr_bygid'), and by position in the database (`_gr_bycount').  There
 is an additional array indexed by username (`_gr_groupsbyuser'), which
 is a space-separated list of groups to which each user belongs.
 
-   Unlike the user database, it is possible to have multiple records in
-the database for the same group.  This is common when a group has a
+   Unlike in the user database, it is possible to have multiple records
+in the database for the same group.  This is common when a group has a
 large number of members.  A pair of such entries might look like the
 following:
 
-     tvpeople:*:101:johny,jay,arsenio
+     tvpeople:*:101:johnny,jay,arsenio
      tvpeople:*:101:david,conan,tom,joan
 
    For this reason, `_gr_init()' looks to see if a group name or group
-ID number is already seen.  If it is, the usernames are simply
+ID number is already seen.  If so, the usernames are simply
 concatenated onto the previous list of users.(1)
 
    Finally, `_gr_init()' closes the pipeline to `grcat', restores `FS'
-(and `FIELDWIDTHS' or `FPAT' if necessary), `RS', and `$0', initializes
-`_gr_count' to zero (it is used later), and makes `_gr_inited' nonzero.
+(and `FIELDWIDTHS' or `FPAT', if necessary), `RS', and `$0',
+initializes `_gr_count' to zero (it is used later), and makes
+`_gr_inited' nonzero.
 
    The `getgrnam()' function takes a group name as its argument, and if
 that group exists, it is returned.  Otherwise, it relies on the array
@@ -16255,9 +16257,9 @@ very simple, relying on `awk''s associative arrays to 
do work.
 
    ---------- Footnotes ----------
 
-   (1) There is actually a subtle problem with the code just presented.
-Suppose that the first time there were no names. This code adds the
-names with a leading comma. It also doesn't check that there is a `$4'.
+   (1) There is a subtle problem with the code just presented.  Suppose
+that the first time there were no names. This code adds the names with
+a leading comma. It also doesn't check that there is a `$4'.
 
 
 File: gawk.info,  Node: Walking Arrays,  Next: Library Functions Summary,  
Prev: Group Functions,  Up: Library Functions
@@ -16266,11 +16268,11 @@ File: gawk.info,  Node: Walking Arrays,  Next: 
Library Functions Summary,  Prev:
 ================================
 
 *note Arrays of Arrays::, described how `gawk' provides arrays of
-arrays.  In particular, any element of an array may be either a scalar,
+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,
-`walk_array()', recursively traverses an array, printing each element's
-indices and value.  You call it with the array and a string
+`walk_array()', recursively traverses an array, printing the element
+indices and values.  You call it with the array and a string
 representing the name of the array:
 
      function walk_array(arr, name,      i)
@@ -16327,24 +16329,24 @@ File: gawk.info,  Node: Library Functions Summary,  
Next: Library Exercises,  Pr
    * The functions presented here fit into the following categories:
 
     General problems
-          Number-to-string conversion, assertions, rounding, random
-          number generation, converting characters to numbers, joining
-          strings, getting easily usable time-of-day information, and
-          reading a whole file in one shot.
+          Number-to-string conversion, testing assertions, rounding,
+          random number generation, converting characters to numbers,
+          joining strings, getting easily usable time-of-day
+          information, and reading a whole file in one shot
 
     Managing data files
           Noting data file boundaries, rereading the current file,
           checking for readable files, checking for zero-length files,
-          and treating assignments as file names.
+          and treating assignments as file names
 
     Processing command-line options
-          An `awk' version of the standard C `getopt()' function.
+          An `awk' version of the standard C `getopt()' function
 
     Reading the user and group databases
-          Two sets of routines that parallel the C library versions.
+          Two sets of routines that parallel the C library versions
 
     Traversing arrays of arrays
-          A simple function to traverse an array of arrays to any depth.
+          A simple function to traverse an array of arrays to any depth
 
 
 
@@ -31970,7 +31972,7 @@ Index
 * BEGINFILE pattern:                     BEGINFILE/ENDFILE.   (line   6)
 * BEGINFILE pattern, Boolean patterns and: Expression Patterns.
                                                               (line  69)
-* beginfile() user-defined function:     Filetrans Function.  (line  61)
+* beginfile() user-defined function:     Filetrans Function.  (line  62)
 * Bentley, Jon:                          Glossary.            (line 207)
 * Benzinger, Michael:                    Contributors.        (line  97)
 * Berry, Karl <1>:                       Ranges and Locales.  (line  74)
@@ -32589,9 +32591,9 @@ Index
 * END pattern, print statement and:      I/O And BEGIN/END.   (line  16)
 * ENDFILE pattern:                       BEGINFILE/ENDFILE.   (line   6)
 * ENDFILE pattern, Boolean patterns and: Expression Patterns. (line  69)
-* endfile() user-defined function:       Filetrans Function.  (line  61)
-* endgrent() function (C library):       Group Functions.     (line 211)
-* endgrent() user-defined function:      Group Functions.     (line 214)
+* endfile() user-defined function:       Filetrans Function.  (line  62)
+* endgrent() function (C library):       Group Functions.     (line 212)
+* endgrent() user-defined function:      Group Functions.     (line 215)
 * endpwent() function (C library):       Passwd Functions.    (line 207)
 * endpwent() user-defined function:      Passwd Functions.    (line 210)
 * English, Steve:                        Advanced Features.   (line   6)
@@ -33019,12 +33021,12 @@ Index
 * 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)
-* getgrgid() function (C library):       Group Functions.     (line 182)
-* getgrgid() user-defined function:      Group Functions.     (line 185)
-* getgrnam() function (C library):       Group Functions.     (line 171)
-* getgrnam() user-defined function:      Group Functions.     (line 176)
-* getgruser() function (C library):      Group Functions.     (line 191)
-* getgruser() function, user-defined:    Group Functions.     (line 194)
+* getgrgid() function (C library):       Group Functions.     (line 183)
+* getgrgid() user-defined function:      Group Functions.     (line 186)
+* getgrnam() function (C library):       Group Functions.     (line 172)
+* getgrnam() user-defined function:      Group Functions.     (line 177)
+* getgruser() function (C library):      Group Functions.     (line 192)
+* getgruser() function, user-defined:    Group Functions.     (line 195)
 * getline command:                       Reading Files.       (line  20)
 * getline command, _gr_init() user-defined function: Group Functions.
                                                               (line  83)
@@ -33895,7 +33897,7 @@ Index
                                                               (line  11)
 * revtwoway extension:                   Extension Sample Rev2way.
                                                               (line  12)
-* rewind() user-defined function:        Rewind Function.     (line  16)
+* rewind() user-defined function:        Rewind Function.     (line  15)
 * right angle bracket (>), > operator <1>: Precedence.        (line  65)
 * right angle bracket (>), > operator:   Comparison Operators.
                                                               (line  11)
@@ -34056,7 +34058,7 @@ Index
 * sidebar, Recipe for a Programming Language: History.        (line   6)
 * sidebar, RS = "\0" Is Not Portable:    gawk split records.  (line  63)
 * sidebar, So Why Does gawk Have BEGINFILE and ENDFILE?: Filetrans Function.
-                                                              (line  82)
+                                                              (line  83)
 * sidebar, Syntactic Ambiguities Between /= and Regular Expressions: 
Assignment Ops.
                                                               (line 146)
 * sidebar, Understanding #!:             Executable Scripts.  (line  31)
@@ -34743,289 +34745,289 @@ Node: Indirect Calls586978
 Ref: Indirect Calls-Footnote-1598284
 Node: Functions Summary598412
 Node: Library Functions601114
-Ref: Library Functions-Footnote-1604723
-Ref: Library Functions-Footnote-2604866
-Node: Library Names605037
-Ref: Library Names-Footnote-1608491
-Ref: Library Names-Footnote-2608714
-Node: General Functions608800
-Node: Strtonum Function609903
-Node: Assert Function612925
-Node: Round Function616249
-Node: Cliff Random Function617790
-Node: Ordinal Functions618806
-Ref: Ordinal Functions-Footnote-1621869
-Ref: Ordinal Functions-Footnote-2622121
-Node: Join Function622332
-Ref: Join Function-Footnote-1624101
-Node: Getlocaltime Function624301
-Node: Readfile Function628045
-Node: Shell Quoting630015
-Node: Data File Management631416
-Node: Filetrans Function632048
-Node: Rewind Function636104
-Node: File Checking637491
-Ref: File Checking-Footnote-1638823
-Node: Empty Files639024
-Node: Ignoring Assigns641003
-Node: Getopt Function642554
-Ref: Getopt Function-Footnote-1654016
-Node: Passwd Functions654216
-Ref: Passwd Functions-Footnote-1663053
-Node: Group Functions663141
-Ref: Group Functions-Footnote-1671035
-Node: Walking Arrays671248
-Node: Library Functions Summary672851
-Node: Library Exercises674252
-Node: Sample Programs675532
-Node: Running Examples676302
-Node: Clones677030
-Node: Cut Program678254
-Node: Egrep Program687973
-Ref: Egrep Program-Footnote-1695471
-Node: Id Program695581
-Node: Split Program699226
-Ref: Split Program-Footnote-1702674
-Node: Tee Program702802
-Node: Uniq Program705591
-Node: Wc Program713010
-Ref: Wc Program-Footnote-1717260
-Node: Miscellaneous Programs717354
-Node: Dupword Program718567
-Node: Alarm Program720598
-Node: Translate Program725402
-Ref: Translate Program-Footnote-1729967
-Node: Labels Program730237
-Ref: Labels Program-Footnote-1733588
-Node: Word Sorting733672
-Node: History Sorting737743
-Node: Extract Program739579
-Node: Simple Sed747104
-Node: Igawk Program750172
-Ref: Igawk Program-Footnote-1764496
-Ref: Igawk Program-Footnote-2764697
-Ref: Igawk Program-Footnote-3764819
-Node: Anagram Program764934
-Node: Signature Program767991
-Node: Programs Summary769238
-Node: Programs Exercises770431
-Ref: Programs Exercises-Footnote-1774562
-Node: Advanced Features774653
-Node: Nondecimal Data776601
-Node: Array Sorting778191
-Node: Controlling Array Traversal778888
-Ref: Controlling Array Traversal-Footnote-1787221
-Node: Array Sorting Functions787339
-Ref: Array Sorting Functions-Footnote-1791228
-Node: Two-way I/O791424
-Ref: Two-way I/O-Footnote-1796369
-Ref: Two-way I/O-Footnote-2796555
-Node: TCP/IP Networking796637
-Node: Profiling799510
-Node: Advanced Features Summary807057
-Node: Internationalization808990
-Node: I18N and L10N810470
-Node: Explaining gettext811156
-Ref: Explaining gettext-Footnote-1816181
-Ref: Explaining gettext-Footnote-2816365
-Node: Programmer i18n816530
-Ref: Programmer i18n-Footnote-1821396
-Node: Translator i18n821445
-Node: String Extraction822239
-Ref: String Extraction-Footnote-1823370
-Node: Printf Ordering823456
-Ref: Printf Ordering-Footnote-1826242
-Node: I18N Portability826306
-Ref: I18N Portability-Footnote-1828761
-Node: I18N Example828824
-Ref: I18N Example-Footnote-1831627
-Node: Gawk I18N831699
-Node: I18N Summary832337
-Node: Debugger833676
-Node: Debugging834698
-Node: Debugging Concepts835139
-Node: Debugging Terms836992
-Node: Awk Debugging839564
-Node: Sample Debugging Session840458
-Node: Debugger Invocation840978
-Node: Finding The Bug842362
-Node: List of Debugger Commands848837
-Node: Breakpoint Control850170
-Node: Debugger Execution Control853866
-Node: Viewing And Changing Data857230
-Node: Execution Stack860608
-Node: Debugger Info862245
-Node: Miscellaneous Debugger Commands866262
-Node: Readline Support871291
-Node: Limitations872183
-Node: Debugging Summary874297
-Node: Arbitrary Precision Arithmetic875465
-Node: Computer Arithmetic876881
-Ref: table-numeric-ranges880479
-Ref: Computer Arithmetic-Footnote-1881338
-Node: Math Definitions881395
-Ref: table-ieee-formats884683
-Ref: Math Definitions-Footnote-1885287
-Node: MPFR features885392
-Node: FP Math Caution887063
-Ref: FP Math Caution-Footnote-1888113
-Node: Inexactness of computations888482
-Node: Inexact representation889441
-Node: Comparing FP Values890798
-Node: Errors accumulate891880
-Node: Getting Accuracy893313
-Node: Try To Round895975
-Node: Setting precision896874
-Ref: table-predefined-precision-strings897558
-Node: Setting the rounding mode899347
-Ref: table-gawk-rounding-modes899711
-Ref: Setting the rounding mode-Footnote-1903166
-Node: Arbitrary Precision Integers903345
-Ref: Arbitrary Precision Integers-Footnote-1906331
-Node: POSIX Floating Point Problems906480
-Ref: POSIX Floating Point Problems-Footnote-1910353
-Node: Floating point summary910391
-Node: Dynamic Extensions912585
-Node: Extension Intro914137
-Node: Plugin License915403
-Node: Extension Mechanism Outline916200
-Ref: figure-load-extension916628
-Ref: figure-register-new-function918108
-Ref: figure-call-new-function919112
-Node: Extension API Description921098
-Node: Extension API Functions Introduction922548
-Node: General Data Types927372
-Ref: General Data Types-Footnote-1933111
-Node: Memory Allocation Functions933410
-Ref: Memory Allocation Functions-Footnote-1936249
-Node: Constructor Functions936345
-Node: Registration Functions938079
-Node: Extension Functions938764
-Node: Exit Callback Functions941061
-Node: Extension Version String942309
-Node: Input Parsers942974
-Node: Output Wrappers952853
-Node: Two-way processors957368
-Node: Printing Messages959572
-Ref: Printing Messages-Footnote-1960648
-Node: Updating `ERRNO'960800
-Node: Requesting Values961540
-Ref: table-value-types-returned962268
-Node: Accessing Parameters963225
-Node: Symbol Table Access964456
-Node: Symbol table by name964970
-Node: Symbol table by cookie966951
-Ref: Symbol table by cookie-Footnote-1971095
-Node: Cached values971158
-Ref: Cached values-Footnote-1974657
-Node: Array Manipulation974748
-Ref: Array Manipulation-Footnote-1975846
-Node: Array Data Types975883
-Ref: Array Data Types-Footnote-1978538
-Node: Array Functions978630
-Node: Flattening Arrays982484
-Node: Creating Arrays989376
-Node: Extension API Variables994147
-Node: Extension Versioning994783
-Node: Extension API Informational Variables996684
-Node: Extension API Boilerplate997749
-Node: Finding Extensions1001558
-Node: Extension Example1002118
-Node: Internal File Description1002890
-Node: Internal File Ops1006957
-Ref: Internal File Ops-Footnote-11018627
-Node: Using Internal File Ops1018767
-Ref: Using Internal File Ops-Footnote-11021150
-Node: Extension Samples1021423
-Node: Extension Sample File Functions1022949
-Node: Extension Sample Fnmatch1030587
-Node: Extension Sample Fork1032078
-Node: Extension Sample Inplace1033293
-Node: Extension Sample Ord1034968
-Node: Extension Sample Readdir1035804
-Ref: table-readdir-file-types1036680
-Node: Extension Sample Revout1037491
-Node: Extension Sample Rev2way1038081
-Node: Extension Sample Read write array1038821
-Node: Extension Sample Readfile1040761
-Node: Extension Sample Time1041856
-Node: Extension Sample API Tests1043205
-Node: gawkextlib1043696
-Node: Extension summary1046354
-Node: Extension Exercises1050043
-Node: Language History1050765
-Node: V7/SVR3.11052421
-Node: SVR41054602
-Node: POSIX1056047
-Node: BTL1057436
-Node: POSIX/GNU1058170
-Node: Feature History1063734
-Node: Common Extensions1076832
-Node: Ranges and Locales1078156
-Ref: Ranges and Locales-Footnote-11082774
-Ref: Ranges and Locales-Footnote-21082801
-Ref: Ranges and Locales-Footnote-31083035
-Node: Contributors1083256
-Node: History summary1088797
-Node: Installation1090167
-Node: Gawk Distribution1091113
-Node: Getting1091597
-Node: Extracting1092420
-Node: Distribution contents1094055
-Node: Unix Installation1099772
-Node: Quick Installation1100389
-Node: Additional Configuration Options1102813
-Node: Configuration Philosophy1104551
-Node: Non-Unix Installation1106920
-Node: PC Installation1107378
-Node: PC Binary Installation1108697
-Node: PC Compiling1110545
-Ref: PC Compiling-Footnote-11113566
-Node: PC Testing1113675
-Node: PC Using1114851
-Node: Cygwin1118966
-Node: MSYS1119789
-Node: VMS Installation1120289
-Node: VMS Compilation1121081
-Ref: VMS Compilation-Footnote-11122303
-Node: VMS Dynamic Extensions1122361
-Node: VMS Installation Details1124045
-Node: VMS Running1126297
-Node: VMS GNV1129133
-Node: VMS Old Gawk1129867
-Node: Bugs1130337
-Node: Other Versions1134220
-Node: Installation summary1140644
-Node: Notes1141700
-Node: Compatibility Mode1142565
-Node: Additions1143347
-Node: Accessing The Source1144272
-Node: Adding Code1145707
-Node: New Ports1151864
-Node: Derived Files1156346
-Ref: Derived Files-Footnote-11161821
-Ref: Derived Files-Footnote-21161855
-Ref: Derived Files-Footnote-31162451
-Node: Future Extensions1162565
-Node: Implementation Limitations1163171
-Node: Extension Design1164419
-Node: Old Extension Problems1165573
-Ref: Old Extension Problems-Footnote-11167090
-Node: Extension New Mechanism Goals1167147
-Ref: Extension New Mechanism Goals-Footnote-11170507
-Node: Extension Other Design Decisions1170696
-Node: Extension Future Growth1172804
-Node: Old Extension Mechanism1173640
-Node: Notes summary1175402
-Node: Basic Concepts1176588
-Node: Basic High Level1177269
-Ref: figure-general-flow1177541
-Ref: figure-process-flow1178140
-Ref: Basic High Level-Footnote-11181369
-Node: Basic Data Typing1181554
-Node: Glossary1184882
-Node: Copying1216811
-Node: GNU Free Documentation License1254367
-Node: Index1279503
+Ref: Library Functions-Footnote-1604722
+Ref: Library Functions-Footnote-2604865
+Node: Library Names605036
+Ref: Library Names-Footnote-1608494
+Ref: Library Names-Footnote-2608717
+Node: General Functions608803
+Node: Strtonum Function609906
+Node: Assert Function612928
+Node: Round Function616252
+Node: Cliff Random Function617793
+Node: Ordinal Functions618809
+Ref: Ordinal Functions-Footnote-1621872
+Ref: Ordinal Functions-Footnote-2622124
+Node: Join Function622335
+Ref: Join Function-Footnote-1624105
+Node: Getlocaltime Function624305
+Node: Readfile Function628049
+Node: Shell Quoting630021
+Node: Data File Management631422
+Node: Filetrans Function632054
+Node: Rewind Function636150
+Node: File Checking637536
+Ref: File Checking-Footnote-1638869
+Node: Empty Files639070
+Node: Ignoring Assigns641049
+Node: Getopt Function642599
+Ref: Getopt Function-Footnote-1654063
+Node: Passwd Functions654263
+Ref: Passwd Functions-Footnote-1663103
+Node: Group Functions663191
+Ref: Group Functions-Footnote-1671088
+Node: Walking Arrays671293
+Node: Library Functions Summary672893
+Node: Library Exercises674297
+Node: Sample Programs675577
+Node: Running Examples676347
+Node: Clones677075
+Node: Cut Program678299
+Node: Egrep Program688018
+Ref: Egrep Program-Footnote-1695516
+Node: Id Program695626
+Node: Split Program699271
+Ref: Split Program-Footnote-1702719
+Node: Tee Program702847
+Node: Uniq Program705636
+Node: Wc Program713055
+Ref: Wc Program-Footnote-1717305
+Node: Miscellaneous Programs717399
+Node: Dupword Program718612
+Node: Alarm Program720643
+Node: Translate Program725447
+Ref: Translate Program-Footnote-1730012
+Node: Labels Program730282
+Ref: Labels Program-Footnote-1733633
+Node: Word Sorting733717
+Node: History Sorting737788
+Node: Extract Program739624
+Node: Simple Sed747149
+Node: Igawk Program750217
+Ref: Igawk Program-Footnote-1764541
+Ref: Igawk Program-Footnote-2764742
+Ref: Igawk Program-Footnote-3764864
+Node: Anagram Program764979
+Node: Signature Program768036
+Node: Programs Summary769283
+Node: Programs Exercises770476
+Ref: Programs Exercises-Footnote-1774607
+Node: Advanced Features774698
+Node: Nondecimal Data776646
+Node: Array Sorting778236
+Node: Controlling Array Traversal778933
+Ref: Controlling Array Traversal-Footnote-1787266
+Node: Array Sorting Functions787384
+Ref: Array Sorting Functions-Footnote-1791273
+Node: Two-way I/O791469
+Ref: Two-way I/O-Footnote-1796414
+Ref: Two-way I/O-Footnote-2796600
+Node: TCP/IP Networking796682
+Node: Profiling799555
+Node: Advanced Features Summary807102
+Node: Internationalization809035
+Node: I18N and L10N810515
+Node: Explaining gettext811201
+Ref: Explaining gettext-Footnote-1816226
+Ref: Explaining gettext-Footnote-2816410
+Node: Programmer i18n816575
+Ref: Programmer i18n-Footnote-1821441
+Node: Translator i18n821490
+Node: String Extraction822284
+Ref: String Extraction-Footnote-1823415
+Node: Printf Ordering823501
+Ref: Printf Ordering-Footnote-1826287
+Node: I18N Portability826351
+Ref: I18N Portability-Footnote-1828806
+Node: I18N Example828869
+Ref: I18N Example-Footnote-1831672
+Node: Gawk I18N831744
+Node: I18N Summary832382
+Node: Debugger833721
+Node: Debugging834743
+Node: Debugging Concepts835184
+Node: Debugging Terms837037
+Node: Awk Debugging839609
+Node: Sample Debugging Session840503
+Node: Debugger Invocation841023
+Node: Finding The Bug842407
+Node: List of Debugger Commands848882
+Node: Breakpoint Control850215
+Node: Debugger Execution Control853911
+Node: Viewing And Changing Data857275
+Node: Execution Stack860653
+Node: Debugger Info862290
+Node: Miscellaneous Debugger Commands866307
+Node: Readline Support871336
+Node: Limitations872228
+Node: Debugging Summary874342
+Node: Arbitrary Precision Arithmetic875510
+Node: Computer Arithmetic876926
+Ref: table-numeric-ranges880524
+Ref: Computer Arithmetic-Footnote-1881383
+Node: Math Definitions881440
+Ref: table-ieee-formats884728
+Ref: Math Definitions-Footnote-1885332
+Node: MPFR features885437
+Node: FP Math Caution887108
+Ref: FP Math Caution-Footnote-1888158
+Node: Inexactness of computations888527
+Node: Inexact representation889486
+Node: Comparing FP Values890843
+Node: Errors accumulate891925
+Node: Getting Accuracy893358
+Node: Try To Round896020
+Node: Setting precision896919
+Ref: table-predefined-precision-strings897603
+Node: Setting the rounding mode899392
+Ref: table-gawk-rounding-modes899756
+Ref: Setting the rounding mode-Footnote-1903211
+Node: Arbitrary Precision Integers903390
+Ref: Arbitrary Precision Integers-Footnote-1906376
+Node: POSIX Floating Point Problems906525
+Ref: POSIX Floating Point Problems-Footnote-1910398
+Node: Floating point summary910436
+Node: Dynamic Extensions912630
+Node: Extension Intro914182
+Node: Plugin License915448
+Node: Extension Mechanism Outline916245
+Ref: figure-load-extension916673
+Ref: figure-register-new-function918153
+Ref: figure-call-new-function919157
+Node: Extension API Description921143
+Node: Extension API Functions Introduction922593
+Node: General Data Types927417
+Ref: General Data Types-Footnote-1933156
+Node: Memory Allocation Functions933455
+Ref: Memory Allocation Functions-Footnote-1936294
+Node: Constructor Functions936390
+Node: Registration Functions938124
+Node: Extension Functions938809
+Node: Exit Callback Functions941106
+Node: Extension Version String942354
+Node: Input Parsers943019
+Node: Output Wrappers952898
+Node: Two-way processors957413
+Node: Printing Messages959617
+Ref: Printing Messages-Footnote-1960693
+Node: Updating `ERRNO'960845
+Node: Requesting Values961585
+Ref: table-value-types-returned962313
+Node: Accessing Parameters963270
+Node: Symbol Table Access964501
+Node: Symbol table by name965015
+Node: Symbol table by cookie966996
+Ref: Symbol table by cookie-Footnote-1971140
+Node: Cached values971203
+Ref: Cached values-Footnote-1974702
+Node: Array Manipulation974793
+Ref: Array Manipulation-Footnote-1975891
+Node: Array Data Types975928
+Ref: Array Data Types-Footnote-1978583
+Node: Array Functions978675
+Node: Flattening Arrays982529
+Node: Creating Arrays989421
+Node: Extension API Variables994192
+Node: Extension Versioning994828
+Node: Extension API Informational Variables996729
+Node: Extension API Boilerplate997794
+Node: Finding Extensions1001603
+Node: Extension Example1002163
+Node: Internal File Description1002935
+Node: Internal File Ops1007002
+Ref: Internal File Ops-Footnote-11018672
+Node: Using Internal File Ops1018812
+Ref: Using Internal File Ops-Footnote-11021195
+Node: Extension Samples1021468
+Node: Extension Sample File Functions1022994
+Node: Extension Sample Fnmatch1030632
+Node: Extension Sample Fork1032123
+Node: Extension Sample Inplace1033338
+Node: Extension Sample Ord1035013
+Node: Extension Sample Readdir1035849
+Ref: table-readdir-file-types1036725
+Node: Extension Sample Revout1037536
+Node: Extension Sample Rev2way1038126
+Node: Extension Sample Read write array1038866
+Node: Extension Sample Readfile1040806
+Node: Extension Sample Time1041901
+Node: Extension Sample API Tests1043250
+Node: gawkextlib1043741
+Node: Extension summary1046399
+Node: Extension Exercises1050088
+Node: Language History1050810
+Node: V7/SVR3.11052466
+Node: SVR41054647
+Node: POSIX1056092
+Node: BTL1057481
+Node: POSIX/GNU1058215
+Node: Feature History1063779
+Node: Common Extensions1076877
+Node: Ranges and Locales1078201
+Ref: Ranges and Locales-Footnote-11082819
+Ref: Ranges and Locales-Footnote-21082846
+Ref: Ranges and Locales-Footnote-31083080
+Node: Contributors1083301
+Node: History summary1088842
+Node: Installation1090212
+Node: Gawk Distribution1091158
+Node: Getting1091642
+Node: Extracting1092465
+Node: Distribution contents1094100
+Node: Unix Installation1099817
+Node: Quick Installation1100434
+Node: Additional Configuration Options1102858
+Node: Configuration Philosophy1104596
+Node: Non-Unix Installation1106965
+Node: PC Installation1107423
+Node: PC Binary Installation1108742
+Node: PC Compiling1110590
+Ref: PC Compiling-Footnote-11113611
+Node: PC Testing1113720
+Node: PC Using1114896
+Node: Cygwin1119011
+Node: MSYS1119834
+Node: VMS Installation1120334
+Node: VMS Compilation1121126
+Ref: VMS Compilation-Footnote-11122348
+Node: VMS Dynamic Extensions1122406
+Node: VMS Installation Details1124090
+Node: VMS Running1126342
+Node: VMS GNV1129178
+Node: VMS Old Gawk1129912
+Node: Bugs1130382
+Node: Other Versions1134265
+Node: Installation summary1140689
+Node: Notes1141745
+Node: Compatibility Mode1142610
+Node: Additions1143392
+Node: Accessing The Source1144317
+Node: Adding Code1145752
+Node: New Ports1151909
+Node: Derived Files1156391
+Ref: Derived Files-Footnote-11161866
+Ref: Derived Files-Footnote-21161900
+Ref: Derived Files-Footnote-31162496
+Node: Future Extensions1162610
+Node: Implementation Limitations1163216
+Node: Extension Design1164464
+Node: Old Extension Problems1165618
+Ref: Old Extension Problems-Footnote-11167135
+Node: Extension New Mechanism Goals1167192
+Ref: Extension New Mechanism Goals-Footnote-11170552
+Node: Extension Other Design Decisions1170741
+Node: Extension Future Growth1172849
+Node: Old Extension Mechanism1173685
+Node: Notes summary1175447
+Node: Basic Concepts1176633
+Node: Basic High Level1177314
+Ref: figure-general-flow1177586
+Ref: figure-process-flow1178185
+Ref: Basic High Level-Footnote-11181414
+Node: Basic Data Typing1181599
+Node: Glossary1184927
+Node: Copying1216856
+Node: GNU Free Documentation License1254412
+Node: Index1279548
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 6b37e74..abc9fa9 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -20500,7 +20500,7 @@ It contains the following chapters:
 your own @command{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.
+manageable and making programs more readable.
 
 @cindex Kernighan, Brian
 @cindex Plauger, P.J.@:
@@ -20629,7 +20629,7 @@ often use variable names like these for their own 
purposes.
 The example programs shown in this @value{CHAPTER} all start the names of their
 private variables with an underscore (@samp{_}).  Users generally don't use
 leading underscores in their variable names, so this convention immediately
-decreases the chances that the variable name will be accidentally shared
+decreases the chances that the variable names will be accidentally shared
 with the user's program.
 
 @cindex @code{_} (underscore), in names of private variables
@@ -20647,8 +20647,8 @@ show how our own @command{awk} programming style has 
evolved and to
 provide some basis for this discussion.}
 
 As a final note on variable naming, if a function makes global variables
-available for use by a main program, it is a good convention to start that
-variable's name with a capital letter---for
+available for use by a main program, it is a good convention to start those
+variables' names with a capital letter---for
 example, @code{getopt()}'s @code{Opterr} and @code{Optind} variables
 (@pxref{Getopt Function}).
 The leading capital letter indicates that it is global, while the fact that
@@ -20659,7 +20659,7 @@ not one of @command{awk}'s predefined variables, such 
as @code{FS}.
 It is also important that @emph{all} variables in library
 functions that do not need to save state are, in fact, declared
 address@hidden@command{gawk}'s @option{--dump-variables} command-line
-option is useful for verifying this.} If this is not done, the variable
+option is useful for verifying this.} If this is not done, the variables
 could accidentally be used in the user's program, leading to bugs that
 are very difficult to track down:
 
@@ -20857,7 +20857,7 @@ Following is the function:
 
 @example
 @c file eg/lib/assert.awk
-# assert --- assert that a condition is true. Otherwise exit.
+# assert --- assert that a condition is true. Otherwise, exit.
 
 @c endfile
 @ignore
@@ -20893,7 +20893,7 @@ is false, it prints a message to standard error, using 
the @code{string}
 parameter to describe the failed condition.  It then sets the variable
 @code{_assert_exit} to one and executes the @code{exit} statement.
 The @code{exit} statement jumps to the @code{END} rule. If the @code{END}
-rules finds @code{_assert_exit} to be true, it exits immediately.
+rule finds @code{_assert_exit} to be true, it exits immediately.
 
 The purpose of the test in the @code{END} rule is to
 keep any other @code{END} rules from running.  When an assertion fails, the
@@ -21185,7 +21185,7 @@ all the strings in an array into one long string.  The 
following function,
 the application programs
 (@pxref{Sample Programs}).
 
-Good function design is important; this function needs to be general but it
+Good function design is important; this function needs to be general, but it
 should also have a reasonable default behavior.  It is called with an array
 as well as the beginning and ending indices of the elements in the array to be
 merged.  This assumes that the array indices are numeric---a reasonable
@@ -21333,7 +21333,7 @@ allowed the user to supply an optional timestamp value 
to use instead
 of the current time.
 
 @node Readfile Function
address@hidden Reading a Whole File At Once
address@hidden Reading a Whole File at Once
 
 Often, it is convenient to have the entire contents of a file available
 in memory as a single string. A straightforward but naive way to
@@ -21390,13 +21390,13 @@ function readfile(file,     tmp, save_rs)
 
 It works by setting @code{RS} to @samp{^$}, a regular expression that
 will never match if the file has contents.  @command{gawk} reads data from
-the file into @code{tmp} attempting to match @code{RS}.  The match fails
+the file into @code{tmp}, attempting to match @code{RS}.  The match fails
 after each read, but fails quickly, such that @command{gawk} fills
 @code{tmp} with the entire contents of the file.
 (@DBXREF{Records} for information on @code{RT} and @code{RS}.)
 
 In the case that @code{file} is empty, the return value is the null
-string.  Thus calling code may use something like:
+string.  Thus, calling code may use something like:
 
 @example
 contents = readfile("/some/path")
@@ -21407,7 +21407,7 @@ if (length(contents) == 0)
 This tests the result to see if it is empty or not. An equivalent
 test would be @samp{contents == ""}.
 
address@hidden Sample Readfile}, for an extension function that
address@hidden Sample Readfile} for an extension function that
 also reads an entire file into memory.
 
 @node Shell Quoting
@@ -21514,8 +21514,8 @@ The @code{BEGIN} and @code{END} rules are each executed 
exactly once, at
 the beginning and end of your @command{awk} program, respectively
 (@pxref{BEGIN/END}).
 We (the @command{gawk} authors) once had a user who mistakenly thought that the
address@hidden rule is executed at the beginning of each @value{DF} and the
address@hidden rule is executed at the end of each @value{DF}.
address@hidden rules were executed at the beginning of each @value{DF} and the
address@hidden rules were executed at the end of each @value{DF}.
 
 When informed
 that this was not the case, the user requested that we add new special
@@ -21555,7 +21555,7 @@ END @{ endfile(FILENAME) @}
 This file must be loaded before the user's ``main'' program, so that the
 rule it supplies is executed first.
 
-This rule relies on @command{awk}'s @code{FILENAME} variable that
+This rule relies on @command{awk}'s @code{FILENAME} variable, which
 automatically changes for each new @value{DF}.  The current @value{FN} is
 saved in a private variable, @code{_oldfilename}.  If @code{FILENAME} does
 not equal @code{_oldfilename}, then a new @value{DF} is being processed and
@@ -21571,7 +21571,7 @@ first @value{DF}.
 The program also supplies an @code{END} rule to do the final processing for
 the last file.  Because this @code{END} rule comes before any @code{END} rules
 supplied in the ``main'' program, @code{endfile()} is called first.  Once
-again the value of multiple @code{BEGIN} and @code{END} rules should be clear.
+again, the value of multiple @code{BEGIN} and @code{END} rules should be clear.
 
 @cindex @code{beginfile()} user-defined function
 @cindex @code{endfile()} user-defined function
@@ -21619,7 +21619,7 @@ how it simplifies writing the main program.
 
 You are probably wondering, if @code{beginfile()} and @code{endfile()}
 functions can do the job, why does @command{gawk} have
address@hidden and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
address@hidden and @code{ENDFILE} patterns?
 
 Good question.  Normally, if @command{awk} cannot open a file, this
 causes an immediate fatal error.  In this case, there is no way for a
@@ -21628,6 +21628,7 @@ calling it relies on the file being open and at the 
first record.  Thus,
 the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
 files that cannot be processed.  @code{ENDFILE} exists for symmetry,
 and because it provides an easy way to do per-file cleanup processing.
+For more information, refer to @ref{BEGINFILE/ENDFILE}.
 
 @docbook
 </sidebar>
@@ -21642,7 +21643,7 @@ and because it provides an easy way to do per-file 
cleanup processing.
 
 You are probably wondering, if @code{beginfile()} and @code{endfile()}
 functions can do the job, why does @command{gawk} have
address@hidden and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
address@hidden and @code{ENDFILE} patterns?
 
 Good question.  Normally, if @command{awk} cannot open a file, this
 causes an immediate fatal error.  In this case, there is no way for a
@@ -21651,6 +21652,7 @@ calling it relies on the file being open and at the 
first record.  Thus,
 the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
 files that cannot be processed.  @code{ENDFILE} exists for symmetry,
 and because it provides an easy way to do per-file cleanup processing.
+For more information, refer to @ref{BEGINFILE/ENDFILE}.
 @end cartouche
 @end ifnotdocbook
 
@@ -21658,7 +21660,7 @@ and because it provides an easy way to do per-file 
cleanup processing.
 @subsection Rereading the Current File
 
 @cindex files, reading
-Another request for a new built-in function was for a @code{rewind()}
+Another request for a new built-in function was for a
 function that would make it possible to reread the current file.
 The requesting user didn't want to have to use @code{getline}
 (@pxref{Getline})
@@ -21667,7 +21669,7 @@ inside a loop.
 However, as long as you are not in the @code{END} rule, it is
 quite easy to arrange to immediately close the current input file
 and then start over with it from the top.
-For lack of a better name, we'll call it @code{rewind()}:
+For lack of a better name, we'll call the function @code{rewind()}:
 
 @cindex @code{rewind()} user-defined function
 @example
@@ -21760,16 +21762,16 @@ See also @ref{ARGC and ARGV}.
 Because @command{awk} variable names only allow the English letters,
 the regular expression check purposely does not use character classes
 such as @samp{[:alpha:]} and @samp{[:alnum:]}
-(@pxref{Bracket Expressions})
+(@pxref{Bracket Expressions}).
 
 @node Empty Files
address@hidden Checking for Zero-length Files
address@hidden Checking for Zero-Length Files
 
 All known @command{awk} implementations silently skip over zero-length files.
 This is a by-product of @command{awk}'s implicit
 read-a-record-and-match-against-the-rules loop: when @command{awk}
 tries to read a record from an empty file, it immediately receives an
-end of file indication, closes the file, and proceeds on to the next
+end-of-file indication, closes the file, and proceeds on to the next
 command-line @value{DF}, @emph{without} executing any user-level
 @command{awk} program code.
 
@@ -21834,7 +21836,7 @@ Occasionally, you might not want @command{awk} to 
process command-line
 variable assignments
 (@pxref{Assignment Options}).
 In particular, if you have a @value{FN} that contains an @samp{=} character,
address@hidden treats the @value{FN} as an assignment, and does not process it.
address@hidden treats the @value{FN} as an assignment and does not process it.
 
 Some users have suggested an additional command-line option for @command{gawk}
 to disable command-line assignments.  However, some simple programming with
@@ -22196,8 +22198,8 @@ BEGIN @{
 @c endfile
 @end example
 
-The rest of the @code{BEGIN} rule is a simple test program.  Here is the
-result of two sample runs of the test program:
+The rest of the @code{BEGIN} rule is a simple test program.  Here are the
+results of two sample runs of the test program:
 
 @example
 $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x}
@@ -22255,7 +22257,7 @@ use @code{getopt()} to process their arguments.
 The @code{PROCINFO} array
 (@pxref{Built-in Variables})
 provides access to the current user's real and effective user and group ID
-numbers, and if available, the user's supplementary group set.
+numbers, and, if available, the user's supplementary group set.
 However, because these are numbers, they do not provide very useful
 information to the average user.  There needs to be some way to find the
 user information associated with the user and group ID numbers.  This
@@ -22275,7 +22277,7 @@ kept.  Instead, it provides the @code{<pwd.h>} header 
file
 and several C language subroutines for obtaining user information.
 The primary function is @code{getpwent()}, for ``get password entry.''
 The ``password'' comes from the original user database file,
address@hidden/etc/passwd}, which stores user information, along with the
address@hidden/etc/passwd}, which stores user information along with the
 encrypted passwords (hence the name).
 
 @cindex @command{pwcat} program
@@ -22374,7 +22376,7 @@ The user's encrypted password.  This may not be 
available on some systems.
 
 @item User-ID
 The user's numeric user ID number.
-(On some systems, it's a C @code{long}, and not an @code{int}.  Thus
+(On some systems, it's a C @code{long}, and not an @code{int}.  Thus,
 we cast it to @code{long} for all cases.)
 
 @item Group-ID
@@ -22501,7 +22503,7 @@ The code that checks for using @code{FPAT}, using 
@code{using_fpat}
 and @code{PROCINFO["FS"]}, is similar.
 
 The main part of the function uses a loop to read database lines, split
-the line into fields, and then store the line into each array as necessary.
+the lines into fields, and then store the lines into each array as necessary.
 When the loop is done, @address@hidden()}} cleans up by closing the pipeline,
 setting @address@hidden to one, and restoring @code{FS}
 (and @code{FIELDWIDTHS} or @code{FPAT}
@@ -22718,7 +22720,7 @@ it is usually empty or set to @samp{*}.
 @item Group ID Number
 The group's numeric group ID number;
 the association of name to number must be unique within the file.
-(On some systems it's a C @code{long}, and not an @code{int}.  Thus
+(On some systems it's a C @code{long}, and not an @code{int}.  Thus,
 we cast it to @code{long} for all cases.)
 
 @item Group Member List
@@ -22832,32 +22834,32 @@ The @address@hidden()}} function first saves 
@code{FS},
 @code{$0}, and then sets @code{FS} and @code{RS} to the correct values for
 scanning the group information.
 It also takes care to note whether @code{FIELDWIDTHS} or @code{FPAT}
-is being used, and to restore the appropriate field splitting mechanism.
+is being used, and to restore the appropriate field-splitting mechanism.
 
-The group information is stored is several associative arrays.
+The group information is stored in several associative arrays.
 The arrays are indexed by group name (@address@hidden), by group ID number
 (@address@hidden), and by position in the database (@address@hidden).
 There is an additional array indexed by username (@address@hidden),
 which is a space-separated list of groups to which each user belongs.
 
-Unlike the user database, it is possible to have multiple records in the
+Unlike in the user database, it is possible to have multiple records in the
 database for the same group.  This is common when a group has a large number
 of members.  A pair of such entries might look like the following:
 
 @example
-tvpeople:*:101:johny,jay,arsenio
+tvpeople:*:101:johnny,jay,arsenio
 tvpeople:*:101:david,conan,tom,joan
 @end example
 
 For this reason, @code{_gr_init()} looks to see if a group name or
-group ID number is already seen.  If it is, the usernames are
-simply concatenated onto the previous list of address@hidden is actually a
+group ID number is already seen.  If so, the usernames are
+simply concatenated onto the previous list of address@hidden is a
 subtle problem with the code just presented.  Suppose that
 the first time there were no names. This code adds the names with
 a leading comma. It also doesn't check that there is a @code{$4}.}
 
 Finally, @code{_gr_init()} closes the pipeline to @command{grcat}, restores
address@hidden (and @code{FIELDWIDTHS} or @code{FPAT} if necessary), @code{RS}, 
and @code{$0},
address@hidden (and @code{FIELDWIDTHS} or @code{FPAT}, if necessary), 
@code{RS}, and @code{$0},
 initializes @code{_gr_count} to zero
 (it is used later), and makes @code{_gr_inited} nonzero.
 
@@ -22957,12 +22959,12 @@ uses these functions.
 
 @DBREF{Arrays of Arrays} described how @command{gawk}
 provides arrays of arrays.  In particular, any element of
-an array may be either a scalar, or another array. The
+an array may be either a scalar or another array. The
 @code{isarray()} function (@pxref{Type Functions})
 lets you distinguish an array
 from a scalar.
 The following function, @code{walk_array()}, recursively traverses
-an array, printing each element's indices and value.
+an array, printing the element indices and values.
 You call it with the array and a string representing the name
 of the array:
 
@@ -23034,24 +23036,24 @@ The functions presented here fit into the following 
categories:
 @c nested list
 @table @asis
 @item General problems
-Number-to-string conversion, assertions, rounding, random number
+Number-to-string conversion, testing assertions, rounding, random number
 generation, converting characters to numbers, joining strings, getting
 easily usable time-of-day information, and reading a whole file in
-one shot.
+one shot
 
 @item Managing @value{DF}s
 Noting @value{DF} boundaries, rereading the current file, checking for
 readable files, checking for zero-length files, and treating assignments
-as @value{FN}s.
+as @value{FN}s
 
 @item Processing command-line options
-An @command{awk} version of the standard C @code{getopt()} function.
+An @command{awk} version of the standard C @code{getopt()} function
 
 @item Reading the user and group databases
-Two sets of routines that parallel the C library versions.
+Two sets of routines that parallel the C library versions
 
 @item Traversing arrays of arrays
-A simple function to traverse an array of arrays to any depth.
+A simple function to traverse an array of arrays to any depth
 @end table
 @c end nested list
 
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index cc021c9..2e2d0e0 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -19621,7 +19621,7 @@ It contains the following chapters:
 your own @command{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.
+manageable and making programs more readable.
 
 @cindex Kernighan, Brian
 @cindex Plauger, P.J.@:
@@ -19750,7 +19750,7 @@ often use variable names like these for their own 
purposes.
 The example programs shown in this @value{CHAPTER} all start the names of their
 private variables with an underscore (@samp{_}).  Users generally don't use
 leading underscores in their variable names, so this convention immediately
-decreases the chances that the variable name will be accidentally shared
+decreases the chances that the variable names will be accidentally shared
 with the user's program.
 
 @cindex @code{_} (underscore), in names of private variables
@@ -19768,8 +19768,8 @@ show how our own @command{awk} programming style has 
evolved and to
 provide some basis for this discussion.}
 
 As a final note on variable naming, if a function makes global variables
-available for use by a main program, it is a good convention to start that
-variable's name with a capital letter---for
+available for use by a main program, it is a good convention to start those
+variables' names with a capital letter---for
 example, @code{getopt()}'s @code{Opterr} and @code{Optind} variables
 (@pxref{Getopt Function}).
 The leading capital letter indicates that it is global, while the fact that
@@ -19780,7 +19780,7 @@ not one of @command{awk}'s predefined variables, such 
as @code{FS}.
 It is also important that @emph{all} variables in library
 functions that do not need to save state are, in fact, declared
 address@hidden@command{gawk}'s @option{--dump-variables} command-line
-option is useful for verifying this.} If this is not done, the variable
+option is useful for verifying this.} If this is not done, the variables
 could accidentally be used in the user's program, leading to bugs that
 are very difficult to track down:
 
@@ -19978,7 +19978,7 @@ Following is the function:
 
 @example
 @c file eg/lib/assert.awk
-# assert --- assert that a condition is true. Otherwise exit.
+# assert --- assert that a condition is true. Otherwise, exit.
 
 @c endfile
 @ignore
@@ -20014,7 +20014,7 @@ is false, it prints a message to standard error, using 
the @code{string}
 parameter to describe the failed condition.  It then sets the variable
 @code{_assert_exit} to one and executes the @code{exit} statement.
 The @code{exit} statement jumps to the @code{END} rule. If the @code{END}
-rules finds @code{_assert_exit} to be true, it exits immediately.
+rule finds @code{_assert_exit} to be true, it exits immediately.
 
 The purpose of the test in the @code{END} rule is to
 keep any other @code{END} rules from running.  When an assertion fails, the
@@ -20306,7 +20306,7 @@ all the strings in an array into one long string.  The 
following function,
 the application programs
 (@pxref{Sample Programs}).
 
-Good function design is important; this function needs to be general but it
+Good function design is important; this function needs to be general, but it
 should also have a reasonable default behavior.  It is called with an array
 as well as the beginning and ending indices of the elements in the array to be
 merged.  This assumes that the array indices are numeric---a reasonable
@@ -20454,7 +20454,7 @@ allowed the user to supply an optional timestamp value 
to use instead
 of the current time.
 
 @node Readfile Function
address@hidden Reading a Whole File At Once
address@hidden Reading a Whole File at Once
 
 Often, it is convenient to have the entire contents of a file available
 in memory as a single string. A straightforward but naive way to
@@ -20511,13 +20511,13 @@ function readfile(file,     tmp, save_rs)
 
 It works by setting @code{RS} to @samp{^$}, a regular expression that
 will never match if the file has contents.  @command{gawk} reads data from
-the file into @code{tmp} attempting to match @code{RS}.  The match fails
+the file into @code{tmp}, attempting to match @code{RS}.  The match fails
 after each read, but fails quickly, such that @command{gawk} fills
 @code{tmp} with the entire contents of the file.
 (@DBXREF{Records} for information on @code{RT} and @code{RS}.)
 
 In the case that @code{file} is empty, the return value is the null
-string.  Thus calling code may use something like:
+string.  Thus, calling code may use something like:
 
 @example
 contents = readfile("/some/path")
@@ -20528,7 +20528,7 @@ if (length(contents) == 0)
 This tests the result to see if it is empty or not. An equivalent
 test would be @samp{contents == ""}.
 
address@hidden Sample Readfile}, for an extension function that
address@hidden Sample Readfile} for an extension function that
 also reads an entire file into memory.
 
 @node Shell Quoting
@@ -20635,8 +20635,8 @@ The @code{BEGIN} and @code{END} rules are each executed 
exactly once, at
 the beginning and end of your @command{awk} program, respectively
 (@pxref{BEGIN/END}).
 We (the @command{gawk} authors) once had a user who mistakenly thought that the
address@hidden rule is executed at the beginning of each @value{DF} and the
address@hidden rule is executed at the end of each @value{DF}.
address@hidden rules were executed at the beginning of each @value{DF} and the
address@hidden rules were executed at the end of each @value{DF}.
 
 When informed
 that this was not the case, the user requested that we add new special
@@ -20676,7 +20676,7 @@ END @{ endfile(FILENAME) @}
 This file must be loaded before the user's ``main'' program, so that the
 rule it supplies is executed first.
 
-This rule relies on @command{awk}'s @code{FILENAME} variable that
+This rule relies on @command{awk}'s @code{FILENAME} variable, which
 automatically changes for each new @value{DF}.  The current @value{FN} is
 saved in a private variable, @code{_oldfilename}.  If @code{FILENAME} does
 not equal @code{_oldfilename}, then a new @value{DF} is being processed and
@@ -20692,7 +20692,7 @@ first @value{DF}.
 The program also supplies an @code{END} rule to do the final processing for
 the last file.  Because this @code{END} rule comes before any @code{END} rules
 supplied in the ``main'' program, @code{endfile()} is called first.  Once
-again the value of multiple @code{BEGIN} and @code{END} rules should be clear.
+again, the value of multiple @code{BEGIN} and @code{END} rules should be clear.
 
 @cindex @code{beginfile()} user-defined function
 @cindex @code{endfile()} user-defined function
@@ -20735,7 +20735,7 @@ how it simplifies writing the main program.
 
 You are probably wondering, if @code{beginfile()} and @code{endfile()}
 functions can do the job, why does @command{gawk} have
address@hidden and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
address@hidden and @code{ENDFILE} patterns?
 
 Good question.  Normally, if @command{awk} cannot open a file, this
 causes an immediate fatal error.  In this case, there is no way for a
@@ -20744,13 +20744,14 @@ calling it relies on the file being open and at the 
first record.  Thus,
 the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
 files that cannot be processed.  @code{ENDFILE} exists for symmetry,
 and because it provides an easy way to do per-file cleanup processing.
+For more information, refer to @ref{BEGINFILE/ENDFILE}.
 @end sidebar
 
 @node Rewind Function
 @subsection Rereading the Current File
 
 @cindex files, reading
-Another request for a new built-in function was for a @code{rewind()}
+Another request for a new built-in function was for a
 function that would make it possible to reread the current file.
 The requesting user didn't want to have to use @code{getline}
 (@pxref{Getline})
@@ -20759,7 +20760,7 @@ inside a loop.
 However, as long as you are not in the @code{END} rule, it is
 quite easy to arrange to immediately close the current input file
 and then start over with it from the top.
-For lack of a better name, we'll call it @code{rewind()}:
+For lack of a better name, we'll call the function @code{rewind()}:
 
 @cindex @code{rewind()} user-defined function
 @example
@@ -20852,16 +20853,16 @@ See also @ref{ARGC and ARGV}.
 Because @command{awk} variable names only allow the English letters,
 the regular expression check purposely does not use character classes
 such as @samp{[:alpha:]} and @samp{[:alnum:]}
-(@pxref{Bracket Expressions})
+(@pxref{Bracket Expressions}).
 
 @node Empty Files
address@hidden Checking for Zero-length Files
address@hidden Checking for Zero-Length Files
 
 All known @command{awk} implementations silently skip over zero-length files.
 This is a by-product of @command{awk}'s implicit
 read-a-record-and-match-against-the-rules loop: when @command{awk}
 tries to read a record from an empty file, it immediately receives an
-end of file indication, closes the file, and proceeds on to the next
+end-of-file indication, closes the file, and proceeds on to the next
 command-line @value{DF}, @emph{without} executing any user-level
 @command{awk} program code.
 
@@ -20926,7 +20927,7 @@ Occasionally, you might not want @command{awk} to 
process command-line
 variable assignments
 (@pxref{Assignment Options}).
 In particular, if you have a @value{FN} that contains an @samp{=} character,
address@hidden treats the @value{FN} as an assignment, and does not process it.
address@hidden treats the @value{FN} as an assignment and does not process it.
 
 Some users have suggested an additional command-line option for @command{gawk}
 to disable command-line assignments.  However, some simple programming with
@@ -21288,8 +21289,8 @@ BEGIN @{
 @c endfile
 @end example
 
-The rest of the @code{BEGIN} rule is a simple test program.  Here is the
-result of two sample runs of the test program:
+The rest of the @code{BEGIN} rule is a simple test program.  Here are the
+results of two sample runs of the test program:
 
 @example
 $ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x}
@@ -21347,7 +21348,7 @@ use @code{getopt()} to process their arguments.
 The @code{PROCINFO} array
 (@pxref{Built-in Variables})
 provides access to the current user's real and effective user and group ID
-numbers, and if available, the user's supplementary group set.
+numbers, and, if available, the user's supplementary group set.
 However, because these are numbers, they do not provide very useful
 information to the average user.  There needs to be some way to find the
 user information associated with the user and group ID numbers.  This
@@ -21367,7 +21368,7 @@ kept.  Instead, it provides the @code{<pwd.h>} header 
file
 and several C language subroutines for obtaining user information.
 The primary function is @code{getpwent()}, for ``get password entry.''
 The ``password'' comes from the original user database file,
address@hidden/etc/passwd}, which stores user information, along with the
address@hidden/etc/passwd}, which stores user information along with the
 encrypted passwords (hence the name).
 
 @cindex @command{pwcat} program
@@ -21466,7 +21467,7 @@ The user's encrypted password.  This may not be 
available on some systems.
 
 @item User-ID
 The user's numeric user ID number.
-(On some systems, it's a C @code{long}, and not an @code{int}.  Thus
+(On some systems, it's a C @code{long}, and not an @code{int}.  Thus,
 we cast it to @code{long} for all cases.)
 
 @item Group-ID
@@ -21593,7 +21594,7 @@ The code that checks for using @code{FPAT}, using 
@code{using_fpat}
 and @code{PROCINFO["FS"]}, is similar.
 
 The main part of the function uses a loop to read database lines, split
-the line into fields, and then store the line into each array as necessary.
+the lines into fields, and then store the lines into each array as necessary.
 When the loop is done, @address@hidden()}} cleans up by closing the pipeline,
 setting @address@hidden to one, and restoring @code{FS}
 (and @code{FIELDWIDTHS} or @code{FPAT}
@@ -21810,7 +21811,7 @@ it is usually empty or set to @samp{*}.
 @item Group ID Number
 The group's numeric group ID number;
 the association of name to number must be unique within the file.
-(On some systems it's a C @code{long}, and not an @code{int}.  Thus
+(On some systems it's a C @code{long}, and not an @code{int}.  Thus,
 we cast it to @code{long} for all cases.)
 
 @item Group Member List
@@ -21924,32 +21925,32 @@ The @address@hidden()}} function first saves 
@code{FS},
 @code{$0}, and then sets @code{FS} and @code{RS} to the correct values for
 scanning the group information.
 It also takes care to note whether @code{FIELDWIDTHS} or @code{FPAT}
-is being used, and to restore the appropriate field splitting mechanism.
+is being used, and to restore the appropriate field-splitting mechanism.
 
-The group information is stored is several associative arrays.
+The group information is stored in several associative arrays.
 The arrays are indexed by group name (@address@hidden), by group ID number
 (@address@hidden), and by position in the database (@address@hidden).
 There is an additional array indexed by username (@address@hidden),
 which is a space-separated list of groups to which each user belongs.
 
-Unlike the user database, it is possible to have multiple records in the
+Unlike in the user database, it is possible to have multiple records in the
 database for the same group.  This is common when a group has a large number
 of members.  A pair of such entries might look like the following:
 
 @example
-tvpeople:*:101:johny,jay,arsenio
+tvpeople:*:101:johnny,jay,arsenio
 tvpeople:*:101:david,conan,tom,joan
 @end example
 
 For this reason, @code{_gr_init()} looks to see if a group name or
-group ID number is already seen.  If it is, the usernames are
-simply concatenated onto the previous list of address@hidden is actually a
+group ID number is already seen.  If so, the usernames are
+simply concatenated onto the previous list of address@hidden is a
 subtle problem with the code just presented.  Suppose that
 the first time there were no names. This code adds the names with
 a leading comma. It also doesn't check that there is a @code{$4}.}
 
 Finally, @code{_gr_init()} closes the pipeline to @command{grcat}, restores
address@hidden (and @code{FIELDWIDTHS} or @code{FPAT} if necessary), @code{RS}, 
and @code{$0},
address@hidden (and @code{FIELDWIDTHS} or @code{FPAT}, if necessary), 
@code{RS}, and @code{$0},
 initializes @code{_gr_count} to zero
 (it is used later), and makes @code{_gr_inited} nonzero.
 
@@ -22049,12 +22050,12 @@ uses these functions.
 
 @DBREF{Arrays of Arrays} described how @command{gawk}
 provides arrays of arrays.  In particular, any element of
-an array may be either a scalar, or another array. The
+an array may be either a scalar or another array. The
 @code{isarray()} function (@pxref{Type Functions})
 lets you distinguish an array
 from a scalar.
 The following function, @code{walk_array()}, recursively traverses
-an array, printing each element's indices and value.
+an array, printing the element indices and values.
 You call it with the array and a string representing the name
 of the array:
 
@@ -22126,24 +22127,24 @@ The functions presented here fit into the following 
categories:
 @c nested list
 @table @asis
 @item General problems
-Number-to-string conversion, assertions, rounding, random number
+Number-to-string conversion, testing assertions, rounding, random number
 generation, converting characters to numbers, joining strings, getting
 easily usable time-of-day information, and reading a whole file in
-one shot.
+one shot
 
 @item Managing @value{DF}s
 Noting @value{DF} boundaries, rereading the current file, checking for
 readable files, checking for zero-length files, and treating assignments
-as @value{FN}s.
+as @value{FN}s
 
 @item Processing command-line options
-An @command{awk} version of the standard C @code{getopt()} function.
+An @command{awk} version of the standard C @code{getopt()} function
 
 @item Reading the user and group databases
-Two sets of routines that parallel the C library versions.
+Two sets of routines that parallel the C library versions
 
 @item Traversing arrays of arrays
-A simple function to traverse an array of arrays to any depth.
+A simple function to traverse an array of arrays to any depth
 @end table
 @c end nested list
 

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

Summary of changes:
 awklib/eg/lib/assert.awk |    2 +-
 doc/ChangeLog            |    4 +
 doc/gawk.info            |  718 +++++++++++++++++++++++-----------------------
 doc/gawk.texi            |   94 +++---
 doc/gawktexi.in          |   91 +++---
 5 files changed, 459 insertions(+), 450 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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