gawk-diffs
[Top][All Lists]
Advanced

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

[SCM] gawk branch, feature/csv-revamp, updated. gawk-4.1.0-5191-gc1fd2f8


From: Arnold Robbins
Subject: [SCM] gawk branch, feature/csv-revamp, updated. gawk-4.1.0-5191-gc1fd2f80
Date: Thu, 23 Mar 2023 13:50:34 -0400 (EDT)

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, feature/csv-revamp has been updated
       via  c1fd2f80c9e755b3f54a49bf3371a1f589b18135 (commit)
      from  0089ada17feeb26a58b96c434cb82a58a83c5a67 (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=c1fd2f80c9e755b3f54a49bf3371a1f589b18135

commit c1fd2f80c9e755b3f54a49bf3371a1f589b18135
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Thu Mar 23 19:50:17 2023 +0200

    Doc updates for CSV parsing.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index 238a1800..186d1e32 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,9 @@
+2023-03-23         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * gawktexi.in: Considerable work syncing the doc on CSV parsing
+       with changes in the code. Still stuff to do, maked with FIXMEs.
+       * wordlist, wordlist3: Updated.
+
 2023-03-19         Arnold D. Robbins     <arnold@skeeve.com>
 
        * awkcard.in: Document -k/--csv.
diff --git a/doc/gawk.info b/doc/gawk.info
index 42c7ee5b..6edd8822 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -966,6 +966,10 @@ release.
    After eight years, add another part ‘egrep’ and two more parts C.
 Document very well and release.
 
+   After 35 more years, add Unicode and CSV support, sprinkle lightly
+with a few choice features from ‘gawk’, document very well again, and
+release.
+
    The name ‘awk’ comes from the initials of its designers: Alfred V.
 Aho, Peter J. Weinberger, and Brian W. Kernighan.  The original version
 of ‘awk’ was written in 1977 at AT&T Bell Laboratories.  In 1985, a new
@@ -2717,6 +2721,12 @@ The following list describes options mandated by the 
POSIX standard:
      running the program.  The trace is printed to standard error.  Each
      “op code” is preceded by a ‘+’ sign in the output.
 
+‘-k’
+‘--csv’
+     Enable special processing for files with comma separated values
+     (CSV). *Note Comma Separated Fields::.  This option cannot be used
+     with ‘--posix’.  Attempting to do causes a fatal error.
+
 ‘-l’ EXT
 ‘--load’ EXT
      Load a dynamic extension named EXT.  Extensions are stored as
@@ -4555,6 +4565,10 @@ variable ‘RS’.  If ‘RS’ is any single character, 
that character
 separates records.  Otherwise (in ‘gawk’), ‘RS’ is treated as a regular
 expression.  This mechanism is explained in greater detail shortly.
 
+     NOTE: When ‘gawk’ is invoked with the ‘--csv’ option, nothing in
+     this minor node applies.  *Note Comma Separated Fields::, for the
+     details.
+
 * Menu:
 
 * awk split records::           How standard ‘awk’ splits records.
@@ -5096,13 +5110,13 @@ time to do this is at the beginning of execution before 
any input has
 been processed, so that the very first record is read with the proper
 separator.  To do this, use the special ‘BEGIN’ pattern (*note
 BEGIN/END::).  For example, here we set the value of ‘FS’ to the string
-‘","’:
+‘":"’:
 
      awk 'BEGIN { FS = "," } ; { print $2 }'
 
 Given the input line:
 
-     John Q. Smith, 29 Oak St., Walamazoo, MI 42139
+     John Q. Smith: 29 Oak St.: Walamazoo: MI 42139
 
 this ‘awk’ program extracts and prints the string ‘•29•Oak•St.’.
 
@@ -5111,7 +5125,7 @@ separate fields the way you thought they would.  For 
instance, the
 person’s name in the example we just used might have a title or suffix
 attached, such as:
 
-     John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
+     John Q. Smith: LXIX: 29 Oak St.: Walamazoo: MI 42139
 
 The same program would extract ‘•LXIX’ instead of 
‘•29•Oak•St.’.  If you
 were expecting the program to print the address, you would be surprised.
@@ -5260,20 +5274,22 @@ File: gawk.info,  Node: Comma Separated Fields,  Next: 
Command Line Field Separa
 Many commonly-used tools use a comma to separate fields, instead of
 whitespace.  This is particularly true of popular spreadsheet programs.
 There is no universally accepted standard for the format of these files,
-although RFC 4180 (http://www.ietf.org/rfc/rfc4180.txt) lists the common
+although RFC 4180 (http://www.ietf.org/rfc/rfc4180) lists the common
 practices.
 
    For decades, anyone wishing to work with CSV files and ‘awk’ had to
-“roll their own” solution.  (For example, *note Splitting By Content::).
-In 2023, Brian Kernighan decided to add basic CSV support to his version
-of ‘awk’.  In order to keep up, ‘gawk’ too provides the same support as
-his version.  To use CSV data, set ‘FS’ equal to a string with a single
-comma, like so: ‘FS = ","’.
+“roll their own” solution.  (For an example, *note Splitting By
+Content::).  In 2023, Brian Kernighan decided to add CSV support to his
+version of ‘awk’.  In order to keep up, ‘gawk’ too provides the same
+support as his version.  To use CSV data, invoke ‘gawk’ with either of
+the ‘-k’ or ‘--csv’ options.
 
    Fields in CSV files are separated by commas.  In order to allow a
 comma to appear inside a field (i.e., as data), the field may be quoted
 by beginning and ending it with double quotes.  In order to allow a
-double quote inside a double-quoted field, two double quotes are used.
+double quote inside a field, the field _must_ be quoted, and two double
+quotes are used to represent an actual double quote.  The double quote
+that starts a quoted field must be the first character after the comma.
 *note Table 4.1: table-csv-examples. shows some examples.
 
 
@@ -5284,22 +5300,36 @@ Input                  Field Contents
 ‘"quoted, data"’       ‘quoted, data’
 ‘"She said             ‘She said "Stop!".’
 ""Stop!""."’
-‘She said "Stop!".’    ‘She said "Stop!".’
 
 Table 4.1: Examples of CSV data
 
-   The double-quote that starts a quoted field must be the first
-character after the comma.
+   Additionally, and here’s where it gets messy, newlines are also
+allowed inside double-quoted fields!  In order to deal with such things,
+when processing CSV files, ‘gawk’ scans the input data looking for
+newlines that are not enclosed in double quotes.  Thus, use of the
+‘--csv’ totally overrides normal record processing with ‘RS’ (*note
+Records::).
 
-   Some programs that support CSV-formatted data even allow fields to
-include embedded newlines (such as a postal address, for example).  This
-is _not_ supported in either BWK ‘awk’ or in ‘gawk’.  This cannot be
-done using only facilities in the ‘awk’ language, since ‘awk’ first
-splits the input into records, and the default record separator is a
-newline.  Thus any newline embedded in a field simply terminates the
-record.
+   Many CSV files are imported from systems where the line terminator
+for text files is a carriage-return–line-feed pair (CR-LF, ‘\r’ followed
+by ‘\n’).  For ease of use, when processing CSV files, ‘gawk’ simply
+strips out any carriage-return characters in the input.
+
+   The behavior of the ‘split()’ function (not formally discussed yet,
+see *note String Functions::) differs slightly when processing CSV
+files.  When called with two arguments (‘split(STRING, ARRAY)’),
+‘split()’ does CSV-based splitting.  Otherwise, it behaves normally.
+
+   If ‘--csv’ has been used, ‘PROCINFO["CSV"]’ will exist.  Otherwise,
+it will not.  *Note Auto-set::.
 
-   CSV input parsing is disabled in POSIX mode.
+   Finally, if ‘--csv’ has been used, assigning a value to any of ‘FS’,
+‘FIELDWIDTHS’, ‘FPAT’, or ‘RS’ generates a warning message.
+
+   To be clear, ‘gawk’ takes RFC 4180 (http://www.ietf.org/rfc/rfc4180)
+as its specification for CSV input data.  There are no mechanisms for
+accepting nonstandard CSV data, such as files that use a semicolon
+instead of a comma as the separator.
 
 
 File: gawk.info,  Node: Command Line Field Separator,  Next: Full Line Fields, 
 Prev: Comma Separated Fields,  Up: Field Separators
@@ -5444,6 +5474,10 @@ period followed by any single character, use ‘FS = 
"\\.."’.
    The following list summarizes how fields are split, based on the
 value of ‘FS’ (‘==’ means “is equal to”):
 
+‘gawk was invoked with --csv’
+     Field splitting follows the rules given in *note Comma Separated
+     Fields::.  The value of ‘FS’ is ignored.
+
 ‘FS == " "’
      Fields are separated by runs of whitespace.  Leading and trailing
      whitespace are ignored.  This is the default.
@@ -5678,13 +5712,16 @@ File: gawk.info,  Node: Splitting By Content,  Next: 
Testing field creation,  Pr
 4.7 Defining Fields by Content
 ==============================
 
+*FIXME*: This whole section needs rewriting now that ‘gawk’ has built-in
+CSV parsing.  Sigh.
+
 * Menu:
 
 * More CSV::                    More on CSV files.
 * FS versus FPAT::              A subtle difference.
 
-This minor node discusses an advanced feature of ‘gawk’.  If you are a
-novice ‘awk’ user, you might want to skip it on the first reading.
+   This minor node discusses an advanced feature of ‘gawk’.  If you are
+a novice ‘awk’ user, you might want to skip it on the first reading.
 
    Normally, when using ‘FS’, ‘gawk’ defines the fields as the parts of
 the record that occur in between each field separator.  In other words,
@@ -5692,13 +5729,13 @@ the record that occur in between each field separator.  
In other words,
 However, there are times when you really want to define the fields by
 what they are, and not by what they are not.
 
-   The most notorious such case is so-called “comma-separated values”
-(CSV) data.  Many spreadsheet programs, for example, can export their
-data into text files, where each record is terminated with a newline,
-and fields are separated by commas.  If commas only separated the data,
-there wouldn’t be an issue.  The problem comes when one of the fields
-contains an _embedded_ comma.  In such cases, most programs embed the
-field in double quotes.(1)  So, we might have data like this:
+   The most notorious such case is comma-separated values (CSV) data.
+Many spreadsheet programs, for example, can export their data into text
+files, where each record is terminated with a newline, and fields are
+separated by commas.  If commas only separated the data, there wouldn’t
+be an issue.  The problem comes when one of the fields contains an
+_embedded_ comma.  In such cases, most programs embed the field in
+double quotes.(1)  So, we might have data like this:
 
      Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
 
@@ -5891,7 +5928,9 @@ field splitting is being used, ‘"FIELDWIDTHS"’ if 
fixed-width field
 splitting is being used, or ‘"FPAT"’ if content-based field splitting is
 being used:
 
-     if (PROCINFO["FS"] == "FS")
+     if ("CSV" in PROCINFO)
+         CSV-BASED FIELD SPLITTING ...
+     else if (PROCINFO["FS"] == "FS")
          REGULAR FIELD SPLITTING ...
      else if (PROCINFO["FS"] == "FIELDWIDTHS")
          FIXED-WIDTH FIELD SPLITTING ...
@@ -5901,9 +5940,9 @@ being used:
          API INPUT PARSER FIELD SPLITTING ... (advanced feature)
 
    This information is useful when writing a function that needs to
-temporarily change ‘FS’ or ‘FIELDWIDTHS’, read some records, and then
-restore the original settings (*note Passwd Functions:: for an example
-of such a function).
+temporarily change ‘FS’, ‘FIELDWIDTHS’, or ‘FPAT’, read some 
records,
+and then restore the original settings (*note Passwd Functions:: for an
+example of such a function).
 
 
 File: gawk.info,  Node: Multiple Line,  Next: Getline,  Prev: Testing field 
creation,  Up: Reading Files
@@ -13558,11 +13597,7 @@ Options::):
      ‘ARRAY[I+1]’.  If FIELDSEP is a single space, then any leading
      whitespace goes into ‘SEPS[0]’ and any trailing whitespace goes
      into ‘SEPS[N]’, where N is the return value of ‘split()’ (i.e., 
the
-     number of elements in ARRAY).  If FIELDSEP is a comma, and ‘gawk’
-     is not in POSIX mode, then the string is split using the CSV
-     parsing rules, as for ‘FS’ (*note Comma Separated Fields::).  In
-     this case, the SEPS array is not filled in, since each element
-     would simply consist of a string containing a comma.
+     number of elements in ARRAY).
 
      The ‘split()’ function splits strings into pieces in the same way
      that input lines are split into fields.  For example:
@@ -13583,6 +13618,13 @@ Options::):
 
      The value returned by this call to ‘split()’ is three.
 
+     If ‘gawk’ is invoked with ‘--csv’, then a two-argument call to
+     ‘split()’ splits the string using the CSV parsing rules as
+     described in *note Comma Separated Fields::.  With three and four
+     arguments, ‘split()’ works as just described.  The four-argument
+     call makes no sense, since each element of SEPS would simply
+     consist of a string containing a comma.
+
      As with input field-splitting, when the value of FIELDSEP is ‘" "’,
      leading and trailing whitespace is ignored in values assigned to
      the elements of ARRAY but not in SEPS, and the elements are
@@ -35833,7 +35875,7 @@ Index
 * * (asterisk), *= operator <1>:         Precedence.          (line  94)
 * * (asterisk), **= operator <1>:        Precedence.          (line  94)
 * * (asterisk), * operator, null strings, matching: String Functions.
-                                                              (line 567)
+                                                              (line 570)
 * + (plus sign), regexp operator:        Regexp Operator Details.
                                                               (line 107)
 * + (plus sign), += operator:            Assignment Ops.      (line  81)
@@ -35845,7 +35887,7 @@ Index
 * + (plus sign), += operator <1>:        Precedence.          (line  94)
 * , (comma), in range patterns:          Ranges.              (line   6)
 * - (hyphen), file names beginning with: Options.             (line  63)
-* - (hyphen), -- end of options marker:  Options.             (line 354)
+* - (hyphen), -- end of options marker:  Options.             (line 360)
 * - (hyphen), in bracket expressions:    Bracket Expressions. (line  25)
 * - (hyphen), -= operator:               Assignment Ops.      (line 129)
 * - (hyphen), -- operator:               Increment Ops.       (line  48)
@@ -35854,9 +35896,10 @@ Index
 * - (hyphen), - operator <1>:            Precedence.          (line  57)
 * - (hyphen), -= operator <1>:           Precedence.          (line  94)
 * --assign option:                       Options.             (line  36)
-* --bignum option:                       Options.             (line 242)
+* --bignum option:                       Options.             (line 248)
 * --characters-as-bytes option:          Options.             (line  72)
 * --copyright option:                    Options.             (line  92)
+* --csv option:                          Options.             (line 203)
 * --debug option:                        Options.             (line 111)
 * --disable-extensions configuration option: Additional Configuration Options.
                                                               (line   9)
@@ -35880,22 +35923,22 @@ Index
 * --help option:                         Options.             (line 175)
 * --include option:                      Options.             (line 180)
 * --lint option:                         Command Line.        (line  20)
-* --lint option <1>:                     Options.             (line 215)
-* --lint-old option:                     Options.             (line 344)
-* --load option:                         Options.             (line 203)
-* --no-optimize option:                  Options.             (line 329)
-* --non-decimal-data option:             Options.             (line 255)
+* --lint option <1>:                     Options.             (line 221)
+* --lint-old option:                     Options.             (line 350)
+* --load option:                         Options.             (line 209)
+* --no-optimize option:                  Options.             (line 335)
+* --non-decimal-data option:             Options.             (line 261)
 * --non-decimal-data option <1>:         Nondecimal Data.     (line   6)
 * --non-decimal-data option, strtonum() function and: Nondecimal Data.
                                                               (line  35)
-* --optimize option:                     Options.             (line 280)
-* --posix option:                        Options.             (line 302)
-* --posix option, --traditional option and: Options.          (line 317)
-* --pretty-print option:                 Options.             (line 269)
-* --profile option:                      Options.             (line 290)
+* --optimize option:                     Options.             (line 286)
+* --posix option:                        Options.             (line 308)
+* --posix option, --traditional option and: Options.          (line 323)
+* --pretty-print option:                 Options.             (line 275)
+* --profile option:                      Options.             (line 296)
 * --profile option <1>:                  Profiling.           (line  12)
-* --re-interval option:                  Options.             (line 323)
-* --sandbox option:                      Options.             (line 334)
+* --re-interval option:                  Options.             (line 329)
+* --sandbox option:                      Options.             (line 340)
 * --sandbox option, input redirection with getline: Getline.  (line  19)
 * --sandbox option, output redirection with print, printf: Redirection.
                                                               (line   6)
@@ -35904,9 +35947,9 @@ Index
 * --source option:                       Options.             (line 120)
 * --trace option:                        Options.             (line 197)
 * --traditional option:                  Options.             (line  85)
-* --traditional option, --posix option and: Options.          (line 317)
-* --use-lc-numeric option:               Options.             (line 264)
-* --version option:                      Options.             (line 349)
+* --traditional option, --posix option and: Options.          (line 323)
+* --use-lc-numeric option:               Options.             (line 270)
+* --version option:                      Options.             (line 355)
 * -b option:                             Options.             (line  72)
 * -c option:                             Options.             (line  85)
 * -C option:                             Options.             (line  92)
@@ -35914,33 +35957,34 @@ Index
 * -D option:                             Options.             (line 111)
 * -e option:                             Options.             (line 120)
 * -E option:                             Options.             (line 146)
-* -e option <1>:                         Options.             (line 390)
+* -e option <1>:                         Options.             (line 396)
 * -f option:                             Long.                (line  12)
 * -F option:                             Options.             (line  21)
 * -f option <1>:                         Options.             (line  25)
-* -F option, -Ft sets FS to TAB:         Options.             (line 362)
-* -f option, multiple uses:              Options.             (line 367)
+* -F option, -Ft sets FS to TAB:         Options.             (line 368)
+* -f option, multiple uses:              Options.             (line 373)
 * -F option, command-line:               Command Line Field Separator.
                                                               (line   6)
 * -g option:                             Options.             (line 168)
 * -h option:                             Options.             (line 175)
 * -i option:                             Options.             (line 180)
 * -I option:                             Options.             (line 197)
-* -l option:                             Options.             (line 203)
-* -l option <1>:                         Options.             (line 215)
-* -L option:                             Options.             (line 344)
-* -M option:                             Options.             (line 242)
-* -n option:                             Options.             (line 255)
-* -N option:                             Options.             (line 264)
-* -o option:                             Options.             (line 269)
-* -O option:                             Options.             (line 280)
-* -p option:                             Options.             (line 290)
-* -P option:                             Options.             (line 302)
-* -r option:                             Options.             (line 323)
-* -s option:                             Options.             (line 329)
-* -S option:                             Options.             (line 334)
+* -k option:                             Options.             (line 203)
+* -l option:                             Options.             (line 209)
+* -l option <1>:                         Options.             (line 221)
+* -L option:                             Options.             (line 350)
+* -M option:                             Options.             (line 248)
+* -n option:                             Options.             (line 261)
+* -N option:                             Options.             (line 270)
+* -o option:                             Options.             (line 275)
+* -O option:                             Options.             (line 286)
+* -p option:                             Options.             (line 296)
+* -P option:                             Options.             (line 308)
+* -r option:                             Options.             (line 329)
+* -s option:                             Options.             (line 335)
+* -S option:                             Options.             (line 340)
 * -v option:                             Options.             (line  36)
-* -V option:                             Options.             (line 349)
+* -V option:                             Options.             (line 355)
 * -v option <1>:                         Assignment Options.  (line  12)
 * -W option:                             Options.             (line  50)
 * . (period), regexp operator:           Regexp Operator Details.
@@ -36122,13 +36166,13 @@ Index
 * adding, features to gawk:              Adding Code.         (line   6)
 * advanced features, fixed-width data:   Constant Size.       (line   6)
 * advanced features, specifying field content: Splitting By Content.
-                                                              (line  14)
+                                                              (line  17)
 * advanced features, gawk:               Advanced Features.   (line   6)
 * advanced features, nondecimal input data: Nondecimal Data.  (line   6)
 * advanced features, processes, communicating with: Two-way I/O.
                                                               (line   6)
 * advanced features, network programming: TCP/IP Networking.  (line   6)
-* Aho, Alfred:                           History.             (line  17)
+* Aho, Alfred:                           History.             (line  21)
 * Aho, Alfred <1>:                       Contributors.        (line  12)
 * alarm clock example program:           Alarm Program.       (line  11)
 * alarm.awk program:                     Alarm Program.       (line  31)
@@ -36176,7 +36220,7 @@ Index
 * arguments, command-line <1>:           Auto-set.            (line  15)
 * arguments, command-line <2>:           ARGC and ARGV.       (line   6)
 * arguments, processing:                 Getopt Function.     (line   6)
-* ARGV array:                            Options.             (line 334)
+* ARGV array:                            Options.             (line 340)
 * ARGV array, indexing into:             Other Arguments.     (line  21)
 * arithmetic operators:                  Arithmetic Ops.      (line   6)
 * array manipulation in extensions:      Array Manipulation.  (line   6)
@@ -36274,7 +36318,7 @@ Index
 * asterisk (*), *= operator <1>:         Precedence.          (line  94)
 * asterisk (*), **= operator <1>:        Precedence.          (line  94)
 * asterisk (*), * operator, null strings, matching: String Functions.
-                                                              (line 567)
+                                                              (line 570)
 * at-sign (@), @include directive:       Include Files.       (line   8)
 * at-sign (@), @load directive:          Loading Shared Libraries.
                                                               (line   8)
@@ -36292,7 +36336,7 @@ Index
 * awk, POSIX and <1>:                    Preface.             (line  21)
 * awk, gawk and:                         Preface.             (line  21)
 * awk, uses for:                         Preface.             (line  21)
-* awk, history of:                       History.             (line  17)
+* awk, history of:                       History.             (line  21)
 * awk, new vs. old:                      Names.               (line   6)
 * awk, terms describing:                 This Manual.         (line   6)
 * awk, gawk and <1>:                     This Manual.         (line  14)
@@ -36300,7 +36344,7 @@ Index
 * awk, uses for <1>:                     Getting Started.     (line  12)
 * awk, uses for <2>:                     When.                (line   6)
 * awk, invoking:                         Command Line.        (line   6)
-* awk, profiling, enabling:              Options.             (line 290)
+* awk, profiling, enabling:              Options.             (line 296)
 * awk, implementations, limits:          Getline Notes.       (line  14)
 * awk, implementation issues, pipes:     Redirection.         (line 129)
 * awk, new vs. old, OFMT variable:       Strings And Numbers. (line  56)
@@ -36352,7 +36396,7 @@ Index
                                                               (line  41)
 * awkcc, awk to C translator:            Other Versions.      (line 167)
 * AWKgo:                                 Other Versions.      (line 133)
-* AWKLIBPATH environment variable:       Options.             (line 203)
+* AWKLIBPATH environment variable:       Options.             (line 209)
 * AWKLIBPATH environment variable <1>:   AWKLIBPATH Variable. (line   6)
 * AWKLIBPATH environment variable <2>:   Loading Shared Libraries.
                                                               (line   8)
@@ -36550,7 +36594,7 @@ Index
 * Brian Kernighan’s awk <9>:             Continue Statement.  (line  44)
 * Brian Kernighan’s awk <10>:            Nextfile Statement.  (line  47)
 * Brian Kernighan’s awk <11>:            Delete.              (line  51)
-* Brian Kernighan’s awk <12>:            String Functions.    (line 514)
+* Brian Kernighan’s awk <12>:            String Functions.    (line 517)
 * Brian Kernighan’s awk <13>:            Gory Details.        (line  19)
 * Brian Kernighan’s awk <14>:            I/O Functions.       (line  43)
 * Brian Kernighan’s awk, extensions:     BTL.                 (line   6)
@@ -36617,7 +36661,7 @@ Index
 * case sensitivity, string comparisons and: User-modified.    (line  79)
 * case sensitivity, regexps and <1>:     User-modified.       (line  79)
 * case sensitivity, array indices and:   Array Intro.         (line 100)
-* case sensitivity, converting case:     String Functions.    (line 544)
+* case sensitivity, converting case:     String Functions.    (line 547)
 * case sensitivity, example programs:    Library Functions.   (line  50)
 * CGI, awk scripts for:                  Options.             (line 146)
 * character sets (machine character encodings): Ordinal Functions.
@@ -36661,10 +36705,12 @@ Index
 * columns, aligning:                     Print Examples.      (line  69)
 * columns, cutting:                      Cut Program.         (line   6)
 * comma (,), in range patterns:          Ranges.              (line   6)
-* comma separated values (CSV) data, parsing with FS: Comma Separated Fields.
+* comma separated values (CSV) data, -k option: Options.      (line 203)
+* comma separated values (CSV) data, --csv option: Options.   (line 203)
+* comma separated values (CSV) data, records and fields: Comma Separated 
Fields.
                                                               (line   6)
 * Comma separated values (CSV) data, parsing with FPAT: Splitting By Content.
-                                                              (line  20)
+                                                              (line  23)
 * Comma separated values (CSV) data, parsing with FPAT library: More CSV.
                                                               (line  52)
 * command completion, in debugger:       Readline Support.    (line   6)
@@ -36760,9 +36806,9 @@ Index
 * converting, numbers to strings:        Strings And Numbers. (line   6)
 * converting, integer array subscripts to strings: Numeric Array Subscripts.
                                                               (line  31)
-* converting, string to numbers <1>:     String Functions.    (line 412)
-* converting, string to lower case:      String Functions.    (line 545)
-* converting, string to upper case:      String Functions.    (line 551)
+* converting, string to numbers <1>:     String Functions.    (line 415)
+* converting, string to lower case:      String Functions.    (line 548)
+* converting, string to upper case:      String Functions.    (line 554)
 * converting, dates to timestamps:       Time Functions.      (line  77)
 * converting, string to numbers <2>:     Bitwise Functions.   (line 110)
 * converting, numbers to strings <1>:    Bitwise Functions.   (line 110)
@@ -36780,12 +36826,14 @@ Index
 * cosine:                                Numeric Functions.   (line  15)
 * counting words, lines, characters, and bytes: Wc Program.   (line   6)
 * csh utility:                           Statements/Lines.    (line  45)
-* csh utility, POSIXLY_CORRECT environment variable: Options. (line 411)
+* csh utility, POSIXLY_CORRECT environment variable: Options. (line 417)
 * csh utility, |& operator, comparison with: Two-way I/O.     (line  27)
-* CSV (comma separated values) data, parsing with FS: Comma Separated Fields.
+* CSV (comma separated values) data, -k option: Options.      (line 203)
+* CSV (comma separated values) data, --csv option: Options.   (line 203)
+* CSV (comma separated values) data, records and fields: Comma Separated 
Fields.
                                                               (line   6)
 * CSV (comma separated values) data, parsing with FPAT: Splitting By Content.
-                                                              (line  20)
+                                                              (line  23)
 * CSV (comma separated values) data, parsing with CSVMODE library: More CSV.
                                                               (line  52)
 * CSVMODE library for gawk:              More CSV.            (line  52)
@@ -36853,7 +36901,7 @@ Index
 * dark corner, regexp as second argument to index(): String Functions.
                                                               (line 178)
 * dark corner, length() function:        String Functions.    (line 200)
-* dark corner, split() function:         String Functions.    (line 383)
+* dark corner, split() function:         String Functions.    (line 386)
 * dark corner, parameter name restrictions: Definition Syntax.
                                                               (line  44)
 * dark corner <1>:                       Glossary.            (line 266)
@@ -37013,7 +37061,7 @@ Index
 * debugging, example session:            Sample Debugging Session.
                                                               (line   6)
 * debugging gawk, bug reports:           Bugs.                (line   9)
-* decimal point character, locale specific: Options.          (line 314)
+* decimal point character, locale specific: Options.          (line 320)
 * decrement operators:                   Increment Ops.       (line  35)
 * default keyword:                       Switch Statement.    (line   6)
 * Deifik, Scott:                         Acknowledgments.     (line  60)
@@ -37107,7 +37155,7 @@ Index
 * differences in awk and gawk, match() function: String Functions.
                                                               (line 276)
 * differences in awk and gawk, split() function: String Functions.
-                                                              (line 368)
+                                                              (line 371)
 * differences in awk and gawk, indirect function calls: Indirect Calls.
                                                               (line   6)
 * differences in awk and gawk, BINMODE variable <1>: PC Using.
@@ -37210,8 +37258,8 @@ Index
 * endpwent() user-defined function:      Passwd Functions.    (line 210)
 * English, Steve:                        Advanced Features.   (line   6)
 * ENVIRON array:                         Auto-set.            (line  59)
-* environment variables, AWKLIBPATH:     Options.             (line 203)
-* environment variables, POSIXLY_CORRECT: Options.            (line 396)
+* environment variables, AWKLIBPATH:     Options.             (line 209)
+* environment variables, POSIXLY_CORRECT: Options.            (line 402)
 * environment variables, used by gawk:   Environment Variables.
                                                               (line   6)
 * environment variables, AWKPATH:        AWKPATH Variable.    (line   6)
@@ -37414,7 +37462,7 @@ Index
 * features, deprecated:                  Obsolete.            (line   6)
 * features, undocumented:                Undocumented.        (line   6)
 * features, adding to gawk:              Adding Code.         (line   6)
-* Fenlason, Jay:                         History.             (line  30)
+* Fenlason, Jay:                         History.             (line  34)
 * Fenlason, Jay <1>:                     Contributors.        (line  19)
 * fflush:                                I/O Functions.       (line  28)
 * field numbers:                         Nonconstant Fields.  (line   6)
@@ -37552,7 +37600,7 @@ Index
 * format time string:                    Time Functions.      (line  50)
 * formats, numeric output:               OFMT.                (line   6)
 * formatting, output:                    Printf.              (line   6)
-* formatting, strings:                   String Functions.    (line 405)
+* formatting, strings:                   String Functions.    (line 408)
 * forward slash (/), to enclose regular expressions: Regexp.  (line  10)
 * forward slash (/), /= operator:        Assignment Ops.      (line 129)
 * forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops.
@@ -37561,7 +37609,7 @@ Index
 * forward slash (/), /= operator <1>:    Precedence.          (line  94)
 * forward slash (/), patterns and:       Expression Patterns. (line  24)
 * FPAT variable:                         Splitting By Content.
-                                                              (line  30)
+                                                              (line  33)
 * FPAT variable <1>:                     User-modified.       (line  46)
 * frame debugger command:                Execution Stack.     (line  27)
 * frawk:                                 Other Versions.      (line 117)
@@ -37573,17 +37621,13 @@ Index
 * Free Software Foundation (FSF) <3>:    Glossary.            (line 403)
 * FreeBSD:                               Glossary.            (line 747)
 * FS variable, --field-separator option and: Options.         (line  21)
-* FS variable, TAB character as:         Options.             (line 311)
+* FS variable, TAB character as:         Options.             (line 317)
 * FS variable:                           Field Separators.    (line  16)
 * FS variable, changing value of:        Field Separators.    (line  35)
 * FS variable, containing ^:             Regexp Field Splitting.
                                                               (line  58)
 * FS variable, null string as:           Single Character Fields.
                                                               (line  20)
-* FS variable, character "," as:         Comma Separated Fields.
-                                                              (line   6)
-* FS variable, parsing CSV files:        Comma Separated Fields.
-                                                              (line   6)
 * FS variable, setting from command line: Command Line Field Separator.
                                                               (line   6)
 * FS variable, in multiline records:     Multiple Line.       (line  41)
@@ -37652,8 +37696,8 @@ Index
 * gawk, uses for:                        Preface.             (line  34)
 * gawk, awk and <1>:                     This Manual.         (line  14)
 * gawk, newlines in:                     Statements/Lines.    (line  12)
-* gawk, extensions, disabling:           Options.             (line 302)
-* gawk, version of, printing information about: Options.      (line 349)
+* gawk, extensions, disabling:           Options.             (line 308)
+* gawk, version of, printing information about: Options.      (line 355)
 * gawk, ARGIND variable in:              Other Arguments.     (line  21)
 * gawk, PROCINFO array in:               Other Arguments.     (line  21)
 * gawk, escape sequences:                Escape Sequences.    (line 120)
@@ -37676,7 +37720,7 @@ Index
 * gawk, RT variable in <1>:              gawk split records.  (line  66)
 * gawk, FIELDWIDTHS variable in:         Fixed width data.    (line  17)
 * gawk, FPAT variable in:                Splitting By Content.
-                                                              (line  30)
+                                                              (line  33)
 * gawk, splitting fields and:            Testing field creation.
                                                               (line   6)
 * gawk, RT variable in <2>:              Multiple Line.       (line 138)
@@ -37861,7 +37905,7 @@ Index
 * gsub:                                  Standard Regexp Constants.
                                                               (line  43)
 * gsub <1>:                              String Functions.    (line 153)
-* gsub() function, arguments of:         String Functions.    (line 484)
+* gsub() function, arguments of:         String Functions.    (line 487)
 * gsub() function, escape processing:    Gory Details.        (line   6)
 * Guerrero, Juan Manuel:                 Acknowledgments.     (line  60)
 * Guerrero, Juan Manuel <1>:             Contributors.        (line 150)
@@ -37876,13 +37920,13 @@ Index
 * help debugger command:                 Miscellaneous Debugger Commands.
                                                               (line  67)
 * hexadecimal numbers:                   Nondecimal-numbers.  (line   6)
-* hexadecimal values, enabling interpretation of: Options.    (line 255)
+* hexadecimal values, enabling interpretation of: Options.    (line 261)
 * history expansion, in debugger:        Readline Support.    (line   6)
 * histsort.awk program:                  History Sorting.     (line  25)
 * Hughes, Phil:                          Acknowledgments.     (line  43)
 * HUP signal, for dynamic profiling:     Profiling.           (line 217)
 * hyphen (-), file names beginning with: Options.             (line  63)
-* hyphen (-), -- end of options marker:  Options.             (line 354)
+* hyphen (-), -- end of options marker:  Options.             (line 360)
 * hyphen (-), in bracket expressions:    Bracket Expressions. (line  25)
 * hyphen (-), -= operator:               Assignment Ops.      (line 129)
 * hyphen (-), -- operator:               Increment Ops.       (line  48)
@@ -38028,7 +38072,7 @@ Index
 * Kelly, Terence <1>:                    Persistent Memory.   (line 127)
 * Kelly, Terence <2>:                    Feature History.     (line 510)
 * Kenobi, Obi-Wan:                       Undocumented.        (line   6)
-* Kernighan, Brian:                      History.             (line  17)
+* Kernighan, Brian:                      History.             (line  21)
 * Kernighan, Brian, quotes:              Conventions.         (line  38)
 * Kernighan, Brian <1>:                  Acknowledgments.     (line  79)
 * Kernighan, Brian, quotes <1>:          Getline/Pipe.        (line   6)
@@ -38112,9 +38156,9 @@ Index
 * lines, counting:                       Wc Program.          (line   6)
 * lines, duplicate, removing:            History Sorting.     (line   6)
 * lint checking, empty programs:         Command Line.        (line  16)
-* lint checking, issuing warnings:       Options.             (line 215)
+* lint checking, issuing warnings:       Options.             (line 221)
 * lint checking, POSIXLY_CORRECT environment variable: Options.
-                                                              (line 396)
+                                                              (line 402)
 * lint checking:                         User-modified.       (line  90)
 * lint checking, array subscripts:       Uninitialized Subscripts.
                                                               (line  43)
@@ -38127,13 +38171,13 @@ Index
 * list function definitions, in debugger: Debugger Info.      (line  30)
 * @load directive:                       Loading Shared Libraries.
                                                               (line   8)
-* loading extensions:                    Options.             (line 203)
+* loading extensions:                    Options.             (line 209)
 * loading extensions, @load directive:   Loading Shared Libraries.
                                                               (line   8)
 * local variables, in a function:        Variable Scope.      (line   6)
 * local variables, show in debugger:     Debugger Info.       (line  34)
 * locale categories:                     Explaining gettext.  (line  81)
-* locale decimal point character:        Options.             (line 314)
+* locale decimal point character:        Options.             (line 320)
 * locale, definition of:                 Locales.             (line   6)
 * log:                                   Numeric Functions.   (line  28)
 * log files, timestamps in:              Time Functions.      (line   6)
@@ -38172,7 +38216,7 @@ Index
 * matching, leftmost longest:            Multiple Line.       (line  26)
 * matching, expressions:                 Typing and Comparison.
                                                               (line   9)
-* matching, null strings:                String Functions.    (line 567)
+* matching, null strings:                String Functions.    (line 570)
 * mawk utility:                          Escape Sequences.    (line 120)
 * mawk utility <1>:                      Getline/Pipe.        (line  62)
 * mawk utility <2>:                      Concatenation.       (line  36)
@@ -38252,7 +38296,7 @@ Index
 * networks, support for:                 Special Network.     (line   6)
 * networks, programming:                 TCP/IP Networking.   (line   6)
 * newlines:                              Statements/Lines.    (line   6)
-* newlines <1>:                          Options.             (line 308)
+* newlines <1>:                          Options.             (line 314)
 * newlines, in dynamic regexps:          Computed Regexps.    (line  60)
 * newlines, in regexp constants:         Computed Regexps.    (line  70)
 * newlines, as record separators:        awk split records.   (line  12)
@@ -38303,7 +38347,7 @@ Index
 * null strings, as array subscripts:     Uninitialized Subscripts.
                                                               (line  43)
 * null strings, deleting array elements and: Delete.          (line  27)
-* null strings, matching:                String Functions.    (line 567)
+* null strings, matching:                String Functions.    (line 570)
 * null strings <3>:                      Basic Data Typing.   (line  26)
 * number of array elements:              String Functions.    (line 214)
 * number sign (#), #! (executable scripts): Executable Scripts.
@@ -38329,7 +38373,7 @@ Index
 * o debugger command (alias for option): Debugger Info.       (line  57)
 * obsolete features:                     Obsolete.            (line   6)
 * octal numbers:                         Nondecimal-numbers.  (line   6)
-* octal values, enabling interpretation of: Options.          (line 255)
+* octal values, enabling interpretation of: Options.          (line 261)
 * OFMT variable:                         OFMT.                (line  15)
 * OFMT variable, POSIX awk and:          OFMT.                (line  27)
 * OFMT variable <1>:                     Strings And Numbers. (line  56)
@@ -38338,6 +38382,7 @@ Index
 * OFS variable <1>:                      Output Separators.   (line   6)
 * OFS variable <2>:                      User-modified.       (line 116)
 * op-codes, trace of internal:           Options.             (line 197)
+* op-codes, trace of internal <1>:       Options.             (line 203)
 * OpenBSD:                               Glossary.            (line 747)
 * OpenSolaris:                           Other Versions.      (line 100)
 * operating systems, BSD-based:          Manual History.      (line  28)
@@ -38470,7 +38515,7 @@ Index
 * portability, #! (executable scripts):  Executable Scripts.  (line  29)
 * portability, ARGV variable:            Executable Scripts.  (line  55)
 * portability, backslash continuation and: Statements/Lines.  (line  30)
-* portability, POSIXLY_CORRECT environment variable: Options. (line 416)
+* portability, POSIXLY_CORRECT environment variable: Options. (line 422)
 * portability:                           Escape Sequences.    (line 103)
 * portability, backslash in escape sequences: Escape Sequences.
                                                               (line 108)
@@ -38486,7 +38531,7 @@ Index
 * portability, operators, not in POSIX awk: Precedence.       (line  97)
 * portability, deleting array elements:  Delete.              (line  56)
 * portability, length() function:        String Functions.    (line 193)
-* portability, substr() function:        String Functions.    (line 534)
+* portability, substr() function:        String Functions.    (line 537)
 * portability, functions, defining:      Definition Syntax.   (line 114)
 * portability, next statement in user-defined functions: Function Caveats.
                                                               (line  26)
@@ -38546,8 +38591,8 @@ Index
 * POSIX awk, date utility and:           Time Functions.      (line 254)
 * POSIX awk, function keyword in:        Definition Syntax.   (line  99)
 * POSIX awk, changes in awk versions:    POSIX.               (line   6)
-* POSIX mode:                            Options.             (line 302)
-* POSIX mode <1>:                        Options.             (line 396)
+* POSIX mode:                            Options.             (line 308)
+* POSIX mode <1>:                        Options.             (line 402)
 * POSIX mode <2>:                        Regexp Operator Details.
                                                               (line  47)
 * POSIX mode <3>:                        Input Summary.       (line  69)
@@ -38560,13 +38605,13 @@ Index
                                                               (line  12)
 * POSIX mode <9>:                        POSIX String Comparison.
                                                               (line  34)
-* POSIX mode <10>:                       String Functions.    (line 401)
+* POSIX mode <10>:                       String Functions.    (line 404)
 * POSIX mode <11>:                       Controlling Array Traversal.
                                                               (line 226)
 * POSIX mode <12>:                       POSIX Floating Point Problems.
                                                               (line  83)
 * POSIX mode <13>:                       Feature History.     (line 315)
-* POSIXLY_CORRECT environment variable:  Options.             (line 396)
+* POSIXLY_CORRECT environment variable:  Options.             (line 402)
 * POSIXLY_CORRECT environment variable <1>: Other Environment Variables.
                                                               (line  33)
 * POSIXLY_CORRECT environment variable <2>: Invoking Summary. (line  49)
@@ -38583,7 +38628,7 @@ Index
 * predefined variables, conveying information: Auto-set.      (line   6)
 * pretty printer, interaction with namespaces: Namespace And Features.
                                                               (line   9)
-* pretty printing:                       Options.             (line 267)
+* pretty printing:                       Options.             (line 273)
 * pretty printing <1>:                   Profiling.           (line 228)
 * pretty printing, profiling, difference with: Profiling.     (line 235)
 * print debugger command:                Viewing And Changing Data.
@@ -38758,7 +38803,7 @@ Index
                                                               (line 149)
 * register loadable extension:           Registration Functions.
                                                               (line   6)
-* regular expressions, interval expressions and: Options.     (line 323)
+* regular expressions, interval expressions and: Options.     (line 329)
 * regular expressions:                   Regexp.              (line   6)
 * regular expressions, as patterns:      Regexp Usage.        (line   6)
 * regular expressions, operators:        Regexp Usage.        (line  19)
@@ -38790,7 +38835,7 @@ Index
 * regular expressions, as patterns <1>:  Regexp Patterns.     (line   6)
 * regular expressions, case sensitivity <1>: User-modified.   (line  79)
 * regular expressions, searching for:    Egrep Program.       (line   6)
-* replace in string:                     String Functions.    (line 430)
+* replace in string:                     String Functions.    (line 433)
 * retrying input:                        Retrying Input.      (line   6)
 * return debugger command:               Debugger Execution Control.
                                                               (line  54)
@@ -38849,7 +38894,7 @@ Index
 * RT variable <1>:                       gawk split records.  (line  66)
 * RT variable <2>:                       Multiple Line.       (line 138)
 * RT variable <3>:                       Auto-set.            (line 355)
-* Rubin, Paul:                           History.             (line  30)
+* Rubin, Paul:                           History.             (line  34)
 * Rubin, Paul <1>:                       Contributors.        (line  16)
 * rule, definition of:                   Getting Started.     (line  21)
 * run debugger command:                  Debugger Execution Control.
@@ -38859,7 +38904,7 @@ Index
                                                               (line  68)
 * sample debugging session:              Sample Debugging Session.
                                                               (line   6)
-* sandbox mode:                          Options.             (line 334)
+* sandbox mode:                          Options.             (line 340)
 * save debugger options:                 Debugger Info.       (line  85)
 * scalar or array:                       Type Functions.      (line  11)
 * scalar values:                         Basic Data Typing.   (line  13)
@@ -38954,8 +38999,8 @@ Index
 * side effects, array indexing:          Reference to Elements.
                                                               (line  43)
 * side effects, match() function:        String Functions.    (line 241)
-* side effects, sub() function:          String Functions.    (line 484)
-* side effects, gsub() function:         String Functions.    (line 484)
+* side effects, sub() function:          String Functions.    (line 487)
+* side effects, gsub() function:         String Functions.    (line 487)
 * side effects, asort() function:        Array Sorting Functions.
                                                               (line  24)
 * side effects, asorti() function:       Array Sorting Functions.
@@ -38979,7 +39024,7 @@ Index
 * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
                                                               (line  14)
 * sidebar, FS and IGNORECASE:            Field Splitting Summary.
-                                                              (line  41)
+                                                              (line  45)
 * sidebar, Piping into sh:               Redirection.         (line 134)
 * sidebar, A Constant’s Base Does Not Affect Its Value: Nondecimal-numbers.
                                                               (line  63)
@@ -38989,7 +39034,7 @@ Index
                                                               (line 148)
 * sidebar, Operator Evaluation Order:    Increment Ops.       (line  58)
 * sidebar, Changing NR and FNR:          Auto-set.            (line 414)
-* sidebar, Matching the Null String:     String Functions.    (line 565)
+* sidebar, Matching the Null String:     String Functions.    (line 568)
 * sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
                                                               (line  73)
 * sidebar, Controlling Output Buffering with system(): I/O Functions.
@@ -39068,7 +39113,7 @@ Index
 * split() function, array elements, deleting: Delete.         (line  61)
 * split.awk program:                     Split Program.       (line  51)
 * sprintf:                               OFMT.                (line  15)
-* sprintf <1>:                           String Functions.    (line 405)
+* sprintf <1>:                           String Functions.    (line 408)
 * sprintf() function, print/printf statements and: Round Function.
                                                               (line   6)
 * sqrt:                                  Numeric Functions.   (line  77)
@@ -39119,23 +39164,23 @@ Index
 * strings, numeric:                      Variable Typing.     (line  67)
 * strings, converting, numbers to:       User-modified.       (line  30)
 * strings, converting, numbers to <1>:   User-modified.       (line 107)
-* strings, splitting, example:           String Functions.    (line 354)
-* strings, converting letter case:       String Functions.    (line 544)
+* strings, splitting, example:           String Functions.    (line 350)
+* strings, converting letter case:       String Functions.    (line 547)
 * strings, converting <1>:               Bitwise Functions.   (line 110)
 * strings, merging arrays into:          Join Function.       (line   6)
 * strings, for localization:             Programmer i18n.     (line  13)
 * strings, extracting:                   String Extraction.   (line   6)
 * strptime() extension function:         Extension Sample Time.
                                                               (line  31)
-* strtonum:                              String Functions.    (line 412)
+* strtonum:                              String Functions.    (line 415)
 * strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
                                                               (line  35)
 * STR_CHAIN_MAX environment variable:    Other Environment Variables.
                                                               (line  91)
 * sub:                                   Standard Regexp Constants.
                                                               (line  43)
-* sub <1>:                               String Functions.    (line 430)
-* sub() function, arguments of:          String Functions.    (line 484)
+* sub <1>:                               String Functions.    (line 433)
+* sub() function, arguments of:          String Functions.    (line 487)
 * sub() function, escape processing:     Gory Details.        (line   6)
 * subscript separators:                  User-modified.       (line 148)
 * subscripts in arrays, numbers as:      Numeric Array Subscripts.
@@ -39149,8 +39194,8 @@ Index
 * SUBSEP variable, multidimensional arrays and: Multidimensional.
                                                               (line  16)
 * substitute in string:                  String Functions.    (line  98)
-* substr:                                String Functions.    (line 503)
-* substring:                             String Functions.    (line 503)
+* substr:                                String Functions.    (line 506)
+* substring:                             String Functions.    (line 506)
 * Sumner, Andrew:                        Other Versions.      (line  64)
 * supplementary groups of gawk process:  Auto-set.            (line 292)
 * switch statement:                      Switch Statement.    (line   6)
@@ -39213,8 +39258,8 @@ Index
 * timestamps, converting dates to:       Time Functions.      (line  77)
 * timestamps, formatted:                 Getlocaltime Function.
                                                               (line   6)
-* tolower:                               String Functions.    (line 545)
-* toupper:                               String Functions.    (line 551)
+* tolower:                               String Functions.    (line 548)
+* toupper:                               String Functions.    (line 554)
 * tr utility:                            Translate Program.   (line   6)
 * trace debugger command:                Miscellaneous Debugger Commands.
                                                               (line 108)
@@ -39225,7 +39270,7 @@ Index
 * treating files, as single records:     gawk split records.  (line 104)
 * troubleshooting, typographical errors, global variables: Options.
                                                               (line 102)
-* troubleshooting, --non-decimal-data option: Options.        (line 255)
+* troubleshooting, --non-decimal-data option: Options.        (line 261)
 * troubleshooting, backslash before nonspecial character: Escape Sequences.
                                                               (line 108)
 * troubleshooting, regexp constants vs. string constants: Computed Regexps.
@@ -39247,8 +39292,8 @@ Index
 * troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
                                                               (line  16)
 * troubleshooting, match() function:     String Functions.    (line 305)
-* troubleshooting, gsub()/sub() functions: String Functions.  (line 494)
-* troubleshooting, substr() function:    String Functions.    (line 521)
+* troubleshooting, gsub()/sub() functions: String Functions.  (line 497)
+* troubleshooting, substr() function:    String Functions.    (line 524)
 * troubleshooting, fflush() function:    I/O Functions.       (line  62)
 * troubleshooting, system() function:    I/O Functions.       (line 127)
 * troubleshooting, readable data files:  File Checking.       (line   6)
@@ -39256,7 +39301,7 @@ Index
 * troubleshooting, gawk, bug reports:    Bugs.                (line   9)
 * troubleshooting, gawk:                 Compatibility Mode.  (line   6)
 * true, logical:                         Truth Values.        (line   6)
-* Trueman, David:                        History.             (line  30)
+* Trueman, David:                        History.             (line  34)
 * Trueman, David <1>:                    Acknowledgments.     (line  47)
 * Trueman, David <2>:                    Contributors.        (line  31)
 * trunc-mod operation:                   Arithmetic Ops.      (line  66)
@@ -39400,20 +39445,20 @@ Index
 * Wall, Larry:                           Array Intro.         (line   6)
 * Wall, Larry <1>:                       Future Extensions.   (line   6)
 * Wallin, Anders:                        Contributors.        (line 106)
-* warnings, issuing:                     Options.             (line 215)
+* warnings, issuing:                     Options.             (line 221)
 * watch debugger command:                Viewing And Changing Data.
                                                               (line  70)
 * watchpoint (debugger):                 Debugging Terms.     (line  42)
 * watchpoints, show in debugger:         Debugger Info.       (line  51)
 * wc utility:                            Wc Program.          (line   6)
 * wc.awk program:                        wc program.          (line  51)
-* Weinberger, Peter:                     History.             (line  17)
+* Weinberger, Peter:                     History.             (line  21)
 * Weinberger, Peter <1>:                 Contributors.        (line  12)
 * where debugger command (alias for backtrace): Execution Stack.
                                                               (line  13)
 * while statement, use of regexps in:    Regexp Usage.        (line  19)
 * while statement:                       While Statement.     (line   6)
-* whitespace, newlines as:               Options.             (line 308)
+* whitespace, newlines as:               Options.             (line 314)
 * whitespace, definition of:             Fields.              (line   6)
 * whitespace, as field separators:       Default Field Splitting.
                                                               (line   6)
@@ -39456,614 +39501,614 @@ Ref: Preface-Footnote-155949
 Ref: Preface-Footnote-256058
 Ref: Preface-Footnote-356292
 Node: History56438
-Node: Names58902
-Ref: Names-Footnote-160065
-Node: This Manual60228
-Ref: This Manual-Footnote-167178
-Node: Conventions67290
-Node: Manual History69768
-Ref: Manual History-Footnote-172805
-Ref: Manual History-Footnote-272852
-Node: How To Contribute72930
-Node: Acknowledgments73880
-Node: Getting Started78878
-Node: Running gawk81405
-Node: One-shot82623
-Node: Read Terminal83926
-Node: Long85986
-Node: Executable Scripts87567
-Ref: Executable Scripts-Footnote-190342
-Node: Comments90449
-Node: Quoting92987
-Node: DOS Quoting98636
-Node: Sample Data Files100722
-Node: Very Simple103359
-Node: Two Rules109638
-Node: More Complex111592
-Node: Statements/Lines114032
-Ref: Statements/Lines-Footnote-1118912
-Node: Other Features119201
-Node: When120169
-Ref: When-Footnote-1121975
-Node: Intro Summary122040
-Node: Invoking Gawk122996
-Node: Command Line124566
-Node: Options125417
-Ref: Options-Footnote-1144566
-Ref: Options-Footnote-2144801
-Node: Other Arguments144826
-Node: Naming Standard Input149003
-Node: Environment Variables150273
-Node: AWKPATH Variable150847
-Ref: AWKPATH Variable-Footnote-1154437
-Ref: AWKPATH Variable-Footnote-2154471
-Node: AWKLIBPATH Variable154864
-Ref: AWKLIBPATH Variable-Footnote-1156639
-Node: Other Environment Variables157036
-Node: Exit Status161532
-Node: Include Files162247
-Node: Loading Shared Libraries166307
-Node: Obsolete167799
-Node: Undocumented168435
-Node: Invoking Summary168734
-Node: Regexp171761
-Node: Regexp Usage173255
-Node: Escape Sequences175356
-Node: Regexp Operators181887
-Node: Regexp Operator Details182380
-Ref: Regexp Operator Details-Footnote-1190246
-Node: Interval Expressions190405
-Ref: Interval Expressions-Footnote-1192674
-Node: Bracket Expressions192774
-Ref: table-char-classes195334
-Node: Leftmost Longest198856
-Node: Computed Regexps200216
-Node: GNU Regexp Operators203739
-Node: Case-sensitivity207762
-Ref: Case-sensitivity-Footnote-1210719
-Ref: Case-sensitivity-Footnote-2210964
-Node: Regexp Summary211080
-Node: Reading Files212604
-Node: Records214921
-Node: awk split records216032
-Node: gawk split records220922
-Ref: gawk split records-Footnote-1226216
-Node: Fields226253
-Node: Nonconstant Fields229140
-Ref: Nonconstant Fields-Footnote-1231451
-Node: Changing Fields231667
-Node: Field Separators237975
-Node: Default Field Splitting240848
-Node: Regexp Field Splitting241991
-Node: Single Character Fields245820
-Node: Comma Separated Fields246909
-Ref: table-csv-examples248197
-Node: Command Line Field Separator249149
-Node: Full Line Fields252535
-Ref: Full Line Fields-Footnote-1254115
-Ref: Full Line Fields-Footnote-2254161
-Node: Field Splitting Summary254269
-Node: Constant Size256548
-Node: Fixed width data257292
-Node: Skipping intervening260811
-Node: Allowing trailing data261613
-Node: Fields with fixed data262678
-Node: Splitting By Content264304
-Ref: Splitting By Content-Footnote-1268489
-Node: More CSV268652
-Node: FS versus FPAT270305
-Node: Testing field creation271514
-Node: Multiple Line273207
-Node: Getline279689
-Node: Plain Getline282275
-Node: Getline/Variable284925
-Node: Getline/File286122
-Node: Getline/Variable/File287570
-Ref: Getline/Variable/File-Footnote-1289215
-Node: Getline/Pipe289311
-Node: Getline/Variable/Pipe292124
-Node: Getline/Coprocess293307
-Node: Getline/Variable/Coprocess294630
-Node: Getline Notes295396
-Node: Getline Summary298357
-Ref: table-getline-variants298801
-Node: Read Timeout299706
-Ref: Read Timeout-Footnote-1303670
-Node: Retrying Input303728
-Node: Command-line directories304995
-Node: Input Summary305933
-Node: Input Exercises309313
-Node: Printing309753
-Node: Print311696
-Node: Print Examples313202
-Node: Output Separators316055
-Node: OFMT318166
-Node: Printf319589
-Node: Basic Printf320394
-Node: Control Letters322030
-Node: Format Modifiers327499
-Node: Printf Examples333785
-Node: Redirection336330
-Node: Special FD343404
-Ref: Special FD-Footnote-1346694
-Node: Special Files346780
-Node: Other Inherited Files347409
-Node: Special Network348474
-Node: Special Caveats349362
-Node: Close Files And Pipes350345
-Ref: Close Files And Pipes-Footnote-1356481
-Node: Close Return Value356637
-Ref: table-close-pipe-return-values357912
-Ref: Close Return Value-Footnote-1358746
-Node: Noflush358902
-Node: Nonfatal360374
-Node: Output Summary362791
-Node: Output Exercises364077
-Node: Expressions364768
-Node: Values365970
-Node: Constants366648
-Node: Scalar Constants367345
-Ref: Scalar Constants-Footnote-1369920
-Node: Nondecimal-numbers370170
-Node: Regexp Constants373291
-Node: Using Constant Regexps373837
-Node: Standard Regexp Constants374483
-Node: Strong Regexp Constants377783
-Node: Variables381634
-Node: Using Variables382299
-Node: Assignment Options384279
-Node: Conversion386841
-Node: Strings And Numbers387373
-Ref: Strings And Numbers-Footnote-1390592
-Node: Locale influences conversions390701
-Ref: table-locale-affects393551
-Node: All Operators394194
-Node: Arithmetic Ops394835
-Node: Concatenation397665
-Ref: Concatenation-Footnote-1400615
-Node: Assignment Ops400738
-Ref: table-assign-ops405877
-Node: Increment Ops407259
-Node: Truth Values and Conditions410858
-Node: Truth Values411984
-Node: Typing and Comparison413075
-Node: Variable Typing413911
-Ref: Variable Typing-Footnote-1420573
-Ref: Variable Typing-Footnote-2420653
-Node: Comparison Operators420736
-Ref: table-relational-ops421163
-Node: POSIX String Comparison424849
-Ref: POSIX String Comparison-Footnote-1426608
-Ref: POSIX String Comparison-Footnote-2426751
-Node: Boolean Ops426835
-Ref: Boolean Ops-Footnote-1431528
-Node: Conditional Exp431624
-Node: Function Calls433410
-Node: Precedence437360
-Node: Locales441237
-Node: Expressions Summary442919
-Node: Patterns and Actions445582
-Node: Pattern Overview446724
-Node: Regexp Patterns448450
-Node: Expression Patterns448996
-Node: Ranges452905
-Node: BEGIN/END456083
-Node: Using BEGIN/END456896
-Ref: Using BEGIN/END-Footnote-1459806
-Node: I/O And BEGIN/END459916
-Node: BEGINFILE/ENDFILE462397
-Node: Empty465838
-Node: Using Shell Variables466155
-Node: Action Overview468493
-Node: Statements470928
-Node: If Statement472826
-Node: While Statement474395
-Node: Do Statement476483
-Node: For Statement477669
-Node: Switch Statement481026
-Node: Break Statement483577
-Node: Continue Statement485769
-Node: Next Statement487701
-Node: Nextfile Statement490198
-Node: Exit Statement493059
-Node: Built-in Variables495592
-Node: User-modified496771
-Node: Auto-set504982
-Ref: Auto-set-Footnote-1523081
-Ref: Auto-set-Footnote-2523299
-Node: ARGC and ARGV523355
-Node: Pattern Action Summary527794
-Node: Arrays530410
-Node: Array Basics531787
-Node: Array Intro532637
-Ref: figure-array-elements534653
-Ref: Array Intro-Footnote-1537522
-Node: Reference to Elements537654
-Node: Assigning Elements540176
-Node: Array Example540671
-Node: Scanning an Array542640
-Node: Controlling Scanning545737
-Ref: Controlling Scanning-Footnote-1552400
-Node: Numeric Array Subscripts552724
-Node: Uninitialized Subscripts554998
-Node: Delete556677
-Ref: Delete-Footnote-1559491
-Node: Multidimensional559548
-Node: Multiscanning562753
-Node: Arrays of Arrays564425
-Node: Arrays Summary569325
-Node: Functions571514
-Node: Built-in572574
-Node: Calling Built-in573763
-Node: Boolean Functions575810
-Node: Numeric Functions576380
-Ref: Numeric Functions-Footnote-1580573
-Ref: Numeric Functions-Footnote-2581257
-Ref: Numeric Functions-Footnote-3581309
-Node: String Functions581585
-Ref: String Functions-Footnote-1607721
-Ref: String Functions-Footnote-2607855
-Ref: String Functions-Footnote-3608115
-Node: Gory Details608202
-Ref: table-sub-escapes610109
-Ref: table-sub-proposed611755
-Ref: table-posix-sub613265
-Ref: table-gensub-escapes614953
-Ref: Gory Details-Footnote-1615887
-Node: I/O Functions616041
-Ref: table-system-return-values622728
-Ref: I/O Functions-Footnote-1624899
-Ref: I/O Functions-Footnote-2625047
-Node: Time Functions625167
-Ref: Time Functions-Footnote-1636323
-Ref: Time Functions-Footnote-2636399
-Ref: Time Functions-Footnote-3636561
-Ref: Time Functions-Footnote-4636672
-Ref: Time Functions-Footnote-5636790
-Ref: Time Functions-Footnote-6637025
-Node: Bitwise Functions637307
-Ref: table-bitwise-ops637909
-Ref: Bitwise Functions-Footnote-1644163
-Ref: Bitwise Functions-Footnote-2644342
-Node: Type Functions644539
-Node: I18N Functions648132
-Node: User-defined649875
-Node: Definition Syntax650695
-Ref: Definition Syntax-Footnote-1656523
-Node: Function Example656600
-Ref: Function Example-Footnote-1659579
-Node: Function Calling659601
-Node: Calling A Function660195
-Node: Variable Scope661165
-Node: Pass By Value/Reference664219
-Node: Function Caveats666951
-Ref: Function Caveats-Footnote-1669046
-Node: Return Statement669170
-Node: Dynamic Typing672225
-Node: Indirect Calls673181
-Node: Functions Summary684340
-Node: Library Functions687117
-Ref: Library Functions-Footnote-1690665
-Ref: Library Functions-Footnote-2690808
-Node: Library Names690983
-Ref: Library Names-Footnote-1694777
-Ref: Library Names-Footnote-2695004
-Node: General Functions695100
-Node: Strtonum Function696294
-Node: Assert Function699376
-Node: Round Function702828
-Node: Cliff Random Function704406
-Node: Ordinal Functions705439
-Ref: Ordinal Functions-Footnote-1708548
-Ref: Ordinal Functions-Footnote-2708800
-Node: Join Function709014
-Ref: Join Function-Footnote-1710817
-Node: Getlocaltime Function711021
-Node: Readfile Function714795
-Node: Shell Quoting716824
-Node: Isnumeric Function718280
-Node: Data File Management719692
-Node: Filetrans Function720324
-Node: Rewind Function724618
-Node: File Checking726597
-Ref: File Checking-Footnote-1727969
-Node: Empty Files728176
-Node: Ignoring Assigns730243
-Node: Getopt Function731817
-Ref: Getopt Function-Footnote-1747651
-Node: Passwd Functions747863
-Ref: Passwd Functions-Footnote-1757045
-Node: Group Functions757133
-Ref: Group Functions-Footnote-1765271
-Node: Walking Arrays765484
-Node: Library Functions Summary768532
-Node: Library Exercises769956
-Node: Sample Programs770443
-Node: Running Examples771225
-Node: Clones771977
-Node: Cut Program773249
-Node: Egrep Program783690
-Node: Id Program793007
-Node: Split Program803121
-Ref: Split Program-Footnote-1813356
-Node: Tee Program813543
-Node: Uniq Program816452
-Node: Wc Program824317
-Node: Bytes vs. Characters824712
-Node: Using extensions826314
-Node: wc program827094
-Node: Miscellaneous Programs832100
-Node: Dupword Program833329
-Node: Alarm Program835392
-Node: Translate Program840305
-Ref: Translate Program-Footnote-1845046
-Node: Labels Program845324
-Ref: Labels Program-Footnote-1848765
-Node: Word Sorting848857
-Node: History Sorting853051
-Node: Extract Program855326
-Node: Simple Sed863595
-Node: Igawk Program866811
-Ref: Igawk Program-Footnote-1882058
-Ref: Igawk Program-Footnote-2882264
-Ref: Igawk Program-Footnote-3882394
-Node: Anagram Program882521
-Node: Signature Program885617
-Node: Programs Summary886869
-Node: Programs Exercises888127
-Ref: Programs Exercises-Footnote-1892443
-Node: Advanced Features892529
-Node: Nondecimal Data895023
-Node: Boolean Typed Values896653
-Node: Array Sorting898628
-Node: Controlling Array Traversal899357
-Ref: Controlling Array Traversal-Footnote-1907864
-Node: Array Sorting Functions907986
-Ref: Array Sorting Functions-Footnote-1914105
-Node: Two-way I/O914313
-Ref: Two-way I/O-Footnote-1922308
-Ref: Two-way I/O-Footnote-2922499
-Node: TCP/IP Networking922581
-Node: Profiling925761
-Node: Persistent Memory935471
-Ref: Persistent Memory-Footnote-1944429
-Node: Extension Philosophy944560
-Node: Advanced Features Summary946095
-Node: Internationalization948365
-Node: I18N and L10N950071
-Node: Explaining gettext950766
-Ref: Explaining gettext-Footnote-1956919
-Ref: Explaining gettext-Footnote-2957114
-Node: Programmer i18n957279
-Ref: Programmer i18n-Footnote-1962392
-Node: Translator i18n962441
-Node: String Extraction963277
-Ref: String Extraction-Footnote-1964455
-Node: Printf Ordering964553
-Ref: Printf Ordering-Footnote-1967415
-Node: I18N Portability967483
-Ref: I18N Portability-Footnote-1970057
-Node: I18N Example970128
-Ref: I18N Example-Footnote-1973528
-Ref: I18N Example-Footnote-2973604
-Node: Gawk I18N973721
-Node: I18N Summary974377
-Node: Debugger975778
-Node: Debugging976802
-Node: Debugging Concepts977251
-Node: Debugging Terms979077
-Node: Awk Debugging981690
-Ref: Awk Debugging-Footnote-1982667
-Node: Sample Debugging Session982807
-Node: Debugger Invocation983359
-Node: Finding The Bug984988
-Node: List of Debugger Commands991674
-Node: Breakpoint Control993051
-Node: Debugger Execution Control996883
-Node: Viewing And Changing Data1000363
-Node: Execution Stack1004101
-Node: Debugger Info1005782
-Node: Miscellaneous Debugger Commands1010081
-Node: Readline Support1015334
-Node: Limitations1016280
-Node: Debugging Summary1018924
-Node: Namespaces1020227
-Node: Global Namespace1021354
-Node: Qualified Names1022799
-Node: Default Namespace1023834
-Node: Changing The Namespace1024609
-Node: Naming Rules1026303
-Node: Internal Name Management1028218
-Node: Namespace Example1029288
-Node: Namespace And Features1031871
-Node: Namespace Summary1033328
-Node: Arbitrary Precision Arithmetic1034841
-Node: Computer Arithmetic1036360
-Ref: table-numeric-ranges1040177
-Ref: table-floating-point-ranges1040675
-Ref: Computer Arithmetic-Footnote-11041334
-Node: Math Definitions1041393
-Ref: table-ieee-formats1044438
-Node: MPFR features1045012
-Node: MPFR On Parole1045465
-Ref: MPFR On Parole-Footnote-11046309
-Node: MPFR Intro1046468
-Node: FP Math Caution1048158
-Ref: FP Math Caution-Footnote-11049232
-Node: Inexactness of computations1049609
-Node: Inexact representation1050640
-Node: Comparing FP Values1052023
-Node: Errors accumulate1053281
-Node: Strange values1054748
-Ref: Strange values-Footnote-11057414
-Node: Getting Accuracy1057519
-Node: Try To Round1060256
-Node: Setting precision1061163
-Ref: table-predefined-precision-strings1061868
-Node: Setting the rounding mode1063753
-Ref: table-gawk-rounding-modes1064135
-Ref: Setting the rounding mode-Footnote-11068193
-Node: Arbitrary Precision Integers1068376
-Ref: Arbitrary Precision Integers-Footnote-11071588
-Node: Checking for MPFR1071744
-Node: POSIX Floating Point Problems1073234
-Ref: POSIX Floating Point Problems-Footnote-11078098
-Node: Floating point summary1078136
-Node: Dynamic Extensions1080400
-Node: Extension Intro1081999
-Node: Plugin License1083307
-Node: Extension Mechanism Outline1084120
-Ref: figure-load-extension1084571
-Ref: figure-register-new-function1086156
-Ref: figure-call-new-function1087266
-Node: Extension API Description1089390
-Node: Extension API Functions Introduction1091119
-Ref: table-api-std-headers1093017
-Node: General Data Types1097481
-Ref: General Data Types-Footnote-11106649
-Node: Memory Allocation Functions1106964
-Ref: Memory Allocation Functions-Footnote-11111689
-Node: Constructor Functions1111788
-Node: API Ownership of MPFR and GMP Values1115693
-Node: Registration Functions1117254
-Node: Extension Functions1117958
-Node: Exit Callback Functions1123534
-Node: Extension Version String1124853
-Node: Input Parsers1125548
-Node: Output Wrappers1140192
-Node: Two-way processors1145040
-Node: Printing Messages1147401
-Ref: Printing Messages-Footnote-11148615
-Node: Updating ERRNO1148770
-Node: Requesting Values1149569
-Ref: table-value-types-returned1150322
-Node: Accessing Parameters1151431
-Node: Symbol Table Access1152715
-Node: Symbol table by name1153231
-Ref: Symbol table by name-Footnote-11156442
-Node: Symbol table by cookie1156574
-Ref: Symbol table by cookie-Footnote-11160855
-Node: Cached values1160919
-Ref: Cached values-Footnote-11164563
-Node: Array Manipulation1164720
-Ref: Array Manipulation-Footnote-11165823
-Node: Array Data Types1165860
-Ref: Array Data Types-Footnote-11168682
-Node: Array Functions1168782
-Node: Flattening Arrays1173811
-Node: Creating Arrays1180863
-Node: Redirection API1185713
-Node: Extension API Variables1188734
-Node: Extension Versioning1189459
-Ref: gawk-api-version1189896
-Node: Extension GMP/MPFR Versioning1191684
-Node: Extension API Informational Variables1193390
-Node: Extension API Boilerplate1194551
-Node: Changes from API V11198687
-Node: Finding Extensions1200321
-Node: Extension Example1200896
-Node: Internal File Description1201720
-Node: Internal File Ops1206044
-Ref: Internal File Ops-Footnote-11217602
-Node: Using Internal File Ops1217750
-Ref: Using Internal File Ops-Footnote-11220181
-Node: Extension Samples1220459
-Node: Extension Sample File Functions1222028
-Node: Extension Sample Fnmatch1230166
-Node: Extension Sample Fork1231761
-Node: Extension Sample Inplace1233037
-Node: Extension Sample Ord1236709
-Node: Extension Sample Readdir1237585
-Ref: table-readdir-file-types1238482
-Node: Extension Sample Revout1239620
-Node: Extension Sample Rev2way1240217
-Node: Extension Sample Read write array1240969
-Node: Extension Sample Readfile1244243
-Node: Extension Sample Time1245374
-Node: Extension Sample API Tests1247664
-Node: gawkextlib1248172
-Node: Extension summary1251208
-Node: Extension Exercises1255066
-Node: Language History1256344
-Node: V7/SVR3.11258058
-Node: SVR41260408
-Node: POSIX1261940
-Node: BTL1263365
-Node: POSIX/GNU1264134
-Node: Feature History1270665
-Node: Common Extensions1290167
-Node: Ranges and Locales1291536
-Ref: Ranges and Locales-Footnote-11296337
-Ref: Ranges and Locales-Footnote-21296364
-Ref: Ranges and Locales-Footnote-31296603
-Node: Contributors1296826
-Node: History summary1303031
-Node: Installation1304477
-Node: Gawk Distribution1305441
-Node: Getting1305933
-Node: Extracting1306932
-Node: Distribution contents1308644
-Node: Unix Installation1316724
-Node: Quick Installation1317546
-Node: Compiling with MPFR1320092
-Node: Shell Startup Files1320798
-Node: Additional Configuration Options1321955
-Node: Configuration Philosophy1324342
-Node: Compiling from Git1326844
-Node: Building the Documentation1327403
-Node: Non-Unix Installation1328815
-Node: PC Installation1329291
-Node: PC Binary Installation1330164
-Node: PC Compiling1331069
-Node: PC Using1332247
-Node: Cygwin1335975
-Node: MSYS1337231
-Node: OpenVMS Installation1337863
-Node: OpenVMS Compilation1338544
-Ref: OpenVMS Compilation-Footnote-11340027
-Node: OpenVMS Dynamic Extensions1340089
-Node: OpenVMS Installation Details1341725
-Node: OpenVMS Running1344160
-Node: OpenVMS GNV1348297
-Node: Bugs1349052
-Node: Bug definition1349976
-Node: Bug address1353627
-Node: Usenet1357218
-Node: Performance bugs1358449
-Node: Asking for help1361467
-Node: Maintainers1363458
-Node: Other Versions1364485
-Node: Installation summary1373417
-Node: Notes1374801
-Node: Compatibility Mode1375611
-Node: Additions1376433
-Node: Accessing The Source1377378
-Node: Adding Code1378913
-Node: New Ports1386049
-Node: Derived Files1390559
-Ref: Derived Files-Footnote-11396406
-Ref: Derived Files-Footnote-21396441
-Ref: Derived Files-Footnote-31397058
-Node: Future Extensions1397172
-Node: Implementation Limitations1397844
-Node: Extension Design1399086
-Node: Old Extension Problems1400250
-Ref: Old Extension Problems-Footnote-11401826
-Node: Extension New Mechanism Goals1401887
-Ref: Extension New Mechanism Goals-Footnote-11405383
-Node: Extension Other Design Decisions1405584
-Node: Extension Future Growth1407783
-Node: Notes summary1408407
-Node: Basic Concepts1409620
-Node: Basic High Level1410305
-Ref: figure-general-flow1410587
-Ref: figure-process-flow1411294
-Ref: Basic High Level-Footnote-11414695
-Node: Basic Data Typing1414884
-Node: Glossary1418302
-Node: Copying1451424
-Node: GNU Free Documentation License1489185
-Node: Index1514508
+Node: Names59056
+Ref: Names-Footnote-160219
+Node: This Manual60382
+Ref: This Manual-Footnote-167332
+Node: Conventions67444
+Node: Manual History69922
+Ref: Manual History-Footnote-172959
+Ref: Manual History-Footnote-273006
+Node: How To Contribute73084
+Node: Acknowledgments74034
+Node: Getting Started79032
+Node: Running gawk81559
+Node: One-shot82777
+Node: Read Terminal84080
+Node: Long86140
+Node: Executable Scripts87721
+Ref: Executable Scripts-Footnote-190496
+Node: Comments90603
+Node: Quoting93141
+Node: DOS Quoting98790
+Node: Sample Data Files100876
+Node: Very Simple103513
+Node: Two Rules109792
+Node: More Complex111746
+Node: Statements/Lines114186
+Ref: Statements/Lines-Footnote-1119066
+Node: Other Features119355
+Node: When120323
+Ref: When-Footnote-1122129
+Node: Intro Summary122194
+Node: Invoking Gawk123150
+Node: Command Line124720
+Node: Options125571
+Ref: Options-Footnote-1144948
+Ref: Options-Footnote-2145183
+Node: Other Arguments145208
+Node: Naming Standard Input149385
+Node: Environment Variables150655
+Node: AWKPATH Variable151229
+Ref: AWKPATH Variable-Footnote-1154819
+Ref: AWKPATH Variable-Footnote-2154853
+Node: AWKLIBPATH Variable155246
+Ref: AWKLIBPATH Variable-Footnote-1157021
+Node: Other Environment Variables157418
+Node: Exit Status161914
+Node: Include Files162629
+Node: Loading Shared Libraries166689
+Node: Obsolete168181
+Node: Undocumented168817
+Node: Invoking Summary169116
+Node: Regexp172143
+Node: Regexp Usage173637
+Node: Escape Sequences175738
+Node: Regexp Operators182269
+Node: Regexp Operator Details182762
+Ref: Regexp Operator Details-Footnote-1190628
+Node: Interval Expressions190787
+Ref: Interval Expressions-Footnote-1193056
+Node: Bracket Expressions193156
+Ref: table-char-classes195716
+Node: Leftmost Longest199238
+Node: Computed Regexps200598
+Node: GNU Regexp Operators204121
+Node: Case-sensitivity208144
+Ref: Case-sensitivity-Footnote-1211101
+Ref: Case-sensitivity-Footnote-2211346
+Node: Regexp Summary211462
+Node: Reading Files212986
+Node: Records215303
+Node: awk split records216578
+Node: gawk split records221468
+Ref: gawk split records-Footnote-1226762
+Node: Fields226799
+Node: Nonconstant Fields229686
+Ref: Nonconstant Fields-Footnote-1231997
+Node: Changing Fields232213
+Node: Field Separators238521
+Node: Default Field Splitting241394
+Node: Regexp Field Splitting242537
+Node: Single Character Fields246366
+Node: Comma Separated Fields247455
+Ref: table-csv-examples248874
+Node: Command Line Field Separator250643
+Node: Full Line Fields254029
+Ref: Full Line Fields-Footnote-1255609
+Ref: Full Line Fields-Footnote-2255655
+Node: Field Splitting Summary255763
+Node: Constant Size258197
+Node: Fixed width data258941
+Node: Skipping intervening262460
+Node: Allowing trailing data263262
+Node: Fields with fixed data264327
+Node: Splitting By Content265953
+Ref: Splitting By Content-Footnote-1270222
+Node: More CSV270385
+Node: FS versus FPAT272038
+Node: Testing field creation273247
+Node: Multiple Line275025
+Node: Getline281507
+Node: Plain Getline284093
+Node: Getline/Variable286743
+Node: Getline/File287940
+Node: Getline/Variable/File289388
+Ref: Getline/Variable/File-Footnote-1291033
+Node: Getline/Pipe291129
+Node: Getline/Variable/Pipe293942
+Node: Getline/Coprocess295125
+Node: Getline/Variable/Coprocess296448
+Node: Getline Notes297214
+Node: Getline Summary300175
+Ref: table-getline-variants300619
+Node: Read Timeout301524
+Ref: Read Timeout-Footnote-1305488
+Node: Retrying Input305546
+Node: Command-line directories306813
+Node: Input Summary307751
+Node: Input Exercises311131
+Node: Printing311571
+Node: Print313514
+Node: Print Examples315020
+Node: Output Separators317873
+Node: OFMT319984
+Node: Printf321407
+Node: Basic Printf322212
+Node: Control Letters323848
+Node: Format Modifiers329317
+Node: Printf Examples335603
+Node: Redirection338148
+Node: Special FD345222
+Ref: Special FD-Footnote-1348512
+Node: Special Files348598
+Node: Other Inherited Files349227
+Node: Special Network350292
+Node: Special Caveats351180
+Node: Close Files And Pipes352163
+Ref: Close Files And Pipes-Footnote-1358299
+Node: Close Return Value358455
+Ref: table-close-pipe-return-values359730
+Ref: Close Return Value-Footnote-1360564
+Node: Noflush360720
+Node: Nonfatal362192
+Node: Output Summary364609
+Node: Output Exercises365895
+Node: Expressions366586
+Node: Values367788
+Node: Constants368466
+Node: Scalar Constants369163
+Ref: Scalar Constants-Footnote-1371738
+Node: Nondecimal-numbers371988
+Node: Regexp Constants375109
+Node: Using Constant Regexps375655
+Node: Standard Regexp Constants376301
+Node: Strong Regexp Constants379601
+Node: Variables383452
+Node: Using Variables384117
+Node: Assignment Options386097
+Node: Conversion388659
+Node: Strings And Numbers389191
+Ref: Strings And Numbers-Footnote-1392410
+Node: Locale influences conversions392519
+Ref: table-locale-affects395369
+Node: All Operators396012
+Node: Arithmetic Ops396653
+Node: Concatenation399483
+Ref: Concatenation-Footnote-1402433
+Node: Assignment Ops402556
+Ref: table-assign-ops407695
+Node: Increment Ops409077
+Node: Truth Values and Conditions412676
+Node: Truth Values413802
+Node: Typing and Comparison414893
+Node: Variable Typing415729
+Ref: Variable Typing-Footnote-1422391
+Ref: Variable Typing-Footnote-2422471
+Node: Comparison Operators422554
+Ref: table-relational-ops422981
+Node: POSIX String Comparison426667
+Ref: POSIX String Comparison-Footnote-1428426
+Ref: POSIX String Comparison-Footnote-2428569
+Node: Boolean Ops428653
+Ref: Boolean Ops-Footnote-1433346
+Node: Conditional Exp433442
+Node: Function Calls435228
+Node: Precedence439178
+Node: Locales443055
+Node: Expressions Summary444737
+Node: Patterns and Actions447400
+Node: Pattern Overview448542
+Node: Regexp Patterns450268
+Node: Expression Patterns450814
+Node: Ranges454723
+Node: BEGIN/END457901
+Node: Using BEGIN/END458714
+Ref: Using BEGIN/END-Footnote-1461624
+Node: I/O And BEGIN/END461734
+Node: BEGINFILE/ENDFILE464215
+Node: Empty467656
+Node: Using Shell Variables467973
+Node: Action Overview470311
+Node: Statements472746
+Node: If Statement474644
+Node: While Statement476213
+Node: Do Statement478301
+Node: For Statement479487
+Node: Switch Statement482844
+Node: Break Statement485395
+Node: Continue Statement487587
+Node: Next Statement489519
+Node: Nextfile Statement492016
+Node: Exit Statement494877
+Node: Built-in Variables497410
+Node: User-modified498589
+Node: Auto-set506800
+Ref: Auto-set-Footnote-1524899
+Ref: Auto-set-Footnote-2525117
+Node: ARGC and ARGV525173
+Node: Pattern Action Summary529612
+Node: Arrays532228
+Node: Array Basics533605
+Node: Array Intro534455
+Ref: figure-array-elements536471
+Ref: Array Intro-Footnote-1539340
+Node: Reference to Elements539472
+Node: Assigning Elements541994
+Node: Array Example542489
+Node: Scanning an Array544458
+Node: Controlling Scanning547555
+Ref: Controlling Scanning-Footnote-1554218
+Node: Numeric Array Subscripts554542
+Node: Uninitialized Subscripts556816
+Node: Delete558495
+Ref: Delete-Footnote-1561309
+Node: Multidimensional561366
+Node: Multiscanning564571
+Node: Arrays of Arrays566243
+Node: Arrays Summary571143
+Node: Functions573332
+Node: Built-in574392
+Node: Calling Built-in575581
+Node: Boolean Functions577628
+Node: Numeric Functions578198
+Ref: Numeric Functions-Footnote-1582391
+Ref: Numeric Functions-Footnote-2583075
+Ref: Numeric Functions-Footnote-3583127
+Node: String Functions583403
+Ref: String Functions-Footnote-1609634
+Ref: String Functions-Footnote-2609768
+Ref: String Functions-Footnote-3610028
+Node: Gory Details610115
+Ref: table-sub-escapes612022
+Ref: table-sub-proposed613668
+Ref: table-posix-sub615178
+Ref: table-gensub-escapes616866
+Ref: Gory Details-Footnote-1617800
+Node: I/O Functions617954
+Ref: table-system-return-values624641
+Ref: I/O Functions-Footnote-1626812
+Ref: I/O Functions-Footnote-2626960
+Node: Time Functions627080
+Ref: Time Functions-Footnote-1638236
+Ref: Time Functions-Footnote-2638312
+Ref: Time Functions-Footnote-3638474
+Ref: Time Functions-Footnote-4638585
+Ref: Time Functions-Footnote-5638703
+Ref: Time Functions-Footnote-6638938
+Node: Bitwise Functions639220
+Ref: table-bitwise-ops639822
+Ref: Bitwise Functions-Footnote-1646076
+Ref: Bitwise Functions-Footnote-2646255
+Node: Type Functions646452
+Node: I18N Functions650045
+Node: User-defined651788
+Node: Definition Syntax652608
+Ref: Definition Syntax-Footnote-1658436
+Node: Function Example658513
+Ref: Function Example-Footnote-1661492
+Node: Function Calling661514
+Node: Calling A Function662108
+Node: Variable Scope663078
+Node: Pass By Value/Reference666132
+Node: Function Caveats668864
+Ref: Function Caveats-Footnote-1670959
+Node: Return Statement671083
+Node: Dynamic Typing674138
+Node: Indirect Calls675094
+Node: Functions Summary686253
+Node: Library Functions689030
+Ref: Library Functions-Footnote-1692578
+Ref: Library Functions-Footnote-2692721
+Node: Library Names692896
+Ref: Library Names-Footnote-1696690
+Ref: Library Names-Footnote-2696917
+Node: General Functions697013
+Node: Strtonum Function698207
+Node: Assert Function701289
+Node: Round Function704741
+Node: Cliff Random Function706319
+Node: Ordinal Functions707352
+Ref: Ordinal Functions-Footnote-1710461
+Ref: Ordinal Functions-Footnote-2710713
+Node: Join Function710927
+Ref: Join Function-Footnote-1712730
+Node: Getlocaltime Function712934
+Node: Readfile Function716708
+Node: Shell Quoting718737
+Node: Isnumeric Function720193
+Node: Data File Management721605
+Node: Filetrans Function722237
+Node: Rewind Function726531
+Node: File Checking728510
+Ref: File Checking-Footnote-1729882
+Node: Empty Files730089
+Node: Ignoring Assigns732156
+Node: Getopt Function733730
+Ref: Getopt Function-Footnote-1749564
+Node: Passwd Functions749776
+Ref: Passwd Functions-Footnote-1758958
+Node: Group Functions759046
+Ref: Group Functions-Footnote-1767184
+Node: Walking Arrays767397
+Node: Library Functions Summary770445
+Node: Library Exercises771869
+Node: Sample Programs772356
+Node: Running Examples773138
+Node: Clones773890
+Node: Cut Program775162
+Node: Egrep Program785603
+Node: Id Program794920
+Node: Split Program805034
+Ref: Split Program-Footnote-1815269
+Node: Tee Program815456
+Node: Uniq Program818365
+Node: Wc Program826230
+Node: Bytes vs. Characters826625
+Node: Using extensions828227
+Node: wc program829007
+Node: Miscellaneous Programs834013
+Node: Dupword Program835242
+Node: Alarm Program837305
+Node: Translate Program842218
+Ref: Translate Program-Footnote-1846959
+Node: Labels Program847237
+Ref: Labels Program-Footnote-1850678
+Node: Word Sorting850770
+Node: History Sorting854964
+Node: Extract Program857239
+Node: Simple Sed865508
+Node: Igawk Program868724
+Ref: Igawk Program-Footnote-1883971
+Ref: Igawk Program-Footnote-2884177
+Ref: Igawk Program-Footnote-3884307
+Node: Anagram Program884434
+Node: Signature Program887530
+Node: Programs Summary888782
+Node: Programs Exercises890040
+Ref: Programs Exercises-Footnote-1894356
+Node: Advanced Features894442
+Node: Nondecimal Data896936
+Node: Boolean Typed Values898566
+Node: Array Sorting900541
+Node: Controlling Array Traversal901270
+Ref: Controlling Array Traversal-Footnote-1909777
+Node: Array Sorting Functions909899
+Ref: Array Sorting Functions-Footnote-1916018
+Node: Two-way I/O916226
+Ref: Two-way I/O-Footnote-1924221
+Ref: Two-way I/O-Footnote-2924412
+Node: TCP/IP Networking924494
+Node: Profiling927674
+Node: Persistent Memory937384
+Ref: Persistent Memory-Footnote-1946342
+Node: Extension Philosophy946473
+Node: Advanced Features Summary948008
+Node: Internationalization950278
+Node: I18N and L10N951984
+Node: Explaining gettext952679
+Ref: Explaining gettext-Footnote-1958832
+Ref: Explaining gettext-Footnote-2959027
+Node: Programmer i18n959192
+Ref: Programmer i18n-Footnote-1964305
+Node: Translator i18n964354
+Node: String Extraction965190
+Ref: String Extraction-Footnote-1966368
+Node: Printf Ordering966466
+Ref: Printf Ordering-Footnote-1969328
+Node: I18N Portability969396
+Ref: I18N Portability-Footnote-1971970
+Node: I18N Example972041
+Ref: I18N Example-Footnote-1975441
+Ref: I18N Example-Footnote-2975517
+Node: Gawk I18N975634
+Node: I18N Summary976290
+Node: Debugger977691
+Node: Debugging978715
+Node: Debugging Concepts979164
+Node: Debugging Terms980990
+Node: Awk Debugging983603
+Ref: Awk Debugging-Footnote-1984580
+Node: Sample Debugging Session984720
+Node: Debugger Invocation985272
+Node: Finding The Bug986901
+Node: List of Debugger Commands993587
+Node: Breakpoint Control994964
+Node: Debugger Execution Control998796
+Node: Viewing And Changing Data1002276
+Node: Execution Stack1006014
+Node: Debugger Info1007695
+Node: Miscellaneous Debugger Commands1011994
+Node: Readline Support1017247
+Node: Limitations1018193
+Node: Debugging Summary1020837
+Node: Namespaces1022140
+Node: Global Namespace1023267
+Node: Qualified Names1024712
+Node: Default Namespace1025747
+Node: Changing The Namespace1026522
+Node: Naming Rules1028216
+Node: Internal Name Management1030131
+Node: Namespace Example1031201
+Node: Namespace And Features1033784
+Node: Namespace Summary1035241
+Node: Arbitrary Precision Arithmetic1036754
+Node: Computer Arithmetic1038273
+Ref: table-numeric-ranges1042090
+Ref: table-floating-point-ranges1042588
+Ref: Computer Arithmetic-Footnote-11043247
+Node: Math Definitions1043306
+Ref: table-ieee-formats1046351
+Node: MPFR features1046925
+Node: MPFR On Parole1047378
+Ref: MPFR On Parole-Footnote-11048222
+Node: MPFR Intro1048381
+Node: FP Math Caution1050071
+Ref: FP Math Caution-Footnote-11051145
+Node: Inexactness of computations1051522
+Node: Inexact representation1052553
+Node: Comparing FP Values1053936
+Node: Errors accumulate1055194
+Node: Strange values1056661
+Ref: Strange values-Footnote-11059327
+Node: Getting Accuracy1059432
+Node: Try To Round1062169
+Node: Setting precision1063076
+Ref: table-predefined-precision-strings1063781
+Node: Setting the rounding mode1065666
+Ref: table-gawk-rounding-modes1066048
+Ref: Setting the rounding mode-Footnote-11070106
+Node: Arbitrary Precision Integers1070289
+Ref: Arbitrary Precision Integers-Footnote-11073501
+Node: Checking for MPFR1073657
+Node: POSIX Floating Point Problems1075147
+Ref: POSIX Floating Point Problems-Footnote-11080011
+Node: Floating point summary1080049
+Node: Dynamic Extensions1082313
+Node: Extension Intro1083912
+Node: Plugin License1085220
+Node: Extension Mechanism Outline1086033
+Ref: figure-load-extension1086484
+Ref: figure-register-new-function1088069
+Ref: figure-call-new-function1089179
+Node: Extension API Description1091303
+Node: Extension API Functions Introduction1093032
+Ref: table-api-std-headers1094930
+Node: General Data Types1099394
+Ref: General Data Types-Footnote-11108562
+Node: Memory Allocation Functions1108877
+Ref: Memory Allocation Functions-Footnote-11113602
+Node: Constructor Functions1113701
+Node: API Ownership of MPFR and GMP Values1117606
+Node: Registration Functions1119167
+Node: Extension Functions1119871
+Node: Exit Callback Functions1125447
+Node: Extension Version String1126766
+Node: Input Parsers1127461
+Node: Output Wrappers1142105
+Node: Two-way processors1146953
+Node: Printing Messages1149314
+Ref: Printing Messages-Footnote-11150528
+Node: Updating ERRNO1150683
+Node: Requesting Values1151482
+Ref: table-value-types-returned1152235
+Node: Accessing Parameters1153344
+Node: Symbol Table Access1154628
+Node: Symbol table by name1155144
+Ref: Symbol table by name-Footnote-11158355
+Node: Symbol table by cookie1158487
+Ref: Symbol table by cookie-Footnote-11162768
+Node: Cached values1162832
+Ref: Cached values-Footnote-11166476
+Node: Array Manipulation1166633
+Ref: Array Manipulation-Footnote-11167736
+Node: Array Data Types1167773
+Ref: Array Data Types-Footnote-11170595
+Node: Array Functions1170695
+Node: Flattening Arrays1175724
+Node: Creating Arrays1182776
+Node: Redirection API1187626
+Node: Extension API Variables1190647
+Node: Extension Versioning1191372
+Ref: gawk-api-version1191809
+Node: Extension GMP/MPFR Versioning1193597
+Node: Extension API Informational Variables1195303
+Node: Extension API Boilerplate1196464
+Node: Changes from API V11200600
+Node: Finding Extensions1202234
+Node: Extension Example1202809
+Node: Internal File Description1203633
+Node: Internal File Ops1207957
+Ref: Internal File Ops-Footnote-11219515
+Node: Using Internal File Ops1219663
+Ref: Using Internal File Ops-Footnote-11222094
+Node: Extension Samples1222372
+Node: Extension Sample File Functions1223941
+Node: Extension Sample Fnmatch1232079
+Node: Extension Sample Fork1233674
+Node: Extension Sample Inplace1234950
+Node: Extension Sample Ord1238622
+Node: Extension Sample Readdir1239498
+Ref: table-readdir-file-types1240395
+Node: Extension Sample Revout1241533
+Node: Extension Sample Rev2way1242130
+Node: Extension Sample Read write array1242882
+Node: Extension Sample Readfile1246156
+Node: Extension Sample Time1247287
+Node: Extension Sample API Tests1249577
+Node: gawkextlib1250085
+Node: Extension summary1253121
+Node: Extension Exercises1256979
+Node: Language History1258257
+Node: V7/SVR3.11259971
+Node: SVR41262321
+Node: POSIX1263853
+Node: BTL1265278
+Node: POSIX/GNU1266047
+Node: Feature History1272578
+Node: Common Extensions1292080
+Node: Ranges and Locales1293449
+Ref: Ranges and Locales-Footnote-11298250
+Ref: Ranges and Locales-Footnote-21298277
+Ref: Ranges and Locales-Footnote-31298516
+Node: Contributors1298739
+Node: History summary1304944
+Node: Installation1306390
+Node: Gawk Distribution1307354
+Node: Getting1307846
+Node: Extracting1308845
+Node: Distribution contents1310557
+Node: Unix Installation1318637
+Node: Quick Installation1319459
+Node: Compiling with MPFR1322005
+Node: Shell Startup Files1322711
+Node: Additional Configuration Options1323868
+Node: Configuration Philosophy1326255
+Node: Compiling from Git1328757
+Node: Building the Documentation1329316
+Node: Non-Unix Installation1330728
+Node: PC Installation1331204
+Node: PC Binary Installation1332077
+Node: PC Compiling1332982
+Node: PC Using1334160
+Node: Cygwin1337888
+Node: MSYS1339144
+Node: OpenVMS Installation1339776
+Node: OpenVMS Compilation1340457
+Ref: OpenVMS Compilation-Footnote-11341940
+Node: OpenVMS Dynamic Extensions1342002
+Node: OpenVMS Installation Details1343638
+Node: OpenVMS Running1346073
+Node: OpenVMS GNV1350210
+Node: Bugs1350965
+Node: Bug definition1351889
+Node: Bug address1355540
+Node: Usenet1359131
+Node: Performance bugs1360362
+Node: Asking for help1363380
+Node: Maintainers1365371
+Node: Other Versions1366398
+Node: Installation summary1375330
+Node: Notes1376714
+Node: Compatibility Mode1377524
+Node: Additions1378346
+Node: Accessing The Source1379291
+Node: Adding Code1380826
+Node: New Ports1387962
+Node: Derived Files1392472
+Ref: Derived Files-Footnote-11398319
+Ref: Derived Files-Footnote-21398354
+Ref: Derived Files-Footnote-31398971
+Node: Future Extensions1399085
+Node: Implementation Limitations1399757
+Node: Extension Design1400999
+Node: Old Extension Problems1402163
+Ref: Old Extension Problems-Footnote-11403739
+Node: Extension New Mechanism Goals1403800
+Ref: Extension New Mechanism Goals-Footnote-11407296
+Node: Extension Other Design Decisions1407497
+Node: Extension Future Growth1409696
+Node: Notes summary1410320
+Node: Basic Concepts1411533
+Node: Basic High Level1412218
+Ref: figure-general-flow1412500
+Ref: figure-process-flow1413207
+Ref: Basic High Level-Footnote-11416608
+Node: Basic Data Typing1416797
+Node: Glossary1420215
+Node: Copying1453337
+Node: GNU Free Documentation License1491098
+Node: Index1516421
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 72b13d86..b0d2326d 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -1503,6 +1503,10 @@ Document minimally and release.
 After eight years, add another part @code{egrep} and two
 more parts C.  Document very well and release.
 
+After 35 more years, add Unicode and CSV support, sprinkle lightly with
+a few choice features from @command{gawk}, document very well again,
+and release.
+
 @docbook
 </sidebar>
 @end docbook
@@ -1524,6 +1528,10 @@ Document minimally and release.
 
 After eight years, add another part @code{egrep} and two
 more parts C.  Document very well and release.
+
+After 35 more years, add Unicode and CSV support, sprinkle lightly with
+a few choice features from @command{gawk}, document very well again,
+and release.
 @end cartouche
 @end ifnotdocbook
 
@@ -4175,6 +4183,20 @@ the program. The trace is printed to standard error. 
Each ``op code''
 is preceded by a @code{+}
 sign in the output.
 
+@item @option{-k}
+@itemx @option{--csv}
+@cindex @option{-k} option
+@cindex @option{--csv} option
+@cindex comma separated values (CSV) data @subentry @option{-k} option
+@cindex comma separated values (CSV) data @subentry @option{--csv} option
+@cindex CSV (comma separated values) data @subentry @option{-k} option
+@cindex CSV (comma separated values) data @subentry @option{--csv} option
+@cindex op-codes, trace of internal
+Enable special processing for files with comma separated values
+(CSV). @xref{Comma Separated Fields}.
+This option cannot be used with @option{--posix}. Attempting to do
+causes a fatal error.
+
 @item @option{-l} @var{ext}
 @itemx @option{--load} @var{ext}
 @cindex @option{-l} option
@@ -6956,7 +6978,6 @@ versions, use @code{tolower()} or @code{toupper()}.
 
 @end itemize
 
-
 @node Reading Files
 @chapter Reading Input Files
 
@@ -7031,6 +7052,12 @@ If @code{RS} is any single character, that character 
separates records.
 Otherwise (in @command{gawk}), @code{RS} is treated as a regular expression.
 This mechanism is explained in greater detail shortly.
 
+@quotation NOTE
+When @command{gawk} is invoked with the @option{--csv} option, nothing
+in this @value{SECTION} applies. @xref{Comma Separated Fields}, for the
+details.
+@end quotation
+
 @menu
 * awk split records::           How standard @command{awk} splits records.
 * gawk split records::          How @command{gawk} splits records.
@@ -7830,7 +7857,6 @@ Shell programmers take note:  @command{awk} does 
@emph{not} use the
 name @code{IFS} that is used by the POSIX-compliant shells (such as
 the Unix Bourne shell, @command{sh}, or Bash).
 
-@c FIXME: This needs reworking now that we have CSV
 @cindex @code{FS} variable @subentry changing value of
 The value of @code{FS} can be changed in the @command{awk} program with the
 assignment operator, @samp{=} (@pxref{Assignment Ops}).
@@ -7840,7 +7866,7 @@ is read with the proper separator.  To do this, use the 
special
 @code{BEGIN} pattern
 (@pxref{BEGIN/END}).
 For example, here we set the value of @code{FS} to the string
-@code{","}:
+@code{":"}:
 
 @example
 awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
@@ -7851,7 +7877,7 @@ awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
 Given the input line:
 
 @example
-John Q. Smith, 29 Oak St., Walamazoo, MI 42139
+John Q. Smith: 29 Oak St.: Walamazoo: MI 42139
 @end example
 
 @noindent
@@ -7867,7 +7893,7 @@ person's name in the example we just used might have a 
title or
 suffix attached, such as:
 
 @example
-John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
+John Q. Smith: LXIX: 29 Oak St.: Walamazoo: MI 42139
 @end example
 
 @noindent
@@ -7879,7 +7905,6 @@ separator characters carefully to prevent such problems.
 (If the data is not in a form that is easy to process, perhaps you
 can massage it first with a separate @command{awk} program.)
 
-
 @node Default Field Splitting
 @subsection Whitespace Normally Separates Fields
 
@@ -8057,27 +8082,30 @@ behaves this way.
 @node Comma Separated Fields
 @subsection Working With Comma Separated Value Files
 
-@cindex comma separated values (CSV) data @subentry parsing with @code{FS}
-@cindex CSV (comma separated values) data @subentry parsing with @code{FS}
-@cindex @code{FS} variable @subentry character "," as
-@cindex @code{FS} variable @subentry parsing CSV files
+@cindex comma separated values (CSV) data @subentry records and fields
+@cindex CSV (comma separated values) data @subentry records and fields
 Many commonly-used tools use a comma to separate fields, instead of whitespace.
 This is particularly true of popular spreadsheet programs.  There is no
 universally accepted standard for the format of these files, although
-@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180} lists the common
+@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180} lists the common
 practices.
 
 For decades, anyone wishing to work with CSV files and @command{awk}
-had to ``roll their own'' solution. (For example, @pxref{Splitting By 
Content}).
-In 2023, Brian Kernighan decided to add basic CSV support to his version of
+had to ``roll their own'' solution.
+(For an example, @pxref{Splitting By Content}).
+In 2023, Brian Kernighan decided to add CSV support to his version of
 @command{awk}.  In order to keep up, @command{gawk} too provides the same
 support as his version.
-To use CSV data, set @code{FS} equal to a string with a single comma, like so: 
@samp{FS = ","}.
+To use CSV data, invoke @command{gawk} with either of the
+@option{-k} or @option{--csv} options.
 
 Fields in CSV files are separated by commas.  In order to allow a comma
 to appear inside a field (i.e., as data), the field may be quoted
 by beginning and ending it with double quotes.  In order to allow a double
-quote inside a double-quoted field, two double quotes are used.
+quote inside a field, the field @emph{must} be quoted, and two double quotes 
are used
+to represent an actual double quote.
+The double quote that starts a quoted field must be the first
+character after the comma.
 @ref{table-csv-examples} shows some examples.
 
 @float Table,table-csv-examples
@@ -8088,22 +8116,40 @@ quote inside a double-quoted field, two double quotes 
are used.
 @item @code{"quoted data"} @tab @code{quoted data}
 @item @code{"quoted, data"} @tab @code{quoted, data}
 @item @code{"She said ""Stop!""."} @tab @code{She said "Stop!".}
-@item @code{She said "Stop!".} @tab @code{She said "Stop!".}
 @end multitable
 @end float
 
-The double-quote that starts a quoted field must be the first
-character after the comma.
-
-Some programs that support CSV-formatted data even allow fields to
-include embedded newlines (such as a postal address, for example).
-This is @emph{not} supported in either BWK @command{awk} or in
-@command{gawk}. This cannot be done using only facilities in the
-@command{awk} language, since @command{awk} first splits the input
-into records, and the default record separator is a newline.
-Thus any newline embedded in a field simply terminates the record.
-
-CSV input parsing is disabled in POSIX mode.
+Additionally, and here's where it gets messy, newlines are also
+allowed inside double-quoted fields!
+In order to deal with such things, when processing CSV files,
+@command{gawk} scans the input data looking for newlines that
+are not enclosed in double quotes. Thus, use of the @option{--csv}
+totally overrides normal record processing with @code{RS} (@pxref{Records}).
+
+Many CSV files are imported from systems where the line terminator
+for text files is a carriage-return--line-feed pair
+(CR-LF, @code{\r} followed by @code{\n}).
+For ease of use, when processing CSV files, @command{gawk} simply
+strips out any carriage-return characters in the input.
+
+The behavior of the @code{split()} function (not formally discussed
+yet, see @ref{String Functions}) differs slightly when processing CSV
+files. When called with two arguments
+(@samp{split(@var{string}, @var{array})}), @code{split()}
+does CSV-based splitting.  Otherwise, it behaves normally.
+
+If @option{--csv} has been used, @code{PROCINFO["CSV"]} will
+exist. Otherwise, it will not. @xref{Auto-set}.
+
+Finally, if @option{--csv} has been used, assigning a value
+to any of @code{FS}, @code{FIELDWIDTHS}, @code{FPAT}, or
+@code{RS} generates a warning message.
+
+To be clear, @command{gawk} takes
+@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180} as its
+specification for CSV input data.  There are no mechanisms
+for accepting nonstandard CSV data, such as files that use
+a semicolon instead of a comma as the separator.
 
 @node Command Line Field Separator
 @subsection Setting @code{FS} from the Command Line
@@ -8347,6 +8393,10 @@ The following list summarizes how fields are split, 
based on the value
 of @code{FS} (@samp{==} means ``is equal to''):
 
 @table @code
+@item @asis{@command{gawk} was invoked with @option{--csv}}
+Field splitting follows the rules given in @ref{Comma Separated Fields}.
+The value of @code{FS} is ignored.
+
 @item FS == " "
 Fields are separated by runs of whitespace.  Leading and trailing
 whitespace are ignored.  This is the default.
@@ -8636,6 +8686,9 @@ four, and @code{$4} has the value @code{"ddd"}.
 @node Splitting By Content
 @section Defining Fields by Content
 
+@strong{FIXME}: This whole section needs rewriting now
+that @command{gawk} has built-in CSV parsing. Sigh.
+
 @menu
 * More CSV::                    More on CSV files.
 * FS versus FPAT::              A subtle difference.
@@ -8657,7 +8710,7 @@ what they are, and not by what they are not.
 @cindex CSV (comma separated values) data @subentry parsing with @code{FPAT}
 @cindex Comma separated values (CSV) data @subentry parsing with @code{FPAT}
 The most notorious such case
-is so-called @dfn{comma-separated values} (CSV) data. Many spreadsheet 
programs,
+is comma-separated values (CSV) data. Many spreadsheet programs,
 for example, can export their data into text files, where each record is
 terminated with a newline, and fields are separated by commas. If
 commas only separated the data, there wouldn't be an issue. The problem comes 
when
@@ -8900,7 +8953,9 @@ The value is @code{"FS"} if regular field splitting is 
being used,
 or @code{"FPAT"} if content-based field splitting is being used:
 
 @example
-if (PROCINFO["FS"] == "FS")
+if ("CSV" in PROCINFO)
+    @var{CSV-based field splitting} @dots{}
+else if (PROCINFO["FS"] == "FS")
     @var{regular field splitting} @dots{}
 else if (PROCINFO["FS"] == "FIELDWIDTHS")
     @var{fixed-width field splitting} @dots{}
@@ -8911,7 +8966,7 @@ else
 @end example
 
 This information is useful when writing a function that needs to
-temporarily change @code{FS} or @code{FIELDWIDTHS}, read some records,
+temporarily change @code{FS}, @code{FIELDWIDTHS}, or @code{FPAT}, read some 
records,
 and then restore the original settings (@pxref{Passwd Functions} for an
 example of such a function).
 
@@ -19324,11 +19379,6 @@ any trailing
 whitespace goes into @code{@var{seps}[@var{n}]}, where @var{n} is the
 return value of
 @code{split()} (i.e., the number of elements in @var{array}).
-If @var{fieldsep} is a comma, and @command{gawk} is not in POSIX mode,
-then the string is split using the CSV parsing rules, as for @code{FS}
-(@pxref{Comma Separated Fields}). In this case, the @var{seps}
-array is not filled in, since each element would simply consist of
-a string containing a comma.
 
 The @code{split()} function splits strings into pieces in the same way
 that input lines are split into fields.  For example:
@@ -19358,6 +19408,13 @@ seps[2] = "-"
 @noindent
 The value returned by this call to @code{split()} is three.
 
+If @command{gawk} is invoked with @option{--csv}, then a two-argument
+call to @code{split()} splits the string using the CSV parsing rules as
+described in @ref{Comma Separated Fields}.  With three and four arguments,
+@code{split()} works as just described.  The four-argument call makes
+no sense, since each element of @var{seps} would simply consist of a
+string containing a comma.
+
 @cindex differences in @command{awk} and @command{gawk} @subentry 
@code{split()} function
 As with input field-splitting, when the value of @var{fieldsep} is
 @w{@code{" "}}, leading and trailing whitespace is ignored in values assigned 
to
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 5c0f7387..33f43a81 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -1492,6 +1492,10 @@ Document minimally and release.
 
 After eight years, add another part @code{egrep} and two
 more parts C.  Document very well and release.
+
+After 35 more years, add Unicode and CSV support, sprinkle lightly with
+a few choice features from @command{gawk}, document very well again,
+and release.
 @end sidebar
 
 @cindex Aho, Alfred
@@ -4085,6 +4089,20 @@ the program. The trace is printed to standard error. 
Each ``op code''
 is preceded by a @code{+}
 sign in the output.
 
+@item @option{-k}
+@itemx @option{--csv}
+@cindex @option{-k} option
+@cindex @option{--csv} option
+@cindex comma separated values (CSV) data @subentry @option{-k} option
+@cindex comma separated values (CSV) data @subentry @option{--csv} option
+@cindex CSV (comma separated values) data @subentry @option{-k} option
+@cindex CSV (comma separated values) data @subentry @option{--csv} option
+@cindex op-codes, trace of internal
+Enable special processing for files with comma separated values
+(CSV). @xref{Comma Separated Fields}.
+This option cannot be used with @option{--posix}. Attempting to do
+causes a fatal error.
+
 @item @option{-l} @var{ext}
 @itemx @option{--load} @var{ext}
 @cindex @option{-l} option
@@ -6715,6 +6733,12 @@ If @code{RS} is any single character, that character 
separates records.
 Otherwise (in @command{gawk}), @code{RS} is treated as a regular expression.
 This mechanism is explained in greater detail shortly.
 
+@quotation NOTE
+When @command{gawk} is invoked with the @option{--csv} option, nothing
+in this @value{SECTION} applies. @xref{Comma Separated Fields}, for the
+details.
+@end quotation
+
 @menu
 * awk split records::           How standard @command{awk} splits records.
 * gawk split records::          How @command{gawk} splits records.
@@ -7395,7 +7419,6 @@ Shell programmers take note:  @command{awk} does 
@emph{not} use the
 name @code{IFS} that is used by the POSIX-compliant shells (such as
 the Unix Bourne shell, @command{sh}, or Bash).
 
-@c FIXME: This needs reworking now that we have CSV
 @cindex @code{FS} variable @subentry changing value of
 The value of @code{FS} can be changed in the @command{awk} program with the
 assignment operator, @samp{=} (@pxref{Assignment Ops}).
@@ -7405,7 +7428,7 @@ is read with the proper separator.  To do this, use the 
special
 @code{BEGIN} pattern
 (@pxref{BEGIN/END}).
 For example, here we set the value of @code{FS} to the string
-@code{","}:
+@code{":"}:
 
 @example
 awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
@@ -7416,7 +7439,7 @@ awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}'
 Given the input line:
 
 @example
-John Q. Smith, 29 Oak St., Walamazoo, MI 42139
+John Q. Smith: 29 Oak St.: Walamazoo: MI 42139
 @end example
 
 @noindent
@@ -7432,7 +7455,7 @@ person's name in the example we just used might have a 
title or
 suffix attached, such as:
 
 @example
-John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
+John Q. Smith: LXIX: 29 Oak St.: Walamazoo: MI 42139
 @end example
 
 @noindent
@@ -7622,27 +7645,30 @@ behaves this way.
 @node Comma Separated Fields
 @subsection Working With Comma Separated Value Files
 
-@cindex comma separated values (CSV) data @subentry parsing with @code{FS}
-@cindex CSV (comma separated values) data @subentry parsing with @code{FS}
-@cindex @code{FS} variable @subentry character "," as
-@cindex @code{FS} variable @subentry parsing CSV files
+@cindex comma separated values (CSV) data @subentry records and fields
+@cindex CSV (comma separated values) data @subentry records and fields
 Many commonly-used tools use a comma to separate fields, instead of whitespace.
 This is particularly true of popular spreadsheet programs.  There is no
 universally accepted standard for the format of these files, although
-@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180} lists the common
+@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180} lists the common
 practices.
 
 For decades, anyone wishing to work with CSV files and @command{awk}
-had to ``roll their own'' solution. (For example, @pxref{Splitting By 
Content}).
-In 2023, Brian Kernighan decided to add basic CSV support to his version of
+had to ``roll their own'' solution.
+(For an example, @pxref{Splitting By Content}).
+In 2023, Brian Kernighan decided to add CSV support to his version of
 @command{awk}.  In order to keep up, @command{gawk} too provides the same
 support as his version.
-To use CSV data, set @code{FS} equal to a string with a single comma, like so: 
@samp{FS = ","}.
+To use CSV data, invoke @command{gawk} with either of the
+@option{-k} or @option{--csv} options.
 
 Fields in CSV files are separated by commas.  In order to allow a comma
 to appear inside a field (i.e., as data), the field may be quoted
 by beginning and ending it with double quotes.  In order to allow a double
-quote inside a double-quoted field, two double quotes are used.
+quote inside a field, the field @emph{must} be quoted, and two double quotes 
are used
+to represent an actual double quote.
+The double quote that starts a quoted field must be the first
+character after the comma.
 @ref{table-csv-examples} shows some examples.
 
 @float Table,table-csv-examples
@@ -7653,22 +7679,40 @@ quote inside a double-quoted field, two double quotes 
are used.
 @item @code{"quoted data"} @tab @code{quoted data}
 @item @code{"quoted, data"} @tab @code{quoted, data}
 @item @code{"She said ""Stop!""."} @tab @code{She said "Stop!".}
-@item @code{She said "Stop!".} @tab @code{She said "Stop!".}
 @end multitable
 @end float
 
-The double-quote that starts a quoted field must be the first
-character after the comma.
-
-Some programs that support CSV-formatted data even allow fields to
-include embedded newlines (such as a postal address, for example).
-This is @emph{not} supported in either BWK @command{awk} or in
-@command{gawk}. This cannot be done using only facilities in the
-@command{awk} language, since @command{awk} first splits the input
-into records, and the default record separator is a newline.
-Thus any newline embedded in a field simply terminates the record.
-
-CSV input parsing is disabled in POSIX mode.
+Additionally, and here's where it gets messy, newlines are also
+allowed inside double-quoted fields!
+In order to deal with such things, when processing CSV files,
+@command{gawk} scans the input data looking for newlines that
+are not enclosed in double quotes. Thus, use of the @option{--csv}
+totally overrides normal record processing with @code{RS} (@pxref{Records}).
+
+Many CSV files are imported from systems where the line terminator
+for text files is a carriage-return--line-feed pair
+(CR-LF, @code{\r} followed by @code{\n}).
+For ease of use, when processing CSV files, @command{gawk} simply
+strips out any carriage-return characters in the input.
+
+The behavior of the @code{split()} function (not formally discussed
+yet, see @ref{String Functions}) differs slightly when processing CSV
+files. When called with two arguments
+(@samp{split(@var{string}, @var{array})}), @code{split()}
+does CSV-based splitting.  Otherwise, it behaves normally.
+
+If @option{--csv} has been used, @code{PROCINFO["CSV"]} will
+exist. Otherwise, it will not. @xref{Auto-set}.
+
+Finally, if @option{--csv} has been used, assigning a value
+to any of @code{FS}, @code{FIELDWIDTHS}, @code{FPAT}, or
+@code{RS} generates a warning message.
+
+To be clear, @command{gawk} takes
+@uref{http://www.ietf.org/rfc/rfc4180, RFC 4180} as its
+specification for CSV input data.  There are no mechanisms
+for accepting nonstandard CSV data, such as files that use
+a semicolon instead of a comma as the separator.
 
 @node Command Line Field Separator
 @subsection Setting @code{FS} from the Command Line
@@ -7852,6 +7896,10 @@ The following list summarizes how fields are split, 
based on the value
 of @code{FS} (@samp{==} means ``is equal to''):
 
 @table @code
+@item @asis{@command{gawk} was invoked with @option{--csv}}
+Field splitting follows the rules given in @ref{Comma Separated Fields}.
+The value of @code{FS} is ignored.
+
 @item FS == " "
 Fields are separated by runs of whitespace.  Leading and trailing
 whitespace are ignored.  This is the default.
@@ -8105,6 +8153,9 @@ four, and @code{$4} has the value @code{"ddd"}.
 @node Splitting By Content
 @section Defining Fields by Content
 
+@strong{FIXME}: This whole section needs rewriting now
+that @command{gawk} has built-in CSV parsing. Sigh.
+
 @menu
 * More CSV::                    More on CSV files.
 * FS versus FPAT::              A subtle difference.
@@ -8126,7 +8177,7 @@ what they are, and not by what they are not.
 @cindex CSV (comma separated values) data @subentry parsing with @code{FPAT}
 @cindex Comma separated values (CSV) data @subentry parsing with @code{FPAT}
 The most notorious such case
-is so-called @dfn{comma-separated values} (CSV) data. Many spreadsheet 
programs,
+is comma-separated values (CSV) data. Many spreadsheet programs,
 for example, can export their data into text files, where each record is
 terminated with a newline, and fields are separated by commas. If
 commas only separated the data, there wouldn't be an issue. The problem comes 
when
@@ -8369,7 +8420,9 @@ The value is @code{"FS"} if regular field splitting is 
being used,
 or @code{"FPAT"} if content-based field splitting is being used:
 
 @example
-if (PROCINFO["FS"] == "FS")
+if ("CSV" in PROCINFO)
+    @var{CSV-based field splitting} @dots{}
+else if (PROCINFO["FS"] == "FS")
     @var{regular field splitting} @dots{}
 else if (PROCINFO["FS"] == "FIELDWIDTHS")
     @var{fixed-width field splitting} @dots{}
@@ -8380,7 +8433,7 @@ else
 @end example
 
 This information is useful when writing a function that needs to
-temporarily change @code{FS} or @code{FIELDWIDTHS}, read some records,
+temporarily change @code{FS}, @code{FIELDWIDTHS}, or @code{FPAT}, read some 
records,
 and then restore the original settings (@pxref{Passwd Functions} for an
 example of such a function).
 
@@ -10955,9 +11008,9 @@ intermixed with @command{gawk}'s output comes out in the
 expected order:
 
 @example
-print "something"                      # goes to standard output
-print "someting else" | "some-command" # also to standard output
-print "more stuff"                     # and this too
+print "something"                       # goes to standard output
+print "something else" | "some-command" # also to standard output
+print "more stuff"                      # and this too
 @end example
 
 There can be a price to pay for this; flushing data down
@@ -18538,11 +18591,6 @@ any trailing
 whitespace goes into @code{@var{seps}[@var{n}]}, where @var{n} is the
 return value of
 @code{split()} (i.e., the number of elements in @var{array}).
-If @var{fieldsep} is a comma, and @command{gawk} is not in POSIX mode,
-then the string is split using the CSV parsing rules, as for @code{FS}
-(@pxref{Comma Separated Fields}). In this case, the @var{seps}
-array is not filled in, since each element would simply consist of
-a string containing a comma.
 
 The @code{split()} function splits strings into pieces in the same way
 that input lines are split into fields.  For example:
@@ -18572,6 +18620,13 @@ seps[2] = "-"
 @noindent
 The value returned by this call to @code{split()} is three.
 
+If @command{gawk} is invoked with @option{--csv}, then a two-argument
+call to @code{split()} splits the string using the CSV parsing rules as
+described in @ref{Comma Separated Fields}.  With three and four arguments,
+@code{split()} works as just described.  The four-argument call makes
+no sense, since each element of @var{seps} would simply consist of a
+string containing a comma.
+
 @cindex differences in @command{awk} and @command{gawk} @subentry 
@code{split()} function
 As with input field-splitting, when the value of @var{fieldsep} is
 @w{@code{" "}}, leading and trailing whitespace is ignored in values assigned 
to
diff --git a/doc/wordlist b/doc/wordlist
index 5342b675..b37f31e8 100644
--- a/doc/wordlist
+++ b/doc/wordlist
@@ -49,6 +49,7 @@ BOOL
 BREs
 BSIZE
 BTL
+BUFFERPIPE
 BWK
 Banzai
 BeOS
@@ -351,6 +352,7 @@ Nextfile
 Nlines
 NoSQL
 Nof
+Noflush
 Nonalphabetic
 Nonconstant
 Nondecimal
@@ -1233,6 +1235,7 @@ libgcc
 libintl
 libmawk
 libs
+libsigsegv
 libtool
 licensors
 lineannotation
diff --git a/doc/wordlist3 b/doc/wordlist3
index d8846134..cc71f108 100644
--- a/doc/wordlist3
+++ b/doc/wordlist3
@@ -59,6 +59,7 @@ compl
 coprocess
 coprocesses
 cos
+csv
 datespec
 dcgettext
 dcngettext

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

Summary of changes:
 doc/ChangeLog   |    6 +
 doc/gawk.info   | 1563 ++++++++++++++++++++++++++++---------------------------
 doc/gawk.texi   |  129 +++--
 doc/gawktexi.in |  129 +++--
 doc/wordlist    |    3 +
 doc/wordlist3   |    1 +
 6 files changed, 999 insertions(+), 832 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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