gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, master, updated. c8f10351204ee6e0ad2517c


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. c8f10351204ee6e0ad2517c661eac0701d4dd4fa
Date: Thu, 25 Apr 2013 21:15:09 +0000

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

The branch, master has been updated
       via  c8f10351204ee6e0ad2517c661eac0701d4dd4fa (commit)
       via  a8469ccd952ced2fa39d352bfe0827b571417235 (commit)
      from  4cc4f3f6ffbf62890ffdd7fb4b407f2d1cd664a0 (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=c8f10351204ee6e0ad2517c661eac0701d4dd4fa

commit c8f10351204ee6e0ad2517c661eac0701d4dd4fa
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Apr 26 00:14:46 2013 +0300

    Doc cleanup in MPFR and API chapters.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index 805dd2e..ff57620 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,9 @@
+2013-04-26         Arnold D. Robbins     <address@hidden>
+
+       * gawkman.texi: Cleanup in MPFR and API chapters.
+       * api-figure2.fig: Minor fix.
+       * api-figure2.eps, api-figure2.pdf, api-figure2.png: Regenerated.
+
 2013-04-24         Arnold D. Robbins     <address@hidden>
 
        * gawk.1: Finish cleanup pass.
diff --git a/doc/api-figure2.eps b/doc/api-figure2.eps
index 4ca9e32..caf5c34 100644
--- a/doc/api-figure2.eps
+++ b/doc/api-figure2.eps
@@ -1,7 +1,7 @@
 %!PS-Adobe-3.0 EPSF-3.0
 %%Title: api-figure2.fig
 %%Creator: fig2dev Version 3.2 Patchlevel 5d
-%%CreationDate: Wed Oct 31 20:16:08 2012
+%%CreationDate: Thu Apr 25 22:22:07 2013
 %%BoundingBox: 0 0 363 179
 %Magnification: 1.0000
 %%EndComments
@@ -469,15 +469,15 @@ pageheader
 7.500 slw
 0 slc
 gs  clippath
-4057 4011 m 3971 4135 l 4021 4169 l 4107 4045 l 4107 4045 l 4014 4127 l 4057 
4011 l cp
+3662 4014 m 3567 4132 l 3613 4170 l 3708 4052 l 3708 4052 l 3610 4127 l 3662 
4014 l cp
 eoclip
-n 6097.5 5512.5 2502.5 -33.2614 -146.7386 arcn
+n 5895.0 5917.5 2902.8 -37.7581 -142.2419 arcn
 gs col0 s gr
  gr
 
 % arrowhead
 0 slj
-n 4057 4011 m 4014 4127 l 4107 4045 l 4057 4011 l  cp gs 0.00 setgray ef gr  
col0 s
+n 3662 4014 m 3610 4127 l 3708 4052 l 3662 4014 l  cp gs 0.00 setgray ef gr  
col0 s
 % Polyline
 n 3105 4140 m 6660 4140 l 6660 5085 l 3105 5085 l
  cp gs col0 s gr 
diff --git a/doc/api-figure2.fig b/doc/api-figure2.fig
index 4b0e010..2ae6085 100644
--- a/doc/api-figure2.fig
+++ b/doc/api-figure2.fig
@@ -7,7 +7,7 @@ A4
 Single
 -2
 1200 2
-5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 6097.500 5512.500 8190 4140 5940 3015 4005 
4140
+5 1 0 1 0 7 50 -1 -1 0.000 0 1 1 0 5895.000 5917.500 8190 4140 5940 3015 3600 
4140
        1 1 1.00 60.00 120.00
 2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
         3105 4140 6660 4140 6660 5085 3105 5085 3105 4140
diff --git a/doc/api-figure2.pdf b/doc/api-figure2.pdf
index 5727d7e..2046285 100644
Binary files a/doc/api-figure2.pdf and b/doc/api-figure2.pdf differ
diff --git a/doc/api-figure2.png b/doc/api-figure2.png
index 7ce913a..a6e28c9 100644
Binary files a/doc/api-figure2.png and b/doc/api-figure2.png differ
diff --git a/doc/gawk.info b/doc/gawk.info
index 287705f..8101221 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -9573,7 +9573,7 @@ specific to `gawk' are marked with a pound sign (`#').
 
 `PREC #'
      The working precision of arbitrary precision floating-point
-     numbers, 53 by default (*note Setting Precision::).
+     numbers, 53 bits by default (*note Setting Precision::).
 
 `ROUNDMODE #'
      The rounding mode to use for arbitrary precision arithmetic on
@@ -20461,7 +20461,7 @@ comparisons.
 
    It is important to note that the string value for a number may not
 reflect the full value (all the digits) that the numeric value actually
-contains.  The following program (`values.awk') illustrates this:
+contains.  The following program, `values.awk', illustrates this:
 
      {
         sum = $1 + $2
@@ -20647,12 +20647,12 @@ File: gawk.info,  Node: Integer Programming,  Prev: 
Floating Point Issues,  Up:
 15.1.2 Mixing Integers And Floating-point
 -----------------------------------------
 
-As has been mentioned already, `gawk' ordinarily uses hardware double
-precision with 64-bit IEEE binary floating-point representation for
-numbers on most systems. A large integer like 9,007,199,254,740,997 has
-a binary representation that, although finite, is more than 53 bits
-long; it must also be rounded to 53 bits.  The biggest integer that can
-be stored in a C `double' is usually the same as the largest possible
+As has been mentioned already, `awk' uses hardware double precision
+with 64-bit IEEE binary floating-point representation for numbers on
+most systems. A large integer like 9,007,199,254,740,997 has a binary
+representation that, although finite, is more than 53 bits long; it
+must also be rounded to 53 bits.  The biggest integer that can be
+stored in a C `double' is usually the same as the largest possible
 value of a `double'. If your system `double' is an IEEE 64-bit
 `double', this largest possible value is an integer and can be
 represented precisely.  What more should one know about integers?
@@ -20663,7 +20663,7 @@ precision, then the answer is 2^53.  The next 
representable number is
 the even number 2^53 + 2, meaning it is unlikely that you will be able
 to make `gawk' print 2^53 + 1 in integer format.  The range of integers
 exactly representable by a 64-bit double is [-2^53, 2^53].  If you ever
-see an integer outside this range in `gawk' using 64-bit doubles, you
+see an integer outside this range in `awk' using 64-bit doubles, you
 have reason to be very suspicious about the accuracy of the output.
 Here is a simple program with erroneous output:
 
@@ -20673,7 +20673,7 @@ Here is a simple program with erroneous output:
      -| 9007199254740992
      -| 9007199254740994
 
-   The lesson is to not assume that any large integer printed by `gawk'
+   The lesson is to not assume that any large integer printed by `awk'
 represents an exact result from your computation, especially if it wraps
 around on your screen.
 
@@ -20782,7 +20782,7 @@ zero.
 representations yield an unexpected result:
 
      $ gawk 'BEGIN {
-     >   for (d = 1.1; d <= 1.5; d += 0.1)
+     >   for (d = 1.1; d <= 1.5; d += 0.1)    # loop five times (?)
      >       i++
      >   print i
      > }'
@@ -20794,7 +20794,7 @@ examples?  If you are impatient to know, see *note 
Exact Arithmetic::.
    Instead of arbitrary precision floating-point arithmetic, often all
 you need is an adjustment of your logic or a different order for the
 operations in your calculation.  The stability and the accuracy of the
-computation of the constant pi in the previous example can be enhanced
+computation of the constant pi in the earlier example can be enhanced
 by using the following simple algebraic transformation:
 
      (sqrt(x * x + 1) - 1) / x = x / (sqrt(x * x + 1) + 1)
@@ -20802,7 +20802,7 @@ by using the following simple algebraic transformation:
 After making this, change the program does converge to pi in under 30
 iterations:
 
-     $ gawk -f /tmp/pi2.awk
+     $ gawk -f pi2.awk
      -| 3.215390309173473
      -| 3.159659942097501
      -| 3.146086215131436
@@ -20880,16 +20880,16 @@ components:
      Precision of the floating-point format in bits.
 
 "emax"
-     Maximum exponent allowed for this format.
+     Maximum exponent allowed for the format.
 
 "emin"
-     Minimum exponent allowed for this format.
+     Minimum exponent allowed for the format.
 
 "Underflow behavior"
      The format may or may not support gradual underflow.
 
 "Rounding"
-     The rounding mode of this context.
+     The rounding mode of the context.
 
    *note table-ieee-formats:: lists the precision and exponent field
 values for the basic IEEE-754 binary formats:
@@ -20954,8 +20954,8 @@ between, things do not work the way you probably 
learned in school.  In
 this case, the number is rounded to the nearest even digit.  So
 rounding 0.125 to two digits rounds down to 0.12, but rounding 0.6875
 to three digits rounds up to 0.688.  You probably have already
-encountered this rounding mode when using the `printf' routine to
-format floating-point numbers.  For example:
+encountered this rounding mode when using `printf' to format
+floating-point numbers.  For example:
 
      BEGIN {
          x = -4.5
@@ -20965,7 +20965,7 @@ format floating-point numbers.  For example:
          }
      }
 
-produces the following output when run:(1)
+produces the following output when run on the author's system:(1)
 
      -3.5 => -4
      -2.5 => -2
@@ -20979,7 +20979,7 @@ produces the following output when run:(1)
 
    The theory behind the rounding mode `roundTiesToEven' is that it
 more or less evenly distributes upward and downward rounds of exact
-halves, which might cause the round-off error to cancel itself out.
+halves, which might cause any round-off error to cancel itself out.
 This is the default rounding mode used in IEEE-754 computing functions
 and operators.
 
@@ -21006,7 +21006,7 @@ significant difference in output when you change the 
rounding mode.
 
    (1) It is possible for the output to be completely different if the
 C library in your system does not use the IEEE-754 even-rounding rule
-to round halfway cases for `printf()'.
+to round halfway cases for `printf'.
 
 
 File: gawk.info,  Node: Gawk and MPFR,  Next: Arbitrary Precision Floats,  
Prev: Floating-point Programming,  Up: Arbitrary Precision Arithmetic
@@ -21024,8 +21024,8 @@ arbitrary precision arithmetic.  The easiest way to 
find out is to look
 at the output of the following command:
 
      $ gawk --version
-     -| GNU Awk 4.1.0 (GNU MPFR 3.1.0, GNU MP 5.0.3)
-     -| Copyright (C) 1989, 1991-2012 Free Software Foundation.
+     -| GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2)
+     -| Copyright (C) 1989, 1991-2013 Free Software Foundation.
      ...
 
    `gawk' uses the GNU MPFR (http://www.mpfr.org) and GNU MP
@@ -21047,20 +21047,20 @@ File: gawk.info,  Node: Arbitrary Precision Floats,  
Next: Arbitrary Precision I
 `gawk' uses the GNU MPFR library for arbitrary precision floating-point
 arithmetic.  The MPFR library provides precise control over precisions
 and rounding modes, and gives correctly rounded, reproducible,
-platform-independent results.  With the command-line option `--bignum'
-or `-M', all floating-point arithmetic operators and numeric functions
-can yield results to any desired precision level supported by MPFR.
-Two built-in variables, `PREC' and `ROUNDMODE', provide control over
-the working precision and the rounding mode (*note Setting Precision::,
-and *note Setting Rounding Mode::).  The precision and the rounding
-mode are set globally for every operation to follow.
+platform-independent results.  With one of the command-line options
+`--bignum' or `-M', all floating-point arithmetic operators and numeric
+functions can yield results to any desired precision level supported by
+MPFR.  Two built-in variables, `PREC' and `ROUNDMODE', provide control
+over the working precision and the rounding mode (*note Setting
+Precision::, and *note Setting Rounding Mode::).  The precision and the
+rounding mode are set globally for every operation to follow.
 
    The default working precision for arbitrary precision floating-point
-values is 53, and the default value for `ROUNDMODE' is `"N"', which
-selects the IEEE-754 `roundTiesToEven' rounding mode (*note Rounding
-Mode::).(1) `gawk' uses the default exponent range in MPFR (EMAX = 2^30
-- 1, EMIN = -EMAX) for all floating-point contexts.  There is no
-explicit mechanism to adjust the exponent range.  MPFR does not
+values is 53 bits, and the default value for `ROUNDMODE' is `"N"',
+which selects the IEEE-754 `roundTiesToEven' rounding mode (*note
+Rounding Mode::).(1) `gawk' uses the default exponent range in MPFR
+(EMAX = 2^30 - 1, EMIN = -EMAX) for all floating-point contexts.  There
+is no explicit mechanism to adjust the exponent range.  MPFR does not
 implement subnormal numbers by default, and this behavior cannot be
 changed in `gawk'.
 
@@ -21085,7 +21085,7 @@ changed in `gawk'.
 
    ---------- Footnotes ----------
 
-   (1) The default precision is 53, since according to the MPFR
+   (1) The default precision is 53 bits, since according to the MPFR
 documentation, the library should be able to exactly reproduce all
 computations with double-precision machine floating-point numbers
 (`double' type in C), except the default exponent range is much wider
@@ -21100,10 +21100,11 @@ File: gawk.info,  Node: Setting Precision,  Next: 
Setting Rounding Mode,  Up: Ar
 `gawk' uses a global working precision; it does not keep track of the
 precision or accuracy of individual numbers. Performing an arithmetic
 operation or calling a built-in function rounds the result to the
-current working precision. The default working precision is 53, which
-can be modified using the built-in variable `PREC'. You can also set the
-value to one of the following pre-defined case-insensitive strings to
-emulate an IEEE-754 binary format:
+current working precision. The default working precision is 53 bits,
+which can be modified using the built-in variable `PREC'. You can also
+set the value to one of the pre-defined case-insensitive strings shown
+in *note table-predefined-precision-strings::, to emulate an IEEE-754
+binary format.
 
 `PREC'       IEEE-754 Binary Format
 --------------------------------------------------- 
@@ -21113,10 +21114,12 @@ emulate an IEEE-754 binary format:
 `"quad"'     Basic 128-bit quadruple precision.
 `"oct"'      256-bit octuple precision.
 
+Table 15.3: Predefined precision strings for `PREC'
+
    The following example illustrates the effects of changing precision
 on arithmetic operations:
 
-     $ gawk -M -v PREC=100 'BEGIN { x = 1.0e-400; print x + 0; \
+     $ gawk -M -v PREC=100 'BEGIN { x = 1.0e-400; print x + 0
      >   PREC = "double"; print x + 0 }'
      -| 1e-400
      -| 0
@@ -21174,11 +21177,11 @@ Round toward zero                `roundTowardZero'    
  `"Z"' or `"z"'
 Round to nearest, ties away      `roundTiesToAway'      `"A"' or `"a"'
 from zero                                               
 
-Table 15.3: `gawk' Rounding Modes
+Table 15.4: `gawk' Rounding Modes
 
    `ROUNDMODE' has the default value `"N"', which selects the IEEE-754
-rounding mode `roundTiesToEven'.  *note Table 15.3:
-table-gawk-rounding-modes, lists `"A"' to select the IEEE-754 mode
+rounding mode `roundTiesToEven'.  In *note Table 15.4:
+table-gawk-rounding-modes, `"A"' is listed to select the IEEE-754 mode
 `roundTiesToAway'.  This is only available if your version of the MPFR
 library supports it; otherwise setting `ROUNDMODE' to this value has no
 effect. *Note Rounding Mode::, for the meanings of the various rounding
@@ -21218,7 +21221,7 @@ print a floating-point constant:
      -| 0.1000000000000000000000000
 
    In the first case, the number is stored with the default precision
-of 53.
+of 53 bits.
 
 
 File: gawk.info,  Node: Changing Precision,  Next: Exact Arithmetic,  Prev: 
Floating-point Constants,  Up: Arbitrary Precision Floats
@@ -21278,8 +21281,8 @@ loss and underflow are often troublesome.
    When `gawk' tests the expressions `0.1 + 12.2' and `12.3' for
 equality using the machine double precision arithmetic, it decides that
 they are not equal!  (*Note Floating-point Programming::.)  You can get
-the result you want by increasing the precision; 56 in this case will
-get the job done:
+the result you want by increasing the precision; 56 bits in this case
+will get the job done:
 
      $ gawk -M -v PREC=56 'BEGIN { print (0.1 + 12.2 == 12.3) }'
      -| 1
@@ -21320,7 +21323,7 @@ floating-point arithmetic. In the example in *note 
Floating-point
 Programming:::
 
      $ gawk 'BEGIN {
-     >   for (d = 1.1; d <= 1.5; d += 0.1)
+     >   for (d = 1.1; d <= 1.5; d += 0.1)    # loop five times (?)
      >       i++
      >   print i
      > }'
@@ -21336,14 +21339,14 @@ File: gawk.info,  Node: Arbitrary Precision Integers, 
 Prev: Arbitrary Precision
 15.5 Arbitrary Precision Integer Arithmetic with `gawk'
 =======================================================
 
-If the option `--bignum' or `-M' is specified, `gawk' performs all
-integer arithmetic using GMP arbitrary precision integers.  Any number
-that looks like an integer in a program source or data file is stored
-as an arbitrary precision integer.  The size of the integer is limited
-only by your computer's memory.  The current floating-point context has
-no effect on operations involving integers.  For example, the following
-computes 5^4^3^2, the result of which is beyond the limits of ordinary
-`gawk' numbers:
+If one of the options `--bignum' or `-M' is specified, `gawk' performs
+all integer arithmetic using GMP arbitrary precision integers.  Any
+number that looks like an integer in a program source or data file is
+stored as an arbitrary precision integer.  The size of the integer is
+limited only by your computer's memory.  The current floating-point
+context has no effect on operations involving integers.  For example,
+the following computes 5^4^3^2, the result of which is beyond the
+limits of ordinary `gawk' numbers:
 
      $ gawk -M 'BEGIN {
      >   x = 5^4^3^2
@@ -21373,10 +21376,11 @@ term in Sylvester's sequence(1) using a recurrence:
 
    The output differs from the actual number,
 113,423,713,055,421,844,361,000,443, because the default precision of
-53 is not enough to represent the floating-point results exactly. You
-can either increase the precision (100 is enough in this case), or
-replace the floating-point constant `2.0' with an integer, to perform
-all computations using integer arithmetic to get the correct output.
+53 bits is not enough to represent the floating-point results exactly.
+You can either increase the precision (100 bits is enough in this
+case), or replace the floating-point constant `2.0' with an integer, to
+perform all computations using integer arithmetic to get the correct
+output.
 
    It will sometimes be necessary for `gawk' to implicitly convert an
 arbitrary precision integer into an arbitrary precision floating-point
@@ -21412,7 +21416,7 @@ File: gawk.info,  Node: Dynamic Extensions,  Next: 
Language History,  Prev: Arbi
 16 Writing Extensions for `gawk'
 ********************************
 
-It is possible to add new built-in functions to `gawk' using
+It is possible to add new functions written in C or C++ to `gawk' using
 dynamically loaded libraries. This facility is available on systems
 that support the C `dlopen()' and `dlsym()' functions.  This major node
 describes how to create extensions using code written in C or C++.
@@ -21432,6 +21436,7 @@ sample extensions are automatically built and installed 
when `gawk' is.
 * Plugin License::              A note about licensing.
 * Extension Mechanism Outline:: An outline of how it works.
 * Extension API Description::   A full description of the API.
+* Finding Extensions::          How `gawk' finds compiled extensions.
 * Extension Example::           Example C code for an extension.
 * Extension Samples::           The sample extensions that ship with
                                 `gawk'.
@@ -21457,11 +21462,12 @@ write in C or C++, you can write an extension to do 
it!
 
    Extensions are written in C or C++, using the "Application
 Programming Interface" (API) defined for this purpose by the `gawk'
-developers.  The rest of this major node explains the design decisions
-behind the API, the facilities that it provides and how to use them,
-and presents a small sample extension.  In addition, it documents the
-sample extensions included in the `gawk' distribution, and describes
-the `gawkextlib' project.
+developers.  The rest of this major node explains the facilities that
+the API provides and how to use them, and presents a small sample
+extension.  In addition, it documents the sample extensions included in
+the `gawk' distribution, and describes the `gawkextlib' project.  *Note
+Extension Design::, for a discussion of the extension mechanism goals
+and design.
 
 
 File: gawk.info,  Node: Plugin License,  Next: Extension Mechanism Outline,  
Prev: Extension Intro,  Up: Dynamic Extensions
@@ -21575,7 +21581,7 @@ Example::) and also the `testext.c' code for testing 
the APIs.
    * The API provides access to `gawk''s `do_XXX' values, reflecting
      command line options, like `do_lint', `do_profiling' and so on
      (*note Extension API Variables::).  These are informational: an
-     extension cannot affect these inside `gawk'.  In addition,
+     extension cannot affect their values inside `gawk'.  In addition,
      attempting to assign to them produces a compile-time error.
 
    * The API also provides major and minor version numbers, so that an
@@ -21585,7 +21591,7 @@ Example::) and also the `testext.c' code for testing 
the APIs.
      Versioning::, for details.
 
 
-File: gawk.info,  Node: Extension API Description,  Next: Extension Example,  
Prev: Extension Mechanism Outline,  Up: Dynamic Extensions
+File: gawk.info,  Node: Extension API Description,  Next: Finding Extensions,  
Prev: Extension Mechanism Outline,  Up: Dynamic Extensions
 
 16.4 API Description
 ====================
@@ -21608,8 +21614,6 @@ This (rather large) minor node describes the API in 
detail.
 * Array Manipulation::                   Functions for working with arrays.
 * Extension API Variables::              Variables provided by the API.
 * Extension API Boilerplate::            Boilerplate code for using the API.
-* Finding Extensions::                   How `gawk' finds compiled
-                                         extensions.
 
 
 File: gawk.info,  Node: Extension API Functions Introduction,  Next: General 
Data Types,  Up: Extension API Description
@@ -21645,14 +21649,14 @@ operations:
      into an array.
 
    * Symbol table access: retrieving a global variable, creating one,
-     or changing one.  This also includes the ability to create a scalar
-     variable that will be _constant_ within `awk' code.
+     or changing one.
 
    * Creating and releasing cached values; this provides an efficient
      way to use values for multiple variables and can be a big
      performance win.
 
    * Manipulating arrays:
+
         - Retrieving, adding, deleting, and modifying elements
 
         - Getting the count of elements in an array
@@ -21672,10 +21676,13 @@ operations:
 
      C Entity                 Header File
      ------------------------------------------- 
+     `EOF'                    `<stdio.h>'
      `FILE'                   `<stdio.h>'
      `NULL'                   `<stddef.h>'
      `malloc()'               `<stdlib.h>'
-     `memset()', `memcpy()'   `<string.h>'
+     `memcpy()'               `<string.h>'
+     `memset()'               `<string.h>'
+     `realloc()'              `<stdlib.h>'
      `size_t'                 `<sys/types.h>'
      `struct stat'            `<sys/stat.h>'
 
@@ -21683,7 +21690,8 @@ operations:
      fully standards-compliant, it is your responsibility to include
      the correct files in the correct way. This requirement is
      necessary in order to keep `gawkapi.h' clean, instead of becoming
-     a portability hodge-podge as can be seen in the `gawk' source code.
+     a portability hodge-podge as can be seen in some parts of the
+     `gawk' source code.
 
      To pass reasonable integer values for `ERRNO', you will also need
      to include `<errno.h>'.
@@ -21702,17 +21710,17 @@ operations:
      _all_ strings passed into `gawk' from the extension _must_ come
      from `malloc()' and is managed by `gawk' from then on.
 
-   * The API defines several simple structs that map values as seen
+   * The API defines several simple `struct's that map values as seen
      from `awk'.  A value can be a `double', a string, or an array (as
-     in multidimensional arrays, or when creating a new array).
-     Strings maintain both pointer and length since embedded `NUL'
+     in multidimensional arrays, or when creating a new array).  String
+     values maintain both pointer and length since embedded `NUL'
      characters are allowed.
 
-     By intent, strings are maintained using the current multibyte
-     encoding (as defined by `LC_XXX' environment variables) and not
-     using wide characters.  This matches how `gawk' stores strings
-     internally and also how characters are likely to be input and
-     output from files.
+          NOTE: By intent, strings are maintained using the current
+          multibyte encoding (as defined by `LC_XXX' environment
+          variables) and not using wide characters.  This matches how
+          `gawk' stores strings internally and also how characters are
+          likely to be input and output from files.
 
    * When retrieving a value (such as a parameter or that of a global
      variable or array element), the extension requests a specific type
@@ -21723,7 +21731,7 @@ operations:
      However, if the request and actual type don't match, the access
      function returns "false" and fills in the type of the actual value
      that is there, so that the extension can, e.g., print an error
-     message ("scalar passed where array expected").
+     message (such as "scalar passed where array expected").
 
 
    While you may call the API functions by using the function pointers
@@ -21746,7 +21754,7 @@ File: gawk.info,  Node: General Data Types,  Next: 
Requesting Values,  Prev: Ext
      Chet Ramey
 
    The extension API defines a number of simple types and structures
-for general purpose use. Additional, more specialized, data structures,
+for general purpose use. Additional, more specialized, data structures
 are introduced in subsequent minor nodes, together with the functions
 that use them.
 
@@ -21787,7 +21795,7 @@ that use them.
 `    AWK_STRING,'
 `    AWK_ARRAY,'
 `    AWK_SCALAR,         /* opaque access to a variable */'
-`    AWK_VALUE_COOKIE   /* for updating a previously created value */'
+`    AWK_VALUE_COOKIE    /* for updating a previously created value */'
 `} awk_valtype_t;'
      This `enum' indicates the type of a value.  It is used in the
      following `struct'.
@@ -21955,7 +21963,7 @@ extension code would use them.
 to exit with a fatal error message.  They should be used as if they were
 procedure calls that do not return a value.
 
-`emalloc(pointer, type, size, message)'
+`#define emalloc(pointer, type, size, message) ...'
      The arguments to this macro are as follows:
     `pointer'
           The pointer variable to point at the allocated storage.
@@ -21981,7 +21989,7 @@ procedure calls that do not return a value.
           strcpy(message, greet);
           make_malloced_string(message, strlen(message), & result);
 
-`erealloc(pointer, type, size, message)'
+`#define erealloc(pointer, type, size, message) ...'
      This is like `emalloc()', but it calls `realloc()', instead of
      `malloc()'.  The arguments are the same as for the `emalloc()'
      macro.
@@ -22027,6 +22035,7 @@ Extension functions are described by the following 
record:
      Function names must obey the rules for `awk' identifiers. That is,
      they must begin with either a letter or an underscore, which may
      be followed by any number of letters, digits, and underscores.
+     Letter case in function names is significant.
 
 `awk_value_t *(*function)(int num_actual_args, awk_value_t *result);'
      This is a pointer to the C function that provides the desired
@@ -22074,7 +22083,7 @@ function with `gawk' using the following function.
           A pointer to the function to be called before `gawk' exits.
           The `data' parameter will be the original value of `arg0'.
           The `exit_status' parameter is the exit status value that
-          `gawk' will pass to the `exit()' system call.
+          `gawk' intends to pass to the `exit()' system call.
 
     `arg0'
           A pointer to private data which `gawk' saves in order to pass
@@ -22108,8 +22117,9 @@ File: gawk.info,  Node: Input Parsers,  Next: Output 
Wrappers,  Prev: Extension
 
 By default, `gawk' reads text files as its input. It uses the value of
 `RS' to find the end of the record, and then uses `FS' (or
-`FIELDWIDTHS') to split it into fields (*note Reading Files::).
-Additionally, it sets the value of `RT' (*note Built-in Variables::).
+`FIELDWIDTHS' or `FPAT') to split it into fields (*note Reading
+Files::).  Additionally, it sets the value of `RT' (*note Built-in
+Variables::).
 
    If you want, you can provide your own custom input parser.  An input
 parser's job is to return a record to the `gawk' record processing
@@ -22142,7 +22152,7 @@ used for `RT', if any.
          const char *name;   /* name of parser */
          awk_bool_t (*can_take_file)(const awk_input_buf_t *iobuf);
          awk_bool_t (*take_control_of)(awk_input_buf_t *iobuf);
-         awk_const struct awk_input_parser *awk_const next;    /* for use by 
gawk */
+         awk_const struct awk_input_parser *awk_const next;   /* for gawk */
      } awk_input_parser_t;
 
    The fields are:
@@ -22208,10 +22218,10 @@ the `struct stat', or any combination of the above.
 
    Once `XXX_can_take_file()' has returned true, and `gawk' has decided
 to use your input parser, it calls `XXX_take_control_of()'.  That
-function then fills in at least the `get_record' field of the
-`awk_input_buf_t'.  It must also ensure that `fd' is not set to
-`INVALID_HANDLE'.  All of the fields that may be filled by
-`XXX_take_control_of()' are as follows:
+function then fills one of either the `get_record' field or the
+`read_func' field in the `awk_input_buf_t'.  It must also ensure that
+`fd' is _not_ set to `INVALID_HANDLE'.  All of the fields that may be
+filled by `XXX_take_control_of()' are as follows:
 
 `void *opaque;'
      This is used to hold any state information needed by the input
@@ -22282,8 +22292,8 @@ there is no need to set it unless an error occurs.
    If an error does occur, the function should return `EOF' and set
 `*errcode' to a non-zero value.  In that case, if `*errcode' does not
 equal -1, `gawk' automatically updates the `ERRNO' variable based on
-the value of `*errcode' (e.g., setting `*errcode = errno' should do the
-right thing).
+the value of `*errcode'.  (In general, setting `*errcode = errno'
+should do the right thing.)
 
    As an alternative to supplying a function that returns an input
 record, you may instead supply a function that simply reads bytes, and
@@ -22329,7 +22339,7 @@ File: gawk.info,  Node: Output Wrappers,  Next: Two-way 
processors,  Prev: Input
 
 An "output wrapper" is the mirror image of an input parser.  It allows
 an extension to take over the output to a file opened with the `>' or
-`>>' operators (*note Redirection::).
+`>>' I/O redirection operators (*note Redirection::).
 
    The output wrapper is very similar to the input parser structure:
 
@@ -22337,7 +22347,7 @@ an extension to take over the output to a file opened 
with the `>' or
          const char *name;   /* name of the wrapper */
          awk_bool_t (*can_take_file)(const awk_output_buf_t *outbuf);
          awk_bool_t (*take_control_of)(awk_output_buf_t *outbuf);
-         awk_const struct awk_output_wrapper *awk_const next;  /* for use by 
gawk */
+         awk_const struct awk_output_wrapper *awk_const next;  /* for gawk */
      } awk_output_wrapper_t;
 
    The members are as follows:
@@ -22360,7 +22370,8 @@ an extension to take over the output to a file opened 
with the `>' or
      false otherwise.
 
 `awk_const struct output_wrapper *awk_const next;'
-     This is for use by `gawk'.
+     This is for use by `gawk'; therefore they are marked `awk_const'
+     so that the extension cannot modify them.
 
    The `awk_output_buf_t' structure looks like this:
 
@@ -22446,7 +22457,7 @@ structures as described earlier.
          awk_bool_t (*take_control_of)(const char *name,
                                        awk_input_buf_t *inbuf,
                                        awk_output_buf_t *outbuf);
-         awk_const struct awk_two_way_processor *awk_const next;  /* for use 
by gawk */
+         awk_const struct awk_two_way_processor *awk_const next;  /* for gawk 
*/
      } awk_two_way_processor_t;
 
    The fields are as follows:
@@ -22467,7 +22478,8 @@ structures as described earlier.
      respectively.  These structures were described earlier.
 
 `awk_const struct two_way_processor *awk_const next;'
-     This is for use by `gawk'.
+     This is for use by `gawk'; therefore they are marked `awk_const'
+     so that the extension cannot modify them.
 
    As with the input parser and output processor, you provide "yes I
 can take this" and "take over for this" functions,
@@ -22604,13 +22616,17 @@ termed a "symbol table".
      an array.  This routine cannot be used to update any of the
      predefined variables (such as `ARGC' or `NF').
 
+   An extension can look up the value of `gawk''s special variables.
+However, with the exception of the `PROCINFO' array, an extension
+cannot change any of those variables.
+
 
 File: gawk.info,  Node: Symbol table by cookie,  Next: Cached values,  Prev: 
Symbol table by name,  Up: Symbol Table Access
 
 16.4.9.2 Variable Access and Update by Cookie
 .............................................
 
-A "scalar cookie" is an opaque handle that provide access to a global
+A "scalar cookie" is an opaque handle that provides access to a global
 variable or array. It is an optimization that avoids looking up
 variables in `gawk''s symbol table every time access is needed. This
 was discussed earlier, in *note General Data Types::.
@@ -22631,11 +22647,11 @@ was discussed earlier, in *note General Data Types::.
      too, the built-in variables may not be updated.
 
    It is not obvious at first glance how to work with scalar cookies or
-what their raison de^tre really is.  In theory, the `sym_lookup()' and
+what their raison d'e^tre really is.  In theory, the `sym_lookup()' and
 `sym_update()' routines are all you really need to work with variables.
-For example, you might have code that looked up the value of a
-variable, evaluated a condition, and then possibly changed the value of
-the variable based on the result of that evaluation, like so:
+For example, you might have code that looks up the value of a variable,
+evaluates a condition, and then possibly changes the value of the
+variable based on the result of that evaluation, like so:
 
      /*  do_magic --- do something really great */
 
@@ -22798,10 +22814,10 @@ changed too?"
 
    That's a great question. The answer is that no, it's not a problem.
 Internally, `gawk' uses reference-counted strings. This means that many
-variables can share the same string, and `gawk' keeps track of the
-usage.  When a variable's value changes, `gawk' simply decrements the
-reference count on the old value and updates the variable to use the
-new value.
+variables can share the same string value, and `gawk' keeps track of
+the usage.  When a variable's value changes, `gawk' simply decrements
+the reference count on the old value and updates the variable to use
+the new value.
 
    Finally, as part of your clean up action (*note Exit Callback
 Functions::) you should release any cached values that you created,
@@ -22992,7 +23008,7 @@ File: gawk.info,  Node: Flattening Arrays,  Next: 
Creating Arrays,  Prev: Array
 To "flatten" an array is create a structure that represents the full
 array in a fashion that makes it easy for C code to traverse the entire
 array.  Test code in `extension/testext.c' does this, and also serves
-as a nice example to show how to use the APIs.
+as a nice example showing how to use the APIs.
 
    First, the `gawk' script that drives the test extension:
 
@@ -23012,10 +23028,10 @@ as a nice example to show how to use the APIs.
 This code creates an array with `split()' (*note String Functions::)
 and then calls `dump_array_and_delete()'. That function looks up the
 array whose name is passed as the first argument, and deletes the
-element at the index passed in the second argument.  It then prints the
-return value and checks if the element was indeed deleted.  Here is the
-C code that implements `dump_array_and_delete()'. It has been edited
-slightly for presentation.
+element at the index passed in the second argument.  The `awk' code
+then prints the return value and checks if the element was indeed
+deleted.  Here is the C code that implements `dump_array_and_delete()'.
+It has been edited slightly for presentation.
 
    The first part declares variables, sets up the default return value
 in `result', and checks that the function was called with the correct
@@ -23104,7 +23120,7 @@ over every element in the array, printing the index and 
element values.
 In addition, upon finding the element with the index that is supposed
 to be deleted, the function sets the `AWK_ELEMENT_DELETE' bit in the
 `flags' field of the element.  When the array is released, `gawk'
-traverses the flattened array, and deletes any element which have this
+traverses the flattened array, and deletes any elements which have this
 flag bit set:
 
          for (i = 0; i < flat_array->count; i++) {
@@ -23189,17 +23205,15 @@ code:
      value passed in to `sym_update()' before doing anything else with
      it, like so:
 
-          awk_value_t index, value;
+          awk_value_t value;
           awk_array_t new_array;
 
-          make_const_string("an index", 8, & index);
-
           new_array = create_array();
           val.val_type = AWK_ARRAY;
           val.array_cookie = new_array;
 
           /* install array in the symbol table */
-          sym_update("array", & index, & val);
+          sym_update("array", & val);
 
           new_array = val.array_cookie;    /* YOU MUST DO THIS */
 
@@ -23401,7 +23415,7 @@ built-in variable (*note Built-in Variables::).  The 
others should not
 change during execution.
 
 
-File: gawk.info,  Node: Extension API Boilerplate,  Next: Finding Extensions,  
Prev: Extension API Variables,  Up: Extension API Description
+File: gawk.info,  Node: Extension API Boilerplate,  Prev: Extension API 
Variables,  Up: Extension API Description
 
 16.4.12 Boilerplate Code
 ------------------------
@@ -23502,10 +23516,10 @@ standard work. It does the following:
      `gawk'.
 
 
-File: gawk.info,  Node: Finding Extensions,  Prev: Extension API Boilerplate,  
Up: Extension API Description
+File: gawk.info,  Node: Finding Extensions,  Next: Extension Example,  Prev: 
Extension API Description,  Up: Dynamic Extensions
 
-16.4.13 How `gawk' Finds Extensions
------------------------------------
+16.5 How `gawk' Finds Extensions
+================================
 
 Compiled extensions have to be installed in a directory where `gawk'
 can find them.  If `gawk' is configured and built in the default
@@ -23515,9 +23529,9 @@ of directories to search for compiled extensions.  
*Note AWKLIBPATH
 Variable::, for more information.
 
 
-File: gawk.info,  Node: Extension Example,  Next: Extension Samples,  Prev: 
Extension API Description,  Up: Dynamic Extensions
+File: gawk.info,  Node: Extension Example,  Next: Extension Samples,  Prev: 
Finding Extensions,  Up: Dynamic Extensions
 
-16.5 Example: Some File Functions
+16.6 Example: Some File Functions
 =================================
 
      No matter where you go, there you are.
@@ -23537,7 +23551,7 @@ implements these functions for `gawk' in an extension.
 
 File: gawk.info,  Node: Internal File Description,  Next: Internal File Ops,  
Up: Extension Example
 
-16.5.1 Using `chdir()' and `stat()'
+16.6.1 Using `chdir()' and `stat()'
 -----------------------------------
 
 This minor node shows how to use the new functions at the `awk' level
@@ -23660,7 +23674,7 @@ Elements::):
 
 File: gawk.info,  Node: Internal File Ops,  Next: Using Internal File Ops,  
Prev: Internal File Description,  Up: Extension Example
 
-16.5.2 C Code for `chdir()' and `stat()'
+16.6.2 C Code for `chdir()' and `stat()'
 ----------------------------------------
 
 Here is the C code for these extensions.(1)
@@ -23914,13 +23928,15 @@ declarations and argument checking:
          awk_array_t array;
          int ret;
          struct stat sbuf;
-         int (*statfunc)(const char *path, struct stat *sbuf) = lstat;   /* 
default */
+         /* default is stat() */
+         int (*statfunc)(const char *path, struct stat *sbuf) = lstat;
 
          assert(result != NULL);
 
          if (nargs != 2 && nargs != 3) {
              if (do_lint)
-                 lintwarn(ext_id, _("stat: called with wrong number of 
arguments"));
+                 lintwarn(ext_id,
+                    _("stat: called with wrong number of arguments"));
              return make_number(-1, result);
          }
 
@@ -24008,7 +24024,7 @@ version.
 
 File: gawk.info,  Node: Using Internal File Ops,  Prev: Internal File Ops,  
Up: Extension Example
 
-16.5.3 Integrating The Extensions
+16.6.3 Integrating The Extensions
 ---------------------------------
 
 Now that the code is written, it must be possible to add it at runtime
@@ -24088,7 +24104,7 @@ this Info file. *Note gawkextlib::, for WWW links to 
the tools.
 
 File: gawk.info,  Node: Extension Samples,  Next: gawkextlib,  Prev: Extension 
Example,  Up: Dynamic Extensions
 
-16.6 The Sample Extensions In The `gawk' Distribution
+16.7 The Sample Extensions In The `gawk' Distribution
 =====================================================
 
 This minor node provides brief overviews of the sample extensions that
@@ -24118,7 +24134,7 @@ the extension API.
 
 File: gawk.info,  Node: Extension Sample File Functions,  Next: Extension 
Sample Fnmatch,  Up: Extension Samples
 
-16.6.1 File Related Functions
+16.7.1 File Related Functions
 -----------------------------
 
 The `filefuncs' extension provides three different functions, as
@@ -24176,7 +24192,7 @@ follows: The usage is:
                        the `struct stat'.  This element is
                        only present for device files.
      `statdata["blksize"]' Corresponds to the `st_blksize' field
-                       in the `struct stat'.  if this field is
+                       in the `struct stat', if this field is
                        present on your system.  (It is present
                        on all modern systems that we know of.)
      `statdata["pmode"]' A human-readable version of the mode
@@ -24196,8 +24212,8 @@ follows: The usage is:
 `result = fts(pathlist, flags, filedata)'
      Walk the file trees provided in `pathlist' and fill in the
      `filedata' array as described below.  `flags' is the bitwise OR of
-     several predefined constant values, also as described below.
-     Return zero if there were no errors, otherwise return -1.
+     several predefined constant values, also described below.  Return
+     zero if there were no errors, otherwise return -1.
 
    The `fts()' function provides a hook to the C library `fts()'
 routines for traversing file hierarchies.  Instead of returning data
@@ -24238,10 +24254,10 @@ requested hierarchies.
           whether or not `FTS_LOGICAL' is set.
 
     `FTS_SEEDOT'
-          By default, the `fts()' routines do not return entries for `.'
-          and `..'.  This option causes entries for `..' to also be
-          included.  (The extension always includes an entry for `.',
-          see below.)
+          By default, the `fts()' routines do not return entries for
+          `.' (dot) and `..' (dot-dot).  This option causes entries for
+          dot-dot to also be included.  (The extension always includes
+          an entry for dot, see below.)
 
     `FTS_XDEV'
           During a traversal, do not cross onto a different mounted
@@ -24253,7 +24269,7 @@ requested hierarchies.
      is the name of the directory or file given in `pathlist'.  The
      element for this index is itself an array.  There are two cases.
 
-    _The path is a file._
+    _The path is a file_
           In this case, the array contains two or three elements:
 
          `"path"'
@@ -24272,7 +24288,7 @@ requested hierarchies.
                also contain an element named `"error"', which is a
                string describing the error.
 
-    _The path is a directory._
+    _The path is a directory_
           In this case, the array contains one element for each entry
           in the directory.  If an entry is a file, that element is as
           for files, just described.  If the entry is a directory, that
@@ -24304,7 +24320,7 @@ Otherwise it returns -1.
 
 File: gawk.info,  Node: Extension Sample Fnmatch,  Next: Extension Sample 
Fork,  Prev: Extension Sample File Functions,  Up: Extension Samples
 
-16.6.2 Interface To `fnmatch()'
+16.7.2 Interface To `fnmatch()'
 -------------------------------
 
 This extension provides an interface to the C library `fnmatch()'
@@ -24323,7 +24339,7 @@ one constant (`FNM_NOMATCH'), and an array of flag 
values named `FNM'.
      The filename wildcard to match.
 
 `string'
-     The filename string,
+     The filename string.
 
 `flag'
      Either zero, or the bitwise OR of one or more of the flags in the
@@ -24359,7 +24375,7 @@ occurred.
 
 File: gawk.info,  Node: Extension Sample Fork,  Next: Extension Sample 
Inplace,  Prev: Extension Sample Fnmatch,  Up: Extension Samples
 
-16.6.3 Interface To `fork()', `wait()' and `waitpid()'
+16.7.3 Interface To `fork()', `wait()' and `waitpid()'
 ------------------------------------------------------
 
 The `fork' extension adds three functions, as follows.
@@ -24396,7 +24412,7 @@ The `fork' extension adds three functions, as follows.
 
 File: gawk.info,  Node: Extension Sample Inplace,  Next: Extension Sample Ord, 
 Prev: Extension Sample Fork,  Up: Extension Samples
 
-16.6.4 Enabling In-Place File Editing
+16.7.4 Enabling In-Place File Editing
 -------------------------------------
 
 The `inplace' extension emulates GNU `sed''s `-i' option which performs
@@ -24444,17 +24460,20 @@ interface similar to `sed -i'.
 
 File: gawk.info,  Node: Extension Sample Ord,  Next: Extension Sample Readdir, 
 Prev: Extension Sample Inplace,  Up: Extension Samples
 
-16.6.5 Character and Numeric values: `ord()' and `chr()'
+16.7.5 Character and Numeric values: `ord()' and `chr()'
 --------------------------------------------------------
 
 The `ordchr' extension adds two functions, named `ord()' and `chr()',
 as follows.
 
address@hidden "ordchr"'
+     This is how you load the extension.
+
 `number = ord(string)'
      Return the numeric value of the first character in `string'.
 
 `char = chr(number)'
-     Return the string whose first character is that represented by
+     Return a string whose first character is that represented by
      `number'.
 
    These functions are inspired by the Pascal language functions of the
@@ -24468,7 +24487,7 @@ same name.  Here is an example:
 
 File: gawk.info,  Node: Extension Sample Readdir,  Next: Extension Sample 
Revout,  Prev: Extension Sample Ord,  Up: Extension Samples
 
-16.6.6 Reading Directories
+16.7.6 Reading Directories
 --------------------------
 
 The `readdir' extension adds an input parser for directories.  The
@@ -24483,8 +24502,8 @@ returned as a record.
    The record consists of three fields. The first two are the inode
 number and the filename, separated by a forward slash character.  On
 systems where the directory entry contains the file type, the record
-has a third field which is a single letter indicating the type of the
-file:
+has a third field (also separated by a slash) which is a single letter
+indicating the type of the file:
 
 Letter  File Type
 -------------------------------------------------------------------------- 
@@ -24516,7 +24535,7 @@ always `u'.
 
 File: gawk.info,  Node: Extension Sample Revout,  Next: Extension Sample 
Rev2way,  Prev: Extension Sample Readdir,  Up: Extension Samples
 
-16.6.7 Reversing Output
+16.7.7 Reversing Output
 -----------------------
 
 The `revoutput' extension adds a simple output wrapper that reverses
@@ -24536,7 +24555,7 @@ unwary.  Here is an example:
 
 File: gawk.info,  Node: Extension Sample Rev2way,  Next: Extension Sample Read 
write array,  Prev: Extension Sample Revout,  Up: Extension Samples
 
-16.6.8 Two-Way I/O Example
+16.7.8 Two-Way I/O Example
 --------------------------
 
 The `revtwoway' extension adds a simple two-way processor that reverses
@@ -24558,7 +24577,7 @@ example shows how to use it:
 
 File: gawk.info,  Node: Extension Sample Read write array,  Next: Extension 
Sample Readfile,  Prev: Extension Sample Rev2way,  Up: Extension Samples
 
-16.6.9 Dumping and Restoring An Array
+16.7.9 Dumping and Restoring An Array
 -------------------------------------
 
 The `rwarray' extension adds two functions, named `writea()' and
@@ -24580,10 +24599,10 @@ The `rwarray' extension adds two functions, named 
`writea()' and
 `writea()' in the sense that the contents are the same. However, due to
 implementation issues, the array traversal order of the recreated array
 is likely to be different from that of the original array.  As array
-traversal order in `awk' is by default undefined, this is not
-(technically) a problem.  If you need to guarantee a particular
-traversal order, use the array sorting features in `gawk' to do so
-(*note Array Sorting::).
+traversal order in `awk' is by default undefined, this is (technically)
+not a problem.  If you need to guarantee a particular traversal order,
+use the array sorting features in `gawk' to do so (*note Array
+Sorting::).
 
    The file contains binary data.  All integral values are written in
 network byte order.  However, double precision floating-point values
@@ -24602,11 +24621,14 @@ restored on systems with a different one, but this 
has not been tried.
 
 File: gawk.info,  Node: Extension Sample Readfile,  Next: Extension Sample API 
Tests,  Prev: Extension Sample Read write array,  Up: Extension Samples
 
-16.6.10 Reading An Entire File
+16.7.10 Reading An Entire File
 ------------------------------
 
 The `readfile' extension adds a single function named `readfile()':
 
address@hidden "readfile"'
+     This is how you load the extension.
+
 `result = readfile("/some/path")'
      The argument is the name of the file to read.  The return value is
      a string containing the entire contents of the requested file.
@@ -24625,7 +24647,7 @@ The `readfile' extension adds a single function named 
`readfile()':
 
 File: gawk.info,  Node: Extension Sample API Tests,  Next: Extension Sample 
Time,  Prev: Extension Sample Readfile,  Up: Extension Samples
 
-16.6.11 API Tests
+16.7.11 API Tests
 -----------------
 
 The `testext' extension exercises parts of the extension API that are
@@ -24637,13 +24659,16 @@ code and runs the tests.  See the source file for 
more information.
 
 File: gawk.info,  Node: Extension Sample Time,  Prev: Extension Sample API 
Tests,  Up: Extension Samples
 
-16.6.12 Extension Time Functions
+16.7.12 Extension Time Functions
 --------------------------------
 
-These functions can be used by either invoking `gawk' with a
+These functions can be used either by invoking `gawk' with a
 command-line argument of `-l time' or by inserting address@hidden "time"' in
 your script.
 
address@hidden "time"'
+     This is how you load the extension.
+
 `the_time = gettimeofday()'
      Return the time in seconds that has elapsed since 1970-01-01 UTC
      as a floating point value.  If the time is unavailable on this
@@ -24666,7 +24691,7 @@ your script.
 
 File: gawk.info,  Node: gawkextlib,  Prev: Extension Samples,  Up: Dynamic 
Extensions
 
-16.7 The `gawkextlib' Project
+16.8 The `gawkextlib' Project
 =============================
 
 The `gawkextlib' (http://sourceforge.net/projects/gawkextlib/) project
@@ -24722,7 +24747,8 @@ follows.  First, build and install `gawk':
      make && make check                    Build and check that all is OK
 
    If you write an extension that you wish to share with other `gawk'
-users, please consider doing so through the `gawkextlib' project.
+users, please consider doing so through the `gawkextlib' project.  See
+the project's web site for more information.
 
 
 File: gawk.info,  Node: Language History,  Next: Installation,  Prev: Dynamic 
Extensions,  Up: Top
@@ -30704,7 +30730,7 @@ Index
 * gettext library, locale categories:    Explaining gettext.  (line  80)
 * gettext() function (C library):        Explaining gettext.  (line  62)
 * gettimeofday time extension function:  Extension Sample Time.
-                                                              (line  10)
+                                                              (line  13)
 * GMP:                                   Arbitrary Precision Arithmetic.
                                                               (line   6)
 * GNITS mailing list:                    Acknowledgments.     (line  52)
@@ -31645,7 +31671,7 @@ Index
 * sleep:                                 Extension Sample Time.
                                                               (line   6)
 * sleep time extension function:         Extension Sample Time.
-                                                              (line  20)
+                                                              (line  23)
 * sleep utility:                         Alarm Program.       (line 109)
 * Solaris, POSIX-compliant awk:          Other Versions.      (line  96)
 * sort function, arrays, sorting:        Array Sorting Functions.
@@ -32173,335 +32199,336 @@ Node: Nextfile Statement397913
 Node: Exit Statement400556
 Node: Built-in Variables402972
 Node: User-modified404067
-Ref: User-modified-Footnote-1412422
-Node: Auto-set412484
-Ref: Auto-set-Footnote-1425415
-Ref: Auto-set-Footnote-2425620
-Node: ARGC and ARGV425676
-Node: Arrays429527
-Node: Array Basics431032
-Node: Array Intro431858
-Node: Reference to Elements436176
-Node: Assigning Elements438446
-Node: Array Example438937
-Node: Scanning an Array440669
-Node: Controlling Scanning442983
-Ref: Controlling Scanning-Footnote-1447906
-Node: Delete448222
-Ref: Delete-Footnote-1450987
-Node: Numeric Array Subscripts451044
-Node: Uninitialized Subscripts453227
-Node: Multi-dimensional454855
-Node: Multi-scanning457949
-Node: Arrays of Arrays459540
-Node: Functions464181
-Node: Built-in465000
-Node: Calling Built-in466078
-Node: Numeric Functions468066
-Ref: Numeric Functions-Footnote-1471898
-Ref: Numeric Functions-Footnote-2472255
-Ref: Numeric Functions-Footnote-3472303
-Node: String Functions472572
-Ref: String Functions-Footnote-1496069
-Ref: String Functions-Footnote-2496198
-Ref: String Functions-Footnote-3496446
-Node: Gory Details496533
-Ref: table-sub-escapes498212
-Ref: table-sub-posix-92499566
-Ref: table-sub-proposed500917
-Ref: table-posix-sub502271
-Ref: table-gensub-escapes503816
-Ref: Gory Details-Footnote-1504992
-Ref: Gory Details-Footnote-2505043
-Node: I/O Functions505194
-Ref: I/O Functions-Footnote-1512179
-Node: Time Functions512326
-Ref: Time Functions-Footnote-1523259
-Ref: Time Functions-Footnote-2523327
-Ref: Time Functions-Footnote-3523485
-Ref: Time Functions-Footnote-4523596
-Ref: Time Functions-Footnote-5523708
-Ref: Time Functions-Footnote-6523935
-Node: Bitwise Functions524201
-Ref: table-bitwise-ops524759
-Ref: Bitwise Functions-Footnote-1528980
-Node: Type Functions529164
-Node: I18N Functions529634
-Node: User-defined531261
-Node: Definition Syntax532065
-Ref: Definition Syntax-Footnote-1536975
-Node: Function Example537044
-Node: Function Caveats539638
-Node: Calling A Function540059
-Node: Variable Scope541174
-Node: Pass By Value/Reference544137
-Node: Return Statement547645
-Node: Dynamic Typing550626
-Node: Indirect Calls551557
-Node: Library Functions561242
-Ref: Library Functions-Footnote-1564755
-Ref: Library Functions-Footnote-2564898
-Node: Library Names565069
-Ref: Library Names-Footnote-1568540
-Ref: Library Names-Footnote-2568760
-Node: General Functions568846
-Node: Strtonum Function569799
-Node: Assert Function572729
-Node: Round Function576055
-Node: Cliff Random Function577598
-Node: Ordinal Functions578614
-Ref: Ordinal Functions-Footnote-1581684
-Ref: Ordinal Functions-Footnote-2581936
-Node: Join Function582145
-Ref: Join Function-Footnote-1583916
-Node: Getlocaltime Function584116
-Node: Data File Management587831
-Node: Filetrans Function588463
-Node: Rewind Function592532
-Node: File Checking593919
-Node: Empty Files595013
-Node: Ignoring Assigns597243
-Node: Getopt Function598796
-Ref: Getopt Function-Footnote-1610100
-Node: Passwd Functions610303
-Ref: Passwd Functions-Footnote-1619278
-Node: Group Functions619366
-Node: Walking Arrays627450
-Node: Sample Programs629587
-Node: Running Examples630261
-Node: Clones630989
-Node: Cut Program632213
-Node: Egrep Program642058
-Ref: Egrep Program-Footnote-1649831
-Node: Id Program649941
-Node: Split Program653557
-Ref: Split Program-Footnote-1657076
-Node: Tee Program657204
-Node: Uniq Program660007
-Node: Wc Program667436
-Ref: Wc Program-Footnote-1671702
-Ref: Wc Program-Footnote-2671902
-Node: Miscellaneous Programs671994
-Node: Dupword Program673182
-Node: Alarm Program675213
-Node: Translate Program679962
-Ref: Translate Program-Footnote-1684349
-Ref: Translate Program-Footnote-2684577
-Node: Labels Program684711
-Ref: Labels Program-Footnote-1688082
-Node: Word Sorting688166
-Node: History Sorting692050
-Node: Extract Program693889
-Ref: Extract Program-Footnote-1701390
-Node: Simple Sed701518
-Node: Igawk Program704580
-Ref: Igawk Program-Footnote-1719737
-Ref: Igawk Program-Footnote-2719938
-Node: Anagram Program720076
-Node: Signature Program723144
-Node: Advanced Features724244
-Node: Nondecimal Data726126
-Node: Array Sorting727709
-Node: Controlling Array Traversal728406
-Node: Array Sorting Functions736644
-Ref: Array Sorting Functions-Footnote-1740318
-Ref: Array Sorting Functions-Footnote-2740411
-Node: Two-way I/O740605
-Ref: Two-way I/O-Footnote-1746037
-Node: TCP/IP Networking746107
-Node: Profiling748951
-Node: Internationalization756406
-Node: I18N and L10N757831
-Node: Explaining gettext758517
-Ref: Explaining gettext-Footnote-1763583
-Ref: Explaining gettext-Footnote-2763767
-Node: Programmer i18n763932
-Node: Translator i18n768132
-Node: String Extraction768925
-Ref: String Extraction-Footnote-1769886
-Node: Printf Ordering769972
-Ref: Printf Ordering-Footnote-1772756
-Node: I18N Portability772820
-Ref: I18N Portability-Footnote-1775269
-Node: I18N Example775332
-Ref: I18N Example-Footnote-1777967
-Node: Gawk I18N778039
-Node: Debugger778660
-Node: Debugging779631
-Node: Debugging Concepts780064
-Node: Debugging Terms781920
-Node: Awk Debugging784517
-Node: Sample Debugging Session785409
-Node: Debugger Invocation785929
-Node: Finding The Bug787261
-Node: List of Debugger Commands793749
-Node: Breakpoint Control795083
-Node: Debugger Execution Control798747
-Node: Viewing And Changing Data802107
-Node: Execution Stack805463
-Node: Debugger Info806930
-Node: Miscellaneous Debugger Commands810912
-Node: Readline Support816088
-Node: Limitations816919
-Node: Arbitrary Precision Arithmetic819171
-Ref: Arbitrary Precision Arithmetic-Footnote-1820822
-Node: General Arithmetic820970
-Node: Floating Point Issues822690
-Node: String Conversion Precision823571
-Ref: String Conversion Precision-Footnote-1825277
-Node: Unexpected Results825386
-Node: POSIX Floating Point Problems827539
-Ref: POSIX Floating Point Problems-Footnote-1831364
-Node: Integer Programming831402
-Node: Floating-point Programming833155
-Ref: Floating-point Programming-Footnote-1839464
-Node: Floating-point Representation839728
-Node: Floating-point Context840893
-Ref: table-ieee-formats841735
-Node: Rounding Mode843119
-Ref: table-rounding-modes843598
-Ref: Rounding Mode-Footnote-1846602
-Node: Gawk and MPFR846783
-Node: Arbitrary Precision Floats848025
-Ref: Arbitrary Precision Floats-Footnote-1850454
-Node: Setting Precision850765
-Node: Setting Rounding Mode853498
-Ref: table-gawk-rounding-modes853902
-Node: Floating-point Constants855082
-Node: Changing Precision856506
-Ref: Changing Precision-Footnote-1857906
-Node: Exact Arithmetic858080
-Node: Arbitrary Precision Integers861188
-Ref: Arbitrary Precision Integers-Footnote-1864188
-Node: Dynamic Extensions864335
-Node: Extension Intro865712
-Node: Plugin License866920
-Node: Extension Mechanism Outline867605
-Ref: load-extension868022
-Ref: load-new-function869500
-Ref: call-new-function870495
-Node: Extension API Description872503
-Node: Extension API Functions Introduction873835
-Node: General Data Types878613
-Ref: General Data Types-Footnote-1884215
-Node: Requesting Values884514
-Ref: table-value-types-returned885245
-Node: Constructor Functions886199
-Node: Registration Functions889195
-Node: Extension Functions889880
-Node: Exit Callback Functions892054
-Node: Extension Version String893297
-Node: Input Parsers893947
-Node: Output Wrappers903664
-Node: Two-way processors908080
-Node: Printing Messages910210
-Ref: Printing Messages-Footnote-1911287
-Node: Updating `ERRNO'911439
-Node: Accessing Parameters912178
-Node: Symbol Table Access913408
-Node: Symbol table by name913920
-Node: Symbol table by cookie915493
-Ref: Symbol table by cookie-Footnote-1919622
-Node: Cached values919685
-Ref: Cached values-Footnote-1923128
-Node: Array Manipulation923219
-Ref: Array Manipulation-Footnote-1924317
-Node: Array Data Types924356
-Ref: Array Data Types-Footnote-1927059
-Node: Array Functions927151
-Node: Flattening Arrays930917
-Node: Creating Arrays937756
-Node: Extension API Variables942551
-Node: Extension Versioning943187
-Node: Extension API Informational Variables945088
-Node: Extension API Boilerplate946174
-Node: Finding Extensions950005
-Node: Extension Example950552
-Node: Internal File Description951290
-Node: Internal File Ops954978
-Ref: Internal File Ops-Footnote-1966425
-Node: Using Internal File Ops966565
-Ref: Using Internal File Ops-Footnote-1968918
-Node: Extension Samples969184
-Node: Extension Sample File Functions970708
-Node: Extension Sample Fnmatch979181
-Node: Extension Sample Fork980907
-Node: Extension Sample Inplace982125
-Node: Extension Sample Ord983903
-Node: Extension Sample Readdir984682
-Node: Extension Sample Revout986186
-Node: Extension Sample Rev2way986779
-Node: Extension Sample Read write array987469
-Node: Extension Sample Readfile989352
-Node: Extension Sample API Tests990109
-Node: Extension Sample Time990634
-Node: gawkextlib991941
-Node: Language History994322
-Node: V7/SVR3.1995844
-Node: SVR4998165
-Node: POSIX999607
-Node: BTL1000993
-Node: POSIX/GNU1001727
-Node: Common Extensions1007262
-Node: Ranges and Locales1008417
-Ref: Ranges and Locales-Footnote-11013035
-Ref: Ranges and Locales-Footnote-21013062
-Ref: Ranges and Locales-Footnote-31013322
-Node: Contributors1013543
-Node: Installation1018347
-Node: Gawk Distribution1019241
-Node: Getting1019725
-Node: Extracting1020551
-Node: Distribution contents1022243
-Node: Unix Installation1027504
-Node: Quick Installation1028121
-Node: Additional Configuration Options1030083
-Node: Configuration Philosophy1031560
-Node: Non-Unix Installation1033902
-Node: PC Installation1034360
-Node: PC Binary Installation1035659
-Node: PC Compiling1037507
-Node: PC Testing1040451
-Node: PC Using1041627
-Node: Cygwin1045812
-Node: MSYS1046812
-Node: VMS Installation1047326
-Node: VMS Compilation1047929
-Ref: VMS Compilation-Footnote-11048936
-Node: VMS Installation Details1048994
-Node: VMS Running1050629
-Node: VMS Old Gawk1052236
-Node: Bugs1052710
-Node: Other Versions1056562
-Node: Notes1062163
-Node: Compatibility Mode1062963
-Node: Additions1063746
-Node: Accessing The Source1064673
-Node: Adding Code1066113
-Node: New Ports1072158
-Node: Derived Files1076293
-Ref: Derived Files-Footnote-11081614
-Ref: Derived Files-Footnote-21081648
-Ref: Derived Files-Footnote-31082248
-Node: Future Extensions1082346
-Node: Implementation Limitations1082927
-Node: Extension Design1084179
-Node: Old Extension Problems1085328
-Ref: Old Extension Problems-Footnote-11086836
-Node: Extension New Mechanism Goals1086893
-Ref: Extension New Mechanism Goals-Footnote-11090252
-Node: Extension Other Design Decisions1090438
-Node: Extension Future Growth1092544
-Node: Old Extension Mechanism1093365
-Node: Basic Concepts1095105
-Node: Basic High Level1095786
-Ref: figure-general-flow1096057
-Ref: figure-process-flow1096656
-Ref: Basic High Level-Footnote-11099885
-Node: Basic Data Typing1100070
-Node: Glossary1103425
-Node: Copying1128896
-Node: GNU Free Documentation License1166453
-Node: Index1191590
+Ref: User-modified-Footnote-1412427
+Node: Auto-set412489
+Ref: Auto-set-Footnote-1425420
+Ref: Auto-set-Footnote-2425625
+Node: ARGC and ARGV425681
+Node: Arrays429532
+Node: Array Basics431037
+Node: Array Intro431863
+Node: Reference to Elements436181
+Node: Assigning Elements438451
+Node: Array Example438942
+Node: Scanning an Array440674
+Node: Controlling Scanning442988
+Ref: Controlling Scanning-Footnote-1447911
+Node: Delete448227
+Ref: Delete-Footnote-1450992
+Node: Numeric Array Subscripts451049
+Node: Uninitialized Subscripts453232
+Node: Multi-dimensional454860
+Node: Multi-scanning457954
+Node: Arrays of Arrays459545
+Node: Functions464186
+Node: Built-in465005
+Node: Calling Built-in466083
+Node: Numeric Functions468071
+Ref: Numeric Functions-Footnote-1471903
+Ref: Numeric Functions-Footnote-2472260
+Ref: Numeric Functions-Footnote-3472308
+Node: String Functions472577
+Ref: String Functions-Footnote-1496074
+Ref: String Functions-Footnote-2496203
+Ref: String Functions-Footnote-3496451
+Node: Gory Details496538
+Ref: table-sub-escapes498217
+Ref: table-sub-posix-92499571
+Ref: table-sub-proposed500922
+Ref: table-posix-sub502276
+Ref: table-gensub-escapes503821
+Ref: Gory Details-Footnote-1504997
+Ref: Gory Details-Footnote-2505048
+Node: I/O Functions505199
+Ref: I/O Functions-Footnote-1512184
+Node: Time Functions512331
+Ref: Time Functions-Footnote-1523264
+Ref: Time Functions-Footnote-2523332
+Ref: Time Functions-Footnote-3523490
+Ref: Time Functions-Footnote-4523601
+Ref: Time Functions-Footnote-5523713
+Ref: Time Functions-Footnote-6523940
+Node: Bitwise Functions524206
+Ref: table-bitwise-ops524764
+Ref: Bitwise Functions-Footnote-1528985
+Node: Type Functions529169
+Node: I18N Functions529639
+Node: User-defined531266
+Node: Definition Syntax532070
+Ref: Definition Syntax-Footnote-1536980
+Node: Function Example537049
+Node: Function Caveats539643
+Node: Calling A Function540064
+Node: Variable Scope541179
+Node: Pass By Value/Reference544142
+Node: Return Statement547650
+Node: Dynamic Typing550631
+Node: Indirect Calls551562
+Node: Library Functions561247
+Ref: Library Functions-Footnote-1564760
+Ref: Library Functions-Footnote-2564903
+Node: Library Names565074
+Ref: Library Names-Footnote-1568545
+Ref: Library Names-Footnote-2568765
+Node: General Functions568851
+Node: Strtonum Function569804
+Node: Assert Function572734
+Node: Round Function576060
+Node: Cliff Random Function577603
+Node: Ordinal Functions578619
+Ref: Ordinal Functions-Footnote-1581689
+Ref: Ordinal Functions-Footnote-2581941
+Node: Join Function582150
+Ref: Join Function-Footnote-1583921
+Node: Getlocaltime Function584121
+Node: Data File Management587836
+Node: Filetrans Function588468
+Node: Rewind Function592537
+Node: File Checking593924
+Node: Empty Files595018
+Node: Ignoring Assigns597248
+Node: Getopt Function598801
+Ref: Getopt Function-Footnote-1610105
+Node: Passwd Functions610308
+Ref: Passwd Functions-Footnote-1619283
+Node: Group Functions619371
+Node: Walking Arrays627455
+Node: Sample Programs629592
+Node: Running Examples630266
+Node: Clones630994
+Node: Cut Program632218
+Node: Egrep Program642063
+Ref: Egrep Program-Footnote-1649836
+Node: Id Program649946
+Node: Split Program653562
+Ref: Split Program-Footnote-1657081
+Node: Tee Program657209
+Node: Uniq Program660012
+Node: Wc Program667441
+Ref: Wc Program-Footnote-1671707
+Ref: Wc Program-Footnote-2671907
+Node: Miscellaneous Programs671999
+Node: Dupword Program673187
+Node: Alarm Program675218
+Node: Translate Program679967
+Ref: Translate Program-Footnote-1684354
+Ref: Translate Program-Footnote-2684582
+Node: Labels Program684716
+Ref: Labels Program-Footnote-1688087
+Node: Word Sorting688171
+Node: History Sorting692055
+Node: Extract Program693894
+Ref: Extract Program-Footnote-1701395
+Node: Simple Sed701523
+Node: Igawk Program704585
+Ref: Igawk Program-Footnote-1719742
+Ref: Igawk Program-Footnote-2719943
+Node: Anagram Program720081
+Node: Signature Program723149
+Node: Advanced Features724249
+Node: Nondecimal Data726131
+Node: Array Sorting727714
+Node: Controlling Array Traversal728411
+Node: Array Sorting Functions736649
+Ref: Array Sorting Functions-Footnote-1740323
+Ref: Array Sorting Functions-Footnote-2740416
+Node: Two-way I/O740610
+Ref: Two-way I/O-Footnote-1746042
+Node: TCP/IP Networking746112
+Node: Profiling748956
+Node: Internationalization756411
+Node: I18N and L10N757836
+Node: Explaining gettext758522
+Ref: Explaining gettext-Footnote-1763588
+Ref: Explaining gettext-Footnote-2763772
+Node: Programmer i18n763937
+Node: Translator i18n768137
+Node: String Extraction768930
+Ref: String Extraction-Footnote-1769891
+Node: Printf Ordering769977
+Ref: Printf Ordering-Footnote-1772761
+Node: I18N Portability772825
+Ref: I18N Portability-Footnote-1775274
+Node: I18N Example775337
+Ref: I18N Example-Footnote-1777972
+Node: Gawk I18N778044
+Node: Debugger778665
+Node: Debugging779636
+Node: Debugging Concepts780069
+Node: Debugging Terms781925
+Node: Awk Debugging784522
+Node: Sample Debugging Session785414
+Node: Debugger Invocation785934
+Node: Finding The Bug787266
+Node: List of Debugger Commands793754
+Node: Breakpoint Control795088
+Node: Debugger Execution Control798752
+Node: Viewing And Changing Data802112
+Node: Execution Stack805468
+Node: Debugger Info806935
+Node: Miscellaneous Debugger Commands810917
+Node: Readline Support816093
+Node: Limitations816924
+Node: Arbitrary Precision Arithmetic819176
+Ref: Arbitrary Precision Arithmetic-Footnote-1820827
+Node: General Arithmetic820975
+Node: Floating Point Issues822695
+Node: String Conversion Precision823576
+Ref: String Conversion Precision-Footnote-1825282
+Node: Unexpected Results825391
+Node: POSIX Floating Point Problems827544
+Ref: POSIX Floating Point Problems-Footnote-1831369
+Node: Integer Programming831407
+Node: Floating-point Programming833146
+Ref: Floating-point Programming-Footnote-1839474
+Node: Floating-point Representation839738
+Node: Floating-point Context840903
+Ref: table-ieee-formats841742
+Node: Rounding Mode843126
+Ref: table-rounding-modes843605
+Ref: Rounding Mode-Footnote-1846620
+Node: Gawk and MPFR846799
+Node: Arbitrary Precision Floats848054
+Ref: Arbitrary Precision Floats-Footnote-1850497
+Node: Setting Precision850813
+Ref: table-predefined-precision-strings851499
+Node: Setting Rounding Mode853644
+Ref: table-gawk-rounding-modes854048
+Node: Floating-point Constants855235
+Node: Changing Precision856664
+Ref: Changing Precision-Footnote-1858064
+Node: Exact Arithmetic858238
+Node: Arbitrary Precision Integers861376
+Ref: Arbitrary Precision Integers-Footnote-1864394
+Node: Dynamic Extensions864541
+Node: Extension Intro865999
+Node: Plugin License867264
+Node: Extension Mechanism Outline867949
+Ref: load-extension868366
+Ref: load-new-function869844
+Ref: call-new-function870839
+Node: Extension API Description872854
+Node: Extension API Functions Introduction874067
+Node: General Data Types878933
+Ref: General Data Types-Footnote-1884535
+Node: Requesting Values884834
+Ref: table-value-types-returned885565
+Node: Constructor Functions886519
+Node: Registration Functions889539
+Node: Extension Functions890224
+Node: Exit Callback Functions892449
+Node: Extension Version String893698
+Node: Input Parsers894348
+Node: Output Wrappers904105
+Node: Two-way processors908615
+Node: Printing Messages910823
+Ref: Printing Messages-Footnote-1911900
+Node: Updating `ERRNO'912052
+Node: Accessing Parameters912791
+Node: Symbol Table Access914021
+Node: Symbol table by name914533
+Node: Symbol table by cookie916280
+Ref: Symbol table by cookie-Footnote-1920410
+Node: Cached values920473
+Ref: Cached values-Footnote-1923922
+Node: Array Manipulation924013
+Ref: Array Manipulation-Footnote-1925111
+Node: Array Data Types925150
+Ref: Array Data Types-Footnote-1927853
+Node: Array Functions927945
+Node: Flattening Arrays931711
+Node: Creating Arrays938563
+Node: Extension API Variables943288
+Node: Extension Versioning943924
+Node: Extension API Informational Variables945825
+Node: Extension API Boilerplate946911
+Node: Finding Extensions950715
+Node: Extension Example951275
+Node: Internal File Description952006
+Node: Internal File Ops955694
+Ref: Internal File Ops-Footnote-1967178
+Node: Using Internal File Ops967318
+Ref: Using Internal File Ops-Footnote-1969671
+Node: Extension Samples969937
+Node: Extension Sample File Functions971461
+Node: Extension Sample Fnmatch979948
+Node: Extension Sample Fork981674
+Node: Extension Sample Inplace982892
+Node: Extension Sample Ord984670
+Node: Extension Sample Readdir985506
+Node: Extension Sample Revout987038
+Node: Extension Sample Rev2way987631
+Node: Extension Sample Read write array988321
+Node: Extension Sample Readfile990204
+Node: Extension Sample API Tests991022
+Node: Extension Sample Time991547
+Node: gawkextlib992911
+Node: Language History995342
+Node: V7/SVR3.1996864
+Node: SVR4999185
+Node: POSIX1000627
+Node: BTL1002013
+Node: POSIX/GNU1002747
+Node: Common Extensions1008282
+Node: Ranges and Locales1009437
+Ref: Ranges and Locales-Footnote-11014055
+Ref: Ranges and Locales-Footnote-21014082
+Ref: Ranges and Locales-Footnote-31014342
+Node: Contributors1014563
+Node: Installation1019367
+Node: Gawk Distribution1020261
+Node: Getting1020745
+Node: Extracting1021571
+Node: Distribution contents1023263
+Node: Unix Installation1028524
+Node: Quick Installation1029141
+Node: Additional Configuration Options1031103
+Node: Configuration Philosophy1032580
+Node: Non-Unix Installation1034922
+Node: PC Installation1035380
+Node: PC Binary Installation1036679
+Node: PC Compiling1038527
+Node: PC Testing1041471
+Node: PC Using1042647
+Node: Cygwin1046832
+Node: MSYS1047832
+Node: VMS Installation1048346
+Node: VMS Compilation1048949
+Ref: VMS Compilation-Footnote-11049956
+Node: VMS Installation Details1050014
+Node: VMS Running1051649
+Node: VMS Old Gawk1053256
+Node: Bugs1053730
+Node: Other Versions1057582
+Node: Notes1063183
+Node: Compatibility Mode1063983
+Node: Additions1064766
+Node: Accessing The Source1065693
+Node: Adding Code1067133
+Node: New Ports1073178
+Node: Derived Files1077313
+Ref: Derived Files-Footnote-11082634
+Ref: Derived Files-Footnote-21082668
+Ref: Derived Files-Footnote-31083268
+Node: Future Extensions1083366
+Node: Implementation Limitations1083947
+Node: Extension Design1085199
+Node: Old Extension Problems1086348
+Ref: Old Extension Problems-Footnote-11087856
+Node: Extension New Mechanism Goals1087913
+Ref: Extension New Mechanism Goals-Footnote-11091272
+Node: Extension Other Design Decisions1091458
+Node: Extension Future Growth1093564
+Node: Old Extension Mechanism1094385
+Node: Basic Concepts1096125
+Node: Basic High Level1096806
+Ref: figure-general-flow1097077
+Ref: figure-process-flow1097676
+Ref: Basic High Level-Footnote-11100905
+Node: Basic Data Typing1101090
+Node: Glossary1104445
+Node: Copying1129916
+Node: GNU Free Documentation License1167473
+Node: Index1192610
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index eeb94b4..2a024bd 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -13510,7 +13510,7 @@ character.  (@xref{Output Separators}.)
 @cindex @code{PREC} variable
 @item PREC #
 The working precision of arbitrary precision floating-point numbers,
-53 by default (@pxref{Setting Precision}).
+53 bits by default (@pxref{Setting Precision}).
 
 @cindex @code{ROUNDMODE} variable
 @item ROUNDMODE #
@@ -28087,7 +28087,7 @@ which plays a role in how variables are used in 
comparisons.
 It is important to note that the string value for a number may not
 reflect the full value (all the digits) that the numeric value
 actually contains.
-The following program (@file{values.awk}) illustrates this:
+The following program, @file{values.awk}, illustrates this:
 
 @example
 @{
@@ -28297,7 +28297,7 @@ Thus @samp{+nan} and @samp{+NaN} are the same.
 @node Integer Programming
 @subsection Mixing Integers And Floating-point
 
-As has been mentioned already, @command{gawk} ordinarily uses hardware double
+As has been mentioned already, @command{awk} uses hardware double
 precision with 64-bit IEEE binary floating-point representation
 for numbers on most systems. A large integer like 9,007,199,254,740,997
 has a binary representation that, although finite, is more than 53 bits long;
@@ -28340,7 +28340,7 @@ is
 @ifnottex
 address@hidden, 2^53].
 @end ifnottex
-If you ever see an integer outside this range in @command{gawk}
+If you ever see an integer outside this range in @command{awk}
 using 64-bit doubles, you have reason to be very suspicious about
 the accuracy of the output. Here is a simple program with erroneous output:
 
@@ -28352,7 +28352,7 @@ $ @kbd{gawk 'BEGIN @{ i = 2^53 - 1; for (j = 0; j < 4; 
j++) print i + j @}'}
 @print{} 9007199254740994
 @end example
 
-The lesson is to not assume that any large integer printed by @command{gawk}
+The lesson is to not assume that any large integer printed by @command{awk}
 represents an exact result from your computation, especially if it wraps
 around on your screen.
 
@@ -28475,7 +28475,7 @@ yield an unexpected result:
 
 @example
 $ @kbd{gawk 'BEGIN @{}
->   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)}
+>   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)    # loop five times (?)}
 >       @kbd{i++}
 >   @kbd{print i}
 > @address@hidden'}
@@ -28490,7 +28490,7 @@ Instead of arbitrary precision floating-point 
arithmetic,
 often all you need is an adjustment of your logic
 or a different order for the operations in your calculation.
 The stability and the accuracy of the computation of the constant @value{PI}
-in the previous example can be enhanced by using the following
+in the earlier example can be enhanced by using the following
 simple algebraic transformation:
 
 @example
@@ -28502,7 +28502,7 @@ After making this, change the program does converge to
 @value{PI} in under 30 iterations:
 
 @example
-$ @kbd{gawk -f /tmp/pi2.awk}
+$ @kbd{gawk -f pi2.awk}
 @print{} 3.215390309173473
 @print{} 3.159659942097501
 @print{} 3.146086215131436
@@ -28582,14 +28582,18 @@ The context has the following primary components:
 @table @dfn
 @item Precision
 Precision of the floating-point format in bits.
+
 @item emax
-Maximum exponent allowed for this format.
+Maximum exponent allowed for the format.
+
 @item emin
-Minimum exponent allowed for this format.
+Minimum exponent allowed for the format.
+
 @item Underflow behavior
 The format may or may not support gradual underflow.
+
 @item Rounding
-The rounding mode of this context.
+The rounding mode of the context.
 @end table
 
 @ref{table-ieee-formats} lists the precision and exponent
@@ -28664,7 +28668,7 @@ In this case, the number is rounded to the nearest even 
digit.
 So rounding 0.125 to two digits rounds down to 0.12,
 but rounding 0.6875 to three digits rounds up to 0.688.
 You probably have already encountered this rounding mode when
-using the @code{printf} routine to format floating-point numbers.
+using @code{printf} to format floating-point numbers.
 For example:
 
 @example
@@ -28678,10 +28682,10 @@ BEGIN @{
 @end example
 
 @noindent
-produces the following output when run:@footnote{It
+produces the following output when run on the author's system:@footnote{It
 is possible for the output to be completely different if the
 C library in your system does not use the IEEE-754 even-rounding
-rule to round halfway cases for @code{printf()}.}
+rule to round halfway cases for @code{printf}.}
 
 @example
 -3.5 => -4
@@ -28697,7 +28701,7 @@ rule to round halfway cases for @code{printf()}.}
 
 The theory behind the rounding mode @code{roundTiesToEven} is that
 it more or less evenly distributes upward and downward rounds
-of exact halves, which might cause the round-off error
+of exact halves, which might cause any round-off error
 to cancel itself out. This is the default rounding mode used
 in IEEE-754 computing functions and operators.
 
@@ -28738,8 +28742,8 @@ the following command:
 
 @example
 $ @kbd{gawk --version}
address@hidden GNU Awk 4.1.0 (GNU MPFR 3.1.0, GNU MP 5.0.3)
address@hidden Copyright (C) 1989, 1991-2012 Free Software Foundation.
address@hidden GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2)
address@hidden Copyright (C) 1989, 1991-2013 Free Software Foundation.
 @dots{}
 @end example
 
@@ -28771,8 +28775,8 @@ in general, and the limitations of doing arithmetic 
with ordinary
 @command{gawk} uses the GNU MPFR library
 for arbitrary precision floating-point arithmetic.  The MPFR library
 provides precise control over precisions and rounding modes, and gives
-correctly rounded, reproducible, platform-independent results.  With the
-command-line option @option{--bignum} or @option{-M},
+correctly rounded, reproducible, platform-independent results.  With one
+of the command-line options @option{--bignum} or @option{-M},
 all floating-point arithmetic operators and numeric functions can yield
 results to any desired precision level supported by MPFR.
 Two built-in variables, @code{PREC} and @code{ROUNDMODE},
@@ -28782,11 +28786,11 @@ provide control over the working precision and the 
rounding mode
 The precision and the rounding mode are set globally for every operation
 to follow.
 
-The default working precision for arbitrary precision floating-point values is 
53,
-and the default value for @code{ROUNDMODE} is @code{"N"},
+The default working precision for arbitrary precision floating-point values is
+53 bits, and the default value for @code{ROUNDMODE} is @code{"N"},
 which selects the IEEE-754 @code{roundTiesToEven} rounding mode
 (@pxref{Rounding Mode})address@hidden
-default precision is 53, since according to the MPFR documentation,
+default precision is 53 bits, since according to the MPFR documentation,
 the library should be able to exactly reproduce all computations with
 double-precision machine floating-point numbers (@code{double} type
 in C), except the default exponent range is much wider and subnormal
@@ -28833,11 +28837,14 @@ your program.
 @command{gawk} uses a global working precision; it does not keep track of
 the precision or accuracy of individual numbers. Performing an arithmetic
 operation or calling a built-in function rounds the result to the current
-working precision. The default working precision is 53, which can be
+working precision. The default working precision is 53 bits, which can be
 modified using the built-in variable @code{PREC}. You can also set the
-value to one of the following pre-defined case-insensitive strings
-to emulate an IEEE-754 binary format:
+value to one of the pre-defined case-insensitive strings
+shown in @ref{table-predefined-precision-strings},
+to emulate an IEEE-754 binary format.
 
address@hidden Table,table-predefined-precision-strings
address@hidden precision strings for @code{PREC}}
 @multitable address@hidden"double"}} {12345678901234567890123456789012345}
 @headitem @code{PREC} @tab IEEE-754 Binary Format
 @item @code{"half"} @tab 16-bit half-precision.
@@ -28846,12 +28853,13 @@ to emulate an IEEE-754 binary format:
 @item @code{"quad"} @tab Basic 128-bit quadruple precision.
 @item @code{"oct"} @tab 256-bit octuple precision.
 @end multitable
address@hidden float
 
 The following example illustrates the effects of changing precision
 on arithmetic operations:
 
 @example
-$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0; \}
+$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0}
 >   @kbd{PREC = "double"; print x + 0 @}'}
 @print{} 1e-400
 @print{} 0
@@ -28920,7 +28928,7 @@ rounding modes is shown in 
@ref{table-gawk-rounding-modes}.
 
 @code{ROUNDMODE} has the default value @code{"N"},
 which selects the IEEE-754 rounding mode @code{roundTiesToEven}.
address@hidden, lists @code{"A"} to select the IEEE-754 mode
+In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the 
IEEE-754 mode
 @code{roundTiesToAway}.  This is only available
 if your version of the MPFR library supports it; otherwise setting
 @code{ROUNDMODE} to this value has no effect. @xref{Rounding Mode},
@@ -28963,7 +28971,7 @@ $ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 
1/10) @}'}
 @print{} 0.1000000000000000000000000
 @end example
 
-In the first case, the number is stored with the default precision of 53.
+In the first case, the number is stored with the default precision of 53 bits.
 
 @node Changing Precision
 @subsection Changing the Precision of a Number
@@ -29026,7 +29034,7 @@ using the machine double precision arithmetic, it 
decides that they
 are not equal!
 (@xref{Floating-point Programming}.)
 You can get the result you want by increasing the precision;
-56 in this case will get the job done:
+56 bits in this case will get the job done:
 
 @example 
 $ @kbd{gawk -M -v PREC=56 'BEGIN @{ print (0.1 + 12.2 == 12.3) @}'}
@@ -29071,7 +29079,7 @@ in floating-point arithmetic. In the example in
 
 @example
 $ @kbd{gawk 'BEGIN @{}
->   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)}
+>   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)    # loop five times (?)}
 >       @kbd{i++}
 >   @kbd{print i}
 > @address@hidden'}
@@ -29087,7 +29095,7 @@ the problem at hand is often the correct approach in 
such situations.
 @section Arbitrary Precision Integer Arithmetic with @command{gawk}
 @cindex integer, arbitrary precision
 
-If the option @option{--bignum} or @option{-M} is specified,
+If one of the options @option{--bignum} or @option{-M} is specified,
 @command{gawk} performs all
 integer arithmetic using GMP arbitrary precision integers.
 Any number that looks like an integer in a program source or data file
@@ -29146,9 +29154,9 @@ $ @kbd{gawk -M 'BEGIN @{}
 @end example
 
 The output differs from the actual number, 113,423,713,055,421,844,361,000,443,
-because the default precision of 53 is not enough to represent the
+because the default precision of 53 bits is not enough to represent the
 floating-point results exactly. You can either increase the precision
-(100 is enough in this case), or replace the floating-point constant
+(100 bits is enough in this case), or replace the floating-point constant
 @samp{2.0} with an integer, to perform all computations using integer
 arithmetic to get the correct output.
 
@@ -29183,7 +29191,7 @@ gawk -M 'BEGIN @{ n = 13; print n % 2 @}'
 @node Dynamic Extensions
 @chapter Writing Extensions for @command{gawk}
 
-It is possible to add new built-in functions to @command{gawk} using
+It is possible to add new functions written in C or C++ to @command{gawk} using
 dynamically loaded libraries. This facility is available on systems
 that support the C @code{dlopen()} and @code{dlsym()}
 functions.  This @value{CHAPTER} describes how to create extensions
@@ -29206,6 +29214,7 @@ When @option{--sandbox} is specified, extensions are 
disabled
 * Plugin License::              A note about licensing.
 * Extension Mechanism Outline:: An outline of how it works.
 * Extension API Description::   A full description of the API.
+* Finding Extensions::          How @command{gawk} finds compiled extensions.
 * Extension Example::           Example C code for an extension.
 * Extension Samples::           The sample extensions that ship with
                                 @code{gawk}.
@@ -29229,11 +29238,13 @@ want to do and can write in C or C++, you can write 
an extension to do it!
 
 Extensions are written in C or C++, using the @dfn{Application Programming
 Interface} (API) defined for this purpose by the @command{gawk}
-developers.  The rest of this @value{CHAPTER} explains the design
-decisions behind the API, the facilities that it provides and how to use
+developers.  The rest of this @value{CHAPTER} explains
+the facilities that the API provides and how to use
 them, and presents a small sample extension.  In addition, it documents
 the sample extensions included in the @command{gawk} distribution,
 and describes the @code{gawkextlib} project.
address@hidden Design}, for a discussion of the extension mechanism
+goals and design.
 
 @node Plugin License
 @section Extension Licensing
@@ -29326,7 +29337,7 @@ Some other bits and pieces:
 The API provides access to @command{gawk}'s @address@hidden values,
 reflecting command line options, like @code{do_lint}, @code{do_profiling}
 and so on (@pxref{Extension API Variables}).
-These are informational: an extension cannot affect these
+These are informational: an extension cannot affect their values
 inside @command{gawk}.  In addition, attempting to assign to them
 produces a compile-time error.
 
@@ -29359,8 +29370,6 @@ This (rather large) @value{SECTION} describes the API 
in detail.
 * Array Manipulation::                   Functions for working with arrays.
 * Extension API Variables::              Variables provided by the API.
 * Extension API Boilerplate::            Boilerplate code for using the API.
-* Finding Extensions::                   How @command{gawk} finds compiled
-                                         extensions.
 @end menu
 
 @node Extension API Functions Introduction
@@ -29402,8 +29411,7 @@ an array.
 
 @item
 Symbol table access: retrieving a global variable, creating one,
-or changing one.  This also includes the ability to create a scalar
-variable that will be @emph{constant} within @command{awk} code.
+or changing one.
 
 @item
 Creating and releasing cached values; this provides an
@@ -29412,15 +29420,20 @@ can be a big performance win.
 
 @item
 Manipulating arrays:
+
 @itemize @minus
 @item
 Retrieving, adding, deleting, and modifying elements
+
 @item
 Getting the count of elements in an array
+
 @item
 Creating a new array
+
 @item
 Clearing an array
+
 @item
 Flattening an array for easy C style looping over all its indices and elements
 @end itemize
@@ -29436,10 +29449,13 @@ corresponding standard header file @emph{before} 
including @file{gawkapi.h}:
 
 @multitable address@hidden()}, @code{memcpy()}} address@hidden<sys/types.h>}}
 @headitem C Entity @tab Header File
address@hidden @code{EOF} @tab @code{<stdio.h>}
 @item @code{FILE} @tab @code{<stdio.h>}
 @item @code{NULL} @tab @code{<stddef.h>}
 @item @code{malloc()} @tab @code{<stdlib.h>}
address@hidden @code{memset()}, @code{memcpy()} @tab @code{<string.h>}
address@hidden @code{memcpy()} @tab @code{<string.h>}
address@hidden @code{memset()} @tab @code{<string.h>}
address@hidden @code{realloc()} @tab @code{<stdlib.h>}
 @item @code{size_t} @tab @code{<sys/types.h>}
 @item @code{struct stat} @tab @code{<sys/stat.h>}
 @end multitable 
@@ -29448,7 +29464,8 @@ Due to portability concerns, especially to systems that 
are not
 fully standards-compliant, it is your responsibility
 to include the correct files in the correct way. This requirement
 is necessary in order to keep @file{gawkapi.h} clean, instead of becoming
-a portability hodge-podge as can be seen in the @command{gawk} source code.
+a portability hodge-podge as can be seen in some parts of
+the @command{gawk} source code.
 
 To pass reasonable integer values for @code{ERRNO}, you will also need to
 include @code{<errno.h>}.
@@ -29472,16 +29489,18 @@ from the extension @emph{must} come from 
@code{malloc()} and is managed
 by @command{gawk} from then on.
 
 @item
-The API defines several simple structs that map values as seen
+The API defines several simple @code{struct}s that map values as seen
 from @command{awk}.  A value can be a @code{double}, a string, or an
 array (as in multidimensional arrays, or when creating a new array).
-Strings maintain both pointer and length since embedded @code{NUL}
+String values maintain both pointer and length since embedded @code{NUL}
 characters are allowed.
 
address@hidden NOTE
 By intent, strings are maintained using the current multibyte encoding (as
 defined by @address@hidden environment variables) and not using wide
 characters.  This matches how @command{gawk} stores strings internally
 and also how characters are likely to be input and output from files.
address@hidden quotation
 
 @item
 When retrieving a value (such as a parameter or that of a global variable
@@ -29492,7 +29511,7 @@ scalars, value cookie, array, or ``undefined'').  When 
the request is
 However, if the request and actual type don't match, the access function
 returns ``false'' and fills in the type of the actual value that is there,
 so that the extension can, e.g., print an error message
-(``scalar passed where array expected'').
+(such as ``scalar passed where array expected'').
 
 @c This is documented in the header file and needs some expanding upon.
 @c The table there should be presented here
@@ -29517,7 +29536,7 @@ Chet Ramey
 @end quotation
 
 The extension API defines a number of simple types and structures for general
-purpose use. Additional, more specialized, data structures, are introduced
+purpose use. Additional, more specialized, data structures are introduced
 in subsequent @value{SECTION}s, together with the functions that use them.
 
 @table @code
@@ -29556,7 +29575,7 @@ multibyte encoding.
 @itemx @ @ @ @ AWK_STRING,
 @itemx @ @ @ @ AWK_ARRAY,
 @itemx @ @ @ @ AWK_SCALAR,@ @ @ @ @ @ @ @ @ /* opaque access to a variable */
address@hidden @ @ @ @ AWK_VALUE_COOKIE@ @ @ /* for updating a previously 
created value */
address@hidden @ @ @ @ AWK_VALUE_COOKIE@ @ @ @ /* for updating a previously 
created value */
 @itemx @} awk_valtype_t;
 This @code{enum} indicates the type of a value.
 It is used in the following @code{struct}.
@@ -29749,7 +29768,7 @@ exit with a fatal error message.  They should be used 
as if they were
 procedure calls that do not return a value.
 
 @table @code
address@hidden emalloc(pointer, type, size, message)
address@hidden #define emalloc(pointer, type, size, message) @dots{}
 The arguments to this macro are as follows:
 @c nested table
 @table @code
@@ -29780,7 +29799,7 @@ strcpy(message, greet);
 make_malloced_string(message, strlen(message), & result);
 @end example
 
address@hidden erealloc(pointer, type, size, message)
address@hidden #define erealloc(pointer, type, size, message) @dots{}
 This is like @code{emalloc()}, but it calls @code{realloc()},
 instead of @code{malloc()}.
 The arguments are the same as for the @code{emalloc()} macro.
@@ -29826,6 +29845,7 @@ Function names must obey the rules for @command{awk}
 identifiers. That is, they must begin with either a letter
 or an underscore, which may be followed by any number of
 letters, digits, and underscores.
+Letter case in function names is significant.
 
 @item awk_value_t *(*function)(int num_actual_args, awk_value_t *result);
 This is a pointer to the C function that provides the desired
@@ -29878,8 +29898,8 @@ The parameters are:
 @item funcp
 A pointer to the function to be called before @command{gawk} exits. The 
@code{data}
 parameter will be the original value of @code{arg0}.
-The @code{exit_status} parameter is
-the exit status value that @command{gawk} will pass to the @code{exit()} 
system call.
+The @code{exit_status} parameter is the exit status value that
address@hidden intends to pass to the @code{exit()} system call.
 
 @item arg0
 A pointer to private data which @command{gawk} saves in order to pass to
@@ -29911,7 +29931,7 @@ is invoked with the @option{--version} option.
 
 By default, @command{gawk} reads text files as its input. It uses the value
 of @code{RS} to find the end of the record, and then uses @code{FS}
-(or @code{FIELDWIDTHS}) to split it into fields (@pxref{Reading Files}).
+(or @code{FIELDWIDTHS} or @code{FPAT}) to split it into fields (@pxref{Reading 
Files}).
 Additionally, it sets the value of @code{RT} (@pxref{Built-in Variables}).
 
 If you want, you can provide your own custom input parser.  An input
@@ -29948,7 +29968,7 @@ typedef struct awk_input_parser @{
     const char *name;   /* name of parser */
     awk_bool_t (*can_take_file)(const awk_input_buf_t *iobuf);
     awk_bool_t (*take_control_of)(awk_input_buf_t *iobuf);
-    awk_const struct awk_input_parser *awk_const next;    /* for use by gawk */
+    awk_const struct awk_input_parser *awk_const next;   /* for gawk */
 @} awk_input_parser_t;
 @end example
 
@@ -30027,11 +30047,11 @@ in the @code{struct stat}, or any combination of the 
above.
 
 Once @address@hidden()} has returned true, and
 @command{gawk} has decided to use your input parser, it calls
address@hidden@var{XXX}_take_control_of()}.  That function then fills in at
-least the @code{get_record} field of the @code{awk_input_buf_t}.  It must
-also ensure that @code{fd} is not set to @code{INVALID_HANDLE}.  All of
-the fields that may be filled by @address@hidden()}
-are as follows:
address@hidden@var{XXX}_take_control_of()}.  That function then fills one of
+either the @code{get_record} field or the @code{read_func} field in
+the @code{awk_input_buf_t}.  It must also ensure that @code{fd} is @emph{not}
+set to @code{INVALID_HANDLE}.  All of the fields that may be filled by
address@hidden@var{XXX}_take_control_of()} are as follows:
 
 @table @code
 @item void *opaque;
@@ -30108,8 +30128,8 @@ to zero, so there is no need to set it unless an error 
occurs.
 If an error does occur, the function should return @code{EOF} and set
 @code{*errcode} to a non-zero value.  In that case, if @code{*errcode}
 does not equal @minus{}1, @command{gawk} automatically updates
-the @code{ERRNO} variable based on the value of @code{*errcode} (e.g.,
-setting @samp{*errcode = errno} should do the right thing).
+the @code{ERRNO} variable based on the value of @code{*errcode}.
+(In general, setting @samp{*errcode = errno} should do the right thing.)
 
 As an alternative to supplying a function that returns an input record,
 you may instead supply a function that simply reads bytes, and let
@@ -30158,7 +30178,7 @@ Register the input parser pointed to by 
@code{input_parser} with
 
 An @dfn{output wrapper} is the mirror image of an input parser.
 It allows an extension to take over the output to a file opened
-with the @samp{>} or @samp{>>} operators (@pxref{Redirection}).
+with the @samp{>} or @samp{>>} I/O redirection operators (@pxref{Redirection}).
 
 The output wrapper is very similar to the input parser structure:
 
@@ -30167,7 +30187,7 @@ typedef struct awk_output_wrapper @{
     const char *name;   /* name of the wrapper */
     awk_bool_t (*can_take_file)(const awk_output_buf_t *outbuf);
     awk_bool_t (*take_control_of)(awk_output_buf_t *outbuf);
-    awk_const struct awk_output_wrapper *awk_const next;  /* for use by gawk */
+    awk_const struct awk_output_wrapper *awk_const next;  /* for gawk */
 @} awk_output_wrapper_t;
 @end example
 
@@ -30191,7 +30211,9 @@ fill in appropriate members of the 
@code{awk_output_buf_t} structure,
 as described below, and return true if successful, false otherwise.
 
 @item awk_const struct output_wrapper *awk_const next;
-This is for use by @command{gawk}.
+This is for use by @command{gawk};
+therefore they are marked @code{awk_const} so that the extension cannot
+modify them.
 @end table
 
 The @code{awk_output_buf_t} structure looks like this:
@@ -30282,7 +30304,7 @@ typedef struct awk_two_way_processor @{
     awk_bool_t (*take_control_of)(const char *name,
                                   awk_input_buf_t *inbuf,
                                   awk_output_buf_t *outbuf);
-    awk_const struct awk_two_way_processor *awk_const next;  /* for use by 
gawk */
+    awk_const struct awk_two_way_processor *awk_const next;  /* for gawk */
 @} awk_two_way_processor_t;
 @end example
 
@@ -30305,7 +30327,9 @@ This function should fill in the @code{awk_input_buf_t} 
and
 @code{outbuf}, respectively.  These structures were described earlier.
 
 @item awk_const struct two_way_processor *awk_const next;
-This is for use by @command{gawk}.
+This is for use by @command{gawk};
+therefore they are marked @code{awk_const} so that the extension cannot
+modify them.
 @end table
 
 As with the input parser and output processor, you provide
@@ -30436,10 +30460,14 @@ This routine cannot be used to update any of the 
predefined
 variables (such as @code{ARGC} or @code{NF}).
 @end table
 
+An extension can look up the value of @command{gawk}'s special variables.
+However, with the exception of the @code{PROCINFO} array, an extension
+cannot change any of those variables.
+
 @node Symbol table by cookie
 @subsubsection Variable Access and Update by Cookie
 
-A @dfn{scalar cookie} is an opaque handle that provide access
+A @dfn{scalar cookie} is an opaque handle that provides access
 to a global variable or array. It is an optimization that
 avoids looking up variables in @command{gawk}'s symbol table every time
 access is needed. This was discussed earlier, in @ref{General Data Types}.
@@ -30462,10 +30490,10 @@ Here too, the built-in variables may not be updated.
 @end table
 
 It is not obvious at first glance how to work with scalar cookies or
-what their @i{raison address@hidden really is.  In theory, the 
@code{sym_lookup()}
+what their @i{raison d'@^etre} really is.  In theory, the @code{sym_lookup()}
 and @code{sym_update()} routines are all you really need to work with
-variables.  For example, you might have code that looked up the value of
-a variable, evaluated a condition, and then possibly changed the value
+variables.  For example, you might have code that looks up the value of
+a variable, evaluates a condition, and then possibly changes the value
 of the variable based on the result of that evaluation, like so:
 
 @example
@@ -30637,7 +30665,7 @@ are all the others be changed too?''
 
 That's a great question. The answer is that no, it's not a problem.
 Internally, @command{gawk} uses reference-counted strings. This means
-that many variables can share the same string, and @command{gawk}
+that many variables can share the same string value, and @command{gawk}
 keeps track of the usage.  When a variable's value changes, @command{gawk}
 simply decrements the reference count on the old value and updates
 the variable to use the new value.
@@ -30820,7 +30848,7 @@ To @dfn{flatten} an array is create a structure that
 represents the full array in a fashion that makes it easy
 for C code to traverse the entire array.  Test code
 in @file{extension/testext.c} does this, and also serves
-as a nice example to show how to use the APIs.
+as a nice example showing how to use the APIs.
 
 First, the @command{gawk} script that drives the test extension:
 
@@ -30844,7 +30872,7 @@ This code creates an array with @code{split()} 
(@pxref{String Functions})
 and then calls @code{dump_array_and_delete()}. That function looks up
 the array whose name is passed as the first argument, and
 deletes the element at the index passed in the second argument.
-It then prints the return value and checks if the element
+The @command{awk} code then prints the return value and checks if the element
 was indeed deleted.  Here is the C code that implements
 @code{dump_array_and_delete()}. It has been edited slightly for
 presentation.
@@ -30948,7 +30976,7 @@ element values. In addition, upon finding the element 
with the
 index that is supposed to be deleted, the function sets the
 @code{AWK_ELEMENT_DELETE} bit in the @code{flags} field
 of the element.  When the array is released, @command{gawk}
-traverses the flattened array, and deletes any element which
+traverses the flattened array, and deletes any elements which
 have this flag bit set:
 
 @example
@@ -31046,17 +31074,15 @@ into @command{gawk}, you have to retrieve the array 
cookie from the value
 passed in to @command{sym_update()} before doing anything else with it, like 
so:
 
 @example
-awk_value_t index, value;
+awk_value_t value;
 awk_array_t new_array;
 
-make_const_string("an index", 8, & index);
-
 new_array = create_array();
 val.val_type = AWK_ARRAY;
 val.array_cookie = new_array;
 
 /* install array in the symbol table */
-sym_update("array", & index, & val);
+sym_update("array", & val);
 
 new_array = val.array_cookie;    /* YOU MUST DO THIS */
 @end example
@@ -31426,7 +31452,7 @@ the version string with @command{gawk}.
 @end enumerate
 
 @node Finding Extensions
address@hidden How @command{gawk} Finds Extensions
address@hidden How @command{gawk} Finds Extensions
 
 Compiled extensions have to be installed in a directory where
 @command{gawk} can find them.  If @command{gawk} is configured and
@@ -31886,13 +31912,15 @@ do_stat(int nargs, awk_value_t *result)
     awk_array_t array;
     int ret;
     struct stat sbuf;
-    int (*statfunc)(const char *path, struct stat *sbuf) = lstat;   /* default 
*/
+    /* default is stat() */
+    int (*statfunc)(const char *path, struct stat *sbuf) = lstat;
 
     assert(result != NULL);
 
     if (nargs != 2 && nargs != 3) @{
         if (do_lint)
-            lintwarn(ext_id, _("stat: called with wrong number of arguments"));
+            lintwarn(ext_id,
+               _("stat: called with wrong number of arguments"));
         return make_number(-1, result);
     @}
 @end example
@@ -32172,7 +32200,7 @@ Corresponds to the @code{st_minor} field in the 
@code{struct stat}.
 This element is only present for device files.
 
 @item @code{statdata["blksize"]} @tab
-Corresponds to the @code{st_blksize} field in the @code{struct stat}.
+Corresponds to the @code{st_blksize} field in the @code{struct stat},
 if this field is present on your system.
 (It is present on all modern systems that we know of.)
 
@@ -32204,7 +32232,7 @@ Not all systems support all file types.
 @itemx result = fts(pathlist, flags, filedata)
 Walk the file trees provided in @code{pathlist} and fill in the
 @code{filedata} array as described below.  @code{flags} is the bitwise
-OR of several predefined constant values, also as described below.
+OR of several predefined constant values, also described below.
 Return zero if there were no errors, otherwise return @minus{}1.
 @end table
 
@@ -32249,9 +32277,9 @@ Immediately follow a symbolic link named in 
@code{pathlist},
 whether or not @code{FTS_LOGICAL} is set.
 
 @item FTS_SEEDOT
-By default, the @code{fts()} routines do not return entries for @file{.}
-and @file{..}.  This option causes entries for @file{..} to also
-be included.  (The extension always includes an entry for @file{.},
+By default, the @code{fts()} routines do not return entries for @file{.} (dot)
+and @file{..} (dot-dot).  This option causes entries for dot-dot to also
+be included.  (The extension always includes an entry for dot,
 see below.)
 
 @item FTS_XDEV
@@ -32266,7 +32294,7 @@ The element for this index is itself an array.  There 
are two cases.
 
 @c nested table
 @table @emph
address@hidden The path is a file.
address@hidden The path is a file
 In this case, the array contains two or three elements:
 
 @c doubly nested table
@@ -32286,7 +32314,7 @@ If some kind of error was encountered, the array will 
also
 contain an element named @code{"error"}, which is a string describing the 
error.
 @end table
 
address@hidden The path is a directory.
address@hidden The path is a directory
 In this case, the array contains one element for each entry in the
 directory.  If an entry is a file, that element is as for files, just
 described.  If the entry is a directory, that element is (recursively),
@@ -32340,7 +32368,7 @@ The arguments to @code{fnmatch()} are:
 The filename wildcard to match.
 
 @item string
-The filename string,
+The filename string.
 
 @item flag
 Either zero, or the bitwise OR of one or more of the
@@ -32486,11 +32514,14 @@ The @code{ordchr} extension adds two functions, named
 @code{ord()} and @code{chr()}, as follows.
 
 @table @code
address@hidden @@load "ordchr"
+This is how you load the extension.
+
 @item number = ord(string)
 Return the numeric value of the first character in @code{string}.
 
 @item char = chr(number)
-Return the string whose first character is that represented by @code{number}.
+Return a string whose first character is that represented by @code{number}.
 @end table
 
 These functions are inspired by the Pascal language functions
@@ -32520,8 +32551,8 @@ they are read, with each entry returned as a record.
 The record consists of three fields. The first two are the inode number and the
 filename, separated by a forward slash character.
 On systems where the directory entry contains the file type, the record
-has a third field which is a single letter indicating the type of the
-file:
+has a third field (also separated by a slash) which is a single letter
+indicating the type of the file:
 
 @multitable @columnfractions .1 .9
 @headitem Letter @tab File Type
@@ -32619,8 +32650,8 @@ The array created by @code{reada()} is identical to 
that written by
 @code{writea()} in the sense that the contents are the same. However,
 due to implementation issues, the array traversal order of the recreated
 array is likely to be different from that of the original array.  As array
-traversal order in @command{awk} is by default undefined, this is not
-(technically) a problem.  If you need to guarantee a particular traversal
+traversal order in @command{awk} is by default undefined, this is (technically)
+not a problem.  If you need to guarantee a particular traversal
 order, use the array sorting features in @command{gawk} to do so
 (@pxref{Array Sorting}).
 
@@ -32647,6 +32678,9 @@ The @code{readfile} extension adds a single function
 named @code{readfile()}:
 
 @table @code
address@hidden @@load "readfile"
+This is how you load the extension.
+
 @item result = readfile("/some/path")
 The argument is the name of the file to read.  The return value is a
 string containing the entire contents of the requested file.  Upon error,
@@ -32681,11 +32715,13 @@ for more information.
 @cindex time
 @cindex sleep
 
-These functions can be used by either invoking @command{gawk}
+These functions can be used either by invoking @command{gawk}
 with a command-line argument of @samp{-l time} or by
 inserting @samp{@@load "time"} in your script.
 
 @table @code
address@hidden @@load "time"
+This is how you load the extension.
 
 @cindex @code{gettimeofday} time extension function
 @item the_time = gettimeofday()
@@ -32779,6 +32815,7 @@ make && make check                    @ii{Build and 
check that all is OK}
 If you write an extension that you wish to share with other
 @command{gawk} users, please consider doing so through the
 @code{gawkextlib} project.
+See the project's web site for more information.
 
 @iftex
 @part Part IV:@* Appendices
diff --git a/doc/gawkman.texi b/doc/gawkman.texi
index e471f3f..719f1e8 100644
--- a/doc/gawkman.texi
+++ b/doc/gawkman.texi
@@ -12895,7 +12895,7 @@ character.  (@xref{Output Separators}.)
 @cindex @code{PREC} variable
 @item PREC #
 The working precision of arbitrary precision floating-point numbers,
-53 by default (@pxref{Setting Precision}).
+53 bits by default (@pxref{Setting Precision}).
 
 @cindex @code{ROUNDMODE} variable
 @item ROUNDMODE #
@@ -27236,7 +27236,7 @@ which plays a role in how variables are used in 
comparisons.
 It is important to note that the string value for a number may not
 reflect the full value (all the digits) that the numeric value
 actually contains.
-The following program (@file{values.awk}) illustrates this:
+The following program, @file{values.awk}, illustrates this:
 
 @example
 @{
@@ -27446,7 +27446,7 @@ Thus @samp{+nan} and @samp{+NaN} are the same.
 @node Integer Programming
 @subsection Mixing Integers And Floating-point
 
-As has been mentioned already, @command{gawk} ordinarily uses hardware double
+As has been mentioned already, @command{awk} uses hardware double
 precision with 64-bit IEEE binary floating-point representation
 for numbers on most systems. A large integer like 9,007,199,254,740,997
 has a binary representation that, although finite, is more than 53 bits long;
@@ -27489,7 +27489,7 @@ is
 @ifnottex
 address@hidden, 2^53].
 @end ifnottex
-If you ever see an integer outside this range in @command{gawk}
+If you ever see an integer outside this range in @command{awk}
 using 64-bit doubles, you have reason to be very suspicious about
 the accuracy of the output. Here is a simple program with erroneous output:
 
@@ -27501,7 +27501,7 @@ $ @kbd{gawk 'BEGIN @{ i = 2^53 - 1; for (j = 0; j < 4; 
j++) print i + j @}'}
 @print{} 9007199254740994
 @end example
 
-The lesson is to not assume that any large integer printed by @command{gawk}
+The lesson is to not assume that any large integer printed by @command{awk}
 represents an exact result from your computation, especially if it wraps
 around on your screen.
 
@@ -27624,7 +27624,7 @@ yield an unexpected result:
 
 @example
 $ @kbd{gawk 'BEGIN @{}
->   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)}
+>   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)    # loop five times (?)}
 >       @kbd{i++}
 >   @kbd{print i}
 > @address@hidden'}
@@ -27639,7 +27639,7 @@ Instead of arbitrary precision floating-point 
arithmetic,
 often all you need is an adjustment of your logic
 or a different order for the operations in your calculation.
 The stability and the accuracy of the computation of the constant @value{PI}
-in the previous example can be enhanced by using the following
+in the earlier example can be enhanced by using the following
 simple algebraic transformation:
 
 @example
@@ -27651,7 +27651,7 @@ After making this, change the program does converge to
 @value{PI} in under 30 iterations:
 
 @example
-$ @kbd{gawk -f /tmp/pi2.awk}
+$ @kbd{gawk -f pi2.awk}
 @print{} 3.215390309173473
 @print{} 3.159659942097501
 @print{} 3.146086215131436
@@ -27731,14 +27731,18 @@ The context has the following primary components:
 @table @dfn
 @item Precision
 Precision of the floating-point format in bits.
+
 @item emax
-Maximum exponent allowed for this format.
+Maximum exponent allowed for the format.
+
 @item emin
-Minimum exponent allowed for this format.
+Minimum exponent allowed for the format.
+
 @item Underflow behavior
 The format may or may not support gradual underflow.
+
 @item Rounding
-The rounding mode of this context.
+The rounding mode of the context.
 @end table
 
 @ref{table-ieee-formats} lists the precision and exponent
@@ -27813,7 +27817,7 @@ In this case, the number is rounded to the nearest even 
digit.
 So rounding 0.125 to two digits rounds down to 0.12,
 but rounding 0.6875 to three digits rounds up to 0.688.
 You probably have already encountered this rounding mode when
-using the @code{printf} routine to format floating-point numbers.
+using @code{printf} to format floating-point numbers.
 For example:
 
 @example
@@ -27827,10 +27831,10 @@ BEGIN @{
 @end example
 
 @noindent
-produces the following output when run:@footnote{It
+produces the following output when run on the author's system:@footnote{It
 is possible for the output to be completely different if the
 C library in your system does not use the IEEE-754 even-rounding
-rule to round halfway cases for @code{printf()}.}
+rule to round halfway cases for @code{printf}.}
 
 @example
 -3.5 => -4
@@ -27846,7 +27850,7 @@ rule to round halfway cases for @code{printf()}.}
 
 The theory behind the rounding mode @code{roundTiesToEven} is that
 it more or less evenly distributes upward and downward rounds
-of exact halves, which might cause the round-off error
+of exact halves, which might cause any round-off error
 to cancel itself out. This is the default rounding mode used
 in IEEE-754 computing functions and operators.
 
@@ -27887,8 +27891,8 @@ the following command:
 
 @example
 $ @kbd{gawk --version}
address@hidden GNU Awk 4.1.0 (GNU MPFR 3.1.0, GNU MP 5.0.3)
address@hidden Copyright (C) 1989, 1991-2012 Free Software Foundation.
address@hidden GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2)
address@hidden Copyright (C) 1989, 1991-2013 Free Software Foundation.
 @dots{}
 @end example
 
@@ -27920,8 +27924,8 @@ in general, and the limitations of doing arithmetic 
with ordinary
 @command{gawk} uses the GNU MPFR library
 for arbitrary precision floating-point arithmetic.  The MPFR library
 provides precise control over precisions and rounding modes, and gives
-correctly rounded, reproducible, platform-independent results.  With the
-command-line option @option{--bignum} or @option{-M},
+correctly rounded, reproducible, platform-independent results.  With one
+of the command-line options @option{--bignum} or @option{-M},
 all floating-point arithmetic operators and numeric functions can yield
 results to any desired precision level supported by MPFR.
 Two built-in variables, @code{PREC} and @code{ROUNDMODE},
@@ -27931,11 +27935,11 @@ provide control over the working precision and the 
rounding mode
 The precision and the rounding mode are set globally for every operation
 to follow.
 
-The default working precision for arbitrary precision floating-point values is 
53,
-and the default value for @code{ROUNDMODE} is @code{"N"},
+The default working precision for arbitrary precision floating-point values is
+53 bits, and the default value for @code{ROUNDMODE} is @code{"N"},
 which selects the IEEE-754 @code{roundTiesToEven} rounding mode
 (@pxref{Rounding Mode})address@hidden
-default precision is 53, since according to the MPFR documentation,
+default precision is 53 bits, since according to the MPFR documentation,
 the library should be able to exactly reproduce all computations with
 double-precision machine floating-point numbers (@code{double} type
 in C), except the default exponent range is much wider and subnormal
@@ -27982,11 +27986,14 @@ your program.
 @command{gawk} uses a global working precision; it does not keep track of
 the precision or accuracy of individual numbers. Performing an arithmetic
 operation or calling a built-in function rounds the result to the current
-working precision. The default working precision is 53, which can be
+working precision. The default working precision is 53 bits, which can be
 modified using the built-in variable @code{PREC}. You can also set the
-value to one of the following pre-defined case-insensitive strings
-to emulate an IEEE-754 binary format:
+value to one of the pre-defined case-insensitive strings
+shown in @ref{table-predefined-precision-strings},
+to emulate an IEEE-754 binary format.
 
address@hidden Table,table-predefined-precision-strings
address@hidden precision strings for @code{PREC}}
 @multitable address@hidden"double"}} {12345678901234567890123456789012345}
 @headitem @code{PREC} @tab IEEE-754 Binary Format
 @item @code{"half"} @tab 16-bit half-precision.
@@ -27995,12 +28002,13 @@ to emulate an IEEE-754 binary format:
 @item @code{"quad"} @tab Basic 128-bit quadruple precision.
 @item @code{"oct"} @tab 256-bit octuple precision.
 @end multitable
address@hidden float
 
 The following example illustrates the effects of changing precision
 on arithmetic operations:
 
 @example
-$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0; \}
+$ @kbd{gawk -M -v PREC=100 'BEGIN @{ x = 1.0e-400; print x + 0}
 >   @kbd{PREC = "double"; print x + 0 @}'}
 @print{} 1e-400
 @print{} 0
@@ -28069,7 +28077,7 @@ rounding modes is shown in 
@ref{table-gawk-rounding-modes}.
 
 @code{ROUNDMODE} has the default value @code{"N"},
 which selects the IEEE-754 rounding mode @code{roundTiesToEven}.
address@hidden, lists @code{"A"} to select the IEEE-754 mode
+In @ref{table-gawk-rounding-modes}, @code{"A"} is listed to select the 
IEEE-754 mode
 @code{roundTiesToAway}.  This is only available
 if your version of the MPFR library supports it; otherwise setting
 @code{ROUNDMODE} to this value has no effect. @xref{Rounding Mode},
@@ -28112,7 +28120,7 @@ $ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 
1/10) @}'}
 @print{} 0.1000000000000000000000000
 @end example
 
-In the first case, the number is stored with the default precision of 53.
+In the first case, the number is stored with the default precision of 53 bits.
 
 @node Changing Precision
 @subsection Changing the Precision of a Number
@@ -28175,7 +28183,7 @@ using the machine double precision arithmetic, it 
decides that they
 are not equal!
 (@xref{Floating-point Programming}.)
 You can get the result you want by increasing the precision;
-56 in this case will get the job done:
+56 bits in this case will get the job done:
 
 @example 
 $ @kbd{gawk -M -v PREC=56 'BEGIN @{ print (0.1 + 12.2 == 12.3) @}'}
@@ -28220,7 +28228,7 @@ in floating-point arithmetic. In the example in
 
 @example
 $ @kbd{gawk 'BEGIN @{}
->   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)}
+>   @kbd{for (d = 1.1; d <= 1.5; d += 0.1)    # loop five times (?)}
 >       @kbd{i++}
 >   @kbd{print i}
 > @address@hidden'}
@@ -28236,7 +28244,7 @@ the problem at hand is often the correct approach in 
such situations.
 @section Arbitrary Precision Integer Arithmetic with @command{gawk}
 @cindex integer, arbitrary precision
 
-If the option @option{--bignum} or @option{-M} is specified,
+If one of the options @option{--bignum} or @option{-M} is specified,
 @command{gawk} performs all
 integer arithmetic using GMP arbitrary precision integers.
 Any number that looks like an integer in a program source or data file
@@ -28295,9 +28303,9 @@ $ @kbd{gawk -M 'BEGIN @{}
 @end example
 
 The output differs from the actual number, 113,423,713,055,421,844,361,000,443,
-because the default precision of 53 is not enough to represent the
+because the default precision of 53 bits is not enough to represent the
 floating-point results exactly. You can either increase the precision
-(100 is enough in this case), or replace the floating-point constant
+(100 bits is enough in this case), or replace the floating-point constant
 @samp{2.0} with an integer, to perform all computations using integer
 arithmetic to get the correct output.
 
@@ -28332,7 +28340,7 @@ gawk -M 'BEGIN @{ n = 13; print n % 2 @}'
 @node Dynamic Extensions
 @chapter Writing Extensions for @command{gawk}
 
-It is possible to add new built-in functions to @command{gawk} using
+It is possible to add new functions written in C or C++ to @command{gawk} using
 dynamically loaded libraries. This facility is available on systems
 that support the C @code{dlopen()} and @code{dlsym()}
 functions.  This @value{CHAPTER} describes how to create extensions
@@ -28355,6 +28363,7 @@ When @option{--sandbox} is specified, extensions are 
disabled
 * Plugin License::              A note about licensing.
 * Extension Mechanism Outline:: An outline of how it works.
 * Extension API Description::   A full description of the API.
+* Finding Extensions::          How @command{gawk} finds compiled extensions.
 * Extension Example::           Example C code for an extension.
 * Extension Samples::           The sample extensions that ship with
                                 @code{gawk}.
@@ -28378,11 +28387,13 @@ want to do and can write in C or C++, you can write 
an extension to do it!
 
 Extensions are written in C or C++, using the @dfn{Application Programming
 Interface} (API) defined for this purpose by the @command{gawk}
-developers.  The rest of this @value{CHAPTER} explains the design
-decisions behind the API, the facilities that it provides and how to use
+developers.  The rest of this @value{CHAPTER} explains
+the facilities that the API provides and how to use
 them, and presents a small sample extension.  In addition, it documents
 the sample extensions included in the @command{gawk} distribution,
 and describes the @code{gawkextlib} project.
address@hidden Design}, for a discussion of the extension mechanism
+goals and design.
 
 @node Plugin License
 @section Extension Licensing
@@ -28475,7 +28486,7 @@ Some other bits and pieces:
 The API provides access to @command{gawk}'s @address@hidden values,
 reflecting command line options, like @code{do_lint}, @code{do_profiling}
 and so on (@pxref{Extension API Variables}).
-These are informational: an extension cannot affect these
+These are informational: an extension cannot affect their values
 inside @command{gawk}.  In addition, attempting to assign to them
 produces a compile-time error.
 
@@ -28508,8 +28519,6 @@ This (rather large) @value{SECTION} describes the API 
in detail.
 * Array Manipulation::                   Functions for working with arrays.
 * Extension API Variables::              Variables provided by the API.
 * Extension API Boilerplate::            Boilerplate code for using the API.
-* Finding Extensions::                   How @command{gawk} finds compiled
-                                         extensions.
 @end menu
 
 @node Extension API Functions Introduction
@@ -28551,8 +28560,7 @@ an array.
 
 @item
 Symbol table access: retrieving a global variable, creating one,
-or changing one.  This also includes the ability to create a scalar
-variable that will be @emph{constant} within @command{awk} code.
+or changing one.
 
 @item
 Creating and releasing cached values; this provides an
@@ -28561,15 +28569,20 @@ can be a big performance win.
 
 @item
 Manipulating arrays:
+
 @itemize @minus
 @item
 Retrieving, adding, deleting, and modifying elements
+
 @item
 Getting the count of elements in an array
+
 @item
 Creating a new array
+
 @item
 Clearing an array
+
 @item
 Flattening an array for easy C style looping over all its indices and elements
 @end itemize
@@ -28585,10 +28598,13 @@ corresponding standard header file @emph{before} 
including @file{gawkapi.h}:
 
 @multitable address@hidden()}, @code{memcpy()}} address@hidden<sys/types.h>}}
 @headitem C Entity @tab Header File
address@hidden @code{EOF} @tab @code{<stdio.h>}
 @item @code{FILE} @tab @code{<stdio.h>}
 @item @code{NULL} @tab @code{<stddef.h>}
 @item @code{malloc()} @tab @code{<stdlib.h>}
address@hidden @code{memset()}, @code{memcpy()} @tab @code{<string.h>}
address@hidden @code{memcpy()} @tab @code{<string.h>}
address@hidden @code{memset()} @tab @code{<string.h>}
address@hidden @code{realloc()} @tab @code{<stdlib.h>}
 @item @code{size_t} @tab @code{<sys/types.h>}
 @item @code{struct stat} @tab @code{<sys/stat.h>}
 @end multitable 
@@ -28597,7 +28613,8 @@ Due to portability concerns, especially to systems that 
are not
 fully standards-compliant, it is your responsibility
 to include the correct files in the correct way. This requirement
 is necessary in order to keep @file{gawkapi.h} clean, instead of becoming
-a portability hodge-podge as can be seen in the @command{gawk} source code.
+a portability hodge-podge as can be seen in some parts of
+the @command{gawk} source code.
 
 To pass reasonable integer values for @code{ERRNO}, you will also need to
 include @code{<errno.h>}.
@@ -28621,16 +28638,18 @@ from the extension @emph{must} come from 
@code{malloc()} and is managed
 by @command{gawk} from then on.
 
 @item
-The API defines several simple structs that map values as seen
+The API defines several simple @code{struct}s that map values as seen
 from @command{awk}.  A value can be a @code{double}, a string, or an
 array (as in multidimensional arrays, or when creating a new array).
-Strings maintain both pointer and length since embedded @code{NUL}
+String values maintain both pointer and length since embedded @code{NUL}
 characters are allowed.
 
address@hidden NOTE
 By intent, strings are maintained using the current multibyte encoding (as
 defined by @address@hidden environment variables) and not using wide
 characters.  This matches how @command{gawk} stores strings internally
 and also how characters are likely to be input and output from files.
address@hidden quotation
 
 @item
 When retrieving a value (such as a parameter or that of a global variable
@@ -28641,7 +28660,7 @@ scalars, value cookie, array, or ``undefined'').  When 
the request is
 However, if the request and actual type don't match, the access function
 returns ``false'' and fills in the type of the actual value that is there,
 so that the extension can, e.g., print an error message
-(``scalar passed where array expected'').
+(such as ``scalar passed where array expected'').
 
 @c This is documented in the header file and needs some expanding upon.
 @c The table there should be presented here
@@ -28666,7 +28685,7 @@ Chet Ramey
 @end quotation
 
 The extension API defines a number of simple types and structures for general
-purpose use. Additional, more specialized, data structures, are introduced
+purpose use. Additional, more specialized, data structures are introduced
 in subsequent @value{SECTION}s, together with the functions that use them.
 
 @table @code
@@ -28705,7 +28724,7 @@ multibyte encoding.
 @itemx @ @ @ @ AWK_STRING,
 @itemx @ @ @ @ AWK_ARRAY,
 @itemx @ @ @ @ AWK_SCALAR,@ @ @ @ @ @ @ @ @ /* opaque access to a variable */
address@hidden @ @ @ @ AWK_VALUE_COOKIE@ @ @ /* for updating a previously 
created value */
address@hidden @ @ @ @ AWK_VALUE_COOKIE@ @ @ @ /* for updating a previously 
created value */
 @itemx @} awk_valtype_t;
 This @code{enum} indicates the type of a value.
 It is used in the following @code{struct}.
@@ -28898,7 +28917,7 @@ exit with a fatal error message.  They should be used 
as if they were
 procedure calls that do not return a value.
 
 @table @code
address@hidden emalloc(pointer, type, size, message)
address@hidden #define emalloc(pointer, type, size, message) @dots{}
 The arguments to this macro are as follows:
 @c nested table
 @table @code
@@ -28929,7 +28948,7 @@ strcpy(message, greet);
 make_malloced_string(message, strlen(message), & result);
 @end example
 
address@hidden erealloc(pointer, type, size, message)
address@hidden #define erealloc(pointer, type, size, message) @dots{}
 This is like @code{emalloc()}, but it calls @code{realloc()},
 instead of @code{malloc()}.
 The arguments are the same as for the @code{emalloc()} macro.
@@ -28975,6 +28994,7 @@ Function names must obey the rules for @command{awk}
 identifiers. That is, they must begin with either a letter
 or an underscore, which may be followed by any number of
 letters, digits, and underscores.
+Letter case in function names is significant.
 
 @item awk_value_t *(*function)(int num_actual_args, awk_value_t *result);
 This is a pointer to the C function that provides the desired
@@ -29027,8 +29047,8 @@ The parameters are:
 @item funcp
 A pointer to the function to be called before @command{gawk} exits. The 
@code{data}
 parameter will be the original value of @code{arg0}.
-The @code{exit_status} parameter is
-the exit status value that @command{gawk} will pass to the @code{exit()} 
system call.
+The @code{exit_status} parameter is the exit status value that
address@hidden intends to pass to the @code{exit()} system call.
 
 @item arg0
 A pointer to private data which @command{gawk} saves in order to pass to
@@ -29060,7 +29080,7 @@ is invoked with the @option{--version} option.
 
 By default, @command{gawk} reads text files as its input. It uses the value
 of @code{RS} to find the end of the record, and then uses @code{FS}
-(or @code{FIELDWIDTHS}) to split it into fields (@pxref{Reading Files}).
+(or @code{FIELDWIDTHS} or @code{FPAT}) to split it into fields (@pxref{Reading 
Files}).
 Additionally, it sets the value of @code{RT} (@pxref{Built-in Variables}).
 
 If you want, you can provide your own custom input parser.  An input
@@ -29097,7 +29117,7 @@ typedef struct awk_input_parser @{
     const char *name;   /* name of parser */
     awk_bool_t (*can_take_file)(const awk_input_buf_t *iobuf);
     awk_bool_t (*take_control_of)(awk_input_buf_t *iobuf);
-    awk_const struct awk_input_parser *awk_const next;    /* for use by gawk */
+    awk_const struct awk_input_parser *awk_const next;   /* for gawk */
 @} awk_input_parser_t;
 @end example
 
@@ -29176,11 +29196,11 @@ in the @code{struct stat}, or any combination of the 
above.
 
 Once @address@hidden()} has returned true, and
 @command{gawk} has decided to use your input parser, it calls
address@hidden@var{XXX}_take_control_of()}.  That function then fills in at
-least the @code{get_record} field of the @code{awk_input_buf_t}.  It must
-also ensure that @code{fd} is not set to @code{INVALID_HANDLE}.  All of
-the fields that may be filled by @address@hidden()}
-are as follows:
address@hidden@var{XXX}_take_control_of()}.  That function then fills one of
+either the @code{get_record} field or the @code{read_func} field in
+the @code{awk_input_buf_t}.  It must also ensure that @code{fd} is @emph{not}
+set to @code{INVALID_HANDLE}.  All of the fields that may be filled by
address@hidden@var{XXX}_take_control_of()} are as follows:
 
 @table @code
 @item void *opaque;
@@ -29257,8 +29277,8 @@ to zero, so there is no need to set it unless an error 
occurs.
 If an error does occur, the function should return @code{EOF} and set
 @code{*errcode} to a non-zero value.  In that case, if @code{*errcode}
 does not equal @minus{}1, @command{gawk} automatically updates
-the @code{ERRNO} variable based on the value of @code{*errcode} (e.g.,
-setting @samp{*errcode = errno} should do the right thing).
+the @code{ERRNO} variable based on the value of @code{*errcode}.
+(In general, setting @samp{*errcode = errno} should do the right thing.)
 
 As an alternative to supplying a function that returns an input record,
 you may instead supply a function that simply reads bytes, and let
@@ -29307,7 +29327,7 @@ Register the input parser pointed to by 
@code{input_parser} with
 
 An @dfn{output wrapper} is the mirror image of an input parser.
 It allows an extension to take over the output to a file opened
-with the @samp{>} or @samp{>>} operators (@pxref{Redirection}).
+with the @samp{>} or @samp{>>} I/O redirection operators (@pxref{Redirection}).
 
 The output wrapper is very similar to the input parser structure:
 
@@ -29316,7 +29336,7 @@ typedef struct awk_output_wrapper @{
     const char *name;   /* name of the wrapper */
     awk_bool_t (*can_take_file)(const awk_output_buf_t *outbuf);
     awk_bool_t (*take_control_of)(awk_output_buf_t *outbuf);
-    awk_const struct awk_output_wrapper *awk_const next;  /* for use by gawk */
+    awk_const struct awk_output_wrapper *awk_const next;  /* for gawk */
 @} awk_output_wrapper_t;
 @end example
 
@@ -29340,7 +29360,9 @@ fill in appropriate members of the 
@code{awk_output_buf_t} structure,
 as described below, and return true if successful, false otherwise.
 
 @item awk_const struct output_wrapper *awk_const next;
-This is for use by @command{gawk}.
+This is for use by @command{gawk};
+therefore they are marked @code{awk_const} so that the extension cannot
+modify them.
 @end table
 
 The @code{awk_output_buf_t} structure looks like this:
@@ -29431,7 +29453,7 @@ typedef struct awk_two_way_processor @{
     awk_bool_t (*take_control_of)(const char *name,
                                   awk_input_buf_t *inbuf,
                                   awk_output_buf_t *outbuf);
-    awk_const struct awk_two_way_processor *awk_const next;  /* for use by 
gawk */
+    awk_const struct awk_two_way_processor *awk_const next;  /* for gawk */
 @} awk_two_way_processor_t;
 @end example
 
@@ -29454,7 +29476,9 @@ This function should fill in the @code{awk_input_buf_t} 
and
 @code{outbuf}, respectively.  These structures were described earlier.
 
 @item awk_const struct two_way_processor *awk_const next;
-This is for use by @command{gawk}.
+This is for use by @command{gawk};
+therefore they are marked @code{awk_const} so that the extension cannot
+modify them.
 @end table
 
 As with the input parser and output processor, you provide
@@ -29585,10 +29609,14 @@ This routine cannot be used to update any of the 
predefined
 variables (such as @code{ARGC} or @code{NF}).
 @end table
 
+An extension can look up the value of @command{gawk}'s special variables.
+However, with the exception of the @code{PROCINFO} array, an extension
+cannot change any of those variables.
+
 @node Symbol table by cookie
 @subsubsection Variable Access and Update by Cookie
 
-A @dfn{scalar cookie} is an opaque handle that provide access
+A @dfn{scalar cookie} is an opaque handle that provides access
 to a global variable or array. It is an optimization that
 avoids looking up variables in @command{gawk}'s symbol table every time
 access is needed. This was discussed earlier, in @ref{General Data Types}.
@@ -29611,10 +29639,10 @@ Here too, the built-in variables may not be updated.
 @end table
 
 It is not obvious at first glance how to work with scalar cookies or
-what their @i{raison address@hidden really is.  In theory, the 
@code{sym_lookup()}
+what their @i{raison d'@^etre} really is.  In theory, the @code{sym_lookup()}
 and @code{sym_update()} routines are all you really need to work with
-variables.  For example, you might have code that looked up the value of
-a variable, evaluated a condition, and then possibly changed the value
+variables.  For example, you might have code that looks up the value of
+a variable, evaluates a condition, and then possibly changes the value
 of the variable based on the result of that evaluation, like so:
 
 @example
@@ -29786,7 +29814,7 @@ are all the others be changed too?''
 
 That's a great question. The answer is that no, it's not a problem.
 Internally, @command{gawk} uses reference-counted strings. This means
-that many variables can share the same string, and @command{gawk}
+that many variables can share the same string value, and @command{gawk}
 keeps track of the usage.  When a variable's value changes, @command{gawk}
 simply decrements the reference count on the old value and updates
 the variable to use the new value.
@@ -29969,7 +29997,7 @@ To @dfn{flatten} an array is create a structure that
 represents the full array in a fashion that makes it easy
 for C code to traverse the entire array.  Test code
 in @file{extension/testext.c} does this, and also serves
-as a nice example to show how to use the APIs.
+as a nice example showing how to use the APIs.
 
 First, the @command{gawk} script that drives the test extension:
 
@@ -29993,7 +30021,7 @@ This code creates an array with @code{split()} 
(@pxref{String Functions})
 and then calls @code{dump_array_and_delete()}. That function looks up
 the array whose name is passed as the first argument, and
 deletes the element at the index passed in the second argument.
-It then prints the return value and checks if the element
+The @command{awk} code then prints the return value and checks if the element
 was indeed deleted.  Here is the C code that implements
 @code{dump_array_and_delete()}. It has been edited slightly for
 presentation.
@@ -30097,7 +30125,7 @@ element values. In addition, upon finding the element 
with the
 index that is supposed to be deleted, the function sets the
 @code{AWK_ELEMENT_DELETE} bit in the @code{flags} field
 of the element.  When the array is released, @command{gawk}
-traverses the flattened array, and deletes any element which
+traverses the flattened array, and deletes any elements which
 have this flag bit set:
 
 @example
@@ -30195,17 +30223,15 @@ into @command{gawk}, you have to retrieve the array 
cookie from the value
 passed in to @command{sym_update()} before doing anything else with it, like 
so:
 
 @example
-awk_value_t index, value;
+awk_value_t value;
 awk_array_t new_array;
 
-make_const_string("an index", 8, & index);
-
 new_array = create_array();
 val.val_type = AWK_ARRAY;
 val.array_cookie = new_array;
 
 /* install array in the symbol table */
-sym_update("array", & index, & val);
+sym_update("array", & val);
 
 new_array = val.array_cookie;    /* YOU MUST DO THIS */
 @end example
@@ -30575,7 +30601,7 @@ the version string with @command{gawk}.
 @end enumerate
 
 @node Finding Extensions
address@hidden How @command{gawk} Finds Extensions
address@hidden How @command{gawk} Finds Extensions
 
 Compiled extensions have to be installed in a directory where
 @command{gawk} can find them.  If @command{gawk} is configured and
@@ -31035,13 +31061,15 @@ do_stat(int nargs, awk_value_t *result)
     awk_array_t array;
     int ret;
     struct stat sbuf;
-    int (*statfunc)(const char *path, struct stat *sbuf) = lstat;   /* default 
*/
+    /* default is stat() */
+    int (*statfunc)(const char *path, struct stat *sbuf) = lstat;
 
     assert(result != NULL);
 
     if (nargs != 2 && nargs != 3) @{
         if (do_lint)
-            lintwarn(ext_id, _("stat: called with wrong number of arguments"));
+            lintwarn(ext_id,
+               _("stat: called with wrong number of arguments"));
         return make_number(-1, result);
     @}
 @end example
@@ -31321,7 +31349,7 @@ Corresponds to the @code{st_minor} field in the 
@code{struct stat}.
 This element is only present for device files.
 
 @item @code{statdata["blksize"]} @tab
-Corresponds to the @code{st_blksize} field in the @code{struct stat}.
+Corresponds to the @code{st_blksize} field in the @code{struct stat},
 if this field is present on your system.
 (It is present on all modern systems that we know of.)
 
@@ -31353,7 +31381,7 @@ Not all systems support all file types.
 @itemx result = fts(pathlist, flags, filedata)
 Walk the file trees provided in @code{pathlist} and fill in the
 @code{filedata} array as described below.  @code{flags} is the bitwise
-OR of several predefined constant values, also as described below.
+OR of several predefined constant values, also described below.
 Return zero if there were no errors, otherwise return @minus{}1.
 @end table
 
@@ -31398,9 +31426,9 @@ Immediately follow a symbolic link named in 
@code{pathlist},
 whether or not @code{FTS_LOGICAL} is set.
 
 @item FTS_SEEDOT
-By default, the @code{fts()} routines do not return entries for @file{.}
-and @file{..}.  This option causes entries for @file{..} to also
-be included.  (The extension always includes an entry for @file{.},
+By default, the @code{fts()} routines do not return entries for @file{.} (dot)
+and @file{..} (dot-dot).  This option causes entries for dot-dot to also
+be included.  (The extension always includes an entry for dot,
 see below.)
 
 @item FTS_XDEV
@@ -31415,7 +31443,7 @@ The element for this index is itself an array.  There 
are two cases.
 
 @c nested table
 @table @emph
address@hidden The path is a file.
address@hidden The path is a file
 In this case, the array contains two or three elements:
 
 @c doubly nested table
@@ -31435,7 +31463,7 @@ If some kind of error was encountered, the array will 
also
 contain an element named @code{"error"}, which is a string describing the 
error.
 @end table
 
address@hidden The path is a directory.
address@hidden The path is a directory
 In this case, the array contains one element for each entry in the
 directory.  If an entry is a file, that element is as for files, just
 described.  If the entry is a directory, that element is (recursively),
@@ -31489,7 +31517,7 @@ The arguments to @code{fnmatch()} are:
 The filename wildcard to match.
 
 @item string
-The filename string,
+The filename string.
 
 @item flag
 Either zero, or the bitwise OR of one or more of the
@@ -31635,11 +31663,14 @@ The @code{ordchr} extension adds two functions, named
 @code{ord()} and @code{chr()}, as follows.
 
 @table @code
address@hidden @@load "ordchr"
+This is how you load the extension.
+
 @item number = ord(string)
 Return the numeric value of the first character in @code{string}.
 
 @item char = chr(number)
-Return the string whose first character is that represented by @code{number}.
+Return a string whose first character is that represented by @code{number}.
 @end table
 
 These functions are inspired by the Pascal language functions
@@ -31669,8 +31700,8 @@ they are read, with each entry returned as a record.
 The record consists of three fields. The first two are the inode number and the
 filename, separated by a forward slash character.
 On systems where the directory entry contains the file type, the record
-has a third field which is a single letter indicating the type of the
-file:
+has a third field (also separated by a slash) which is a single letter
+indicating the type of the file:
 
 @multitable @columnfractions .1 .9
 @headitem Letter @tab File Type
@@ -31768,8 +31799,8 @@ The array created by @code{reada()} is identical to 
that written by
 @code{writea()} in the sense that the contents are the same. However,
 due to implementation issues, the array traversal order of the recreated
 array is likely to be different from that of the original array.  As array
-traversal order in @command{awk} is by default undefined, this is not
-(technically) a problem.  If you need to guarantee a particular traversal
+traversal order in @command{awk} is by default undefined, this is (technically)
+not a problem.  If you need to guarantee a particular traversal
 order, use the array sorting features in @command{gawk} to do so
 (@pxref{Array Sorting}).
 
@@ -31796,6 +31827,9 @@ The @code{readfile} extension adds a single function
 named @code{readfile()}:
 
 @table @code
address@hidden @@load "readfile"
+This is how you load the extension.
+
 @item result = readfile("/some/path")
 The argument is the name of the file to read.  The return value is a
 string containing the entire contents of the requested file.  Upon error,
@@ -31830,11 +31864,13 @@ for more information.
 @cindex time
 @cindex sleep
 
-These functions can be used by either invoking @command{gawk}
+These functions can be used either by invoking @command{gawk}
 with a command-line argument of @samp{-l time} or by
 inserting @samp{@@load "time"} in your script.
 
 @table @code
address@hidden @@load "time"
+This is how you load the extension.
 
 @cindex @code{gettimeofday} time extension function
 @item the_time = gettimeofday()
@@ -31928,6 +31964,7 @@ make && make check                    @ii{Build and 
check that all is OK}
 If you write an extension that you wish to share with other
 @command{gawk} users, please consider doing so through the
 @code{gawkextlib} project.
+See the project's web site for more information.
 
 @iftex
 @part Part IV:@* Appendices

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

commit a8469ccd952ced2fa39d352bfe0827b571417235
Author: Arnold D. Robbins <address@hidden>
Date:   Fri Apr 26 00:12:44 2013 +0300

    Update nl translation.

diff --git a/po/nl.po b/po/nl.po
index b5d520a..65695c6 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,10 +8,10 @@
 # Erwin Poeze <address@hidden>, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: gawk 4.0.74\n"
+"Project-Id-Version: gawk 4.0.75\n"
 "Report-Msgid-Bugs-To: address@hidden"
 "POT-Creation-Date: 2013-04-17 20:54+0300\n"
-"PO-Revision-Date: 2013-04-03 11:35+0200\n"
+"PO-Revision-Date: 2013-04-25 21:49+0200\n"
 "Last-Translator: Benno Schulenberg <address@hidden>\n"
 "Language-Team: Dutch <address@hidden>\n"
 "Language: nl\n"
@@ -79,27 +79,19 @@ msgstr "asorti: eerste argument is geen array"
 
 #: array.c:828
 msgid "asort: cannot use a subarray of first arg for second arg"
-msgstr ""
-"asort: een subarray van het eerste argument kan niet als tweede argument "
-"gebruikt worden"
+msgstr "asort: een subarray van het eerste argument kan niet als tweede 
argument gebruikt worden"
 
 #: array.c:829
 msgid "asorti: cannot use a subarray of first arg for second arg"
-msgstr ""
-"asorti: een subarray van het eerste argument kan niet als tweede argument "
-"gebruikt worden"
+msgstr "asorti: een subarray van het eerste argument kan niet als tweede 
argument gebruikt worden"
 
 #: array.c:834
 msgid "asort: cannot use a subarray of second arg for first arg"
-msgstr ""
-"asort: een subarray van het tweede argument kan niet als eerste argument "
-"gebruikt worden"
+msgstr "asort: een subarray van het tweede argument kan niet als eerste 
argument gebruikt worden"
 
 #: array.c:835
 msgid "asorti: cannot use a subarray of second arg for first arg"
-msgstr ""
-"asorti: een subarray van het tweede argument kan niet als eerste argument "
-"gebruikt worden"
+msgstr "asorti: een subarray van het tweede argument kan niet als eerste 
argument gebruikt worden"
 
 #: array.c:1309
 #, c-format
@@ -171,8 +163,7 @@ msgstr "'return' wordt gebruikt buiten functiecontext"
 
 #: awkgram.y:922
 msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
-msgstr ""
-"kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' zijn"
+msgstr "kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' 
zijn"
 
 #: awkgram.y:988 awkgram.y:1037
 msgid "`delete' is not allowed with SYMTAB"
@@ -235,8 +226,7 @@ msgstr "indirecte functieaanroepen zijn een 
gawk-uitbreiding"
 #: awkgram.y:1620
 #, c-format
 msgid "can not use special variable `%s' for indirect function call"
-msgstr ""
-"kan speciale variabele '%s' niet voor indirecte functieaanroep gebruiken"
+msgstr "kan speciale variabele '%s' niet voor indirecte functieaanroep 
gebruiken"
 
 #: awkgram.y:1698
 msgid "invalid subscript expression"
@@ -471,8 +461,7 @@ msgstr "functie '%s': kan functienaam niet als 
parameternaam gebruiken"
 #: awkgram.y:4258
 #, c-format
 msgid "function `%s': can't use special variable `%s' as a function parameter"
-msgstr ""
-"functie '%s': kan speciale variabele '%s' niet als functieparameter gebruiken"
+msgstr "functie '%s': kan speciale variabele '%s' niet als functieparameter 
gebruiken"
 
 #: awkgram.y:4266
 #, c-format
@@ -533,16 +522,12 @@ msgstr "exp: argument %g ligt buiten toegestane bereik"
 #: builtin.c:224
 #, c-format
 msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing"
-msgstr ""
-"fflush: kan pijp niet leegmaken: '%s' is geopend om te lezen, niet om te "
-"schrijven"
+msgstr "fflush: kan pijp niet leegmaken: '%s' is geopend om te lezen, niet om 
te schrijven"
 
 #: builtin.c:227
 #, c-format
 msgid "fflush: cannot flush: file `%s' opened for reading, not writing"
-msgstr ""
-"fflush: kan bestand niet leegmaken: '%s' is geopend om te lezen, niet om te "
-"schrijven"
+msgstr "fflush: kan bestand niet leegmaken: '%s' is geopend om te lezen, niet 
om te schrijven"
 
 #: builtin.c:239
 #, c-format
@@ -654,8 +639,7 @@ msgstr "[s]printf: waarde %g ligt buiten toegestaan bereik 
voor opmaak '%%%c'"
 #: builtin.c:1537
 #, c-format
 msgid "ignoring unknown format specifier character `%c': no argument converted"
-msgstr ""
-"onbekend opmaakteken '%c' wordt genegeerd: geen argument is geconverteerd"
+msgstr "onbekend opmaakteken '%c' wordt genegeerd: geen argument is 
geconverteerd"
 
 #: builtin.c:1542
 msgid "fatal: not enough arguments to satisfy format string"
@@ -708,8 +692,7 @@ msgstr "substr: lengte %g is geen integer; wordt afgekapt"
 #: builtin.c:1736
 #, c-format
 msgid "substr: length %g too big for string indexing, truncating to %g"
-msgstr ""
-"substr: lengte %g is te groot voor stringindexering; wordt verkort tot %g"
+msgstr "substr: lengte %g is te groot voor stringindexering; wordt verkort tot 
%g"
 
 #: builtin.c:1748
 #, c-format
@@ -732,11 +715,8 @@ msgstr "substr: startindex %g ligt voorbij het einde van 
de string"
 
 #: builtin.c:1802
 #, c-format
-msgid ""
-"substr: length %g at start index %g exceeds length of first argument (%lu)"
-msgstr ""
-"substr: lengte %g bij startindex %g is groter dan de lengte van het eerste "
-"argument (%lu)"
+msgid "substr: length %g at start index %g exceeds length of first argument 
(%lu)"
+msgstr "substr: lengte %g bij startindex %g is groter dan de lengte van het 
eerste argument (%lu)"
 
 #: builtin.c:1876
 msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
@@ -938,14 +918,14 @@ msgid "info: invalid option - \"%s\""
 msgstr "info: ongeldige optie -- \"%s\""
 
 #: command.y:321
-#, fuzzy, c-format
+#, c-format
 msgid "source \"%s\": already sourced."
-msgstr "bron \"%s\": already sourced."
+msgstr "source \"%s\": is reeds ingelezen."
 
 #: command.y:326
 #, c-format
 msgid "save \"%s\": command not permitted."
-msgstr ""
+msgstr "save \"%s\": commando niet toegestaan."
 
 #: command.y:339
 msgid "Can't use command `commands' for breakpoint/watchpoint commands"
@@ -967,15 +947,15 @@ msgstr ""
 #: command.y:350
 #, c-format
 msgid "End with the command \"end\"\n"
-msgstr ""
+msgstr "Eindig met het commando \"end\".\n"
 
 #: command.y:357
 msgid "`end' valid only in command `commands' or `eval'"
-msgstr ""
+msgstr "'end' is alleen geldig bij de commando's 'commands' en 'eval'"
 
 #: command.y:367
 msgid "`silent' valid only in command `commands'"
-msgstr ""
+msgstr "'silent' is alleen geldig bij het commando 'commands'"
 
 #: command.y:373
 #, c-format
@@ -993,7 +973,7 @@ msgstr "argument is geen string"
 #: command.y:459 command.y:464
 #, c-format
 msgid "option: invalid parameter - \"%s\""
-msgstr ""
+msgstr "option: ongeldige parameter -- \"%s\""
 
 #: command.y:474
 #, c-format
@@ -1023,24 +1003,19 @@ msgid "non-zero integer value"
 msgstr "niet-nul geheel getal"
 
 #: command.y:817
-msgid ""
-"backtrace [N] - print trace of all or N innermost (outermost if N < 0) "
-"frames."
-msgstr ""
+msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) 
frames."
+msgstr "backtrace [N] - trace printen van alle of N binnenste frames (of 
buitenste als N < 0)"
 
 #: command.y:819
-msgid ""
-"break [[filename:]N|function] - set breakpoint at the specified location."
-msgstr ""
+msgid "break [[filename:]N|function] - set breakpoint at the specified 
location."
+msgstr "break [[BESTANDSNAAM:]N|FUNCTIE] - breekpunt zetten op gegeven positie"
 
 #: command.y:821
 msgid "clear [[filename:]N|function] - delete breakpoints previously set."
-msgstr ""
+msgstr "clear [[BESTANDSNAAM:]N|FUNCTIE] - eerder gezet breekpunt verwijderen"
 
 #: command.y:823
-msgid ""
-"commands [num] - starts a list of commands to be executed at a breakpoint"
-"(watchpoint) hit."
+msgid "commands [num] - starts a list of commands to be executed at a 
breakpoint(watchpoint) hit."
 msgstr ""
 
 #: command.y:825
@@ -1061,9 +1036,7 @@ msgstr ""
 
 #: command.y:833
 msgid "display [var] - print value of variable each time the program stops."
-msgstr ""
-"display [VAR] - waarde van variabele printen elke keer dat het programma "
-"stopt"
+msgstr "display [VAR] - waarde van variabele printen elke keer dat het 
programma stopt"
 
 #: command.y:835
 msgid "down [N] - move N frames down the stack."
@@ -1071,7 +1044,7 @@ msgstr ""
 
 #: command.y:837
 msgid "dump [filename] - dump instructions to file or stdout."
-msgstr ""
+msgstr "dump [BESTANDSNAAM] - instructies dumpen op standaarduitvoer of naar 
bestand"
 
 #: command.y:839
 msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints."
@@ -1102,9 +1075,7 @@ msgid "ignore N COUNT - set ignore-count of breakpoint 
number N to COUNT."
 msgstr ""
 
 #: command.y:853
-msgid ""
-"info topic - source|sources|variables|functions|break|frame|args|locals|"
-"display|watch."
+msgid "info topic - 
source|sources|variables|functions|break|frame|args|locals|display|watch."
 msgstr ""
 
 #: command.y:855
@@ -1116,8 +1087,7 @@ msgid "next [COUNT] - step program, proceeding through 
subroutine calls."
 msgstr ""
 
 #: command.y:859
-msgid ""
-"nexti [COUNT] - step one instruction, but proceed through subroutine calls."
+msgid "nexti [COUNT] - step one instruction, but proceed through subroutine 
calls."
 msgstr ""
 
 #: command.y:861
@@ -1153,8 +1123,7 @@ msgid "set var = value - assign value to a scalar 
variable."
 msgstr "set VAR = WAARDE - een waarde aan een scalaire variabele toekennen"
 
 #: command.y:879
-msgid ""
-"silent - suspends usual message when stopped at a breakpoint/watchpoint."
+msgid "silent - suspends usual message when stopped at a 
breakpoint/watchpoint."
 msgstr ""
 
 #: command.y:881
@@ -1163,8 +1132,7 @@ msgstr "source BESTANDSNAAM - commando's uit dit bestand 
uitvoeren"
 
 #: command.y:883
 msgid "step [COUNT] - step program until it reaches a different source line."
-msgstr ""
-"step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt is"
+msgstr "step [AANTAL] - programma uitvoeren tot een andere bronregel bereikt 
is"
 
 #: command.y:885
 msgid "stepi [COUNT] - step one instruction exactly."
@@ -1183,9 +1151,7 @@ msgid "undisplay [N] - remove variable(s) from automatic 
display list."
 msgstr ""
 
 #: command.y:893
-msgid ""
-"until [[filename:]N|function] - execute until program reaches a different "
-"line or line N within current frame."
+msgid "until [[filename:]N|function] - execute until program reaches a 
different line or line N within current frame."
 msgstr ""
 
 #: command.y:895
@@ -1488,12 +1454,12 @@ msgstr ""
 #: debug.c:1891
 #, c-format
 msgid " in file `%s', line %d\n"
-msgstr ""
+msgstr " in bestand '%s', regel %d\n"
 
 #: debug.c:1912
 #, c-format
 msgid " at `%s':%d"
-msgstr ""
+msgstr " op '%s':%d"
 
 #: debug.c:1928 debug.c:1991
 #, c-format
@@ -1512,32 +1478,32 @@ msgstr "ongeldig framenummer"
 #: debug.c:2180
 #, c-format
 msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d"
-msgstr ""
+msgstr "Opmerking: breekpunt %d (ingeschakeld, volgende %ld passages 
genegeerd), ook gezet op %s:%d"
 
 #: debug.c:2187
 #, c-format
 msgid "Note: breakpoint %d (enabled), also set at %s:%d"
-msgstr ""
+msgstr "Opmerking: breekpunt %d (ingeschakeld), ook gezet op %s:%d"
 
 #: debug.c:2194
 #, c-format
 msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d"
-msgstr ""
+msgstr "Opmerking: breekpunt %d (uitgeschakeld, volgende %ld passages 
genegeerd), ook gezet op %s:%d"
 
 #: debug.c:2201
 #, c-format
 msgid "Note: breakpoint %d (disabled), also set at %s:%d"
-msgstr ""
+msgstr "Opmerking: breekpunt %d (uitgeschakeld), ook gezet op %s:%d"
 
 #: debug.c:2218
 #, c-format
 msgid "Breakpoint %d set at file `%s', line %d\n"
-msgstr ""
+msgstr "Breekpunt %d is gezet in bestand '%s', op regel %d\n"
 
 #: debug.c:2320
 #, c-format
 msgid "Can't set breakpoint in file `%s'\n"
-msgstr ""
+msgstr "Kan geen breekpunt zetten in bestand '%s'\n"
 
 #: debug.c:2349 debug.c:2472 debug.c:3330
 #, c-format
@@ -1547,22 +1513,22 @@ msgstr "regelnummer %d in bestand '%s' valt buiten 
bereik"
 #: debug.c:2353
 #, c-format
 msgid "Can't find rule!!!\n"
-msgstr ""
+msgstr "Kan regel niet vinden!!!\n"
 
 #: debug.c:2355
 #, c-format
 msgid "Can't set breakpoint at `%s':%d\n"
-msgstr ""
+msgstr "Kan geen breekpunt zetten op '%s':%d\n"
 
 #: debug.c:2367
 #, c-format
 msgid "Can't set breakpoint in function `%s'\n"
-msgstr ""
+msgstr "Kan geen breekpunt zetten in functie '%s'\n"
 
 #: debug.c:2383
 #, c-format
 msgid "breakpoint %d set at file `%s', line %d is unconditional\n"
-msgstr ""
+msgstr "breekpunt %d (gezet in bestand '%s', op regel %d) is onconditioneel\n"
 
 #: debug.c:2488 debug.c:2510
 #, c-format
@@ -1572,7 +1538,7 @@ msgstr "Breekpunt %d is verwijderd"
 #: debug.c:2494
 #, c-format
 msgid "No breakpoint(s) at entry to function `%s'\n"
-msgstr ""
+msgstr "Geen breekpunt(en) bij binnengaan van functie '%s'\n"
 
 #: debug.c:2521
 #, c-format
@@ -1585,21 +1551,21 @@ msgstr "ongeldig breekpuntnummer"
 
 #: debug.c:2592
 msgid "Delete all breakpoints? (y or n) "
-msgstr ""
+msgstr "Alle breekpunten verwijderen? (j of n) "
 
 #: debug.c:2593 debug.c:2903 debug.c:2956
 msgid "y"
-msgstr ""
+msgstr "j"
 
 #: debug.c:2642
 #, c-format
 msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n"
-msgstr ""
+msgstr "Zal de volgende %ld passage(s) van breekpunt %d negeren.\n"
 
 #: debug.c:2646
 #, c-format
 msgid "Will stop next time breakpoint %d is reached.\n"
-msgstr ""
+msgstr "Zal de volgende keer dat breekpunt %d wordt bereikt stoppen.\n"
 
 #: debug.c:2763
 #, c-format
@@ -1609,55 +1575,55 @@ msgstr ""
 #: debug.c:2888
 #, c-format
 msgid "Failed to restart debugger"
-msgstr ""
+msgstr "Herstarten van debugger is mislukt"
 
 #: debug.c:2902
 msgid "Program already running. Restart from beginning (y/n)? "
-msgstr ""
+msgstr "Programma draait al. Herstarten vanaf begin (j/n)? "
 
 #: debug.c:2906
 #, c-format
 msgid "Program not restarted\n"
-msgstr ""
+msgstr "Programma is niet herstart\n"
 
 #: debug.c:2916
 #, c-format
 msgid "error: cannot restart, operation not allowed\n"
-msgstr ""
+msgstr "fout: kan niet herstarten; operatie is niet toegestaan\n"
 
 #: debug.c:2922
 #, c-format
 msgid "error (%s): cannot restart, ignoring rest of the commands\n"
-msgstr ""
+msgstr "fout(%s): kan niet herstarten; de resterende commando's worden 
genegeerd\n"
 
 #: debug.c:2930
 #, c-format
 msgid "Starting program: \n"
-msgstr ""
+msgstr "Starten van programma: \n"
 
 #: debug.c:2939
 #, c-format
 msgid "Program exited %s with exit value: %d\n"
-msgstr ""
+msgstr "Programma verliet %s met afsluitwaarde %d\n"
 
 #: debug.c:2955
 msgid "The program is running. Exit anyway (y/n)? "
-msgstr ""
+msgstr "Het programma draait. Toch afsluiten (j/n)? "
 
 #: debug.c:2990
 #, c-format
 msgid "Not stopped at any breakpoint; argument ignored.\n"
-msgstr ""
+msgstr "Niet gestopt op een breekpunt; argument is genegeerd.\n"
 
 #: debug.c:2995
 #, c-format
 msgid "invalid breakpoint number %d."
-msgstr ""
+msgstr "ongeldig breekpuntnummer %d."
 
 #: debug.c:3000
 #, c-format
 msgid "Will ignore next %ld crossings of breakpoint %d.\n"
-msgstr ""
+msgstr "Zal de volgende %ld passages van breekpunt %d negeren.\n"
 
 #: debug.c:3187
 #, c-format
@@ -1667,7 +1633,7 @@ msgstr ""
 #: debug.c:3192
 #, c-format
 msgid "Run till return from "
-msgstr ""
+msgstr "Draaien tot terugkeer uit "
 
 #: debug.c:3235
 #, c-format
@@ -1677,7 +1643,7 @@ msgstr ""
 #: debug.c:3349
 #, c-format
 msgid "Can't find specified location in function `%s'\n"
-msgstr ""
+msgstr "Kan gegeven locatie in functie '%s' niet vinden\n"
 
 #: debug.c:3357
 #, c-format
@@ -1687,7 +1653,7 @@ msgstr "ongeldige bronregel %d in bestand '%s'"
 #: debug.c:3372
 #, c-format
 msgid "Can't find specified location %d in file `%s'\n"
-msgstr ""
+msgstr "Kan gegeven locatie %d in bestand '%s' niet vinden\n"
 
 #: debug.c:3404
 #, c-format
@@ -1702,7 +1668,7 @@ msgstr "ongetypeerde variabele\n"
 #: debug.c:3446
 #, c-format
 msgid "Stopping in %s ...\n"
-msgstr ""
+msgstr "Stoppend in %s...\n"
 
 #: debug.c:3523
 #, c-format
@@ -1716,11 +1682,11 @@ msgstr ""
 
 #: debug.c:4165
 msgid "\t------[Enter] to continue or q [Enter] to quit------"
-msgstr ""
+msgstr "\t------[Enter] om verder te gaan, of [q] [Enter] om af te 
sluiten------"
 
 #: debug.c:4166
 msgid "q"
-msgstr ""
+msgstr "q"
 
 #: debug.c:4986
 #, c-format
@@ -1905,10 +1871,8 @@ msgstr "load_ext: kan bibliotheek '%s' niet openen 
(%s)\n"
 
 #: ext.c:104
 #, c-format
-msgid ""
-"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
-msgstr ""
-"load_ext: bibliotheek '%s' definieert 'plugin_is_GPL_compatible' niet (%s)\n"
+msgid "load_ext: library `%s': does not define `plugin_is_GPL_compatible' 
(%s)\n"
+msgstr "load_ext: bibliotheek '%s' definieert 'plugin_is_GPL_compatible' niet 
(%s)\n"
 
 #: ext.c:110
 #, c-format
@@ -1931,10 +1895,8 @@ msgstr "extension: kan bibliotheek '%s' niet openen (%s)"
 
 #: ext.c:186
 #, c-format
-msgid ""
-"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
-msgstr ""
-"extension: bibliotheek '%s' definieert 'plugin_is_GPL_compatible' niet (%s)"
+msgid "extension: library `%s': does not define `plugin_is_GPL_compatible' 
(%s)"
+msgstr "extension: bibliotheek '%s' definieert 'plugin_is_GPL_compatible' niet 
(%s)"
 
 #: ext.c:190
 #, c-format
@@ -1963,8 +1925,7 @@ msgstr "make_builtin: functienaam '%s' is al eerder 
gedefinieerd"
 #: ext.c:248
 #, c-format
 msgid "make_builtin: can't use gawk built-in `%s' as function name"
-msgstr ""
-"make_builtin: kan in gawk ingebouwde '%s' niet als functienaam gebruiken"
+msgstr "make_builtin: kan in gawk ingebouwde '%s' niet als functienaam 
gebruiken"
 
 #: ext.c:251 ext.c:304
 #, c-format
@@ -2003,8 +1964,7 @@ msgstr "extension: kan in gawk ingebouwde '%s' niet als 
functienaam gebruiken"
 #: ext.c:374
 #, c-format
 msgid "function `%s' defined to take no more than %d argument(s)"
-msgstr ""
-"functie '%s' is gedefinieerd om niet meer dan %d argument(en) te accepteren"
+msgstr "functie '%s' is gedefinieerd om niet meer dan %d argument(en) te 
accepteren"
 
 #: ext.c:377
 #, c-format
@@ -2027,8 +1987,7 @@ msgstr "het dynamisch laden van de bibliotheek wordt niet 
ondersteund"
 
 #: extension/filefuncs.c:97
 msgid "chdir: called with incorrect number of arguments, expecting 1"
-msgstr ""
-"chdir: aangeroepen met onjuist aantal argumenten; één wordt er verwacht"
+msgstr "chdir: aangeroepen met onjuist aantal argumenten; één wordt er 
verwacht"
 
 #: extension/filefuncs.c:343
 #, c-format
@@ -2075,8 +2034,7 @@ msgstr "fts-verwerking: kan element niet instellen"
 
 #: extension/filefuncs.c:671
 msgid "fts: called with incorrect number of arguments, expecting 3"
-msgstr ""
-"fts: aangeroepen met onjuist aantal argumenten; drie worden er verwacht"
+msgstr "fts: aangeroepen met onjuist aantal argumenten; drie worden er 
verwacht"
 
 #: extension/filefuncs.c:674
 msgid "fts: bad first parameter"
@@ -2161,89 +2119,91 @@ msgstr "wait: aangeroepen met te veel argumenten"
 
 #: extension/inplace.c:110
 msgid "inplace_begin: in-place editing already active"
-msgstr ""
+msgstr "inplace_begin(): in-situ-bewerken is al actief"
 
 #: extension/inplace.c:113 extension/inplace.c:187
 #, c-format
 msgid "inplace_begin: expects 2 arguments but called with %d"
-msgstr ""
+msgstr "inplace_begin(): verwachtte twee argumenten maar is aangeroepen met %d"
 
 #: extension/inplace.c:116
+#, fuzzy
 msgid "inplace_begin: cannot retrieve 1st argument as a string filename"
-msgstr ""
+msgstr "inplace_begin(): kan eerste argument niet als bestandsnaamstring 
oppakken"
 
 #: extension/inplace.c:124
 #, c-format
 msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'"
-msgstr ""
+msgstr "inplace_begin(): in-situ-bewerken wordt uitgeschakeld voor ongeldige 
bestandsnaam '%s'"
 
 #: extension/inplace.c:131
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_begin: Cannot stat `%s' (%s)"
-msgstr "load_ext: kan bibliotheek '%s' niet openen (%s)\n"
+msgstr "inplace_begin(): Kan status van '%s' niet bepalen (%s)"
 
 #: extension/inplace.c:138
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_begin: `%s' is not a regular file"
-msgstr "'%s' is geen scalaire variabele"
+msgstr "inplace_begin(): '%s' is geen normaal bestand"
 
 #: extension/inplace.c:149
 #, c-format
 msgid "inplace_begin: mkstemp(`%s') failed (%s)"
-msgstr ""
+msgstr "inplace_begin(): mkstemp('%s') is mislukt (%s)"
 
 #: extension/inplace.c:158
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_begin: chmod failed (%s)"
-msgstr "%s: sluiten is mislukt (%s)"
+msgstr "inplace_begin(): chmod is mislukt (%s)"
 
 #: extension/inplace.c:165
 #, c-format
 msgid "inplace_begin: dup(stdout) failed (%s)"
-msgstr ""
+msgstr "inplace_begin(): dup(stdout) is mislukt (%s)"
 
 #: extension/inplace.c:168
 #, c-format
 msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
-msgstr ""
+msgstr "inplace_begin(): dup2(%d, stdout) is mislukt (%s)"
 
 #: extension/inplace.c:171
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_begin: close(%d) failed (%s)"
-msgstr "%s: sluiten is mislukt (%s)"
+msgstr "inplace_begin(): close(%d) is mislukt (%s)"
 
 #: extension/inplace.c:190
+#, fuzzy
 msgid "inplace_end: cannot retrieve 1st argument as a string filename"
-msgstr ""
+msgstr "inplace_end(): kan eerste argument niet als bestandsnaamstring 
oppakken"
 
 #: extension/inplace.c:197
 msgid "inplace_end: in-place editing not active"
-msgstr ""
+msgstr "inplace_end(): in-situ-bewerken is niet actief"
 
 #: extension/inplace.c:203
 #, c-format
 msgid "inplace_end: dup2(%d, stdout) failed (%s)"
-msgstr ""
+msgstr "inplace_end(): dup2(%d, stdout) is mislukt (%s)"
 
 #: extension/inplace.c:206
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_end: close(%d) failed (%s)"
-msgstr "%s: sluiten is mislukt (%s)"
+msgstr "inplace_end(): close(%d) is mislukt (%s)"
 
 #: extension/inplace.c:210
 #, c-format
 msgid "inplace_end: fsetpos(stdout) failed (%s)"
-msgstr ""
+msgstr "inplace_end(): fsetpos(stdout) is mislukt (%s)"
 
 #: extension/inplace.c:223
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_end: link(`%s', `%s') failed (%s)"
-msgstr "leegmaken van pijp '%s' is mislukt (%s)"
+msgstr "inplace_end(): link('%s', '%s') is mislukt (%s)"
 
 #: extension/inplace.c:229
-#, fuzzy, c-format
+#, c-format
 msgid "inplace_end: rename(`%s', `%s') failed (%s)"
-msgstr "sluiten van bestandsdescriptor %d ('%s') is mislukt (%s)"
+msgstr "inplace_end(): rename('%s', '%s') is mislukt (%s)"
 
 #: extension/ordchr.c:69
 msgid "ord: called with too many arguments"
@@ -2372,21 +2332,15 @@ msgstr "split: tweede argument is geen array"
 
 #: field.c:986
 msgid "split: cannot use the same array for second and fourth args"
-msgstr ""
-"split: hetzelfde array kan niet zowel als tweede als als vierde argument "
-"gebruikt worden"
+msgstr "split: hetzelfde array kan niet zowel als tweede als als vierde 
argument gebruikt worden"
 
 #: field.c:991
 msgid "split: cannot use a subarray of second arg for fourth arg"
-msgstr ""
-"split: een subarray van het tweede argument kan niet als vierde argument "
-"gebruikt worden"
+msgstr "split: een subarray van het tweede argument kan niet als vierde 
argument gebruikt worden"
 
 #: field.c:994
 msgid "split: cannot use a subarray of fourth arg for second arg"
-msgstr ""
-"split: een subarray van het vierde argument kan niet als tweede argument "
-"gebruikt worden"
+msgstr "split: een subarray van het vierde argument kan niet als tweede 
argument gebruikt worden"
 
 #: field.c:1023
 msgid "split: null string for third arg is a gawk extension"
@@ -2406,21 +2360,15 @@ msgstr "patsplit: derde argument moet niet-nil zijn"
 
 #: field.c:1078
 msgid "patsplit: cannot use the same array for second and fourth args"
-msgstr ""
-"patsplit: hetzelfde array kan niet zowel als tweede als als vierde argument "
-"gebruikt worden"
+msgstr "patsplit: hetzelfde array kan niet zowel als tweede als als vierde 
argument gebruikt worden"
 
 #: field.c:1083
 msgid "patsplit: cannot use a subarray of second arg for fourth arg"
-msgstr ""
-"patsplit: een subarray van het tweede argument kan niet als vierde argument "
-"gebruikt worden"
+msgstr "patsplit: een subarray van het tweede argument kan niet als vierde 
argument gebruikt worden"
 
 #: field.c:1086
 msgid "patsplit: cannot use a subarray of fourth arg for second arg"
-msgstr ""
-"patsplit: een subarray van het vierde argument kan niet als tweede argument "
-"gebruikt worden"
+msgstr "patsplit: een subarray van het vierde argument kan niet als tweede 
argument gebruikt worden"
 
 #: field.c:1124
 msgid "`FIELDWIDTHS' is a gawk extension"
@@ -2560,9 +2508,7 @@ msgstr "expressie voor omleiding '%s' heeft een lege 
string als waarde"
 #: io.c:711
 #, c-format
 msgid "filename `%s' for `%s' redirection may be result of logical expression"
-msgstr ""
-"bestandsnaam '%s' voor omleiding '%s' kan het resultaat zijn van een "
-"logische expressie"
+msgstr "bestandsnaam '%s' voor omleiding '%s' kan het resultaat zijn van een 
logische expressie"
 
 #: io.c:754
 #, c-format
@@ -2595,10 +2541,8 @@ msgid "can't redirect to `%s' (%s)"
 msgstr "kan niet omleiden naar '%s' (%s)"
 
 #: io.c:986
-msgid ""
-"reached system limit for open files: starting to multiplex file descriptors"
-msgstr ""
-"systeemgrens voor aantal open bestanden is bereikt: begonnen met multiplexen"
+msgid "reached system limit for open files: starting to multiplex file 
descriptors"
+msgstr "systeemgrens voor aantal open bestanden is bereikt: begonnen met 
multiplexen"
 
 #: io.c:1002
 #, c-format
@@ -2625,9 +2569,7 @@ msgstr "sluiten van een nooit-geopende omleiding"
 #: io.c:1151
 #, c-format
 msgid "close: redirection `%s' not opened with `|&', second argument ignored"
-msgstr ""
-"close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt "
-"genegeerd"
+msgstr "close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt 
genegeerd"
 
 #: io.c:1168
 #, c-format
@@ -2734,9 +2676,7 @@ msgstr "kan standaarduitvoer van dochterproces niet 
sluiten (%s)"
 #: io.c:1855
 #, c-format
 msgid "moving slave pty to stdout in child failed (dup: %s)"
-msgstr ""
-"kan slaaf-pty niet overzetten naar standaarduitvoer van dochterproces (dup: "
-"%s)"
+msgstr "kan slaaf-pty niet overzetten naar standaarduitvoer van dochterproces 
(dup: %s)"
 
 #: io.c:1857 io.c:2033
 #, c-format
@@ -2746,9 +2686,7 @@ msgstr "kan standaardinvoer van dochterproces niet 
sluiten (%s)"
 #: io.c:1860
 #, c-format
 msgid "moving slave pty to stdin in child failed (dup: %s)"
-msgstr ""
-"kan slaaf-pty niet overzetten naar standaardinvoer van dochterproces (dup: "
-"%s)"
+msgstr "kan slaaf-pty niet overzetten naar standaardinvoer van dochterproces 
(dup: %s)"
 
 #: io.c:1862 io.c:1883
 #, c-format
@@ -2758,14 +2696,12 @@ msgstr "kan slaaf-pty niet sluiten (%s)"
 #: io.c:1969 io.c:2031 io.c:2175 io.c:2201
 #, c-format
 msgid "moving pipe to stdout in child failed (dup: %s)"
-msgstr ""
-"kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: %s)"
+msgstr "kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: 
%s)"
 
 #: io.c:1976 io.c:2036
 #, c-format
 msgid "moving pipe to stdin in child failed (dup: %s)"
-msgstr ""
-"kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: %s)"
+msgstr "kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: 
%s)"
 
 #: io.c:1996 io.c:2191
 msgid "restoring stdout in parent process failed\n"
@@ -2814,8 +2750,7 @@ msgstr "register_output_wrapper(): NULL-pointer gekregen"
 
 #: io.c:2754
 #, c-format
-msgid ""
-"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
+msgid "output wrapper `%s' conflicts with previously installed output wrapper 
`%s'"
 msgstr ""
 
 #: io.c:2761
@@ -2829,9 +2764,7 @@ msgstr "register_output_processor(): NULL-pointer 
gekregen"
 
 #: io.c:2811
 #, c-format
-msgid ""
-"two-way processor `%s' conflicts with previously installed two-way processor "
-"`%s'"
+msgid "two-way processor `%s' conflicts with previously installed two-way 
processor `%s'"
 msgstr ""
 
 #: io.c:2820
@@ -3230,8 +3163,7 @@ msgstr "%s: negatieve waarde %2$Rg van argument #%1$d 
geeft rare resultaten"
 
 #: mpfr.c:863
 msgid "%s: argument #%d fractional value %Rg will be truncated"
-msgstr ""
-"%s: cijfers na de komma van waarde %2$Rg van argument #%1$d worden afgekapt"
+msgstr "%s: cijfers na de komma van waarde %2$Rg van argument #%1$d worden 
afgekapt"
 
 #: mpfr.c:878
 #, c-format
@@ -3262,12 +3194,8 @@ msgstr "geen hex cijfers in stuurcodereeks '\\x'"
 
 #: node.c:579
 #, c-format
-msgid ""
-"hex escape \\x%.*s of %d characters probably not interpreted the way you "
-"expect"
-msgstr ""
-"hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet "
-"afgehandeld zoals u verwacht"
+msgid "hex escape \\x%.*s of %d characters probably not interpreted the way 
you expect"
+msgstr "hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet 
afgehandeld zoals u verwacht"
 
 #: node.c:594
 #, c-format
@@ -3275,9 +3203,7 @@ msgid "escape sequence `\\%c' treated as plain `%c'"
 msgstr "stuurcodereeks '\\%c' behandeld als normale '%c'"
 
 #: node.c:739
-msgid ""
-"Invalid multibyte data detected. There may be a mismatch between your data "
-"and your locale."
+msgid "Invalid multibyte data detected. There may be a mismatch between your 
data and your locale."
 msgstr ""
 "Ongeldige multibyte-gegevens gevonden.\n"
 "Uw gegevens passen vermoedelijk niet bij uw taalregio."
@@ -3285,9 +3211,7 @@ msgstr ""
 #: posix/gawkmisc.c:177
 #, c-format
 msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)"
-msgstr ""
-"%s %s '%s': kan bestandsdescriptorvlaggen niet verkrijgen: (fcntl F_GETFD: "
-"%s)"
+msgstr "%s %s '%s': kan bestandsdescriptorvlaggen niet verkrijgen: (fcntl 
F_GETFD: %s)"
 
 #: posix/gawkmisc.c:189
 #, c-format
@@ -3359,15 +3283,12 @@ msgstr "redir2str(): onbekend omleidingstype %d"
 #: re.c:583
 #, c-format
 msgid "range of the form `[%c-%c]' is locale dependent"
-msgstr ""
-"de betekenis van een bereik van de vorm '[%c-%c]' is afhankelijk van de "
-"taalregio"
+msgstr "de betekenis van een bereik van de vorm '[%c-%c]' is afhankelijk van 
de taalregio"
 
 #: re.c:610
 #, c-format
 msgid "regexp component `%.*s' should probably be `[%.*s]'"
-msgstr ""
-"component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' zijn"
+msgstr "component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' 
zijn"
 
 #: regcomp.c:131
 msgid "Success"
@@ -3506,11 +3427,8 @@ msgstr ""
 #~ msgid "statement has no effect"
 #~ msgstr "opdracht heeft geen effect"
 
-#~ msgid ""
-#~ "for loop: array `%s' changed size from %ld to %ld during loop execution"
-#~ msgstr ""
-#~ "for: array '%s' veranderde van grootte %ld naar %ld tijdens uitvoer van "
-#~ "de lus"
+#~ msgid "for loop: array `%s' changed size from %ld to %ld during loop 
execution"
+#~ msgstr "for: array '%s' veranderde van grootte %ld naar %ld tijdens uitvoer 
van de lus"
 
 #~ msgid "function called indirectly through `%s' does not exist"
 #~ msgstr "indirect (via '%s') aangeroepen functie bestaat niet"
@@ -3546,8 +3464,7 @@ msgstr ""
 #~ msgstr "kan groepen niet vinden: %s"
 
 #~ msgid "assignment is not allowed to result of builtin function"
-#~ msgstr ""
-#~ "toewijzing aan het resultaat van een ingebouwde functie is niet toegestaan"
+#~ msgstr "toewijzing aan het resultaat van een ingebouwde functie is niet 
toegestaan"
 
 #~ msgid "attempt to use array in a scalar context"
 #~ msgstr "array wordt gebruikt in een scalaire context"
@@ -3585,12 +3502,8 @@ msgstr ""
 #~ msgid "`nextfile' cannot be called from a BEGIN rule"
 #~ msgstr "'nextfile' kan niet aangeroepen worden in een BEGIN-regel"
 
-#~ msgid ""
-#~ "concatenation: side effects in one expression have changed the length of "
-#~ "another!"
-#~ msgstr ""
-#~ "concatenation: neveneffecten in de ene expressie hebben de lengte van een "
-#~ "andere veranderd!"
+#~ msgid "concatenation: side effects in one expression have changed the 
length of another!"
+#~ msgstr "concatenation: neveneffecten in de ene expressie hebben de lengte 
van een andere veranderd!"
 
 #~ msgid "illegal type (%s) in tree_eval"
 #~ msgstr "ongeldig type (%s) in tree_eval()"

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

Summary of changes:
 doc/ChangeLog       |    6 +
 doc/api-figure2.eps |    8 +-
 doc/api-figure2.fig |    2 +-
 doc/api-figure2.pdf |  Bin 12027 -> 12031 bytes
 doc/api-figure2.png |  Bin 8963 -> 8983 bytes
 doc/gawk.info       | 1021 ++++++++++++++++++++++++++-------------------------
 doc/gawk.texi       |  227 +++++++-----
 doc/gawkman.texi    |  227 +++++++-----
 po/nl.po            |  351 +++++++-----------
 9 files changed, 931 insertions(+), 911 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

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