aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--awklib/eg/lib/strtonum.awk10
-rw-r--r--doc/ChangeLog4
-rw-r--r--doc/gawk.info1249
-rw-r--r--doc/gawk.texi250
-rw-r--r--doc/gawktexi.in250
5 files changed, 1207 insertions, 556 deletions
diff --git a/awklib/eg/lib/strtonum.awk b/awklib/eg/lib/strtonum.awk
index a56ab50c..9342e789 100644
--- a/awklib/eg/lib/strtonum.awk
+++ b/awklib/eg/lib/strtonum.awk
@@ -3,8 +3,9 @@
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
# February, 2004
+# Revised June, 2014
-function mystrtonum(str, ret, chars, n, i, k, c)
+function mystrtonum(str, ret, n, i, k, c)
{
if (str ~ /^0[0-7]*$/) {
# octal
@@ -17,7 +18,7 @@ function mystrtonum(str, ret, chars, n, i, k, c)
ret = ret * 8 + k
}
- } else if (str ~ /^0[xX][[:xdigit:]]+/) {
+ } else if (str ~ /^0[xX][[:xdigit:]]+$/) {
# hexadecimal
str = substr(str, 3) # lop off leading 0x
n = length(str)
@@ -25,10 +26,7 @@ function mystrtonum(str, ret, chars, n, i, k, c)
for (i = 1; i <= n; i++) {
c = substr(str, i, 1)
c = tolower(c)
- if ((k = index("0123456789", c)) > 0)
- k-- # adjust for 1-basing in awk
- else if ((k = index("abcdef", c)) > 0)
- k += 9
+ k = index("123456789abcdef", c)
ret = ret * 16 + k
}
diff --git a/doc/ChangeLog b/doc/ChangeLog
index d047e041..bd71b017 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Finish up summaries. Improvements in mystrtonum().
+
2014-06-13 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: Fix typos from changes of 3 June when macros were
diff --git a/doc/gawk.info b/doc/gawk.info
index 2e30ad95..d7442017 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -1614,7 +1614,7 @@ at a later time.
will probably print strange messages about syntax errors. For
example, look at the following:
- $ awk '{ print "hello" } # let's be cute'
+ $ awk 'BEGIN { print "hello" } # let's be cute'
>
The shell sees that the first two quotes match, and that a new
@@ -14253,7 +14253,7 @@ versions of `awk':
# mystrtonum --- convert string to number
- function mystrtonum(str, ret, chars, n, i, k, c)
+ function mystrtonum(str, ret, n, i, k, c)
{
if (str ~ /^0[0-7]*$/) {
# octal
@@ -14266,7 +14266,7 @@ versions of `awk':
ret = ret * 8 + k
}
- } else if (str ~ /^0[xX][[:xdigit:]]+/) {
+ } else if (str ~ /^0[xX][[:xdigit:]]+$/) {
# hexadecimal
str = substr(str, 3) # lop off leading 0x
n = length(str)
@@ -14274,10 +14274,7 @@ versions of `awk':
for (i = 1; i <= n; i++) {
c = substr(str, i, 1)
c = tolower(c)
- if ((k = index("0123456789", c)) > 0)
- k-- # adjust for 1-basing in awk
- else if ((k = index("abcdef", c)) > 0)
- k += 9
+ k = index("123456789abcdef", c)
ret = ret * 16 + k
}
@@ -22310,6 +22307,7 @@ sample extensions are automatically built and installed when `gawk' is.
* Extension Samples:: The sample extensions that ship with
`gawk'.
* gawkextlib:: The `gawkextlib' project.
+* Extension summary:: Extension summary.

File: gawk.info, Node: Extension Intro, Next: Plugin License, Up: Dynamic Extensions
@@ -22501,7 +22499,7 @@ through function pointers passed into your extension.
API function pointers are provided for the following kinds of
operations:
- * Registrations functions. You may register:
+ * Registration functions. You may register:
- extension functions,
- exit callbacks,
@@ -25614,7 +25612,7 @@ The `time' extension adds two functions, named `gettimeofday()' and
delay.

-File: gawk.info, Node: gawkextlib, Prev: Extension Samples, Up: Dynamic Extensions
+File: gawk.info, Node: gawkextlib, Next: Extension summary, Prev: Extension Samples, Up: Dynamic Extensions
16.8 The `gawkextlib' Project
=============================
@@ -25684,6 +25682,95 @@ users, please consider doing so through the `gawkextlib' project. See
the project's web site for more information.

+File: gawk.info, Node: Extension summary, Prev: gawkextlib, Up: Dynamic Extensions
+
+16.9 Summary
+============
+
+ * You can write extensions (sometimes called plug-ins) for `gawk' in
+ C or C++ using the Application Programming Interface (API) defined
+ by the `gawk' developers.
+
+ * Extensions must have a license compatible with the GNU General
+ Public License (GPL), and they must assert that fact by declaring
+ a variable named `plugin_is_GPL_compatible'.
+
+ * Communication between `gawk' and an extension is two-way. `gawk'
+ passes a `struct' to the extension which contains various data
+ fields and function pointers. The extension can then call into
+ `gawk' via the supplied function pointers to accomplish certain
+ tasks.
+
+ * One of these tasks is to "register" the name and implementation of
+ a new `awk'-level function with `gawk'. The implementation takes
+ the form of a C function pointer with a defined signature. By
+ convention, implementation functions are named `do_XXXX()' for
+ some `awk'-level function `XXXX()'.
+
+ * The API is defined in a header file named `gawkpi.h'. You must
+ include a number of standard header files _before_ including it in
+ your source file.
+
+ * API function pointers are provided for the following kinds of
+ operations:
+
+ * Registration functions. You may register extension functions,
+ exit callbacks, a version string, input parsers, output
+ wrappers, and two-way processors.
+
+ * Printing fatal, warning, and "lint" warning messages.
+
+ * Updating `ERRNO', or unsetting it.
+
+ * Accessing parameters, including converting an undefined
+ parameter into an array.
+
+ * Symbol table access: retrieving a global variable, creating
+ one, or changing one.
+
+ * Allocating, reallocating, and releasing memory.
+
+ * 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;
+ creating a new array; clearing an array; and flattening an
+ array for easy C style looping over all its indices and
+ elements
+
+ * The API defines a number of standard data types for representing
+ `awk' values, array elements, and arrays.
+
+ * The API provide convenience functions for constructing values. It
+ also provides memory management functions to ensure compatibility
+ between memory allocated by `gawk' and memory allocated by an
+ extension.
+
+ * _All_ memory passed from `gawk' to an extension must be treated as
+ read-only by the extension.
+
+ * _All_ memory passed from an extension to `gawk' must come from the
+ API's memory allocation functions. `gawk' takes responsibility for
+ the memory and will release it when appropriate.
+
+ * The API provides information about the running version of `gawk' so
+ that an extension can make sure it is compatible with the `gawk'
+ that loaded it.
+
+ * It is easiest to start a new extension by copying the boilerplate
+ code described in this major node. Macros in the `gawkapi.h' make
+ this easier to do.
+
+ * The `gawk' distribution includes a number of small but useful
+ sample extensions. The `gawkextlib' project includes several more,
+ larger, extensions. If you wish to write an extension and
+ contribute it to the community of `gawk' users, the `gawkextlib'
+ project should be the place to do so.
+
+
+
File: gawk.info, Node: Language History, Next: Installation, Prev: Dynamic Extensions, Up: Top
Appendix A The Evolution of the `awk' Language
@@ -25714,6 +25801,7 @@ you can find more information.
* Common Extensions:: Common Extensions Summary.
* Ranges and Locales:: How locales used to affect regexp ranges.
* Contributors:: The major contributors to `gawk'.
+* History summary:: History summary.

File: gawk.info, Node: V7/SVR3.1, Next: SVR4, Up: Language History
@@ -26568,7 +26656,7 @@ and its rationale
(http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap09.html#tag_21_09_03_05).

-File: gawk.info, Node: Contributors, Prev: Ranges and Locales, Up: Language History
+File: gawk.info, Node: Contributors, Next: History summary, Prev: Ranges and Locales, Up: Language History
A.9 Major Contributors to `gawk'
================================
@@ -26714,6 +26802,38 @@ Info file, in approximate chronological order:
1994.

+File: gawk.info, Node: History summary, Prev: Contributors, Up: Language History
+
+A.10 Summary
+============
+
+ * The `awk' language has evolved over time. The first release was
+ with V7 Unix circa 1978. In 1987 for System V Release 3.1, major
+ additions, including user-defined functions, were made to the
+ language. Additional changes were made for System V Release 4, in
+ 1989. Since then, further minor changes happen under the auspices
+ of the POSIX standard.
+
+ * Brian Kernighan's `awk' provides a small number of extensions that
+ are implemented in common with other versions of `awk'.
+
+ * `gawk' provides a large number of extensions over POSIX `awk'.
+ They can be disabled with either the `--traditional' or `--posix'
+ options.
+
+ * The interaction of POSIX locales and regexp matching in `gawk' has
+ been confusing over the years. Today, `gawk' implements Rational
+ Range Interpretation, where ranges of the form `[a-z]' match
+ _only_ the characters numerically between `a' through `z' in the
+ machine's native character set. Usually this is ASCII but it can
+ be EBCDIC on IBM S/390 systems.
+
+ * Many people have contributed to `gawk' development over the years.
+ We hope that the list provided in this major node is complete and
+ gives the appropriate credit where credit is due.
+
+
+
File: gawk.info, Node: Installation, Next: Notes, Prev: Language History, Up: Top
Appendix B Installing `gawk'
@@ -26734,6 +26854,7 @@ people who did the respective ports.
* Bugs:: Reporting Problems and Bugs.
* Other Versions:: Other freely available `awk'
implementations.
+* Installation summary:: Summary of installation.

File: gawk.info, Node: Gawk Distribution, Next: Unix Installation, Up: Installation
@@ -27807,7 +27928,7 @@ z/OS (OS/390) Dave Pitts, <dpitts@cozx.com>.
your report to the <bug-gawk@gnu.org> email list as well.

-File: gawk.info, Node: Other Versions, Prev: Bugs, Up: Installation
+File: gawk.info, Node: Other Versions, Next: Installation summary, Prev: Bugs, Up: Installation
B.5 Other Freely Available `awk' Implementations
================================================
@@ -27957,6 +28078,34 @@ Other Versions

+File: gawk.info, Node: Installation summary, Prev: Other Versions, Up: Installation
+
+B.6 Summary
+===========
+
+ * The `gawk' distribution is availble from GNU project's main
+ distribution site, `ftp.gnu.org'. The canonical build recipe is:
+
+ wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.1.tar.gz
+ tar -xvpzf gawk-4.1.1.tar.gz
+ cd gawk-4.1.1
+ ./configure && make && make check
+
+ * `gawk' may be built on non-POSIX systems as well. The currently
+ supported systems are MS-Windows using DJGPP, MSYS, MinGW and
+ Cygwin, OS/2 using EMX, and both Vax/VMS and OpenVMS.
+ Instructions for each system are included in this major node.
+
+ * Bug reports should be sent via email to <bug-gawk@gnu.org>. Bug
+ reports should be in English, and should include the version of
+ `gawk', how it was compiled, and a short program and data file
+ which demonstrate the problem.
+
+ * There are a number of other freely available `awk'
+ implementations. Many are POSIX compliant; others are less so.
+
+
+
File: gawk.info, Node: Notes, Next: Basic Concepts, Prev: Installation, Up: Top
Appendix C Implementation Notes
@@ -27975,6 +28124,7 @@ and maintainers of `gawk'. Everything in it applies specifically to
* Implementation Limitations:: Some limitations of the implementation.
* Extension Design:: Design notes about the extension API.
* Old Extension Mechanism:: Some compatibility for old extensions.
+* Notes summary:: Summary of implementation notes.

File: gawk.info, Node: Compatibility Mode, Next: Additions, Up: Notes
@@ -28679,7 +28829,7 @@ The API can later be expanded, in two ways:
respect to any of the above.

-File: gawk.info, Node: Old Extension Mechanism, Prev: Extension Design, Up: Notes
+File: gawk.info, Node: Old Extension Mechanism, Next: Notes summary, Prev: Extension Design, Up: Notes
C.6 Compatibility For Old Extensions
====================================
@@ -28717,6 +28867,37 @@ old extensions that you may have to use the new API described in *note
Dynamic Extensions::.

+File: gawk.info, Node: Notes summary, Prev: Old Extension Mechanism, Up: Notes
+
+C.7 Summary
+===========
+
+ * `gawk''s extensions can be disabled with either the
+ `--traditional' option or with the `--posix' option. The
+ `--parsedebug' option is availble if `gawk' is compiled with
+ `-DDEBUG'.
+
+ * The source code for `gawk' is maintained in a publicly accessable
+ Git repository. Anyone may check it out and view the source.
+
+ * Contributions to `gawk' are welcome. Following the steps outlined
+ in this major node will make it easier to integrate your
+ contributions into the code base. This applies both to new
+ feature contributions and to ports to additional operating systems.
+
+ * `gawk' has some limits--generally those that are imposed by the
+ machine architecture.
+
+ * The extension API design was intended to solve a number of problems
+ with the previous extension mechanism, enable features needed by
+ the `xgawk' project, and provide binary compatibility going
+ forward.
+
+ * The previous extension mechanism is still supported in version 4.1
+ of `gawk', but it _will_ be removed in the next major release.
+
+
+
File: gawk.info, Node: Basic Concepts, Next: Glossary, Prev: Notes, Up: Top
Appendix D Basic Programming Concepts
@@ -33851,525 +34032,529 @@ Node: Executable Scripts78251
Ref: Executable Scripts-Footnote-180084
Ref: Executable Scripts-Footnote-280186
Node: Comments80733
-Node: Quoting83200
-Node: DOS Quoting88516
-Node: Sample Data Files89191
-Node: Very Simple91706
-Node: Two Rules96344
-Node: More Complex98239
-Ref: More Complex-Footnote-1101171
-Node: Statements/Lines101256
-Ref: Statements/Lines-Footnote-1105711
-Node: Other Features105976
-Node: When106904
-Node: Intro Summary109074
-Node: Invoking Gawk109840
-Node: Command Line111355
-Node: Options112146
-Ref: Options-Footnote-1127958
-Node: Other Arguments127983
-Node: Naming Standard Input130645
-Node: Environment Variables131739
-Node: AWKPATH Variable132297
-Ref: AWKPATH Variable-Footnote-1135169
-Ref: AWKPATH Variable-Footnote-2135214
-Node: AWKLIBPATH Variable135474
-Node: Other Environment Variables136233
-Node: Exit Status139888
-Node: Include Files140563
-Node: Loading Shared Libraries144141
-Node: Obsolete145525
-Node: Undocumented146222
-Node: Invoking Summary146489
-Node: Regexp148069
-Node: Regexp Usage149519
-Node: Escape Sequences151552
-Node: Regexp Operators157219
-Ref: Regexp Operators-Footnote-1164699
-Ref: Regexp Operators-Footnote-2164846
-Node: Bracket Expressions164944
-Ref: table-char-classes166834
-Node: GNU Regexp Operators169357
-Node: Case-sensitivity173080
-Ref: Case-sensitivity-Footnote-1175972
-Ref: Case-sensitivity-Footnote-2176207
-Node: Leftmost Longest176315
-Node: Computed Regexps177516
-Node: Regexp Summary180888
-Node: Reading Files182360
-Node: Records184409
-Node: awk split records185152
-Node: gawk split records190010
-Ref: gawk split records-Footnote-1194531
-Node: Fields194568
-Ref: Fields-Footnote-1197532
-Node: Nonconstant Fields197618
-Ref: Nonconstant Fields-Footnote-1199848
-Node: Changing Fields200050
-Node: Field Separators206004
-Node: Default Field Splitting208706
-Node: Regexp Field Splitting209823
-Node: Single Character Fields213164
-Node: Command Line Field Separator214223
-Node: Full Line Fields217565
-Ref: Full Line Fields-Footnote-1218073
-Node: Field Splitting Summary218119
-Ref: Field Splitting Summary-Footnote-1221218
-Node: Constant Size221319
-Node: Splitting By Content225926
-Ref: Splitting By Content-Footnote-1229676
-Node: Multiple Line229716
-Ref: Multiple Line-Footnote-1235572
-Node: Getline235751
-Node: Plain Getline237967
-Node: Getline/Variable240062
-Node: Getline/File241209
-Node: Getline/Variable/File242593
-Ref: Getline/Variable/File-Footnote-1244192
-Node: Getline/Pipe244279
-Node: Getline/Variable/Pipe246978
-Node: Getline/Coprocess248085
-Node: Getline/Variable/Coprocess249337
-Node: Getline Notes250074
-Node: Getline Summary252878
-Ref: table-getline-variants253286
-Node: Read Timeout254198
-Ref: Read Timeout-Footnote-1258025
-Node: Command line directories258083
-Node: Input Summary258987
-Node: Printing262101
-Node: Print263780
-Node: Print Examples265121
-Node: Output Separators267900
-Node: OFMT269916
-Node: Printf271274
-Node: Basic Printf272180
-Node: Control Letters273719
-Node: Format Modifiers277573
-Node: Printf Examples283600
-Node: Redirection286307
-Node: Special Files293279
-Node: Special FD293810
-Ref: Special FD-Footnote-1297434
-Node: Special Network297508
-Node: Special Caveats298358
-Node: Close Files And Pipes299154
-Ref: Close Files And Pipes-Footnote-1306317
-Ref: Close Files And Pipes-Footnote-2306465
-Node: Output Summary306615
-Node: Expressions307587
-Node: Values308772
-Node: Constants309448
-Node: Scalar Constants310128
-Ref: Scalar Constants-Footnote-1310987
-Node: Nondecimal-numbers311237
-Node: Regexp Constants314237
-Node: Using Constant Regexps314712
-Node: Variables317782
-Node: Using Variables318437
-Node: Assignment Options320161
-Node: Conversion322036
-Ref: table-locale-affects327472
-Ref: Conversion-Footnote-1328096
-Node: All Operators328205
-Node: Arithmetic Ops328835
-Node: Concatenation331340
-Ref: Concatenation-Footnote-1334136
-Node: Assignment Ops334256
-Ref: table-assign-ops339239
-Node: Increment Ops340556
-Node: Truth Values and Conditions343994
-Node: Truth Values345077
-Node: Typing and Comparison346126
-Node: Variable Typing346919
-Ref: Variable Typing-Footnote-1350819
-Node: Comparison Operators350941
-Ref: table-relational-ops351351
-Node: POSIX String Comparison354901
-Ref: POSIX String Comparison-Footnote-1355985
-Node: Boolean Ops356123
-Ref: Boolean Ops-Footnote-1360193
-Node: Conditional Exp360284
-Node: Function Calls362011
-Node: Precedence365769
-Node: Locales369438
-Node: Expressions Summary371069
-Node: Patterns and Actions373566
-Node: Pattern Overview374682
-Node: Regexp Patterns376359
-Node: Expression Patterns376902
-Node: Ranges380683
-Node: BEGIN/END383789
-Node: Using BEGIN/END384551
-Ref: Using BEGIN/END-Footnote-1387287
-Node: I/O And BEGIN/END387393
-Node: BEGINFILE/ENDFILE389678
-Node: Empty392609
-Node: Using Shell Variables392926
-Node: Action Overview395209
-Node: Statements397536
-Node: If Statement399384
-Node: While Statement400882
-Node: Do Statement402926
-Node: For Statement404082
-Node: Switch Statement407234
-Node: Break Statement409337
-Node: Continue Statement411392
-Node: Next Statement413185
-Node: Nextfile Statement415575
-Node: Exit Statement418230
-Node: Built-in Variables420634
-Node: User-modified421761
-Ref: User-modified-Footnote-1429446
-Node: Auto-set429508
-Ref: Auto-set-Footnote-1442073
-Ref: Auto-set-Footnote-2442278
-Node: ARGC and ARGV442334
-Node: Pattern Action Summary446188
-Node: Arrays448411
-Node: Array Basics449960
-Node: Array Intro450786
-Ref: figure-array-elements452759
-Node: Reference to Elements455166
-Node: Assigning Elements457439
-Node: Array Example457930
-Node: Scanning an Array459662
-Node: Controlling Scanning462677
-Ref: Controlling Scanning-Footnote-1467850
-Node: Delete468166
-Ref: Delete-Footnote-1470931
-Node: Numeric Array Subscripts470988
-Node: Uninitialized Subscripts473171
-Node: Multidimensional474796
-Node: Multiscanning477889
-Node: Arrays of Arrays479478
-Node: Arrays Summary484141
-Node: Functions486246
-Node: Built-in487119
-Node: Calling Built-in488197
-Node: Numeric Functions490185
-Ref: Numeric Functions-Footnote-1494019
-Ref: Numeric Functions-Footnote-2494376
-Ref: Numeric Functions-Footnote-3494424
-Node: String Functions494693
-Ref: String Functions-Footnote-1517704
-Ref: String Functions-Footnote-2517833
-Ref: String Functions-Footnote-3518081
-Node: Gory Details518168
-Ref: table-sub-escapes519837
-Ref: table-sub-posix-92521191
-Ref: table-sub-proposed522542
-Ref: table-posix-sub523896
-Ref: table-gensub-escapes525441
-Ref: Gory Details-Footnote-1526617
-Ref: Gory Details-Footnote-2526668
-Node: I/O Functions526819
-Ref: I/O Functions-Footnote-1533942
-Node: Time Functions534089
-Ref: Time Functions-Footnote-1544553
-Ref: Time Functions-Footnote-2544621
-Ref: Time Functions-Footnote-3544779
-Ref: Time Functions-Footnote-4544890
-Ref: Time Functions-Footnote-5545002
-Ref: Time Functions-Footnote-6545229
-Node: Bitwise Functions545495
-Ref: table-bitwise-ops546057
-Ref: Bitwise Functions-Footnote-1550302
-Node: Type Functions550486
-Node: I18N Functions551628
-Node: User-defined553273
-Node: Definition Syntax554077
-Ref: Definition Syntax-Footnote-1559002
-Node: Function Example559071
-Ref: Function Example-Footnote-1561715
-Node: Function Caveats561737
-Node: Calling A Function562255
-Node: Variable Scope563210
-Node: Pass By Value/Reference566198
-Node: Return Statement569706
-Node: Dynamic Typing572690
-Node: Indirect Calls573619
-Node: Functions Summary583332
-Node: Library Functions585871
-Ref: Library Functions-Footnote-1589446
-Ref: Library Functions-Footnote-2589589
-Node: Library Names589760
-Ref: Library Names-Footnote-1593233
-Ref: Library Names-Footnote-2593453
-Node: General Functions593539
-Node: Strtonum Function594567
-Node: Assert Function597497
-Node: Round Function600823
-Node: Cliff Random Function602364
-Node: Ordinal Functions603380
-Ref: Ordinal Functions-Footnote-1606457
-Ref: Ordinal Functions-Footnote-2606709
-Node: Join Function606920
-Ref: Join Function-Footnote-1608691
-Node: Getlocaltime Function608891
-Node: Readfile Function612627
-Node: Data File Management614466
-Node: Filetrans Function615098
-Node: Rewind Function619167
-Node: File Checking620554
-Ref: File Checking-Footnote-1621686
-Node: Empty Files621887
-Node: Ignoring Assigns624117
-Node: Getopt Function625671
-Ref: Getopt Function-Footnote-1636974
-Node: Passwd Functions637177
-Ref: Passwd Functions-Footnote-1646156
-Node: Group Functions646244
-Ref: Group Functions-Footnote-1654186
-Node: Walking Arrays654399
-Node: Library Functions Summary656569
-Node: Sample Programs657931
-Node: Running Examples658658
-Node: Clones659386
-Node: Cut Program660610
-Node: Egrep Program670478
-Ref: Egrep Program-Footnote-1678449
-Node: Id Program678559
-Node: Split Program682223
-Ref: Split Program-Footnote-1685761
-Node: Tee Program685889
-Node: Uniq Program688696
-Node: Wc Program696126
-Ref: Wc Program-Footnote-1700394
-Ref: Wc Program-Footnote-2700594
-Node: Miscellaneous Programs700686
-Node: Dupword Program701899
-Node: Alarm Program703930
-Node: Translate Program708744
-Ref: Translate Program-Footnote-1713135
-Ref: Translate Program-Footnote-2713405
-Node: Labels Program713539
-Ref: Labels Program-Footnote-1716910
-Node: Word Sorting716994
-Node: History Sorting721037
-Node: Extract Program722873
-Ref: Extract Program-Footnote-1730448
-Node: Simple Sed730577
-Node: Igawk Program733639
-Ref: Igawk Program-Footnote-1748815
-Ref: Igawk Program-Footnote-2749016
-Node: Anagram Program749154
-Node: Signature Program752222
-Node: Programs Summary753469
-Node: Advanced Features754657
-Node: Nondecimal Data756605
-Node: Array Sorting758182
-Node: Controlling Array Traversal758879
-Node: Array Sorting Functions767159
-Ref: Array Sorting Functions-Footnote-1771066
-Node: Two-way I/O771260
-Ref: Two-way I/O-Footnote-1776776
-Node: TCP/IP Networking776858
-Node: Profiling779702
-Node: Advanced Features Summary787244
-Node: Internationalization789108
-Node: I18N and L10N790588
-Node: Explaining gettext791274
-Ref: Explaining gettext-Footnote-1796414
-Ref: Explaining gettext-Footnote-2796598
-Node: Programmer i18n796763
-Node: Translator i18n800988
-Node: String Extraction801782
-Ref: String Extraction-Footnote-1802743
-Node: Printf Ordering802829
-Ref: Printf Ordering-Footnote-1805611
-Node: I18N Portability805675
-Ref: I18N Portability-Footnote-1808124
-Node: I18N Example808187
-Ref: I18N Example-Footnote-1810909
-Node: Gawk I18N810981
-Node: I18N Summary811619
-Node: Debugger812958
-Node: Debugging813980
-Node: Debugging Concepts814421
-Node: Debugging Terms816277
-Node: Awk Debugging818874
-Node: Sample Debugging Session819766
-Node: Debugger Invocation820286
-Node: Finding The Bug821619
-Node: List of Debugger Commands828101
-Node: Breakpoint Control829433
-Node: Debugger Execution Control833097
-Node: Viewing And Changing Data836457
-Node: Execution Stack839815
-Node: Debugger Info841328
-Node: Miscellaneous Debugger Commands845322
-Node: Readline Support850506
-Node: Limitations851398
-Node: Debugging Summary853672
-Node: Arbitrary Precision Arithmetic854836
-Ref: Arbitrary Precision Arithmetic-Footnote-1856485
-Node: General Arithmetic856633
-Node: Floating Point Issues858353
-Node: String Conversion Precision859234
-Ref: String Conversion Precision-Footnote-1860939
-Node: Unexpected Results861048
-Node: POSIX Floating Point Problems863201
-Ref: POSIX Floating Point Problems-Footnote-1867022
-Node: Integer Programming867060
-Node: Floating-point Programming868871
-Ref: Floating-point Programming-Footnote-1875199
-Ref: Floating-point Programming-Footnote-2875469
-Node: Floating-point Representation875733
-Node: Floating-point Context876898
-Ref: table-ieee-formats877737
-Node: Rounding Mode879121
-Ref: table-rounding-modes879600
-Ref: Rounding Mode-Footnote-1882615
-Node: Gawk and MPFR882794
-Node: Arbitrary Precision Floats884203
-Ref: Arbitrary Precision Floats-Footnote-1886646
-Node: Setting Precision886967
-Ref: table-predefined-precision-strings887651
-Node: Setting Rounding Mode889796
-Ref: table-gawk-rounding-modes890200
-Node: Floating-point Constants891387
-Node: Changing Precision892839
-Ref: Changing Precision-Footnote-1894231
-Node: Exact Arithmetic894405
-Node: Arbitrary Precision Integers897539
-Ref: Arbitrary Precision Integers-Footnote-1900554
-Node: Dynamic Extensions900701
-Node: Extension Intro902159
-Node: Plugin License903424
-Node: Extension Mechanism Outline904109
-Ref: figure-load-extension904533
-Ref: figure-load-new-function906018
-Ref: figure-call-new-function907020
-Node: Extension API Description909004
-Node: Extension API Functions Introduction910454
-Node: General Data Types915320
-Ref: General Data Types-Footnote-1921013
-Node: Requesting Values921312
-Ref: table-value-types-returned922049
-Node: Memory Allocation Functions923007
-Ref: Memory Allocation Functions-Footnote-1925754
-Node: Constructor Functions925850
-Node: Registration Functions927608
-Node: Extension Functions928293
-Node: Exit Callback Functions930595
-Node: Extension Version String931844
-Node: Input Parsers932494
-Node: Output Wrappers942297
-Node: Two-way processors946813
-Node: Printing Messages949017
-Ref: Printing Messages-Footnote-1950094
-Node: Updating `ERRNO'950246
-Node: Accessing Parameters950985
-Node: Symbol Table Access952215
-Node: Symbol table by name952729
-Node: Symbol table by cookie954705
-Ref: Symbol table by cookie-Footnote-1958838
-Node: Cached values958901
-Ref: Cached values-Footnote-1962405
-Node: Array Manipulation962496
-Ref: Array Manipulation-Footnote-1963594
-Node: Array Data Types963633
-Ref: Array Data Types-Footnote-1966336
-Node: Array Functions966428
-Node: Flattening Arrays970302
-Node: Creating Arrays977154
-Node: Extension API Variables981885
-Node: Extension Versioning982521
-Node: Extension API Informational Variables984422
-Node: Extension API Boilerplate985508
-Node: Finding Extensions989312
-Node: Extension Example989872
-Node: Internal File Description990602
-Node: Internal File Ops994693
-Ref: Internal File Ops-Footnote-11006239
-Node: Using Internal File Ops1006379
-Ref: Using Internal File Ops-Footnote-11008726
-Node: Extension Samples1008994
-Node: Extension Sample File Functions1010518
-Node: Extension Sample Fnmatch1018086
-Node: Extension Sample Fork1019567
-Node: Extension Sample Inplace1020780
-Node: Extension Sample Ord1022560
-Node: Extension Sample Readdir1023396
-Ref: table-readdir-file-types1024252
-Node: Extension Sample Revout1025051
-Node: Extension Sample Rev2way1025642
-Node: Extension Sample Read write array1026383
-Node: Extension Sample Readfile1028262
-Node: Extension Sample API Tests1029362
-Node: Extension Sample Time1029887
-Node: gawkextlib1031202
-Node: Language History1033989
-Node: V7/SVR3.11035583
-Node: SVR41037903
-Node: POSIX1039345
-Node: BTL1040731
-Node: POSIX/GNU1041465
-Node: Feature History1047064
-Node: Common Extensions1060176
-Node: Ranges and Locales1061488
-Ref: Ranges and Locales-Footnote-11066105
-Ref: Ranges and Locales-Footnote-21066132
-Ref: Ranges and Locales-Footnote-31066366
-Node: Contributors1066587
-Node: Installation1072025
-Node: Gawk Distribution1072919
-Node: Getting1073403
-Node: Extracting1074229
-Node: Distribution contents1075871
-Node: Unix Installation1081588
-Node: Quick Installation1082205
-Node: Additional Configuration Options1084647
-Node: Configuration Philosophy1086385
-Node: Non-Unix Installation1088736
-Node: PC Installation1089194
-Node: PC Binary Installation1090505
-Node: PC Compiling1092353
-Ref: PC Compiling-Footnote-11095352
-Node: PC Testing1095457
-Node: PC Using1096633
-Node: Cygwin1100791
-Node: MSYS1101600
-Node: VMS Installation1102114
-Node: VMS Compilation1102910
-Ref: VMS Compilation-Footnote-11104132
-Node: VMS Dynamic Extensions1104190
-Node: VMS Installation Details1105563
-Node: VMS Running1107815
-Node: VMS GNV1110649
-Node: VMS Old Gawk1111372
-Node: Bugs1111842
-Node: Other Versions1115846
-Node: Notes1122071
-Node: Compatibility Mode1122871
-Node: Additions1123653
-Node: Accessing The Source1124578
-Node: Adding Code1126014
-Node: New Ports1132192
-Node: Derived Files1136673
-Ref: Derived Files-Footnote-11141754
-Ref: Derived Files-Footnote-21141788
-Ref: Derived Files-Footnote-31142384
-Node: Future Extensions1142498
-Node: Implementation Limitations1143104
-Node: Extension Design1144352
-Node: Old Extension Problems1145506
-Ref: Old Extension Problems-Footnote-11147023
-Node: Extension New Mechanism Goals1147080
-Ref: Extension New Mechanism Goals-Footnote-11150440
-Node: Extension Other Design Decisions1150629
-Node: Extension Future Growth1152735
-Node: Old Extension Mechanism1153571
-Node: Basic Concepts1155311
-Node: Basic High Level1155992
-Ref: figure-general-flow1156264
-Ref: figure-process-flow1156863
-Ref: Basic High Level-Footnote-11160092
-Node: Basic Data Typing1160277
-Node: Glossary1163604
-Node: Copying1188756
-Node: GNU Free Documentation License1226312
-Node: Index1251448
+Node: Quoting83206
+Node: DOS Quoting88522
+Node: Sample Data Files89197
+Node: Very Simple91712
+Node: Two Rules96350
+Node: More Complex98245
+Ref: More Complex-Footnote-1101177
+Node: Statements/Lines101262
+Ref: Statements/Lines-Footnote-1105717
+Node: Other Features105982
+Node: When106910
+Node: Intro Summary109080
+Node: Invoking Gawk109846
+Node: Command Line111361
+Node: Options112152
+Ref: Options-Footnote-1127964
+Node: Other Arguments127989
+Node: Naming Standard Input130651
+Node: Environment Variables131745
+Node: AWKPATH Variable132303
+Ref: AWKPATH Variable-Footnote-1135175
+Ref: AWKPATH Variable-Footnote-2135220
+Node: AWKLIBPATH Variable135480
+Node: Other Environment Variables136239
+Node: Exit Status139894
+Node: Include Files140569
+Node: Loading Shared Libraries144147
+Node: Obsolete145531
+Node: Undocumented146228
+Node: Invoking Summary146495
+Node: Regexp148075
+Node: Regexp Usage149525
+Node: Escape Sequences151558
+Node: Regexp Operators157225
+Ref: Regexp Operators-Footnote-1164705
+Ref: Regexp Operators-Footnote-2164852
+Node: Bracket Expressions164950
+Ref: table-char-classes166840
+Node: GNU Regexp Operators169363
+Node: Case-sensitivity173086
+Ref: Case-sensitivity-Footnote-1175978
+Ref: Case-sensitivity-Footnote-2176213
+Node: Leftmost Longest176321
+Node: Computed Regexps177522
+Node: Regexp Summary180894
+Node: Reading Files182366
+Node: Records184415
+Node: awk split records185158
+Node: gawk split records190016
+Ref: gawk split records-Footnote-1194537
+Node: Fields194574
+Ref: Fields-Footnote-1197538
+Node: Nonconstant Fields197624
+Ref: Nonconstant Fields-Footnote-1199854
+Node: Changing Fields200056
+Node: Field Separators206010
+Node: Default Field Splitting208712
+Node: Regexp Field Splitting209829
+Node: Single Character Fields213170
+Node: Command Line Field Separator214229
+Node: Full Line Fields217571
+Ref: Full Line Fields-Footnote-1218079
+Node: Field Splitting Summary218125
+Ref: Field Splitting Summary-Footnote-1221224
+Node: Constant Size221325
+Node: Splitting By Content225932
+Ref: Splitting By Content-Footnote-1229682
+Node: Multiple Line229722
+Ref: Multiple Line-Footnote-1235578
+Node: Getline235757
+Node: Plain Getline237973
+Node: Getline/Variable240068
+Node: Getline/File241215
+Node: Getline/Variable/File242599
+Ref: Getline/Variable/File-Footnote-1244198
+Node: Getline/Pipe244285
+Node: Getline/Variable/Pipe246984
+Node: Getline/Coprocess248091
+Node: Getline/Variable/Coprocess249343
+Node: Getline Notes250080
+Node: Getline Summary252884
+Ref: table-getline-variants253292
+Node: Read Timeout254204
+Ref: Read Timeout-Footnote-1258031
+Node: Command line directories258089
+Node: Input Summary258993
+Node: Printing262107
+Node: Print263786
+Node: Print Examples265127
+Node: Output Separators267906
+Node: OFMT269922
+Node: Printf271280
+Node: Basic Printf272186
+Node: Control Letters273725
+Node: Format Modifiers277579
+Node: Printf Examples283606
+Node: Redirection286313
+Node: Special Files293285
+Node: Special FD293816
+Ref: Special FD-Footnote-1297440
+Node: Special Network297514
+Node: Special Caveats298364
+Node: Close Files And Pipes299160
+Ref: Close Files And Pipes-Footnote-1306323
+Ref: Close Files And Pipes-Footnote-2306471
+Node: Output Summary306621
+Node: Expressions307593
+Node: Values308778
+Node: Constants309454
+Node: Scalar Constants310134
+Ref: Scalar Constants-Footnote-1310993
+Node: Nondecimal-numbers311243
+Node: Regexp Constants314243
+Node: Using Constant Regexps314718
+Node: Variables317788
+Node: Using Variables318443
+Node: Assignment Options320167
+Node: Conversion322042
+Ref: table-locale-affects327478
+Ref: Conversion-Footnote-1328102
+Node: All Operators328211
+Node: Arithmetic Ops328841
+Node: Concatenation331346
+Ref: Concatenation-Footnote-1334142
+Node: Assignment Ops334262
+Ref: table-assign-ops339245
+Node: Increment Ops340562
+Node: Truth Values and Conditions344000
+Node: Truth Values345083
+Node: Typing and Comparison346132
+Node: Variable Typing346925
+Ref: Variable Typing-Footnote-1350825
+Node: Comparison Operators350947
+Ref: table-relational-ops351357
+Node: POSIX String Comparison354907
+Ref: POSIX String Comparison-Footnote-1355991
+Node: Boolean Ops356129
+Ref: Boolean Ops-Footnote-1360199
+Node: Conditional Exp360290
+Node: Function Calls362017
+Node: Precedence365775
+Node: Locales369444
+Node: Expressions Summary371075
+Node: Patterns and Actions373572
+Node: Pattern Overview374688
+Node: Regexp Patterns376365
+Node: Expression Patterns376908
+Node: Ranges380689
+Node: BEGIN/END383795
+Node: Using BEGIN/END384557
+Ref: Using BEGIN/END-Footnote-1387293
+Node: I/O And BEGIN/END387399
+Node: BEGINFILE/ENDFILE389684
+Node: Empty392615
+Node: Using Shell Variables392932
+Node: Action Overview395215
+Node: Statements397542
+Node: If Statement399390
+Node: While Statement400888
+Node: Do Statement402932
+Node: For Statement404088
+Node: Switch Statement407240
+Node: Break Statement409343
+Node: Continue Statement411398
+Node: Next Statement413191
+Node: Nextfile Statement415581
+Node: Exit Statement418236
+Node: Built-in Variables420640
+Node: User-modified421767
+Ref: User-modified-Footnote-1429452
+Node: Auto-set429514
+Ref: Auto-set-Footnote-1442079
+Ref: Auto-set-Footnote-2442284
+Node: ARGC and ARGV442340
+Node: Pattern Action Summary446194
+Node: Arrays448417
+Node: Array Basics449966
+Node: Array Intro450792
+Ref: figure-array-elements452765
+Node: Reference to Elements455172
+Node: Assigning Elements457445
+Node: Array Example457936
+Node: Scanning an Array459668
+Node: Controlling Scanning462683
+Ref: Controlling Scanning-Footnote-1467856
+Node: Delete468172
+Ref: Delete-Footnote-1470937
+Node: Numeric Array Subscripts470994
+Node: Uninitialized Subscripts473177
+Node: Multidimensional474802
+Node: Multiscanning477895
+Node: Arrays of Arrays479484
+Node: Arrays Summary484147
+Node: Functions486252
+Node: Built-in487125
+Node: Calling Built-in488203
+Node: Numeric Functions490191
+Ref: Numeric Functions-Footnote-1494025
+Ref: Numeric Functions-Footnote-2494382
+Ref: Numeric Functions-Footnote-3494430
+Node: String Functions494699
+Ref: String Functions-Footnote-1517710
+Ref: String Functions-Footnote-2517839
+Ref: String Functions-Footnote-3518087
+Node: Gory Details518174
+Ref: table-sub-escapes519843
+Ref: table-sub-posix-92521197
+Ref: table-sub-proposed522548
+Ref: table-posix-sub523902
+Ref: table-gensub-escapes525447
+Ref: Gory Details-Footnote-1526623
+Ref: Gory Details-Footnote-2526674
+Node: I/O Functions526825
+Ref: I/O Functions-Footnote-1533948
+Node: Time Functions534095
+Ref: Time Functions-Footnote-1544559
+Ref: Time Functions-Footnote-2544627
+Ref: Time Functions-Footnote-3544785
+Ref: Time Functions-Footnote-4544896
+Ref: Time Functions-Footnote-5545008
+Ref: Time Functions-Footnote-6545235
+Node: Bitwise Functions545501
+Ref: table-bitwise-ops546063
+Ref: Bitwise Functions-Footnote-1550308
+Node: Type Functions550492
+Node: I18N Functions551634
+Node: User-defined553279
+Node: Definition Syntax554083
+Ref: Definition Syntax-Footnote-1559008
+Node: Function Example559077
+Ref: Function Example-Footnote-1561721
+Node: Function Caveats561743
+Node: Calling A Function562261
+Node: Variable Scope563216
+Node: Pass By Value/Reference566204
+Node: Return Statement569712
+Node: Dynamic Typing572696
+Node: Indirect Calls573625
+Node: Functions Summary583338
+Node: Library Functions585877
+Ref: Library Functions-Footnote-1589452
+Ref: Library Functions-Footnote-2589595
+Node: Library Names589766
+Ref: Library Names-Footnote-1593239
+Ref: Library Names-Footnote-2593459
+Node: General Functions593545
+Node: Strtonum Function594573
+Node: Assert Function597353
+Node: Round Function600679
+Node: Cliff Random Function602220
+Node: Ordinal Functions603236
+Ref: Ordinal Functions-Footnote-1606313
+Ref: Ordinal Functions-Footnote-2606565
+Node: Join Function606776
+Ref: Join Function-Footnote-1608547
+Node: Getlocaltime Function608747
+Node: Readfile Function612483
+Node: Data File Management614322
+Node: Filetrans Function614954
+Node: Rewind Function619023
+Node: File Checking620410
+Ref: File Checking-Footnote-1621542
+Node: Empty Files621743
+Node: Ignoring Assigns623973
+Node: Getopt Function625527
+Ref: Getopt Function-Footnote-1636830
+Node: Passwd Functions637033
+Ref: Passwd Functions-Footnote-1646012
+Node: Group Functions646100
+Ref: Group Functions-Footnote-1654042
+Node: Walking Arrays654255
+Node: Library Functions Summary656425
+Node: Sample Programs657787
+Node: Running Examples658514
+Node: Clones659242
+Node: Cut Program660466
+Node: Egrep Program670334
+Ref: Egrep Program-Footnote-1678305
+Node: Id Program678415
+Node: Split Program682079
+Ref: Split Program-Footnote-1685617
+Node: Tee Program685745
+Node: Uniq Program688552
+Node: Wc Program695982
+Ref: Wc Program-Footnote-1700250
+Ref: Wc Program-Footnote-2700450
+Node: Miscellaneous Programs700542
+Node: Dupword Program701755
+Node: Alarm Program703786
+Node: Translate Program708600
+Ref: Translate Program-Footnote-1712991
+Ref: Translate Program-Footnote-2713261
+Node: Labels Program713395
+Ref: Labels Program-Footnote-1716766
+Node: Word Sorting716850
+Node: History Sorting720893
+Node: Extract Program722729
+Ref: Extract Program-Footnote-1730304
+Node: Simple Sed730433
+Node: Igawk Program733495
+Ref: Igawk Program-Footnote-1748671
+Ref: Igawk Program-Footnote-2748872
+Node: Anagram Program749010
+Node: Signature Program752078
+Node: Programs Summary753325
+Node: Advanced Features754513
+Node: Nondecimal Data756461
+Node: Array Sorting758038
+Node: Controlling Array Traversal758735
+Node: Array Sorting Functions767015
+Ref: Array Sorting Functions-Footnote-1770922
+Node: Two-way I/O771116
+Ref: Two-way I/O-Footnote-1776632
+Node: TCP/IP Networking776714
+Node: Profiling779558
+Node: Advanced Features Summary787100
+Node: Internationalization788964
+Node: I18N and L10N790444
+Node: Explaining gettext791130
+Ref: Explaining gettext-Footnote-1796270
+Ref: Explaining gettext-Footnote-2796454
+Node: Programmer i18n796619
+Node: Translator i18n800844
+Node: String Extraction801638
+Ref: String Extraction-Footnote-1802599
+Node: Printf Ordering802685
+Ref: Printf Ordering-Footnote-1805467
+Node: I18N Portability805531
+Ref: I18N Portability-Footnote-1807980
+Node: I18N Example808043
+Ref: I18N Example-Footnote-1810765
+Node: Gawk I18N810837
+Node: I18N Summary811475
+Node: Debugger812814
+Node: Debugging813836
+Node: Debugging Concepts814277
+Node: Debugging Terms816133
+Node: Awk Debugging818730
+Node: Sample Debugging Session819622
+Node: Debugger Invocation820142
+Node: Finding The Bug821475
+Node: List of Debugger Commands827957
+Node: Breakpoint Control829289
+Node: Debugger Execution Control832953
+Node: Viewing And Changing Data836313
+Node: Execution Stack839671
+Node: Debugger Info841184
+Node: Miscellaneous Debugger Commands845178
+Node: Readline Support850362
+Node: Limitations851254
+Node: Debugging Summary853528
+Node: Arbitrary Precision Arithmetic854692
+Ref: Arbitrary Precision Arithmetic-Footnote-1856341
+Node: General Arithmetic856489
+Node: Floating Point Issues858209
+Node: String Conversion Precision859090
+Ref: String Conversion Precision-Footnote-1860795
+Node: Unexpected Results860904
+Node: POSIX Floating Point Problems863057
+Ref: POSIX Floating Point Problems-Footnote-1866878
+Node: Integer Programming866916
+Node: Floating-point Programming868727
+Ref: Floating-point Programming-Footnote-1875055
+Ref: Floating-point Programming-Footnote-2875325
+Node: Floating-point Representation875589
+Node: Floating-point Context876754
+Ref: table-ieee-formats877593
+Node: Rounding Mode878977
+Ref: table-rounding-modes879456
+Ref: Rounding Mode-Footnote-1882471
+Node: Gawk and MPFR882650
+Node: Arbitrary Precision Floats884059
+Ref: Arbitrary Precision Floats-Footnote-1886502
+Node: Setting Precision886823
+Ref: table-predefined-precision-strings887507
+Node: Setting Rounding Mode889652
+Ref: table-gawk-rounding-modes890056
+Node: Floating-point Constants891243
+Node: Changing Precision892695
+Ref: Changing Precision-Footnote-1894087
+Node: Exact Arithmetic894261
+Node: Arbitrary Precision Integers897395
+Ref: Arbitrary Precision Integers-Footnote-1900410
+Node: Dynamic Extensions900557
+Node: Extension Intro902066
+Node: Plugin License903331
+Node: Extension Mechanism Outline904016
+Ref: figure-load-extension904440
+Ref: figure-load-new-function905925
+Ref: figure-call-new-function906927
+Node: Extension API Description908911
+Node: Extension API Functions Introduction910361
+Node: General Data Types915226
+Ref: General Data Types-Footnote-1920919
+Node: Requesting Values921218
+Ref: table-value-types-returned921955
+Node: Memory Allocation Functions922913
+Ref: Memory Allocation Functions-Footnote-1925660
+Node: Constructor Functions925756
+Node: Registration Functions927514
+Node: Extension Functions928199
+Node: Exit Callback Functions930501
+Node: Extension Version String931750
+Node: Input Parsers932400
+Node: Output Wrappers942203
+Node: Two-way processors946719
+Node: Printing Messages948923
+Ref: Printing Messages-Footnote-1950000
+Node: Updating `ERRNO'950152
+Node: Accessing Parameters950891
+Node: Symbol Table Access952121
+Node: Symbol table by name952635
+Node: Symbol table by cookie954611
+Ref: Symbol table by cookie-Footnote-1958744
+Node: Cached values958807
+Ref: Cached values-Footnote-1962311
+Node: Array Manipulation962402
+Ref: Array Manipulation-Footnote-1963500
+Node: Array Data Types963539
+Ref: Array Data Types-Footnote-1966242
+Node: Array Functions966334
+Node: Flattening Arrays970208
+Node: Creating Arrays977060
+Node: Extension API Variables981791
+Node: Extension Versioning982427
+Node: Extension API Informational Variables984328
+Node: Extension API Boilerplate985414
+Node: Finding Extensions989218
+Node: Extension Example989778
+Node: Internal File Description990508
+Node: Internal File Ops994599
+Ref: Internal File Ops-Footnote-11006145
+Node: Using Internal File Ops1006285
+Ref: Using Internal File Ops-Footnote-11008632
+Node: Extension Samples1008900
+Node: Extension Sample File Functions1010424
+Node: Extension Sample Fnmatch1017992
+Node: Extension Sample Fork1019473
+Node: Extension Sample Inplace1020686
+Node: Extension Sample Ord1022466
+Node: Extension Sample Readdir1023302
+Ref: table-readdir-file-types1024158
+Node: Extension Sample Revout1024957
+Node: Extension Sample Rev2way1025548
+Node: Extension Sample Read write array1026289
+Node: Extension Sample Readfile1028168
+Node: Extension Sample API Tests1029268
+Node: Extension Sample Time1029793
+Node: gawkextlib1031108
+Node: Extension summary1033921
+Node: Language History1037586
+Node: V7/SVR3.11039229
+Node: SVR41041549
+Node: POSIX1042991
+Node: BTL1044377
+Node: POSIX/GNU1045111
+Node: Feature History1050710
+Node: Common Extensions1063822
+Node: Ranges and Locales1065134
+Ref: Ranges and Locales-Footnote-11069751
+Ref: Ranges and Locales-Footnote-21069778
+Ref: Ranges and Locales-Footnote-31070012
+Node: Contributors1070233
+Node: History summary1075695
+Node: Installation1077064
+Node: Gawk Distribution1078015
+Node: Getting1078499
+Node: Extracting1079325
+Node: Distribution contents1080967
+Node: Unix Installation1086684
+Node: Quick Installation1087301
+Node: Additional Configuration Options1089743
+Node: Configuration Philosophy1091481
+Node: Non-Unix Installation1093832
+Node: PC Installation1094290
+Node: PC Binary Installation1095601
+Node: PC Compiling1097449
+Ref: PC Compiling-Footnote-11100448
+Node: PC Testing1100553
+Node: PC Using1101729
+Node: Cygwin1105887
+Node: MSYS1106696
+Node: VMS Installation1107210
+Node: VMS Compilation1108006
+Ref: VMS Compilation-Footnote-11109228
+Node: VMS Dynamic Extensions1109286
+Node: VMS Installation Details1110659
+Node: VMS Running1112911
+Node: VMS GNV1115745
+Node: VMS Old Gawk1116468
+Node: Bugs1116938
+Node: Other Versions1120942
+Node: Installation summary1127196
+Node: Notes1128251
+Node: Compatibility Mode1129116
+Node: Additions1129898
+Node: Accessing The Source1130823
+Node: Adding Code1132259
+Node: New Ports1138437
+Node: Derived Files1142918
+Ref: Derived Files-Footnote-11147999
+Ref: Derived Files-Footnote-21148033
+Ref: Derived Files-Footnote-31148629
+Node: Future Extensions1148743
+Node: Implementation Limitations1149349
+Node: Extension Design1150597
+Node: Old Extension Problems1151751
+Ref: Old Extension Problems-Footnote-11153268
+Node: Extension New Mechanism Goals1153325
+Ref: Extension New Mechanism Goals-Footnote-11156685
+Node: Extension Other Design Decisions1156874
+Node: Extension Future Growth1158980
+Node: Old Extension Mechanism1159816
+Node: Notes summary1161578
+Node: Basic Concepts1162763
+Node: Basic High Level1163444
+Ref: figure-general-flow1163716
+Ref: figure-process-flow1164315
+Ref: Basic High Level-Footnote-11167544
+Node: Basic Data Typing1167729
+Node: Glossary1171056
+Node: Copying1196208
+Node: GNU Free Documentation License1233764
+Node: Index1258900

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 5aaacef8..a8c9245d 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -1730,15 +1730,22 @@ the picture of a flashlight in the margin, as shown here.
@ifnottex
``(d.c.)''.
@end ifnottex
+@ifclear FOR_PRINT
They also appear in the index under the heading ``dark corner.''
+@end ifclear
As noted by the opening quote, though, any coverage of dark corners is,
by definition, incomplete.
Extensions to the standard @command{awk} language that are supported by
more than one @command{awk} implementation are marked
+@ifclear FOR_PRINT
``@value{COMMONEXT},'' and listed in the index under ``common extensions''
and ``extensions, common.''
+@end ifclear
+@ifset FOR_PRINT
+``@value{COMMONEXT}.''
+@end ifset
@node Manual History
@unnumberedsec The GNU Project and This Book
@@ -2553,7 +2560,7 @@ runs, it will probably print strange messages about syntax errors.
For example, look at the following:
@example
-$ @kbd{awk '@{ print "hello" @} # let's be cute'}
+$ @kbd{awk 'BEGIN @{ print "hello" @} # let's be cute'}
>
@end example
@@ -20270,11 +20277,12 @@ provides an implementation for other versions of @command{awk}:
#
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# February, 2004
+# Revised June, 2014
@c endfile
@end ignore
@c file eg/lib/strtonum.awk
-function mystrtonum(str, ret, chars, n, i, k, c)
+function mystrtonum(str, ret, n, i, k, c)
@{
if (str ~ /^0[0-7]*$/) @{
# octal
@@ -20287,7 +20295,7 @@ function mystrtonum(str, ret, chars, n, i, k, c)
ret = ret * 8 + k
@}
- @} else if (str ~ /^0[xX][[:xdigit:]]+/) @{
+ @} else if (str ~ /^0[xX][[:xdigit:]]+$/) @{
# hexadecimal
str = substr(str, 3) # lop off leading 0x
n = length(str)
@@ -20295,10 +20303,7 @@ function mystrtonum(str, ret, chars, n, i, k, c)
for (i = 1; i <= n; i++) @{
c = substr(str, i, 1)
c = tolower(c)
- if ((k = index("0123456789", c)) > 0)
- k-- # adjust for 1-basing in awk
- else if ((k = index("abcdef", c)) > 0)
- k += 9
+ k = index("123456789abcdef", c)
ret = ret * 16 + k
@}
@@ -30881,6 +30886,7 @@ When @option{--sandbox} is specified, extensions are disabled
* Extension Samples:: The sample extensions that ship with
@code{gawk}.
* gawkextlib:: The @code{gawkextlib} project.
+* Extension summary:: Extension summary.
@end menu
@node Extension Intro
@@ -31105,7 +31111,7 @@ API function pointers are provided for the following kinds of operations:
@itemize @value{BULLET}
@item
-Registrations functions. You may register:
+Registration functions. You may register:
@itemize @value{MINUS}
@item
extension functions,
@@ -34707,6 +34713,121 @@ If you write an extension that you wish to share with other
@code{gawkextlib} project.
See the project's web site for more information.
+@node Extension summary
+@section Summary
+
+@itemize @value{BULLET}
+@item
+You can write extensions (sometimes called plug-ins) for @command{gawk}
+in C or C++ using the Application Programming Interface (API) defined
+by the @command{gawk} developers.
+
+@item
+Extensions must have a license compatible with the GNU General Public
+License (GPL), and they must assert that fact by declaring a variable
+named @code{plugin_is_GPL_compatible}.
+
+@item
+Communication between @command{gawk} and an extension is two-way.
+@command{gawk} passes a @code{struct} to the extension which contains
+various data fields and function pointers. The extension can then call
+into @command{gawk} via the supplied function pointers to accomplish
+certain tasks.
+
+@item
+One of these tasks is to ``register'' the name and implementation of
+a new @command{awk}-level function with @command{gawk}. The implementation
+takes the form of a C function pointer with a defined signature.
+By convention, implementation functions are named @code{do_@var{XXXX}()}
+for some @command{awk}-level function @code{@var{XXXX}()}.
+
+@item
+The API is defined in a header file named @file{gawkpi.h}. You must include
+a number of standard header files @emph{before} including it in your source file.
+
+@item
+API function pointers are provided for the following kinds of operations:
+
+@itemize @value{BULLET}
+@item
+Registration functions. You may register
+extension functions,
+exit callbacks,
+a version string,
+input parsers,
+output wrappers,
+and two-way processors.
+
+@item
+Printing fatal, warning, and ``lint'' warning messages.
+
+@item
+Updating @code{ERRNO}, or unsetting it.
+
+@item
+Accessing parameters, including converting an undefined parameter into
+an array.
+
+@item
+Symbol table access: retrieving a global variable, creating one,
+or changing one.
+
+@item
+Allocating, reallocating, and releasing memory.
+
+@item
+Creating and releasing cached values; this provides an
+efficient way to use values for multiple variables and
+can be a big performance win.
+
+@item
+Manipulating arrays:
+retrieving, adding, deleting, and modifying elements;
+getting the count of elements in an array;
+creating a new array;
+clearing an array;
+and
+flattening an array for easy C style looping over all its indices and elements
+@end itemize
+
+@item
+The API defines a number of standard data types for representing
+@command{awk} values, array elements, and arrays.
+
+@item
+The API provide convenience functions for constructing values.
+It also provides memory management functions to ensure compatibility
+between memory allocated by @command{gawk} and memory allocated by an
+extension.
+
+@item
+@emph{All} memory passed from @command{gawk} to an extension must be
+treated as read-only by the extension.
+
+@item
+@emph{All} memory passed from an extension to @command{gawk} must come from
+the API's memory allocation functions. @command{gawk} takes responsibility for
+the memory and will release it when appropriate.
+
+@item
+The API provides information about the running version of @command{gawk} so
+that an extension can make sure it is compatible with the @command{gawk}
+that loaded it.
+
+@item
+It is easiest to start a new extension by copying the boilerplate code
+described in this @value{CHAPTER}. Macros in the @file{gawkapi.h} make
+this easier to do.
+
+@item
+The @command{gawk} distribution includes a number of small but useful
+sample extensions. The @code{gawkextlib} project includes several more,
+larger, extensions. If you wish to write an extension and contribute it
+to the community of @command{gawk} users, the @code{gawkextlib} project
+should be the place to do so.
+
+@end itemize
+
@ifnotinfo
@part @value{PART4}Appendices
@end ifnotinfo
@@ -34785,6 +34906,7 @@ online documentation}.
* Common Extensions:: Common Extensions Summary.
* Ranges and Locales:: How locales used to affect regexp ranges.
* Contributors:: The major contributors to @command{gawk}.
+* History summary:: History summary.
@end menu
@node V7/SVR3.1
@@ -36365,6 +36487,41 @@ has been working on @command{gawk} since 1988, at first
helping David Trueman, and as the primary maintainer since around 1994.
@end itemize
+@node History summary
+@appendixsec Summary
+
+@itemize @value{BULLET}
+@item
+The @command{awk} language has evolved over time. The first release
+was with V7 Unix circa 1978. In 1987 for System V Release 3.1,
+major additions, including user-defined functions, were made to the language.
+Additional changes were made for System V Release 4, in 1989.
+Since then, further minor changes happen under the auspices of the
+POSIX standard.
+
+@item
+Brian Kernighan's @command{awk} provides a small number of extensions
+that are implemented in common with other versions of @command{awk}.
+
+@item
+@command{gawk} provides a large number of extensions over POSIX @command{awk}.
+They can be disabled with either the @option{--traditional} or @option{--posix}
+options.
+
+@item
+The interaction of POSIX locales and regexp matching in @command{gawk} has been confusing over
+the years. Today, @command{gawk} implements Rational Range Interpretation, where
+ranges of the form @samp{[a-z]} match @emph{only} the characters numerically between
+@samp{a} through @samp{z} in the machine's native character set. Usually this is ASCII
+but it can be EBCDIC on IBM S/390 systems.
+
+@item
+Many people have contributed to @command{gawk} development over the years.
+We hope that the list provided in this @value{CHAPTER} is complete and gives
+the appropriate credit where credit is due.
+
+@end itemize
+
@node Installation
@appendix Installing @command{gawk}
@@ -36390,6 +36547,7 @@ the respective ports.
* Bugs:: Reporting Problems and Bugs.
* Other Versions:: Other freely available @command{awk}
implementations.
+* Installation summary:: Summary of installation.
@end menu
@node Gawk Distribution
@@ -37932,9 +38090,46 @@ See also the @uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implem
Wikipedia article}, for information on additional versions.
@end table
+@c ENDOFRANGE awkim
+
+@node Installation summary
+@appendixsec Summary
+
+@itemize @value{BULLET}
+@item
+The @command{gawk} distribution is availble from GNU project's main
+distribution site, @code{ftp.gnu.org}. The canonical build recipe is:
+
+@example
+wget http://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz
+tar -xvpzf gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz
+cd gawk-@value{VERSION}.@value{PATCHLEVEL}
+./configure && make && make check
+@end example
+
+@item
+@command{gawk} may be built on non-POSIX systems as well. The currently
+supported systems are MS-Windows using DJGPP, MSYS, MinGW and Cygwin,
+@ifclear FOR_PRINT
+OS/2 using EMX,
+@end ifclear
+and both Vax/VMS and OpenVMS.
+Instructions for each system are included in this @value{CHAPTER}.
+
+@item
+Bug reports should be sent via email to @email{bug-gawk@@gnu.org}.
+Bug reports should be in English, and should include the version of @command{gawk},
+how it was compiled, and a short program and @value{DF} which demonstrate
+the problem.
+
+@item
+There are a number of other freely available @command{awk}
+implementations. Many are POSIX compliant; others are less so.
+
+@end itemize
+
@c ENDOFRANGE gligawk
@c ENDOFRANGE ingawk
-@c ENDOFRANGE awkim
@ifclear FOR_PRINT
@node Notes
@@ -37956,6 +38151,7 @@ maintainers of @command{gawk}. Everything in it applies specifically to
* Implementation Limitations:: Some limitations of the implementation.
* Extension Design:: Design notes about the extension API.
* Old Extension Mechanism:: Some compatibility for old extensions.
+* Notes summary:: Summary of implementation notes.
@end menu
@node Compatibility Mode
@@ -38878,6 +39074,42 @@ The @command{gawk} development team strongly recommends that you
convert any old extensions that you may have to use the new API
described in @ref{Dynamic Extensions}.
+@node Notes summary
+@appendixsec Summary
+
+@itemize @value{BULLET}
+@item
+@command{gawk}'s extensions can be disabled with either the
+@option{--traditional} option or with the @option{--posix} option.
+The @option{--parsedebug} option is availble if @command{gawk} is
+compiled with @samp{-DDEBUG}.
+
+@item
+The source code for @command{gawk} is maintained in a publicly
+accessable Git repository. Anyone may check it out and view the source.
+
+@item
+Contributions to @command{gawk} are welcome. Following the steps
+outlined in this @value{CHAPTER} will make it easier to integrate
+your contributions into the code base.
+This applies both to new feature contributions and to ports to
+additional operating systems.
+
+@item
+@command{gawk} has some limits---generally those that are imposed by
+the machine architecture.
+
+@item
+The extension API design was intended to solve a number of problems
+with the previous extension mechanism, enable features needed by
+the @code{xgawk} project, and provide binary compatibility going forward.
+
+@item
+The previous extension mechanism is still supported in @value{PVERSION} 4.1
+of @command{gawk}, but it @emph{will} be removed in the next major release.
+
+@end itemize
+
@c ENDOFRANGE impis
@c ENDOFRANGE gawii
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index ef793fbd..905d3dd5 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -1697,15 +1697,22 @@ the picture of a flashlight in the margin, as shown here.
@ifnottex
``(d.c.)''.
@end ifnottex
+@ifclear FOR_PRINT
They also appear in the index under the heading ``dark corner.''
+@end ifclear
As noted by the opening quote, though, any coverage of dark corners is,
by definition, incomplete.
Extensions to the standard @command{awk} language that are supported by
more than one @command{awk} implementation are marked
+@ifclear FOR_PRINT
``@value{COMMONEXT},'' and listed in the index under ``common extensions''
and ``extensions, common.''
+@end ifclear
+@ifset FOR_PRINT
+``@value{COMMONEXT}.''
+@end ifset
@node Manual History
@unnumberedsec The GNU Project and This Book
@@ -2481,7 +2488,7 @@ runs, it will probably print strange messages about syntax errors.
For example, look at the following:
@example
-$ @kbd{awk '@{ print "hello" @} # let's be cute'}
+$ @kbd{awk 'BEGIN @{ print "hello" @} # let's be cute'}
>
@end example
@@ -19443,11 +19450,12 @@ provides an implementation for other versions of @command{awk}:
#
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# February, 2004
+# Revised June, 2014
@c endfile
@end ignore
@c file eg/lib/strtonum.awk
-function mystrtonum(str, ret, chars, n, i, k, c)
+function mystrtonum(str, ret, n, i, k, c)
@{
if (str ~ /^0[0-7]*$/) @{
# octal
@@ -19460,7 +19468,7 @@ function mystrtonum(str, ret, chars, n, i, k, c)
ret = ret * 8 + k
@}
- @} else if (str ~ /^0[xX][[:xdigit:]]+/) @{
+ @} else if (str ~ /^0[xX][[:xdigit:]]+$/) @{
# hexadecimal
str = substr(str, 3) # lop off leading 0x
n = length(str)
@@ -19468,10 +19476,7 @@ function mystrtonum(str, ret, chars, n, i, k, c)
for (i = 1; i <= n; i++) @{
c = substr(str, i, 1)
c = tolower(c)
- if ((k = index("0123456789", c)) > 0)
- k-- # adjust for 1-basing in awk
- else if ((k = index("abcdef", c)) > 0)
- k += 9
+ k = index("123456789abcdef", c)
ret = ret * 16 + k
@}
@@ -30025,6 +30030,7 @@ When @option{--sandbox} is specified, extensions are disabled
* Extension Samples:: The sample extensions that ship with
@code{gawk}.
* gawkextlib:: The @code{gawkextlib} project.
+* Extension summary:: Extension summary.
@end menu
@node Extension Intro
@@ -30249,7 +30255,7 @@ API function pointers are provided for the following kinds of operations:
@itemize @value{BULLET}
@item
-Registrations functions. You may register:
+Registration functions. You may register:
@itemize @value{MINUS}
@item
extension functions,
@@ -33851,6 +33857,121 @@ If you write an extension that you wish to share with other
@code{gawkextlib} project.
See the project's web site for more information.
+@node Extension summary
+@section Summary
+
+@itemize @value{BULLET}
+@item
+You can write extensions (sometimes called plug-ins) for @command{gawk}
+in C or C++ using the Application Programming Interface (API) defined
+by the @command{gawk} developers.
+
+@item
+Extensions must have a license compatible with the GNU General Public
+License (GPL), and they must assert that fact by declaring a variable
+named @code{plugin_is_GPL_compatible}.
+
+@item
+Communication between @command{gawk} and an extension is two-way.
+@command{gawk} passes a @code{struct} to the extension which contains
+various data fields and function pointers. The extension can then call
+into @command{gawk} via the supplied function pointers to accomplish
+certain tasks.
+
+@item
+One of these tasks is to ``register'' the name and implementation of
+a new @command{awk}-level function with @command{gawk}. The implementation
+takes the form of a C function pointer with a defined signature.
+By convention, implementation functions are named @code{do_@var{XXXX}()}
+for some @command{awk}-level function @code{@var{XXXX}()}.
+
+@item
+The API is defined in a header file named @file{gawkpi.h}. You must include
+a number of standard header files @emph{before} including it in your source file.
+
+@item
+API function pointers are provided for the following kinds of operations:
+
+@itemize @value{BULLET}
+@item
+Registration functions. You may register
+extension functions,
+exit callbacks,
+a version string,
+input parsers,
+output wrappers,
+and two-way processors.
+
+@item
+Printing fatal, warning, and ``lint'' warning messages.
+
+@item
+Updating @code{ERRNO}, or unsetting it.
+
+@item
+Accessing parameters, including converting an undefined parameter into
+an array.
+
+@item
+Symbol table access: retrieving a global variable, creating one,
+or changing one.
+
+@item
+Allocating, reallocating, and releasing memory.
+
+@item
+Creating and releasing cached values; this provides an
+efficient way to use values for multiple variables and
+can be a big performance win.
+
+@item
+Manipulating arrays:
+retrieving, adding, deleting, and modifying elements;
+getting the count of elements in an array;
+creating a new array;
+clearing an array;
+and
+flattening an array for easy C style looping over all its indices and elements
+@end itemize
+
+@item
+The API defines a number of standard data types for representing
+@command{awk} values, array elements, and arrays.
+
+@item
+The API provide convenience functions for constructing values.
+It also provides memory management functions to ensure compatibility
+between memory allocated by @command{gawk} and memory allocated by an
+extension.
+
+@item
+@emph{All} memory passed from @command{gawk} to an extension must be
+treated as read-only by the extension.
+
+@item
+@emph{All} memory passed from an extension to @command{gawk} must come from
+the API's memory allocation functions. @command{gawk} takes responsibility for
+the memory and will release it when appropriate.
+
+@item
+The API provides information about the running version of @command{gawk} so
+that an extension can make sure it is compatible with the @command{gawk}
+that loaded it.
+
+@item
+It is easiest to start a new extension by copying the boilerplate code
+described in this @value{CHAPTER}. Macros in the @file{gawkapi.h} make
+this easier to do.
+
+@item
+The @command{gawk} distribution includes a number of small but useful
+sample extensions. The @code{gawkextlib} project includes several more,
+larger, extensions. If you wish to write an extension and contribute it
+to the community of @command{gawk} users, the @code{gawkextlib} project
+should be the place to do so.
+
+@end itemize
+
@ifnotinfo
@part @value{PART4}Appendices
@end ifnotinfo
@@ -33929,6 +34050,7 @@ online documentation}.
* Common Extensions:: Common Extensions Summary.
* Ranges and Locales:: How locales used to affect regexp ranges.
* Contributors:: The major contributors to @command{gawk}.
+* History summary:: History summary.
@end menu
@node V7/SVR3.1
@@ -35509,6 +35631,41 @@ has been working on @command{gawk} since 1988, at first
helping David Trueman, and as the primary maintainer since around 1994.
@end itemize
+@node History summary
+@appendixsec Summary
+
+@itemize @value{BULLET}
+@item
+The @command{awk} language has evolved over time. The first release
+was with V7 Unix circa 1978. In 1987 for System V Release 3.1,
+major additions, including user-defined functions, were made to the language.
+Additional changes were made for System V Release 4, in 1989.
+Since then, further minor changes happen under the auspices of the
+POSIX standard.
+
+@item
+Brian Kernighan's @command{awk} provides a small number of extensions
+that are implemented in common with other versions of @command{awk}.
+
+@item
+@command{gawk} provides a large number of extensions over POSIX @command{awk}.
+They can be disabled with either the @option{--traditional} or @option{--posix}
+options.
+
+@item
+The interaction of POSIX locales and regexp matching in @command{gawk} has been confusing over
+the years. Today, @command{gawk} implements Rational Range Interpretation, where
+ranges of the form @samp{[a-z]} match @emph{only} the characters numerically between
+@samp{a} through @samp{z} in the machine's native character set. Usually this is ASCII
+but it can be EBCDIC on IBM S/390 systems.
+
+@item
+Many people have contributed to @command{gawk} development over the years.
+We hope that the list provided in this @value{CHAPTER} is complete and gives
+the appropriate credit where credit is due.
+
+@end itemize
+
@node Installation
@appendix Installing @command{gawk}
@@ -35534,6 +35691,7 @@ the respective ports.
* Bugs:: Reporting Problems and Bugs.
* Other Versions:: Other freely available @command{awk}
implementations.
+* Installation summary:: Summary of installation.
@end menu
@node Gawk Distribution
@@ -37076,9 +37234,46 @@ See also the @uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implem
Wikipedia article}, for information on additional versions.
@end table
+@c ENDOFRANGE awkim
+
+@node Installation summary
+@appendixsec Summary
+
+@itemize @value{BULLET}
+@item
+The @command{gawk} distribution is availble from GNU project's main
+distribution site, @code{ftp.gnu.org}. The canonical build recipe is:
+
+@example
+wget http://ftp.gnu.org/gnu/gawk/gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz
+tar -xvpzf gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz
+cd gawk-@value{VERSION}.@value{PATCHLEVEL}
+./configure && make && make check
+@end example
+
+@item
+@command{gawk} may be built on non-POSIX systems as well. The currently
+supported systems are MS-Windows using DJGPP, MSYS, MinGW and Cygwin,
+@ifclear FOR_PRINT
+OS/2 using EMX,
+@end ifclear
+and both Vax/VMS and OpenVMS.
+Instructions for each system are included in this @value{CHAPTER}.
+
+@item
+Bug reports should be sent via email to @email{bug-gawk@@gnu.org}.
+Bug reports should be in English, and should include the version of @command{gawk},
+how it was compiled, and a short program and @value{DF} which demonstrate
+the problem.
+
+@item
+There are a number of other freely available @command{awk}
+implementations. Many are POSIX compliant; others are less so.
+
+@end itemize
+
@c ENDOFRANGE gligawk
@c ENDOFRANGE ingawk
-@c ENDOFRANGE awkim
@ifclear FOR_PRINT
@node Notes
@@ -37100,6 +37295,7 @@ maintainers of @command{gawk}. Everything in it applies specifically to
* Implementation Limitations:: Some limitations of the implementation.
* Extension Design:: Design notes about the extension API.
* Old Extension Mechanism:: Some compatibility for old extensions.
+* Notes summary:: Summary of implementation notes.
@end menu
@node Compatibility Mode
@@ -38022,6 +38218,42 @@ The @command{gawk} development team strongly recommends that you
convert any old extensions that you may have to use the new API
described in @ref{Dynamic Extensions}.
+@node Notes summary
+@appendixsec Summary
+
+@itemize @value{BULLET}
+@item
+@command{gawk}'s extensions can be disabled with either the
+@option{--traditional} option or with the @option{--posix} option.
+The @option{--parsedebug} option is availble if @command{gawk} is
+compiled with @samp{-DDEBUG}.
+
+@item
+The source code for @command{gawk} is maintained in a publicly
+accessable Git repository. Anyone may check it out and view the source.
+
+@item
+Contributions to @command{gawk} are welcome. Following the steps
+outlined in this @value{CHAPTER} will make it easier to integrate
+your contributions into the code base.
+This applies both to new feature contributions and to ports to
+additional operating systems.
+
+@item
+@command{gawk} has some limits---generally those that are imposed by
+the machine architecture.
+
+@item
+The extension API design was intended to solve a number of problems
+with the previous extension mechanism, enable features needed by
+the @code{xgawk} project, and provide binary compatibility going forward.
+
+@item
+The previous extension mechanism is still supported in @value{PVERSION} 4.1
+of @command{gawk}, but it @emph{will} be removed in the next major release.
+
+@end itemize
+
@c ENDOFRANGE impis
@c ENDOFRANGE gawii