diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2014-06-15 20:36:33 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2014-06-15 20:36:33 +0300 |
commit | ec27289f558e73b40c3d90f599cf392a9d03e864 (patch) | |
tree | 7dd5972d184c99ad319991e88254f4e6bbf8df5c | |
parent | 4f04830cdcef50ac2449b6dbc97c67acc4ec238d (diff) | |
download | egawk-ec27289f558e73b40c3d90f599cf392a9d03e864.tar.gz egawk-ec27289f558e73b40c3d90f599cf392a9d03e864.tar.bz2 egawk-ec27289f558e73b40c3d90f599cf392a9d03e864.zip |
Finish up summaries. Improvements in mystrtonum().
-rw-r--r-- | awklib/eg/lib/strtonum.awk | 10 | ||||
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.info | 1249 | ||||
-rw-r--r-- | doc/gawk.texi | 250 | ||||
-rw-r--r-- | doc/gawktexi.in | 250 |
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 |