From 1f6b16d2d233ecc7f99ea2460098d8eeec382942 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 8 Feb 2015 20:50:31 +0200 Subject: O'Reilly fixes. Through chapter 15. --- doc/gawk.info | 429 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 212 insertions(+), 217 deletions(-) (limited to 'doc/gawk.info') diff --git a/doc/gawk.info b/doc/gawk.info index 5bfdd436..c56ac89c 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -21768,7 +21768,7 @@ Decimal arithmetic sides) of the decimal point, and the results of a computation are always exact. - Some modern system can do decimal arithmetic in hardware, but + Some modern systems can do decimal arithmetic in hardware, but usually you need a special software library to provide access to these instructions. There are also libraries that do decimal arithmetic entirely in software. @@ -21822,12 +21822,6 @@ Numeric representation Minimum value Maximum value 32-bit unsigned integer 0 4,294,967,295 64-bit signed integer -9,223,372,036,854,775,8089,223,372,036,854,775,807 64-bit unsigned integer 0 18,446,744,073,709,551,615 -Single-precision `1.175494e-38' `3.402823e+38' -floating point -(approximate) -Double-precision `2.225074e-308' `1.797693e+308' -floating point -(approximate) Table 15.1: Value ranges for different numeric representations @@ -21843,7 +21837,7 @@ File: gawk.info, Node: Math Definitions, Next: MPFR features, Prev: Computer The rest of this major node uses a number of terms. Here are some informal definitions that should help you work your way through the -material here. +material here: "Accuracy" A floating-point calculation's accuracy is how close it comes to @@ -21863,7 +21857,7 @@ material here. number and infinity produce infinity. "NaN" - "Not A Number."(1) A special value that results from attempting a + "Not a number."(1) A special value that results from attempting a calculation that has no answer as a real number. In such a case, programs can either receive a floating-point exception, or get `NaN' back as the result. The IEEE 754 standard recommends that @@ -21889,15 +21883,15 @@ material here. PREC = 3.322 * DPS - Here, PREC denotes the binary precision (measured in bits) and DPS - (short for decimal places) is the decimal digits. + Here, _prec_ denotes the binary precision (measured in bits) and + _dps_ (short for decimal places) is the decimal digits. "Rounding mode" How numbers are rounded up or down when necessary. More details are provided later. "Significand" - A floating-point value consists the significand multiplied by 10 + A floating-point value consists of the significand multiplied by 10 to the power of the exponent. For example, in `1.2345e67', the significand is `1.2345'. @@ -21919,7 +21913,7 @@ precision formats to allow greater precisions and larger exponent ranges. (`awk' uses only the 64-bit double-precision format.) *note table-ieee-formats:: lists the precision and exponent field -values for the basic IEEE 754 binary formats: +values for the basic IEEE 754 binary formats. Name Total bits Precision Minimum Maximum exponent exponent @@ -21984,7 +21978,7 @@ File: gawk.info, Node: FP Math Caution, Next: Arbitrary Precision Integers, P Math class is tough! -- Teen Talk Barbie, July 1992 - This minor node provides a high level overview of the issues + This minor node provides a high-level overview of the issues involved when doing lots of floating-point arithmetic.(1) The discussion applies to both hardware and arbitrary-precision floating-point arithmetic. @@ -22005,8 +21999,8 @@ floating-point arithmetic. (1) There is a very nice paper on floating-point arithmetic (http://www.validlab.com/goldberg/paper.pdf) by David Goldberg, "What -Every Computer Scientist Should Know About Floating-point Arithmetic," -`ACM Computing Surveys' *23*, 1 (1991-03), 5-48. This is worth reading +Every Computer Scientist Should Know About Floating-Point Arithmetic," +`ACM Computing Surveys' *23*, 1 (1991-03): 5-48. This is worth reading if you are interested in the details, but it does require a background in computer science. @@ -22060,7 +22054,7 @@ number as you assigned to it: Often the error is so small you do not even notice it, and if you do, you can always specify how much precision you would like in your output. -Usually this is a format string like `"%.15g"', which when used in the +Usually this is a format string like `"%.15g"', which, when used in the previous example, produces an output identical to the input.  @@ -22100,7 +22094,7 @@ File: gawk.info, Node: Errors accumulate, Prev: Comparing FP Values, Up: Inex The loss of accuracy during a single computation with floating-point numbers usually isn't enough to worry about. However, if you compute a -value which is the result of a sequence of floating-point operations, +value that is the result of a sequence of floating-point operations, the error can accumulate and greatly affect the computation itself. Here is an attempt to compute the value of pi using one of its many series representations: @@ -22151,7 +22145,7 @@ easy answers. The standard rules of algebra often do not apply when using floating-point arithmetic. Among other things, the distributive and associative laws do not hold completely, and order of operation may be important for your computation. Rounding error, cumulative precision -loss and underflow are often troublesome. +loss, and underflow are often troublesome. When `gawk' tests the expressions `0.1 + 12.2' and `12.3' for equality using the machine double-precision arithmetic, it decides that @@ -22186,8 +22180,9 @@ illustrated by our earlier attempt to compute the value of pi. Extra precision can greatly enhance the stability and the accuracy of your computation in such cases. - Repeated addition is not necessarily equivalent to multiplication in -floating-point arithmetic. In the example in *note Errors accumulate::: + Additionally, you should understand that repeated addition is not +necessarily equivalent to multiplication in floating-point arithmetic. +In the example in *note Errors accumulate::: $ gawk 'BEGIN { > for (d = 1.1; d <= 1.5; d += 0.1) # loop five times (?) @@ -22242,7 +22237,7 @@ set the value to one of the predefined case-insensitive strings shown in *note table-predefined-precision-strings::, to emulate an IEEE 754 binary format. -`PREC' IEEE 754 Binary Format +`PREC' IEEE 754 binary format --------------------------------------------------- `"half"' 16-bit half-precision `"single"' Basic 32-bit single precision @@ -22275,14 +22270,14 @@ on arithmetic operations: example illustrates the differences among various ways to print a floating-point constant: - $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 0.1) }' - -| 0.1000000000000000055511151 - $ gawk -M -v PREC=113 'BEGIN { printf("%0.25f\n", 0.1) }' - -| 0.1000000000000000000000000 - $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", "0.1") }' - -| 0.1000000000000000000000000 - $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 1/10) }' - -| 0.1000000000000000000000000 + $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 0.1) }' + -| 0.1000000000000000055511151 + $ gawk -M -v PREC=113 'BEGIN { printf("%0.25f\n", 0.1) }' + -| 0.1000000000000000000000000 + $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", "0.1") }' + -| 0.1000000000000000000000000 + $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 1/10) }' + -| 0.1000000000000000000000000  File: gawk.info, Node: Setting the rounding mode, Prev: Setting precision, Up: FP Math Caution @@ -22290,15 +22285,15 @@ File: gawk.info, Node: Setting the rounding mode, Prev: Setting precision, Up 15.4.5 Setting the Rounding Mode -------------------------------- -The `ROUNDMODE' variable provides program level control over the +The `ROUNDMODE' variable provides program-level control over the rounding mode. The correspondence between `ROUNDMODE' and the IEEE rounding modes is shown in *note table-gawk-rounding-modes::. -Rounding Mode IEEE Name `ROUNDMODE' +Rounding mode IEEE name `ROUNDMODE' --------------------------------------------------------------------------- Round to nearest, ties to even `roundTiesToEven' `"N"' or `"n"' -Round toward plus Infinity `roundTowardPositive' `"U"' or `"u"' -Round toward negative Infinity `roundTowardNegative' `"D"' or `"d"' +Round toward positive infinity `roundTowardPositive' `"U"' or `"u"' +Round toward negative infinity `roundTowardNegative' `"D"' or `"d"' Round toward zero `roundTowardZero' `"Z"' or `"z"' Round to nearest, ties away `roundTiesToAway' `"A"' or `"a"' from zero @@ -22349,8 +22344,8 @@ distributes upward and downward rounds of exact halves, which might cause any accumulating round-off error to cancel itself out. This is the default rounding mode for IEEE 754 computing functions and operators. - The other rounding modes are rarely used. Round toward positive -infinity (`roundTowardPositive') and round toward negative infinity + The other rounding modes are rarely used. Rounding toward positive +infinity (`roundTowardPositive') and toward negative infinity (`roundTowardNegative') are often used to implement interval arithmetic, where you adjust the rounding mode to calculate upper and lower bounds for the range of output. The `roundTowardZero' mode can be @@ -22398,7 +22393,7 @@ floating-point values: If instead you were to compute the same value using arbitrary-precision floating-point values, the precision needed for -correct output (using the formula `prec = 3.322 * dps'), would be 3.322 +correct output (using the formula `prec = 3.322 * dps') would be 3.322 x 183231, or 608693. The result from an arithmetic operation with an integer and a @@ -22429,7 +22424,7 @@ interface to process arbitrary-precision integers or mixed-mode numbers as needed by an operation or function. In such a case, the precision is set to the minimum value necessary for exact conversion, and the working precision is not used for this purpose. If this is not what you need or -want, you can employ a subterfuge, and convert the integer to floating +want, you can employ a subterfuge and convert the integer to floating point first, like this: gawk -M 'BEGIN { n = 13; print (n + 0.0) % 2.0 }' @@ -22456,7 +22451,7 @@ File: gawk.info, Node: POSIX Floating Point Problems, Next: Floating point sum 15.6 Standards Versus Existing Practice ======================================= -Historically, `awk' has converted any non-numeric looking string to the +Historically, `awk' has converted any nonnumeric-looking string to the numeric value zero, when required. Furthermore, the original definition of the language and the original POSIX standards specified that `awk' only understands decimal numbers (base 10), and not octal @@ -22470,8 +22465,8 @@ These features are: hexadecimal notation (e.g., `0xDEADBEEF'). (Note: data values, _not_ source code constants.) - * Support for the special IEEE 754 floating-point values "Not A - Number" (NaN), positive Infinity ("inf"), and negative Infinity + * Support for the special IEEE 754 floating-point values "not a + number" (NaN), positive infinity ("inf"), and negative infinity ("-inf"). In particular, the format for these values is as specified by the ISO 1999 C standard, which ignores case and can allow implementation-dependent additional characters after the @@ -22488,21 +22483,21 @@ historical practice: values is also a very severe departure from historical practice. The second problem is that the `gawk' maintainer feels that this -interpretation of the standard, which requires a certain amount of +interpretation of the standard, which required a certain amount of "language lawyering" to arrive at in the first place, was not even -intended by the standard developers. In other words, "we see how you +intended by the standard developers. In other words, "We see how you got where you are, but we don't think that that's where you want to be." Recognizing these issues, but attempting to provide compatibility with the earlier versions of the standard, the 2008 POSIX standard added explicit wording to allow, but not require, that `awk' support -hexadecimal floating-point values and special values for "Not A Number" +hexadecimal floating-point values and special values for "not a number" and infinity. Although the `gawk' maintainer continues to feel that providing those features is inadvisable, nevertheless, on systems that support IEEE floating point, it seems reasonable to provide _some_ way to -support NaN and Infinity values. The solution implemented in `gawk' is +support NaN and infinity values. The solution implemented in `gawk' is as follows: * With the `--posix' command-line option, `gawk' becomes "hands @@ -22517,7 +22512,7 @@ as follows: $ echo 0xDeadBeef | gawk --posix '{ print $1 + 0 }' -| 3735928559 - * Without `--posix', `gawk' interprets the four strings `+inf', + * Without `--posix', `gawk' interprets the four string values `+inf', `-inf', `+nan', and `-nan' specially, producing the corresponding special numeric values. The leading sign acts a signal to `gawk' (and the user) that the value is really numeric. Hexadecimal @@ -22531,7 +22526,7 @@ as follows: $ echo 0xDeadBeef | gawk '{ print $1 + 0 }' -| 0 - `gawk' ignores case in the four special values. Thus `+nan' and + `gawk' ignores case in the four special values. Thus, `+nan' and `+NaN' are the same. ---------- Footnotes ---------- @@ -22548,9 +22543,9 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob floating-point values. Standard `awk' uses double-precision floating-point values. - * In the early 1990s, Barbie mistakenly said "Math class is tough!" + * In the early 1990s Barbie mistakenly said, "Math class is tough!" Although math isn't tough, floating-point arithmetic isn't the same - as pencil and paper math, and care must be taken: + as pencil-and-paper math, and care must be taken: - Not all numbers can be represented exactly. @@ -22571,7 +22566,7 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob rounding mode. * With `-M', `gawk' performs arbitrary-precision integer arithmetic - using the GMP library. This is faster and more space efficient + using the GMP library. This is faster and more space-efficient than using MPFR for the same calculations. * There are several "dark corners" with respect to floating-point @@ -22582,7 +22577,7 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob results from floating-point arithmetic. The lesson to remember is that floating-point arithmetic is always more complex than arithmetic using pencil and paper. In order to take advantage of - the power of computer floating point, you need to know its + the power of floating-point arithmetic, you need to know its limitations and work within them. For most casual use of floating-point arithmetic, you will often get the expected result if you simply round the display of your final results to the @@ -34865,171 +34860,171 @@ Node: Limitations872342 Node: Debugging Summary874457 Node: Arbitrary Precision Arithmetic875631 Node: Computer Arithmetic877047 -Ref: table-numeric-ranges880645 -Ref: Computer Arithmetic-Footnote-1881504 -Node: Math Definitions881561 -Ref: table-ieee-formats884849 -Ref: Math Definitions-Footnote-1885453 -Node: MPFR features885558 -Node: FP Math Caution887229 -Ref: FP Math Caution-Footnote-1888279 -Node: Inexactness of computations888648 -Node: Inexact representation889607 -Node: Comparing FP Values890964 -Node: Errors accumulate892046 -Node: Getting Accuracy893479 -Node: Try To Round896141 -Node: Setting precision897040 -Ref: table-predefined-precision-strings897724 -Node: Setting the rounding mode899513 -Ref: table-gawk-rounding-modes899877 -Ref: Setting the rounding mode-Footnote-1903332 -Node: Arbitrary Precision Integers903511 -Ref: Arbitrary Precision Integers-Footnote-1906497 -Node: POSIX Floating Point Problems906646 -Ref: POSIX Floating Point Problems-Footnote-1910519 -Node: Floating point summary910557 -Node: Dynamic Extensions912751 -Node: Extension Intro914303 -Node: Plugin License915569 -Node: Extension Mechanism Outline916366 -Ref: figure-load-extension916794 -Ref: figure-register-new-function918274 -Ref: figure-call-new-function919278 -Node: Extension API Description921264 -Node: Extension API Functions Introduction922714 -Node: General Data Types927538 -Ref: General Data Types-Footnote-1933277 -Node: Memory Allocation Functions933576 -Ref: Memory Allocation Functions-Footnote-1936415 -Node: Constructor Functions936511 -Node: Registration Functions938245 -Node: Extension Functions938930 -Node: Exit Callback Functions941227 -Node: Extension Version String942475 -Node: Input Parsers943140 -Node: Output Wrappers953019 -Node: Two-way processors957534 -Node: Printing Messages959738 -Ref: Printing Messages-Footnote-1960814 -Node: Updating `ERRNO'960966 -Node: Requesting Values961706 -Ref: table-value-types-returned962434 -Node: Accessing Parameters963391 -Node: Symbol Table Access964622 -Node: Symbol table by name965136 -Node: Symbol table by cookie967117 -Ref: Symbol table by cookie-Footnote-1971261 -Node: Cached values971324 -Ref: Cached values-Footnote-1974823 -Node: Array Manipulation974914 -Ref: Array Manipulation-Footnote-1976012 -Node: Array Data Types976049 -Ref: Array Data Types-Footnote-1978704 -Node: Array Functions978796 -Node: Flattening Arrays982650 -Node: Creating Arrays989542 -Node: Extension API Variables994313 -Node: Extension Versioning994949 -Node: Extension API Informational Variables996850 -Node: Extension API Boilerplate997915 -Node: Finding Extensions1001724 -Node: Extension Example1002284 -Node: Internal File Description1003056 -Node: Internal File Ops1007123 -Ref: Internal File Ops-Footnote-11018793 -Node: Using Internal File Ops1018933 -Ref: Using Internal File Ops-Footnote-11021316 -Node: Extension Samples1021589 -Node: Extension Sample File Functions1023115 -Node: Extension Sample Fnmatch1030753 -Node: Extension Sample Fork1032244 -Node: Extension Sample Inplace1033459 -Node: Extension Sample Ord1035134 -Node: Extension Sample Readdir1035970 -Ref: table-readdir-file-types1036846 -Node: Extension Sample Revout1037657 -Node: Extension Sample Rev2way1038247 -Node: Extension Sample Read write array1038987 -Node: Extension Sample Readfile1040927 -Node: Extension Sample Time1042022 -Node: Extension Sample API Tests1043371 -Node: gawkextlib1043862 -Node: Extension summary1046520 -Node: Extension Exercises1050209 -Node: Language History1050931 -Node: V7/SVR3.11052587 -Node: SVR41054768 -Node: POSIX1056213 -Node: BTL1057602 -Node: POSIX/GNU1058336 -Node: Feature History1063900 -Node: Common Extensions1076998 -Node: Ranges and Locales1078322 -Ref: Ranges and Locales-Footnote-11082940 -Ref: Ranges and Locales-Footnote-21082967 -Ref: Ranges and Locales-Footnote-31083201 -Node: Contributors1083422 -Node: History summary1088963 -Node: Installation1090333 -Node: Gawk Distribution1091279 -Node: Getting1091763 -Node: Extracting1092586 -Node: Distribution contents1094221 -Node: Unix Installation1099938 -Node: Quick Installation1100555 -Node: Additional Configuration Options1102979 -Node: Configuration Philosophy1104717 -Node: Non-Unix Installation1107086 -Node: PC Installation1107544 -Node: PC Binary Installation1108863 -Node: PC Compiling1110711 -Ref: PC Compiling-Footnote-11113732 -Node: PC Testing1113841 -Node: PC Using1115017 -Node: Cygwin1119132 -Node: MSYS1119955 -Node: VMS Installation1120455 -Node: VMS Compilation1121247 -Ref: VMS Compilation-Footnote-11122469 -Node: VMS Dynamic Extensions1122527 -Node: VMS Installation Details1124211 -Node: VMS Running1126463 -Node: VMS GNV1129299 -Node: VMS Old Gawk1130033 -Node: Bugs1130503 -Node: Other Versions1134386 -Node: Installation summary1140810 -Node: Notes1141866 -Node: Compatibility Mode1142731 -Node: Additions1143513 -Node: Accessing The Source1144438 -Node: Adding Code1145873 -Node: New Ports1152030 -Node: Derived Files1156512 -Ref: Derived Files-Footnote-11161987 -Ref: Derived Files-Footnote-21162021 -Ref: Derived Files-Footnote-31162617 -Node: Future Extensions1162731 -Node: Implementation Limitations1163337 -Node: Extension Design1164585 -Node: Old Extension Problems1165739 -Ref: Old Extension Problems-Footnote-11167256 -Node: Extension New Mechanism Goals1167313 -Ref: Extension New Mechanism Goals-Footnote-11170673 -Node: Extension Other Design Decisions1170862 -Node: Extension Future Growth1172970 -Node: Old Extension Mechanism1173806 -Node: Notes summary1175568 -Node: Basic Concepts1176754 -Node: Basic High Level1177435 -Ref: figure-general-flow1177707 -Ref: figure-process-flow1178306 -Ref: Basic High Level-Footnote-11181535 -Node: Basic Data Typing1181720 -Node: Glossary1185048 -Node: Copying1216977 -Node: GNU Free Documentation License1254533 -Node: Index1279669 +Ref: table-numeric-ranges880646 +Ref: Computer Arithmetic-Footnote-1881170 +Node: Math Definitions881227 +Ref: table-ieee-formats884522 +Ref: Math Definitions-Footnote-1885126 +Node: MPFR features885231 +Node: FP Math Caution886902 +Ref: FP Math Caution-Footnote-1887952 +Node: Inexactness of computations888321 +Node: Inexact representation889280 +Node: Comparing FP Values890638 +Node: Errors accumulate891720 +Node: Getting Accuracy893152 +Node: Try To Round895856 +Node: Setting precision896755 +Ref: table-predefined-precision-strings897439 +Node: Setting the rounding mode899268 +Ref: table-gawk-rounding-modes899632 +Ref: Setting the rounding mode-Footnote-1903084 +Node: Arbitrary Precision Integers903263 +Ref: Arbitrary Precision Integers-Footnote-1906247 +Node: POSIX Floating Point Problems906396 +Ref: POSIX Floating Point Problems-Footnote-1910275 +Node: Floating point summary910313 +Node: Dynamic Extensions912509 +Node: Extension Intro914061 +Node: Plugin License915327 +Node: Extension Mechanism Outline916124 +Ref: figure-load-extension916552 +Ref: figure-register-new-function918032 +Ref: figure-call-new-function919036 +Node: Extension API Description921022 +Node: Extension API Functions Introduction922472 +Node: General Data Types927296 +Ref: General Data Types-Footnote-1933035 +Node: Memory Allocation Functions933334 +Ref: Memory Allocation Functions-Footnote-1936173 +Node: Constructor Functions936269 +Node: Registration Functions938003 +Node: Extension Functions938688 +Node: Exit Callback Functions940985 +Node: Extension Version String942233 +Node: Input Parsers942898 +Node: Output Wrappers952777 +Node: Two-way processors957292 +Node: Printing Messages959496 +Ref: Printing Messages-Footnote-1960572 +Node: Updating `ERRNO'960724 +Node: Requesting Values961464 +Ref: table-value-types-returned962192 +Node: Accessing Parameters963149 +Node: Symbol Table Access964380 +Node: Symbol table by name964894 +Node: Symbol table by cookie966875 +Ref: Symbol table by cookie-Footnote-1971019 +Node: Cached values971082 +Ref: Cached values-Footnote-1974581 +Node: Array Manipulation974672 +Ref: Array Manipulation-Footnote-1975770 +Node: Array Data Types975807 +Ref: Array Data Types-Footnote-1978462 +Node: Array Functions978554 +Node: Flattening Arrays982408 +Node: Creating Arrays989300 +Node: Extension API Variables994071 +Node: Extension Versioning994707 +Node: Extension API Informational Variables996608 +Node: Extension API Boilerplate997673 +Node: Finding Extensions1001482 +Node: Extension Example1002042 +Node: Internal File Description1002814 +Node: Internal File Ops1006881 +Ref: Internal File Ops-Footnote-11018551 +Node: Using Internal File Ops1018691 +Ref: Using Internal File Ops-Footnote-11021074 +Node: Extension Samples1021347 +Node: Extension Sample File Functions1022873 +Node: Extension Sample Fnmatch1030511 +Node: Extension Sample Fork1032002 +Node: Extension Sample Inplace1033217 +Node: Extension Sample Ord1034892 +Node: Extension Sample Readdir1035728 +Ref: table-readdir-file-types1036604 +Node: Extension Sample Revout1037415 +Node: Extension Sample Rev2way1038005 +Node: Extension Sample Read write array1038745 +Node: Extension Sample Readfile1040685 +Node: Extension Sample Time1041780 +Node: Extension Sample API Tests1043129 +Node: gawkextlib1043620 +Node: Extension summary1046278 +Node: Extension Exercises1049967 +Node: Language History1050689 +Node: V7/SVR3.11052345 +Node: SVR41054526 +Node: POSIX1055971 +Node: BTL1057360 +Node: POSIX/GNU1058094 +Node: Feature History1063658 +Node: Common Extensions1076756 +Node: Ranges and Locales1078080 +Ref: Ranges and Locales-Footnote-11082698 +Ref: Ranges and Locales-Footnote-21082725 +Ref: Ranges and Locales-Footnote-31082959 +Node: Contributors1083180 +Node: History summary1088721 +Node: Installation1090091 +Node: Gawk Distribution1091037 +Node: Getting1091521 +Node: Extracting1092344 +Node: Distribution contents1093979 +Node: Unix Installation1099696 +Node: Quick Installation1100313 +Node: Additional Configuration Options1102737 +Node: Configuration Philosophy1104475 +Node: Non-Unix Installation1106844 +Node: PC Installation1107302 +Node: PC Binary Installation1108621 +Node: PC Compiling1110469 +Ref: PC Compiling-Footnote-11113490 +Node: PC Testing1113599 +Node: PC Using1114775 +Node: Cygwin1118890 +Node: MSYS1119713 +Node: VMS Installation1120213 +Node: VMS Compilation1121005 +Ref: VMS Compilation-Footnote-11122227 +Node: VMS Dynamic Extensions1122285 +Node: VMS Installation Details1123969 +Node: VMS Running1126221 +Node: VMS GNV1129057 +Node: VMS Old Gawk1129791 +Node: Bugs1130261 +Node: Other Versions1134144 +Node: Installation summary1140568 +Node: Notes1141624 +Node: Compatibility Mode1142489 +Node: Additions1143271 +Node: Accessing The Source1144196 +Node: Adding Code1145631 +Node: New Ports1151788 +Node: Derived Files1156270 +Ref: Derived Files-Footnote-11161745 +Ref: Derived Files-Footnote-21161779 +Ref: Derived Files-Footnote-31162375 +Node: Future Extensions1162489 +Node: Implementation Limitations1163095 +Node: Extension Design1164343 +Node: Old Extension Problems1165497 +Ref: Old Extension Problems-Footnote-11167014 +Node: Extension New Mechanism Goals1167071 +Ref: Extension New Mechanism Goals-Footnote-11170431 +Node: Extension Other Design Decisions1170620 +Node: Extension Future Growth1172728 +Node: Old Extension Mechanism1173564 +Node: Notes summary1175326 +Node: Basic Concepts1176512 +Node: Basic High Level1177193 +Ref: figure-general-flow1177465 +Ref: figure-process-flow1178064 +Ref: Basic High Level-Footnote-11181293 +Node: Basic Data Typing1181478 +Node: Glossary1184806 +Node: Copying1216735 +Node: GNU Free Documentation License1254291 +Node: Index1279427  End Tag Table -- cgit v1.2.3 From f2e05556f6962e41556c4abb0acc900c82acc672 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 9 Feb 2015 22:56:29 +0200 Subject: Continue O'Reilly edits. --- doc/gawk.info | 801 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 402 insertions(+), 399 deletions(-) (limited to 'doc/gawk.info') diff --git a/doc/gawk.info b/doc/gawk.info index c56ac89c..bf573a8a 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -9071,9 +9071,10 @@ accepts any record with a first field that contains `li': -| 555-5553 -| 555-6699 - pattern. The expression `/li/' has the value one if `li' appears in -the current input record. Thus, as a pattern, `/li/' matches any record -containing `li'. + A regexp constant as a pattern is also a special case of an +expression pattern. The expression `/li/' has the value one if `li' +appears in the current input record. Thus, as a pattern, `/li/' matches +any record containing `li'. Boolean expressions are also commonly used as patterns. Whether the pattern matches an input record depends on whether its subexpressions @@ -22636,7 +22637,7 @@ the rest of this Info file. `gawk''s functionality. For example, they can provide access to system calls (such as `chdir()' to change directory) and to other C library routines that could be of use. As with most software, "the sky is the -limit;" if you can imagine something that you might want to do and can +limit"; if you can imagine something that you might want to do and can write in C or C++, you can write an extension to do it! Extensions are written in C or C++, using the "application @@ -22644,7 +22645,7 @@ programming interface" (API) defined for this purpose by the `gawk' developers. The rest of this major node explains the facilities that the API provides and how to use them, and presents a small example extension. In addition, it documents the sample extensions included in -the `gawk' distribution, and describes the `gawkextlib' project. *Note +the `gawk' distribution and describes the `gawkextlib' project. *Note Extension Design::, for a discussion of the extension mechanism goals and design. @@ -22762,7 +22763,7 @@ Example::) and also in the `testext.c' code for testing the APIs. Some other bits and pieces: * The API provides access to `gawk''s `do_XXX' values, reflecting - command-line options, like `do_lint', `do_profiling' and so on + command-line options, like `do_lint', `do_profiling', and so on (*note Extension API Variables::). These are informational: an extension cannot affect their values inside `gawk'. In addition, attempting to assign to them produces a compile-time error. @@ -22808,8 +22809,8 @@ File: gawk.info, Node: Extension API Functions Introduction, Next: General Dat 16.4.1 Introduction ------------------- -Access to facilities within `gawk' are made available by calling -through function pointers passed into your extension. +Access to facilities within `gawk' is achieved by calling through +function pointers passed into your extension. API function pointers are provided for the following kinds of operations: @@ -22830,7 +22831,7 @@ operations: - Two-way processors - All of these are discussed in detail, later in this major node. + All of these are discussed in detail later in this major node. * Printing fatal, warning, and "lint" warning messages. @@ -22856,7 +22857,7 @@ operations: - Clearing an array - - Flattening an array for easy C style looping over all its + - Flattening an array for easy C-style looping over all its indices and elements Some points about using the API: @@ -22865,7 +22866,7 @@ operations: `gawkapi.h'. For correct use, you must therefore include the corresponding standard header file _before_ including `gawkapi.h': - C Entity Header File + C entity Header file ------------------------------------------- `EOF' `' Values for `errno' `' @@ -22889,13 +22890,13 @@ operations: * Although the API only uses ISO C 90 features, there is an exception; the "constructor" functions use the `inline' keyword. If your compiler does not support this keyword, you should either - place `-Dinline=''' on your command line, or use the GNU Autotools + place `-Dinline=''' on your command line or use the GNU Autotools and include a `config.h' file in your extensions. * All pointers filled in by `gawk' point to memory managed by `gawk' and should be treated by the extension as read-only. Memory for _all_ strings passed into `gawk' from the extension _must_ come - from calling one of `gawk_malloc()', `gawk_calloc()' or + from calling one of `gawk_malloc()', `gawk_calloc()', or `gawk_realloc()', and is managed by `gawk' from then on. * The API defines several simple `struct's that map values as seen @@ -22908,7 +22909,7 @@ operations: multibyte encoding (as defined by `LC_XXX' environment variables) and not using wide characters. This matches how `gawk' stores strings internally and also how characters are - likely to be input and output from files. + likely to be input into and output from files. * When retrieving a value (such as a parameter or that of a global variable or array element), the extension requests a specific type @@ -22945,6 +22946,8 @@ general-purpose use. Additional, more specialized, data structures are introduced in subsequent minor nodes, together with the functions that use them. + The general-purpose types and structures are as follows: + `typedef void *awk_ext_id_t;' A value of this type is received from `gawk' when an extension is loaded. That value must then be passed back to `gawk' as the @@ -22960,7 +22963,7 @@ use them. ` awk_false = 0,' ` awk_true' `} awk_bool_t;' - A simple boolean type. + A simple Boolean type. `typedef struct awk_string {' ` char *str; /* data */' @@ -23004,8 +23007,8 @@ use them. `#define array_cookie u.a' `#define scalar_cookie u.scl' `#define value_cookie u.vc' - These macros make accessing the fields of the `awk_value_t' more - readable. + Using these macros makes accessing the fields of the `awk_value_t' + more readable. `typedef void *awk_scalar_t;' Scalars can be represented as an opaque type. These values are @@ -31951,7 +31954,7 @@ Index * BEGIN pattern, and profiling: Profiling. (line 62) * BEGIN pattern, assert() user-defined function and: Assert Function. (line 83) -* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 69) +* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 70) * BEGIN pattern, exit statement and: Exit Statement. (line 12) * BEGIN pattern, getline and: Getline Notes. (line 19) * BEGIN pattern, headings, adding: Print Examples. (line 43) @@ -31968,7 +31971,7 @@ Index * BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 60) * BEGINFILE pattern: BEGINFILE/ENDFILE. (line 6) * BEGINFILE pattern, Boolean patterns and: Expression Patterns. - (line 69) + (line 70) * beginfile() user-defined function: Filetrans Function. (line 62) * Bentley, Jon: Glossary. (line 207) * Benzinger, Michael: Contributors. (line 97) @@ -31994,7 +31997,7 @@ Index * body, in actions: Statements. (line 10) * body, in loops: While Statement. (line 14) * Boolean expressions: Boolean Ops. (line 6) -* Boolean expressions, as patterns: Expression Patterns. (line 38) +* Boolean expressions, as patterns: Expression Patterns. (line 39) * Boolean operators, See Boolean expressions: Boolean Ops. (line 6) * Bourne shell, quoting rules for: Quoting. (line 18) * braces ({}): Profiling. (line 142) @@ -32578,7 +32581,7 @@ Index * END pattern, and profiling: Profiling. (line 62) * END pattern, assert() user-defined function and: Assert Function. (line 75) -* END pattern, Boolean patterns and: Expression Patterns. (line 69) +* END pattern, Boolean patterns and: Expression Patterns. (line 70) * END pattern, exit statement and: Exit Statement. (line 12) * END pattern, next/nextfile statements and <1>: Next Statement. (line 44) @@ -32587,7 +32590,7 @@ Index * END pattern, operators and: Using BEGIN/END. (line 17) * END pattern, print statement and: I/O And BEGIN/END. (line 16) * ENDFILE pattern: BEGINFILE/ENDFILE. (line 6) -* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 69) +* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 70) * endfile() user-defined function: Filetrans Function. (line 62) * endgrent() function (C library): Group Functions. (line 212) * endgrent() user-defined function: Group Functions. (line 215) @@ -34649,382 +34652,382 @@ Node: Patterns and Actions384448 Node: Pattern Overview385568 Node: Regexp Patterns387247 Node: Expression Patterns387790 -Node: Ranges391499 -Node: BEGIN/END394606 -Node: Using BEGIN/END395367 -Ref: Using BEGIN/END-Footnote-1398103 -Node: I/O And BEGIN/END398209 -Node: BEGINFILE/ENDFILE400524 -Node: Empty403421 -Node: Using Shell Variables403738 -Node: Action Overview406011 -Node: Statements408337 -Node: If Statement410185 -Node: While Statement411680 -Node: Do Statement413708 -Node: For Statement414856 -Node: Switch Statement418014 -Node: Break Statement420396 -Node: Continue Statement422437 -Node: Next Statement424264 -Node: Nextfile Statement426645 -Node: Exit Statement429273 -Node: Built-in Variables431684 -Node: User-modified432817 -Ref: User-modified-Footnote-1440520 -Node: Auto-set440582 -Ref: Auto-set-Footnote-1453634 -Ref: Auto-set-Footnote-2453839 -Node: ARGC and ARGV453895 -Node: Pattern Action Summary458113 -Node: Arrays460546 -Node: Array Basics461875 -Node: Array Intro462719 -Ref: figure-array-elements464653 -Ref: Array Intro-Footnote-1467273 -Node: Reference to Elements467401 -Node: Assigning Elements469863 -Node: Array Example470354 -Node: Scanning an Array472113 -Node: Controlling Scanning475133 -Ref: Controlling Scanning-Footnote-1480527 -Node: Numeric Array Subscripts480843 -Node: Uninitialized Subscripts483028 -Node: Delete484645 -Ref: Delete-Footnote-1487394 -Node: Multidimensional487451 -Node: Multiscanning490548 -Node: Arrays of Arrays492137 -Node: Arrays Summary496891 -Node: Functions498982 -Node: Built-in500021 -Node: Calling Built-in501099 -Node: Numeric Functions503094 -Ref: Numeric Functions-Footnote-1507110 -Ref: Numeric Functions-Footnote-2507467 -Ref: Numeric Functions-Footnote-3507515 -Node: String Functions507787 -Ref: String Functions-Footnote-1531288 -Ref: String Functions-Footnote-2531417 -Ref: String Functions-Footnote-3531665 -Node: Gory Details531752 -Ref: table-sub-escapes533533 -Ref: table-sub-proposed535048 -Ref: table-posix-sub536410 -Ref: table-gensub-escapes537947 -Ref: Gory Details-Footnote-1538780 -Node: I/O Functions538931 -Ref: I/O Functions-Footnote-1546167 -Node: Time Functions546314 -Ref: Time Functions-Footnote-1556823 -Ref: Time Functions-Footnote-2556891 -Ref: Time Functions-Footnote-3557049 -Ref: Time Functions-Footnote-4557160 -Ref: Time Functions-Footnote-5557272 -Ref: Time Functions-Footnote-6557499 -Node: Bitwise Functions557765 -Ref: table-bitwise-ops558327 -Ref: Bitwise Functions-Footnote-1562655 -Node: Type Functions562827 -Node: I18N Functions563979 -Node: User-defined565626 -Node: Definition Syntax566431 -Ref: Definition Syntax-Footnote-1572090 -Node: Function Example572161 -Ref: Function Example-Footnote-1575082 -Node: Function Caveats575104 -Node: Calling A Function575622 -Node: Variable Scope576580 -Node: Pass By Value/Reference579573 -Node: Return Statement583070 -Node: Dynamic Typing586049 -Node: Indirect Calls586978 -Ref: Indirect Calls-Footnote-1598284 -Node: Functions Summary598412 -Node: Library Functions601114 -Ref: Library Functions-Footnote-1604722 -Ref: Library Functions-Footnote-2604865 -Node: Library Names605036 -Ref: Library Names-Footnote-1608494 -Ref: Library Names-Footnote-2608717 -Node: General Functions608803 -Node: Strtonum Function609906 -Node: Assert Function612928 -Node: Round Function616252 -Node: Cliff Random Function617793 -Node: Ordinal Functions618809 -Ref: Ordinal Functions-Footnote-1621872 -Ref: Ordinal Functions-Footnote-2622124 -Node: Join Function622335 -Ref: Join Function-Footnote-1624105 -Node: Getlocaltime Function624305 -Node: Readfile Function628049 -Node: Shell Quoting630021 -Node: Data File Management631422 -Node: Filetrans Function632054 -Node: Rewind Function636150 -Node: File Checking637536 -Ref: File Checking-Footnote-1638869 -Node: Empty Files639070 -Node: Ignoring Assigns641049 -Node: Getopt Function642599 -Ref: Getopt Function-Footnote-1654063 -Node: Passwd Functions654263 -Ref: Passwd Functions-Footnote-1663103 -Node: Group Functions663191 -Ref: Group Functions-Footnote-1671088 -Node: Walking Arrays671293 -Node: Library Functions Summary672893 -Node: Library Exercises674297 -Node: Sample Programs675577 -Node: Running Examples676347 -Node: Clones677075 -Node: Cut Program678299 -Node: Egrep Program688019 -Ref: Egrep Program-Footnote-1695522 -Node: Id Program695632 -Node: Split Program699308 -Ref: Split Program-Footnote-1702762 -Node: Tee Program702890 -Node: Uniq Program705679 -Node: Wc Program713098 -Ref: Wc Program-Footnote-1717348 -Node: Miscellaneous Programs717442 -Node: Dupword Program718655 -Node: Alarm Program720686 -Node: Translate Program725491 -Ref: Translate Program-Footnote-1730054 -Node: Labels Program730324 -Ref: Labels Program-Footnote-1733675 -Node: Word Sorting733759 -Node: History Sorting737829 -Node: Extract Program739664 -Node: Simple Sed747188 -Node: Igawk Program750258 -Ref: Igawk Program-Footnote-1764584 -Ref: Igawk Program-Footnote-2764785 -Ref: Igawk Program-Footnote-3764907 -Node: Anagram Program765022 -Node: Signature Program768083 -Node: Programs Summary769330 -Node: Programs Exercises770551 -Ref: Programs Exercises-Footnote-1774682 -Node: Advanced Features774773 -Node: Nondecimal Data776755 -Node: Array Sorting778345 -Node: Controlling Array Traversal779045 -Ref: Controlling Array Traversal-Footnote-1787411 -Node: Array Sorting Functions787529 -Ref: Array Sorting Functions-Footnote-1791415 -Node: Two-way I/O791611 -Ref: Two-way I/O-Footnote-1796556 -Ref: Two-way I/O-Footnote-2796742 -Node: TCP/IP Networking796824 -Node: Profiling799696 -Node: Advanced Features Summary807237 -Node: Internationalization809170 -Node: I18N and L10N810650 -Node: Explaining gettext811336 -Ref: Explaining gettext-Footnote-1816361 -Ref: Explaining gettext-Footnote-2816545 -Node: Programmer i18n816710 -Ref: Programmer i18n-Footnote-1821586 -Node: Translator i18n821635 -Node: String Extraction822429 -Ref: String Extraction-Footnote-1823560 -Node: Printf Ordering823646 -Ref: Printf Ordering-Footnote-1826432 -Node: I18N Portability826496 -Ref: I18N Portability-Footnote-1828952 -Node: I18N Example829015 -Ref: I18N Example-Footnote-1831818 -Node: Gawk I18N831890 -Node: I18N Summary832534 -Node: Debugger833874 -Node: Debugging834896 -Node: Debugging Concepts835337 -Node: Debugging Terms837147 -Node: Awk Debugging839719 -Node: Sample Debugging Session840625 -Node: Debugger Invocation841159 -Node: Finding The Bug842544 -Node: List of Debugger Commands849023 -Node: Breakpoint Control850355 -Node: Debugger Execution Control854032 -Node: Viewing And Changing Data857391 -Node: Execution Stack860767 -Node: Debugger Info862402 -Node: Miscellaneous Debugger Commands866447 -Node: Readline Support871448 -Node: Limitations872342 -Node: Debugging Summary874457 -Node: Arbitrary Precision Arithmetic875631 -Node: Computer Arithmetic877047 -Ref: table-numeric-ranges880646 -Ref: Computer Arithmetic-Footnote-1881170 -Node: Math Definitions881227 -Ref: table-ieee-formats884522 -Ref: Math Definitions-Footnote-1885126 -Node: MPFR features885231 -Node: FP Math Caution886902 -Ref: FP Math Caution-Footnote-1887952 -Node: Inexactness of computations888321 -Node: Inexact representation889280 -Node: Comparing FP Values890638 -Node: Errors accumulate891720 -Node: Getting Accuracy893152 -Node: Try To Round895856 -Node: Setting precision896755 -Ref: table-predefined-precision-strings897439 -Node: Setting the rounding mode899268 -Ref: table-gawk-rounding-modes899632 -Ref: Setting the rounding mode-Footnote-1903084 -Node: Arbitrary Precision Integers903263 -Ref: Arbitrary Precision Integers-Footnote-1906247 -Node: POSIX Floating Point Problems906396 -Ref: POSIX Floating Point Problems-Footnote-1910275 -Node: Floating point summary910313 -Node: Dynamic Extensions912509 -Node: Extension Intro914061 -Node: Plugin License915327 -Node: Extension Mechanism Outline916124 -Ref: figure-load-extension916552 -Ref: figure-register-new-function918032 -Ref: figure-call-new-function919036 -Node: Extension API Description921022 -Node: Extension API Functions Introduction922472 -Node: General Data Types927296 -Ref: General Data Types-Footnote-1933035 -Node: Memory Allocation Functions933334 -Ref: Memory Allocation Functions-Footnote-1936173 -Node: Constructor Functions936269 -Node: Registration Functions938003 -Node: Extension Functions938688 -Node: Exit Callback Functions940985 -Node: Extension Version String942233 -Node: Input Parsers942898 -Node: Output Wrappers952777 -Node: Two-way processors957292 -Node: Printing Messages959496 -Ref: Printing Messages-Footnote-1960572 -Node: Updating `ERRNO'960724 -Node: Requesting Values961464 -Ref: table-value-types-returned962192 -Node: Accessing Parameters963149 -Node: Symbol Table Access964380 -Node: Symbol table by name964894 -Node: Symbol table by cookie966875 -Ref: Symbol table by cookie-Footnote-1971019 -Node: Cached values971082 -Ref: Cached values-Footnote-1974581 -Node: Array Manipulation974672 -Ref: Array Manipulation-Footnote-1975770 -Node: Array Data Types975807 -Ref: Array Data Types-Footnote-1978462 -Node: Array Functions978554 -Node: Flattening Arrays982408 -Node: Creating Arrays989300 -Node: Extension API Variables994071 -Node: Extension Versioning994707 -Node: Extension API Informational Variables996608 -Node: Extension API Boilerplate997673 -Node: Finding Extensions1001482 -Node: Extension Example1002042 -Node: Internal File Description1002814 -Node: Internal File Ops1006881 -Ref: Internal File Ops-Footnote-11018551 -Node: Using Internal File Ops1018691 -Ref: Using Internal File Ops-Footnote-11021074 -Node: Extension Samples1021347 -Node: Extension Sample File Functions1022873 -Node: Extension Sample Fnmatch1030511 -Node: Extension Sample Fork1032002 -Node: Extension Sample Inplace1033217 -Node: Extension Sample Ord1034892 -Node: Extension Sample Readdir1035728 -Ref: table-readdir-file-types1036604 -Node: Extension Sample Revout1037415 -Node: Extension Sample Rev2way1038005 -Node: Extension Sample Read write array1038745 -Node: Extension Sample Readfile1040685 -Node: Extension Sample Time1041780 -Node: Extension Sample API Tests1043129 -Node: gawkextlib1043620 -Node: Extension summary1046278 -Node: Extension Exercises1049967 -Node: Language History1050689 -Node: V7/SVR3.11052345 -Node: SVR41054526 -Node: POSIX1055971 -Node: BTL1057360 -Node: POSIX/GNU1058094 -Node: Feature History1063658 -Node: Common Extensions1076756 -Node: Ranges and Locales1078080 -Ref: Ranges and Locales-Footnote-11082698 -Ref: Ranges and Locales-Footnote-21082725 -Ref: Ranges and Locales-Footnote-31082959 -Node: Contributors1083180 -Node: History summary1088721 -Node: Installation1090091 -Node: Gawk Distribution1091037 -Node: Getting1091521 -Node: Extracting1092344 -Node: Distribution contents1093979 -Node: Unix Installation1099696 -Node: Quick Installation1100313 -Node: Additional Configuration Options1102737 -Node: Configuration Philosophy1104475 -Node: Non-Unix Installation1106844 -Node: PC Installation1107302 -Node: PC Binary Installation1108621 -Node: PC Compiling1110469 -Ref: PC Compiling-Footnote-11113490 -Node: PC Testing1113599 -Node: PC Using1114775 -Node: Cygwin1118890 -Node: MSYS1119713 -Node: VMS Installation1120213 -Node: VMS Compilation1121005 -Ref: VMS Compilation-Footnote-11122227 -Node: VMS Dynamic Extensions1122285 -Node: VMS Installation Details1123969 -Node: VMS Running1126221 -Node: VMS GNV1129057 -Node: VMS Old Gawk1129791 -Node: Bugs1130261 -Node: Other Versions1134144 -Node: Installation summary1140568 -Node: Notes1141624 -Node: Compatibility Mode1142489 -Node: Additions1143271 -Node: Accessing The Source1144196 -Node: Adding Code1145631 -Node: New Ports1151788 -Node: Derived Files1156270 -Ref: Derived Files-Footnote-11161745 -Ref: Derived Files-Footnote-21161779 -Ref: Derived Files-Footnote-31162375 -Node: Future Extensions1162489 -Node: Implementation Limitations1163095 -Node: Extension Design1164343 -Node: Old Extension Problems1165497 -Ref: Old Extension Problems-Footnote-11167014 -Node: Extension New Mechanism Goals1167071 -Ref: Extension New Mechanism Goals-Footnote-11170431 -Node: Extension Other Design Decisions1170620 -Node: Extension Future Growth1172728 -Node: Old Extension Mechanism1173564 -Node: Notes summary1175326 -Node: Basic Concepts1176512 -Node: Basic High Level1177193 -Ref: figure-general-flow1177465 -Ref: figure-process-flow1178064 -Ref: Basic High Level-Footnote-11181293 -Node: Basic Data Typing1181478 -Node: Glossary1184806 -Node: Copying1216735 -Node: GNU Free Documentation License1254291 -Node: Index1279427 +Node: Ranges391570 +Node: BEGIN/END394677 +Node: Using BEGIN/END395438 +Ref: Using BEGIN/END-Footnote-1398174 +Node: I/O And BEGIN/END398280 +Node: BEGINFILE/ENDFILE400595 +Node: Empty403492 +Node: Using Shell Variables403809 +Node: Action Overview406082 +Node: Statements408408 +Node: If Statement410256 +Node: While Statement411751 +Node: Do Statement413779 +Node: For Statement414927 +Node: Switch Statement418085 +Node: Break Statement420467 +Node: Continue Statement422508 +Node: Next Statement424335 +Node: Nextfile Statement426716 +Node: Exit Statement429344 +Node: Built-in Variables431755 +Node: User-modified432888 +Ref: User-modified-Footnote-1440591 +Node: Auto-set440653 +Ref: Auto-set-Footnote-1453705 +Ref: Auto-set-Footnote-2453910 +Node: ARGC and ARGV453966 +Node: Pattern Action Summary458184 +Node: Arrays460617 +Node: Array Basics461946 +Node: Array Intro462790 +Ref: figure-array-elements464724 +Ref: Array Intro-Footnote-1467344 +Node: Reference to Elements467472 +Node: Assigning Elements469934 +Node: Array Example470425 +Node: Scanning an Array472184 +Node: Controlling Scanning475204 +Ref: Controlling Scanning-Footnote-1480598 +Node: Numeric Array Subscripts480914 +Node: Uninitialized Subscripts483099 +Node: Delete484716 +Ref: Delete-Footnote-1487465 +Node: Multidimensional487522 +Node: Multiscanning490619 +Node: Arrays of Arrays492208 +Node: Arrays Summary496962 +Node: Functions499053 +Node: Built-in500092 +Node: Calling Built-in501170 +Node: Numeric Functions503165 +Ref: Numeric Functions-Footnote-1507181 +Ref: Numeric Functions-Footnote-2507538 +Ref: Numeric Functions-Footnote-3507586 +Node: String Functions507858 +Ref: String Functions-Footnote-1531359 +Ref: String Functions-Footnote-2531488 +Ref: String Functions-Footnote-3531736 +Node: Gory Details531823 +Ref: table-sub-escapes533604 +Ref: table-sub-proposed535119 +Ref: table-posix-sub536481 +Ref: table-gensub-escapes538018 +Ref: Gory Details-Footnote-1538851 +Node: I/O Functions539002 +Ref: I/O Functions-Footnote-1546238 +Node: Time Functions546385 +Ref: Time Functions-Footnote-1556894 +Ref: Time Functions-Footnote-2556962 +Ref: Time Functions-Footnote-3557120 +Ref: Time Functions-Footnote-4557231 +Ref: Time Functions-Footnote-5557343 +Ref: Time Functions-Footnote-6557570 +Node: Bitwise Functions557836 +Ref: table-bitwise-ops558398 +Ref: Bitwise Functions-Footnote-1562726 +Node: Type Functions562898 +Node: I18N Functions564050 +Node: User-defined565697 +Node: Definition Syntax566502 +Ref: Definition Syntax-Footnote-1572161 +Node: Function Example572232 +Ref: Function Example-Footnote-1575153 +Node: Function Caveats575175 +Node: Calling A Function575693 +Node: Variable Scope576651 +Node: Pass By Value/Reference579644 +Node: Return Statement583141 +Node: Dynamic Typing586120 +Node: Indirect Calls587049 +Ref: Indirect Calls-Footnote-1598355 +Node: Functions Summary598483 +Node: Library Functions601185 +Ref: Library Functions-Footnote-1604793 +Ref: Library Functions-Footnote-2604936 +Node: Library Names605107 +Ref: Library Names-Footnote-1608565 +Ref: Library Names-Footnote-2608788 +Node: General Functions608874 +Node: Strtonum Function609977 +Node: Assert Function612999 +Node: Round Function616323 +Node: Cliff Random Function617864 +Node: Ordinal Functions618880 +Ref: Ordinal Functions-Footnote-1621943 +Ref: Ordinal Functions-Footnote-2622195 +Node: Join Function622406 +Ref: Join Function-Footnote-1624176 +Node: Getlocaltime Function624376 +Node: Readfile Function628120 +Node: Shell Quoting630092 +Node: Data File Management631493 +Node: Filetrans Function632125 +Node: Rewind Function636221 +Node: File Checking637607 +Ref: File Checking-Footnote-1638940 +Node: Empty Files639141 +Node: Ignoring Assigns641120 +Node: Getopt Function642670 +Ref: Getopt Function-Footnote-1654134 +Node: Passwd Functions654334 +Ref: Passwd Functions-Footnote-1663174 +Node: Group Functions663262 +Ref: Group Functions-Footnote-1671159 +Node: Walking Arrays671364 +Node: Library Functions Summary672964 +Node: Library Exercises674368 +Node: Sample Programs675648 +Node: Running Examples676418 +Node: Clones677146 +Node: Cut Program678370 +Node: Egrep Program688090 +Ref: Egrep Program-Footnote-1695593 +Node: Id Program695703 +Node: Split Program699379 +Ref: Split Program-Footnote-1702833 +Node: Tee Program702961 +Node: Uniq Program705750 +Node: Wc Program713169 +Ref: Wc Program-Footnote-1717419 +Node: Miscellaneous Programs717513 +Node: Dupword Program718726 +Node: Alarm Program720757 +Node: Translate Program725562 +Ref: Translate Program-Footnote-1730125 +Node: Labels Program730395 +Ref: Labels Program-Footnote-1733746 +Node: Word Sorting733830 +Node: History Sorting737900 +Node: Extract Program739735 +Node: Simple Sed747259 +Node: Igawk Program750329 +Ref: Igawk Program-Footnote-1764655 +Ref: Igawk Program-Footnote-2764856 +Ref: Igawk Program-Footnote-3764978 +Node: Anagram Program765093 +Node: Signature Program768154 +Node: Programs Summary769401 +Node: Programs Exercises770622 +Ref: Programs Exercises-Footnote-1774753 +Node: Advanced Features774844 +Node: Nondecimal Data776826 +Node: Array Sorting778416 +Node: Controlling Array Traversal779116 +Ref: Controlling Array Traversal-Footnote-1787482 +Node: Array Sorting Functions787600 +Ref: Array Sorting Functions-Footnote-1791486 +Node: Two-way I/O791682 +Ref: Two-way I/O-Footnote-1796627 +Ref: Two-way I/O-Footnote-2796813 +Node: TCP/IP Networking796895 +Node: Profiling799767 +Node: Advanced Features Summary807308 +Node: Internationalization809241 +Node: I18N and L10N810721 +Node: Explaining gettext811407 +Ref: Explaining gettext-Footnote-1816432 +Ref: Explaining gettext-Footnote-2816616 +Node: Programmer i18n816781 +Ref: Programmer i18n-Footnote-1821657 +Node: Translator i18n821706 +Node: String Extraction822500 +Ref: String Extraction-Footnote-1823631 +Node: Printf Ordering823717 +Ref: Printf Ordering-Footnote-1826503 +Node: I18N Portability826567 +Ref: I18N Portability-Footnote-1829023 +Node: I18N Example829086 +Ref: I18N Example-Footnote-1831889 +Node: Gawk I18N831961 +Node: I18N Summary832605 +Node: Debugger833945 +Node: Debugging834967 +Node: Debugging Concepts835408 +Node: Debugging Terms837218 +Node: Awk Debugging839790 +Node: Sample Debugging Session840696 +Node: Debugger Invocation841230 +Node: Finding The Bug842615 +Node: List of Debugger Commands849094 +Node: Breakpoint Control850426 +Node: Debugger Execution Control854103 +Node: Viewing And Changing Data857462 +Node: Execution Stack860838 +Node: Debugger Info862473 +Node: Miscellaneous Debugger Commands866518 +Node: Readline Support871519 +Node: Limitations872413 +Node: Debugging Summary874528 +Node: Arbitrary Precision Arithmetic875702 +Node: Computer Arithmetic877118 +Ref: table-numeric-ranges880717 +Ref: Computer Arithmetic-Footnote-1881241 +Node: Math Definitions881298 +Ref: table-ieee-formats884593 +Ref: Math Definitions-Footnote-1885197 +Node: MPFR features885302 +Node: FP Math Caution886973 +Ref: FP Math Caution-Footnote-1888023 +Node: Inexactness of computations888392 +Node: Inexact representation889351 +Node: Comparing FP Values890709 +Node: Errors accumulate891791 +Node: Getting Accuracy893223 +Node: Try To Round895927 +Node: Setting precision896826 +Ref: table-predefined-precision-strings897510 +Node: Setting the rounding mode899339 +Ref: table-gawk-rounding-modes899703 +Ref: Setting the rounding mode-Footnote-1903155 +Node: Arbitrary Precision Integers903334 +Ref: Arbitrary Precision Integers-Footnote-1906318 +Node: POSIX Floating Point Problems906467 +Ref: POSIX Floating Point Problems-Footnote-1910346 +Node: Floating point summary910384 +Node: Dynamic Extensions912580 +Node: Extension Intro914132 +Node: Plugin License915397 +Node: Extension Mechanism Outline916194 +Ref: figure-load-extension916622 +Ref: figure-register-new-function918102 +Ref: figure-call-new-function919106 +Node: Extension API Description921093 +Node: Extension API Functions Introduction922543 +Node: General Data Types927364 +Ref: General Data Types-Footnote-1933171 +Node: Memory Allocation Functions933470 +Ref: Memory Allocation Functions-Footnote-1936309 +Node: Constructor Functions936405 +Node: Registration Functions938139 +Node: Extension Functions938824 +Node: Exit Callback Functions941121 +Node: Extension Version String942369 +Node: Input Parsers943034 +Node: Output Wrappers952913 +Node: Two-way processors957428 +Node: Printing Messages959632 +Ref: Printing Messages-Footnote-1960708 +Node: Updating `ERRNO'960860 +Node: Requesting Values961600 +Ref: table-value-types-returned962328 +Node: Accessing Parameters963285 +Node: Symbol Table Access964516 +Node: Symbol table by name965030 +Node: Symbol table by cookie967011 +Ref: Symbol table by cookie-Footnote-1971155 +Node: Cached values971218 +Ref: Cached values-Footnote-1974717 +Node: Array Manipulation974808 +Ref: Array Manipulation-Footnote-1975906 +Node: Array Data Types975943 +Ref: Array Data Types-Footnote-1978598 +Node: Array Functions978690 +Node: Flattening Arrays982544 +Node: Creating Arrays989436 +Node: Extension API Variables994207 +Node: Extension Versioning994843 +Node: Extension API Informational Variables996744 +Node: Extension API Boilerplate997809 +Node: Finding Extensions1001618 +Node: Extension Example1002178 +Node: Internal File Description1002950 +Node: Internal File Ops1007017 +Ref: Internal File Ops-Footnote-11018687 +Node: Using Internal File Ops1018827 +Ref: Using Internal File Ops-Footnote-11021210 +Node: Extension Samples1021483 +Node: Extension Sample File Functions1023009 +Node: Extension Sample Fnmatch1030647 +Node: Extension Sample Fork1032138 +Node: Extension Sample Inplace1033353 +Node: Extension Sample Ord1035028 +Node: Extension Sample Readdir1035864 +Ref: table-readdir-file-types1036740 +Node: Extension Sample Revout1037551 +Node: Extension Sample Rev2way1038141 +Node: Extension Sample Read write array1038881 +Node: Extension Sample Readfile1040821 +Node: Extension Sample Time1041916 +Node: Extension Sample API Tests1043265 +Node: gawkextlib1043756 +Node: Extension summary1046414 +Node: Extension Exercises1050103 +Node: Language History1050825 +Node: V7/SVR3.11052481 +Node: SVR41054662 +Node: POSIX1056107 +Node: BTL1057496 +Node: POSIX/GNU1058230 +Node: Feature History1063794 +Node: Common Extensions1076892 +Node: Ranges and Locales1078216 +Ref: Ranges and Locales-Footnote-11082834 +Ref: Ranges and Locales-Footnote-21082861 +Ref: Ranges and Locales-Footnote-31083095 +Node: Contributors1083316 +Node: History summary1088857 +Node: Installation1090227 +Node: Gawk Distribution1091173 +Node: Getting1091657 +Node: Extracting1092480 +Node: Distribution contents1094115 +Node: Unix Installation1099832 +Node: Quick Installation1100449 +Node: Additional Configuration Options1102873 +Node: Configuration Philosophy1104611 +Node: Non-Unix Installation1106980 +Node: PC Installation1107438 +Node: PC Binary Installation1108757 +Node: PC Compiling1110605 +Ref: PC Compiling-Footnote-11113626 +Node: PC Testing1113735 +Node: PC Using1114911 +Node: Cygwin1119026 +Node: MSYS1119849 +Node: VMS Installation1120349 +Node: VMS Compilation1121141 +Ref: VMS Compilation-Footnote-11122363 +Node: VMS Dynamic Extensions1122421 +Node: VMS Installation Details1124105 +Node: VMS Running1126357 +Node: VMS GNV1129193 +Node: VMS Old Gawk1129927 +Node: Bugs1130397 +Node: Other Versions1134280 +Node: Installation summary1140704 +Node: Notes1141760 +Node: Compatibility Mode1142625 +Node: Additions1143407 +Node: Accessing The Source1144332 +Node: Adding Code1145767 +Node: New Ports1151924 +Node: Derived Files1156406 +Ref: Derived Files-Footnote-11161881 +Ref: Derived Files-Footnote-21161915 +Ref: Derived Files-Footnote-31162511 +Node: Future Extensions1162625 +Node: Implementation Limitations1163231 +Node: Extension Design1164479 +Node: Old Extension Problems1165633 +Ref: Old Extension Problems-Footnote-11167150 +Node: Extension New Mechanism Goals1167207 +Ref: Extension New Mechanism Goals-Footnote-11170567 +Node: Extension Other Design Decisions1170756 +Node: Extension Future Growth1172864 +Node: Old Extension Mechanism1173700 +Node: Notes summary1175462 +Node: Basic Concepts1176648 +Node: Basic High Level1177329 +Ref: figure-general-flow1177601 +Ref: figure-process-flow1178200 +Ref: Basic High Level-Footnote-11181429 +Node: Basic Data Typing1181614 +Node: Glossary1184942 +Node: Copying1216871 +Node: GNU Free Documentation License1254427 +Node: Index1279563  End Tag Table -- cgit v1.2.3 From 9478ffc5b7ae6988bb109a7be9189ed02f3720e8 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 10 Feb 2015 22:17:32 +0200 Subject: Doc fixes. --- doc/gawk.info | 1102 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 555 insertions(+), 547 deletions(-) (limited to 'doc/gawk.info') diff --git a/doc/gawk.info b/doc/gawk.info index bf573a8a..eb8d07b5 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -1374,6 +1374,12 @@ also must acknowledge my gratitude to G-d, for the many opportunities He has sent my way, as well as for the gifts He has given me with which to take advantage of those opportunities. + +Arnold Robbins +Nof Ayalon +Israel +February 2015 +  File: gawk.info, Node: Getting Started, Next: Invoking Gawk, Prev: Preface, Up: Top @@ -23028,8 +23034,8 @@ indicates what is in the `union'. Representing numbers is easy--the API uses a C `double'. Strings require more work. Because `gawk' allows embedded NUL bytes in string -values, a string must be represented as a pair containing a -data-pointer and length. This is the `awk_string_t' type. +values, a string must be represented as a pair containing a data +pointer and length. This is the `awk_string_t' type. Identifiers (i.e., the names of global variables) can be associated with either scalar values or with arrays. In addition, `gawk' provides @@ -23041,12 +23047,12 @@ Manipulation::. of the `union' as if they were fields in a `struct'; this is a common coding practice in C. Such code is easier to write and to read, but it remains _your_ responsibility to make sure that the `val_type' member -correctly reflects the type of the value in the `awk_value_t'. +correctly reflects the type of the value in the `awk_value_t' struct. Conceptually, the first three members of the `union' (number, string, and array) are all that is needed for working with `awk' values. However, because the API provides routines for accessing and changing -the value of global scalar variables only by using the variable's name, +the value of a global scalar variable only by using the variable's name, there is a performance penalty: `gawk' must find the variable each time it is accessed and changed. This turns out to be a real issue, not just a theoretical one. @@ -23055,17 +23061,19 @@ just a theoretical one. reading and/or changing the value of one or more scalar variables, you can obtain a "scalar cookie"(1) object for that variable, and then use the cookie for getting the variable's value or for changing the -variable's value. This is the `awk_scalar_t' type and `scalar_cookie' -macro. Given a scalar cookie, `gawk' can directly retrieve or modify -the value, as required, without having to find it first. +variable's value. The `awk_scalar_t' type holds a scalar cookie, and +the `scalar_cookie' macro provides access to the value of that type in +the `awk_value_t' struct. Given a scalar cookie, `gawk' can directly +retrieve or modify the value, as required, without having to find it +first. The `awk_value_cookie_t' type and `value_cookie' macro are similar. If you know that you wish to use the same numeric or string _value_ for one or more variables, you can create the value once, retaining a "value cookie" for it, and then pass in that value cookie whenever you -wish to set the value of a variable. This saves both storage space -within the running `gawk' process as well as the time needed to create -the value. +wish to set the value of a variable. This both storage space within +the running `gawk' process and reduces the time needed to create the +value. ---------- Footnotes ---------- @@ -34492,542 +34500,542 @@ Ref: Manual History-Footnote-167004 Ref: Manual History-Footnote-267045 Node: How To Contribute67119 Node: Acknowledgments68248 -Node: Getting Started73065 -Node: Running gawk75504 -Node: One-shot76694 -Node: Read Terminal77958 -Node: Long79989 -Node: Executable Scripts81502 -Ref: Executable Scripts-Footnote-184291 -Node: Comments84394 -Node: Quoting86876 -Node: DOS Quoting92394 -Node: Sample Data Files93069 -Node: Very Simple95664 -Node: Two Rules100563 -Node: More Complex102449 -Node: Statements/Lines105311 -Ref: Statements/Lines-Footnote-1109766 -Node: Other Features110031 -Node: When110967 -Ref: When-Footnote-1112721 -Node: Intro Summary112786 -Node: Invoking Gawk113670 -Node: Command Line115184 -Node: Options115982 -Ref: Options-Footnote-1131904 -Ref: Options-Footnote-2132133 -Node: Other Arguments132158 -Node: Naming Standard Input135106 -Node: Environment Variables136199 -Node: AWKPATH Variable136757 -Ref: AWKPATH Variable-Footnote-1140054 -Ref: AWKPATH Variable-Footnote-2140099 -Node: AWKLIBPATH Variable140359 -Node: Other Environment Variables141502 -Node: Exit Status145260 -Node: Include Files145936 -Node: Loading Shared Libraries149525 -Node: Obsolete150952 -Node: Undocumented151644 -Node: Invoking Summary151911 -Node: Regexp153574 -Node: Regexp Usage155028 -Node: Escape Sequences157065 -Node: Regexp Operators163075 -Ref: Regexp Operators-Footnote-1170485 -Ref: Regexp Operators-Footnote-2170632 -Node: Bracket Expressions170730 -Ref: table-char-classes172745 -Node: Leftmost Longest175687 -Node: Computed Regexps176989 -Node: GNU Regexp Operators180418 -Node: Case-sensitivity184090 -Ref: Case-sensitivity-Footnote-1186975 -Ref: Case-sensitivity-Footnote-2187210 -Node: Regexp Summary187318 -Node: Reading Files188785 -Node: Records190878 -Node: awk split records191611 -Node: gawk split records196540 -Ref: gawk split records-Footnote-1201079 -Node: Fields201116 -Ref: Fields-Footnote-1203894 -Node: Nonconstant Fields203980 -Ref: Nonconstant Fields-Footnote-1206218 -Node: Changing Fields206421 -Node: Field Separators212352 -Node: Default Field Splitting215056 -Node: Regexp Field Splitting216173 -Node: Single Character Fields219523 -Node: Command Line Field Separator220582 -Node: Full Line Fields223799 -Ref: Full Line Fields-Footnote-1225320 -Ref: Full Line Fields-Footnote-2225366 -Node: Field Splitting Summary225467 -Node: Constant Size227541 -Node: Splitting By Content232124 -Ref: Splitting By Content-Footnote-1236089 -Node: Multiple Line236252 -Ref: Multiple Line-Footnote-1242133 -Node: Getline242312 -Node: Plain Getline244519 -Node: Getline/Variable247159 -Node: Getline/File248308 -Node: Getline/Variable/File249693 -Ref: Getline/Variable/File-Footnote-1251296 -Node: Getline/Pipe251383 -Node: Getline/Variable/Pipe254061 -Node: Getline/Coprocess255192 -Node: Getline/Variable/Coprocess256456 -Node: Getline Notes257195 -Node: Getline Summary259989 -Ref: table-getline-variants260401 -Node: Read Timeout261230 -Ref: Read Timeout-Footnote-1265067 -Node: Command-line directories265125 -Node: Input Summary266030 -Node: Input Exercises269415 -Node: Printing270143 -Node: Print271920 -Node: Print Examples273377 -Node: Output Separators276156 -Node: OFMT278174 -Node: Printf279529 -Node: Basic Printf280314 -Node: Control Letters281886 -Node: Format Modifiers285871 -Node: Printf Examples291881 -Node: Redirection294367 -Node: Special FD301205 -Ref: Special FD-Footnote-1304371 -Node: Special Files304445 -Node: Other Inherited Files305062 -Node: Special Network306062 -Node: Special Caveats306924 -Node: Close Files And Pipes307873 -Ref: Close Files And Pipes-Footnote-1315064 -Ref: Close Files And Pipes-Footnote-2315212 -Node: Output Summary315362 -Node: Output Exercises316360 -Node: Expressions317040 -Node: Values318229 -Node: Constants318906 -Node: Scalar Constants319597 -Ref: Scalar Constants-Footnote-1320459 -Node: Nondecimal-numbers320709 -Node: Regexp Constants323719 -Node: Using Constant Regexps324245 -Node: Variables327408 -Node: Using Variables328065 -Node: Assignment Options329976 -Node: Conversion331851 -Node: Strings And Numbers332375 -Ref: Strings And Numbers-Footnote-1335440 -Node: Locale influences conversions335549 -Ref: table-locale-affects338295 -Node: All Operators338887 -Node: Arithmetic Ops339516 -Node: Concatenation342021 -Ref: Concatenation-Footnote-1344840 -Node: Assignment Ops344947 -Ref: table-assign-ops349926 -Node: Increment Ops351236 -Node: Truth Values and Conditions354667 -Node: Truth Values355750 -Node: Typing and Comparison356799 -Node: Variable Typing357615 -Node: Comparison Operators361282 -Ref: table-relational-ops361692 -Node: POSIX String Comparison365187 -Ref: POSIX String Comparison-Footnote-1366259 -Node: Boolean Ops366398 -Ref: Boolean Ops-Footnote-1370876 -Node: Conditional Exp370967 -Node: Function Calls372705 -Node: Precedence376585 -Node: Locales380245 -Node: Expressions Summary381877 -Node: Patterns and Actions384448 -Node: Pattern Overview385568 -Node: Regexp Patterns387247 -Node: Expression Patterns387790 -Node: Ranges391570 -Node: BEGIN/END394677 -Node: Using BEGIN/END395438 -Ref: Using BEGIN/END-Footnote-1398174 -Node: I/O And BEGIN/END398280 -Node: BEGINFILE/ENDFILE400595 -Node: Empty403492 -Node: Using Shell Variables403809 -Node: Action Overview406082 -Node: Statements408408 -Node: If Statement410256 -Node: While Statement411751 -Node: Do Statement413779 -Node: For Statement414927 -Node: Switch Statement418085 -Node: Break Statement420467 -Node: Continue Statement422508 -Node: Next Statement424335 -Node: Nextfile Statement426716 -Node: Exit Statement429344 -Node: Built-in Variables431755 -Node: User-modified432888 -Ref: User-modified-Footnote-1440591 -Node: Auto-set440653 -Ref: Auto-set-Footnote-1453705 -Ref: Auto-set-Footnote-2453910 -Node: ARGC and ARGV453966 -Node: Pattern Action Summary458184 -Node: Arrays460617 -Node: Array Basics461946 -Node: Array Intro462790 -Ref: figure-array-elements464724 -Ref: Array Intro-Footnote-1467344 -Node: Reference to Elements467472 -Node: Assigning Elements469934 -Node: Array Example470425 -Node: Scanning an Array472184 -Node: Controlling Scanning475204 -Ref: Controlling Scanning-Footnote-1480598 -Node: Numeric Array Subscripts480914 -Node: Uninitialized Subscripts483099 -Node: Delete484716 -Ref: Delete-Footnote-1487465 -Node: Multidimensional487522 -Node: Multiscanning490619 -Node: Arrays of Arrays492208 -Node: Arrays Summary496962 -Node: Functions499053 -Node: Built-in500092 -Node: Calling Built-in501170 -Node: Numeric Functions503165 -Ref: Numeric Functions-Footnote-1507181 -Ref: Numeric Functions-Footnote-2507538 -Ref: Numeric Functions-Footnote-3507586 -Node: String Functions507858 -Ref: String Functions-Footnote-1531359 -Ref: String Functions-Footnote-2531488 -Ref: String Functions-Footnote-3531736 -Node: Gory Details531823 -Ref: table-sub-escapes533604 -Ref: table-sub-proposed535119 -Ref: table-posix-sub536481 -Ref: table-gensub-escapes538018 -Ref: Gory Details-Footnote-1538851 -Node: I/O Functions539002 -Ref: I/O Functions-Footnote-1546238 -Node: Time Functions546385 -Ref: Time Functions-Footnote-1556894 -Ref: Time Functions-Footnote-2556962 -Ref: Time Functions-Footnote-3557120 -Ref: Time Functions-Footnote-4557231 -Ref: Time Functions-Footnote-5557343 -Ref: Time Functions-Footnote-6557570 -Node: Bitwise Functions557836 -Ref: table-bitwise-ops558398 -Ref: Bitwise Functions-Footnote-1562726 -Node: Type Functions562898 -Node: I18N Functions564050 -Node: User-defined565697 -Node: Definition Syntax566502 -Ref: Definition Syntax-Footnote-1572161 -Node: Function Example572232 -Ref: Function Example-Footnote-1575153 -Node: Function Caveats575175 -Node: Calling A Function575693 -Node: Variable Scope576651 -Node: Pass By Value/Reference579644 -Node: Return Statement583141 -Node: Dynamic Typing586120 -Node: Indirect Calls587049 -Ref: Indirect Calls-Footnote-1598355 -Node: Functions Summary598483 -Node: Library Functions601185 -Ref: Library Functions-Footnote-1604793 -Ref: Library Functions-Footnote-2604936 -Node: Library Names605107 -Ref: Library Names-Footnote-1608565 -Ref: Library Names-Footnote-2608788 -Node: General Functions608874 -Node: Strtonum Function609977 -Node: Assert Function612999 -Node: Round Function616323 -Node: Cliff Random Function617864 -Node: Ordinal Functions618880 -Ref: Ordinal Functions-Footnote-1621943 -Ref: Ordinal Functions-Footnote-2622195 -Node: Join Function622406 -Ref: Join Function-Footnote-1624176 -Node: Getlocaltime Function624376 -Node: Readfile Function628120 -Node: Shell Quoting630092 -Node: Data File Management631493 -Node: Filetrans Function632125 -Node: Rewind Function636221 -Node: File Checking637607 -Ref: File Checking-Footnote-1638940 -Node: Empty Files639141 -Node: Ignoring Assigns641120 -Node: Getopt Function642670 -Ref: Getopt Function-Footnote-1654134 -Node: Passwd Functions654334 -Ref: Passwd Functions-Footnote-1663174 -Node: Group Functions663262 -Ref: Group Functions-Footnote-1671159 -Node: Walking Arrays671364 -Node: Library Functions Summary672964 -Node: Library Exercises674368 -Node: Sample Programs675648 -Node: Running Examples676418 -Node: Clones677146 -Node: Cut Program678370 -Node: Egrep Program688090 -Ref: Egrep Program-Footnote-1695593 -Node: Id Program695703 -Node: Split Program699379 -Ref: Split Program-Footnote-1702833 -Node: Tee Program702961 -Node: Uniq Program705750 -Node: Wc Program713169 -Ref: Wc Program-Footnote-1717419 -Node: Miscellaneous Programs717513 -Node: Dupword Program718726 -Node: Alarm Program720757 -Node: Translate Program725562 -Ref: Translate Program-Footnote-1730125 -Node: Labels Program730395 -Ref: Labels Program-Footnote-1733746 -Node: Word Sorting733830 -Node: History Sorting737900 -Node: Extract Program739735 -Node: Simple Sed747259 -Node: Igawk Program750329 -Ref: Igawk Program-Footnote-1764655 -Ref: Igawk Program-Footnote-2764856 -Ref: Igawk Program-Footnote-3764978 -Node: Anagram Program765093 -Node: Signature Program768154 -Node: Programs Summary769401 -Node: Programs Exercises770622 -Ref: Programs Exercises-Footnote-1774753 -Node: Advanced Features774844 -Node: Nondecimal Data776826 -Node: Array Sorting778416 -Node: Controlling Array Traversal779116 -Ref: Controlling Array Traversal-Footnote-1787482 -Node: Array Sorting Functions787600 -Ref: Array Sorting Functions-Footnote-1791486 -Node: Two-way I/O791682 -Ref: Two-way I/O-Footnote-1796627 -Ref: Two-way I/O-Footnote-2796813 -Node: TCP/IP Networking796895 -Node: Profiling799767 -Node: Advanced Features Summary807308 -Node: Internationalization809241 -Node: I18N and L10N810721 -Node: Explaining gettext811407 -Ref: Explaining gettext-Footnote-1816432 -Ref: Explaining gettext-Footnote-2816616 -Node: Programmer i18n816781 -Ref: Programmer i18n-Footnote-1821657 -Node: Translator i18n821706 -Node: String Extraction822500 -Ref: String Extraction-Footnote-1823631 -Node: Printf Ordering823717 -Ref: Printf Ordering-Footnote-1826503 -Node: I18N Portability826567 -Ref: I18N Portability-Footnote-1829023 -Node: I18N Example829086 -Ref: I18N Example-Footnote-1831889 -Node: Gawk I18N831961 -Node: I18N Summary832605 -Node: Debugger833945 -Node: Debugging834967 -Node: Debugging Concepts835408 -Node: Debugging Terms837218 -Node: Awk Debugging839790 -Node: Sample Debugging Session840696 -Node: Debugger Invocation841230 -Node: Finding The Bug842615 -Node: List of Debugger Commands849094 -Node: Breakpoint Control850426 -Node: Debugger Execution Control854103 -Node: Viewing And Changing Data857462 -Node: Execution Stack860838 -Node: Debugger Info862473 -Node: Miscellaneous Debugger Commands866518 -Node: Readline Support871519 -Node: Limitations872413 -Node: Debugging Summary874528 -Node: Arbitrary Precision Arithmetic875702 -Node: Computer Arithmetic877118 -Ref: table-numeric-ranges880717 -Ref: Computer Arithmetic-Footnote-1881241 -Node: Math Definitions881298 -Ref: table-ieee-formats884593 -Ref: Math Definitions-Footnote-1885197 -Node: MPFR features885302 -Node: FP Math Caution886973 -Ref: FP Math Caution-Footnote-1888023 -Node: Inexactness of computations888392 -Node: Inexact representation889351 -Node: Comparing FP Values890709 -Node: Errors accumulate891791 -Node: Getting Accuracy893223 -Node: Try To Round895927 -Node: Setting precision896826 -Ref: table-predefined-precision-strings897510 -Node: Setting the rounding mode899339 -Ref: table-gawk-rounding-modes899703 -Ref: Setting the rounding mode-Footnote-1903155 -Node: Arbitrary Precision Integers903334 -Ref: Arbitrary Precision Integers-Footnote-1906318 -Node: POSIX Floating Point Problems906467 -Ref: POSIX Floating Point Problems-Footnote-1910346 -Node: Floating point summary910384 -Node: Dynamic Extensions912580 -Node: Extension Intro914132 -Node: Plugin License915397 -Node: Extension Mechanism Outline916194 -Ref: figure-load-extension916622 -Ref: figure-register-new-function918102 -Ref: figure-call-new-function919106 -Node: Extension API Description921093 -Node: Extension API Functions Introduction922543 -Node: General Data Types927364 -Ref: General Data Types-Footnote-1933171 -Node: Memory Allocation Functions933470 -Ref: Memory Allocation Functions-Footnote-1936309 -Node: Constructor Functions936405 -Node: Registration Functions938139 -Node: Extension Functions938824 -Node: Exit Callback Functions941121 -Node: Extension Version String942369 -Node: Input Parsers943034 -Node: Output Wrappers952913 -Node: Two-way processors957428 -Node: Printing Messages959632 -Ref: Printing Messages-Footnote-1960708 -Node: Updating `ERRNO'960860 -Node: Requesting Values961600 -Ref: table-value-types-returned962328 -Node: Accessing Parameters963285 -Node: Symbol Table Access964516 -Node: Symbol table by name965030 -Node: Symbol table by cookie967011 -Ref: Symbol table by cookie-Footnote-1971155 -Node: Cached values971218 -Ref: Cached values-Footnote-1974717 -Node: Array Manipulation974808 -Ref: Array Manipulation-Footnote-1975906 -Node: Array Data Types975943 -Ref: Array Data Types-Footnote-1978598 -Node: Array Functions978690 -Node: Flattening Arrays982544 -Node: Creating Arrays989436 -Node: Extension API Variables994207 -Node: Extension Versioning994843 -Node: Extension API Informational Variables996744 -Node: Extension API Boilerplate997809 -Node: Finding Extensions1001618 -Node: Extension Example1002178 -Node: Internal File Description1002950 -Node: Internal File Ops1007017 -Ref: Internal File Ops-Footnote-11018687 -Node: Using Internal File Ops1018827 -Ref: Using Internal File Ops-Footnote-11021210 -Node: Extension Samples1021483 -Node: Extension Sample File Functions1023009 -Node: Extension Sample Fnmatch1030647 -Node: Extension Sample Fork1032138 -Node: Extension Sample Inplace1033353 -Node: Extension Sample Ord1035028 -Node: Extension Sample Readdir1035864 -Ref: table-readdir-file-types1036740 -Node: Extension Sample Revout1037551 -Node: Extension Sample Rev2way1038141 -Node: Extension Sample Read write array1038881 -Node: Extension Sample Readfile1040821 -Node: Extension Sample Time1041916 -Node: Extension Sample API Tests1043265 -Node: gawkextlib1043756 -Node: Extension summary1046414 -Node: Extension Exercises1050103 -Node: Language History1050825 -Node: V7/SVR3.11052481 -Node: SVR41054662 -Node: POSIX1056107 -Node: BTL1057496 -Node: POSIX/GNU1058230 -Node: Feature History1063794 -Node: Common Extensions1076892 -Node: Ranges and Locales1078216 -Ref: Ranges and Locales-Footnote-11082834 -Ref: Ranges and Locales-Footnote-21082861 -Ref: Ranges and Locales-Footnote-31083095 -Node: Contributors1083316 -Node: History summary1088857 -Node: Installation1090227 -Node: Gawk Distribution1091173 -Node: Getting1091657 -Node: Extracting1092480 -Node: Distribution contents1094115 -Node: Unix Installation1099832 -Node: Quick Installation1100449 -Node: Additional Configuration Options1102873 -Node: Configuration Philosophy1104611 -Node: Non-Unix Installation1106980 -Node: PC Installation1107438 -Node: PC Binary Installation1108757 -Node: PC Compiling1110605 -Ref: PC Compiling-Footnote-11113626 -Node: PC Testing1113735 -Node: PC Using1114911 -Node: Cygwin1119026 -Node: MSYS1119849 -Node: VMS Installation1120349 -Node: VMS Compilation1121141 -Ref: VMS Compilation-Footnote-11122363 -Node: VMS Dynamic Extensions1122421 -Node: VMS Installation Details1124105 -Node: VMS Running1126357 -Node: VMS GNV1129193 -Node: VMS Old Gawk1129927 -Node: Bugs1130397 -Node: Other Versions1134280 -Node: Installation summary1140704 -Node: Notes1141760 -Node: Compatibility Mode1142625 -Node: Additions1143407 -Node: Accessing The Source1144332 -Node: Adding Code1145767 -Node: New Ports1151924 -Node: Derived Files1156406 -Ref: Derived Files-Footnote-11161881 -Ref: Derived Files-Footnote-21161915 -Ref: Derived Files-Footnote-31162511 -Node: Future Extensions1162625 -Node: Implementation Limitations1163231 -Node: Extension Design1164479 -Node: Old Extension Problems1165633 -Ref: Old Extension Problems-Footnote-11167150 -Node: Extension New Mechanism Goals1167207 -Ref: Extension New Mechanism Goals-Footnote-11170567 -Node: Extension Other Design Decisions1170756 -Node: Extension Future Growth1172864 -Node: Old Extension Mechanism1173700 -Node: Notes summary1175462 -Node: Basic Concepts1176648 -Node: Basic High Level1177329 -Ref: figure-general-flow1177601 -Ref: figure-process-flow1178200 -Ref: Basic High Level-Footnote-11181429 -Node: Basic Data Typing1181614 -Node: Glossary1184942 -Node: Copying1216871 -Node: GNU Free Documentation License1254427 -Node: Index1279563 +Node: Getting Started73114 +Node: Running gawk75553 +Node: One-shot76743 +Node: Read Terminal78007 +Node: Long80038 +Node: Executable Scripts81551 +Ref: Executable Scripts-Footnote-184340 +Node: Comments84443 +Node: Quoting86925 +Node: DOS Quoting92443 +Node: Sample Data Files93118 +Node: Very Simple95713 +Node: Two Rules100612 +Node: More Complex102498 +Node: Statements/Lines105360 +Ref: Statements/Lines-Footnote-1109815 +Node: Other Features110080 +Node: When111016 +Ref: When-Footnote-1112770 +Node: Intro Summary112835 +Node: Invoking Gawk113719 +Node: Command Line115233 +Node: Options116031 +Ref: Options-Footnote-1131953 +Ref: Options-Footnote-2132182 +Node: Other Arguments132207 +Node: Naming Standard Input135155 +Node: Environment Variables136248 +Node: AWKPATH Variable136806 +Ref: AWKPATH Variable-Footnote-1140103 +Ref: AWKPATH Variable-Footnote-2140148 +Node: AWKLIBPATH Variable140408 +Node: Other Environment Variables141551 +Node: Exit Status145309 +Node: Include Files145985 +Node: Loading Shared Libraries149574 +Node: Obsolete151001 +Node: Undocumented151693 +Node: Invoking Summary151960 +Node: Regexp153623 +Node: Regexp Usage155077 +Node: Escape Sequences157114 +Node: Regexp Operators163124 +Ref: Regexp Operators-Footnote-1170534 +Ref: Regexp Operators-Footnote-2170681 +Node: Bracket Expressions170779 +Ref: table-char-classes172794 +Node: Leftmost Longest175736 +Node: Computed Regexps177038 +Node: GNU Regexp Operators180467 +Node: Case-sensitivity184139 +Ref: Case-sensitivity-Footnote-1187024 +Ref: Case-sensitivity-Footnote-2187259 +Node: Regexp Summary187367 +Node: Reading Files188834 +Node: Records190927 +Node: awk split records191660 +Node: gawk split records196589 +Ref: gawk split records-Footnote-1201128 +Node: Fields201165 +Ref: Fields-Footnote-1203943 +Node: Nonconstant Fields204029 +Ref: Nonconstant Fields-Footnote-1206267 +Node: Changing Fields206470 +Node: Field Separators212401 +Node: Default Field Splitting215105 +Node: Regexp Field Splitting216222 +Node: Single Character Fields219572 +Node: Command Line Field Separator220631 +Node: Full Line Fields223848 +Ref: Full Line Fields-Footnote-1225369 +Ref: Full Line Fields-Footnote-2225415 +Node: Field Splitting Summary225516 +Node: Constant Size227590 +Node: Splitting By Content232173 +Ref: Splitting By Content-Footnote-1236138 +Node: Multiple Line236301 +Ref: Multiple Line-Footnote-1242182 +Node: Getline242361 +Node: Plain Getline244568 +Node: Getline/Variable247208 +Node: Getline/File248357 +Node: Getline/Variable/File249742 +Ref: Getline/Variable/File-Footnote-1251345 +Node: Getline/Pipe251432 +Node: Getline/Variable/Pipe254110 +Node: Getline/Coprocess255241 +Node: Getline/Variable/Coprocess256505 +Node: Getline Notes257244 +Node: Getline Summary260038 +Ref: table-getline-variants260450 +Node: Read Timeout261279 +Ref: Read Timeout-Footnote-1265116 +Node: Command-line directories265174 +Node: Input Summary266079 +Node: Input Exercises269464 +Node: Printing270192 +Node: Print271969 +Node: Print Examples273426 +Node: Output Separators276205 +Node: OFMT278223 +Node: Printf279578 +Node: Basic Printf280363 +Node: Control Letters281935 +Node: Format Modifiers285920 +Node: Printf Examples291930 +Node: Redirection294416 +Node: Special FD301254 +Ref: Special FD-Footnote-1304420 +Node: Special Files304494 +Node: Other Inherited Files305111 +Node: Special Network306111 +Node: Special Caveats306973 +Node: Close Files And Pipes307922 +Ref: Close Files And Pipes-Footnote-1315113 +Ref: Close Files And Pipes-Footnote-2315261 +Node: Output Summary315411 +Node: Output Exercises316409 +Node: Expressions317089 +Node: Values318278 +Node: Constants318955 +Node: Scalar Constants319646 +Ref: Scalar Constants-Footnote-1320508 +Node: Nondecimal-numbers320758 +Node: Regexp Constants323768 +Node: Using Constant Regexps324294 +Node: Variables327457 +Node: Using Variables328114 +Node: Assignment Options330025 +Node: Conversion331900 +Node: Strings And Numbers332424 +Ref: Strings And Numbers-Footnote-1335489 +Node: Locale influences conversions335598 +Ref: table-locale-affects338344 +Node: All Operators338936 +Node: Arithmetic Ops339565 +Node: Concatenation342070 +Ref: Concatenation-Footnote-1344889 +Node: Assignment Ops344996 +Ref: table-assign-ops349975 +Node: Increment Ops351285 +Node: Truth Values and Conditions354716 +Node: Truth Values355799 +Node: Typing and Comparison356848 +Node: Variable Typing357664 +Node: Comparison Operators361331 +Ref: table-relational-ops361741 +Node: POSIX String Comparison365236 +Ref: POSIX String Comparison-Footnote-1366308 +Node: Boolean Ops366447 +Ref: Boolean Ops-Footnote-1370925 +Node: Conditional Exp371016 +Node: Function Calls372754 +Node: Precedence376634 +Node: Locales380294 +Node: Expressions Summary381926 +Node: Patterns and Actions384497 +Node: Pattern Overview385617 +Node: Regexp Patterns387296 +Node: Expression Patterns387839 +Node: Ranges391619 +Node: BEGIN/END394726 +Node: Using BEGIN/END395487 +Ref: Using BEGIN/END-Footnote-1398223 +Node: I/O And BEGIN/END398329 +Node: BEGINFILE/ENDFILE400644 +Node: Empty403541 +Node: Using Shell Variables403858 +Node: Action Overview406131 +Node: Statements408457 +Node: If Statement410305 +Node: While Statement411800 +Node: Do Statement413828 +Node: For Statement414976 +Node: Switch Statement418134 +Node: Break Statement420516 +Node: Continue Statement422557 +Node: Next Statement424384 +Node: Nextfile Statement426765 +Node: Exit Statement429393 +Node: Built-in Variables431804 +Node: User-modified432937 +Ref: User-modified-Footnote-1440640 +Node: Auto-set440702 +Ref: Auto-set-Footnote-1453754 +Ref: Auto-set-Footnote-2453959 +Node: ARGC and ARGV454015 +Node: Pattern Action Summary458233 +Node: Arrays460666 +Node: Array Basics461995 +Node: Array Intro462839 +Ref: figure-array-elements464773 +Ref: Array Intro-Footnote-1467393 +Node: Reference to Elements467521 +Node: Assigning Elements469983 +Node: Array Example470474 +Node: Scanning an Array472233 +Node: Controlling Scanning475253 +Ref: Controlling Scanning-Footnote-1480647 +Node: Numeric Array Subscripts480963 +Node: Uninitialized Subscripts483148 +Node: Delete484765 +Ref: Delete-Footnote-1487514 +Node: Multidimensional487571 +Node: Multiscanning490668 +Node: Arrays of Arrays492257 +Node: Arrays Summary497011 +Node: Functions499102 +Node: Built-in500141 +Node: Calling Built-in501219 +Node: Numeric Functions503214 +Ref: Numeric Functions-Footnote-1507230 +Ref: Numeric Functions-Footnote-2507587 +Ref: Numeric Functions-Footnote-3507635 +Node: String Functions507907 +Ref: String Functions-Footnote-1531408 +Ref: String Functions-Footnote-2531537 +Ref: String Functions-Footnote-3531785 +Node: Gory Details531872 +Ref: table-sub-escapes533653 +Ref: table-sub-proposed535168 +Ref: table-posix-sub536530 +Ref: table-gensub-escapes538067 +Ref: Gory Details-Footnote-1538900 +Node: I/O Functions539051 +Ref: I/O Functions-Footnote-1546287 +Node: Time Functions546434 +Ref: Time Functions-Footnote-1556943 +Ref: Time Functions-Footnote-2557011 +Ref: Time Functions-Footnote-3557169 +Ref: Time Functions-Footnote-4557280 +Ref: Time Functions-Footnote-5557392 +Ref: Time Functions-Footnote-6557619 +Node: Bitwise Functions557885 +Ref: table-bitwise-ops558447 +Ref: Bitwise Functions-Footnote-1562775 +Node: Type Functions562947 +Node: I18N Functions564099 +Node: User-defined565746 +Node: Definition Syntax566551 +Ref: Definition Syntax-Footnote-1572210 +Node: Function Example572281 +Ref: Function Example-Footnote-1575202 +Node: Function Caveats575224 +Node: Calling A Function575742 +Node: Variable Scope576700 +Node: Pass By Value/Reference579693 +Node: Return Statement583190 +Node: Dynamic Typing586169 +Node: Indirect Calls587098 +Ref: Indirect Calls-Footnote-1598404 +Node: Functions Summary598532 +Node: Library Functions601234 +Ref: Library Functions-Footnote-1604842 +Ref: Library Functions-Footnote-2604985 +Node: Library Names605156 +Ref: Library Names-Footnote-1608614 +Ref: Library Names-Footnote-2608837 +Node: General Functions608923 +Node: Strtonum Function610026 +Node: Assert Function613048 +Node: Round Function616372 +Node: Cliff Random Function617913 +Node: Ordinal Functions618929 +Ref: Ordinal Functions-Footnote-1621992 +Ref: Ordinal Functions-Footnote-2622244 +Node: Join Function622455 +Ref: Join Function-Footnote-1624225 +Node: Getlocaltime Function624425 +Node: Readfile Function628169 +Node: Shell Quoting630141 +Node: Data File Management631542 +Node: Filetrans Function632174 +Node: Rewind Function636270 +Node: File Checking637656 +Ref: File Checking-Footnote-1638989 +Node: Empty Files639190 +Node: Ignoring Assigns641169 +Node: Getopt Function642719 +Ref: Getopt Function-Footnote-1654183 +Node: Passwd Functions654383 +Ref: Passwd Functions-Footnote-1663223 +Node: Group Functions663311 +Ref: Group Functions-Footnote-1671208 +Node: Walking Arrays671413 +Node: Library Functions Summary673013 +Node: Library Exercises674417 +Node: Sample Programs675697 +Node: Running Examples676467 +Node: Clones677195 +Node: Cut Program678419 +Node: Egrep Program688139 +Ref: Egrep Program-Footnote-1695642 +Node: Id Program695752 +Node: Split Program699428 +Ref: Split Program-Footnote-1702882 +Node: Tee Program703010 +Node: Uniq Program705799 +Node: Wc Program713218 +Ref: Wc Program-Footnote-1717468 +Node: Miscellaneous Programs717562 +Node: Dupword Program718775 +Node: Alarm Program720806 +Node: Translate Program725611 +Ref: Translate Program-Footnote-1730174 +Node: Labels Program730444 +Ref: Labels Program-Footnote-1733795 +Node: Word Sorting733879 +Node: History Sorting737949 +Node: Extract Program739784 +Node: Simple Sed747308 +Node: Igawk Program750378 +Ref: Igawk Program-Footnote-1764704 +Ref: Igawk Program-Footnote-2764905 +Ref: Igawk Program-Footnote-3765027 +Node: Anagram Program765142 +Node: Signature Program768203 +Node: Programs Summary769450 +Node: Programs Exercises770671 +Ref: Programs Exercises-Footnote-1774802 +Node: Advanced Features774893 +Node: Nondecimal Data776875 +Node: Array Sorting778465 +Node: Controlling Array Traversal779165 +Ref: Controlling Array Traversal-Footnote-1787531 +Node: Array Sorting Functions787649 +Ref: Array Sorting Functions-Footnote-1791535 +Node: Two-way I/O791731 +Ref: Two-way I/O-Footnote-1796676 +Ref: Two-way I/O-Footnote-2796862 +Node: TCP/IP Networking796944 +Node: Profiling799816 +Node: Advanced Features Summary807357 +Node: Internationalization809290 +Node: I18N and L10N810770 +Node: Explaining gettext811456 +Ref: Explaining gettext-Footnote-1816481 +Ref: Explaining gettext-Footnote-2816665 +Node: Programmer i18n816830 +Ref: Programmer i18n-Footnote-1821706 +Node: Translator i18n821755 +Node: String Extraction822549 +Ref: String Extraction-Footnote-1823680 +Node: Printf Ordering823766 +Ref: Printf Ordering-Footnote-1826552 +Node: I18N Portability826616 +Ref: I18N Portability-Footnote-1829072 +Node: I18N Example829135 +Ref: I18N Example-Footnote-1831938 +Node: Gawk I18N832010 +Node: I18N Summary832654 +Node: Debugger833994 +Node: Debugging835016 +Node: Debugging Concepts835457 +Node: Debugging Terms837267 +Node: Awk Debugging839839 +Node: Sample Debugging Session840745 +Node: Debugger Invocation841279 +Node: Finding The Bug842664 +Node: List of Debugger Commands849143 +Node: Breakpoint Control850475 +Node: Debugger Execution Control854152 +Node: Viewing And Changing Data857511 +Node: Execution Stack860887 +Node: Debugger Info862522 +Node: Miscellaneous Debugger Commands866567 +Node: Readline Support871568 +Node: Limitations872462 +Node: Debugging Summary874577 +Node: Arbitrary Precision Arithmetic875751 +Node: Computer Arithmetic877167 +Ref: table-numeric-ranges880766 +Ref: Computer Arithmetic-Footnote-1881290 +Node: Math Definitions881347 +Ref: table-ieee-formats884642 +Ref: Math Definitions-Footnote-1885246 +Node: MPFR features885351 +Node: FP Math Caution887022 +Ref: FP Math Caution-Footnote-1888072 +Node: Inexactness of computations888441 +Node: Inexact representation889400 +Node: Comparing FP Values890758 +Node: Errors accumulate891840 +Node: Getting Accuracy893272 +Node: Try To Round895976 +Node: Setting precision896875 +Ref: table-predefined-precision-strings897559 +Node: Setting the rounding mode899388 +Ref: table-gawk-rounding-modes899752 +Ref: Setting the rounding mode-Footnote-1903204 +Node: Arbitrary Precision Integers903383 +Ref: Arbitrary Precision Integers-Footnote-1906367 +Node: POSIX Floating Point Problems906516 +Ref: POSIX Floating Point Problems-Footnote-1910395 +Node: Floating point summary910433 +Node: Dynamic Extensions912629 +Node: Extension Intro914181 +Node: Plugin License915446 +Node: Extension Mechanism Outline916243 +Ref: figure-load-extension916671 +Ref: figure-register-new-function918151 +Ref: figure-call-new-function919155 +Node: Extension API Description921142 +Node: Extension API Functions Introduction922592 +Node: General Data Types927413 +Ref: General Data Types-Footnote-1933312 +Node: Memory Allocation Functions933611 +Ref: Memory Allocation Functions-Footnote-1936450 +Node: Constructor Functions936546 +Node: Registration Functions938280 +Node: Extension Functions938965 +Node: Exit Callback Functions941262 +Node: Extension Version String942510 +Node: Input Parsers943175 +Node: Output Wrappers953054 +Node: Two-way processors957569 +Node: Printing Messages959773 +Ref: Printing Messages-Footnote-1960849 +Node: Updating `ERRNO'961001 +Node: Requesting Values961741 +Ref: table-value-types-returned962469 +Node: Accessing Parameters963426 +Node: Symbol Table Access964657 +Node: Symbol table by name965171 +Node: Symbol table by cookie967152 +Ref: Symbol table by cookie-Footnote-1971296 +Node: Cached values971359 +Ref: Cached values-Footnote-1974858 +Node: Array Manipulation974949 +Ref: Array Manipulation-Footnote-1976047 +Node: Array Data Types976084 +Ref: Array Data Types-Footnote-1978739 +Node: Array Functions978831 +Node: Flattening Arrays982685 +Node: Creating Arrays989577 +Node: Extension API Variables994348 +Node: Extension Versioning994984 +Node: Extension API Informational Variables996885 +Node: Extension API Boilerplate997950 +Node: Finding Extensions1001759 +Node: Extension Example1002319 +Node: Internal File Description1003091 +Node: Internal File Ops1007158 +Ref: Internal File Ops-Footnote-11018828 +Node: Using Internal File Ops1018968 +Ref: Using Internal File Ops-Footnote-11021351 +Node: Extension Samples1021624 +Node: Extension Sample File Functions1023150 +Node: Extension Sample Fnmatch1030788 +Node: Extension Sample Fork1032279 +Node: Extension Sample Inplace1033494 +Node: Extension Sample Ord1035169 +Node: Extension Sample Readdir1036005 +Ref: table-readdir-file-types1036881 +Node: Extension Sample Revout1037692 +Node: Extension Sample Rev2way1038282 +Node: Extension Sample Read write array1039022 +Node: Extension Sample Readfile1040962 +Node: Extension Sample Time1042057 +Node: Extension Sample API Tests1043406 +Node: gawkextlib1043897 +Node: Extension summary1046555 +Node: Extension Exercises1050244 +Node: Language History1050966 +Node: V7/SVR3.11052622 +Node: SVR41054803 +Node: POSIX1056248 +Node: BTL1057637 +Node: POSIX/GNU1058371 +Node: Feature History1063935 +Node: Common Extensions1077033 +Node: Ranges and Locales1078357 +Ref: Ranges and Locales-Footnote-11082975 +Ref: Ranges and Locales-Footnote-21083002 +Ref: Ranges and Locales-Footnote-31083236 +Node: Contributors1083457 +Node: History summary1088998 +Node: Installation1090368 +Node: Gawk Distribution1091314 +Node: Getting1091798 +Node: Extracting1092621 +Node: Distribution contents1094256 +Node: Unix Installation1099973 +Node: Quick Installation1100590 +Node: Additional Configuration Options1103014 +Node: Configuration Philosophy1104752 +Node: Non-Unix Installation1107121 +Node: PC Installation1107579 +Node: PC Binary Installation1108898 +Node: PC Compiling1110746 +Ref: PC Compiling-Footnote-11113767 +Node: PC Testing1113876 +Node: PC Using1115052 +Node: Cygwin1119167 +Node: MSYS1119990 +Node: VMS Installation1120490 +Node: VMS Compilation1121282 +Ref: VMS Compilation-Footnote-11122504 +Node: VMS Dynamic Extensions1122562 +Node: VMS Installation Details1124246 +Node: VMS Running1126498 +Node: VMS GNV1129334 +Node: VMS Old Gawk1130068 +Node: Bugs1130538 +Node: Other Versions1134421 +Node: Installation summary1140845 +Node: Notes1141901 +Node: Compatibility Mode1142766 +Node: Additions1143548 +Node: Accessing The Source1144473 +Node: Adding Code1145908 +Node: New Ports1152065 +Node: Derived Files1156547 +Ref: Derived Files-Footnote-11162022 +Ref: Derived Files-Footnote-21162056 +Ref: Derived Files-Footnote-31162652 +Node: Future Extensions1162766 +Node: Implementation Limitations1163372 +Node: Extension Design1164620 +Node: Old Extension Problems1165774 +Ref: Old Extension Problems-Footnote-11167291 +Node: Extension New Mechanism Goals1167348 +Ref: Extension New Mechanism Goals-Footnote-11170708 +Node: Extension Other Design Decisions1170897 +Node: Extension Future Growth1173005 +Node: Old Extension Mechanism1173841 +Node: Notes summary1175603 +Node: Basic Concepts1176789 +Node: Basic High Level1177470 +Ref: figure-general-flow1177742 +Ref: figure-process-flow1178341 +Ref: Basic High Level-Footnote-11181570 +Node: Basic Data Typing1181755 +Node: Glossary1185083 +Node: Copying1217012 +Node: GNU Free Documentation License1254568 +Node: Index1279704  End Tag Table -- cgit v1.2.3 From 2f49027b6d6b1f03ae07c5cd9625b072465079bd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 11 Feb 2015 23:21:28 +0200 Subject: O'Reilly edits, through Chapter 16. --- doc/gawk.info | 575 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 290 insertions(+), 285 deletions(-) (limited to 'doc/gawk.info') diff --git a/doc/gawk.info b/doc/gawk.info index eb8d07b5..8061bbd2 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -23071,7 +23071,7 @@ first. If you know that you wish to use the same numeric or string _value_ for one or more variables, you can create the value once, retaining a "value cookie" for it, and then pass in that value cookie whenever you -wish to set the value of a variable. This both storage space within +wish to set the value of a variable. This saves storage space within the running `gawk' process and reduces the time needed to create the value. @@ -23108,7 +23108,7 @@ prototypes, in the way that extension code would use them: `void gawk_free(void *ptr);' Call the correct version of `free()' to release storage that was - allocated with `gawk_malloc()', `gawk_calloc()' or + allocated with `gawk_malloc()', `gawk_calloc()', or `gawk_realloc()'. The API has to provide these functions because it is possible for an @@ -23120,7 +23120,7 @@ version of `malloc()', unexpected behavior would likely result. Two convenience macros may be used for allocating storage from `gawk_malloc()' and `gawk_realloc()'. If the allocation fails, they cause `gawk' to exit with a fatal error message. They should be used -as if they were procedure calls that do not return a value. +as if they were procedure calls that do not return a value: `#define emalloc(pointer, type, size, message) ...' The arguments to this macro are as follows: @@ -23150,13 +23150,13 @@ as if they were procedure calls that do not return a value. make_malloced_string(message, strlen(message), & result); `#define erealloc(pointer, type, size, message) ...' - This is like `emalloc()', but it calls `gawk_realloc()', instead - of `gawk_malloc()'. The arguments are the same as for the + This is like `emalloc()', but it calls `gawk_realloc()' instead of + `gawk_malloc()'. The arguments are the same as for the `emalloc()' macro. ---------- Footnotes ---------- - (1) This is more common on MS-Windows systems, but can happen on + (1) This is more common on MS-Windows systems, but it can happen on Unix-like systems as well.  @@ -23182,7 +23182,7 @@ extension code would use them: This function creates a string value in the `awk_value_t' variable pointed to by `result'. It expects `string' to be a `char *' value pointing to data previously obtained from `gawk_malloc()', - `gawk_calloc()' or `gawk_realloc()'. The idea here is that the + `gawk_calloc()', or `gawk_realloc()'. The idea here is that the data is passed directly to `gawk', which assumes responsibility for it. It returns `result'. @@ -23232,7 +23232,7 @@ Extension functions are described by the following record: The fields are: `const char *name;' - The name of the new function. `awk' level code calls the function + The name of the new function. `awk'-level code calls the function by this name. This is a regular C string. Function names must obey the rules for `awk' identifiers. That is, @@ -23244,7 +23244,7 @@ Extension functions are described by the following record: This is a pointer to the C function that provides the extension's functionality. The function must fill in `*result' with either a number or a string. `gawk' takes ownership of any string memory. - As mentioned earlier, string memory *must* come from one of + As mentioned earlier, string memory _must_ come from one of `gawk_malloc()', `gawk_calloc()', or `gawk_realloc()'. The `num_actual_args' argument tells the C function how many @@ -23291,10 +23291,10 @@ function with `gawk' using the following function: `gawk' intends to pass to the `exit()' system call. `arg0' - A pointer to private data which `gawk' saves in order to pass + A pointer to private data that `gawk' saves in order to pass to the function pointed to by `funcp'. - Exit callback functions are called in last-in-first-out (LIFO) + Exit callback functions are called in last-in, first-out (LIFO) order--that is, in the reverse order in which they are registered with `gawk'. @@ -23304,8 +23304,8 @@ File: gawk.info, Node: Extension Version String, Next: Input Parsers, Prev: E 16.4.5.3 Registering An Extension Version String ................................................ -You can register a version string which indicates the name and version -of your extension, with `gawk', as follows: +You can register a version string that indicates the name and version +of your extension with `gawk', as follows: `void register_ext_version(const char *version);' Register the string pointed to by `version' with `gawk'. Note @@ -23328,7 +23328,7 @@ Files::). Additionally, it sets the value of `RT' (*note Built-in Variables::). If you want, you can provide your own custom input parser. An input -parser's job is to return a record to the `gawk' record processing +parser's job is to return a record to the `gawk' record-processing code, along with indicators for the value and length of the data to be used for `RT', if any. @@ -23345,10 +23345,10 @@ used for `RT', if any. `awk_bool_t XXX_take_control_of(awk_input_buf_t *iobuf);' When `gawk' decides to hand control of the file over to the input parser, it calls this function. This function in turn must fill - in certain fields in the `awk_input_buf_t' structure, and ensure + in certain fields in the `awk_input_buf_t' structure and ensure that certain conditions are true. It should then return true. If - an error of some kind occurs, it should not fill in any fields, - and should return false; then `gawk' will not use the input parser. + an error of some kind occurs, it should not fill in any fields and + should return false; then `gawk' will not use the input parser. The details are presented shortly. Your extension should package these functions inside an @@ -23425,10 +23425,10 @@ the `struct stat', or any combination of these factors. Once `XXX_can_take_file()' has returned true, and `gawk' has decided to use your input parser, it calls `XXX_take_control_of()'. That -function then fills one of either the `get_record' field or the -`read_func' field in the `awk_input_buf_t'. It must also ensure that -`fd' is _not_ set to `INVALID_HANDLE'. The following list describes -the fields that may be filled by `XXX_take_control_of()': +function then fills either the `get_record' field or the `read_func' +field in the `awk_input_buf_t'. It must also ensure that `fd' is _not_ +set to `INVALID_HANDLE'. The following list describes the fields that +may be filled by `XXX_take_control_of()': `void *opaque;' This is used to hold any state information needed by the input @@ -23445,22 +23445,22 @@ the fields that may be filled by `XXX_take_control_of()': Its behavior is described in the text following this list. `ssize_t (*read_func)();' - This function pointer should point to function that has the same + This function pointer should point to a function that has the same behavior as the standard POSIX `read()' system call. It is an alternative to the `get_record' pointer. Its behavior is also described in the text following this list. `void (*close_func)(struct awk_input *iobuf);' This function pointer should point to a function that does the - "tear down." It should release any resources allocated by + "teardown." It should release any resources allocated by `XXX_take_control_of()'. It may also close the file. If it does so, it should set the `fd' field to `INVALID_HANDLE'. If `fd' is still not `INVALID_HANDLE' after the call to this function, `gawk' calls the regular `close()' system call. - Having a "tear down" function is optional. If your input parser - does not need it, do not set this field. Then, `gawk' calls the + Having a "teardown" function is optional. If your input parser does + not need it, do not set this field. Then, `gawk' calls the regular `close()' system call on the file descriptor, so it should be valid. @@ -23468,7 +23468,7 @@ the fields that may be filled by `XXX_take_control_of()': records. The parameters are as follows: `char **out' - This is a pointer to a `char *' variable which is set to point to + This is a pointer to a `char *' variable that is set to point to the record. `gawk' makes its own copy of the data, so the extension must manage this storage. @@ -23517,16 +23517,16 @@ explicitly. NOTE: You must choose one method or the other: either a function that returns a record, or one that returns raw data. In particular, if you supply a function to get a record, `gawk' will - call it, and never call the raw read function. + call it, and will never call the raw read function. `gawk' ships with a sample extension that reads directories, -returning records for each entry in the directory (*note Extension -Sample Readdir::). You may wish to use that code as a guide for writing -your own input parser. +returning records for each entry in a directory (*note Extension Sample +Readdir::). You may wish to use that code as a guide for writing your +own input parser. When writing an input parser, you should think about (and document) how it is expected to interact with `awk' code. You may want it to -always be called, and take effect as appropriate (as the `readdir' +always be called, and to take effect as appropriate (as the `readdir' extension does). Or you may want it to take effect based upon the value of an `awk' variable, as the XML extension from the `gawkextlib' project does (*note gawkextlib::). In the latter case, code in a @@ -23626,17 +23626,17 @@ in the `awk_output_buf_t'. The data members are as follows: These pointers should be set to point to functions that perform the equivalent function as the `' functions do, if appropriate. `gawk' uses these function pointers for all output. - `gawk' initializes the pointers to point to internal, "pass - through" functions that just call the regular `' - functions, so an extension only needs to redefine those functions - that are appropriate for what it does. + `gawk' initializes the pointers to point to internal "pass-through" + functions that just call the regular `' functions, so an + extension only needs to redefine those functions that are + appropriate for what it does. The `XXX_can_take_file()' function should make a decision based upon the `name' and `mode' fields, and any additional state (such as `awk' variable values) that is appropriate. When `gawk' calls `XXX_take_control_of()', that function should fill -in the other fields, as appropriate, except for `fp', which it should +in the other fields as appropriate, except for `fp', which it should just use normally. You register your output wrapper with the following function: @@ -23673,16 +23673,17 @@ structures as described earlier. The name of the two-way processor. `awk_bool_t (*can_take_two_way)(const char *name);' - This function returns true if it wants to take over two-way I/O - for this file name. It should not change any state (variable - values, etc.) within `gawk'. + The function pointed to by this field should return true if it + wants to take over two-way I/O for this file name. It should not + change any state (variable values, etc.) within `gawk'. `awk_bool_t (*take_control_of)(const char *name,' ` awk_input_buf_t *inbuf,' ` awk_output_buf_t *outbuf);' - This function should fill in the `awk_input_buf_t' and - `awk_outut_buf_t' structures pointed to by `inbuf' and `outbuf', - respectively. These structures were described earlier. + The function pointed to by this field should fill in the + `awk_input_buf_t' and `awk_outut_buf_t' structures pointed to by + `inbuf' and `outbuf', respectively. These structures were + described earlier. `awk_const struct two_way_processor *awk_const next;' This is for use by `gawk'; therefore it is marked `awk_const' so @@ -23706,7 +23707,7 @@ File: gawk.info, Node: Printing Messages, Next: Updating `ERRNO', Prev: Regis You can print different kinds of warning messages from your extension, as described here. Note that for these functions, you must pass in the -extension id received from `gawk' when the extension was loaded:(1) +extension ID received from `gawk' when the extension was loaded:(1) `void fatal(awk_ext_id_t id, const char *format, ...);' Print a message and then cause `gawk' to exit immediately. @@ -23762,7 +23763,7 @@ value you expect. If the actual value matches what you requested, the function returns true and fills in the `awk_value_t' result. Otherwise, the function returns false, and the `val_type' member indicates the type of the actual value. You may then print an error -message, or reissue the request for the actual value type, as +message or reissue the request for the actual value type, as appropriate. This behavior is summarized in *note table-value-types-returned::. @@ -23771,15 +23772,15 @@ table-value-types-returned::. String Number Array Undefined ------------------------------------------------------------------------------ - String String String false false - Number Number if can Number false false + String String String False False + Number Number if can Number False False be converted, else false -Type Array false false Array false -Requested Scalar Scalar Scalar false false +Type Array False False Array False +Requested Scalar Scalar Scalar False False Undefined String Number Array Undefined - Value false false false false - Cookie + Value False False False False + cookie Table 16.1: API value types returned @@ -23796,16 +23797,16 @@ your extension function. They are: ` awk_valtype_t wanted,' ` awk_value_t *result);' Fill in the `awk_value_t' structure pointed to by `result' with - the `count''th argument. Return true if the actual type matches - `wanted', false otherwise. In the latter case, `result->val_type' - indicates the actual type (*note Table 16.1: - table-value-types-returned.). Counts are zero based--the first + the `count'th argument. Return true if the actual type matches + `wanted', and false otherwise. In the latter case, + `result->val_type' indicates the actual type (*note Table 16.1: + table-value-types-returned.). Counts are zero-based--the first argument is numbered zero, the second one, and so on. `wanted' indicates the type of value expected. `awk_bool_t set_argument(size_t count, awk_array_t array);' Convert a parameter that was undefined into an array; this provides - call-by-reference for arrays. Return false if `count' is too big, + call by reference for arrays. Return false if `count' is too big, or if the argument's type is not undefined. *Note Array Manipulation::, for more information on creating arrays. @@ -23833,8 +23834,8 @@ File: gawk.info, Node: Symbol table by name, Next: Symbol table by cookie, Up The following routines provide the ability to access and update global `awk'-level variables by name. In compiler terminology, identifiers of different kinds are termed "symbols", thus the "sym" in the routines' -names. The data structure which stores information about symbols is -termed a "symbol table". +names. The data structure that stores information about symbols is +termed a "symbol table". The functions are as follows: `awk_bool_t sym_lookup(const char *name,' ` awk_valtype_t wanted,' @@ -23842,14 +23843,14 @@ termed a "symbol table". Fill in the `awk_value_t' structure pointed to by `result' with the value of the variable named by the string `name', which is a regular C string. `wanted' indicates the type of value expected. - Return true if the actual type matches `wanted', false otherwise. - In the latter case, `result->val_type' indicates the actual type - (*note Table 16.1: table-value-types-returned.). + Return true if the actual type matches `wanted', and false + otherwise. In the latter case, `result->val_type' indicates the + actual type (*note Table 16.1: table-value-types-returned.). `awk_bool_t sym_update(const char *name, awk_value_t *value);' Update the variable named by the string `name', which is a regular C string. The variable is added to `gawk''s symbol table if it is - not there. Return true if everything worked, false otherwise. + not there. Return true if everything worked, and false otherwise. Changing types (scalar to array or vice versa) of an existing variable is _not_ allowed, nor may this routine be used to update @@ -23874,7 +23875,7 @@ File: gawk.info, Node: Symbol table by cookie, Next: Cached values, Prev: Sym A "scalar cookie" is an opaque handle that provides access to a global variable or array. It is an optimization that avoids looking up variables in `gawk''s symbol table every time access is needed. This -was discussed earlier in *note General Data Types::. +was discussed earlier, in *note General Data Types::. The following functions let you work with scalar cookies: @@ -23985,7 +23986,7 @@ File: gawk.info, Node: Cached values, Prev: Symbol table by cookie, Up: Symbo .......................................... The routines in this section allow you to create and release cached -values. As with scalar cookies, in theory, cached values are not +values. Like scalar cookies, in theory, cached values are not necessary. You can create numbers and strings using the functions in *note Constructor Functions::. You can then assign those values to variables using `sym_update()' or `sym_update_scalar()', as you like. @@ -24056,7 +24057,7 @@ Using value cookies in this way saves considerable storage, as all of `VAR1' through `VAR100' share the same value. You might be wondering, "Is this sharing problematic? What happens -if `awk' code assigns a new value to `VAR1', are all the others changed +if `awk' code assigns a new value to `VAR1'; are all the others changed too?" That's a great question. The answer is that no, it's not a problem. @@ -24175,7 +24176,7 @@ File: gawk.info, Node: Array Functions, Next: Flattening Arrays, Prev: Array 16.4.11.2 Array Functions ......................... -The following functions relate to individual array elements. +The following functions relate to individual array elements: `awk_bool_t get_element_count(awk_array_t a_cookie, size_t *count);' For the array represented by `a_cookie', place in `*count' the @@ -24193,13 +24194,14 @@ The following functions relate to individual array elements. (*note Table 16.1: table-value-types-returned.). The value for `index' can be numeric, in which case `gawk' - converts it to a string. Using non-integral values is possible, but + converts it to a string. Using nonintegral values is possible, but requires that you understand how such values are converted to - strings (*note Conversion::); thus using integral values is safest. + strings (*note Conversion::); thus, using integral values is + safest. As with _all_ strings passed into `gawk' from an extension, the string value of `index' must come from `gawk_malloc()', - `gawk_calloc()' or `gawk_realloc()', and `gawk' releases the + `gawk_calloc()', or `gawk_realloc()', and `gawk' releases the storage. `awk_bool_t set_array_element(awk_array_t a_cookie,' @@ -24243,9 +24245,9 @@ The following functions relate to individual array elements. `awk_bool_t release_flattened_array(awk_array_t a_cookie,' ` awk_flat_array_t *data);' When done with a flattened array, release the storage using this - function. You must pass in both the original array cookie, and - the address of the created `awk_flat_array_t' structure. The - function returns true upon success, false otherwise. + function. You must pass in both the original array cookie and the + address of the created `awk_flat_array_t' structure. The function + returns true upon success, false otherwise.  File: gawk.info, Node: Flattening Arrays, Next: Creating Arrays, Prev: Array Functions, Up: Array Manipulation @@ -24255,8 +24257,8 @@ File: gawk.info, Node: Flattening Arrays, Next: Creating Arrays, Prev: Array To "flatten" an array is to create a structure that represents the full array in a fashion that makes it easy for C code to traverse the entire -array. Test code in `extension/testext.c' does this, and also serves -as a nice example showing how to use the APIs. +array. Some of the code in `extension/testext.c' does this, and also +serves as a nice example showing how to use the APIs. We walk through that part of the code one step at a time. First, the `gawk' script that drives the test extension: @@ -24305,9 +24307,8 @@ number of arguments: } The function then proceeds in steps, as follows. First, retrieve the -name of the array, passed as the first argument. Then retrieve the -array itself. If either operation fails, print error messages and -return: +name of the array, passed as the first argument, followed by the array +itself. If either operation fails, print an error message and return: /* get argument named array as flat array and print it */ if (get_argument(0, AWK_STRING, & value)) { @@ -24337,9 +24338,9 @@ count of elements in the array and print it: printf("dump_array_and_delete: incoming size is %lu\n", (unsigned long) count); - The third step is to actually flatten the array, and then to double -check that the count in the `awk_flat_array_t' is the same as the count -just retrieved: + The third step is to actually flatten the array, and then to +double-check that the count in the `awk_flat_array_t' is the same as +the count just retrieved: if (! flatten_array(value2.array_cookie, & flat_array)) { printf("dump_array_and_delete: could not flatten array\n"); @@ -24356,7 +24357,7 @@ just retrieved: The fourth step is to retrieve the index of the element to be deleted, which was passed as the second argument. Remember that -argument counts passed to `get_argument()' are zero-based, thus the +argument counts passed to `get_argument()' are zero-based, and thus the second argument is numbered one: if (! get_argument(1, AWK_STRING, & value3)) { @@ -24369,7 +24370,7 @@ over every element in the array, printing the index and element values. In addition, upon finding the element with the index that is supposed to be deleted, the function sets the `AWK_ELEMENT_DELETE' bit in the `flags' field of the element. When the array is released, `gawk' -traverses the flattened array, and deletes any elements which have this +traverses the flattened array, and deletes any elements that have this flag bit set: for (i = 0; i < flat_array->count; i++) { @@ -24587,10 +24588,10 @@ The API provides both a "major" and a "minor" version number. The API versions are available at compile time as constants: `GAWK_API_MAJOR_VERSION' - The major version of the API. + The major version of the API `GAWK_API_MINOR_VERSION' - The minor version of the API. + The minor version of the API The minor version increases when new functions are added to the API. Such new functions are always added to the end of the API `struct'. @@ -24605,13 +24606,13 @@ For this reason, the major and minor API versions of the running `gawk' are included in the API `struct' as read-only constant integers: `api->major_version' - The major version of the running `gawk'. + The major version of the running `gawk' `api->minor_version' - The minor version of the running `gawk'. + The minor version of the running `gawk' It is up to the extension to decide if there are API -incompatibilities. Typically a check like this is enough: +incompatibilities. Typically, a check like this is enough: if (api->major_version != GAWK_API_MAJOR_VERSION || api->minor_version < GAWK_API_MINOR_VERSION) { @@ -24623,7 +24624,7 @@ incompatibilities. Typically a check like this is enough: } Such code is included in the boilerplate `dl_load_func()' macro -provided in `gawkapi.h' (discussed later, in *note Extension API +provided in `gawkapi.h' (discussed in *note Extension API Boilerplate::).  @@ -24674,7 +24675,7 @@ functions) toward the top of your source file, using predefined names as described here. The boilerplate needed is also provided in comments in the `gawkapi.h' header file: - /* Boiler plate code: */ + /* Boilerplate code: */ int plugin_is_GPL_compatible; static gawk_api_t *const api; @@ -24724,7 +24725,7 @@ in the `gawkapi.h' header file: to point to a string giving the name and version of your extension. `static awk_ext_func_t func_table[] = { ... };' - This is an array of one or more `awk_ext_func_t' structures as + This is an array of one or more `awk_ext_func_t' structures, as described earlier (*note Extension Functions::). It can then be looped over for multiple calls to `add_ext_func()'. @@ -24837,7 +24838,7 @@ appropriate information: `stat()' fails. It fills in the following elements: `"name"' - The name of the file that was `stat()''ed. + The name of the file that was `stat()'ed. `"dev"' `"ino"' @@ -24885,7 +24886,7 @@ appropriate information: The file is a directory. `"fifo"' - The file is a named-pipe (also known as a FIFO). + The file is a named pipe (also known as a FIFO). `"file"' The file is just a regular file. @@ -24905,7 +24906,7 @@ appropriate information: systems, "a priori" knowledge is used to provide a value. Where no value can be determined, it defaults to 512. - Several additional elements may be present depending upon the + Several additional elements may be present, depending upon the operating system and the type of the file. You can test for them in your `awk' program by using the `in' operator (*note Reference to Elements::): @@ -24934,9 +24935,9 @@ File: gawk.info, Node: Internal File Ops, Next: Using Internal File Ops, Prev Here is the C code for these extensions.(1) The file includes a number of standard header files, and then -includes the `gawkapi.h' header file which provides the API definitions. -Those are followed by the necessary variable declarations to make use -of the API macros and boilerplate code (*note Extension API +includes the `gawkapi.h' header file, which provides the API +definitions. Those are followed by the necessary variable declarations +to make use of the API macros and boilerplate code (*note Extension API Boilerplate::): #ifdef HAVE_CONFIG_H @@ -24972,9 +24973,9 @@ Boilerplate::): By convention, for an `awk' function `foo()', the C function that implements it is called `do_foo()'. The function should have two -arguments: the first is an `int' usually called `nargs', that +arguments. The first is an `int', usually called `nargs', that represents the number of actual arguments for the function. The second -is a pointer to an `awk_value_t', usually named `result': +is a pointer to an `awk_value_t' structure, usually named `result': /* do_chdir --- provide dynamically loaded chdir() function for gawk */ @@ -25010,8 +25011,8 @@ is numbered zero. } The `stat()' extension is more involved. First comes a function -that turns a numeric mode into a printable representation (e.g., 644 -becomes `-rw-r--r--'). This is omitted here for brevity: +that turns a numeric mode into a printable representation (e.g., octal +`0644' becomes `-rw-r--r--'). This is omitted here for brevity: /* format_mode --- turn a stat mode field into something readable */ @@ -25061,8 +25062,8 @@ contain the result of the `stat()': The following function does most of the work to fill in the `awk_array_t' result array with values obtained from a valid `struct -stat'. It is done in a separate function to support the `stat()' -function for `gawk' and also to support the `fts()' extension which is +stat'. This work is done in a separate function to support the `stat()' +function for `gawk' and also to support the `fts()' extension, which is included in the same file but whose code is not shown here (*note Extension Sample File Functions::). @@ -25174,8 +25175,8 @@ argument is optional. If present, it causes `do_stat()' to use the `stat()' system call instead of the `lstat()' system call. This is done by using a function pointer: `statfunc'. `statfunc' is initialized to point to `lstat()' (instead of `stat()') to get the file -information, in case the file is a symbolic link. However, if there -were three arguments, `statfunc' is set point to `stat()', instead. +information, in case the file is a symbolic link. However, if the third +argument is included, `statfunc' is set to point to `stat()', instead. Here is the `do_stat()' function, which starts with variable declarations and argument checking: @@ -25224,7 +25225,7 @@ returns: /* always empty out the array */ clear_array(array); - /* stat the file, if error, set ERRNO and return */ + /* stat the file; if error, set ERRNO and return */ ret = statfunc(name, & sbuf); if (ret < 0) { update_ERRNO_int(errno); @@ -25243,7 +25244,8 @@ When done, the function returns the result from `fill_stat_array()': function(s) into `gawk'. The `filefuncs' extension also provides an `fts()' function, which -we omit here. For its sake there is an initialization function: +we omit here (*note Extension Sample File Functions::). For its sake, +there is an initialization function: /* init_filefuncs --- initialization routine */ @@ -25367,9 +25369,9 @@ File: gawk.info, Node: Extension Samples, Next: gawkextlib, Prev: Extension E 16.7 The Sample Extensions in the `gawk' Distribution ===================================================== -This minor node provides brief overviews of the sample extensions that +This minor node provides a brief overview of the sample extensions that come in the `gawk' distribution. Some of them are intended for -production use (e.g., the `filefuncs', `readdir' and `inplace' +production use (e.g., the `filefuncs', `readdir', and `inplace' extensions). Others mainly provide example code that shows how to use the extension API. @@ -25406,13 +25408,13 @@ follows. The usage is: `result = chdir("/some/directory")' The `chdir()' function is a direct hook to the `chdir()' system call to change the current directory. It returns zero upon - success or less than zero upon error. In the latter case, it - updates `ERRNO'. + success or a value less than zero upon error. In the latter case, + it updates `ERRNO'. `result = stat("/some/path", statdata' [`, follow']`)' The `stat()' function provides a hook into the `stat()' system - call. It returns zero upon success or less than zero upon error. - In the latter case, it updates `ERRNO'. + call. It returns zero upon success or a value less than zero upon + error. In the latter case, it updates `ERRNO'. By default, it uses the `lstat()' system call. However, if passed a third argument, it uses `stat()' instead. @@ -25439,23 +25441,23 @@ follows. The usage is: `"minor"' `st_minor' Device files `"blksize"'`st_blksize' All `"pmode"' A human-readable version of the All - mode value, such as printed by - `ls'. For example, - `"-rwxr-xr-x"' + mode value, like that printed by + `ls' (for example, + `"-rwxr-xr-x"') `"linkval"'The value of the symbolic link Symbolic links - `"type"' The type of the file as a string. All - One of `"file"', `"blockdev"', - `"chardev"', `"directory"', - `"socket"', `"fifo"', `"symlink"', - `"door"', or `"unknown"'. Not - all systems support all file - types. + `"type"' The type of the file as a All + string--one of `"file"', + `"blockdev"', `"chardev"', + `"directory"', `"socket"', + `"fifo"', `"symlink"', `"door"', + or `"unknown"' (not all systems + support all file types) `flags = or(FTS_PHYSICAL, ...)' `result = fts(pathlist, flags, filedata)' Walk the file trees provided in `pathlist' and fill in the - `filedata' array as described next. `flags' is the bitwise OR of + `filedata' array, as described next. `flags' is the bitwise OR of several predefined values, also described in a moment. Return zero if there were no errors, otherwise return -1. @@ -25508,10 +25510,11 @@ requested hierarchies. filesystem. `filedata' - The `filedata' array is first cleared. Then, `fts()' creates an - element in `filedata' for every element in `pathlist'. The index - is the name of the directory or file given in `pathlist'. The - element for this index is itself an array. There are two cases: + The `filedata' array holds the results. `fts()' first clears it. + Then it creates an element in `filedata' for every element in + `pathlist'. The index is the name of the directory or file given + in `pathlist'. The element for this index is itself an array. + There are two cases: _The path is a file_ In this case, the array contains two or three elements: @@ -25547,7 +25550,7 @@ requested hierarchies. elements as for a file: `"path"', `"stat"', and `"error"'. The `fts()' function returns zero if there were no errors. -Otherwise it returns -1. +Otherwise, it returns -1. NOTE: The `fts()' extension does not exactly mimic the interface of the C library `fts()' routines, choosing instead to provide an @@ -25586,14 +25589,14 @@ adds one constant (`FNM_NOMATCH'), and an array of flag values named The arguments to `fnmatch()' are: `pattern' - The file name wildcard to match. + The file name wildcard to match `string' - The file name string. + The file name string `flag' Either zero, or the bitwise OR of one or more of the flags in the - `FNM' array. + `FNM' array The flags are as follows: @@ -25627,13 +25630,13 @@ The `fork' extension adds three functions, as follows: `pid = fork()' This function creates a new process. The return value is zero in - the child and the process-ID number of the child in the parent, or + the child and the process ID number of the child in the parent, or -1 upon error. In the latter case, `ERRNO' indicates the problem. In the child, `PROCINFO["pid"]' and `PROCINFO["ppid"]' are updated to reflect the correct values. `ret = waitpid(pid)' - This function takes a numeric argument, which is the process-ID to + This function takes a numeric argument, which is the process ID to wait for. The return value is that of the `waitpid()' system call. `ret = wait()' @@ -25657,8 +25660,8 @@ File: gawk.info, Node: Extension Sample Inplace, Next: Extension Sample Ord, 16.7.4 Enabling In-Place File Editing ------------------------------------- -The `inplace' extension emulates GNU `sed''s `-i' option which performs -"in place" editing of each input file. It uses the bundled +The `inplace' extension emulates GNU `sed''s `-i' option, which +performs "in-place" editing of each input file. It uses the bundled `inplace.awk' include file to invoke the extension properly: # inplace --- load and invoke the inplace extension. @@ -25741,11 +25744,11 @@ returned as a record. The record consists of three fields. The first two are the inode number and the file name, separated by a forward slash character. On systems where the directory entry contains the file type, the record -has a third field (also separated by a slash) which is a single letter +has a third field (also separated by a slash), which is a single letter indicating the type of the file. The letters and their corresponding file types are shown in *note table-readdir-file-types::. -Letter File Type +Letter File type -------------------------------------------------------------------------- `b' Block device `c' Character device @@ -25792,7 +25795,7 @@ unwary. Here is an example: print "don't panic" > "/dev/stdout" } - The output from this program is: `cinap t'nod'. + The output from this program is `cinap t'nod'.  File: gawk.info, Node: Extension Sample Rev2way, Next: Extension Sample Read write array, Prev: Extension Sample Revout, Up: Extension Samples @@ -25840,7 +25843,7 @@ The `rwarray' extension adds two functions, named `writea()' and `reada()' is the inverse of `writea()'; it reads the file named as its first argument, filling in the array named as the second argument. It clears the array first. Here too, the return value - is one on success and zero upon failure. + is one on success, or zero upon failure. The array created by `reada()' is identical to that written by `writea()' in the sense that the contents are the same. However, due to @@ -25924,7 +25927,7 @@ The `time' extension adds two functions, named `gettimeofday()' and Attempt to sleep for SECONDS seconds. If SECONDS is negative, or the attempt to sleep fails, return -1 and set `ERRNO'. Otherwise, return zero after sleeping for the indicated amount of time. Note - that SECONDS may be a floating-point (non-integral) value. + that SECONDS may be a floating-point (nonintegral) value. Implementation details: depending on platform availability, this function tries to use `nanosleep()' or `select()' to implement the delay. @@ -25952,7 +25955,9 @@ provides a number of `gawk' extensions, including one for processing XML files. This is the evolution of the original `xgawk' (XML `gawk') project. - As of this writing, there are six extensions: + As of this writing, there are seven extensions: + + * `errno' extension * GD graphics library extension @@ -25961,7 +25966,7 @@ project. * PostgreSQL extension * MPFR library extension (this provides access to a number of MPFR - functions which `gawk''s native MPFR support does not) + functions that `gawk''s native MPFR support does not) * Redis extension @@ -26002,7 +26007,7 @@ follows. First, build and install `gawk': If you have installed `gawk' in the standard way, then you will likely not need the `--with-gawk' option when configuring `gawkextlib'. -You may also need to use the `sudo' utility to install both `gawk' and +You may need to use the `sudo' utility to install both `gawk' and `gawkextlib', depending upon how your system works. If you write an extension that you wish to share with other `gawk' @@ -26024,7 +26029,7 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga 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 + passes a `struct' to the extension that contains various data fields and function pointers. The extension can then call into `gawk' via the supplied function pointers to accomplish certain tasks. @@ -26035,7 +26040,7 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga 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 + * The API is defined in a header file named `gawkapi.h'. You must include a number of standard header files _before_ including it in your source file. @@ -26065,16 +26070,16 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga * 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 + 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. + * The API provides 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. @@ -26092,8 +26097,8 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga header file 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 + 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 is the place to do so. @@ -32657,7 +32662,7 @@ Index (line 99) * exp: Numeric Functions. (line 18) * expand utility: Very Simple. (line 73) -* Expat XML parser library: gawkextlib. (line 33) +* Expat XML parser library: gawkextlib. (line 35) * exponent: Numeric Functions. (line 18) * expressions: Expressions. (line 6) * expressions, as patterns: Expression Patterns. (line 6) @@ -33071,7 +33076,7 @@ Index * git utility <2>: Accessing The Source. (line 10) * git utility <3>: Other Versions. (line 29) -* git utility: gawkextlib. (line 27) +* git utility: gawkextlib. (line 29) * Git, use of for gawk source code: Derived Files. (line 6) * GNITS mailing list: Acknowledgments. (line 52) * GNU awk, See gawk: Preface. (line 51) @@ -34905,137 +34910,137 @@ Ref: figure-call-new-function919155 Node: Extension API Description921142 Node: Extension API Functions Introduction922592 Node: General Data Types927413 -Ref: General Data Types-Footnote-1933312 -Node: Memory Allocation Functions933611 -Ref: Memory Allocation Functions-Footnote-1936450 -Node: Constructor Functions936546 -Node: Registration Functions938280 -Node: Extension Functions938965 -Node: Exit Callback Functions941262 -Node: Extension Version String942510 -Node: Input Parsers943175 -Node: Output Wrappers953054 -Node: Two-way processors957569 -Node: Printing Messages959773 -Ref: Printing Messages-Footnote-1960849 -Node: Updating `ERRNO'961001 -Node: Requesting Values961741 -Ref: table-value-types-returned962469 -Node: Accessing Parameters963426 -Node: Symbol Table Access964657 -Node: Symbol table by name965171 -Node: Symbol table by cookie967152 -Ref: Symbol table by cookie-Footnote-1971296 -Node: Cached values971359 -Ref: Cached values-Footnote-1974858 -Node: Array Manipulation974949 -Ref: Array Manipulation-Footnote-1976047 -Node: Array Data Types976084 -Ref: Array Data Types-Footnote-1978739 -Node: Array Functions978831 -Node: Flattening Arrays982685 -Node: Creating Arrays989577 -Node: Extension API Variables994348 -Node: Extension Versioning994984 -Node: Extension API Informational Variables996885 -Node: Extension API Boilerplate997950 -Node: Finding Extensions1001759 -Node: Extension Example1002319 -Node: Internal File Description1003091 -Node: Internal File Ops1007158 -Ref: Internal File Ops-Footnote-11018828 -Node: Using Internal File Ops1018968 -Ref: Using Internal File Ops-Footnote-11021351 -Node: Extension Samples1021624 -Node: Extension Sample File Functions1023150 -Node: Extension Sample Fnmatch1030788 -Node: Extension Sample Fork1032279 -Node: Extension Sample Inplace1033494 -Node: Extension Sample Ord1035169 -Node: Extension Sample Readdir1036005 -Ref: table-readdir-file-types1036881 -Node: Extension Sample Revout1037692 -Node: Extension Sample Rev2way1038282 -Node: Extension Sample Read write array1039022 -Node: Extension Sample Readfile1040962 -Node: Extension Sample Time1042057 -Node: Extension Sample API Tests1043406 -Node: gawkextlib1043897 -Node: Extension summary1046555 -Node: Extension Exercises1050244 -Node: Language History1050966 -Node: V7/SVR3.11052622 -Node: SVR41054803 -Node: POSIX1056248 -Node: BTL1057637 -Node: POSIX/GNU1058371 -Node: Feature History1063935 -Node: Common Extensions1077033 -Node: Ranges and Locales1078357 -Ref: Ranges and Locales-Footnote-11082975 -Ref: Ranges and Locales-Footnote-21083002 -Ref: Ranges and Locales-Footnote-31083236 -Node: Contributors1083457 -Node: History summary1088998 -Node: Installation1090368 -Node: Gawk Distribution1091314 -Node: Getting1091798 -Node: Extracting1092621 -Node: Distribution contents1094256 -Node: Unix Installation1099973 -Node: Quick Installation1100590 -Node: Additional Configuration Options1103014 -Node: Configuration Philosophy1104752 -Node: Non-Unix Installation1107121 -Node: PC Installation1107579 -Node: PC Binary Installation1108898 -Node: PC Compiling1110746 -Ref: PC Compiling-Footnote-11113767 -Node: PC Testing1113876 -Node: PC Using1115052 -Node: Cygwin1119167 -Node: MSYS1119990 -Node: VMS Installation1120490 -Node: VMS Compilation1121282 -Ref: VMS Compilation-Footnote-11122504 -Node: VMS Dynamic Extensions1122562 -Node: VMS Installation Details1124246 -Node: VMS Running1126498 -Node: VMS GNV1129334 -Node: VMS Old Gawk1130068 -Node: Bugs1130538 -Node: Other Versions1134421 -Node: Installation summary1140845 -Node: Notes1141901 -Node: Compatibility Mode1142766 -Node: Additions1143548 -Node: Accessing The Source1144473 -Node: Adding Code1145908 -Node: New Ports1152065 -Node: Derived Files1156547 -Ref: Derived Files-Footnote-11162022 -Ref: Derived Files-Footnote-21162056 -Ref: Derived Files-Footnote-31162652 -Node: Future Extensions1162766 -Node: Implementation Limitations1163372 -Node: Extension Design1164620 -Node: Old Extension Problems1165774 -Ref: Old Extension Problems-Footnote-11167291 -Node: Extension New Mechanism Goals1167348 -Ref: Extension New Mechanism Goals-Footnote-11170708 -Node: Extension Other Design Decisions1170897 -Node: Extension Future Growth1173005 -Node: Old Extension Mechanism1173841 -Node: Notes summary1175603 -Node: Basic Concepts1176789 -Node: Basic High Level1177470 -Ref: figure-general-flow1177742 -Ref: figure-process-flow1178341 -Ref: Basic High Level-Footnote-11181570 -Node: Basic Data Typing1181755 -Node: Glossary1185083 -Node: Copying1217012 -Node: GNU Free Documentation License1254568 -Node: Index1279704 +Ref: General Data Types-Footnote-1933313 +Node: Memory Allocation Functions933612 +Ref: Memory Allocation Functions-Footnote-1936451 +Node: Constructor Functions936550 +Node: Registration Functions938285 +Node: Extension Functions938970 +Node: Exit Callback Functions941267 +Node: Extension Version String942515 +Node: Input Parsers943178 +Node: Output Wrappers953053 +Node: Two-way processors957566 +Node: Printing Messages959829 +Ref: Printing Messages-Footnote-1960905 +Node: Updating `ERRNO'961057 +Node: Requesting Values961797 +Ref: table-value-types-returned962524 +Node: Accessing Parameters963481 +Node: Symbol Table Access964715 +Node: Symbol table by name965229 +Node: Symbol table by cookie967249 +Ref: Symbol table by cookie-Footnote-1971394 +Node: Cached values971457 +Ref: Cached values-Footnote-1974953 +Node: Array Manipulation975044 +Ref: Array Manipulation-Footnote-1976142 +Node: Array Data Types976179 +Ref: Array Data Types-Footnote-1978834 +Node: Array Functions978926 +Node: Flattening Arrays982785 +Node: Creating Arrays989687 +Node: Extension API Variables994458 +Node: Extension Versioning995094 +Node: Extension API Informational Variables996985 +Node: Extension API Boilerplate998050 +Node: Finding Extensions1001859 +Node: Extension Example1002419 +Node: Internal File Description1003191 +Node: Internal File Ops1007258 +Ref: Internal File Ops-Footnote-11019009 +Node: Using Internal File Ops1019149 +Ref: Using Internal File Ops-Footnote-11021532 +Node: Extension Samples1021805 +Node: Extension Sample File Functions1023333 +Node: Extension Sample Fnmatch1031014 +Node: Extension Sample Fork1032502 +Node: Extension Sample Inplace1033717 +Node: Extension Sample Ord1035393 +Node: Extension Sample Readdir1036229 +Ref: table-readdir-file-types1037106 +Node: Extension Sample Revout1037917 +Node: Extension Sample Rev2way1038506 +Node: Extension Sample Read write array1039246 +Node: Extension Sample Readfile1041186 +Node: Extension Sample Time1042281 +Node: Extension Sample API Tests1043629 +Node: gawkextlib1044120 +Node: Extension summary1046798 +Node: Extension Exercises1050487 +Node: Language History1051209 +Node: V7/SVR3.11052865 +Node: SVR41055046 +Node: POSIX1056491 +Node: BTL1057880 +Node: POSIX/GNU1058614 +Node: Feature History1064178 +Node: Common Extensions1077276 +Node: Ranges and Locales1078600 +Ref: Ranges and Locales-Footnote-11083218 +Ref: Ranges and Locales-Footnote-21083245 +Ref: Ranges and Locales-Footnote-31083479 +Node: Contributors1083700 +Node: History summary1089241 +Node: Installation1090611 +Node: Gawk Distribution1091557 +Node: Getting1092041 +Node: Extracting1092864 +Node: Distribution contents1094499 +Node: Unix Installation1100216 +Node: Quick Installation1100833 +Node: Additional Configuration Options1103257 +Node: Configuration Philosophy1104995 +Node: Non-Unix Installation1107364 +Node: PC Installation1107822 +Node: PC Binary Installation1109141 +Node: PC Compiling1110989 +Ref: PC Compiling-Footnote-11114010 +Node: PC Testing1114119 +Node: PC Using1115295 +Node: Cygwin1119410 +Node: MSYS1120233 +Node: VMS Installation1120733 +Node: VMS Compilation1121525 +Ref: VMS Compilation-Footnote-11122747 +Node: VMS Dynamic Extensions1122805 +Node: VMS Installation Details1124489 +Node: VMS Running1126741 +Node: VMS GNV1129577 +Node: VMS Old Gawk1130311 +Node: Bugs1130781 +Node: Other Versions1134664 +Node: Installation summary1141088 +Node: Notes1142144 +Node: Compatibility Mode1143009 +Node: Additions1143791 +Node: Accessing The Source1144716 +Node: Adding Code1146151 +Node: New Ports1152308 +Node: Derived Files1156790 +Ref: Derived Files-Footnote-11162265 +Ref: Derived Files-Footnote-21162299 +Ref: Derived Files-Footnote-31162895 +Node: Future Extensions1163009 +Node: Implementation Limitations1163615 +Node: Extension Design1164863 +Node: Old Extension Problems1166017 +Ref: Old Extension Problems-Footnote-11167534 +Node: Extension New Mechanism Goals1167591 +Ref: Extension New Mechanism Goals-Footnote-11170951 +Node: Extension Other Design Decisions1171140 +Node: Extension Future Growth1173248 +Node: Old Extension Mechanism1174084 +Node: Notes summary1175846 +Node: Basic Concepts1177032 +Node: Basic High Level1177713 +Ref: figure-general-flow1177985 +Ref: figure-process-flow1178584 +Ref: Basic High Level-Footnote-11181813 +Node: Basic Data Typing1181998 +Node: Glossary1185326 +Node: Copying1217255 +Node: GNU Free Documentation License1254811 +Node: Index1279947  End Tag Table -- cgit v1.2.3