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 79e49f7e..d952d239 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 1ed56125..4b669731 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
@@ -14261,7 +14261,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
@@ -14274,7 +14274,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)
@@ -14282,10 +14282,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
}
@@ -22318,6 +22315,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
@@ -22509,7 +22507,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,
@@ -25622,7 +25620,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
=============================
@@ -25692,6 +25690,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
@@ -25722,6 +25809,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
@@ -26576,7 +26664,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'
================================
@@ -26722,6 +26810,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'
@@ -26742,6 +26862,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
@@ -27815,7 +27936,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
================================================
@@ -27965,6 +28086,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
@@ -27983,6 +28132,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
@@ -28687,7 +28837,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
====================================
@@ -28725,6 +28875,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
@@ -33859,525 +34040,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-1442410
-Ref: Auto-set-Footnote-2442615
-Node: ARGC and ARGV442671
-Node: Pattern Action Summary446525
-Node: Arrays448748
-Node: Array Basics450297
-Node: Array Intro451123
-Ref: figure-array-elements453096
-Node: Reference to Elements455503
-Node: Assigning Elements457776
-Node: Array Example458267
-Node: Scanning an Array459999
-Node: Controlling Scanning463014
-Ref: Controlling Scanning-Footnote-1468187
-Node: Delete468503
-Ref: Delete-Footnote-1471268
-Node: Numeric Array Subscripts471325
-Node: Uninitialized Subscripts473508
-Node: Multidimensional475133
-Node: Multiscanning478226
-Node: Arrays of Arrays479815
-Node: Arrays Summary484478
-Node: Functions486583
-Node: Built-in487456
-Node: Calling Built-in488534
-Node: Numeric Functions490522
-Ref: Numeric Functions-Footnote-1494356
-Ref: Numeric Functions-Footnote-2494713
-Ref: Numeric Functions-Footnote-3494761
-Node: String Functions495030
-Ref: String Functions-Footnote-1518041
-Ref: String Functions-Footnote-2518170
-Ref: String Functions-Footnote-3518418
-Node: Gory Details518505
-Ref: table-sub-escapes520174
-Ref: table-sub-posix-92521528
-Ref: table-sub-proposed522879
-Ref: table-posix-sub524233
-Ref: table-gensub-escapes525778
-Ref: Gory Details-Footnote-1526954
-Ref: Gory Details-Footnote-2527005
-Node: I/O Functions527156
-Ref: I/O Functions-Footnote-1534279
-Node: Time Functions534426
-Ref: Time Functions-Footnote-1544890
-Ref: Time Functions-Footnote-2544958
-Ref: Time Functions-Footnote-3545116
-Ref: Time Functions-Footnote-4545227
-Ref: Time Functions-Footnote-5545339
-Ref: Time Functions-Footnote-6545566
-Node: Bitwise Functions545832
-Ref: table-bitwise-ops546394
-Ref: Bitwise Functions-Footnote-1550639
-Node: Type Functions550823
-Node: I18N Functions551965
-Node: User-defined553610
-Node: Definition Syntax554414
-Ref: Definition Syntax-Footnote-1559339
-Node: Function Example559408
-Ref: Function Example-Footnote-1562052
-Node: Function Caveats562074
-Node: Calling A Function562592
-Node: Variable Scope563547
-Node: Pass By Value/Reference566535
-Node: Return Statement570043
-Node: Dynamic Typing573027
-Node: Indirect Calls573956
-Node: Functions Summary583669
-Node: Library Functions586208
-Ref: Library Functions-Footnote-1589783
-Ref: Library Functions-Footnote-2589926
-Node: Library Names590097
-Ref: Library Names-Footnote-1593570
-Ref: Library Names-Footnote-2593790
-Node: General Functions593876
-Node: Strtonum Function594904
-Node: Assert Function597834
-Node: Round Function601160
-Node: Cliff Random Function602701
-Node: Ordinal Functions603717
-Ref: Ordinal Functions-Footnote-1606794
-Ref: Ordinal Functions-Footnote-2607046
-Node: Join Function607257
-Ref: Join Function-Footnote-1609028
-Node: Getlocaltime Function609228
-Node: Readfile Function612964
-Node: Data File Management614803
-Node: Filetrans Function615435
-Node: Rewind Function619504
-Node: File Checking620891
-Ref: File Checking-Footnote-1622023
-Node: Empty Files622224
-Node: Ignoring Assigns624454
-Node: Getopt Function626008
-Ref: Getopt Function-Footnote-1637311
-Node: Passwd Functions637514
-Ref: Passwd Functions-Footnote-1646493
-Node: Group Functions646581
-Ref: Group Functions-Footnote-1654523
-Node: Walking Arrays654736
-Node: Library Functions Summary656906
-Node: Sample Programs658268
-Node: Running Examples658995
-Node: Clones659723
-Node: Cut Program660947
-Node: Egrep Program670815
-Ref: Egrep Program-Footnote-1678786
-Node: Id Program678896
-Node: Split Program682560
-Ref: Split Program-Footnote-1686098
-Node: Tee Program686226
-Node: Uniq Program689033
-Node: Wc Program696463
-Ref: Wc Program-Footnote-1700731
-Ref: Wc Program-Footnote-2700931
-Node: Miscellaneous Programs701023
-Node: Dupword Program702236
-Node: Alarm Program704267
-Node: Translate Program709081
-Ref: Translate Program-Footnote-1713472
-Ref: Translate Program-Footnote-2713742
-Node: Labels Program713876
-Ref: Labels Program-Footnote-1717247
-Node: Word Sorting717331
-Node: History Sorting721374
-Node: Extract Program723210
-Ref: Extract Program-Footnote-1730785
-Node: Simple Sed730914
-Node: Igawk Program733976
-Ref: Igawk Program-Footnote-1749152
-Ref: Igawk Program-Footnote-2749353
-Node: Anagram Program749491
-Node: Signature Program752559
-Node: Programs Summary753806
-Node: Advanced Features754994
-Node: Nondecimal Data756942
-Node: Array Sorting758519
-Node: Controlling Array Traversal759216
-Node: Array Sorting Functions767496
-Ref: Array Sorting Functions-Footnote-1771403
-Node: Two-way I/O771597
-Ref: Two-way I/O-Footnote-1777113
-Node: TCP/IP Networking777195
-Node: Profiling780039
-Node: Advanced Features Summary787581
-Node: Internationalization789445
-Node: I18N and L10N790925
-Node: Explaining gettext791611
-Ref: Explaining gettext-Footnote-1796751
-Ref: Explaining gettext-Footnote-2796935
-Node: Programmer i18n797100
-Node: Translator i18n801325
-Node: String Extraction802119
-Ref: String Extraction-Footnote-1803080
-Node: Printf Ordering803166
-Ref: Printf Ordering-Footnote-1805948
-Node: I18N Portability806012
-Ref: I18N Portability-Footnote-1808461
-Node: I18N Example808524
-Ref: I18N Example-Footnote-1811246
-Node: Gawk I18N811318
-Node: I18N Summary811956
-Node: Debugger813295
-Node: Debugging814317
-Node: Debugging Concepts814758
-Node: Debugging Terms816614
-Node: Awk Debugging819211
-Node: Sample Debugging Session820103
-Node: Debugger Invocation820623
-Node: Finding The Bug821956
-Node: List of Debugger Commands828438
-Node: Breakpoint Control829770
-Node: Debugger Execution Control833434
-Node: Viewing And Changing Data836794
-Node: Execution Stack840152
-Node: Debugger Info841665
-Node: Miscellaneous Debugger Commands845659
-Node: Readline Support850843
-Node: Limitations851735
-Node: Debugging Summary854009
-Node: Arbitrary Precision Arithmetic855173
-Ref: Arbitrary Precision Arithmetic-Footnote-1856822
-Node: General Arithmetic856970
-Node: Floating Point Issues858690
-Node: String Conversion Precision859571
-Ref: String Conversion Precision-Footnote-1861276
-Node: Unexpected Results861385
-Node: POSIX Floating Point Problems863538
-Ref: POSIX Floating Point Problems-Footnote-1867359
-Node: Integer Programming867397
-Node: Floating-point Programming869208
-Ref: Floating-point Programming-Footnote-1875536
-Ref: Floating-point Programming-Footnote-2875806
-Node: Floating-point Representation876070
-Node: Floating-point Context877235
-Ref: table-ieee-formats878074
-Node: Rounding Mode879458
-Ref: table-rounding-modes879937
-Ref: Rounding Mode-Footnote-1882952
-Node: Gawk and MPFR883131
-Node: Arbitrary Precision Floats884540
-Ref: Arbitrary Precision Floats-Footnote-1886983
-Node: Setting Precision887304
-Ref: table-predefined-precision-strings887988
-Node: Setting Rounding Mode890133
-Ref: table-gawk-rounding-modes890537
-Node: Floating-point Constants891724
-Node: Changing Precision893176
-Ref: Changing Precision-Footnote-1894568
-Node: Exact Arithmetic894742
-Node: Arbitrary Precision Integers897876
-Ref: Arbitrary Precision Integers-Footnote-1900891
-Node: Dynamic Extensions901038
-Node: Extension Intro902496
-Node: Plugin License903761
-Node: Extension Mechanism Outline904446
-Ref: figure-load-extension904870
-Ref: figure-load-new-function906355
-Ref: figure-call-new-function907357
-Node: Extension API Description909341
-Node: Extension API Functions Introduction910791
-Node: General Data Types915657
-Ref: General Data Types-Footnote-1921350
-Node: Requesting Values921649
-Ref: table-value-types-returned922386
-Node: Memory Allocation Functions923344
-Ref: Memory Allocation Functions-Footnote-1926091
-Node: Constructor Functions926187
-Node: Registration Functions927945
-Node: Extension Functions928630
-Node: Exit Callback Functions930932
-Node: Extension Version String932181
-Node: Input Parsers932831
-Node: Output Wrappers942634
-Node: Two-way processors947150
-Node: Printing Messages949354
-Ref: Printing Messages-Footnote-1950431
-Node: Updating `ERRNO'950583
-Node: Accessing Parameters951322
-Node: Symbol Table Access952552
-Node: Symbol table by name953066
-Node: Symbol table by cookie955042
-Ref: Symbol table by cookie-Footnote-1959175
-Node: Cached values959238
-Ref: Cached values-Footnote-1962742
-Node: Array Manipulation962833
-Ref: Array Manipulation-Footnote-1963931
-Node: Array Data Types963970
-Ref: Array Data Types-Footnote-1966673
-Node: Array Functions966765
-Node: Flattening Arrays970639
-Node: Creating Arrays977491
-Node: Extension API Variables982222
-Node: Extension Versioning982858
-Node: Extension API Informational Variables984759
-Node: Extension API Boilerplate985845
-Node: Finding Extensions989649
-Node: Extension Example990209
-Node: Internal File Description990939
-Node: Internal File Ops995030
-Ref: Internal File Ops-Footnote-11006576
-Node: Using Internal File Ops1006716
-Ref: Using Internal File Ops-Footnote-11009063
-Node: Extension Samples1009331
-Node: Extension Sample File Functions1010855
-Node: Extension Sample Fnmatch1018423
-Node: Extension Sample Fork1019904
-Node: Extension Sample Inplace1021117
-Node: Extension Sample Ord1022897
-Node: Extension Sample Readdir1023733
-Ref: table-readdir-file-types1024589
-Node: Extension Sample Revout1025388
-Node: Extension Sample Rev2way1025979
-Node: Extension Sample Read write array1026720
-Node: Extension Sample Readfile1028599
-Node: Extension Sample API Tests1029699
-Node: Extension Sample Time1030224
-Node: gawkextlib1031539
-Node: Language History1034326
-Node: V7/SVR3.11035920
-Node: SVR41038240
-Node: POSIX1039682
-Node: BTL1041068
-Node: POSIX/GNU1041802
-Node: Feature History1047401
-Node: Common Extensions1060513
-Node: Ranges and Locales1061825
-Ref: Ranges and Locales-Footnote-11066442
-Ref: Ranges and Locales-Footnote-21066469
-Ref: Ranges and Locales-Footnote-31066703
-Node: Contributors1066924
-Node: Installation1072362
-Node: Gawk Distribution1073256
-Node: Getting1073740
-Node: Extracting1074566
-Node: Distribution contents1076208
-Node: Unix Installation1081925
-Node: Quick Installation1082542
-Node: Additional Configuration Options1084984
-Node: Configuration Philosophy1086722
-Node: Non-Unix Installation1089073
-Node: PC Installation1089531
-Node: PC Binary Installation1090842
-Node: PC Compiling1092690
-Ref: PC Compiling-Footnote-11095689
-Node: PC Testing1095794
-Node: PC Using1096970
-Node: Cygwin1101128
-Node: MSYS1101937
-Node: VMS Installation1102451
-Node: VMS Compilation1103247
-Ref: VMS Compilation-Footnote-11104469
-Node: VMS Dynamic Extensions1104527
-Node: VMS Installation Details1105900
-Node: VMS Running1108152
-Node: VMS GNV1110986
-Node: VMS Old Gawk1111709
-Node: Bugs1112179
-Node: Other Versions1116183
-Node: Notes1122408
-Node: Compatibility Mode1123208
-Node: Additions1123990
-Node: Accessing The Source1124915
-Node: Adding Code1126351
-Node: New Ports1132529
-Node: Derived Files1137010
-Ref: Derived Files-Footnote-11142091
-Ref: Derived Files-Footnote-21142125
-Ref: Derived Files-Footnote-31142721
-Node: Future Extensions1142835
-Node: Implementation Limitations1143441
-Node: Extension Design1144689
-Node: Old Extension Problems1145843
-Ref: Old Extension Problems-Footnote-11147360
-Node: Extension New Mechanism Goals1147417
-Ref: Extension New Mechanism Goals-Footnote-11150777
-Node: Extension Other Design Decisions1150966
-Node: Extension Future Growth1153072
-Node: Old Extension Mechanism1153908
-Node: Basic Concepts1155648
-Node: Basic High Level1156329
-Ref: figure-general-flow1156601
-Ref: figure-process-flow1157200
-Ref: Basic High Level-Footnote-11160429
-Node: Basic Data Typing1160614
-Node: Glossary1163941
-Node: Copying1189093
-Node: GNU Free Documentation License1226649
-Node: Index1251785
+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-1442416
+Ref: Auto-set-Footnote-2442621
+Node: ARGC and ARGV442677
+Node: Pattern Action Summary446531
+Node: Arrays448754
+Node: Array Basics450303
+Node: Array Intro451129
+Ref: figure-array-elements453102
+Node: Reference to Elements455509
+Node: Assigning Elements457782
+Node: Array Example458273
+Node: Scanning an Array460005
+Node: Controlling Scanning463020
+Ref: Controlling Scanning-Footnote-1468193
+Node: Delete468509
+Ref: Delete-Footnote-1471274
+Node: Numeric Array Subscripts471331
+Node: Uninitialized Subscripts473514
+Node: Multidimensional475139
+Node: Multiscanning478232
+Node: Arrays of Arrays479821
+Node: Arrays Summary484484
+Node: Functions486589
+Node: Built-in487462
+Node: Calling Built-in488540
+Node: Numeric Functions490528
+Ref: Numeric Functions-Footnote-1494362
+Ref: Numeric Functions-Footnote-2494719
+Ref: Numeric Functions-Footnote-3494767
+Node: String Functions495036
+Ref: String Functions-Footnote-1518047
+Ref: String Functions-Footnote-2518176
+Ref: String Functions-Footnote-3518424
+Node: Gory Details518511
+Ref: table-sub-escapes520180
+Ref: table-sub-posix-92521534
+Ref: table-sub-proposed522885
+Ref: table-posix-sub524239
+Ref: table-gensub-escapes525784
+Ref: Gory Details-Footnote-1526960
+Ref: Gory Details-Footnote-2527011
+Node: I/O Functions527162
+Ref: I/O Functions-Footnote-1534285
+Node: Time Functions534432
+Ref: Time Functions-Footnote-1544896
+Ref: Time Functions-Footnote-2544964
+Ref: Time Functions-Footnote-3545122
+Ref: Time Functions-Footnote-4545233
+Ref: Time Functions-Footnote-5545345
+Ref: Time Functions-Footnote-6545572
+Node: Bitwise Functions545838
+Ref: table-bitwise-ops546400
+Ref: Bitwise Functions-Footnote-1550645
+Node: Type Functions550829
+Node: I18N Functions551971
+Node: User-defined553616
+Node: Definition Syntax554420
+Ref: Definition Syntax-Footnote-1559345
+Node: Function Example559414
+Ref: Function Example-Footnote-1562058
+Node: Function Caveats562080
+Node: Calling A Function562598
+Node: Variable Scope563553
+Node: Pass By Value/Reference566541
+Node: Return Statement570049
+Node: Dynamic Typing573033
+Node: Indirect Calls573962
+Node: Functions Summary583675
+Node: Library Functions586214
+Ref: Library Functions-Footnote-1589789
+Ref: Library Functions-Footnote-2589932
+Node: Library Names590103
+Ref: Library Names-Footnote-1593576
+Ref: Library Names-Footnote-2593796
+Node: General Functions593882
+Node: Strtonum Function594910
+Node: Assert Function597690
+Node: Round Function601016
+Node: Cliff Random Function602557
+Node: Ordinal Functions603573
+Ref: Ordinal Functions-Footnote-1606650
+Ref: Ordinal Functions-Footnote-2606902
+Node: Join Function607113
+Ref: Join Function-Footnote-1608884
+Node: Getlocaltime Function609084
+Node: Readfile Function612820
+Node: Data File Management614659
+Node: Filetrans Function615291
+Node: Rewind Function619360
+Node: File Checking620747
+Ref: File Checking-Footnote-1621879
+Node: Empty Files622080
+Node: Ignoring Assigns624310
+Node: Getopt Function625864
+Ref: Getopt Function-Footnote-1637167
+Node: Passwd Functions637370
+Ref: Passwd Functions-Footnote-1646349
+Node: Group Functions646437
+Ref: Group Functions-Footnote-1654379
+Node: Walking Arrays654592
+Node: Library Functions Summary656762
+Node: Sample Programs658124
+Node: Running Examples658851
+Node: Clones659579
+Node: Cut Program660803
+Node: Egrep Program670671
+Ref: Egrep Program-Footnote-1678642
+Node: Id Program678752
+Node: Split Program682416
+Ref: Split Program-Footnote-1685954
+Node: Tee Program686082
+Node: Uniq Program688889
+Node: Wc Program696319
+Ref: Wc Program-Footnote-1700587
+Ref: Wc Program-Footnote-2700787
+Node: Miscellaneous Programs700879
+Node: Dupword Program702092
+Node: Alarm Program704123
+Node: Translate Program708937
+Ref: Translate Program-Footnote-1713328
+Ref: Translate Program-Footnote-2713598
+Node: Labels Program713732
+Ref: Labels Program-Footnote-1717103
+Node: Word Sorting717187
+Node: History Sorting721230
+Node: Extract Program723066
+Ref: Extract Program-Footnote-1730641
+Node: Simple Sed730770
+Node: Igawk Program733832
+Ref: Igawk Program-Footnote-1749008
+Ref: Igawk Program-Footnote-2749209
+Node: Anagram Program749347
+Node: Signature Program752415
+Node: Programs Summary753662
+Node: Advanced Features754850
+Node: Nondecimal Data756798
+Node: Array Sorting758375
+Node: Controlling Array Traversal759072
+Node: Array Sorting Functions767352
+Ref: Array Sorting Functions-Footnote-1771259
+Node: Two-way I/O771453
+Ref: Two-way I/O-Footnote-1776969
+Node: TCP/IP Networking777051
+Node: Profiling779895
+Node: Advanced Features Summary787437
+Node: Internationalization789301
+Node: I18N and L10N790781
+Node: Explaining gettext791467
+Ref: Explaining gettext-Footnote-1796607
+Ref: Explaining gettext-Footnote-2796791
+Node: Programmer i18n796956
+Node: Translator i18n801181
+Node: String Extraction801975
+Ref: String Extraction-Footnote-1802936
+Node: Printf Ordering803022
+Ref: Printf Ordering-Footnote-1805804
+Node: I18N Portability805868
+Ref: I18N Portability-Footnote-1808317
+Node: I18N Example808380
+Ref: I18N Example-Footnote-1811102
+Node: Gawk I18N811174
+Node: I18N Summary811812
+Node: Debugger813151
+Node: Debugging814173
+Node: Debugging Concepts814614
+Node: Debugging Terms816470
+Node: Awk Debugging819067
+Node: Sample Debugging Session819959
+Node: Debugger Invocation820479
+Node: Finding The Bug821812
+Node: List of Debugger Commands828294
+Node: Breakpoint Control829626
+Node: Debugger Execution Control833290
+Node: Viewing And Changing Data836650
+Node: Execution Stack840008
+Node: Debugger Info841521
+Node: Miscellaneous Debugger Commands845515
+Node: Readline Support850699
+Node: Limitations851591
+Node: Debugging Summary853865
+Node: Arbitrary Precision Arithmetic855029
+Ref: Arbitrary Precision Arithmetic-Footnote-1856678
+Node: General Arithmetic856826
+Node: Floating Point Issues858546
+Node: String Conversion Precision859427
+Ref: String Conversion Precision-Footnote-1861132
+Node: Unexpected Results861241
+Node: POSIX Floating Point Problems863394
+Ref: POSIX Floating Point Problems-Footnote-1867215
+Node: Integer Programming867253
+Node: Floating-point Programming869064
+Ref: Floating-point Programming-Footnote-1875392
+Ref: Floating-point Programming-Footnote-2875662
+Node: Floating-point Representation875926
+Node: Floating-point Context877091
+Ref: table-ieee-formats877930
+Node: Rounding Mode879314
+Ref: table-rounding-modes879793
+Ref: Rounding Mode-Footnote-1882808
+Node: Gawk and MPFR882987
+Node: Arbitrary Precision Floats884396
+Ref: Arbitrary Precision Floats-Footnote-1886839
+Node: Setting Precision887160
+Ref: table-predefined-precision-strings887844
+Node: Setting Rounding Mode889989
+Ref: table-gawk-rounding-modes890393
+Node: Floating-point Constants891580
+Node: Changing Precision893032
+Ref: Changing Precision-Footnote-1894424
+Node: Exact Arithmetic894598
+Node: Arbitrary Precision Integers897732
+Ref: Arbitrary Precision Integers-Footnote-1900747
+Node: Dynamic Extensions900894
+Node: Extension Intro902403
+Node: Plugin License903668
+Node: Extension Mechanism Outline904353
+Ref: figure-load-extension904777
+Ref: figure-load-new-function906262
+Ref: figure-call-new-function907264
+Node: Extension API Description909248
+Node: Extension API Functions Introduction910698
+Node: General Data Types915563
+Ref: General Data Types-Footnote-1921256
+Node: Requesting Values921555
+Ref: table-value-types-returned922292
+Node: Memory Allocation Functions923250
+Ref: Memory Allocation Functions-Footnote-1925997
+Node: Constructor Functions926093
+Node: Registration Functions927851
+Node: Extension Functions928536
+Node: Exit Callback Functions930838
+Node: Extension Version String932087
+Node: Input Parsers932737
+Node: Output Wrappers942540
+Node: Two-way processors947056
+Node: Printing Messages949260
+Ref: Printing Messages-Footnote-1950337
+Node: Updating `ERRNO'950489
+Node: Accessing Parameters951228
+Node: Symbol Table Access952458
+Node: Symbol table by name952972
+Node: Symbol table by cookie954948
+Ref: Symbol table by cookie-Footnote-1959081
+Node: Cached values959144
+Ref: Cached values-Footnote-1962648
+Node: Array Manipulation962739
+Ref: Array Manipulation-Footnote-1963837
+Node: Array Data Types963876
+Ref: Array Data Types-Footnote-1966579
+Node: Array Functions966671
+Node: Flattening Arrays970545
+Node: Creating Arrays977397
+Node: Extension API Variables982128
+Node: Extension Versioning982764
+Node: Extension API Informational Variables984665
+Node: Extension API Boilerplate985751
+Node: Finding Extensions989555
+Node: Extension Example990115
+Node: Internal File Description990845
+Node: Internal File Ops994936
+Ref: Internal File Ops-Footnote-11006482
+Node: Using Internal File Ops1006622
+Ref: Using Internal File Ops-Footnote-11008969
+Node: Extension Samples1009237
+Node: Extension Sample File Functions1010761
+Node: Extension Sample Fnmatch1018329
+Node: Extension Sample Fork1019810
+Node: Extension Sample Inplace1021023
+Node: Extension Sample Ord1022803
+Node: Extension Sample Readdir1023639
+Ref: table-readdir-file-types1024495
+Node: Extension Sample Revout1025294
+Node: Extension Sample Rev2way1025885
+Node: Extension Sample Read write array1026626
+Node: Extension Sample Readfile1028505
+Node: Extension Sample API Tests1029605
+Node: Extension Sample Time1030130
+Node: gawkextlib1031445
+Node: Extension summary1034258
+Node: Language History1037923
+Node: V7/SVR3.11039566
+Node: SVR41041886
+Node: POSIX1043328
+Node: BTL1044714
+Node: POSIX/GNU1045448
+Node: Feature History1051047
+Node: Common Extensions1064159
+Node: Ranges and Locales1065471
+Ref: Ranges and Locales-Footnote-11070088
+Ref: Ranges and Locales-Footnote-21070115
+Ref: Ranges and Locales-Footnote-31070349
+Node: Contributors1070570
+Node: History summary1076032
+Node: Installation1077401
+Node: Gawk Distribution1078352
+Node: Getting1078836
+Node: Extracting1079662
+Node: Distribution contents1081304
+Node: Unix Installation1087021
+Node: Quick Installation1087638
+Node: Additional Configuration Options1090080
+Node: Configuration Philosophy1091818
+Node: Non-Unix Installation1094169
+Node: PC Installation1094627
+Node: PC Binary Installation1095938
+Node: PC Compiling1097786
+Ref: PC Compiling-Footnote-11100785
+Node: PC Testing1100890
+Node: PC Using1102066
+Node: Cygwin1106224
+Node: MSYS1107033
+Node: VMS Installation1107547
+Node: VMS Compilation1108343
+Ref: VMS Compilation-Footnote-11109565
+Node: VMS Dynamic Extensions1109623
+Node: VMS Installation Details1110996
+Node: VMS Running1113248
+Node: VMS GNV1116082
+Node: VMS Old Gawk1116805
+Node: Bugs1117275
+Node: Other Versions1121279
+Node: Installation summary1127533
+Node: Notes1128588
+Node: Compatibility Mode1129453
+Node: Additions1130235
+Node: Accessing The Source1131160
+Node: Adding Code1132596
+Node: New Ports1138774
+Node: Derived Files1143255
+Ref: Derived Files-Footnote-11148336
+Ref: Derived Files-Footnote-21148370
+Ref: Derived Files-Footnote-31148966
+Node: Future Extensions1149080
+Node: Implementation Limitations1149686
+Node: Extension Design1150934
+Node: Old Extension Problems1152088
+Ref: Old Extension Problems-Footnote-11153605
+Node: Extension New Mechanism Goals1153662
+Ref: Extension New Mechanism Goals-Footnote-11157022
+Node: Extension Other Design Decisions1157211
+Node: Extension Future Growth1159317
+Node: Old Extension Mechanism1160153
+Node: Notes summary1161915
+Node: Basic Concepts1163100
+Node: Basic High Level1163781
+Ref: figure-general-flow1164053
+Ref: figure-process-flow1164652
+Ref: Basic High Level-Footnote-11167881
+Node: Basic Data Typing1168066
+Node: Glossary1171393
+Node: Copying1196545
+Node: GNU Free Documentation License1234101
+Node: Index1259237

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 9a1868a8..0db8832a 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
@@ -20278,11 +20285,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
@@ -20295,7 +20303,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)
@@ -20303,10 +20311,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
@}
@@ -30889,6 +30894,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
@@ -31113,7 +31119,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,
@@ -34715,6 +34721,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
@@ -34793,6 +34914,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
@@ -36373,6 +36495,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}
@@ -36398,6 +36555,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
@@ -37942,9 +38100,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
@@ -37966,6 +38161,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
@@ -38888,6 +39084,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 446fb2c8..d37b51d7 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
@@ -19451,11 +19458,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
@@ -19468,7 +19476,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)
@@ -19476,10 +19484,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
@}
@@ -30033,6 +30038,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
@@ -30257,7 +30263,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,
@@ -33859,6 +33865,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
@@ -33937,6 +34058,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
@@ -35517,6 +35639,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}
@@ -35542,6 +35699,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
@@ -37086,9 +37244,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
@@ -37110,6 +37305,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
@@ -38032,6 +38228,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