diff options
Diffstat (limited to 'doc/gawk.info')
-rw-r--r-- | doc/gawk.info | 2317 |
1 files changed, 1431 insertions, 886 deletions
diff --git a/doc/gawk.info b/doc/gawk.info index 3c269bad..b55ef0bb 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -88,6 +88,7 @@ in (a) below. A copy of the license is included in the section entitled * Internationalization:: Getting 'gawk' to speak your language. * Debugger:: The 'gawk' debugger. +* Namespaces:: How namespaces work in 'gawk'. * Arbitrary Precision Arithmetic:: Arbitrary precision arithmetic with 'gawk'. * Dynamic Extensions:: Adding new built-in functions to @@ -522,6 +523,15 @@ in (a) below. A copy of the license is included in the section entitled * Readline Support:: Readline support. * Limitations:: Limitations and future plans. * Debugging Summary:: Debugging summary. +* Global Namespace:: The global namespace in standard 'awk'. +* Qualified Names:: How to qualify names with a namespace. +* Default Namespace:: The default namespace. +* Changing The Namespace:: How to change the namespace. +* Naming Rules:: Namespace and Component Naming Rules. +* Internal Name Management:: How names are stored internally. +* Namespace Example:: An example of code using a namespace. +* Namespace And Features:: Namespaces and other 'gawk' features. +* Namespace Summary:: Summarizing namespaces. * Computer Arithmetic:: A quick intro to computer math. * Math Definitions:: Defining terms used. * MPFR features:: The MPFR features in 'gawk'. @@ -1098,6 +1108,10 @@ in *note Sample Programs::, should be of interest. - *note Debugger::, describes the 'gawk' debugger. + - *note Namespaces::, describes how 'gawk' allows variables + and/or functions of the same name to be in different + namespaces. + - *note Arbitrary Precision Arithmetic::, describes advanced arithmetic facilities. @@ -2481,6 +2495,10 @@ The following list describes options mandated by the POSIX standard: the 'awk' program consists of the concatenation of the contents of each specified SOURCE-FILE. + Files named with '-i' are treated as if they had '@namespace "awk"' + at their beginning. *Note Changing The Namespace::, for more + information. + '-v VAR=VAL' '--assign VAR=VAL' Set the variable VAR to the value VAL _before_ execution of the @@ -2577,15 +2595,19 @@ The following list describes options mandated by the POSIX standard: character (even if it doesn't). This makes building the total program easier. - CAUTION: At the moment, there is no requirement that each - PROGRAM-TEXT be a full syntactic unit. I.e., the following - currently works: + CAUTION: Prior to version 5.0, there was no requirement that + each PROGRAM-TEXT be a full syntactic unit. I.e., the + following worked: $ gawk -e 'BEGIN { a = 5 ;' -e 'print a }' -| 5 - However, this could change in the future, so it's not a good - idea to rely upon this feature. + However, this is no longer true. If you have any scripts that + rely upon this feature, you should revise them. + + This is because each PROGRAM-TEXT is treated as if it had + '@namespace "awk"' at its beginning. *Note Changing The + Namespace::, for more information. '-E' FILE '--exec' FILE @@ -2634,6 +2656,10 @@ The following list describes options mandated by the POSIX standard: processing an '-i' argument, 'gawk' still expects to find the main source code via the '-f' option or on the command line. + Files named with '-i' are treated as if they had '@namespace "awk"' + at their beginning. *Note Changing The Namespace::, for more + information. + '-l' EXT '--load' EXT Load a dynamic extension named EXT. Extensions are stored as @@ -3259,6 +3285,10 @@ from web pages. The rules for finding a source file described in *note AWKPATH Variable:: also apply to files loaded with '@include'. + Finally, files included with '@include' are treated as if they had +'@namespace "awk"' at their beginning. *Note Changing The Namespace::, +for more information. + File: gawk.info, Node: Loading Shared Libraries, Next: Obsolete, Prev: Include Files, Up: Invoking Gawk @@ -11045,6 +11075,27 @@ they are not special: after it has finished parsing the program; they are _not_ updated while the program runs. + 'PROCINFO["platform"]' + This element gives a string indicating the platform for which + 'gawk' was compiled. The value will be one of the following: + + '"vms"' + OpenVMS or Vax/VMS. + + '"djgpp"' + '"mingw"' + Microsoft Windows, using either DJGPP or MinGW, + respectively. + + '"os2"' + OS/2. + + '"os390"' + OS/390. + + '"posix"' + GNU/Linux, Cygwin, Mac OS X, and legacy Unix systems. + 'PROCINFO["pgrpid"]' The process group ID of the current process. @@ -11171,15 +11222,14 @@ they are not special: test if an element in 'SYMTAB' is an array. Also, you may not use the 'delete' statement with the 'SYMTAB' array. - You may use an index for 'SYMTAB' that is not a predefined - identifier: + Prior to version 5.0 of 'gawk', you could use an index for 'SYMTAB' + that was not a predefined identifier: SYMTAB["xxx"] = 5 print SYMTAB["xxx"] - This works as expected: in this case 'SYMTAB' acts just like a - regular array. The only difference is that you can't then delete - 'SYMTAB["xxx"]'. + This no longer works, instead producing a fatal error, as it led to + rampant confusion. The 'SYMTAB' array is more interesting than it looks. Andrew Schorr points out that it effectively gives 'awk' data pointers. @@ -15293,6 +15343,10 @@ and '_pw_count'. conventions. You are not required to write your programs this way--we merely recommend that you do so. + Beginning with version 5.0, 'gawk' provides a powerful mechanism for +solving the problems described in this section: "namespaces". +Namespaces and their use are described in detail in *note Namespaces::. + ---------- Footnotes ---------- (1) Although all the library routines could have been rewritten to @@ -18221,6 +18275,10 @@ line of input data: close(outputfile) } + As a side note, this program does not follow our recommended +convention of naming global variables with a leading capital letter. +Doing that would make the program a little easier to follow. + File: gawk.info, Node: Wc Program, Prev: Uniq Program, Up: Clones @@ -20776,7 +20834,8 @@ output. They are as follows: structure of the program and the precedence rules. For example, '(3 + 5) * 4' means add three and five, then multiply the total by four. However, '3 + 5 * 4' has no parentheses, and means '3 + (5 * - 4)'. + 4)'. However, explicit parentheses in the source program are + retained. * Parentheses are used around the arguments to 'print' and 'printf' only when the 'print' or 'printf' statement is followed by a @@ -20798,10 +20857,11 @@ representation. Also, things such as: come out as: /foo/ { - print $0 + print } -which is correct, but possibly unexpected. +which is correct, but possibly unexpected. (If a program uses both +'print $0' and plain 'print', that distinction is retained.) Besides creating profiles when a program has completed, 'gawk' can produce a profile while it is running. This is useful if your 'awk' @@ -20857,7 +20917,10 @@ without any execution counts. profiling, and that created when pretty-printing. Pretty-printed output preserves the original comments that were in the program, although their placement may not correspond exactly to their original locations in the -source code.(1) +source code. However, no comments should be lost. Also, 'gawk' does +the best it can to preserve the distinction between comments at the end +of a statement and comments on lines by themselves. This isn't always +perfect, though. However, as a deliberate design decision, profiling output _omits_ the original program's comments. This allows you to focus on the @@ -20877,14 +20940,6 @@ disable 'gawk''s default optimizations. numeric constants; if you used an octal or hexadecimal value in your source code, it will appear that way in the output. - ---------- Footnotes ---------- - - (1) 'gawk' does the best it can to preserve the distinction between -comments at the end of a statement and comments on lines by themselves. -Due to implementation constraints, it does not always do so correctly, -particularly for 'switch' statements. The 'gawk' maintainers hope to -improve this in a subsequent release. - File: gawk.info, Node: Advanced Features Summary, Prev: Profiling, Up: Advanced Features @@ -21595,7 +21650,7 @@ File: gawk.info, Node: I18N Summary, Prev: Gawk I18N, Up: Internationalizatio translations for its messages. -File: gawk.info, Node: Debugger, Next: Arbitrary Precision Arithmetic, Prev: Internationalization, Up: Top +File: gawk.info, Node: Debugger, Next: Namespaces, Prev: Internationalization, Up: Top 14 Debugging 'awk' Programs *************************** @@ -22672,9 +22727,389 @@ File: gawk.info, Node: Debugging Summary, Prev: Limitations, Up: Debugger debugged, but occasionally it can. -File: gawk.info, Node: Arbitrary Precision Arithmetic, Next: Dynamic Extensions, Prev: Debugger, Up: Top +File: gawk.info, Node: Namespaces, Next: Arbitrary Precision Arithmetic, Prev: Debugger, Up: Top + +15 Namespaces in 'gawk' +*********************** + +This major node describes a feature that is specific to 'gawk'. + +* Menu: + +* Global Namespace:: The global namespace in standard 'awk'. +* Qualified Names:: How to qualify names with a namespace. +* Default Namespace:: The default namespace. +* Changing The Namespace:: How to change the namespace. +* Naming Rules:: Namespace and Component Naming Rules. +* Internal Name Management:: How names are stored internally. +* Namespace Example:: An example of code using a namespace. +* Namespace And Features:: Namespaces and other 'gawk' features. +* Namespace Summary:: Summarizing namespaces. + + +File: gawk.info, Node: Global Namespace, Next: Qualified Names, Up: Namespaces + +15.1 Standard 'awk''s Single Namespace +====================================== + +In standard 'awk', there is a single, global, "namespace". This means +that _all_ function names and global variable names must be unique. For +example, two different 'awk' source files cannot both define a function +named 'min()', or define the same identifier, used as a scalar in one +and as an array in the other. + + This situation is okay when programs are small, say a few hundred +lines, or even a few thousand, but it prevents the development of +reusable libraries of 'awk' functions, and can inadvertently cause +independently-developed library files to accidentally step on each +other's "private" global variables (*note Library Names::). + + Most other programming languages solve this issue by providing some +kind of namespace control: a way to say "this function is in namespace +XXX, and that function is in namespace YYY." (Of course, there is then +still a single namespace for the namespaces, but the hope is that there +are much fewer namespaces in use by any given program, and thus much +less chance for collisions.) These facilities are sometimes referred to +as "packages" or "modules". + + Starting with version 5.0, 'gawk' provides a simple mechanism to put +functions and global variables into separate namespaces. + + +File: gawk.info, Node: Qualified Names, Next: Default Namespace, Prev: Global Namespace, Up: Namespaces + +15.2 Qualified Names +==================== + +A "qualified name" is an identifier that includes a namespace name, the +namespace separator '::', and a "component" name. For example, one +might have a function named 'posix::getpid()'. Here, the namespace is +'posix' and the function name within the namespace (the component) is +'getpid()'. The namespace and component names are separated by a +double-colon. Only one such separator is allowed in a qualified name. + + NOTE: Unlike C++, the '::' is _not_ an operator. No spaces are + allowed between the namespace name, the '::', and the component + name. + + You must use qualified names from one namespace to access variables +and functions in another. This is especially important when using +variable names to index the special 'SYMTAB' array (*note Auto-set::), +and when making indirect function calls (*note Indirect Calls::). + + +File: gawk.info, Node: Default Namespace, Next: Changing The Namespace, Prev: Qualified Names, Up: Namespaces + +15.3 The Default Namespace +========================== + +The default namespace, not surprisingly, is 'awk'. All of the +predefined 'awk' and 'gawk' variables are in this namespace, and thus +have qualified names like 'awk::ARGC', 'awk::NF', and so on. + + Furthermore, even when you have changed the namespace for your +current source file (*note Changing The Namespace::), 'gawk' forces +unqualified identifiers whose names are all uppercase letters to be in +the 'awk' namespace. This makes it possible for you to easily reference +'gawk''s global variables from different namespaces. It also keeps your +code looking natural. + + +File: gawk.info, Node: Changing The Namespace, Next: Naming Rules, Prev: Default Namespace, Up: Namespaces + +15.4 Changing The Namespace +=========================== + +In order to set the current namespace, use an '@namespace' directive at +the top level of your program: + + @namespace "passwd" + + BEGIN { ... } + ... + + After this directive, all simple non-completely-uppercase identifiers +are placed into the 'passwd' namespace. + + You can change the namespace multiple times within a single source +file, although this is likely to become confusing if you do it too much. + + NOTE: Association of unqualified identifiers to a namespace is + handled while 'gawk' parses your program, _before_ it starts to + run. There is no concept of a "current" namespace once your + program starts executing. Be sure you understand this. + + Each source file for '-i' and '-f' starts out with an implicit +'@namespace "awk"'. Similarly, each chunk of command-line code supplied +with '-e' has such an implicit initial statement (*note Options::). + + Files included with '@include' (*note Include Files::) "push" and +"pop" the current namespace. That is, each '@include' saves the current +namespace and starts over with an implicit '@namespace "awk"' which +remains in effect until an explicit '@namespace' directive is seen. +When 'gawk' finishes processing the included file, the saved namespace +is restored and processing continues where it left off in the original +file. + + The use of '@namespace' has no influence upon the order of execution +of 'BEGIN', 'BEGINFILE', 'END', and 'ENDFILE' rules. + + +File: gawk.info, Node: Naming Rules, Next: Internal Name Management, Prev: Changing The Namespace, Up: Namespaces + +15.5 Namespace and Component Naming Rules +========================================= + +A number of rules apply to the namespace and component names, as +follows. + + * It is a syntax error to use qualified names for function parameter + names. + + * It is a syntax error to use any standard 'awk' reserved word (such + as 'if' or 'for'), or the name of any standard built-in function + (such as 'sin()' or 'gsub()') as either part of a qualified name. + Thus, the following produces a syntax error: + + @namespace "example" + + function gsub(str, pat, result) { ... } + + * Outside the 'awk' namespace, the names of the additional 'gawk' + built-in functions (such as 'gensub()' or 'strftime()') _may_ be + used as component names. The same set of names may be used as + namespace names, although this has the potential to be confusing. + + * The additional 'gawk' built-in functions may still be called from + outside the 'awk' namespace by qualifying them. For example, + 'awk::systime()'. Here is a somewhat silly example demonstrating + this rule and the previous one: + + BEGIN { + print "in awk namespace, systime() =", systime() + } + + @namespace "testing" + + function systime() + { + print "in testing namespace, systime() =", awk::systime() + } + + BEGIN { + systime() + } + + + When run, it produces output like this: + + $ gawk -f systime.awk + -| in awk namespace, systime() = 1500488503 + -| in testing namespace, systime() = 1500488503 + + * 'gawk' pre-defined variable names may be used: 'NF::NR' is valid, + if possibly not all that useful. + + +File: gawk.info, Node: Internal Name Management, Next: Namespace Example, Prev: Naming Rules, Up: Namespaces + +15.6 Internal Name Management +============================= + +For backwards compatibility, all identifiers in the 'awk' namespace are +stored internally as unadorned identifiers (that is, without a leading +'awk::'). This is mainly relevant when using such identifiers as +indices for 'SYMTAB', 'FUNCTAB', and 'PROCINFO["identifiers"]' (*note +Auto-set::), and for use in indirect function calls (*note Indirect +Calls::). + + In program code, to refer to variables and functions in the 'awk' +namespace from another namespace, you must still use the 'awk::' prefix. +For example: + + @namespace "awk" This is the default namespace + + BEGIN { + Title = "My Report" Qualified name is awk::Title + } + + @namespace "report" Now in report namespace + + function compute() This is really report::compute() + { + print awk::Title But would be SYMTAB["Title"] + ... + } + + +File: gawk.info, Node: Namespace Example, Next: Namespace And Features, Prev: Internal Name Management, Up: Namespaces + +15.7 Namespace Example +====================== + +The following example is a revised version of the suite of routines +developed in *note Passwd Functions::. See there for an explanation of +how the code works. + + The formulation here, due mainly to Andrew Schorr, is rather elegant. +All of the implementation functions and variables are in the 'passwd' +namespace, whereas the main interface functions are defined in the 'awk' +namespace. + + # ns_passwd.awk --- access password file information -15 Arithmetic and Arbitrary-Precision Arithmetic with 'gawk' + @namespace "passwd" + + BEGIN { + # tailor this to suit your system + Awklib = "/usr/local/libexec/awk/" + } + + function Init( oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat) + { + if (Inited) + return + + oldfs = FS + oldrs = RS + olddol0 = $0 + using_fw = (PROCINFO["FS"] == "FIELDWIDTHS") + using_fpat = (PROCINFO["FS"] == "FPAT") + FS = ":" + RS = "\n" + + pwcat = Awklib "pwcat" + while ((pwcat | getline) > 0) { + Byname[$1] = $0 + Byuid[$3] = $0 + Bycount[++Total] = $0 + } + close(pwcat) + Count = 0 + Inited = 1 + FS = oldfs + if (using_fw) + FIELDWIDTHS = FIELDWIDTHS + else if (using_fpat) + FPAT = FPAT + RS = oldrs + $0 = olddol0 + } + + function awk::getpwnam(name) + { + Init() + return Byname[name] + } + + function awk::getpwuid(uid) + { + Init() + return Byuid[uid] + } + + function awk::getpwent() + { + Init() + if (Count < Total) + return Bycount[++Count] + return "" + } + + function awk::endpwent() + { + Count = 0 + } + + As you can see, this version also follows the convention mentioned in +*note Library Names::, whereby global variable and function names start +with a capital letter. + + Here is a simple test program. Since it's in a separate file, +unadorned identifiers are sought for in the 'awk' namespace: + + BEGIN { + while ((p = getpwent()) != "") + print p + } + + + Here's what happens when it's run: + + $ gawk -f ns_passwd.awk -f testpasswd.awk + -| root:x:0:0:root:/root:/bin/bash + -| daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin + -| bin:x:2:2:bin:/bin:/usr/sbin/nologin + -| sys:x:3:3:sys:/dev:/usr/sbin/nologin + ... + + +File: gawk.info, Node: Namespace And Features, Next: Namespace Summary, Prev: Namespace Example, Up: Namespaces + +15.8 Namespaces and Other 'gawk' Features +========================================= + +This minor node looks briefly at how the namespace facility interacts +with other important 'gawk' features. + + The profiler and pretty-printer (*note Profiling::) have been +enhanced to understand namespaces and the namespace naming rules +presented in *note Naming Rules::. In particular, the output groups +functions in the same namespace together, and has '@namespace' +directives in front of rules as necessary. This allows component names +to be simple identifiers, instead of using qualified identifiers +everywhere. + + Interaction with the debugger (*note Debugging::) has not had to +change (at least as of this writing). Some of the internal byte codes +changed in order to accommodate namespaces, and the debugger's 'dump' +command was adjusted to match. + + The extension API (*note Dynamic Extensions::) has always allowed for +placing functions into a different namespace, although this was not +previously implemented. However, the symbol lookup and symbol update +routines did not have provision for including a namespace. That has now +been corrected (*note Symbol table by name::). *Note Extension Sample +Inplace::, for a nice example of an extension that leverages a namespace +shared by cooperating 'awk' and C code. + + +File: gawk.info, Node: Namespace Summary, Prev: Namespace And Features, Up: Namespaces + +15.9 Summary +============ + + * Standard 'awk' provides a single namespace for all global + identifiers (scalars, arrays, and functions). This is limiting + when one wants to develop libraries of reusable functions or + function suites. + + * 'gawk' provides multiple namespaces by using qualified names: names + consisting of a namespace name, a double colon, '::', and a + component name. Namespace names might still possibly conflict, but + this is true of any language providing namespaces, modules, or + packages. + + * The default namespace is 'awk'. The rules for namespace and + component names are provided in *note Naming Rules::. The rules + are designed in such a way as to make namespace-aware code continue + to look and work naturally while still providing the necessary + power and flexibility. + + * Other parts of 'gawk' have been extended as necessary to integrate + namespaces smoothly with their operation. This applies most + notably to the profiler / pretty-printer (*note Profiling::) and to + the extension facility (*note Dynamic Extensions::). + + * Overall, the namespace facility was designed and implemented such + that backwards compatibility is paramount. Programs that don't use + namespaces should see absolutely no difference in behavior when run + by a namespace-capable version of 'gawk'. + + +File: gawk.info, Node: Arbitrary Precision Arithmetic, Next: Dynamic Extensions, Prev: Namespaces, Up: Top + +16 Arithmetic and Arbitrary-Precision Arithmetic with 'gawk' ************************************************************ This major node introduces some basic concepts relating to how computers @@ -22705,7 +23140,7 @@ are not quite in agreement. File: gawk.info, Node: Computer Arithmetic, Next: Math Definitions, Up: Arbitrary Precision Arithmetic -15.1 A General Description of Computer Arithmetic +16.1 A General Description of Computer Arithmetic ================================================= Until now, we have worked with data as either numbers or strings. @@ -22776,7 +23211,7 @@ double-precision floating-point values occupy 64 bits. (Quadruple-precision floating point values also exist. They occupy 128 bits, but such numbers are not available in 'awk'.) Floating-point values are always signed. The possible ranges of values are shown in -*note Table 15.1: table-numeric-ranges. and *note Table 15.2: +*note Table 16.1: table-numeric-ranges. and *note Table 16.2: table-floating-point-ranges. Representation Minimum value Maximum value @@ -22788,7 +23223,7 @@ integer 64-bit unsigned 0 18,446,744,073,709,551,615 integer -Table 15.1: Value ranges for integer representations +Table 16.1: Value ranges for integer representations Representation Minimum Minimum finite Maximum finite positive value value @@ -22801,7 +23236,7 @@ floating-point Quadruple-precision 3.362103e-4932 -1.189731e+4932 1.189731e+4932 floating-point -Table 15.2: Approximate value ranges for floating-point number +Table 16.2: Approximate value ranges for floating-point number representations ---------- Footnotes ---------- @@ -22811,7 +23246,7 @@ representations File: gawk.info, Node: Math Definitions, Next: MPFR features, Prev: Computer Arithmetic, Up: Arbitrary Precision Arithmetic -15.2 Other Stuff to Know +16.2 Other Stuff to Know ======================== The rest of this major node uses a number of terms. Here are some @@ -22891,7 +23326,7 @@ IEEE 754 types are 32-bit single precision, 64-bit double precision, and precision formats to allow greater precisions and larger exponent ranges. ('awk' uses only the 64-bit double-precision format.) - *note Table 15.3: table-ieee-formats. lists the precision and + *note Table 16.3: table-ieee-formats. lists the precision and exponent field values for the basic IEEE 754 binary formats. Name Total bits Precision Minimum Maximum @@ -22901,7 +23336,7 @@ Single 32 24 -126 +127 Double 64 53 -1022 +1023 Quadruple 128 113 -16382 +16383 -Table 15.3: Basic IEEE format values +Table 16.3: Basic IEEE format values NOTE: The precision numbers include the implied leading one that gives them one extra bit of significand. @@ -22914,7 +23349,7 @@ paraphrased, and for the examples. File: gawk.info, Node: MPFR features, Next: FP Math Caution, Prev: Math Definitions, Up: Arbitrary Precision Arithmetic -15.3 Arbitrary-Precision Arithmetic Features in 'gawk' +16.3 Arbitrary-Precision Arithmetic Features in 'gawk' ====================================================== By default, 'gawk' uses the double-precision floating-point values @@ -22952,7 +23387,7 @@ information. File: gawk.info, Node: FP Math Caution, Next: Arbitrary Precision Integers, Prev: MPFR features, Up: Arbitrary Precision Arithmetic -15.4 Floating-Point Arithmetic: Caveat Emptor! +16.4 Floating-Point Arithmetic: Caveat Emptor! ============================================== Math class is tough! @@ -22986,7 +23421,7 @@ in computer science. File: gawk.info, Node: Inexactness of computations, Next: Getting Accuracy, Up: FP Math Caution -15.4.1 Floating-Point Arithmetic Is Not Exact +16.4.1 Floating-Point Arithmetic Is Not Exact --------------------------------------------- Binary floating-point representations and arithmetic are inexact. @@ -23007,7 +23442,7 @@ be sure of the number of significant decimal places in the final result. File: gawk.info, Node: Inexact representation, Next: Comparing FP Values, Up: Inexactness of computations -15.4.1.1 Many Numbers Cannot Be Represented Exactly +16.4.1.1 Many Numbers Cannot Be Represented Exactly ................................................... So, before you start to write any code, you should think about what you @@ -23038,7 +23473,7 @@ previous example, produces an output identical to the input. File: gawk.info, Node: Comparing FP Values, Next: Errors accumulate, Prev: Inexact representation, Up: Inexactness of computations -15.4.1.2 Be Careful Comparing Values +16.4.1.2 Be Careful Comparing Values .................................... Because the underlying representation can be a little bit off from the @@ -23069,7 +23504,7 @@ in case someone passes in a negative delta value. File: gawk.info, Node: Errors accumulate, Prev: Comparing FP Values, Up: Inexactness of computations -15.4.1.3 Errors Accumulate +16.4.1.3 Errors Accumulate .......................... The loss of accuracy during a single computation with floating-point @@ -23117,7 +23552,7 @@ representations yield an unexpected result: File: gawk.info, Node: Getting Accuracy, Next: Try To Round, Prev: Inexactness of computations, Up: FP Math Caution -15.4.2 Getting the Accuracy You Need +16.4.2 Getting the Accuracy You Need ------------------------------------ Can arbitrary-precision arithmetic give exact results? There are no @@ -23178,7 +23613,7 @@ hand is often the correct approach in such situations. File: gawk.info, Node: Try To Round, Next: Setting precision, Prev: Getting Accuracy, Up: FP Math Caution -15.4.3 Try a Few Extra Bits of Precision and Rounding +16.4.3 Try a Few Extra Bits of Precision and Rounding ----------------------------------------------------- Instead of arbitrary-precision floating-point arithmetic, often all you @@ -23205,7 +23640,7 @@ iterations: File: gawk.info, Node: Setting precision, Next: Setting the rounding mode, Prev: Try To Round, Up: FP Math Caution -15.4.4 Setting the Precision +16.4.4 Setting the Precision ---------------------------- 'gawk' uses a global working precision; it does not keep track of the @@ -23214,7 +23649,7 @@ operation or calling a built-in function rounds the result to the current working precision. The default working precision is 53 bits, which you can modify using the predefined variable 'PREC'. You can also set the value to one of the predefined case-insensitive strings shown in -*note Table 15.4: table-predefined-precision-strings, to emulate an IEEE +*note Table 16.4: table-predefined-precision-strings, to emulate an IEEE 754 binary format. 'PREC' IEEE 754 binary format @@ -23225,7 +23660,7 @@ set the value to one of the predefined case-insensitive strings shown in '"quad"' Basic 128-bit quadruple precision '"oct"' 256-bit octuple precision -Table 15.4: Predefined precision strings for 'PREC' +Table 16.4: Predefined precision strings for 'PREC' The following example illustrates the effects of changing precision on arithmetic operations: @@ -23262,12 +23697,12 @@ on arithmetic operations: File: gawk.info, Node: Setting the rounding mode, Prev: Setting precision, Up: FP Math Caution -15.4.5 Setting the Rounding Mode +16.4.5 Setting the Rounding Mode -------------------------------- 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 15.5: table-gawk-rounding-modes. +rounding modes is shown in *note Table 16.5: table-gawk-rounding-modes. Rounding mode IEEE name 'ROUNDMODE' --------------------------------------------------------------------------- @@ -23277,10 +23712,10 @@ Round toward negative infinity 'roundTowardNegative' '"D"' or '"d"' Round toward zero 'roundTowardZero' '"Z"' or '"z"' Round away from zero '"A"' or '"a"' -Table 15.5: 'gawk' rounding modes +Table 16.5: 'gawk' rounding modes 'ROUNDMODE' has the default value '"N"', which selects the IEEE 754 -rounding mode 'roundTiesToEven'. In *note Table 15.5: +rounding mode 'roundTiesToEven'. In *note Table 16.5: table-gawk-rounding-modes, the value '"A"' selects rounding away from zero. This is only available if your version of the MPFR library supports it; otherwise, setting 'ROUNDMODE' to '"A"' has no effect. @@ -23372,7 +23807,7 @@ round halfway cases for 'printf'. File: gawk.info, Node: Arbitrary Precision Integers, Next: Checking for MPFR, Prev: FP Math Caution, Up: Arbitrary Precision Arithmetic -15.5 Arbitrary-Precision Integer Arithmetic with 'gawk' +16.5 Arbitrary-Precision Integer Arithmetic with 'gawk' ======================================================= When given the '-M' option, 'gawk' performs all integer arithmetic using @@ -23450,7 +23885,7 @@ Wolfram Web Resource File: gawk.info, Node: Checking for MPFR, Next: POSIX Floating Point Problems, Prev: Arbitrary Precision Integers, Up: Arbitrary Precision Arithmetic -15.6 How To Check If MPFR Is Available +16.6 How To Check If MPFR Is Available ====================================== Occasionally, you might like to be able to check if 'gawk' was invoked @@ -23491,7 +23926,7 @@ arbitrary-precision arithmetic is available: File: gawk.info, Node: POSIX Floating Point Problems, Next: Floating point summary, Prev: Checking for MPFR, Up: Arbitrary Precision Arithmetic -15.7 Standards Versus Existing Practice +16.7 Standards Versus Existing Practice ======================================= Historically, 'awk' has converted any nonnumeric-looking string to the @@ -23585,7 +24020,7 @@ described: '+inf', '-inf', '+nan', or '-nan'. Similarly, in POSIX mode, File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Problems, Up: Arbitrary Precision Arithmetic -15.8 Summary +16.8 Summary ============ * Most computer arithmetic is done using either integers or @@ -23638,7 +24073,7 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob File: gawk.info, Node: Dynamic Extensions, Next: Language History, Prev: Arbitrary Precision Arithmetic, Up: Top -16 Writing Extensions for 'gawk' +17 Writing Extensions for 'gawk' ******************************** It is possible to add new functions written in C or C++ to 'gawk' using @@ -23672,7 +24107,7 @@ sample extensions are automatically built and installed when 'gawk' is. File: gawk.info, Node: Extension Intro, Next: Plugin License, Up: Dynamic Extensions -16.1 Introduction +17.1 Introduction ================= An "extension" (sometimes called a "plug-in") is a piece of external @@ -23699,7 +24134,7 @@ and design. File: gawk.info, Node: Plugin License, Next: Extension Mechanism Outline, Prev: Extension Intro, Up: Dynamic Extensions -16.2 Extension Licensing +17.2 Extension Licensing ======================== Every dynamic extension must be distributed under a license that is @@ -23719,12 +24154,12 @@ symbol exists in the global scope. Something like this is enough: File: gawk.info, Node: Extension Mechanism Outline, Next: Extension API Description, Prev: Plugin License, Up: Dynamic Extensions -16.3 How It Works at a High Level +17.3 How It Works at a High Level ================================= Communication between 'gawk' and an extension is two-way. First, when an extension is loaded, 'gawk' passes it a pointer to a 'struct' whose -fields are function pointers. This is shown in *note Figure 16.1: +fields are function pointers. This is shown in *note Figure 17.1: figure-load-extension. @@ -23752,12 +24187,12 @@ figure-load-extension. gawk Main Program Address Space Extension" -Figure 16.1: Loading the extension +Figure 17.1: Loading the extension The extension can call functions inside 'gawk' through these function pointers, at runtime, without needing (link-time) access to 'gawk''s symbols. One of these function pointers is to a function for -"registering" new functions. This is shown in *note Figure 16.2: +"registering" new functions. This is shown in *note Figure 17.2: figure-register-new-function. @@ -23773,13 +24208,13 @@ figure-register-new-function. gawk Main Program Address Space Extension" -Figure 16.2: Registering a new function +Figure 17.2: Registering a new function In the other direction, the extension registers its new functions with 'gawk' by passing function pointers to the functions that provide the new feature ('do_chdir()', for example). 'gawk' associates the function pointer with a name and can then call it, using a defined -calling convention. This is shown in *note Figure 16.3: +calling convention. This is shown in *note Figure 17.3: figure-call-new-function. @@ -23796,7 +24231,7 @@ figure-call-new-function. gawk Main Program Address Space Extension" -Figure 16.3: Calling the new function +Figure 17.3: Calling the new function The 'do_XXX()' function, in turn, then uses the function pointers in the API 'struct' to do its work, such as updating variables or arrays, @@ -23828,7 +24263,7 @@ Example::) and also in the 'testext.c' code for testing the APIs. File: gawk.info, Node: Extension API Description, Next: Finding Extensions, Prev: Extension Mechanism Outline, Up: Dynamic Extensions -16.4 API Description +17.4 API Description ==================== C or C++ code for an extension must include the header file 'gawkapi.h', @@ -23860,7 +24295,7 @@ API in detail. File: gawk.info, Node: Extension API Functions Introduction, Next: General Data Types, Up: Extension API Description -16.4.1 Introduction +17.4.1 Introduction ------------------- Access to facilities within 'gawk' is achieved by calling through @@ -23915,7 +24350,9 @@ operations: * The following types, macros, and/or functions are referenced in 'gawkapi.h'. For correct use, you must therefore include the - corresponding standard header file _before_ including 'gawkapi.h': + corresponding standard header file _before_ including 'gawkapi.h'. + The list of macros and related header files is shown in *note Table + 17.1: table-api-std-headers. C entity Header file ------------------------------------------- @@ -23928,6 +24365,8 @@ operations: 'size_t' '<sys/types.h>' 'struct stat' '<sys/stat.h>' + Table 17.1: Standard header files needed by API + Due to portability concerns, especially to systems that are not fully standards-compliant, it is your responsibility to include the correct files in the correct way. This requirement is necessary in @@ -23994,7 +24433,7 @@ macros as if they were functions. File: gawk.info, Node: General Data Types, Next: Memory Allocation Functions, Prev: Extension API Functions Introduction, Up: Extension API Description -16.4.2 General-Purpose Data Types +17.4.2 General-Purpose Data Types --------------------------------- I have a true love/hate relationship with unions. @@ -24194,7 +24633,7 @@ See also the entry for "Cookie" in the *note Glossary::. File: gawk.info, Node: Memory Allocation Functions, Next: Constructor Functions, Prev: General Data Types, Up: Extension API Description -16.4.3 Memory Allocation Functions and Convenience Macros +17.4.3 Memory Allocation Functions and Convenience Macros --------------------------------------------------------- The API provides a number of "memory allocation" functions for @@ -24301,7 +24740,7 @@ Unix-like systems as well. File: gawk.info, Node: Constructor Functions, Next: Registration Functions, Prev: Memory Allocation Functions, Up: Extension API Description -16.4.4 Constructor Functions +17.4.4 Constructor Functions ---------------------------- The API provides a number of "constructor" functions for creating string @@ -24376,7 +24815,7 @@ code would use them: File: gawk.info, Node: Registration Functions, Next: Printing Messages, Prev: Constructor Functions, Up: Extension API Description -16.4.5 Registration Functions +17.4.5 Registration Functions ----------------------------- This minor node describes the API functions for registering parts of @@ -24394,7 +24833,7 @@ your extension with 'gawk'. File: gawk.info, Node: Extension Functions, Next: Exit Callback Functions, Up: Registration Functions -16.4.5.1 Registering An Extension Function +17.4.5.1 Registering An Extension Function .......................................... Extension functions are described by the following record: @@ -24473,9 +24912,11 @@ register it with 'gawk' using this API function: 'awk_bool_t add_ext_func(const char *name_space, awk_ext_func_t *func);' This function returns true upon success, false otherwise. The - 'name_space' parameter is currently not used; you should pass in an - empty string ('""'). The 'func' pointer is the address of a - 'struct' representing your function, as just described. + 'name_space' parameter is the namespace in which to place the + function (*note Namespaces::). Use an empty string ('""') or + '"awk"' to place the function in the default 'awk' namespace. The + 'func' pointer is the address of a 'struct' representing your + function, as just described. 'gawk' does not modify what 'func' points to, but the extension function itself receives this pointer and can modify what it points @@ -24507,7 +24948,7 @@ A minimum number of arguments is required, and no more than a maximum is allowed File: gawk.info, Node: Exit Callback Functions, Next: Extension Version String, Prev: Extension Functions, Up: Registration Functions -16.4.5.2 Registering An Exit Callback Function +17.4.5.2 Registering An Exit Callback Function .............................................. An "exit callback" function is a function that 'gawk' calls before it @@ -24537,7 +24978,7 @@ order--that is, in the reverse order in which they are registered with File: gawk.info, Node: Extension Version String, Next: Input Parsers, Prev: Exit Callback Functions, Up: Registration Functions -16.4.5.3 Registering An Extension Version String +17.4.5.3 Registering An Extension Version String ................................................ You can register a version string that indicates the name and version of @@ -24554,7 +24995,7 @@ invoked with the '--version' option. File: gawk.info, Node: Input Parsers, Next: Output Wrappers, Prev: Extension Version String, Up: Registration Functions -16.4.5.4 Customized Input Parsers +17.4.5.4 Customized Input Parsers ................................. By default, 'gawk' reads text files as its input. It uses the value of @@ -24832,7 +25273,7 @@ example. File: gawk.info, Node: Output Wrappers, Next: Two-way processors, Prev: Input Parsers, Up: Registration Functions -16.4.5.5 Customized Output Wrappers +17.4.5.5 Customized Output Wrappers ................................... An "output wrapper" is the mirror image of an input parser. It allows @@ -24938,7 +25379,7 @@ just use normally. File: gawk.info, Node: Two-way processors, Prev: Output Wrappers, Up: Registration Functions -16.4.5.6 Customized Two-way Processors +17.4.5.6 Customized Two-way Processors ...................................... A "two-way processor" combines an input parser and an output wrapper for @@ -24992,7 +25433,7 @@ and 'XXX_take_control_of()'. File: gawk.info, Node: Printing Messages, Next: Updating ERRNO, Prev: Registration Functions, Up: Extension API Description -16.4.6 Printing Messages +17.4.6 Printing Messages ------------------------ You can print different kinds of warning messages from your extension, @@ -25026,7 +25467,7 @@ the pity. File: gawk.info, Node: Updating ERRNO, Next: Requesting Values, Prev: Printing Messages, Up: Extension API Description -16.4.7 Updating 'ERRNO' +17.4.7 Updating 'ERRNO' ----------------------- The following functions allow you to update the 'ERRNO' variable: @@ -25047,7 +25488,7 @@ The following functions allow you to update the 'ERRNO' variable: File: gawk.info, Node: Requesting Values, Next: Accessing Parameters, Prev: Updating ERRNO, Up: Extension API Description -16.4.8 Requesting Values +17.4.8 Requesting Values ------------------------ All of the functions that return values from 'gawk' work in the same @@ -25057,7 +25498,7 @@ 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 appropriate. This behavior is -summarized in *note Table 16.1: table-value-types-returned. +summarized in *note Table 17.2: table-value-types-returned. Type of Actual Value -------------------------------------------------------------------------- @@ -25073,12 +25514,12 @@ Requested Array false false false false Array false Value false false false false false false cookie -Table 16.1: API value types returned +Table 17.2: API value types returned File: gawk.info, Node: Accessing Parameters, Next: Symbol Table Access, Prev: Requesting Values, Up: Extension API Description -16.4.9 Accessing and Updating Parameters +17.4.9 Accessing and Updating Parameters ---------------------------------------- Two functions give you access to the arguments (parameters) passed to @@ -25090,7 +25531,7 @@ your extension function. They are: Fill in the 'awk_value_t' structure pointed to by 'result' with 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: + 'result->val_type' indicates the actual type (*note Table 17.2: 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. @@ -25104,7 +25545,7 @@ your extension function. They are: File: gawk.info, Node: Symbol Table Access, Next: Array Manipulation, Prev: Accessing Parameters, Up: Extension API Description -16.4.10 Symbol Table Access +17.4.10 Symbol Table Access --------------------------- Two sets of routines provide access to global variables, and one set @@ -25119,7 +25560,7 @@ allows you to create and release cached values. File: gawk.info, Node: Symbol table by name, Next: Symbol table by cookie, Up: Symbol Table Access -16.4.10.1 Variable Access and Update by Name +17.4.10.1 Variable Access and Update by Name ............................................ The following routines provide the ability to access and update global @@ -25136,7 +25577,19 @@ termed a "symbol table". The functions are as follows: regular C string. 'wanted' indicates the type of value expected. 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.). + actual type (*note Table 17.2: table-value-types-returned.). + +'awk_bool_t sym_lookup_ns(const char *name,' +' const char *name_space,' +' awk_valtype_t wanted,' +' awk_value_t *result);' + This is like 'sym_lookup()', but the 'name_space' parameter allows + you to specify which namespace 'name' is part of. 'name_space' + cannot be 'NULL'. If it is '""' or '"awk"', then 'name' is + searched for in the default 'awk' namespace. + + Note that 'namespace' is a C++ keyword. For interoperability with + C++, you should avoid using that identifier in C code. 'awk_bool_t sym_update(const char *name, awk_value_t *value);' Update the variable named by the string 'name', which is a regular @@ -25148,14 +25601,30 @@ termed a "symbol table". The functions are as follows: an array. This routine cannot be used to update any of the predefined variables (such as 'ARGC' or 'NF'). +'awk_bool_t sym_update_ns(const char *name_space, const char *name, awk_value_t *value);' + This is like 'sym_update()', but the 'name_space' parameter allows + you to specify which namespace 'name' is part of. 'name_space' + cannot be 'NULL'. If it is '""' or '"awk', then 'name' is searched + for in the default 'awk' namespace. + An extension can look up the value of 'gawk''s special variables. However, with the exception of the 'PROCINFO' array, an extension cannot change any of those variables. + When searching for or updating variables outside the 'awk' namespace +(*note Namespaces::), function and variable names must be simple +identifiers.(1) In addition, namespace names and variable and function +names must follow the rules given in *note Naming Rules::. + + ---------- Footnotes ---------- + + (1) Allowing both namespace plus identifier and 'foo::bar' would have +been too confusing to document, and to code and test. + File: gawk.info, Node: Symbol table by cookie, Next: Cached values, Prev: Symbol table by name, Up: Symbol Table Access -16.4.10.2 Variable Access and Update by Cookie +17.4.10.2 Variable Access and Update by Cookie .............................................. A "scalar cookie" is an opaque handle that provides access to a global @@ -25269,7 +25738,7 @@ like this: File: gawk.info, Node: Cached values, Prev: Symbol table by cookie, Up: Symbol Table Access -16.4.10.3 Creating and Using Cached Values +17.4.10.3 Creating and Using Cached Values .......................................... The routines in this minor node allow you to create and release cached @@ -25367,7 +25836,7 @@ memory. File: gawk.info, Node: Array Manipulation, Next: Redirection API, Prev: Symbol Table Access, Up: Extension API Description -16.4.11 Array Manipulation +17.4.11 Array Manipulation -------------------------- The primary data structure(1) in 'awk' is the associative array (*note @@ -25394,7 +25863,7 @@ arrays of arrays (*note General Data Types::). File: gawk.info, Node: Array Data Types, Next: Array Functions, Up: Array Manipulation -16.4.11.1 Array Data Types +17.4.11.1 Array Data Types .......................... The data types associated with arrays are as follows: @@ -25461,7 +25930,7 @@ overuse this term. File: gawk.info, Node: Array Functions, Next: Flattening Arrays, Prev: Array Data Types, Up: Array Manipulation -16.4.11.2 Array Functions +17.4.11.2 Array Functions ......................... The following functions relate to individual array elements: @@ -25479,7 +25948,7 @@ The following functions relate to individual array elements: value of the element whose index is 'index'. 'wanted' specifies the type of value you wish to retrieve. Return false if 'wanted' does not match the actual type or if 'index' is not in the array - (*note Table 16.1: table-value-types-returned.). + (*note Table 17.2: table-value-types-returned.). The value for 'index' can be numeric, in which case 'gawk' converts it to a string. Using nonintegral values is possible, but requires @@ -25551,7 +26020,7 @@ The following functions relate to individual array elements: File: gawk.info, Node: Flattening Arrays, Next: Creating Arrays, Prev: Array Functions, Up: Array Manipulation -16.4.11.3 Working With All The Elements of an Array +17.4.11.3 Working With All The Elements of an Array ................................................... To "flatten" an array is to create a structure that represents the full @@ -25725,7 +26194,7 @@ return value to success, and returns: File: gawk.info, Node: Creating Arrays, Prev: Flattening Arrays, Up: Array Manipulation -16.4.11.4 How To Create and Populate Arrays +17.4.11.4 How To Create and Populate Arrays ........................................... Besides working with arrays created by 'awk' code, you can create arrays @@ -25864,7 +26333,7 @@ environment variable.) File: gawk.info, Node: Redirection API, Next: Extension API Variables, Prev: Array Manipulation, Up: Extension API Description -16.4.12 Accessing and Manipulating Redirections +17.4.12 Accessing and Manipulating Redirections ----------------------------------------------- The following function allows extensions to access and manipulate @@ -25934,7 +26403,7 @@ I/O multiplexing and a socket library. File: gawk.info, Node: Extension API Variables, Next: Extension API Boilerplate, Prev: Redirection API, Up: Extension API Description -16.4.13 API Variables +17.4.13 API Variables --------------------- The API provides two sets of variables. The first provides information @@ -25952,7 +26421,7 @@ information about how 'gawk' was invoked. File: gawk.info, Node: Extension Versioning, Next: Extension GMP/MPFR Versioning, Up: Extension API Variables -16.4.13.1 API Version Constants and Variables +17.4.13.1 API Version Constants and Variables ............................................. The API provides both a "major" and a "minor" version number. The API @@ -25965,7 +26434,7 @@ API Version C Preprocessor Define enum constant Major 'gawk_api_major_version' 'GAWK_API_MAJOR_VERSION' Minor 'gawk_api_minor_version' 'GAWK_API_MINOR_VERSION' -Table 16.2: gawk API version constants +Table 17.3: gawk API version constants 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'. @@ -26004,7 +26473,7 @@ Boilerplate::). File: gawk.info, Node: Extension GMP/MPFR Versioning, Next: Extension API Informational Variables, Prev: Extension Versioning, Up: Extension API Variables -16.4.13.2 GMP and MPFR Version Information +17.4.13.2 GMP and MPFR Version Information .......................................... The API also includes information about the versions of GMP and MPFR @@ -26046,7 +26515,7 @@ match those of 'gawk' with the following macro: File: gawk.info, Node: Extension API Informational Variables, Prev: Extension GMP/MPFR Versioning, Up: Extension API Variables -16.4.13.3 Informational Variables +17.4.13.3 Informational Variables ................................. The API provides access to several variables that describe whether the @@ -26081,7 +26550,7 @@ change during execution. File: gawk.info, Node: Extension API Boilerplate, Next: Changes from API V1, Prev: Extension API Variables, Up: Extension API Description -16.4.14 Boilerplate Code +17.4.14 Boilerplate Code ------------------------ As mentioned earlier (*note Extension Mechanism Outline::), the function @@ -26185,7 +26654,7 @@ does the following: File: gawk.info, Node: Changes from API V1, Prev: Extension API Boilerplate, Up: Extension API Description -16.4.15 Changes From Version 1 of the API +17.4.15 Changes From Version 1 of the API ----------------------------------------- The current API is _not_ binary compatible with version 1 of the API. @@ -26227,7 +26696,7 @@ version 2 of the API: File: gawk.info, Node: Finding Extensions, Next: Extension Example, Prev: Extension API Description, Up: Dynamic Extensions -16.5 How 'gawk' Finds Extensions +17.5 How 'gawk' Finds Extensions ================================ Compiled extensions have to be installed in a directory where 'gawk' can @@ -26239,7 +26708,7 @@ compiled extensions. *Note AWKLIBPATH Variable:: for more information. File: gawk.info, Node: Extension Example, Next: Extension Samples, Prev: Finding Extensions, Up: Dynamic Extensions -16.6 Example: Some File Functions +17.6 Example: Some File Functions ================================= No matter where you go, there you are. @@ -26260,7 +26729,7 @@ in an extension. File: gawk.info, Node: Internal File Description, Next: Internal File Ops, Up: Extension Example -16.6.1 Using 'chdir()' and 'stat()' +17.6.1 Using 'chdir()' and 'stat()' ----------------------------------- This minor node shows how to use the new functions at the 'awk' level @@ -26390,7 +26859,7 @@ Elements::): File: gawk.info, Node: Internal File Ops, Next: Using Internal File Ops, Prev: Internal File Description, Up: Extension Example -16.6.2 C Code for 'chdir()' and 'stat()' +17.6.2 C Code for 'chdir()' and 'stat()' ---------------------------------------- Here is the C code for these extensions.(1) @@ -26733,7 +27202,7 @@ version. File: gawk.info, Node: Using Internal File Ops, Prev: Internal File Ops, Up: Extension Example -16.6.3 Integrating the Extensions +17.6.3 Integrating the Extensions --------------------------------- Now that the code is written, it must be possible to add it at runtime @@ -26814,7 +27283,7 @@ file. *Note gawkextlib:: for Internet links to the tools. File: gawk.info, Node: Extension Samples, Next: gawkextlib, Prev: Extension Example, Up: Dynamic Extensions -16.7 The Sample Extensions in the 'gawk' Distribution +17.7 The Sample Extensions in the 'gawk' Distribution ===================================================== This minor node provides a brief overview of the sample extensions that @@ -26844,7 +27313,7 @@ the extension API. File: gawk.info, Node: Extension Sample File Functions, Next: Extension Sample Fnmatch, Up: Extension Samples -16.7.1 File-Related Functions +17.7.1 File-Related Functions ----------------------------- The 'filefuncs' extension provides three different functions, as @@ -27014,7 +27483,7 @@ the 'fts()' extension function. File: gawk.info, Node: Extension Sample Fnmatch, Next: Extension Sample Fork, Prev: Extension Sample File Functions, Up: Extension Samples -16.7.2 Interface to 'fnmatch()' +17.7.2 Interface to 'fnmatch()' ------------------------------- This extension provides an interface to the C library 'fnmatch()' @@ -27065,7 +27534,7 @@ Array element Corresponding flag defined by 'fnmatch()' File: gawk.info, Node: Extension Sample Fork, Next: Extension Sample Inplace, Prev: Extension Sample Fnmatch, Up: Extension Samples -16.7.3 Interface to 'fork()', 'wait()', and 'waitpid()' +17.7.3 Interface to 'fork()', 'wait()', and 'waitpid()' ------------------------------------------------------- The 'fork' extension adds three functions, as follows: @@ -27102,19 +27571,21 @@ The 'fork' extension adds three functions, as follows: File: gawk.info, Node: Extension Sample Inplace, Next: Extension Sample Ord, Prev: Extension Sample Fork, Up: Extension Samples -16.7.4 Enabling In-Place File Editing +17.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 -'inplace.awk' include file to invoke the extension properly: +'inplace.awk' include file to invoke the extension properly. This +extension makes use of the namespace facility to place all the variables +and functions in the 'inplace' namespace (*note Namespaces::): # inplace --- load and invoke the inplace extension. @load "inplace" - # Please set INPLACE_SUFFIX to make a backup copy. For example, you may - # want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule. + # Please set inplace::suffix to make a backup copy. For example, you may + # want to set inplace::suffix to .bak on the command line or in a BEGIN rule. # By default, each filename on the command line will be edited inplace. # But you can selectively disable this by adding an inplace=0 argument @@ -27122,44 +27593,46 @@ The 'inplace' extension emulates GNU 'sed''s '-i' option, which performs # reenable it later on the commandline by putting inplace=1 before files # that you wish to be subject to inplace editing. - # N.B. We call inplace_end() in the BEGINFILE and END rules so that any + # N.B. We call inplace::end() in the BEGINFILE and END rules so that any # actions in an ENDFILE rule will be redirected as expected. + @namespace "inplace" + BEGIN { - inplace = 1 # enabled by default + enable = 1 # enabled by default } BEGINFILE { - if (_inplace_filename != "") - inplace_end(_inplace_filename, INPLACE_SUFFIX) - if (inplace) - inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX) + if (filename != "") + end(filename, suffix) + if (enable) + begin(filename = FILENAME, suffix) else - _inplace_filename = "" + filename = "" } END { - if (_inplace_filename != "") - inplace_end(_inplace_filename, INPLACE_SUFFIX) + if (filename != "") + end(filename, suffix) } For each regular file that is processed, the extension redirects standard output to a temporary file configured to have the same owner and permissions as the original. After the file has been processed, the extension restores standard output to its original destination. If -'INPLACE_SUFFIX' is not an empty string, the original file is linked to +'inplace::suffix' is not an empty string, the original file is linked to a backup file name created by appending that suffix. Finally, the temporary file is renamed to the original file name. Note that the use of this feature can be controlled by placing -'inplace=0' on the command-line prior to listing files that should not -be processed this way. You can reenable inplace editing by adding an -'inplace=1' argument prior to files that should be subject to inplace -editing. +'inplace::enable=0' on the command-line prior to listing files that +should not be processed this way. You can reenable inplace editing by +adding an 'inplace::enable=1' argument prior to files that should be +subject to inplace editing. - The '_inplace_filename' variable serves to keep track of the current -filename so as to not invoke 'inplace_end()' before processing the first -file. + The 'inplace::filename' variable serves to keep track of the current +filename so as to not invoke 'inplace::end()' before processing the +first file. If any error occurs, the extension issues a fatal error to terminate processing immediately without damaging the original file. @@ -27170,7 +27643,7 @@ processing immediately without damaging the original file. To keep a backup copy of the original files, try this: - $ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") } + $ gawk -i inplace -v inplace::suffix=.bak '{ gsub(/foo/, "bar") } > { print }' file1 file2 file3 Please note that, while the extension does attempt to preserve @@ -27183,7 +27656,7 @@ signal is received, a temporary file may be left behind. File: gawk.info, Node: Extension Sample Ord, Next: Extension Sample Readdir, Prev: Extension Sample Inplace, Up: Extension Samples -16.7.5 Character and Numeric values: 'ord()' and 'chr()' +17.7.5 Character and Numeric values: 'ord()' and 'chr()' -------------------------------------------------------- The 'ordchr' extension adds two functions, named 'ord()' and 'chr()', as @@ -27210,7 +27683,7 @@ same name. Here is an example: File: gawk.info, Node: Extension Sample Readdir, Next: Extension Sample Revout, Prev: Extension Sample Ord, Up: Extension Samples -16.7.6 Reading Directories +17.7.6 Reading Directories -------------------------- The 'readdir' extension adds an input parser for directories. The usage @@ -27227,7 +27700,7 @@ 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 indicating the type of the file. The letters and their corresponding -file types are shown in *note Table 16.3: table-readdir-file-types. +file types are shown in *note Table 17.4: table-readdir-file-types. Letter File type -------------------------------------------------------------------------- @@ -27240,7 +27713,7 @@ Letter File type 's' Socket 'u' Anything else (unknown) -Table 16.3: File types returned by the 'readdir' extension +Table 17.4: File types returned by the 'readdir' extension On systems without the file type information, the third field is always 'u'. @@ -27260,7 +27733,7 @@ always 'u'. File: gawk.info, Node: Extension Sample Revout, Next: Extension Sample Rev2way, Prev: Extension Sample Readdir, Up: Extension Samples -16.7.7 Reversing Output +17.7.7 Reversing Output ----------------------- The 'revoutput' extension adds a simple output wrapper that reverses the @@ -27280,7 +27753,7 @@ unwary. Here is an example: File: gawk.info, Node: Extension Sample Rev2way, Next: Extension Sample Read write array, Prev: Extension Sample Revout, Up: Extension Samples -16.7.8 Two-Way I/O Example +17.7.8 Two-Way I/O Example -------------------------- The 'revtwoway' extension adds a simple two-way processor that reverses @@ -27304,7 +27777,7 @@ to use it: File: gawk.info, Node: Extension Sample Read write array, Next: Extension Sample Readfile, Prev: Extension Sample Rev2way, Up: Extension Samples -16.7.9 Dumping and Restoring an Array +17.7.9 Dumping and Restoring an Array ------------------------------------- The 'rwarray' extension adds two functions, named 'writea()' and @@ -27351,7 +27824,7 @@ on systems with a different one, but this has not been tried. File: gawk.info, Node: Extension Sample Readfile, Next: Extension Sample Time, Prev: Extension Sample Read write array, Up: Extension Samples -16.7.10 Reading an Entire File +17.7.10 Reading an Entire File ------------------------------ The 'readfile' extension adds a single function named 'readfile()', and @@ -27384,7 +27857,7 @@ an input parser: File: gawk.info, Node: Extension Sample Time, Next: Extension Sample API Tests, Prev: Extension Sample Readfile, Up: Extension Samples -16.7.11 Extension Time Functions +17.7.11 Extension Time Functions -------------------------------- The 'time' extension adds two functions, named 'gettimeofday()' and @@ -27415,7 +27888,7 @@ The 'time' extension adds two functions, named 'gettimeofday()' and File: gawk.info, Node: Extension Sample API Tests, Prev: Extension Sample Time, Up: Extension Samples -16.7.12 API Tests +17.7.12 API Tests ----------------- The 'testext' extension exercises parts of the extension API that are @@ -27427,7 +27900,7 @@ code and runs the tests. See the source file for more information. File: gawk.info, Node: gawkextlib, Next: Extension summary, Prev: Extension Samples, Up: Dynamic Extensions -16.8 The 'gawkextlib' Project +17.8 The 'gawkextlib' Project ============================= The 'gawkextlib' (https://sourceforge.net/projects/gawkextlib/) project @@ -27496,7 +27969,7 @@ project's website for more information. File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: gawkextlib, Up: Dynamic Extensions -16.9 Summary +17.9 Summary ============ * You can write extensions (sometimes called plug-ins) for 'gawk' in @@ -27584,7 +28057,7 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga File: gawk.info, Node: Extension Exercises, Prev: Extension summary, Up: Dynamic Extensions -16.10 Exercises +17.10 Exercises =============== 1. Add functions to implement system calls such as 'chown()', @@ -27605,12 +28078,7 @@ File: gawk.info, Node: Extension Exercises, Prev: Extension summary, Up: Dyna writing the prompt? Which reading mechanism should you replace, the one to get a record, or the one to read raw bytes? - 3. (Hard.) How would you provide namespaces in 'gawk', so that the - names of functions in different extensions don't conflict with each - other? If you come up with a really good scheme, contact the - 'gawk' maintainer to tell him about it. - - 4. Write a wrapper script that provides an interface similar to 'sed + 3. Write a wrapper script that provides an interface similar to 'sed -i' for the "inplace" extension presented in *note Extension Sample Inplace::. @@ -28441,6 +28909,11 @@ POSIX 'awk', in the order they were added to 'gawk'. * Support for GNU/Linux on Alpha was removed. + Version 5.0 added the following features: + + * The 'PROCINFO["platform"]' array element, which allows you to write + code that takes the operating system / platform into account. + File: gawk.info, Node: Common Extensions, Next: Ranges and Locales, Prev: Feature History, Up: Language History @@ -29206,10 +29679,6 @@ command line when compiling 'gawk' from scratch, including: possible to keep extensions for different API versions on the same system without their conflicting with one another. -'--with-whiny-user-strftime' - Force use of the included version of the C 'strftime()' function - for deficient systems. - Use the command './configure --help' to see the full list of options supplied by 'configure'. @@ -29375,6 +29844,12 @@ accomplished by using an appropriate '-v BINMODE=N' option on the command line. 'BINMODE' is set at the time a file or pipe is opened and cannot be changed midstream. + On POSIX-compatible systems, this variable's value has no effect. +Thus, if you think your program will run on multiple different systems +and that you may need to use 'BINMODE', you should simply set it (in the +program or on the command line) unconditionally, and not worry about the +operating system on which your program is running. + The name 'BINMODE' was chosen to match 'mawk' (*note Other Versions::). 'mawk' and 'gawk' handle 'BINMODE' similarly; however, 'mawk' adds a '-W BINMODE=N' option and an environment variable that can @@ -33076,13 +33551,13 @@ Index * - (hyphen), -- operator <1>: Precedence. (line 45) * - (hyphen), -= operator: Assignment Ops. (line 129) * - (hyphen), -= operator <1>: Precedence. (line 94) -* - (hyphen), file names beginning with: Options. (line 60) +* - (hyphen), file names beginning with: Options. (line 64) * - (hyphen), in bracket expressions: Bracket Expressions. (line 25) -* --assign option: Options. (line 32) -* --bignum option: Options. (line 217) -* --characters-as-bytes option: Options. (line 69) -* --copyright option: Options. (line 89) -* --debug option: Options. (line 108) +* --assign option: Options. (line 36) +* --bignum option: Options. (line 229) +* --characters-as-bytes option: Options. (line 73) +* --copyright option: Options. (line 93) +* --debug option: Options. (line 112) * --disable-extensions configuration option: Additional Configuration Options. (line 9) * --disable-lint configuration option: Additional Configuration Options. @@ -33091,83 +33566,81 @@ Index (line 32) * --disable-nls configuration option: Additional Configuration Options. (line 37) -* --dump-variables option: Options. (line 94) +* --dump-variables option: Options. (line 98) * --dump-variables option, using for library functions: Library Names. (line 45) * --enable-versioned-extension-dir configuration option: Additional Configuration Options. (line 42) -* --exec option: Options. (line 139) +* --exec option: Options. (line 147) * --field-separator option: Options. (line 21) * --file option: Options. (line 25) -* --gen-pot option: Options. (line 161) +* --gen-pot option: Options. (line 169) * --gen-pot option <1>: String Extraction. (line 6) * --gen-pot option <2>: String Extraction. (line 6) -* --help option: Options. (line 168) -* --include option: Options. (line 173) +* --help option: Options. (line 176) +* --include option: Options. (line 181) * --lint option: Command Line. (line 20) -* --lint option <1>: Options. (line 198) -* --lint-old option: Options. (line 312) -* --load option: Options. (line 186) -* --no-optimize option: Options. (line 298) -* --non-decimal-data option: Options. (line 223) +* --lint option <1>: Options. (line 210) +* --lint-old option: Options. (line 324) +* --load option: Options. (line 198) +* --no-optimize option: Options. (line 310) +* --non-decimal-data option: Options. (line 235) * --non-decimal-data option <1>: Nondecimal Data. (line 6) * --non-decimal-data option, strtonum() function and: Nondecimal Data. (line 35) -* --optimize option: Options. (line 248) -* --posix option: Options. (line 270) -* --posix option, --traditional option and: Options. (line 285) -* --pretty-print option: Options. (line 237) -* --profile option: Options. (line 258) +* --optimize option: Options. (line 260) +* --posix option: Options. (line 282) +* --posix option, --traditional option and: Options. (line 297) +* --pretty-print option: Options. (line 249) +* --profile option: Options. (line 270) * --profile option <1>: Profiling. (line 12) -* --re-interval option: Options. (line 291) -* --sandbox option: Options. (line 303) +* --re-interval option: Options. (line 303) +* --sandbox option: Options. (line 315) * --sandbox option, disabling system() function: I/O Functions. (line 128) * --sandbox option, input redirection with getline: Getline. (line 19) * --sandbox option, output redirection with print, printf: Redirection. (line 6) -* --source option: Options. (line 117) -* --traditional option: Options. (line 82) -* --traditional option, --posix option and: Options. (line 285) -* --use-lc-numeric option: Options. (line 232) -* --version option: Options. (line 317) -* --with-whiny-user-strftime configuration option: Additional Configuration Options. - (line 48) -* -b option: Options. (line 69) -* -c option: Options. (line 82) -* -C option: Options. (line 89) -* -d option: Options. (line 94) -* -D option: Options. (line 108) -* -e option: Options. (line 117) -* -E option: Options. (line 139) -* -e option <1>: Options. (line 353) +* --source option: Options. (line 121) +* --traditional option: Options. (line 86) +* --traditional option, --posix option and: Options. (line 297) +* --use-lc-numeric option: Options. (line 244) +* --version option: Options. (line 329) +* -b option: Options. (line 73) +* -c option: Options. (line 86) +* -C option: Options. (line 93) +* -d option: Options. (line 98) +* -D option: Options. (line 112) +* -e option: Options. (line 121) +* -E option: Options. (line 147) +* -e option <1>: Options. (line 365) * -f option: Long. (line 12) * -F option: Options. (line 21) * -f option <1>: Options. (line 25) -* -F option, -Ft sets FS to TAB: Options. (line 325) +* -F option, -Ft sets FS to TAB: Options. (line 337) * -F option, command-line: Command Line Field Separator. (line 6) -* -f option, multiple uses: Options. (line 330) -* -g option: Options. (line 161) -* -h option: Options. (line 168) -* -i option: Options. (line 173) -* -l option: Options. (line 186) -* -l option <1>: Options. (line 198) -* -L option: Options. (line 312) -* -M option: Options. (line 217) -* -n option: Options. (line 223) -* -N option: Options. (line 232) -* -o option: Options. (line 237) -* -O option: Options. (line 248) -* -p option: Options. (line 258) -* -P option: Options. (line 270) -* -r option: Options. (line 291) -* -s option: Options. (line 298) -* -S option: Options. (line 303) -* -v option: Options. (line 32) -* -V option: Options. (line 317) +* -f option, multiple uses: Options. (line 342) +* -g option: Options. (line 169) +* -h option: Options. (line 176) +* -i option: Options. (line 181) +* -l option: Options. (line 198) +* -l option <1>: Options. (line 210) +* -L option: Options. (line 324) +* -M option: Options. (line 229) +* -n option: Options. (line 235) +* -N option: Options. (line 244) +* -o option: Options. (line 249) +* -O option: Options. (line 260) +* -p option: Options. (line 270) +* -P option: Options. (line 282) +* -r option: Options. (line 303) +* -s option: Options. (line 310) +* -S option: Options. (line 315) +* -v option: Options. (line 36) +* -V option: Options. (line 329) * -v option <1>: Assignment Options. (line 12) -* -W option: Options. (line 47) +* -W option: Options. (line 51) * . (period), regexp operator: Regexp Operators. (line 44) * .gmo files: Explaining gettext. (line 42) * .gmo files, specifying directory of: Explaining gettext. (line 54) @@ -33191,6 +33664,7 @@ Index * /inet4/... special files (gawk): TCP/IP Networking. (line 6) * /inet6/... special files (gawk): TCP/IP Networking. (line 6) * : (colon), ?: operator: Precedence. (line 91) +* ::, namespace separator: Qualified Names. (line 6) * ; (semicolon), AWKPATH variable and: PC Using. (line 13) * ; (semicolon), separating rules: Statements/Lines. (line 90) * ; (semicolon), separating statements in actions: Statements/Lines. @@ -33227,6 +33701,10 @@ Index * @include directive: Include Files. (line 8) * @load directive: Loading Shared Libraries. (line 8) +* @namespace directive: Changing The Namespace. + (line 6) +* @namespace, no effect on BEGIN BEGINFILE, END, and ENDFILE: Changing The Namespace. + (line 37) * [] (square brackets), regexp operator: Regexp Operators. (line 56) * \ (backslash): Comments. (line 50) * \ (backslash), as field separator: Command Line Field Separator. @@ -33469,9 +33947,14 @@ Index * atan2: Numeric Functions. (line 12) * automatic displays, in debugger: Debugger Info. (line 24) * awf (amazingly workable formatter) program: Glossary. (line 23) -* awk debugging, enabling: Options. (line 108) +* awk debugging, enabling: Options. (line 112) * awk language, POSIX version: Assignment Ops. (line 138) -* awk profiling, enabling: Options. (line 258) +* awk namespace: Default Namespace. (line 6) +* awk namespace, identifier name storage: Internal Name Management. + (line 6) +* awk namespace, use for indirect function calls: Internal Name Management. + (line 6) +* awk profiling, enabling: Options. (line 270) * awk programs: Getting Started. (line 12) * awk programs <1>: Executable Scripts. (line 6) * awk programs <2>: Two Rules. (line 6) @@ -33485,8 +33968,8 @@ Index * awk programs, lengthy: Long. (line 6) * awk programs, lengthy, assertions: Assert Function. (line 6) * awk programs, location of: Options. (line 25) -* awk programs, location of <1>: Options. (line 139) -* awk programs, location of <2>: Options. (line 173) +* awk programs, location of <1>: Options. (line 147) +* awk programs, location of <2>: Options. (line 181) * awk programs, one-line examples: Very Simple. (line 46) * awk programs, profiling: Profiling. (line 6) * awk programs, running: Running gawk. (line 6) @@ -33528,7 +34011,7 @@ Index * AWKPATH environment variable <1>: PC Using. (line 13) * awkprof.out file: Profiling. (line 6) * awksed.awk program: Simple Sed. (line 25) -* awkvars.out file: Options. (line 94) +* awkvars.out file: Options. (line 98) * b debugger command (alias for break): Breakpoint Control. (line 11) * backslash (\): Comments. (line 50) * backslash (\), as field separator: Command Line Field Separator. @@ -33603,10 +34086,14 @@ Index * BEGIN pattern, pwcat program: Passwd Functions. (line 143) * BEGIN pattern, running awk programs and: Cut Program. (line 63) * BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 60) +* BEGIN, execution order not affected by @namespace: Changing The Namespace. + (line 37) * BEGINFILE pattern: BEGINFILE/ENDFILE. (line 6) * BEGINFILE pattern, Boolean patterns and: Expression Patterns. (line 70) * beginfile() user-defined function: Filetrans Function. (line 62) +* BEGINFILE, execution order not affected by @namespace: Changing The Namespace. + (line 37) * Bentley, Jon: Glossary. (line 204) * Benzinger, Michael: Contributors. (line 100) * Berry, Karl: Acknowledgments. (line 33) @@ -33730,7 +34217,7 @@ Index * case sensitivity, regexps and: Case-sensitivity. (line 6) * case sensitivity, regexps and <1>: User-modified. (line 79) * case sensitivity, string comparisons and: User-modified. (line 79) -* CGI, awk scripts for: Options. (line 139) +* CGI, awk scripts for: Options. (line 147) * character classes, See bracket expressions: Regexp Operators. (line 56) * character lists in regular expressions: Bracket Expressions. @@ -33790,7 +34277,7 @@ Index * command line, invoking awk from: Command Line. (line 6) * command line, option -f: Long. (line 12) * command line, options: Options. (line 6) -* command line, options, end of: Options. (line 55) +* command line, options, end of: Options. (line 59) * command line, variables, assigning on: Assignment Options. (line 6) * command-line options, processing: Getopt Function. (line 6) * command-line options, string extraction: String Extraction. (line 6) @@ -33826,7 +34313,7 @@ Index (line 59) * compatibility mode (gawk), octal numbers: Nondecimal-numbers. (line 59) -* compatibility mode (gawk), specifying: Options. (line 82) +* compatibility mode (gawk), specifying: Options. (line 86) * compiled programs: Basic High Level. (line 13) * compiled programs <1>: Glossary. (line 216) * compiling gawk for Cygwin: Cygwin. (line 6) @@ -33834,6 +34321,8 @@ Index * compiling gawk for VMS: VMS Compilation. (line 6) * compl: Bitwise Functions. (line 44) * complement, bitwise: Bitwise Functions. (line 25) +* component name: Qualified Names. (line 6) +* component names, naming rules: Naming Rules. (line 6) * compound statements, control statements and: Statements. (line 10) * concatenating: Concatenation. (line 9) * condition debugger command: Breakpoint Control. (line 54) @@ -33848,8 +34337,6 @@ Index (line 37) * configuration option, --enable-versioned-extension-dir: Additional Configuration Options. (line 42) -* configuration option, --with-whiny-user-strftime: Additional Configuration Options. - (line 48) * configuration options, gawk: Additional Configuration Options. (line 6) * constant regexps: Regexp Usage. (line 57) @@ -33888,11 +34375,13 @@ Index * cosine: Numeric Functions. (line 16) * counting: Wc Program. (line 6) * csh utility: Statements/Lines. (line 43) -* csh utility, POSIXLY_CORRECT environment variable: Options. (line 371) +* csh utility, POSIXLY_CORRECT environment variable: Options. (line 383) * csh utility, |& operator, comparison with: Two-way I/O. (line 27) * ctime() user-defined function: Function Example. (line 74) * Curreli, Marco: Contributors. (line 147) * currency symbols, localization: Explaining gettext. (line 104) +* current namespace, pushing and popping: Changing The Namespace. + (line 29) * current system time: Time Functions. (line 68) * custom.h file: Configuration Philosophy. (line 30) @@ -33926,7 +34415,7 @@ Index * dark corner, field separators: Full Line Fields. (line 22) * dark corner, FILENAME variable: Getline Notes. (line 19) * dark corner, FILENAME variable <1>: Auto-set. (line 108) -* dark corner, FNR/NR variables: Auto-set. (line 389) +* dark corner, FNR/NR variables: Auto-set. (line 409) * dark corner, format-control characters: Control Letters. (line 33) * dark corner, format-control characters <1>: Control Letters. (line 108) @@ -34087,6 +34576,8 @@ Index * debugger, history size: Debugger Info. (line 65) * debugger, how to start: Debugger Invocation. (line 6) * debugger, instruction tracing: Debugger Info. (line 90) +* debugger, interaction with namespaces: Namespace And Features. + (line 17) * debugger, limitations: Limitations. (line 6) * debugger, n command: Finding The Bug. (line 105) * debugger, next command: Finding The Bug. (line 105) @@ -34109,7 +34600,7 @@ Index * debugging gawk, bug reports: Bugs. (line 9) * debugging, example session: Sample Debugging Session. (line 6) -* decimal point character, locale specific: Options. (line 282) +* decimal point character, locale specific: Options. (line 294) * decrement operators: Increment Ops. (line 35) * default keyword: Switch Statement. (line 6) * Deifik, Scott: Acknowledgments. (line 60) @@ -34194,7 +34685,7 @@ Index (line 58) * differences in awk and gawk, RS/RT variables <2>: Multiple Line. (line 130) -* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 327) +* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 348) * differences in awk and gawk, single-character fields: Single Character Fields. (line 6) * differences in awk and gawk, split() function: String Functions. @@ -34203,7 +34694,7 @@ Index * differences in awk and gawk, strings <1>: Scalar Constants. (line 53) * differences in awk and gawk, strings, storing: gawk split records. (line 76) -* differences in awk and gawk, SYMTAB variable: Auto-set. (line 331) +* differences in awk and gawk, SYMTAB variable: Auto-set. (line 352) * differences in awk and gawk, TEXTDOMAIN variable: User-modified. (line 155) * differences in awk and gawk, trunc-mod operation: Arithmetic Ops. @@ -34236,11 +34727,11 @@ Index * down debugger command: Execution Stack. (line 23) * Drepper, Ulrich: Acknowledgments. (line 52) * Duman, Patrice: Acknowledgments. (line 75) -* dump all variables of a program: Options. (line 94) +* dump all variables of a program: Options. (line 98) * dump debugger command: Miscellaneous Debugger Commands. (line 9) * dupword.awk program: Dupword Program. (line 31) -* dynamic profiling: Profiling. (line 177) +* dynamic profiling: Profiling. (line 179) * dynamically loaded extensions: Dynamic Extensions. (line 6) * e debugger command (alias for enable): Breakpoint Control. (line 73) * EBCDIC: Ordinal Functions. (line 45) @@ -34282,9 +34773,13 @@ Index * END pattern, operators and: Using BEGIN/END. (line 17) * END pattern, print statement and: I/O And BEGIN/END. (line 15) * END pattern, profiling and: Profiling. (line 62) +* END, execution order not affected by @namespace: Changing The Namespace. + (line 37) * ENDFILE pattern: BEGINFILE/ENDFILE. (line 6) * ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 70) * endfile() user-defined function: Filetrans Function. (line 62) +* ENDFILE, execution order not affected by @namespace: Changing The Namespace. + (line 37) * endgrent() function (C library): Group Functions. (line 213) * endgrent() user-defined function: Group Functions. (line 216) * endpwent() function (C library): Passwd Functions. (line 208) @@ -34369,7 +34864,9 @@ Index (line 6) * extension API version: Extension Versioning. (line 6) -* extension API, version number: Auto-set. (line 266) +* extension API, interaction with namespaces: Namespace And Features. + (line 22) +* extension API, version number: Auto-set. (line 287) * extension example: Extension Example. (line 6) * extension registration: Registration Functions. (line 6) @@ -34474,7 +34971,7 @@ Index * files, /inet6/... (gawk): TCP/IP Networking. (line 6) * files, awk programs in: Long. (line 6) * files, awkprof.out: Profiling. (line 6) -* files, awkvars.out: Options. (line 94) +* files, awkvars.out: Options. (line 98) * files, closing: I/O Functions. (line 10) * files, descriptors, See file descriptors: Special FD. (line 6) * files, group: Group Functions. (line 6) @@ -34501,7 +34998,7 @@ Index * files, portable object template: Explaining gettext. (line 31) * files, portable object, converting to message object files: I18N Example. (line 80) -* files, portable object, generating: Options. (line 161) +* files, portable object, generating: Options. (line 169) * files, processing, ARGIND variable and: Auto-set. (line 50) * files, reading: Rewind Function. (line 6) * files, reading, multiline records: Multiple Line. (line 6) @@ -34533,7 +35030,7 @@ Index (line 12) * FNR variable: Records. (line 6) * FNR variable <1>: Auto-set. (line 118) -* FNR variable, changing: Auto-set. (line 389) +* FNR variable, changing: Auto-set. (line 409) * for statement: For Statement. (line 6) * for statement, looping over arrays: Scanning an Array. (line 20) * fork() extension function: Extension Sample Fork. @@ -34575,7 +35072,7 @@ Index * FS variable, running awk programs and: Cut Program. (line 63) * FS variable, setting from command line: Command Line Field Separator. (line 6) -* FS variable, TAB character as: Options. (line 279) +* FS variable, TAB character as: Options. (line 291) * FS, containing ^: Regexp Field Splitting. (line 59) * FS, in multiline records: Multiple Line. (line 41) @@ -34636,8 +35133,8 @@ Index * G., Daniel Richard: Acknowledgments. (line 60) * G., Daniel Richard <1>: Maintainers. (line 14) * Garfinkle, Scott: Contributors. (line 35) -* gawk program, dynamic profiling: Profiling. (line 177) -* gawk version: Auto-set. (line 241) +* gawk program, dynamic profiling: Profiling. (line 179) +* gawk version: Auto-set. (line 262) * gawk, ARGIND variable in: Other Arguments. (line 15) * gawk, awk and: Preface. (line 21) * gawk, awk and <1>: This Manual. (line 14) @@ -34661,7 +35158,7 @@ Index * gawk, ERRNO variable in <3>: Auto-set. (line 87) * gawk, ERRNO variable in <4>: TCP/IP Networking. (line 54) * gawk, escape sequences: Escape Sequences. (line 121) -* gawk, extensions, disabling: Options. (line 270) +* gawk, extensions, disabling: Options. (line 282) * gawk, features, adding: Adding Code. (line 6) * gawk, features, advanced: Advanced Features. (line 6) * gawk, field separators and: User-modified. (line 74) @@ -34714,17 +35211,17 @@ Index * gawk, RT variable in: awk split records. (line 131) * gawk, RT variable in <1>: gawk split records. (line 58) * gawk, RT variable in <2>: Multiple Line. (line 130) -* gawk, RT variable in <3>: Auto-set. (line 327) +* gawk, RT variable in <3>: Auto-set. (line 348) * gawk, See Also awk: Preface. (line 34) * gawk, source code, obtaining: Getting. (line 6) * gawk, splitting fields and: Testing field creation. (line 6) * gawk, string-translation functions: I18N Functions. (line 6) -* gawk, SYMTAB array in: Auto-set. (line 331) +* gawk, SYMTAB array in: Auto-set. (line 352) * gawk, TEXTDOMAIN variable in: User-modified. (line 155) * gawk, timestamps: Time Functions. (line 6) * gawk, uses for: Preface. (line 34) -* gawk, versions of, information about, printing: Options. (line 317) +* gawk, versions of, information about, printing: Options. (line 329) * gawk, VMS version of: VMS Installation. (line 6) * gawk, word-boundary operator: GNU Regexp Operators. (line 66) @@ -34803,7 +35300,7 @@ Index * GNU Lesser General Public License: Glossary. (line 489) * GNU long options: Command Line. (line 13) * GNU long options <1>: Options. (line 6) -* GNU long options, printing list of: Options. (line 168) +* GNU long options, printing list of: Options. (line 176) * GNU Project: Manual History. (line 11) * GNU Project <1>: Glossary. (line 403) * GNU/Linux: Manual History. (line 28) @@ -34814,7 +35311,7 @@ Index * Gordon, Assaf: Contributors. (line 108) * GPL (General Public License): Manual History. (line 11) * GPL (General Public License) <1>: Glossary. (line 394) -* GPL (General Public License), printing: Options. (line 89) +* GPL (General Public License), printing: Options. (line 93) * grcat program: Group Functions. (line 16) * Grigera, Juan: Contributors. (line 58) * group database, reading: Group Functions. (line 6) @@ -34840,18 +35337,18 @@ Index * help debugger command: Miscellaneous Debugger Commands. (line 67) * hexadecimal numbers: Nondecimal-numbers. (line 6) -* hexadecimal values, enabling interpretation of: Options. (line 223) +* hexadecimal values, enabling interpretation of: Options. (line 235) * history expansion, in debugger: Readline Support. (line 6) * histsort.awk program: History Sorting. (line 25) * Hughes, Phil: Acknowledgments. (line 43) -* HUP signal, for dynamic profiling: Profiling. (line 209) +* HUP signal, for dynamic profiling: Profiling. (line 211) * hyphen (-), - operator: Precedence. (line 51) * hyphen (-), - operator <1>: Precedence. (line 57) * hyphen (-), -- operator: Increment Ops. (line 48) * hyphen (-), -- operator <1>: Precedence. (line 45) * hyphen (-), -= operator: Assignment Ops. (line 129) * hyphen (-), -= operator <1>: Precedence. (line 94) -* hyphen (-), file names beginning with: Options. (line 60) +* hyphen (-), file names beginning with: Options. (line 64) * hyphen (-), in bracket expressions: Bracket Expressions. (line 25) * i debugger command (alias for info): Debugger Info. (line 13) * id utility: Id Program. (line 6) @@ -34876,6 +35373,8 @@ Index * implementation issues, gawk, debugging: Compatibility Mode. (line 6) * implementation issues, gawk, limits: Getline Notes. (line 14) * implementation issues, gawk, limits <1>: Redirection. (line 129) +* implicit namespace: Changing The Namespace. + (line 25) * in operator: Comparison Operators. (line 11) * in operator <1>: Precedence. (line 82) @@ -34926,7 +35425,7 @@ Index * installing gawk: Installation. (line 6) * instruction tracing, in debugger: Debugger Info. (line 90) * int: Numeric Functions. (line 24) -* INT signal (MS-Windows): Profiling. (line 212) +* INT signal (MS-Windows): Profiling. (line 214) * integer array indices: Numeric Array Subscripts. (line 31) * integers, arbitrary precision: Arbitrary Precision Integers. @@ -34982,7 +35481,7 @@ Index * Kernighan, Brian <8>: Other Versions. (line 13) * Kernighan, Brian <9>: Basic Data Typing. (line 54) * Kernighan, Brian <10>: Glossary. (line 204) -* kill command, dynamic profiling: Profiling. (line 186) +* kill command, dynamic profiling: Profiling. (line 188) * knights, jedi: Undocumented. (line 6) * Kwok, Conrad: Contributors. (line 35) * l debugger command (alias for list): Miscellaneous Debugger Commands. @@ -35053,9 +35552,9 @@ Index * lint checking, array subscripts: Uninitialized Subscripts. (line 43) * lint checking, empty programs: Command Line. (line 16) -* lint checking, issuing warnings: Options. (line 198) +* lint checking, issuing warnings: Options. (line 210) * lint checking, POSIXLY_CORRECT environment variable: Options. - (line 356) + (line 368) * lint checking, undefined functions: Pass By Value/Reference. (line 85) * LINT variable: User-modified. (line 90) @@ -35068,10 +35567,10 @@ Index * list function definitions, in debugger: Debugger Info. (line 30) * loading extensions, @load directive: Loading Shared Libraries. (line 8) -* loading, extensions: Options. (line 186) +* loading, extensions: Options. (line 198) * local variables, in a function: Variable Scope. (line 6) * locale categories: Explaining gettext. (line 81) -* locale decimal point character: Options. (line 282) +* locale decimal point character: Options. (line 294) * locale, definition of: Locales. (line 6) * localization: I18N and L10N. (line 6) * localization, See internationalization, localization: I18N and L10N. @@ -35119,7 +35618,7 @@ Index * mawk utility <2>: Concatenation. (line 36) * mawk utility <3>: Nextfile Statement. (line 47) * mawk utility <4>: Other Versions. (line 39) -* maximum precision supported by MPFR library: Auto-set. (line 255) +* maximum precision supported by MPFR library: Auto-set. (line 276) * McIlroy, Doug: Glossary. (line 255) * McPhee, Patrick: Contributors. (line 103) * memory, allocating for extensions: Memory Allocation Functions. @@ -35134,9 +35633,10 @@ Index * messages from extensions: Printing Messages. (line 6) * metacharacters in regular expressions: Regexp Operators. (line 6) * metacharacters, escape sequences for: Escape Sequences. (line 140) -* minimum precision required by MPFR library: Auto-set. (line 258) +* minimum precision required by MPFR library: Auto-set. (line 279) * mktime: Time Functions. (line 25) * modifiers, in format specifiers: Format Modifiers. (line 6) +* module, definition of: Global Namespace. (line 18) * monetary information, localization: Explaining gettext. (line 104) * Moore, Duncan: Getline Notes. (line 40) * MPFR, checking availability of: Checking for MPFR. (line 6) @@ -35147,16 +35647,41 @@ Index * multiple-line records: Multiple Line. (line 6) * n debugger command (alias for next): Debugger Execution Control. (line 43) +* name management: Internal Name Management. + (line 6) * names, arrays/variables: Library Names. (line 6) * names, functions: Definition Syntax. (line 24) * names, functions <1>: Library Names. (line 6) * namespace issues: Library Names. (line 6) * namespace issues, functions: Definition Syntax. (line 24) +* namespace names, naming rules: Naming Rules. (line 6) +* namespace, awk: Default Namespace. (line 6) +* namespace, default: Default Namespace. (line 6) +* namespace, definition of: Global Namespace. (line 6) +* namespace, example code: Namespace Example. (line 6) +* namespace, implicit: Changing The Namespace. + (line 25) +* namespace, pushing and popping: Changing The Namespace. + (line 29) +* namespace, standard awk, global: Global Namespace. (line 6) +* namespaces, backwards compatibility: Namespace Summary. (line 28) +* namespaces, changing: Changing The Namespace. + (line 6) +* namespaces, interaction with debugger: Namespace And Features. + (line 17) +* namespaces, interaction with extension API: Namespace And Features. + (line 22) +* namespaces, interaction with pretty printer: Namespace And Features. + (line 9) +* namespaces, interaction with profiler: Namespace And Features. + (line 9) +* namespaces, qualified names: Qualified Names. (line 6) +* naming rules, namespaces and component names: Naming Rules. (line 6) * NetBSD: Glossary. (line 746) * networks, programming: TCP/IP Networking. (line 6) * networks, support for: Special Network. (line 6) * newlines: Statements/Lines. (line 6) -* newlines <1>: Options. (line 276) +* newlines <1>: Options. (line 288) * newlines <2>: Boolean Ops. (line 69) * newlines, as record separators: awk split records. (line 12) * newlines, in dynamic regexps: Computed Regexps. (line 60) @@ -35194,7 +35719,7 @@ Index * not Boolean-logic operator: Boolean Ops. (line 6) * NR variable: Records. (line 6) * NR variable <1>: Auto-set. (line 143) -* NR variable, changing: Auto-set. (line 389) +* NR variable, changing: Auto-set. (line 409) * null strings: awk split records. (line 121) * null strings <1>: Regexp Field Splitting. (line 43) @@ -35231,7 +35756,7 @@ Index * o debugger command (alias for option): Debugger Info. (line 57) * obsolete features: Obsolete. (line 6) * octal numbers: Nondecimal-numbers. (line 6) -* octal values, enabling interpretation of: Options. (line 223) +* octal values, enabling interpretation of: Options. (line 235) * OFMT variable: OFMT. (line 15) * OFMT variable <1>: Strings And Numbers. (line 56) * OFMT variable <2>: User-modified. (line 107) @@ -35279,13 +35804,13 @@ Index (line 66) * option debugger command: Debugger Info. (line 57) * options, command-line: Options. (line 6) -* options, command-line, end of: Options. (line 55) +* options, command-line, end of: Options. (line 59) * options, command-line, invoking awk: Command Line. (line 6) * options, command-line, processing: Getopt Function. (line 6) * options, deprecated: Obsolete. (line 6) * options, long: Command Line. (line 13) * options, long <1>: Options. (line 6) -* options, printing list of: Options. (line 168) +* options, printing list of: Options. (line 176) * or: Bitwise Functions. (line 50) * OR bitwise operation: Bitwise Functions. (line 6) * or Boolean-logic operator: Boolean Ops. (line 6) @@ -35313,8 +35838,9 @@ Index * output, standard: Special FD. (line 6) * p debugger command (alias for print): Viewing And Changing Data. (line 35) +* package, definition of: Global Namespace. (line 18) * Papadopoulos, Panos: Contributors. (line 131) -* parent process ID of gawk process: Auto-set. (line 230) +* parent process ID of gawk process: Auto-set. (line 251) * parentheses (), in a profile: Profiling. (line 146) * parentheses (), regexp operator: Regexp Operators. (line 81) * password file: Passwd Functions. (line 16) @@ -35350,6 +35876,7 @@ Index * pipe, output: Redirection. (line 57) * Pitts, Dave: Acknowledgments. (line 60) * Pitts, Dave <1>: Maintainers. (line 14) +* platform running on, PROCINFO["platform"]: Auto-set. (line 224) * Plauger, P.J.: Library Functions. (line 12) * plug-in: Extension Intro. (line 6) * plus sign (+), + operator: Precedence. (line 51) @@ -35386,13 +35913,13 @@ Index * portability, NF variable, decrementing: Changing Fields. (line 115) * portability, operators: Increment Ops. (line 60) * portability, operators, not in POSIX awk: Precedence. (line 97) -* portability, POSIXLY_CORRECT environment variable: Options. (line 376) +* portability, POSIXLY_CORRECT environment variable: Options. (line 388) * portability, substr() function: String Functions. (line 518) * portable object files: Explaining gettext. (line 37) * portable object files <1>: Translator i18n. (line 6) * portable object files, converting to message object files: I18N Example. (line 80) -* portable object files, generating: Options. (line 161) +* portable object files, generating: Options. (line 169) * portable object template files: Explaining gettext. (line 31) * porting gawk: New Ports. (line 6) * positional specifiers, printf statement: Format Modifiers. (line 13) @@ -35434,23 +35961,25 @@ Index * POSIX awk, regular expressions and: Regexp Operators. (line 161) * POSIX awk, timestamps and: Time Functions. (line 6) * POSIX awk, | I/O operator and: Getline/Pipe. (line 56) -* POSIX mode: Options. (line 270) -* POSIX mode <1>: Options. (line 356) +* POSIX mode: Options. (line 282) +* POSIX mode <1>: Options. (line 368) * POSIX, awk and: Preface. (line 21) * POSIX, gawk extensions not included in: POSIX/GNU. (line 6) * POSIX, programs, implementing in awk: Clones. (line 6) -* POSIXLY_CORRECT environment variable: Options. (line 356) +* POSIXLY_CORRECT environment variable: Options. (line 368) * PREC variable: User-modified. (line 127) * precedence: Increment Ops. (line 60) * precedence <1>: Precedence. (line 6) * precedence, regexp operators: Regexp Operators. (line 156) * predefined variables: Built-in Variables. (line 6) -* predefined variables, -v option, setting with: Options. (line 41) +* predefined variables, -v option, setting with: Options. (line 45) * predefined variables, conveying information: Auto-set. (line 6) * predefined variables, user-modifiable: User-modified. (line 6) -* pretty printing: Options. (line 235) -* pretty printing <1>: Profiling. (line 220) -* pretty-printing, profiling, difference with: Profiling. (line 227) +* pretty printer, interaction with namespaces: Namespace And Features. + (line 9) +* pretty printing: Options. (line 247) +* pretty printing <1>: Profiling. (line 222) +* pretty-printing, profiling, difference with: Profiling. (line 229) * print debugger command: Viewing And Changing Data. (line 35) * print statement: Printing. (line 16) @@ -35484,13 +36013,13 @@ Index * printf statement, syntax of: Basic Printf. (line 6) * printing: Printing. (line 6) * printing messages from extensions: Printing Messages. (line 6) -* printing, list of options: Options. (line 168) +* printing, list of options: Options. (line 176) * printing, mailing labels: Labels Program. (line 6) * printing, unduplicated lines of text: Uniq Program. (line 6) * printing, user information: Id Program. (line 6) * private variables: Library Names. (line 11) -* process group ID of gawk process: Auto-set. (line 224) -* process ID of gawk process: Auto-set. (line 227) +* process group ID of gawk process: Auto-set. (line 245) +* process ID of gawk process: Auto-set. (line 248) * processes, two-way communications with: Two-way I/O. (line 6) * processing data: Basic High Level. (line 6) * PROCINFO array: Auto-set. (line 148) @@ -35503,9 +36032,11 @@ Index * PROCINFO array, user and group ID numbers and: Id Program. (line 15) * PROCINFO, values of sorted_in: Controlling Scanning. (line 26) +* profiler, interaction with namespaces: Namespace And Features. + (line 9) * profiling awk programs: Profiling. (line 6) -* profiling awk programs, dynamically: Profiling. (line 177) -* profiling, pretty-printing, difference with: Profiling. (line 227) +* profiling awk programs, dynamically: Profiling. (line 179) +* profiling, pretty-printing, difference with: Profiling. (line 229) * program identifiers: Auto-set. (line 193) * program, definition of: Getting Started. (line 21) * programming conventions, --non-decimal-data option: Nondecimal Data. @@ -35535,6 +36066,8 @@ Index * q debugger command (alias for quit): Miscellaneous Debugger Commands. (line 100) * QSE awk: Other Versions. (line 139) +* qualified name, definition of: Qualified Names. (line 6) +* qualified name, use of: Qualified Names. (line 17) * Quanstrom, Erik: Alarm Program. (line 8) * question mark (?), ?: operator: Precedence. (line 91) * question mark (?), regexp operator: Regexp Operators. (line 111) @@ -35543,7 +36076,7 @@ Index * QuikTrim Awk: Other Versions. (line 143) * quit debugger command: Miscellaneous Debugger Commands. (line 100) -* QUIT signal (MS-Windows): Profiling. (line 212) +* QUIT signal (MS-Windows): Profiling. (line 214) * quoting, for small awk programs: Comments. (line 27) * quoting, in gawk command lines: Long. (line 26) * quoting, in gawk command lines, tricks for: Quoting. (line 91) @@ -35629,7 +36162,7 @@ Index (line 60) * regular expressions, gawk, command-line options: GNU Regexp Operators. (line 73) -* regular expressions, interval expressions and: Options. (line 291) +* regular expressions, interval expressions and: Options. (line 303) * regular expressions, leftmost longest match: Leftmost Longest. (line 6) * regular expressions, operators: Regexp Usage. (line 19) @@ -35670,7 +36203,7 @@ Index * right shift: Bitwise Functions. (line 54) * right shift, bitwise: Bitwise Functions. (line 32) * Ritchie, Dennis: Basic Data Typing. (line 54) -* RLENGTH variable: Auto-set. (line 314) +* RLENGTH variable: Auto-set. (line 335) * RLENGTH variable, match() function and: String Functions. (line 228) * Robbins, Arnold: Command Line Field Separator. (line 71) @@ -35698,12 +36231,12 @@ Index * RS variable <1>: User-modified. (line 136) * RS variable, multiline records and: Multiple Line. (line 17) * rshift: Bitwise Functions. (line 54) -* RSTART variable: Auto-set. (line 320) +* RSTART variable: Auto-set. (line 341) * RSTART variable, match() function and: String Functions. (line 228) * RT variable: awk split records. (line 131) * RT variable <1>: gawk split records. (line 58) * RT variable <2>: Multiple Line. (line 130) -* RT variable <3>: Auto-set. (line 327) +* RT variable <3>: Auto-set. (line 348) * Rubin, Paul: History. (line 30) * Rubin, Paul <1>: Contributors. (line 16) * rule, definition of: Getting Started. (line 21) @@ -35714,14 +36247,14 @@ Index (line 68) * sample debugging session: Sample Debugging Session. (line 6) -* sandbox mode: Options. (line 303) +* sandbox mode: Options. (line 315) * save debugger options: Debugger Info. (line 85) * scalar or array: Type Functions. (line 11) * scalar values: Basic Data Typing. (line 13) * scanning arrays: Scanning an Array. (line 6) * scanning multidimensional arrays: Multiscanning. (line 11) * Schorr, Andrew: Acknowledgments. (line 60) -* Schorr, Andrew <1>: Auto-set. (line 359) +* Schorr, Andrew <1>: Auto-set. (line 379) * Schorr, Andrew <2>: Contributors. (line 136) * Schreiber, Bert: Acknowledgments. (line 38) * Schreiber, Rita: Acknowledgments. (line 38) @@ -35808,7 +36341,7 @@ Index * sidebar, Beware The Smoke and Mirrors!: Bitwise Functions. (line 127) * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields. (line 14) -* sidebar, Changing NR and FNR: Auto-set. (line 387) +* sidebar, Changing NR and FNR: Auto-set. (line 407) * sidebar, Controlling Output Buffering with system(): I/O Functions. (line 166) * sidebar, Escape Sequences for Metacharacters: Escape Sequences. @@ -35836,15 +36369,15 @@ Index (line 130) * sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed Regexps. (line 58) -* SIGHUP signal, for dynamic profiling: Profiling. (line 209) -* SIGINT signal (MS-Windows): Profiling. (line 212) -* signals, HUP/SIGHUP, for profiling: Profiling. (line 209) -* signals, INT/SIGINT (MS-Windows): Profiling. (line 212) -* signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 212) -* signals, USR1/SIGUSR1, for profiling: Profiling. (line 186) +* SIGHUP signal, for dynamic profiling: Profiling. (line 211) +* SIGINT signal (MS-Windows): Profiling. (line 214) +* signals, HUP/SIGHUP, for profiling: Profiling. (line 211) +* signals, INT/SIGINT (MS-Windows): Profiling. (line 214) +* signals, QUIT/SIGQUIT (MS-Windows): Profiling. (line 214) +* signals, USR1/SIGUSR1, for profiling: Profiling. (line 188) * signature program: Signature Program. (line 6) -* SIGQUIT signal (MS-Windows): Profiling. (line 212) -* SIGUSR1 signal, for dynamic profiling: Profiling. (line 186) +* SIGQUIT signal (MS-Windows): Profiling. (line 214) +* SIGUSR1 signal, for dynamic profiling: Profiling. (line 188) * silent debugger command: Debugger Execution Control. (line 10) * sin: Numeric Functions. (line 75) @@ -35882,7 +36415,7 @@ Index * source code, jawk: Other Versions. (line 121) * source code, libmawk: Other Versions. (line 129) * source code, mawk: Other Versions. (line 39) -* source code, mixing: Options. (line 117) +* source code, mixing: Options. (line 121) * source code, pawk: Other Versions. (line 78) * source code, pawk (Python version): Other Versions. (line 133) * source code, QSE awk: Other Versions. (line 139) @@ -35976,9 +36509,9 @@ Index * substr: String Functions. (line 487) * substring: String Functions. (line 487) * Sumner, Andrew: Other Versions. (line 64) -* supplementary groups of gawk process: Auto-set. (line 271) +* supplementary groups of gawk process: Auto-set. (line 292) * switch statement: Switch Statement. (line 6) -* SYMTAB array: Auto-set. (line 331) +* SYMTAB array: Auto-set. (line 352) * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops. (line 149) * system: I/O Functions. (line 106) @@ -36043,7 +36576,7 @@ Index * translate string: I18N Functions. (line 21) * translate.awk program: Translate Program. (line 55) * treating files, as single records: gawk split records. (line 92) -* troubleshooting, --non-decimal-data option: Options. (line 223) +* troubleshooting, --non-decimal-data option: Options. (line 235) * troubleshooting, == operator: Comparison Operators. (line 37) * troubleshooting, awk uses FS not IFS: Field Separators. (line 29) @@ -36074,7 +36607,7 @@ Index * troubleshooting, substr() function: String Functions. (line 505) * troubleshooting, system() function: I/O Functions. (line 128) * troubleshooting, typographical errors, global variables: Options. - (line 99) + (line 103) * true, logical: Truth Values. (line 6) * Trueman, David: History. (line 30) * Trueman, David <1>: Acknowledgments. (line 47) @@ -36118,6 +36651,7 @@ Index * unwatch debugger command: Viewing And Changing Data. (line 83) * up debugger command: Execution Stack. (line 36) +* uppercase names, namespace for: Default Namespace. (line 10) * user database, reading: Passwd Functions. (line 6) * user-defined functions: User-defined. (line 6) * user-defined, functions, counts, in a profile: Profiling. (line 137) @@ -36125,7 +36659,7 @@ Index * user-modifiable variables: User-modified. (line 6) * users, information about, printing: Id Program. (line 6) * users, information about, retrieving: Passwd Functions. (line 16) -* USR1 signal, for dynamic profiling: Profiling. (line 186) +* USR1 signal, for dynamic profiling: Profiling. (line 188) * values, numeric: Basic Data Typing. (line 13) * values, regexp: Strong Regexp Constants. (line 24) @@ -36147,14 +36681,14 @@ Index * variables, getline command into, using <3>: Getline/Variable/Coprocess. (line 6) * variables, global, for library functions: Library Names. (line 11) -* variables, global, printing list of: Options. (line 94) +* variables, global, printing list of: Options. (line 98) * variables, initializing: Using Variables. (line 23) * variables, local to a function: Variable Scope. (line 6) * variables, predefined: Built-in Variables. (line 6) -* variables, predefined, -v option, setting with: Options. (line 41) +* variables, predefined, -v option, setting with: Options. (line 45) * variables, predefined, conveying information: Auto-set. (line 6) * variables, private: Library Names. (line 11) -* variables, setting: Options. (line 32) +* variables, setting: Options. (line 36) * variables, shadowing: Definition Syntax. (line 77) * variables, types of: Assignment Ops. (line 39) * variables, types of, comparison expressions and: Typing and Comparison. @@ -36162,10 +36696,10 @@ Index * variables, uninitialized, as array subscripts: Uninitialized Subscripts. (line 6) * variables, user-defined: Variables. (line 6) -* version of gawk: Auto-set. (line 241) -* version of gawk extension API: Auto-set. (line 266) -* version of GNU MP library: Auto-set. (line 249) -* version of GNU MPFR library: Auto-set. (line 251) +* version of gawk: Auto-set. (line 262) +* version of gawk extension API: Auto-set. (line 287) +* version of GNU MP library: Auto-set. (line 270) +* version of GNU MPFR library: Auto-set. (line 272) * vertical bar (|): Regexp Operators. (line 70) * vertical bar (|), | operator (I/O): Getline/Pipe. (line 10) * vertical bar (|), | operator (I/O) <1>: Precedence. (line 64) @@ -36186,7 +36720,7 @@ Index * Wall, Larry: Array Intro. (line 6) * Wall, Larry <1>: Future Extensions. (line 6) * Wallin, Anders: Contributors. (line 106) -* warnings, issuing: Options. (line 198) +* warnings, issuing: Options. (line 210) * watch debugger command: Viewing And Changing Data. (line 66) * watchpoint (debugger): Debugging Terms. (line 42) @@ -36201,7 +36735,7 @@ Index * whitespace, as field separators: Default Field Splitting. (line 6) * whitespace, functions, calling: Calling Built-in. (line 10) -* whitespace, newlines as: Options. (line 276) +* whitespace, newlines as: Options. (line 288) * Williams, Kent: Contributors. (line 35) * Woehlke, Matthew: Contributors. (line 82) * Woods, John: Contributors. (line 28) @@ -36231,583 +36765,594 @@ Index Tag Table: Node: Top1200 -Node: Foreword343320 -Node: Foreword447762 -Node: Preface49294 -Ref: Preface-Footnote-152153 -Ref: Preface-Footnote-252260 -Ref: Preface-Footnote-352494 -Node: History52636 -Node: Names54988 -Ref: Names-Footnote-156082 -Node: This Manual56229 -Ref: This Manual-Footnote-162714 -Node: Conventions62814 -Node: Manual History65169 -Ref: Manual History-Footnote-168166 -Ref: Manual History-Footnote-268207 -Node: How To Contribute68281 -Node: Acknowledgments69207 -Node: Getting Started74115 -Node: Running gawk76554 -Node: One-shot77744 -Node: Read Terminal79007 -Node: Long81000 -Node: Executable Scripts82513 -Ref: Executable Scripts-Footnote-185308 -Node: Comments85411 -Node: Quoting87895 -Node: DOS Quoting93412 -Node: Sample Data Files95468 -Node: Very Simple98063 -Node: Two Rules102965 -Node: More Complex104850 -Node: Statements/Lines107716 -Ref: Statements/Lines-Footnote-1112175 -Node: Other Features112440 -Node: When113376 -Ref: When-Footnote-1115130 -Node: Intro Summary115195 -Node: Invoking Gawk116079 -Node: Command Line117593 -Node: Options118391 -Ref: Options-Footnote-1134953 -Ref: Options-Footnote-2135184 -Node: Other Arguments135209 -Node: Naming Standard Input138156 -Node: Environment Variables139366 -Node: AWKPATH Variable139924 -Ref: AWKPATH Variable-Footnote-1143336 -Ref: AWKPATH Variable-Footnote-2143370 -Node: AWKLIBPATH Variable143631 -Node: Other Environment Variables145289 -Node: Exit Status149110 -Node: Include Files149787 -Node: Loading Shared Libraries153312 -Node: Obsolete154740 -Node: Undocumented155432 -Node: Invoking Summary155729 -Node: Regexp157389 -Node: Regexp Usage158843 -Node: Escape Sequences160880 -Node: Regexp Operators167112 -Ref: Regexp Operators-Footnote-1174528 -Ref: Regexp Operators-Footnote-2174675 -Node: Bracket Expressions174773 -Ref: table-char-classes177249 -Node: Leftmost Longest180575 -Node: Computed Regexps181878 -Node: GNU Regexp Operators185305 -Node: Case-sensitivity188984 -Ref: Case-sensitivity-Footnote-1191871 -Ref: Case-sensitivity-Footnote-2192106 -Node: Regexp Summary192214 -Node: Reading Files193680 -Node: Records195949 -Node: awk split records197024 -Node: gawk split records202299 -Ref: gawk split records-Footnote-1206885 -Node: Fields206922 -Node: Nonconstant Fields209663 -Ref: Nonconstant Fields-Footnote-1211899 -Node: Changing Fields212103 -Node: Field Separators218134 -Node: Default Field Splitting220832 -Node: Regexp Field Splitting221950 -Node: Single Character Fields225303 -Node: Command Line Field Separator226363 -Node: Full Line Fields229581 -Ref: Full Line Fields-Footnote-1231103 -Ref: Full Line Fields-Footnote-2231149 -Node: Field Splitting Summary231250 -Node: Constant Size233324 -Node: Fixed width data234056 -Node: Skipping intervening237523 -Node: Allowing trailing data238321 -Node: Fields with fixed data239358 -Node: Splitting By Content240876 -Ref: Splitting By Content-Footnote-1244526 -Node: Testing field creation244689 -Node: Multiple Line246314 -Ref: Multiple Line-Footnote-1252198 -Node: Getline252377 -Node: Plain Getline254846 -Node: Getline/Variable257487 -Node: Getline/File258638 -Node: Getline/Variable/File260026 -Ref: Getline/Variable/File-Footnote-1261631 -Node: Getline/Pipe261719 -Node: Getline/Variable/Pipe264426 -Node: Getline/Coprocess265561 -Node: Getline/Variable/Coprocess266828 -Node: Getline Notes267570 -Node: Getline Summary270367 -Ref: table-getline-variants270791 -Node: Read Timeout271539 -Ref: Read Timeout-Footnote-1275445 -Node: Retrying Input275503 -Node: Command-line directories276702 -Node: Input Summary277608 -Node: Input Exercises280780 -Node: Printing281508 -Node: Print283342 -Node: Print Examples284799 -Node: Output Separators287579 -Node: OFMT289596 -Node: Printf290952 -Node: Basic Printf291737 -Node: Control Letters293311 -Node: Format Modifiers298473 -Node: Printf Examples304488 -Node: Redirection306974 -Node: Special FD313815 -Ref: Special FD-Footnote-1316983 -Node: Special Files317057 -Node: Other Inherited Files317674 -Node: Special Network318675 -Node: Special Caveats319535 -Node: Close Files And Pipes320484 -Ref: table-close-pipe-return-values327391 -Ref: Close Files And Pipes-Footnote-1328204 -Ref: Close Files And Pipes-Footnote-2328352 -Node: Nonfatal328504 -Node: Output Summary330842 -Node: Output Exercises332064 -Node: Expressions332743 -Node: Values333931 -Node: Constants334609 -Node: Scalar Constants335300 -Ref: Scalar Constants-Footnote-1337825 -Node: Nondecimal-numbers338075 -Node: Regexp Constants341076 -Node: Using Constant Regexps341602 -Node: Standard Regexp Constants342224 -Node: Strong Regexp Constants345412 -Node: Variables348370 -Node: Using Variables349027 -Node: Assignment Options350937 -Node: Conversion353404 -Node: Strings And Numbers353928 -Ref: Strings And Numbers-Footnote-1356991 -Node: Locale influences conversions357100 -Ref: table-locale-affects359858 -Node: All Operators360476 -Node: Arithmetic Ops361105 -Node: Concatenation363611 -Ref: Concatenation-Footnote-1366458 -Node: Assignment Ops366565 -Ref: table-assign-ops371556 -Node: Increment Ops372869 -Node: Truth Values and Conditions376329 -Node: Truth Values377403 -Node: Typing and Comparison378451 -Node: Variable Typing379271 -Ref: Variable Typing-Footnote-1385734 -Ref: Variable Typing-Footnote-2385806 -Node: Comparison Operators385883 -Ref: table-relational-ops386302 -Node: POSIX String Comparison389797 -Ref: POSIX String Comparison-Footnote-1391492 -Ref: POSIX String Comparison-Footnote-2391631 -Node: Boolean Ops391715 -Ref: Boolean Ops-Footnote-1396197 -Node: Conditional Exp396289 -Node: Function Calls398025 -Node: Precedence401902 -Node: Locales405561 -Node: Expressions Summary407193 -Node: Patterns and Actions409766 -Node: Pattern Overview410886 -Node: Regexp Patterns412563 -Node: Expression Patterns413105 -Node: Ranges416886 -Node: BEGIN/END419994 -Node: Using BEGIN/END420755 -Ref: Using BEGIN/END-Footnote-1423491 -Node: I/O And BEGIN/END423597 -Node: BEGINFILE/ENDFILE425911 -Node: Empty428824 -Node: Using Shell Variables429141 -Node: Action Overview431415 -Node: Statements433740 -Node: If Statement435588 -Node: While Statement437083 -Node: Do Statement439111 -Node: For Statement440259 -Node: Switch Statement443430 -Node: Break Statement445816 -Node: Continue Statement447908 -Node: Next Statement449735 -Node: Nextfile Statement452118 -Node: Exit Statement454770 -Node: Built-in Variables457173 -Node: User-modified458306 -Node: Auto-set466073 -Ref: Auto-set-Footnote-1482375 -Ref: Auto-set-Footnote-2482581 -Node: ARGC and ARGV482637 -Node: Pattern Action Summary486850 -Node: Arrays489280 -Node: Array Basics490609 -Node: Array Intro491453 -Ref: figure-array-elements493428 -Ref: Array Intro-Footnote-1496132 -Node: Reference to Elements496260 -Node: Assigning Elements498724 -Node: Array Example499215 -Node: Scanning an Array500974 -Node: Controlling Scanning503996 -Ref: Controlling Scanning-Footnote-1509395 -Node: Numeric Array Subscripts509711 -Node: Uninitialized Subscripts511895 -Node: Delete513514 -Ref: Delete-Footnote-1516266 -Node: Multidimensional516323 -Node: Multiscanning519418 -Node: Arrays of Arrays521009 -Node: Arrays Summary525777 -Node: Functions527870 -Node: Built-in528908 -Node: Calling Built-in529989 -Node: Numeric Functions531985 -Ref: Numeric Functions-Footnote-1536013 -Ref: Numeric Functions-Footnote-2536370 -Ref: Numeric Functions-Footnote-3536418 -Node: String Functions536690 -Ref: String Functions-Footnote-1560548 -Ref: String Functions-Footnote-2560676 -Ref: String Functions-Footnote-3560924 -Node: Gory Details561011 -Ref: table-sub-escapes562802 -Ref: table-sub-proposed564321 -Ref: table-posix-sub565684 -Ref: table-gensub-escapes567225 -Ref: Gory Details-Footnote-1568048 -Node: I/O Functions568202 -Ref: table-system-return-values574670 -Ref: I/O Functions-Footnote-1576750 -Ref: I/O Functions-Footnote-2576898 -Node: Time Functions577018 -Ref: Time Functions-Footnote-1587689 -Ref: Time Functions-Footnote-2587757 -Ref: Time Functions-Footnote-3587915 -Ref: Time Functions-Footnote-4588026 -Ref: Time Functions-Footnote-5588138 -Ref: Time Functions-Footnote-6588365 -Node: Bitwise Functions588631 -Ref: table-bitwise-ops589225 -Ref: Bitwise Functions-Footnote-1595288 -Ref: Bitwise Functions-Footnote-2595461 -Node: Type Functions595652 -Node: I18N Functions598403 -Node: User-defined600054 -Node: Definition Syntax600859 -Ref: Definition Syntax-Footnote-1606546 -Node: Function Example606617 -Ref: Function Example-Footnote-1609539 -Node: Function Caveats609561 -Node: Calling A Function610079 -Node: Variable Scope611037 -Node: Pass By Value/Reference614031 -Node: Return Statement617530 -Node: Dynamic Typing620509 -Node: Indirect Calls621439 -Ref: Indirect Calls-Footnote-1631691 -Node: Functions Summary631819 -Node: Library Functions634524 -Ref: Library Functions-Footnote-1638131 -Ref: Library Functions-Footnote-2638274 -Node: Library Names638445 -Ref: Library Names-Footnote-1641905 -Ref: Library Names-Footnote-2642128 -Node: General Functions642214 -Node: Strtonum Function643317 -Node: Assert Function646339 -Node: Round Function649665 -Node: Cliff Random Function651205 -Node: Ordinal Functions652221 -Ref: Ordinal Functions-Footnote-1655284 -Ref: Ordinal Functions-Footnote-2655536 -Node: Join Function655746 -Ref: Join Function-Footnote-1657516 -Node: Getlocaltime Function657716 -Node: Readfile Function661458 -Node: Shell Quoting663435 -Node: Data File Management664836 -Node: Filetrans Function665468 -Node: Rewind Function669564 -Node: File Checking671474 -Ref: File Checking-Footnote-1672808 -Node: Empty Files673009 -Node: Ignoring Assigns674988 -Node: Getopt Function676538 -Ref: Getopt Function-Footnote-1688007 -Node: Passwd Functions688207 -Ref: Passwd Functions-Footnote-1697046 -Node: Group Functions697134 -Ref: Group Functions-Footnote-1705032 -Node: Walking Arrays705239 -Node: Library Functions Summary708247 -Node: Library Exercises709653 -Node: Sample Programs710118 -Node: Running Examples710888 -Node: Clones711616 -Node: Cut Program712840 -Node: Egrep Program722769 -Ref: Egrep Program-Footnote-1730281 -Node: Id Program730391 -Node: Split Program734071 -Ref: Split Program-Footnote-1737529 -Node: Tee Program737658 -Node: Uniq Program740448 -Node: Wc Program747874 -Ref: Wc Program-Footnote-1752129 -Node: Miscellaneous Programs752223 -Node: Dupword Program753436 -Node: Alarm Program755466 -Node: Translate Program760321 -Ref: Translate Program-Footnote-1764886 -Node: Labels Program765156 -Ref: Labels Program-Footnote-1768507 -Node: Word Sorting768591 -Node: History Sorting772663 -Node: Extract Program774498 -Node: Simple Sed782552 -Node: Igawk Program785626 -Ref: Igawk Program-Footnote-1799957 -Ref: Igawk Program-Footnote-2800159 -Ref: Igawk Program-Footnote-3800281 -Node: Anagram Program800396 -Node: Signature Program803458 -Node: Programs Summary804705 -Node: Programs Exercises805919 -Ref: Programs Exercises-Footnote-1810048 -Node: Advanced Features810139 -Node: Nondecimal Data812129 -Node: Array Sorting813720 -Node: Controlling Array Traversal814420 -Ref: Controlling Array Traversal-Footnote-1822788 -Node: Array Sorting Functions822906 -Ref: Array Sorting Functions-Footnote-1827997 -Node: Two-way I/O828193 -Ref: Two-way I/O-Footnote-1835914 -Ref: Two-way I/O-Footnote-2836101 -Node: TCP/IP Networking836183 -Node: Profiling839301 -Ref: Profiling-Footnote-1847986 -Node: Advanced Features Summary848309 -Node: Internationalization850153 -Node: I18N and L10N851633 -Node: Explaining gettext852320 -Ref: Explaining gettext-Footnote-1858212 -Ref: Explaining gettext-Footnote-2858397 -Node: Programmer i18n858562 -Ref: Programmer i18n-Footnote-1863511 -Node: Translator i18n863560 -Node: String Extraction864354 -Ref: String Extraction-Footnote-1865486 -Node: Printf Ordering865572 -Ref: Printf Ordering-Footnote-1868358 -Node: I18N Portability868422 -Ref: I18N Portability-Footnote-1870878 -Node: I18N Example870941 -Ref: I18N Example-Footnote-1874216 -Ref: I18N Example-Footnote-2874289 -Node: Gawk I18N874398 -Node: I18N Summary875043 -Node: Debugger876384 -Node: Debugging877404 -Node: Debugging Concepts877845 -Node: Debugging Terms879654 -Node: Awk Debugging882229 -Ref: Awk Debugging-Footnote-1883174 -Node: Sample Debugging Session883306 -Node: Debugger Invocation883840 -Node: Finding The Bug885226 -Node: List of Debugger Commands891700 -Node: Breakpoint Control893033 -Node: Debugger Execution Control896727 -Node: Viewing And Changing Data900089 -Node: Execution Stack903463 -Node: Debugger Info905100 -Node: Miscellaneous Debugger Commands909171 -Node: Readline Support914233 -Node: Limitations915129 -Node: Debugging Summary917238 -Node: Arbitrary Precision Arithmetic918517 -Node: Computer Arithmetic920002 -Ref: table-numeric-ranges923768 -Ref: table-floating-point-ranges924261 -Ref: Computer Arithmetic-Footnote-1924919 -Node: Math Definitions924976 -Ref: table-ieee-formats928292 -Ref: Math Definitions-Footnote-1928895 -Node: MPFR features929000 -Node: FP Math Caution930718 -Ref: FP Math Caution-Footnote-1931790 -Node: Inexactness of computations932159 -Node: Inexact representation933119 -Node: Comparing FP Values934479 -Node: Errors accumulate935720 -Node: Getting Accuracy937153 -Node: Try To Round939863 -Node: Setting precision940762 -Ref: table-predefined-precision-strings941459 -Node: Setting the rounding mode943289 -Ref: table-gawk-rounding-modes943663 -Ref: Setting the rounding mode-Footnote-1947594 -Node: Arbitrary Precision Integers947773 -Ref: Arbitrary Precision Integers-Footnote-1950948 -Node: Checking for MPFR951097 -Node: POSIX Floating Point Problems952571 -Ref: POSIX Floating Point Problems-Footnote-1956856 -Node: Floating point summary956894 -Node: Dynamic Extensions959084 -Node: Extension Intro960637 -Node: Plugin License961903 -Node: Extension Mechanism Outline962700 -Ref: figure-load-extension963139 -Ref: figure-register-new-function964704 -Ref: figure-call-new-function965796 -Node: Extension API Description967858 -Node: Extension API Functions Introduction969500 -Node: General Data Types975040 -Ref: General Data Types-Footnote-1983401 -Node: Memory Allocation Functions983700 -Ref: Memory Allocation Functions-Footnote-1987910 -Node: Constructor Functions988009 -Node: Registration Functions991595 -Node: Extension Functions992280 -Node: Exit Callback Functions997495 -Node: Extension Version String998745 -Node: Input Parsers999408 -Node: Output Wrappers1012129 -Node: Two-way processors1016641 -Node: Printing Messages1018906 -Ref: Printing Messages-Footnote-11020077 -Node: Updating ERRNO1020230 -Node: Requesting Values1020969 -Ref: table-value-types-returned1021706 -Node: Accessing Parameters1022642 -Node: Symbol Table Access1023877 -Node: Symbol table by name1024389 -Node: Symbol table by cookie1026178 -Ref: Symbol table by cookie-Footnote-11030363 -Node: Cached values1030427 -Ref: Cached values-Footnote-11033963 -Node: Array Manipulation1034116 -Ref: Array Manipulation-Footnote-11035207 -Node: Array Data Types1035244 -Ref: Array Data Types-Footnote-11037902 -Node: Array Functions1037994 -Node: Flattening Arrays1042492 -Node: Creating Arrays1049468 -Node: Redirection API1054235 -Node: Extension API Variables1057068 -Node: Extension Versioning1057779 -Ref: gawk-api-version1058208 -Node: Extension GMP/MPFR Versioning1059939 -Node: Extension API Informational Variables1061567 -Node: Extension API Boilerplate1062640 -Node: Changes from API V11066614 -Node: Finding Extensions1068186 -Node: Extension Example1068745 -Node: Internal File Description1069543 -Node: Internal File Ops1073623 -Ref: Internal File Ops-Footnote-11084973 -Node: Using Internal File Ops1085113 -Ref: Using Internal File Ops-Footnote-11087496 -Node: Extension Samples1087770 -Node: Extension Sample File Functions1089299 -Node: Extension Sample Fnmatch1096948 -Node: Extension Sample Fork1098435 -Node: Extension Sample Inplace1099653 -Node: Extension Sample Ord1102870 -Node: Extension Sample Readdir1103706 -Ref: table-readdir-file-types1104595 -Node: Extension Sample Revout1105400 -Node: Extension Sample Rev2way1105989 -Node: Extension Sample Read write array1106729 -Node: Extension Sample Readfile1108671 -Node: Extension Sample Time1109766 -Node: Extension Sample API Tests1111114 -Node: gawkextlib1111606 -Node: Extension summary1114524 -Node: Extension Exercises1118226 -Node: Language History1119724 -Node: V7/SVR3.11121380 -Node: SVR41123532 -Node: POSIX1124966 -Node: BTL1126346 -Node: POSIX/GNU1127075 -Node: Feature History1132853 -Node: Common Extensions1148712 -Node: Ranges and Locales1149995 -Ref: Ranges and Locales-Footnote-11154611 -Ref: Ranges and Locales-Footnote-21154638 -Ref: Ranges and Locales-Footnote-31154873 -Node: Contributors1155094 -Node: History summary1161039 -Node: Installation1162419 -Node: Gawk Distribution1163363 -Node: Getting1163847 -Node: Extracting1164810 -Node: Distribution contents1166448 -Node: Unix Installation1172928 -Node: Quick Installation1173610 -Node: Shell Startup Files1176024 -Node: Additional Configuration Options1177113 -Node: Configuration Philosophy1179406 -Node: Non-Unix Installation1181775 -Node: PC Installation1182235 -Node: PC Binary Installation1183073 -Node: PC Compiling1183508 -Node: PC Using1184625 -Node: Cygwin1187840 -Node: MSYS1188939 -Node: VMS Installation1189440 -Node: VMS Compilation1190231 -Ref: VMS Compilation-Footnote-11191460 -Node: VMS Dynamic Extensions1191518 -Node: VMS Installation Details1193203 -Node: VMS Running1195456 -Node: VMS GNV1199735 -Node: VMS Old Gawk1200470 -Node: Bugs1200941 -Node: Bug address1201604 -Node: Usenet1204586 -Node: Maintainers1205590 -Node: Other Versions1206851 -Node: Installation summary1213765 -Node: Notes1214967 -Node: Compatibility Mode1215761 -Node: Additions1216543 -Node: Accessing The Source1217468 -Node: Adding Code1218905 -Node: New Ports1225124 -Node: Derived Files1229612 -Ref: Derived Files-Footnote-11235258 -Ref: Derived Files-Footnote-21235293 -Ref: Derived Files-Footnote-31235891 -Node: Future Extensions1236005 -Node: Implementation Limitations1236663 -Node: Extension Design1237846 -Node: Old Extension Problems1238990 -Ref: Old Extension Problems-Footnote-11240508 -Node: Extension New Mechanism Goals1240565 -Ref: Extension New Mechanism Goals-Footnote-11243929 -Node: Extension Other Design Decisions1244118 -Node: Extension Future Growth1246231 -Node: Notes summary1247067 -Node: Basic Concepts1248242 -Node: Basic High Level1248923 -Ref: figure-general-flow1249205 -Ref: figure-process-flow1249890 -Ref: Basic High Level-Footnote-11253191 -Node: Basic Data Typing1253376 -Node: Glossary1256704 -Node: Copying1288542 -Node: GNU Free Documentation License1326085 -Node: Index1351205 +Node: Foreword344048 +Node: Foreword448490 +Node: Preface50022 +Ref: Preface-Footnote-152881 +Ref: Preface-Footnote-252988 +Ref: Preface-Footnote-353222 +Node: History53364 +Node: Names55716 +Ref: Names-Footnote-156810 +Node: This Manual56957 +Ref: This Manual-Footnote-163596 +Node: Conventions63696 +Node: Manual History66051 +Ref: Manual History-Footnote-169048 +Ref: Manual History-Footnote-269089 +Node: How To Contribute69163 +Node: Acknowledgments70089 +Node: Getting Started74997 +Node: Running gawk77436 +Node: One-shot78626 +Node: Read Terminal79889 +Node: Long81882 +Node: Executable Scripts83395 +Ref: Executable Scripts-Footnote-186190 +Node: Comments86293 +Node: Quoting88777 +Node: DOS Quoting94294 +Node: Sample Data Files96350 +Node: Very Simple98945 +Node: Two Rules103847 +Node: More Complex105732 +Node: Statements/Lines108598 +Ref: Statements/Lines-Footnote-1113057 +Node: Other Features113322 +Node: When114258 +Ref: When-Footnote-1116012 +Node: Intro Summary116077 +Node: Invoking Gawk116961 +Node: Command Line118475 +Node: Options119273 +Ref: Options-Footnote-1136351 +Ref: Options-Footnote-2136582 +Node: Other Arguments136607 +Node: Naming Standard Input139554 +Node: Environment Variables140764 +Node: AWKPATH Variable141322 +Ref: AWKPATH Variable-Footnote-1144734 +Ref: AWKPATH Variable-Footnote-2144768 +Node: AWKLIBPATH Variable145029 +Node: Other Environment Variables146687 +Node: Exit Status150508 +Node: Include Files151185 +Node: Loading Shared Libraries154875 +Node: Obsolete156303 +Node: Undocumented156995 +Node: Invoking Summary157292 +Node: Regexp158952 +Node: Regexp Usage160406 +Node: Escape Sequences162443 +Node: Regexp Operators168675 +Ref: Regexp Operators-Footnote-1176091 +Ref: Regexp Operators-Footnote-2176238 +Node: Bracket Expressions176336 +Ref: table-char-classes178812 +Node: Leftmost Longest182138 +Node: Computed Regexps183441 +Node: GNU Regexp Operators186868 +Node: Case-sensitivity190547 +Ref: Case-sensitivity-Footnote-1193434 +Ref: Case-sensitivity-Footnote-2193669 +Node: Regexp Summary193777 +Node: Reading Files195243 +Node: Records197512 +Node: awk split records198587 +Node: gawk split records203862 +Ref: gawk split records-Footnote-1208448 +Node: Fields208485 +Node: Nonconstant Fields211226 +Ref: Nonconstant Fields-Footnote-1213462 +Node: Changing Fields213666 +Node: Field Separators219697 +Node: Default Field Splitting222395 +Node: Regexp Field Splitting223513 +Node: Single Character Fields226866 +Node: Command Line Field Separator227926 +Node: Full Line Fields231144 +Ref: Full Line Fields-Footnote-1232666 +Ref: Full Line Fields-Footnote-2232712 +Node: Field Splitting Summary232813 +Node: Constant Size234887 +Node: Fixed width data235619 +Node: Skipping intervening239086 +Node: Allowing trailing data239884 +Node: Fields with fixed data240921 +Node: Splitting By Content242439 +Ref: Splitting By Content-Footnote-1246089 +Node: Testing field creation246252 +Node: Multiple Line247877 +Ref: Multiple Line-Footnote-1253761 +Node: Getline253940 +Node: Plain Getline256409 +Node: Getline/Variable259050 +Node: Getline/File260201 +Node: Getline/Variable/File261589 +Ref: Getline/Variable/File-Footnote-1263194 +Node: Getline/Pipe263282 +Node: Getline/Variable/Pipe265989 +Node: Getline/Coprocess267124 +Node: Getline/Variable/Coprocess268391 +Node: Getline Notes269133 +Node: Getline Summary271930 +Ref: table-getline-variants272354 +Node: Read Timeout273102 +Ref: Read Timeout-Footnote-1277008 +Node: Retrying Input277066 +Node: Command-line directories278265 +Node: Input Summary279171 +Node: Input Exercises282343 +Node: Printing283071 +Node: Print284905 +Node: Print Examples286362 +Node: Output Separators289142 +Node: OFMT291159 +Node: Printf292515 +Node: Basic Printf293300 +Node: Control Letters294874 +Node: Format Modifiers300036 +Node: Printf Examples306051 +Node: Redirection308537 +Node: Special FD315378 +Ref: Special FD-Footnote-1318546 +Node: Special Files318620 +Node: Other Inherited Files319237 +Node: Special Network320238 +Node: Special Caveats321098 +Node: Close Files And Pipes322047 +Ref: table-close-pipe-return-values328954 +Ref: Close Files And Pipes-Footnote-1329767 +Ref: Close Files And Pipes-Footnote-2329915 +Node: Nonfatal330067 +Node: Output Summary332405 +Node: Output Exercises333627 +Node: Expressions334306 +Node: Values335494 +Node: Constants336172 +Node: Scalar Constants336863 +Ref: Scalar Constants-Footnote-1339388 +Node: Nondecimal-numbers339638 +Node: Regexp Constants342639 +Node: Using Constant Regexps343165 +Node: Standard Regexp Constants343787 +Node: Strong Regexp Constants346975 +Node: Variables349933 +Node: Using Variables350590 +Node: Assignment Options352500 +Node: Conversion354967 +Node: Strings And Numbers355491 +Ref: Strings And Numbers-Footnote-1358554 +Node: Locale influences conversions358663 +Ref: table-locale-affects361421 +Node: All Operators362039 +Node: Arithmetic Ops362668 +Node: Concatenation365174 +Ref: Concatenation-Footnote-1368021 +Node: Assignment Ops368128 +Ref: table-assign-ops373119 +Node: Increment Ops374432 +Node: Truth Values and Conditions377892 +Node: Truth Values378966 +Node: Typing and Comparison380014 +Node: Variable Typing380834 +Ref: Variable Typing-Footnote-1387297 +Ref: Variable Typing-Footnote-2387369 +Node: Comparison Operators387446 +Ref: table-relational-ops387865 +Node: POSIX String Comparison391360 +Ref: POSIX String Comparison-Footnote-1393055 +Ref: POSIX String Comparison-Footnote-2393194 +Node: Boolean Ops393278 +Ref: Boolean Ops-Footnote-1397760 +Node: Conditional Exp397852 +Node: Function Calls399588 +Node: Precedence403465 +Node: Locales407124 +Node: Expressions Summary408756 +Node: Patterns and Actions411329 +Node: Pattern Overview412449 +Node: Regexp Patterns414126 +Node: Expression Patterns414668 +Node: Ranges418449 +Node: BEGIN/END421557 +Node: Using BEGIN/END422318 +Ref: Using BEGIN/END-Footnote-1425054 +Node: I/O And BEGIN/END425160 +Node: BEGINFILE/ENDFILE427474 +Node: Empty430387 +Node: Using Shell Variables430704 +Node: Action Overview432978 +Node: Statements435303 +Node: If Statement437151 +Node: While Statement438646 +Node: Do Statement440674 +Node: For Statement441822 +Node: Switch Statement444993 +Node: Break Statement447379 +Node: Continue Statement449471 +Node: Next Statement451298 +Node: Nextfile Statement453681 +Node: Exit Statement456333 +Node: Built-in Variables458736 +Node: User-modified459869 +Node: Auto-set467636 +Ref: Auto-set-Footnote-1484443 +Ref: Auto-set-Footnote-2484649 +Node: ARGC and ARGV484705 +Node: Pattern Action Summary488918 +Node: Arrays491348 +Node: Array Basics492677 +Node: Array Intro493521 +Ref: figure-array-elements495496 +Ref: Array Intro-Footnote-1498200 +Node: Reference to Elements498328 +Node: Assigning Elements500792 +Node: Array Example501283 +Node: Scanning an Array503042 +Node: Controlling Scanning506064 +Ref: Controlling Scanning-Footnote-1511463 +Node: Numeric Array Subscripts511779 +Node: Uninitialized Subscripts513963 +Node: Delete515582 +Ref: Delete-Footnote-1518334 +Node: Multidimensional518391 +Node: Multiscanning521486 +Node: Arrays of Arrays523077 +Node: Arrays Summary527845 +Node: Functions529938 +Node: Built-in530976 +Node: Calling Built-in532057 +Node: Numeric Functions534053 +Ref: Numeric Functions-Footnote-1538081 +Ref: Numeric Functions-Footnote-2538438 +Ref: Numeric Functions-Footnote-3538486 +Node: String Functions538758 +Ref: String Functions-Footnote-1562616 +Ref: String Functions-Footnote-2562744 +Ref: String Functions-Footnote-3562992 +Node: Gory Details563079 +Ref: table-sub-escapes564870 +Ref: table-sub-proposed566389 +Ref: table-posix-sub567752 +Ref: table-gensub-escapes569293 +Ref: Gory Details-Footnote-1570116 +Node: I/O Functions570270 +Ref: table-system-return-values576738 +Ref: I/O Functions-Footnote-1578818 +Ref: I/O Functions-Footnote-2578966 +Node: Time Functions579086 +Ref: Time Functions-Footnote-1589757 +Ref: Time Functions-Footnote-2589825 +Ref: Time Functions-Footnote-3589983 +Ref: Time Functions-Footnote-4590094 +Ref: Time Functions-Footnote-5590206 +Ref: Time Functions-Footnote-6590433 +Node: Bitwise Functions590699 +Ref: table-bitwise-ops591293 +Ref: Bitwise Functions-Footnote-1597356 +Ref: Bitwise Functions-Footnote-2597529 +Node: Type Functions597720 +Node: I18N Functions600471 +Node: User-defined602122 +Node: Definition Syntax602927 +Ref: Definition Syntax-Footnote-1608614 +Node: Function Example608685 +Ref: Function Example-Footnote-1611607 +Node: Function Caveats611629 +Node: Calling A Function612147 +Node: Variable Scope613105 +Node: Pass By Value/Reference616099 +Node: Return Statement619598 +Node: Dynamic Typing622577 +Node: Indirect Calls623507 +Ref: Indirect Calls-Footnote-1633759 +Node: Functions Summary633887 +Node: Library Functions636592 +Ref: Library Functions-Footnote-1640199 +Ref: Library Functions-Footnote-2640342 +Node: Library Names640513 +Ref: Library Names-Footnote-1644180 +Ref: Library Names-Footnote-2644403 +Node: General Functions644489 +Node: Strtonum Function645592 +Node: Assert Function648614 +Node: Round Function651940 +Node: Cliff Random Function653480 +Node: Ordinal Functions654496 +Ref: Ordinal Functions-Footnote-1657559 +Ref: Ordinal Functions-Footnote-2657811 +Node: Join Function658021 +Ref: Join Function-Footnote-1659791 +Node: Getlocaltime Function659991 +Node: Readfile Function663733 +Node: Shell Quoting665710 +Node: Data File Management667111 +Node: Filetrans Function667743 +Node: Rewind Function671839 +Node: File Checking673749 +Ref: File Checking-Footnote-1675083 +Node: Empty Files675284 +Node: Ignoring Assigns677263 +Node: Getopt Function678813 +Ref: Getopt Function-Footnote-1690282 +Node: Passwd Functions690482 +Ref: Passwd Functions-Footnote-1699321 +Node: Group Functions699409 +Ref: Group Functions-Footnote-1707307 +Node: Walking Arrays707514 +Node: Library Functions Summary710522 +Node: Library Exercises711928 +Node: Sample Programs712393 +Node: Running Examples713163 +Node: Clones713891 +Node: Cut Program715115 +Node: Egrep Program725044 +Ref: Egrep Program-Footnote-1732556 +Node: Id Program732666 +Node: Split Program736346 +Ref: Split Program-Footnote-1739804 +Node: Tee Program739933 +Node: Uniq Program742723 +Node: Wc Program750344 +Ref: Wc Program-Footnote-1754599 +Node: Miscellaneous Programs754693 +Node: Dupword Program755906 +Node: Alarm Program757936 +Node: Translate Program762791 +Ref: Translate Program-Footnote-1767356 +Node: Labels Program767626 +Ref: Labels Program-Footnote-1770977 +Node: Word Sorting771061 +Node: History Sorting775133 +Node: Extract Program776968 +Node: Simple Sed785022 +Node: Igawk Program788096 +Ref: Igawk Program-Footnote-1802427 +Ref: Igawk Program-Footnote-2802629 +Ref: Igawk Program-Footnote-3802751 +Node: Anagram Program802866 +Node: Signature Program805928 +Node: Programs Summary807175 +Node: Programs Exercises808389 +Ref: Programs Exercises-Footnote-1812518 +Node: Advanced Features812609 +Node: Nondecimal Data814599 +Node: Array Sorting816190 +Node: Controlling Array Traversal816890 +Ref: Controlling Array Traversal-Footnote-1825258 +Node: Array Sorting Functions825376 +Ref: Array Sorting Functions-Footnote-1830467 +Node: Two-way I/O830663 +Ref: Two-way I/O-Footnote-1838384 +Ref: Two-way I/O-Footnote-2838571 +Node: TCP/IP Networking838653 +Node: Profiling841771 +Node: Advanced Features Summary850789 +Node: Internationalization852633 +Node: I18N and L10N854113 +Node: Explaining gettext854800 +Ref: Explaining gettext-Footnote-1860692 +Ref: Explaining gettext-Footnote-2860877 +Node: Programmer i18n861042 +Ref: Programmer i18n-Footnote-1865991 +Node: Translator i18n866040 +Node: String Extraction866834 +Ref: String Extraction-Footnote-1867966 +Node: Printf Ordering868052 +Ref: Printf Ordering-Footnote-1870838 +Node: I18N Portability870902 +Ref: I18N Portability-Footnote-1873358 +Node: I18N Example873421 +Ref: I18N Example-Footnote-1876696 +Ref: I18N Example-Footnote-2876769 +Node: Gawk I18N876878 +Node: I18N Summary877523 +Node: Debugger878864 +Node: Debugging879864 +Node: Debugging Concepts880305 +Node: Debugging Terms882114 +Node: Awk Debugging884689 +Ref: Awk Debugging-Footnote-1885634 +Node: Sample Debugging Session885766 +Node: Debugger Invocation886300 +Node: Finding The Bug887686 +Node: List of Debugger Commands894160 +Node: Breakpoint Control895493 +Node: Debugger Execution Control899187 +Node: Viewing And Changing Data902549 +Node: Execution Stack905923 +Node: Debugger Info907560 +Node: Miscellaneous Debugger Commands911631 +Node: Readline Support916693 +Node: Limitations917589 +Node: Debugging Summary919698 +Node: Namespaces920977 +Node: Global Namespace921795 +Node: Qualified Names923193 +Node: Default Namespace924192 +Node: Changing The Namespace924933 +Node: Naming Rules926547 +Node: Internal Name Management928395 +Node: Namespace Example929437 +Node: Namespace And Features931999 +Node: Namespace Summary933434 +Node: Arbitrary Precision Arithmetic934911 +Node: Computer Arithmetic936398 +Ref: table-numeric-ranges940164 +Ref: table-floating-point-ranges940657 +Ref: Computer Arithmetic-Footnote-1941315 +Node: Math Definitions941372 +Ref: table-ieee-formats944688 +Ref: Math Definitions-Footnote-1945291 +Node: MPFR features945396 +Node: FP Math Caution947114 +Ref: FP Math Caution-Footnote-1948186 +Node: Inexactness of computations948555 +Node: Inexact representation949515 +Node: Comparing FP Values950875 +Node: Errors accumulate952116 +Node: Getting Accuracy953549 +Node: Try To Round956259 +Node: Setting precision957158 +Ref: table-predefined-precision-strings957855 +Node: Setting the rounding mode959685 +Ref: table-gawk-rounding-modes960059 +Ref: Setting the rounding mode-Footnote-1963990 +Node: Arbitrary Precision Integers964169 +Ref: Arbitrary Precision Integers-Footnote-1967344 +Node: Checking for MPFR967493 +Node: POSIX Floating Point Problems968967 +Ref: POSIX Floating Point Problems-Footnote-1973252 +Node: Floating point summary973290 +Node: Dynamic Extensions975480 +Node: Extension Intro977033 +Node: Plugin License978299 +Node: Extension Mechanism Outline979096 +Ref: figure-load-extension979535 +Ref: figure-register-new-function981100 +Ref: figure-call-new-function982192 +Node: Extension API Description984254 +Node: Extension API Functions Introduction985896 +Ref: table-api-std-headers987732 +Node: General Data Types991597 +Ref: General Data Types-Footnote-1999958 +Node: Memory Allocation Functions1000257 +Ref: Memory Allocation Functions-Footnote-11004467 +Node: Constructor Functions1004566 +Node: Registration Functions1008152 +Node: Extension Functions1008837 +Node: Exit Callback Functions1014159 +Node: Extension Version String1015409 +Node: Input Parsers1016072 +Node: Output Wrappers1028793 +Node: Two-way processors1033305 +Node: Printing Messages1035570 +Ref: Printing Messages-Footnote-11036741 +Node: Updating ERRNO1036894 +Node: Requesting Values1037633 +Ref: table-value-types-returned1038370 +Node: Accessing Parameters1039306 +Node: Symbol Table Access1040541 +Node: Symbol table by name1041053 +Ref: Symbol table by name-Footnote-11044077 +Node: Symbol table by cookie1044205 +Ref: Symbol table by cookie-Footnote-11048390 +Node: Cached values1048454 +Ref: Cached values-Footnote-11051990 +Node: Array Manipulation1052143 +Ref: Array Manipulation-Footnote-11053234 +Node: Array Data Types1053271 +Ref: Array Data Types-Footnote-11055929 +Node: Array Functions1056021 +Node: Flattening Arrays1060519 +Node: Creating Arrays1067495 +Node: Redirection API1072262 +Node: Extension API Variables1075095 +Node: Extension Versioning1075806 +Ref: gawk-api-version1076235 +Node: Extension GMP/MPFR Versioning1077966 +Node: Extension API Informational Variables1079594 +Node: Extension API Boilerplate1080667 +Node: Changes from API V11084641 +Node: Finding Extensions1086213 +Node: Extension Example1086772 +Node: Internal File Description1087570 +Node: Internal File Ops1091650 +Ref: Internal File Ops-Footnote-11103000 +Node: Using Internal File Ops1103140 +Ref: Using Internal File Ops-Footnote-11105523 +Node: Extension Samples1105797 +Node: Extension Sample File Functions1107326 +Node: Extension Sample Fnmatch1114975 +Node: Extension Sample Fork1116462 +Node: Extension Sample Inplace1117680 +Node: Extension Sample Ord1120984 +Node: Extension Sample Readdir1121820 +Ref: table-readdir-file-types1122709 +Node: Extension Sample Revout1123514 +Node: Extension Sample Rev2way1124103 +Node: Extension Sample Read write array1124843 +Node: Extension Sample Readfile1126785 +Node: Extension Sample Time1127880 +Node: Extension Sample API Tests1129228 +Node: gawkextlib1129720 +Node: Extension summary1132638 +Node: Extension Exercises1136340 +Node: Language History1137582 +Node: V7/SVR3.11139238 +Node: SVR41141390 +Node: POSIX1142824 +Node: BTL1144204 +Node: POSIX/GNU1144933 +Node: Feature History1150711 +Node: Common Extensions1166757 +Node: Ranges and Locales1168040 +Ref: Ranges and Locales-Footnote-11172656 +Ref: Ranges and Locales-Footnote-21172683 +Ref: Ranges and Locales-Footnote-31172918 +Node: Contributors1173139 +Node: History summary1179084 +Node: Installation1180464 +Node: Gawk Distribution1181408 +Node: Getting1181892 +Node: Extracting1182855 +Node: Distribution contents1184493 +Node: Unix Installation1190973 +Node: Quick Installation1191655 +Node: Shell Startup Files1194069 +Node: Additional Configuration Options1195158 +Node: Configuration Philosophy1197323 +Node: Non-Unix Installation1199692 +Node: PC Installation1200152 +Node: PC Binary Installation1200990 +Node: PC Compiling1201425 +Node: PC Using1202542 +Node: Cygwin1206095 +Node: MSYS1207194 +Node: VMS Installation1207695 +Node: VMS Compilation1208486 +Ref: VMS Compilation-Footnote-11209715 +Node: VMS Dynamic Extensions1209773 +Node: VMS Installation Details1211458 +Node: VMS Running1213711 +Node: VMS GNV1217990 +Node: VMS Old Gawk1218725 +Node: Bugs1219196 +Node: Bug address1219859 +Node: Usenet1222841 +Node: Maintainers1223845 +Node: Other Versions1225106 +Node: Installation summary1232020 +Node: Notes1233222 +Node: Compatibility Mode1234016 +Node: Additions1234798 +Node: Accessing The Source1235723 +Node: Adding Code1237160 +Node: New Ports1243379 +Node: Derived Files1247867 +Ref: Derived Files-Footnote-11253513 +Ref: Derived Files-Footnote-21253548 +Ref: Derived Files-Footnote-31254146 +Node: Future Extensions1254260 +Node: Implementation Limitations1254918 +Node: Extension Design1256101 +Node: Old Extension Problems1257245 +Ref: Old Extension Problems-Footnote-11258763 +Node: Extension New Mechanism Goals1258820 +Ref: Extension New Mechanism Goals-Footnote-11262184 +Node: Extension Other Design Decisions1262373 +Node: Extension Future Growth1264486 +Node: Notes summary1265322 +Node: Basic Concepts1266497 +Node: Basic High Level1267178 +Ref: figure-general-flow1267460 +Ref: figure-process-flow1268145 +Ref: Basic High Level-Footnote-11271446 +Node: Basic Data Typing1271631 +Node: Glossary1274959 +Node: Copying1306797 +Node: GNU Free Documentation License1344340 +Node: Index1369460 End Tag Table |