diff options
-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 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 |