aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/ChangeLog59
-rw-r--r--doc/gawk.info1415
-rw-r--r--doc/gawk.texi349
-rw-r--r--doc/gawktexi.in349
-rw-r--r--doc/texinfo.tex150
5 files changed, 1372 insertions, 950 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 093b25bb..b58699a4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,46 @@
+2015-03-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Briefly describe that nonfatal I/O overrides
+ GAWK_SOCK_RETRIES, in the env var part and in the nonfatal I/O
+ part.
+
+2015-03-01 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Change quotes to @dfn for pseudorandom.
+ A last-minute O'Reilly fix.
+
+2015-02-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Update UPDATE-MONTH and copyright year.
+ Note that "the guide is definitive" quote is really
+ from "The Restaurant at the End of the Universe". Thanks
+ to Antonio Colombo for pointing this out.
+
+2015-02-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * texinfo.tex: Update to most current version.
+ * gawktexi.in: Minor edit to match an O'Reilly fix.
+ Add some FIXMEs to one day use @sup.
+
+2015-02-22 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Change 'div' to 'divisor' in some examples.
+ This future-proofs against a new function in master.
+ Thanks to Antonio Giovanni Colombo for the report.
+
+2015-02-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: More O'Reilly fixes. I think it's done!
+
+2015-02-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: More O'Reilly fixes.
+
+2015-02-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: A few minor formatting fixes to sync with O'Reilly
+ version.
+
2015-02-13 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: O'Reilly fixes. Through QC1 review.
@@ -17,6 +60,7 @@
2015-02-08 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: O'Reilly fixes.
+ Make non-fatal i/o use "NONFATAL".
2015-02-06 Arnold D. Robbins <arnold@skeeve.com>
@@ -61,7 +105,7 @@
2015-01-23 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: O'Reilly fixes.
- (Glossary): Many new entries from Antonio Giovanni Columbo.
+ (Glossary): Many new entries from Antonio Giovanni Colombo.
2015-01-21 Arnold D. Robbins <arnold@skeeve.com>
@@ -77,15 +121,24 @@
* gawkinet.texi: Fix capitalization in document title.
* gawktexi.in: Here we go again: Starting on more O'Reilly fixes.
+2014-12-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Add info that nonfatal I/O works with stdout and
+ stderr. Revise version info and what was added when.
+
2014-12-26 Antonio Giovanni Colombo <azc100@gmail.com>
* gawktexi.in (Glossary): Really sort the items.
2014-12-24 Arnold D. Robbins <arnold@skeeve.com>
+ * gawktexi.in: Start documenting nonfatal output.
+
+2014-12-24 Arnold D. Robbins <arnold@skeeve.com>
+
* gawktexi.in: Add one more paragraph to new foreword.
* gawktexi.in: Fix exponentiation in TeX mode. Thanks to
- Marco Curreli by way of Antonio Giovanni Columbo.
+ Marco Curreli by way of Antonio Giovanni Colombo.
* texinfo.tex: Updated.
@@ -155,7 +208,7 @@
2014-10-17 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: Fix date in docbook attribution for new Foreword;
- thanks to Antonio Columbo for the catch. Update latest version
+ thanks to Antonio Colombo for the catch. Update latest version
of gettext.
2014-10-15 Arnold D. Robbins <arnold@skeeve.com>
diff --git a/doc/gawk.info b/doc/gawk.info
index afdc99b9..7e548a8e 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -246,6 +246,7 @@ entitled "GNU Free Documentation License".
* Special Caveats:: Things to watch out for.
* Close Files And Pipes:: Closing Input and Output Files and
Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -954,7 +955,7 @@ provided in *note Language History::. The language described in this
Info file is often referred to as "new `awk'." By analogy, the
original version of `awk' is referred to as "old `awk'."
- Today, on most systems, when you run the `awk' utility you get some
+ On most current systems, when you run the `awk' utility you get some
version of new `awk'.(1) If your system's standard `awk' is the old
one, you will see something like this if you try the test program:
@@ -1874,7 +1875,7 @@ file surrounded by double quotes:

File: gawk.info, Node: Sample Data Files, Next: Very Simple, Prev: Running gawk, Up: Getting Started
-1.2 Data Files for the Examples
+1.2 Data files for the Examples
===============================
Many of the examples in this Info file take their input from two sample
@@ -3013,7 +3014,8 @@ used by regular users:
`GAWK_SOCK_RETRIES'
Controls the number of times `gawk' attempts to retry a two-way
TCP/IP (socket) connection before giving up. *Note TCP/IP
- Networking::.
+ Networking::. Note that when nonfatal I/O is enabled (*note
+ Nonfatal::), `gawk' only tries to open a TCP/IP socket once.
`POSIXLY_CORRECT'
Causes `gawk' to switch to POSIX-compatibility mode, disabling all
@@ -6128,6 +6130,7 @@ function.
`gawk' allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@@ -6525,7 +6528,7 @@ which they may appear:
messages at runtime. *Note Printf Ordering::, which describes how
and why to use positional specifiers. For now, we ignore them.
-`- (Minus)'
+`-' (Minus)
The minus sign, used before the width modifier (see later on in
this list), says to left-justify the argument within its specified
width. Normally, the argument is printed right-justified in the
@@ -6535,7 +6538,7 @@ which they may appear:
prints `foo*'.
-`SPACE'
+SPACE
For numeric conversions, prefix positive values with a space and
negative values with a minus sign.
@@ -6580,7 +6583,7 @@ which they may appear:
programs. For information on appropriate quoting tricks, see
*note Quoting::.
-`WIDTH'
+WIDTH
This is a number specifying the desired minimum width of a field.
Inserting any number between the `%' sign and the format-control
character forces the field to expand to this width. The default
@@ -6958,7 +6961,7 @@ option (*note Options::).

File: gawk.info, Node: Special Files, Next: Close Files And Pipes, Prev: Special FD, Up: Printing
-5.8 Special File Names in `gawk'
+5.8 Special File names in `gawk'
================================
Besides access to standard input, standard output, and standard error,
@@ -7019,7 +7022,7 @@ mentioned here only for completeness. Full discussion is delayed until

File: gawk.info, Node: Special Caveats, Prev: Special Network, Up: Special Files
-5.8.3 Special File Name Caveats
+5.8.3 Special File name Caveats
-------------------------------
Here are some things to bear in mind when using the special file names
@@ -7041,7 +7044,7 @@ that `gawk' provides:
behavior.

-File: gawk.info, Node: Close Files And Pipes, Next: Output Summary, Prev: Special Files, Up: Printing
+File: gawk.info, Node: Close Files And Pipes, Next: Nonfatal, Prev: Special Files, Up: Printing
5.9 Closing Input and Output Redirections
=========================================
@@ -7210,9 +7213,68 @@ call. See the system manual pages for information on how to decode this
value.

-File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Close Files And Pipes, Up: Printing
+File: gawk.info, Node: Nonfatal, Next: Output Summary, Prev: Close Files And Pipes, Up: Printing
-5.10 Summary
+5.10 Enabling Nonfatal Output
+=============================
+
+This minor node describes a `gawk'-specific feature.
+
+ In standard `awk', output with `print' or `printf' to a nonexistent
+file, or some other I/O error (such as filling up the disk) is a fatal
+error.
+
+ $ gawk 'BEGIN { print "hi" > "/no/such/file" }'
+ error--> gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No such file or directory)
+
+ `gawk' makes it possible to detect that an error has occurred,
+allowing you to possibly recover from the error, or at least print an
+error message of your choosing before exiting. You can do this in one
+of two ways:
+
+ * For all output files, by assigning any value to
+ `PROCINFO["NONFATAL"]'.
+
+ * On a per-file basis, by assigning any value to `PROCINFO[FILENAME,
+ "NONFATAL"]'. Here, FILENAME is the name of the file to which you
+ wish output to be nonfatal.
+
+ Once you have enabled nonfatal output, you must check `ERRNO' after
+every relevant `print' or `printf' statement to see if something went
+wrong. It is also a good idea to initialize `ERRNO' to zero before
+attempting the output. For example:
+
+ $ gawk '
+ > BEGIN {
+ > PROCINFO["NONFATAL"] = 1
+ > ERRNO = 0
+ > print "hi" > "/no/such/file"
+ > if (ERRNO) {
+ > print("Output failed:", ERRNO) > "/dev/stderr"
+ > exit 1
+ > }
+ > }'
+ error--> Output failed: No such file or directory
+
+ Here, `gawk' did not produce a fatal error; instead it let the `awk'
+program code detect the problem and handle it.
+
+ This mechanism works also for standard output and standard error.
+For standard output, you may use `PROCINFO["-", "NONFATAL"]' or
+`PROCINFO["/dev/stdout", "NONFATAL"]'. For standard error, use
+`PROCINFO["/dev/stderr", "NONFATAL"]'.
+
+ When attempting to open a TCP/IP socket (*note TCP/IP Networking::),
+`gawk' tries multiple times. The `GAWK_SOCK_RETRIES' environment
+variable (*note Other Environment Variables::) allows you to override
+`gawk''s builtin default number of attempts. However, once nonfatal
+I/O is enabled for a given socket, `gawk' only retries once, relying on
+`awk'-level code to notice that there was a problem.
+
+
+File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Nonfatal, Up: Printing
+
+5.11 Summary
============
* The `print' statement prints comma-separated expressions. Each
@@ -7234,11 +7296,16 @@ File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Close Fi
For coprocesses, it is possible to close only one direction of the
communications.
+ * Normally errors with `print' or `printf' are fatal. `gawk' lets
+ you make output errors be nonfatal either for all files or on a
+ per-file basis. You must then check for errors after every
+ relevant output statement.
+

File: gawk.info, Node: Output Exercises, Prev: Output Summary, Up: Printing
-5.11 Exercises
+5.12 Exercises
==============
1. Rewrite the program:
@@ -9821,12 +9888,12 @@ divisor of any integer, and also identifies prime numbers:
# find smallest divisor of num
{
num = $1
- for (div = 2; div * div <= num; div++) {
- if (num % div == 0)
+ for (divisor = 2; divisor * divisor <= num; divisor++) {
+ if (num % divisor == 0)
break
}
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
+ if (num % divisor == 0)
+ printf "Smallest divisor of %d is %d\n", num, divisor
else
printf "%d is prime\n", num
}
@@ -9844,12 +9911,12 @@ Statement::.)
# find smallest divisor of num
{
num = $1
- for (div = 2; ; div++) {
- if (num % div == 0) {
- printf "Smallest divisor of %d is %d\n", num, div
+ for (divisor = 2; ; divisor++) {
+ if (num % divisor == 0) {
+ printf "Smallest divisor of %d is %d\n", num, divisor
break
}
- if (div * div > num) {
+ if (divisor * divisor > num) {
printf "%d is prime\n", num
break
}
@@ -10184,15 +10251,14 @@ description of each variable.)
`IGNORECASE #'
If `IGNORECASE' is nonzero or non-null, then all string comparisons
- and all regular expression matching are case-independent. Thus,
- regexp matching with `~' and `!~', as well as the `gensub()',
+ and all regular expression matching are case-independent. This
+ applies to regexp matching with `~' and `!~', the `gensub()',
`gsub()', `index()', `match()', `patsplit()', `split()', and
`sub()' functions, record termination with `RS', and field
- splitting with `FS' and `FPAT', all ignore case when doing their
- particular regexp operations. However, the value of `IGNORECASE'
- does _not_ affect array subscripting and it does not affect field
- splitting when using a single-character field separator. *Note
- Case-sensitivity::.
+ splitting with `FS' and `FPAT'. However, the value of
+ `IGNORECASE' does _not_ affect array subscripting and it does not
+ affect field splitting when using a single-character field
+ separator. *Note Case-sensitivity::.
`LINT #'
When this variable is true (nonzero or non-null), `gawk' behaves
@@ -12030,7 +12096,7 @@ numbers.
(2) `mawk' uses a different seed each time.
(3) Computer-generated random numbers really are not truly random.
-They are technically known as "pseudorandom." This means that although
+They are technically known as "pseudorandom". This means that although
the numbers in a sequence appear to be random, you can in fact generate
the same sequence of random numbers over and over again.
@@ -14318,61 +14384,7 @@ names of the two comparison functions:
-| rsort: <100.0 95.6 93.4 87.1>
Another example where indirect functions calls are useful can be
-found in processing arrays. *note Walking Arrays::, presented a simple
-function for "walking" an array of arrays. That function simply
-printed the name and value of each scalar array element. However, it is
-easy to generalize that function, by passing in the name of a function
-to call when walking an array. The modified function looks like this:
-
- function process_array(arr, name, process, do_arrays, i, new_name)
- {
- for (i in arr) {
- new_name = (name "[" i "]")
- if (isarray(arr[i])) {
- if (do_arrays)
- @process(new_name, arr[i])
- process_array(arr[i], new_name, process, do_arrays)
- } else
- @process(new_name, arr[i])
- }
- }
-
- The arguments are as follows:
-
-`arr'
- The array.
-
-`name'
- The name of the array (a string).
-
-`process'
- The name of the function to call.
-
-`do_arrays'
- If this is true, the function can handle elements that are
- subarrays.
-
- If subarrays are to be processed, that is done before walking them
-further.
-
- When run with the following scaffolding, the function produces the
-same results as does the earlier `walk_array()' function:
-
- BEGIN {
- a[1] = 1
- a[2][1] = 21
- a[2][2] = 22
- a[3] = 3
- a[4][1][1] = 411
- a[4][2] = 42
-
- process_array(a, "a", "do_print", 0)
- }
-
- function do_print(name, element)
- {
- printf "%s = %s\n", name, element
- }
+found in processing arrays. This is described in *note Walking Arrays::.
Remember that you must supply a leading `@' in front of an indirect
function call.
@@ -15240,7 +15252,7 @@ three-character string `"\"'\""':

File: gawk.info, Node: Data File Management, Next: Getopt Function, Prev: General Functions, Up: Library Functions
-10.3 Data File Management
+10.3 Data file Management
=========================
This minor node presents functions that are useful for managing
@@ -15257,7 +15269,7 @@ command-line data files.

File: gawk.info, Node: Filetrans Function, Next: Rewind Function, Up: Data File Management
-10.3.1 Noting Data File Boundaries
+10.3.1 Noting Data file Boundaries
----------------------------------
The `BEGIN' and `END' rules are each executed exactly once, at the
@@ -15395,7 +15407,7 @@ rule finishes!)

File: gawk.info, Node: File Checking, Next: Empty Files, Prev: Rewind Function, Up: Data File Management
-10.3.3 Checking for Readable Data Files
+10.3.3 Checking for Readable Data files
---------------------------------------
Normally, if you give `awk' a data file that isn't readable, it stops
@@ -15485,7 +15497,7 @@ of the `for' loop uses the `<=' operator, not `<'.

File: gawk.info, Node: Ignoring Assigns, Prev: Empty Files, Up: Data File Management
-10.3.5 Treating Assignments as File Names
+10.3.5 Treating Assignments as File names
-----------------------------------------
Occasionally, you might not want `awk' to process command-line variable
@@ -16349,6 +16361,61 @@ value. Here is a main program to demonstrate:
-| a[4][1][1] = 411
-| a[4][2] = 42
+ The function just presented simply prints the name and value of each
+scalar array element. However, it is easy to generalize it, by passing
+in the name of a function to call when walking an array. The modified
+function looks like this:
+
+ function process_array(arr, name, process, do_arrays, i, new_name)
+ {
+ for (i in arr) {
+ new_name = (name "[" i "]")
+ if (isarray(arr[i])) {
+ if (do_arrays)
+ @process(new_name, arr[i])
+ process_array(arr[i], new_name, process, do_arrays)
+ } else
+ @process(new_name, arr[i])
+ }
+ }
+
+ The arguments are as follows:
+
+`arr'
+ The array.
+
+`name'
+ The name of the array (a string).
+
+`process'
+ The name of the function to call.
+
+`do_arrays'
+ If this is true, the function can handle elements that are
+ subarrays.
+
+ If subarrays are to be processed, that is done before walking them
+further.
+
+ When run with the following scaffolding, the function produces the
+same results as does the earlier version of `walk_array()':
+
+ BEGIN {
+ a[1] = 1
+ a[2][1] = 21
+ a[2][2] = 22
+ a[3] = 3
+ a[4][1][1] = 411
+ a[4][2] = 42
+
+ process_array(a, "a", "do_print", 0)
+ }
+
+ function do_print(name, element)
+ {
+ printf "%s = %s\n", name, element
+ }
+

File: gawk.info, Node: Library Functions Summary, Next: Library Exercises, Prev: Walking Arrays, Up: Library Functions
@@ -16383,7 +16450,7 @@ File: gawk.info, Node: Library Functions Summary, Next: Library Exercises, Pr
Two sets of routines that parallel the C library versions
Traversing arrays of arrays
- A simple function to traverse an array of arrays to any depth
+ Two functions that traverse an array of arrays to any depth

@@ -22677,9 +22744,9 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob
using the GMP library. This is faster and more space-efficient
than using MPFR for the same calculations.
- * There are several "dark corners" with respect to floating-point
- numbers where `gawk' disagrees with the POSIX standard. It pays
- to be aware of them.
+ * There are several areas with respect to floating-point numbers
+ where `gawk' disagrees with the POSIX standard. It pays to be
+ aware of them.
* Overall, there is no need to be unduly suspicious about the
results from floating-point arithmetic. The lesson to remember is
@@ -23272,14 +23339,14 @@ This node presents them all as function prototypes, in the way that
extension code would use them:
`static inline awk_value_t *'
-`make_const_string(const char *string, size_t length, awk_value_t *result)'
+`make_const_string(const char *string, size_t length, awk_value_t *result);'
This function creates a string value in the `awk_value_t' variable
pointed to by `result'. It expects `string' to be a C string
constant (or other string data), and automatically creates a
_copy_ of the data for storage in `result'. It returns `result'.
`static inline awk_value_t *'
-`make_malloced_string(const char *string, size_t length, awk_value_t *result)'
+`make_malloced_string(const char *string, size_t length, awk_value_t *result);'
This function creates a string value in the `awk_value_t' variable
pointed to by `result'. It expects `string' to be a `char *' value
pointing to data previously obtained from `gawk_malloc()',
@@ -23288,13 +23355,13 @@ extension code would use them:
for it. It returns `result'.
`static inline awk_value_t *'
-`make_null_string(awk_value_t *result)'
+`make_null_string(awk_value_t *result);'
This specialized function creates a null string (the "undefined"
value) in the `awk_value_t' variable pointed to by `result'. It
returns `result'.
`static inline awk_value_t *'
-`make_number(double num, awk_value_t *result)'
+`make_number(double num, awk_value_t *result);'
This function simply creates a numeric value in the `awk_value_t'
variable pointed to by `result'.
@@ -26479,6 +26546,9 @@ the current version of `gawk'.
- Directories on the command line produce a warning and are
skipped (*note Command-line directories::)
+ - Output with `print' and `printf' need not be fatal (*note
+ Nonfatal::)
+
* New keywords:
- The `BEGINFILE' and `ENDFILE' special patterns (*note
@@ -26994,6 +27064,8 @@ in POSIX `awk', in the order they were added to `gawk'.
* The maximum number of hexdecimal digits in `\x' escapes is now two.
*Note Escape Sequences::.
+ * Nonfatal output with `print' and `printf'. *Note Nonfatal::.
+
* Support for MirBSD was removed.

@@ -32674,7 +32746,7 @@ Index
(line 6)
* differences in awk and gawk, line continuations: Conditional Exp.
(line 34)
-* differences in awk and gawk, LINT variable: User-modified. (line 88)
+* differences in awk and gawk, LINT variable: User-modified. (line 87)
* differences in awk and gawk, match() function: String Functions.
(line 263)
* differences in awk and gawk, print/printf statements: Format Modifiers.
@@ -32699,7 +32771,7 @@ Index
(line 77)
* differences in awk and gawk, SYMTAB variable: Auto-set. (line 283)
* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
- (line 152)
+ (line 151)
* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
(line 66)
* directories, command-line: Command-line directories.
@@ -33162,7 +33234,7 @@ Index
(line 6)
* gawk, interval expressions and: Regexp Operators. (line 139)
* gawk, line continuation in: Conditional Exp. (line 34)
-* gawk, LINT variable in: User-modified. (line 88)
+* gawk, LINT variable in: User-modified. (line 87)
* gawk, list of contributors to: Contributors. (line 6)
* gawk, MS-DOS version of: PC Using. (line 10)
* gawk, MS-Windows version of: PC Using. (line 10)
@@ -33188,7 +33260,7 @@ Index
* gawk, splitting fields and: Constant Size. (line 87)
* gawk, string-translation functions: I18N Functions. (line 6)
* gawk, SYMTAB array in: Auto-set. (line 283)
-* gawk, TEXTDOMAIN variable in: User-modified. (line 152)
+* gawk, TEXTDOMAIN variable in: User-modified. (line 151)
* gawk, timestamps: Time Functions. (line 6)
* gawk, uses for: Preface. (line 34)
* gawk, versions of, information about, printing: Options. (line 300)
@@ -33392,7 +33464,7 @@ Index
* internationalization: I18N Functions. (line 6)
* internationalization, localization <1>: Internationalization.
(line 13)
-* internationalization, localization: User-modified. (line 152)
+* internationalization, localization: User-modified. (line 151)
* internationalization, localization, character classes: Bracket Expressions.
(line 101)
* internationalization, localization, gawk and: Internationalization.
@@ -33502,7 +33574,7 @@ Index
* lines, duplicate, removing: History Sorting. (line 6)
* lines, matching ranges of: Ranges. (line 6)
* lines, skipping between markers: Ranges. (line 43)
-* lint checking: User-modified. (line 88)
+* lint checking: User-modified. (line 87)
* lint checking, array elements: Delete. (line 34)
* lint checking, array subscripts: Uninitialized Subscripts.
(line 43)
@@ -33512,7 +33584,7 @@ Index
(line 339)
* lint checking, undefined functions: Pass By Value/Reference.
(line 85)
-* LINT variable: User-modified. (line 88)
+* LINT variable: User-modified. (line 87)
* Linux <1>: Glossary. (line 753)
* Linux <2>: I18N Example. (line 55)
* Linux: Manual History. (line 28)
@@ -33684,11 +33756,11 @@ Index
* obsolete features: Obsolete. (line 6)
* octal numbers: Nondecimal-numbers. (line 6)
* octal values, enabling interpretation of: Options. (line 211)
-* OFMT variable <1>: User-modified. (line 105)
+* OFMT variable <1>: User-modified. (line 104)
* OFMT variable <2>: Strings And Numbers. (line 57)
* OFMT variable: OFMT. (line 15)
* OFMT variable, POSIX awk and: OFMT. (line 27)
-* OFS variable <1>: User-modified. (line 114)
+* OFS variable <1>: User-modified. (line 113)
* OFS variable <2>: Output Separators. (line 6)
* OFS variable: Changing Fields. (line 64)
* OpenBSD: Glossary. (line 753)
@@ -33741,7 +33813,7 @@ Index
(line 12)
* ord() user-defined function: Ordinal Functions. (line 16)
* order of evaluation, concatenation: Concatenation. (line 41)
-* ORS variable <1>: User-modified. (line 119)
+* ORS variable <1>: User-modified. (line 118)
* ORS variable: Output Separators. (line 21)
* output field separator, See OFS variable: Changing Fields. (line 64)
* output record separator, See ORS variable: Output Separators.
@@ -33881,7 +33953,7 @@ Index
* POSIX, gawk extensions not included in: POSIX/GNU. (line 6)
* POSIX, programs, implementing in awk: Clones. (line 6)
* POSIXLY_CORRECT environment variable: Options. (line 339)
-* PREC variable: User-modified. (line 124)
+* PREC variable: User-modified. (line 123)
* precedence <1>: Precedence. (line 6)
* precedence: Increment Ops. (line 60)
* precedence, regexp operators: Regexp Operators. (line 156)
@@ -33896,7 +33968,7 @@ Index
* print statement, commas, omitting: Print Examples. (line 31)
* print statement, I/O operators in: Precedence. (line 71)
* print statement, line continuations and: Print Examples. (line 76)
-* print statement, OFMT variable and: User-modified. (line 114)
+* print statement, OFMT variable and: User-modified. (line 113)
* print statement, See Also redirection, of output: Redirection.
(line 17)
* print statement, sprintf() function and: Round Function. (line 6)
@@ -34011,7 +34083,7 @@ Index
* readfile() user-defined function: Readfile Function. (line 30)
* reading input files: Reading Files. (line 6)
* recipe for a programming language: History. (line 6)
-* record separators <1>: User-modified. (line 133)
+* record separators <1>: User-modified. (line 132)
* record separators: awk split records. (line 6)
* record separators, changing: awk split records. (line 85)
* record separators, regular expressions as: awk split records.
@@ -34123,8 +34195,8 @@ Index
* round to nearest integer: Numeric Functions. (line 38)
* round() user-defined function: Round Function. (line 16)
* rounding numbers: Round Function. (line 6)
-* ROUNDMODE variable: User-modified. (line 128)
-* RS variable <1>: User-modified. (line 133)
+* ROUNDMODE variable: User-modified. (line 127)
+* RS variable <1>: User-modified. (line 132)
* RS variable: awk split records. (line 12)
* RS variable, multiline records and: Multiple Line. (line 17)
* rshift: Bitwise Functions. (line 53)
@@ -34181,12 +34253,12 @@ Index
* separators, field, FIELDWIDTHS variable and: User-modified. (line 37)
* separators, field, FPAT variable and: User-modified. (line 43)
* separators, field, POSIX and: Fields. (line 6)
-* separators, for records <1>: User-modified. (line 133)
+* separators, for records <1>: User-modified. (line 132)
* separators, for records: awk split records. (line 6)
* separators, for records, regular expressions as: awk split records.
(line 125)
* separators, for statements in actions: Action Overview. (line 19)
-* separators, subscript: User-modified. (line 146)
+* separators, subscript: User-modified. (line 145)
* set breakpoint: Breakpoint Control. (line 11)
* set debugger command: Viewing And Changing Data.
(line 59)
@@ -34318,7 +34390,7 @@ Index
* split.awk program: Split Program. (line 30)
* sprintf <1>: String Functions. (line 384)
* sprintf: OFMT. (line 15)
-* sprintf() function, OFMT variable and: User-modified. (line 114)
+* sprintf() function, OFMT variable and: User-modified. (line 113)
* sprintf() function, print/printf statements and: Round Function.
(line 6)
* sqrt: Numeric Functions. (line 92)
@@ -34380,7 +34452,7 @@ Index
(line 43)
* sub() function, arguments of: String Functions. (line 463)
* sub() function, escape processing: Gory Details. (line 6)
-* subscript separators: User-modified. (line 146)
+* subscript separators: User-modified. (line 145)
* subscripts in arrays, multidimensional: Multidimensional. (line 10)
* subscripts in arrays, multidimensional, scanning: Multiscanning.
(line 11)
@@ -34388,7 +34460,7 @@ Index
(line 6)
* subscripts in arrays, uninitialized variables as: Uninitialized Subscripts.
(line 6)
-* SUBSEP variable: User-modified. (line 146)
+* SUBSEP variable: User-modified. (line 145)
* SUBSEP variable, and multidimensional arrays: Multidimensional.
(line 16)
* substitute in string: String Functions. (line 90)
@@ -34427,7 +34499,7 @@ Index
* text, printing: Print. (line 22)
* text, printing, unduplicated lines of: Uniq Program. (line 6)
* TEXTDOMAIN variable <1>: Programmer i18n. (line 8)
-* TEXTDOMAIN variable: User-modified. (line 152)
+* TEXTDOMAIN variable: User-modified. (line 151)
* TEXTDOMAIN variable, BEGIN pattern and: Programmer i18n. (line 60)
* TEXTDOMAIN variable, portability and: I18N Portability. (line 20)
* textdomain() function (C library): Explaining gettext. (line 28)
@@ -34667,560 +34739,561 @@ Index

Tag Table:
Node: Top1204
-Node: Foreword342225
-Node: Foreword446669
-Node: Preface48200
-Ref: Preface-Footnote-151071
-Ref: Preface-Footnote-251178
-Ref: Preface-Footnote-351411
-Node: History51553
-Node: Names53904
-Ref: Names-Footnote-154997
-Node: This Manual55143
-Ref: This Manual-Footnote-161643
-Node: Conventions61743
-Node: Manual History64080
-Ref: Manual History-Footnote-167073
-Ref: Manual History-Footnote-267114
-Node: How To Contribute67188
-Node: Acknowledgments68317
-Node: Getting Started73183
-Node: Running gawk75622
-Node: One-shot76812
-Node: Read Terminal78076
-Node: Long80107
-Node: Executable Scripts81620
-Ref: Executable Scripts-Footnote-184409
-Node: Comments84512
-Node: Quoting86994
-Node: DOS Quoting92512
-Node: Sample Data Files93187
-Node: Very Simple95782
-Node: Two Rules100681
-Node: More Complex102567
-Node: Statements/Lines105429
-Ref: Statements/Lines-Footnote-1109884
-Node: Other Features110149
-Node: When111085
-Ref: When-Footnote-1112839
-Node: Intro Summary112904
-Node: Invoking Gawk113788
-Node: Command Line115302
-Node: Options116100
-Ref: Options-Footnote-1131895
-Ref: Options-Footnote-2132124
-Node: Other Arguments132149
-Node: Naming Standard Input135097
-Node: Environment Variables136190
-Node: AWKPATH Variable136748
-Ref: AWKPATH Variable-Footnote-1140155
-Ref: AWKPATH Variable-Footnote-2140200
-Node: AWKLIBPATH Variable140460
-Node: Other Environment Variables141716
-Node: Exit Status145234
-Node: Include Files145910
-Node: Loading Shared Libraries149499
-Node: Obsolete150926
-Node: Undocumented151618
-Node: Invoking Summary151885
-Node: Regexp153548
-Node: Regexp Usage155002
-Node: Escape Sequences157039
-Node: Regexp Operators163268
-Ref: Regexp Operators-Footnote-1170678
-Ref: Regexp Operators-Footnote-2170825
-Node: Bracket Expressions170923
-Ref: table-char-classes172938
-Node: Leftmost Longest175880
-Node: Computed Regexps177182
-Node: GNU Regexp Operators180611
-Node: Case-sensitivity184283
-Ref: Case-sensitivity-Footnote-1187168
-Ref: Case-sensitivity-Footnote-2187403
-Node: Regexp Summary187511
-Node: Reading Files188978
-Node: Records191071
-Node: awk split records191804
-Node: gawk split records196733
-Ref: gawk split records-Footnote-1201272
-Node: Fields201309
-Ref: Fields-Footnote-1204087
-Node: Nonconstant Fields204173
-Ref: Nonconstant Fields-Footnote-1206411
-Node: Changing Fields206614
-Node: Field Separators212545
-Node: Default Field Splitting215249
-Node: Regexp Field Splitting216366
-Node: Single Character Fields219716
-Node: Command Line Field Separator220775
-Node: Full Line Fields223992
-Ref: Full Line Fields-Footnote-1225513
-Ref: Full Line Fields-Footnote-2225559
-Node: Field Splitting Summary225660
-Node: Constant Size227734
-Node: Splitting By Content232317
-Ref: Splitting By Content-Footnote-1236282
-Node: Multiple Line236445
-Ref: Multiple Line-Footnote-1242326
-Node: Getline242505
-Node: Plain Getline244712
-Node: Getline/Variable247352
-Node: Getline/File248501
-Node: Getline/Variable/File249886
-Ref: Getline/Variable/File-Footnote-1251489
-Node: Getline/Pipe251576
-Node: Getline/Variable/Pipe254254
-Node: Getline/Coprocess255385
-Node: Getline/Variable/Coprocess256649
-Node: Getline Notes257388
-Node: Getline Summary260182
-Ref: table-getline-variants260594
-Node: Read Timeout261423
-Ref: Read Timeout-Footnote-1265260
-Node: Command-line directories265318
-Node: Input Summary266223
-Node: Input Exercises269608
-Node: Printing270336
-Node: Print272113
-Node: Print Examples273570
-Node: Output Separators276349
-Node: OFMT278367
-Node: Printf279722
-Node: Basic Printf280507
-Node: Control Letters282079
-Node: Format Modifiers286064
-Node: Printf Examples292074
-Node: Redirection294560
-Node: Special FD301398
-Ref: Special FD-Footnote-1304564
-Node: Special Files304638
-Node: Other Inherited Files305255
-Node: Special Network306255
-Node: Special Caveats307117
-Node: Close Files And Pipes308066
-Ref: Close Files And Pipes-Footnote-1315257
-Ref: Close Files And Pipes-Footnote-2315405
-Node: Output Summary315555
-Node: Output Exercises316553
-Node: Expressions317233
-Node: Values318422
-Node: Constants319099
-Node: Scalar Constants319790
-Ref: Scalar Constants-Footnote-1320652
-Node: Nondecimal-numbers320902
-Node: Regexp Constants323912
-Node: Using Constant Regexps324438
-Node: Variables327601
-Node: Using Variables328258
-Node: Assignment Options330169
-Node: Conversion332044
-Node: Strings And Numbers332568
-Ref: Strings And Numbers-Footnote-1335633
-Node: Locale influences conversions335742
-Ref: table-locale-affects338488
-Node: All Operators339080
-Node: Arithmetic Ops339709
-Node: Concatenation342214
-Ref: Concatenation-Footnote-1345033
-Node: Assignment Ops345140
-Ref: table-assign-ops350119
-Node: Increment Ops351429
-Node: Truth Values and Conditions354860
-Node: Truth Values355943
-Node: Typing and Comparison356992
-Node: Variable Typing357808
-Node: Comparison Operators361475
-Ref: table-relational-ops361885
-Node: POSIX String Comparison365380
-Ref: POSIX String Comparison-Footnote-1366452
-Node: Boolean Ops366591
-Ref: Boolean Ops-Footnote-1371069
-Node: Conditional Exp371160
-Node: Function Calls372898
-Node: Precedence376778
-Node: Locales380438
-Node: Expressions Summary382070
-Node: Patterns and Actions384641
-Node: Pattern Overview385761
-Node: Regexp Patterns387440
-Node: Expression Patterns387983
-Node: Ranges391763
-Node: BEGIN/END394870
-Node: Using BEGIN/END395631
-Ref: Using BEGIN/END-Footnote-1398367
-Node: I/O And BEGIN/END398473
-Node: BEGINFILE/ENDFILE400788
-Node: Empty403685
-Node: Using Shell Variables404002
-Node: Action Overview406275
-Node: Statements408601
-Node: If Statement410449
-Node: While Statement411944
-Node: Do Statement413972
-Node: For Statement415120
-Node: Switch Statement418278
-Node: Break Statement420660
-Node: Continue Statement422701
-Node: Next Statement424528
-Node: Nextfile Statement426909
-Node: Exit Statement429537
-Node: Built-in Variables431948
-Node: User-modified433081
-Ref: User-modified-Footnote-1440784
-Node: Auto-set440846
-Ref: Auto-set-Footnote-1454555
-Ref: Auto-set-Footnote-2454760
-Node: ARGC and ARGV454816
-Node: Pattern Action Summary459034
-Node: Arrays461467
-Node: Array Basics462796
-Node: Array Intro463640
-Ref: figure-array-elements465574
-Ref: Array Intro-Footnote-1468194
-Node: Reference to Elements468322
-Node: Assigning Elements470784
-Node: Array Example471275
-Node: Scanning an Array473034
-Node: Controlling Scanning476054
-Ref: Controlling Scanning-Footnote-1481448
-Node: Numeric Array Subscripts481764
-Node: Uninitialized Subscripts483949
-Node: Delete485566
-Ref: Delete-Footnote-1488315
-Node: Multidimensional488372
-Node: Multiscanning491469
-Node: Arrays of Arrays493058
-Node: Arrays Summary497812
-Node: Functions499903
-Node: Built-in500942
-Node: Calling Built-in502020
-Node: Numeric Functions504015
-Ref: Numeric Functions-Footnote-1508833
-Ref: Numeric Functions-Footnote-2509190
-Ref: Numeric Functions-Footnote-3509238
-Node: String Functions509510
-Ref: String Functions-Footnote-1533011
-Ref: String Functions-Footnote-2533140
-Ref: String Functions-Footnote-3533388
-Node: Gory Details533475
-Ref: table-sub-escapes535256
-Ref: table-sub-proposed536771
-Ref: table-posix-sub538133
-Ref: table-gensub-escapes539670
-Ref: Gory Details-Footnote-1540503
-Node: I/O Functions540654
-Ref: I/O Functions-Footnote-1547890
-Node: Time Functions548037
-Ref: Time Functions-Footnote-1558546
-Ref: Time Functions-Footnote-2558614
-Ref: Time Functions-Footnote-3558772
-Ref: Time Functions-Footnote-4558883
-Ref: Time Functions-Footnote-5558995
-Ref: Time Functions-Footnote-6559222
-Node: Bitwise Functions559488
-Ref: table-bitwise-ops560050
-Ref: Bitwise Functions-Footnote-1564378
-Node: Type Functions564550
-Node: I18N Functions565702
-Node: User-defined567349
-Node: Definition Syntax568154
-Ref: Definition Syntax-Footnote-1573813
-Node: Function Example573884
-Ref: Function Example-Footnote-1576805
-Node: Function Caveats576827
-Node: Calling A Function577345
-Node: Variable Scope578303
-Node: Pass By Value/Reference581296
-Node: Return Statement584793
-Node: Dynamic Typing587772
-Node: Indirect Calls588701
-Ref: Indirect Calls-Footnote-1600007
-Node: Functions Summary600135
-Node: Library Functions602837
-Ref: Library Functions-Footnote-1606445
-Ref: Library Functions-Footnote-2606588
-Node: Library Names606759
-Ref: Library Names-Footnote-1610217
-Ref: Library Names-Footnote-2610440
-Node: General Functions610526
-Node: Strtonum Function611629
-Node: Assert Function614651
-Node: Round Function617975
-Node: Cliff Random Function619516
-Node: Ordinal Functions620532
-Ref: Ordinal Functions-Footnote-1623595
-Ref: Ordinal Functions-Footnote-2623847
-Node: Join Function624058
-Ref: Join Function-Footnote-1625828
-Node: Getlocaltime Function626028
-Node: Readfile Function629772
-Node: Shell Quoting631744
-Node: Data File Management633145
-Node: Filetrans Function633777
-Node: Rewind Function637873
-Node: File Checking639259
-Ref: File Checking-Footnote-1640592
-Node: Empty Files640793
-Node: Ignoring Assigns642772
-Node: Getopt Function644322
-Ref: Getopt Function-Footnote-1655786
-Node: Passwd Functions655986
-Ref: Passwd Functions-Footnote-1664826
-Node: Group Functions664914
-Ref: Group Functions-Footnote-1672811
-Node: Walking Arrays673016
-Node: Library Functions Summary674616
-Node: Library Exercises676020
-Node: Sample Programs677300
-Node: Running Examples678070
-Node: Clones678798
-Node: Cut Program680022
-Node: Egrep Program689742
-Ref: Egrep Program-Footnote-1697245
-Node: Id Program697355
-Node: Split Program701031
-Ref: Split Program-Footnote-1704485
-Node: Tee Program704613
-Node: Uniq Program707402
-Node: Wc Program714821
-Ref: Wc Program-Footnote-1719071
-Node: Miscellaneous Programs719165
-Node: Dupword Program720378
-Node: Alarm Program722409
-Node: Translate Program727214
-Ref: Translate Program-Footnote-1731777
-Node: Labels Program732047
-Ref: Labels Program-Footnote-1735398
-Node: Word Sorting735482
-Node: History Sorting739552
-Node: Extract Program741387
-Node: Simple Sed748911
-Node: Igawk Program751981
-Ref: Igawk Program-Footnote-1766307
-Ref: Igawk Program-Footnote-2766508
-Ref: Igawk Program-Footnote-3766630
-Node: Anagram Program766745
-Node: Signature Program769806
-Node: Programs Summary771053
-Node: Programs Exercises772274
-Ref: Programs Exercises-Footnote-1776405
-Node: Advanced Features776496
-Node: Nondecimal Data778478
-Node: Array Sorting780068
-Node: Controlling Array Traversal780768
-Ref: Controlling Array Traversal-Footnote-1789134
-Node: Array Sorting Functions789252
-Ref: Array Sorting Functions-Footnote-1793138
-Node: Two-way I/O793334
-Ref: Two-way I/O-Footnote-1798279
-Ref: Two-way I/O-Footnote-2798465
-Node: TCP/IP Networking798547
-Node: Profiling801419
-Node: Advanced Features Summary809690
-Node: Internationalization811623
-Node: I18N and L10N813103
-Node: Explaining gettext813789
-Ref: Explaining gettext-Footnote-1818814
-Ref: Explaining gettext-Footnote-2818998
-Node: Programmer i18n819163
-Ref: Programmer i18n-Footnote-1824039
-Node: Translator i18n824088
-Node: String Extraction824882
-Ref: String Extraction-Footnote-1826013
-Node: Printf Ordering826099
-Ref: Printf Ordering-Footnote-1828885
-Node: I18N Portability828949
-Ref: I18N Portability-Footnote-1831405
-Node: I18N Example831468
-Ref: I18N Example-Footnote-1834271
-Node: Gawk I18N834343
-Node: I18N Summary834987
-Node: Debugger836327
-Node: Debugging837349
-Node: Debugging Concepts837790
-Node: Debugging Terms839600
-Node: Awk Debugging842172
-Node: Sample Debugging Session843078
-Node: Debugger Invocation843612
-Node: Finding The Bug844997
-Node: List of Debugger Commands851476
-Node: Breakpoint Control852808
-Node: Debugger Execution Control856485
-Node: Viewing And Changing Data859844
-Node: Execution Stack863220
-Node: Debugger Info864855
-Node: Miscellaneous Debugger Commands868900
-Node: Readline Support873901
-Node: Limitations874795
-Node: Debugging Summary876910
-Node: Arbitrary Precision Arithmetic878084
-Node: Computer Arithmetic879500
-Ref: table-numeric-ranges883099
-Ref: Computer Arithmetic-Footnote-1883623
-Node: Math Definitions883680
-Ref: table-ieee-formats886975
-Ref: Math Definitions-Footnote-1887579
-Node: MPFR features887684
-Node: FP Math Caution889355
-Ref: FP Math Caution-Footnote-1890405
-Node: Inexactness of computations890774
-Node: Inexact representation891733
-Node: Comparing FP Values893091
-Node: Errors accumulate894173
-Node: Getting Accuracy895605
-Node: Try To Round898309
-Node: Setting precision899208
-Ref: table-predefined-precision-strings899892
-Node: Setting the rounding mode901721
-Ref: table-gawk-rounding-modes902085
-Ref: Setting the rounding mode-Footnote-1905537
-Node: Arbitrary Precision Integers905716
-Ref: Arbitrary Precision Integers-Footnote-1910614
-Node: POSIX Floating Point Problems910763
-Ref: POSIX Floating Point Problems-Footnote-1914642
-Node: Floating point summary914680
-Node: Dynamic Extensions916876
-Node: Extension Intro918428
-Node: Plugin License919693
-Node: Extension Mechanism Outline920490
-Ref: figure-load-extension920918
-Ref: figure-register-new-function922398
-Ref: figure-call-new-function923402
-Node: Extension API Description925389
-Node: Extension API Functions Introduction926839
-Node: General Data Types931660
-Ref: General Data Types-Footnote-1937560
-Node: Memory Allocation Functions937859
-Ref: Memory Allocation Functions-Footnote-1940698
-Node: Constructor Functions940797
-Node: Registration Functions942532
-Node: Extension Functions943217
-Node: Exit Callback Functions945514
-Node: Extension Version String946762
-Node: Input Parsers947425
-Node: Output Wrappers957300
-Node: Two-way processors961813
-Node: Printing Messages964076
-Ref: Printing Messages-Footnote-1965152
-Node: Updating `ERRNO'965304
-Node: Requesting Values966044
-Ref: table-value-types-returned966771
-Node: Accessing Parameters967728
-Node: Symbol Table Access968962
-Node: Symbol table by name969476
-Node: Symbol table by cookie971496
-Ref: Symbol table by cookie-Footnote-1975641
-Node: Cached values975704
-Ref: Cached values-Footnote-1979200
-Node: Array Manipulation979291
-Ref: Array Manipulation-Footnote-1980389
-Node: Array Data Types980426
-Ref: Array Data Types-Footnote-1983081
-Node: Array Functions983173
-Node: Flattening Arrays987032
-Node: Creating Arrays993934
-Node: Extension API Variables998705
-Node: Extension Versioning999341
-Node: Extension API Informational Variables1001232
-Node: Extension API Boilerplate1002297
-Node: Finding Extensions1006106
-Node: Extension Example1006666
-Node: Internal File Description1007438
-Node: Internal File Ops1011505
-Ref: Internal File Ops-Footnote-11023256
-Node: Using Internal File Ops1023396
-Ref: Using Internal File Ops-Footnote-11025779
-Node: Extension Samples1026052
-Node: Extension Sample File Functions1027580
-Node: Extension Sample Fnmatch1035261
-Node: Extension Sample Fork1036749
-Node: Extension Sample Inplace1037964
-Node: Extension Sample Ord1039640
-Node: Extension Sample Readdir1040476
-Ref: table-readdir-file-types1041353
-Node: Extension Sample Revout1042164
-Node: Extension Sample Rev2way1042753
-Node: Extension Sample Read write array1043493
-Node: Extension Sample Readfile1045433
-Node: Extension Sample Time1046528
-Node: Extension Sample API Tests1047876
-Node: gawkextlib1048367
-Node: Extension summary1051045
-Node: Extension Exercises1054734
-Node: Language History1055456
-Node: V7/SVR3.11057112
-Node: SVR41059265
-Node: POSIX1060699
-Node: BTL1062080
-Node: POSIX/GNU1062811
-Node: Feature History1068556
-Node: Common Extensions1082282
-Node: Ranges and Locales1083654
-Ref: Ranges and Locales-Footnote-11088273
-Ref: Ranges and Locales-Footnote-21088300
-Ref: Ranges and Locales-Footnote-31088535
-Node: Contributors1088756
-Node: History summary1094296
-Node: Installation1095675
-Node: Gawk Distribution1096621
-Node: Getting1097105
-Node: Extracting1097928
-Node: Distribution contents1099565
-Node: Unix Installation1105667
-Node: Quick Installation1106350
-Node: Shell Startup Files1108761
-Node: Additional Configuration Options1109840
-Node: Configuration Philosophy1111644
-Node: Non-Unix Installation1114013
-Node: PC Installation1114471
-Node: PC Binary Installation1115791
-Node: PC Compiling1117639
-Ref: PC Compiling-Footnote-11120660
-Node: PC Testing1120769
-Node: PC Using1121945
-Node: Cygwin1126060
-Node: MSYS1126830
-Node: VMS Installation1127331
-Node: VMS Compilation1128123
-Ref: VMS Compilation-Footnote-11129352
-Node: VMS Dynamic Extensions1129410
-Node: VMS Installation Details1131094
-Node: VMS Running1133345
-Node: VMS GNV1136185
-Node: VMS Old Gawk1136920
-Node: Bugs1137390
-Node: Other Versions1141279
-Node: Installation summary1147713
-Node: Notes1148772
-Node: Compatibility Mode1149637
-Node: Additions1150419
-Node: Accessing The Source1151344
-Node: Adding Code1152779
-Node: New Ports1158936
-Node: Derived Files1163418
-Ref: Derived Files-Footnote-11168893
-Ref: Derived Files-Footnote-21168927
-Ref: Derived Files-Footnote-31169523
-Node: Future Extensions1169637
-Node: Implementation Limitations1170243
-Node: Extension Design1171491
-Node: Old Extension Problems1172645
-Ref: Old Extension Problems-Footnote-11174162
-Node: Extension New Mechanism Goals1174219
-Ref: Extension New Mechanism Goals-Footnote-11177579
-Node: Extension Other Design Decisions1177768
-Node: Extension Future Growth1179876
-Node: Old Extension Mechanism1180712
-Node: Notes summary1182474
-Node: Basic Concepts1183660
-Node: Basic High Level1184341
-Ref: figure-general-flow1184613
-Ref: figure-process-flow1185212
-Ref: Basic High Level-Footnote-11188441
-Node: Basic Data Typing1188626
-Node: Glossary1191954
-Node: Copying1223883
-Node: GNU Free Documentation License1261439
-Node: Index1286575
+Node: Foreword342291
+Node: Foreword446735
+Node: Preface48266
+Ref: Preface-Footnote-151137
+Ref: Preface-Footnote-251244
+Ref: Preface-Footnote-351477
+Node: History51619
+Node: Names53970
+Ref: Names-Footnote-155064
+Node: This Manual55210
+Ref: This Manual-Footnote-161710
+Node: Conventions61810
+Node: Manual History64147
+Ref: Manual History-Footnote-167140
+Ref: Manual History-Footnote-267181
+Node: How To Contribute67255
+Node: Acknowledgments68384
+Node: Getting Started73250
+Node: Running gawk75689
+Node: One-shot76879
+Node: Read Terminal78143
+Node: Long80174
+Node: Executable Scripts81687
+Ref: Executable Scripts-Footnote-184476
+Node: Comments84579
+Node: Quoting87061
+Node: DOS Quoting92579
+Node: Sample Data Files93254
+Node: Very Simple95849
+Node: Two Rules100748
+Node: More Complex102634
+Node: Statements/Lines105496
+Ref: Statements/Lines-Footnote-1109951
+Node: Other Features110216
+Node: When111152
+Ref: When-Footnote-1112906
+Node: Intro Summary112971
+Node: Invoking Gawk113855
+Node: Command Line115369
+Node: Options116167
+Ref: Options-Footnote-1131962
+Ref: Options-Footnote-2132191
+Node: Other Arguments132216
+Node: Naming Standard Input135164
+Node: Environment Variables136257
+Node: AWKPATH Variable136815
+Ref: AWKPATH Variable-Footnote-1140222
+Ref: AWKPATH Variable-Footnote-2140267
+Node: AWKLIBPATH Variable140527
+Node: Other Environment Variables141783
+Node: Exit Status145414
+Node: Include Files146090
+Node: Loading Shared Libraries149679
+Node: Obsolete151106
+Node: Undocumented151798
+Node: Invoking Summary152065
+Node: Regexp153728
+Node: Regexp Usage155182
+Node: Escape Sequences157219
+Node: Regexp Operators163448
+Ref: Regexp Operators-Footnote-1170858
+Ref: Regexp Operators-Footnote-2171005
+Node: Bracket Expressions171103
+Ref: table-char-classes173118
+Node: Leftmost Longest176060
+Node: Computed Regexps177362
+Node: GNU Regexp Operators180791
+Node: Case-sensitivity184463
+Ref: Case-sensitivity-Footnote-1187348
+Ref: Case-sensitivity-Footnote-2187583
+Node: Regexp Summary187691
+Node: Reading Files189158
+Node: Records191251
+Node: awk split records191984
+Node: gawk split records196913
+Ref: gawk split records-Footnote-1201452
+Node: Fields201489
+Ref: Fields-Footnote-1204267
+Node: Nonconstant Fields204353
+Ref: Nonconstant Fields-Footnote-1206591
+Node: Changing Fields206794
+Node: Field Separators212725
+Node: Default Field Splitting215429
+Node: Regexp Field Splitting216546
+Node: Single Character Fields219896
+Node: Command Line Field Separator220955
+Node: Full Line Fields224172
+Ref: Full Line Fields-Footnote-1225693
+Ref: Full Line Fields-Footnote-2225739
+Node: Field Splitting Summary225840
+Node: Constant Size227914
+Node: Splitting By Content232497
+Ref: Splitting By Content-Footnote-1236462
+Node: Multiple Line236625
+Ref: Multiple Line-Footnote-1242506
+Node: Getline242685
+Node: Plain Getline244892
+Node: Getline/Variable247532
+Node: Getline/File248681
+Node: Getline/Variable/File250066
+Ref: Getline/Variable/File-Footnote-1251669
+Node: Getline/Pipe251756
+Node: Getline/Variable/Pipe254434
+Node: Getline/Coprocess255565
+Node: Getline/Variable/Coprocess256829
+Node: Getline Notes257568
+Node: Getline Summary260362
+Ref: table-getline-variants260774
+Node: Read Timeout261603
+Ref: Read Timeout-Footnote-1265440
+Node: Command-line directories265498
+Node: Input Summary266403
+Node: Input Exercises269788
+Node: Printing270516
+Node: Print272351
+Node: Print Examples273808
+Node: Output Separators276587
+Node: OFMT278605
+Node: Printf279960
+Node: Basic Printf280745
+Node: Control Letters282317
+Node: Format Modifiers286302
+Node: Printf Examples292308
+Node: Redirection294794
+Node: Special FD301632
+Ref: Special FD-Footnote-1304798
+Node: Special Files304872
+Node: Other Inherited Files305489
+Node: Special Network306489
+Node: Special Caveats307351
+Node: Close Files And Pipes308300
+Ref: Close Files And Pipes-Footnote-1315485
+Ref: Close Files And Pipes-Footnote-2315633
+Node: Nonfatal315783
+Node: Output Summary318108
+Node: Output Exercises319329
+Node: Expressions320009
+Node: Values321198
+Node: Constants321875
+Node: Scalar Constants322566
+Ref: Scalar Constants-Footnote-1323428
+Node: Nondecimal-numbers323678
+Node: Regexp Constants326688
+Node: Using Constant Regexps327214
+Node: Variables330377
+Node: Using Variables331034
+Node: Assignment Options332945
+Node: Conversion334820
+Node: Strings And Numbers335344
+Ref: Strings And Numbers-Footnote-1338409
+Node: Locale influences conversions338518
+Ref: table-locale-affects341264
+Node: All Operators341856
+Node: Arithmetic Ops342485
+Node: Concatenation344990
+Ref: Concatenation-Footnote-1347809
+Node: Assignment Ops347916
+Ref: table-assign-ops352895
+Node: Increment Ops354205
+Node: Truth Values and Conditions357636
+Node: Truth Values358719
+Node: Typing and Comparison359768
+Node: Variable Typing360584
+Node: Comparison Operators364251
+Ref: table-relational-ops364661
+Node: POSIX String Comparison368156
+Ref: POSIX String Comparison-Footnote-1369228
+Node: Boolean Ops369367
+Ref: Boolean Ops-Footnote-1373845
+Node: Conditional Exp373936
+Node: Function Calls375674
+Node: Precedence379554
+Node: Locales383214
+Node: Expressions Summary384846
+Node: Patterns and Actions387417
+Node: Pattern Overview388537
+Node: Regexp Patterns390216
+Node: Expression Patterns390759
+Node: Ranges394539
+Node: BEGIN/END397646
+Node: Using BEGIN/END398407
+Ref: Using BEGIN/END-Footnote-1401143
+Node: I/O And BEGIN/END401249
+Node: BEGINFILE/ENDFILE403564
+Node: Empty406461
+Node: Using Shell Variables406778
+Node: Action Overview409051
+Node: Statements411377
+Node: If Statement413225
+Node: While Statement414720
+Node: Do Statement416748
+Node: For Statement417896
+Node: Switch Statement421054
+Node: Break Statement423436
+Node: Continue Statement425529
+Node: Next Statement427356
+Node: Nextfile Statement429737
+Node: Exit Statement432365
+Node: Built-in Variables434776
+Node: User-modified435909
+Ref: User-modified-Footnote-1443543
+Node: Auto-set443605
+Ref: Auto-set-Footnote-1457314
+Ref: Auto-set-Footnote-2457519
+Node: ARGC and ARGV457575
+Node: Pattern Action Summary461793
+Node: Arrays464226
+Node: Array Basics465555
+Node: Array Intro466399
+Ref: figure-array-elements468333
+Ref: Array Intro-Footnote-1470953
+Node: Reference to Elements471081
+Node: Assigning Elements473543
+Node: Array Example474034
+Node: Scanning an Array475793
+Node: Controlling Scanning478813
+Ref: Controlling Scanning-Footnote-1484207
+Node: Numeric Array Subscripts484523
+Node: Uninitialized Subscripts486708
+Node: Delete488325
+Ref: Delete-Footnote-1491074
+Node: Multidimensional491131
+Node: Multiscanning494228
+Node: Arrays of Arrays495817
+Node: Arrays Summary500571
+Node: Functions502662
+Node: Built-in503701
+Node: Calling Built-in504779
+Node: Numeric Functions506774
+Ref: Numeric Functions-Footnote-1511592
+Ref: Numeric Functions-Footnote-2511949
+Ref: Numeric Functions-Footnote-3511997
+Node: String Functions512269
+Ref: String Functions-Footnote-1535770
+Ref: String Functions-Footnote-2535899
+Ref: String Functions-Footnote-3536147
+Node: Gory Details536234
+Ref: table-sub-escapes538015
+Ref: table-sub-proposed539530
+Ref: table-posix-sub540892
+Ref: table-gensub-escapes542429
+Ref: Gory Details-Footnote-1543262
+Node: I/O Functions543413
+Ref: I/O Functions-Footnote-1550649
+Node: Time Functions550796
+Ref: Time Functions-Footnote-1561305
+Ref: Time Functions-Footnote-2561373
+Ref: Time Functions-Footnote-3561531
+Ref: Time Functions-Footnote-4561642
+Ref: Time Functions-Footnote-5561754
+Ref: Time Functions-Footnote-6561981
+Node: Bitwise Functions562247
+Ref: table-bitwise-ops562809
+Ref: Bitwise Functions-Footnote-1567137
+Node: Type Functions567309
+Node: I18N Functions568461
+Node: User-defined570108
+Node: Definition Syntax570913
+Ref: Definition Syntax-Footnote-1576572
+Node: Function Example576643
+Ref: Function Example-Footnote-1579564
+Node: Function Caveats579586
+Node: Calling A Function580104
+Node: Variable Scope581062
+Node: Pass By Value/Reference584055
+Node: Return Statement587552
+Node: Dynamic Typing590531
+Node: Indirect Calls591460
+Ref: Indirect Calls-Footnote-1601325
+Node: Functions Summary601453
+Node: Library Functions604155
+Ref: Library Functions-Footnote-1607763
+Ref: Library Functions-Footnote-2607906
+Node: Library Names608077
+Ref: Library Names-Footnote-1611535
+Ref: Library Names-Footnote-2611758
+Node: General Functions611844
+Node: Strtonum Function612947
+Node: Assert Function615969
+Node: Round Function619293
+Node: Cliff Random Function620834
+Node: Ordinal Functions621850
+Ref: Ordinal Functions-Footnote-1624913
+Ref: Ordinal Functions-Footnote-2625165
+Node: Join Function625376
+Ref: Join Function-Footnote-1627146
+Node: Getlocaltime Function627346
+Node: Readfile Function631090
+Node: Shell Quoting633062
+Node: Data File Management634463
+Node: Filetrans Function635095
+Node: Rewind Function639191
+Node: File Checking640577
+Ref: File Checking-Footnote-1641910
+Node: Empty Files642111
+Node: Ignoring Assigns644090
+Node: Getopt Function645640
+Ref: Getopt Function-Footnote-1657104
+Node: Passwd Functions657304
+Ref: Passwd Functions-Footnote-1666144
+Node: Group Functions666232
+Ref: Group Functions-Footnote-1674129
+Node: Walking Arrays674334
+Node: Library Functions Summary677340
+Node: Library Exercises678742
+Node: Sample Programs680022
+Node: Running Examples680792
+Node: Clones681520
+Node: Cut Program682744
+Node: Egrep Program692464
+Ref: Egrep Program-Footnote-1699967
+Node: Id Program700077
+Node: Split Program703753
+Ref: Split Program-Footnote-1707207
+Node: Tee Program707335
+Node: Uniq Program710124
+Node: Wc Program717543
+Ref: Wc Program-Footnote-1721793
+Node: Miscellaneous Programs721887
+Node: Dupword Program723100
+Node: Alarm Program725131
+Node: Translate Program729936
+Ref: Translate Program-Footnote-1734499
+Node: Labels Program734769
+Ref: Labels Program-Footnote-1738120
+Node: Word Sorting738204
+Node: History Sorting742274
+Node: Extract Program744109
+Node: Simple Sed751633
+Node: Igawk Program754703
+Ref: Igawk Program-Footnote-1769029
+Ref: Igawk Program-Footnote-2769230
+Ref: Igawk Program-Footnote-3769352
+Node: Anagram Program769467
+Node: Signature Program772528
+Node: Programs Summary773775
+Node: Programs Exercises774996
+Ref: Programs Exercises-Footnote-1779127
+Node: Advanced Features779218
+Node: Nondecimal Data781200
+Node: Array Sorting782790
+Node: Controlling Array Traversal783490
+Ref: Controlling Array Traversal-Footnote-1791856
+Node: Array Sorting Functions791974
+Ref: Array Sorting Functions-Footnote-1795860
+Node: Two-way I/O796056
+Ref: Two-way I/O-Footnote-1801001
+Ref: Two-way I/O-Footnote-2801187
+Node: TCP/IP Networking801269
+Node: Profiling804141
+Node: Advanced Features Summary812412
+Node: Internationalization814345
+Node: I18N and L10N815825
+Node: Explaining gettext816511
+Ref: Explaining gettext-Footnote-1821536
+Ref: Explaining gettext-Footnote-2821720
+Node: Programmer i18n821885
+Ref: Programmer i18n-Footnote-1826761
+Node: Translator i18n826810
+Node: String Extraction827604
+Ref: String Extraction-Footnote-1828735
+Node: Printf Ordering828821
+Ref: Printf Ordering-Footnote-1831607
+Node: I18N Portability831671
+Ref: I18N Portability-Footnote-1834127
+Node: I18N Example834190
+Ref: I18N Example-Footnote-1836993
+Node: Gawk I18N837065
+Node: I18N Summary837709
+Node: Debugger839049
+Node: Debugging840071
+Node: Debugging Concepts840512
+Node: Debugging Terms842322
+Node: Awk Debugging844894
+Node: Sample Debugging Session845800
+Node: Debugger Invocation846334
+Node: Finding The Bug847719
+Node: List of Debugger Commands854198
+Node: Breakpoint Control855530
+Node: Debugger Execution Control859207
+Node: Viewing And Changing Data862566
+Node: Execution Stack865942
+Node: Debugger Info867577
+Node: Miscellaneous Debugger Commands871622
+Node: Readline Support876623
+Node: Limitations877517
+Node: Debugging Summary879632
+Node: Arbitrary Precision Arithmetic880806
+Node: Computer Arithmetic882222
+Ref: table-numeric-ranges885821
+Ref: Computer Arithmetic-Footnote-1886345
+Node: Math Definitions886402
+Ref: table-ieee-formats889697
+Ref: Math Definitions-Footnote-1890301
+Node: MPFR features890406
+Node: FP Math Caution892077
+Ref: FP Math Caution-Footnote-1893127
+Node: Inexactness of computations893496
+Node: Inexact representation894455
+Node: Comparing FP Values895813
+Node: Errors accumulate896895
+Node: Getting Accuracy898327
+Node: Try To Round901031
+Node: Setting precision901930
+Ref: table-predefined-precision-strings902614
+Node: Setting the rounding mode904443
+Ref: table-gawk-rounding-modes904807
+Ref: Setting the rounding mode-Footnote-1908259
+Node: Arbitrary Precision Integers908438
+Ref: Arbitrary Precision Integers-Footnote-1913336
+Node: POSIX Floating Point Problems913485
+Ref: POSIX Floating Point Problems-Footnote-1917364
+Node: Floating point summary917402
+Node: Dynamic Extensions919589
+Node: Extension Intro921141
+Node: Plugin License922406
+Node: Extension Mechanism Outline923203
+Ref: figure-load-extension923631
+Ref: figure-register-new-function925111
+Ref: figure-call-new-function926115
+Node: Extension API Description928102
+Node: Extension API Functions Introduction929552
+Node: General Data Types934373
+Ref: General Data Types-Footnote-1940273
+Node: Memory Allocation Functions940572
+Ref: Memory Allocation Functions-Footnote-1943411
+Node: Constructor Functions943510
+Node: Registration Functions945249
+Node: Extension Functions945934
+Node: Exit Callback Functions948231
+Node: Extension Version String949479
+Node: Input Parsers950142
+Node: Output Wrappers960017
+Node: Two-way processors964530
+Node: Printing Messages966793
+Ref: Printing Messages-Footnote-1967869
+Node: Updating `ERRNO'968021
+Node: Requesting Values968761
+Ref: table-value-types-returned969488
+Node: Accessing Parameters970445
+Node: Symbol Table Access971679
+Node: Symbol table by name972193
+Node: Symbol table by cookie974213
+Ref: Symbol table by cookie-Footnote-1978358
+Node: Cached values978421
+Ref: Cached values-Footnote-1981917
+Node: Array Manipulation982008
+Ref: Array Manipulation-Footnote-1983106
+Node: Array Data Types983143
+Ref: Array Data Types-Footnote-1985798
+Node: Array Functions985890
+Node: Flattening Arrays989749
+Node: Creating Arrays996651
+Node: Extension API Variables1001422
+Node: Extension Versioning1002058
+Node: Extension API Informational Variables1003949
+Node: Extension API Boilerplate1005014
+Node: Finding Extensions1008823
+Node: Extension Example1009383
+Node: Internal File Description1010155
+Node: Internal File Ops1014222
+Ref: Internal File Ops-Footnote-11025973
+Node: Using Internal File Ops1026113
+Ref: Using Internal File Ops-Footnote-11028496
+Node: Extension Samples1028769
+Node: Extension Sample File Functions1030297
+Node: Extension Sample Fnmatch1037978
+Node: Extension Sample Fork1039466
+Node: Extension Sample Inplace1040681
+Node: Extension Sample Ord1042357
+Node: Extension Sample Readdir1043193
+Ref: table-readdir-file-types1044070
+Node: Extension Sample Revout1044881
+Node: Extension Sample Rev2way1045470
+Node: Extension Sample Read write array1046210
+Node: Extension Sample Readfile1048150
+Node: Extension Sample Time1049245
+Node: Extension Sample API Tests1050593
+Node: gawkextlib1051084
+Node: Extension summary1053762
+Node: Extension Exercises1057451
+Node: Language History1058173
+Node: V7/SVR3.11059829
+Node: SVR41061982
+Node: POSIX1063416
+Node: BTL1064797
+Node: POSIX/GNU1065528
+Node: Feature History1071364
+Node: Common Extensions1085158
+Node: Ranges and Locales1086530
+Ref: Ranges and Locales-Footnote-11091149
+Ref: Ranges and Locales-Footnote-21091176
+Ref: Ranges and Locales-Footnote-31091411
+Node: Contributors1091632
+Node: History summary1097172
+Node: Installation1098551
+Node: Gawk Distribution1099497
+Node: Getting1099981
+Node: Extracting1100804
+Node: Distribution contents1102441
+Node: Unix Installation1108543
+Node: Quick Installation1109226
+Node: Shell Startup Files1111637
+Node: Additional Configuration Options1112716
+Node: Configuration Philosophy1114520
+Node: Non-Unix Installation1116889
+Node: PC Installation1117347
+Node: PC Binary Installation1118667
+Node: PC Compiling1120515
+Ref: PC Compiling-Footnote-11123536
+Node: PC Testing1123645
+Node: PC Using1124821
+Node: Cygwin1128936
+Node: MSYS1129706
+Node: VMS Installation1130207
+Node: VMS Compilation1130999
+Ref: VMS Compilation-Footnote-11132228
+Node: VMS Dynamic Extensions1132286
+Node: VMS Installation Details1133970
+Node: VMS Running1136221
+Node: VMS GNV1139061
+Node: VMS Old Gawk1139796
+Node: Bugs1140266
+Node: Other Versions1144155
+Node: Installation summary1150589
+Node: Notes1151648
+Node: Compatibility Mode1152513
+Node: Additions1153295
+Node: Accessing The Source1154220
+Node: Adding Code1155655
+Node: New Ports1161812
+Node: Derived Files1166294
+Ref: Derived Files-Footnote-11171769
+Ref: Derived Files-Footnote-21171803
+Ref: Derived Files-Footnote-31172399
+Node: Future Extensions1172513
+Node: Implementation Limitations1173119
+Node: Extension Design1174367
+Node: Old Extension Problems1175521
+Ref: Old Extension Problems-Footnote-11177038
+Node: Extension New Mechanism Goals1177095
+Ref: Extension New Mechanism Goals-Footnote-11180455
+Node: Extension Other Design Decisions1180644
+Node: Extension Future Growth1182752
+Node: Old Extension Mechanism1183588
+Node: Notes summary1185350
+Node: Basic Concepts1186536
+Node: Basic High Level1187217
+Ref: figure-general-flow1187489
+Ref: figure-process-flow1188088
+Ref: Basic High Level-Footnote-11191317
+Node: Basic Data Typing1191502
+Node: Glossary1194830
+Node: Copying1226759
+Node: GNU Free Documentation License1264315
+Node: Index1289451

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 7136a7de..615330d1 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -51,7 +51,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH September, 2014
+@set UPDATE-MONTH February, 2015
@set VERSION 4.1
@set PATCHLEVEL 2
@@ -198,9 +198,9 @@
@ifclear FOR_PRINT
@set FN file name
-@set FFN File Name
+@set FFN File name
@set DF data file
-@set DDF Data File
+@set DDF Data file
@set PVERSION version
@end ifclear
@ifset FOR_PRINT
@@ -299,7 +299,7 @@ Fax: +1-617-542-2652
Email: <email>gnu@@gnu.org</email>
URL: <ulink url="http://www.gnu.org">http://www.gnu.org/</ulink></literallayout>
-<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2014
+<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2015
Free Software Foundation, Inc.
All Rights Reserved.</literallayout>
@end docbook
@@ -633,6 +633,7 @@ particular records in a file and perform operations upon them.
* Special Caveats:: Things to watch out for.
* Close Files And Pipes:: Closing Input and Output Files and
Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -1520,7 +1521,7 @@ is often referred to as ``new @command{awk}.''
By analogy, the original version of @command{awk} is
referred to as ``old @command{awk}.''
-Today, on most systems, when you run the @command{awk} utility
+On most current systems, when you run the @command{awk} utility
you get some version of new @command{awk}.@footnote{Only
Solaris systems still use an old @command{awk} for the
default @command{awk} utility. A more modern @command{awk} lives in
@@ -1751,15 +1752,39 @@ and how to compile and use it on different
non-POSIX systems. It also describes how to report bugs
in @command{gawk} and where to get other freely
available @command{awk} implementations.
-@end itemize
@ifset FOR_PRINT
-@itemize @value{MINUS}
@item
@ref{Copying},
presents the license that covers the @command{gawk} source code.
+@end ifset
+
+@ifclear FOR_PRINT
+@item
+@ref{Notes},
+describes how to disable @command{gawk}'s extensions, as
+well as how to contribute new code to @command{gawk},
+and some possible future directions for @command{gawk} development.
+
+@item
+@ref{Basic Concepts},
+provides some very cursory background material for those who
+are completely unfamiliar with computer programming.
+
+The @ref{Glossary}, defines most, if not all, of the significant terms used
+throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
+try looking them up here.
+
+@item
+@ref{Copying}, and
+@ref{GNU Free Documentation License},
+present the licenses that cover the @command{gawk} source code
+and this @value{DOCUMENT}, respectively.
+@end ifclear
+@end itemize
@end itemize
+@ifset FOR_PRINT
The version of this @value{DOCUMENT} distributed with @command{gawk}
contains additional appendices and other end material.
To save space, we have omitted them from the
@@ -1797,32 +1822,6 @@ Some of the chapters have exercise sections; these have also been
omitted from the print edition but are available online.
@end ifset
-@ifclear FOR_PRINT
-@itemize @value{MINUS}
-@item
-@ref{Notes},
-describes how to disable @command{gawk}'s extensions, as
-well as how to contribute new code to @command{gawk},
-and some possible future directions for @command{gawk} development.
-
-@item
-@ref{Basic Concepts},
-provides some very cursory background material for those who
-are completely unfamiliar with computer programming.
-
-The @ref{Glossary}, defines most, if not all, of the significant terms used
-throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
-try looking them up here.
-
-@item
-@ref{Copying}, and
-@ref{GNU Free Documentation License},
-present the licenses that cover the @command{gawk} source code
-and this @value{DOCUMENT}, respectively.
-@end itemize
-@end ifclear
-@end itemize
-
@c FULLXREF OFF
@node Conventions
@@ -1864,15 +1863,23 @@ $ @kbd{echo hello on stderr 1>&2}
@end example
@ifnotinfo
-In the text, command names appear in @code{this font}, while code segments
+In the text, almost anything related to programming, such as
+command names,
+variable and function names, and string, numeric and regexp constants
+appear in @code{this font}. Code fragments
appear in the same font and quoted, @samp{like this}.
+Things that are replaced by the user or programmer
+appear in @var{this font}.
Options look like this: @option{-f}.
+@value{FFN}s are indicated like this: @file{/path/to/ourfile}.
+@ifclear FOR_PRINT
Some things are
emphasized @emph{like this}, and if a point needs to be made
-strongly, it is done @strong{like this}. The first occurrence of
+strongly, it is done @strong{like this}.
+@end ifclear
+The first occurrence of
a new term is usually its @dfn{definition} and appears in the same
font as the previous occurrence of ``definition'' in this sentence.
-Finally, @value{FN}s are indicated like this: @file{/path/to/ourfile}.
@end ifnotinfo
Characters that you type at the keyboard look @kbd{like this}. In particular,
@@ -4543,6 +4550,8 @@ wait for input before returning with an error.
Controls the number of times @command{gawk} attempts to
retry a two-way TCP/IP (socket) connection before giving up.
@xref{TCP/IP Networking}.
+Note that when nonfatal I/O is enabled (@pxref{Nonfatal}),
+@command{gawk} only tries to open a TCP/IP socket once.
@item POSIXLY_CORRECT
Causes @command{gawk} to switch to POSIX-compatibility
@@ -8929,6 +8938,7 @@ and discusses the @code{close()} built-in function.
@command{gawk} allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@end menu
@@ -9407,12 +9417,12 @@ represent
spaces in the output. Here are the possible modifiers, in the order in
which they may appear:
-@table @code
+@table @asis
@cindex differences in @command{awk} and @command{gawk}, @code{print}/@code{printf} statements
@cindex @code{printf} statement, positional specifiers
@c the code{} does NOT start a secondary
@cindex positional specifiers, @code{printf} statement
-@item @var{N}$
+@item @code{@var{N}$}
An integer constant followed by a @samp{$} is a @dfn{positional specifier}.
Normally, format specifications are applied to arguments in the order
given in the format string. With a positional specifier, the format
@@ -9435,7 +9445,7 @@ messages at runtime.
which describes how and why to use positional specifiers.
For now, we ignore them.
-@item - @r{(Minus)}
+@item @code{-} (Minus)
The minus sign, used before the width modifier (see later on in
this list),
says to left-justify
@@ -9453,13 +9463,13 @@ prints @samp{foo@bullet{}}.
For numeric conversions, prefix positive values with a space and
negative values with a minus sign.
-@item +
+@item @code{+}
The plus sign, used before the width modifier (see later on in
this list),
says to always supply a sign for numeric conversions, even if the data
to format is positive. The @samp{+} overrides the space modifier.
-@item #
+@item @code{#}
Use an ``alternative form'' for certain control letters.
For @samp{%o}, supply a leading zero.
For @samp{%x} and @samp{%X}, supply a leading @samp{0x} or @samp{0X} for
@@ -9468,14 +9478,14 @@ For @samp{%e}, @samp{%E}, @samp{%f}, and @samp{%F}, the result always
contains a decimal point.
For @samp{%g} and @samp{%G}, trailing zeros are not removed from the result.
-@item 0
+@item @code{0}
A leading @samp{0} (zero) acts as a flag indicating that output should be
padded with zeros instead of spaces.
This applies only to the numeric output formats.
This flag only has an effect when the field width is wider than the
value to print.
-@item '
+@item @code{'}
A single quote or apostrophe character is a POSIX extension to ISO C.
It indicates that the integer part of a floating-point value, or the
entire part of an integer decimal value, should have a thousands-separator
@@ -9528,7 +9538,7 @@ prints @samp{foobar}.
Preceding the @var{width} with a minus sign causes the output to be
padded with spaces on the right, instead of on the left.
-@item .@var{prec}
+@item @code{.@var{prec}}
A period followed by an integer constant
specifies the precision to use when printing.
The meaning of the precision varies by control letter:
@@ -10435,6 +10445,71 @@ when closing a pipe.
@end ifnotdocbook
+@node Nonfatal
+@section Enabling Nonfatal Output
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+In standard @command{awk}, output with @code{print} or @code{printf}
+to a nonexistent file, or some other I/O error (such as filling up the
+disk) is a fatal error.
+
+@example
+$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
+@error{} gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No such file or directory)
+@end example
+
+@command{gawk} makes it possible to detect that an error has
+occurred, allowing you to possibly recover from the error, or
+at least print an error message of your choosing before exiting.
+You can do this in one of two ways:
+
+@itemize @bullet
+@item
+For all output files, by assigning any value to @code{PROCINFO["NONFATAL"]}.
+
+@item
+On a per-file basis, by assigning any value to
+@code{PROCINFO[@var{filename}, "NONFATAL"]}.
+Here, @var{filename} is the name of the file to which
+you wish output to be nonfatal.
+@end itemize
+
+Once you have enabled nonfatal output, you must check @code{ERRNO}
+after every relevant @code{print} or @code{printf} statement to
+see if something went wrong. It is also a good idea to initialize
+@code{ERRNO} to zero before attempting the output. For example:
+
+@example
+$ @kbd{gawk '}
+> @kbd{BEGIN @{}
+> @kbd{ PROCINFO["NONFATAL"] = 1}
+> @kbd{ ERRNO = 0}
+> @kbd{ print "hi" > "/no/such/file"}
+> @kbd{ if (ERRNO) @{}
+> @kbd{ print("Output failed:", ERRNO) > "/dev/stderr"}
+> @kbd{ exit 1}
+> @kbd{ @}}
+> @kbd{@}'}
+@error{} Output failed: No such file or directory
+@end example
+
+Here, @command{gawk} did not produce a fatal error; instead
+it let the @command{awk} program code detect the problem and handle it.
+
+This mechanism works also for standard output and standard error.
+For standard output, you may use @code{PROCINFO["-", "NONFATAL"]}
+or @code{PROCINFO["/dev/stdout", "NONFATAL"]}. For standard error, use
+@code{PROCINFO["/dev/stderr", "NONFATAL"]}.
+
+When attempting to open a TCP/IP socket (@pxref{TCP/IP Networking}),
+@command{gawk} tries multiple times. The @env{GAWK_SOCK_RETRIES}
+environment variable (@pxref{Other Environment Variables}) allows you to
+override @command{gawk}'s builtin default number of attempts. However,
+once nonfatal I/O is enabled for a given socket, @command{gawk} only
+retries once, relying on @command{awk}-level code to notice that there
+was a problem.
+
@node Output Summary
@section Summary
@@ -10463,6 +10538,12 @@ Use @code{close()} to close open file, pipe, and coprocess redirections.
For coprocesses, it is possible to close only one direction of the
communications.
+@item
+Normally errors with @code{print} or @code{printf} are fatal.
+@command{gawk} lets you make output errors be nonfatal either for
+all files or on a per-file basis. You must then check for errors
+after every relevant output statement.
+
@end itemize
@c EXCLUDE START
@@ -11777,6 +11858,7 @@ has the value four, but it changes the value of @code{foo} to five.
In other words, the operator returns the old value of the variable,
but with the side effect of incrementing it.
+@c FIXME: Use @sup here for superscript
The post-increment @samp{foo++} is nearly the same as writing @samp{(foo
+= 1) - 1}. It is not perfectly equivalent because all numbers in
@command{awk} are floating point---in floating point, @samp{foo + 1 - 1} does
@@ -11997,6 +12079,9 @@ the string constant @code{"0"} is actually true, because it is non-null.
@i{The Guide is definitive. Reality is frequently inaccurate.}
@author Douglas Adams, @cite{The Hitchhiker's Guide to the Galaxy}
@end quotation
+@c 2/2015: Antonio Colombo points out that this is really from
+@c The Restaurant at the End of the Universe. But I'm going to
+@c leave it alone.
@cindex comparison expressions
@cindex expressions, comparison
@@ -14119,12 +14204,12 @@ numbers:
# find smallest divisor of num
@{
num = $1
- for (div = 2; div * div <= num; div++) @{
- if (num % div == 0)
+ for (divisor = 2; divisor * divisor <= num; divisor++) @{
+ if (num % divisor == 0)
break
@}
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
+ if (num % divisor == 0)
+ printf "Smallest divisor of %d is %d\n", num, divisor
else
printf "%d is prime\n", num
@}
@@ -14145,12 +14230,12 @@ an @code{if}:
# find smallest divisor of num
@{
num = $1
- for (div = 2; ; div++) @{
- if (num % div == 0) @{
- printf "Smallest divisor of %d is %d\n", num, div
+ for (divisor = 2; ; divisor++) @{
+ if (num % divisor == 0) @{
+ printf "Smallest divisor of %d is %d\n", num, divisor
break
@}
- if (div * div > num) @{
+ if (divisor * divisor > num) @{
printf "%d is prime\n", num
break
@}
@@ -14592,12 +14677,13 @@ is to simply say @samp{FS = FS}, perhaps with an explanatory comment.
@cindex regular expressions, case sensitivity
@item IGNORECASE #
If @code{IGNORECASE} is nonzero or non-null, then all string comparisons
-and all regular expression matching are case-independent. Thus, regexp
-matching with @samp{~} and @samp{!~}, as well as the @code{gensub()},
-@code{gsub()}, @code{index()}, @code{match()}, @code{patsplit()},
-@code{split()}, and @code{sub()}
-functions, record termination with @code{RS}, and field splitting with
-@code{FS} and @code{FPAT}, all ignore case when doing their particular regexp operations.
+and all regular expression matching are case-independent.
+This applies to
+regexp matching with @samp{~} and @samp{!~},
+the @code{gensub()}, @code{gsub()}, @code{index()}, @code{match()},
+@code{patsplit()}, @code{split()}, and @code{sub()} functions,
+record termination with @code{RS}, and field splitting with
+@code{FS} and @code{FPAT}.
However, the value of @code{IGNORECASE} does @emph{not} affect array subscripting
and it does not affect field splitting when using a single-character
field separator.
@@ -17065,7 +17151,7 @@ for generating random numbers to the value @var{x}.
Each seed value leads to a particular sequence of random
numbers.@footnote{Computer-generated random numbers really are not truly
-random. They are technically known as ``pseudorandom.'' This means
+random. They are technically known as @dfn{pseudorandom}. This means
that although the numbers in a sequence appear to be random, you can in
fact generate the same sequence of random numbers over and over again.}
Thus, if the seed is set to the same value a second time,
@@ -18583,6 +18669,7 @@ which is sufficient to represent times through
2038-01-19 03:14:07 UTC. Many systems support a wider range of timestamps,
including negative timestamps that represent times before the
epoch.
+@c FIXME: Use @sup here for superscript
@cindex @command{date} utility, GNU
@cindex time, retrieving
@@ -20358,67 +20445,7 @@ $ @kbd{gawk -f quicksort.awk -f indirectcall.awk class_data2}
@end example
Another example where indirect functions calls are useful can be found in
-processing arrays. @DBREF{Walking Arrays} presented a simple function
-for ``walking'' an array of arrays. That function simply printed the
-name and value of each scalar array element. However, it is easy to
-generalize that function, by passing in the name of a function to call
-when walking an array. The modified function looks like this:
-
-@example
-@c file eg/lib/processarray.awk
-function process_array(arr, name, process, do_arrays, i, new_name)
-@{
- for (i in arr) @{
- new_name = (name "[" i "]")
- if (isarray(arr[i])) @{
- if (do_arrays)
- @@process(new_name, arr[i])
- process_array(arr[i], new_name, process, do_arrays)
- @} else
- @@process(new_name, arr[i])
- @}
-@}
-@c endfile
-@end example
-
-The arguments are as follows:
-
-@table @code
-@item arr
-The array.
-
-@item name
-The name of the array (a string).
-
-@item process
-The name of the function to call.
-
-@item do_arrays
-If this is true, the function can handle elements that are subarrays.
-@end table
-
-If subarrays are to be processed, that is done before walking them further.
-
-When run with the following scaffolding, the function produces the same
-results as does the earlier @code{walk_array()} function:
-
-@example
-BEGIN @{
- a[1] = 1
- a[2][1] = 21
- a[2][2] = 22
- a[3] = 3
- a[4][1][1] = 411
- a[4][2] = 42
-
- process_array(a, "a", "do_print", 0)
-@}
-
-function do_print(name, element)
-@{
- printf "%s = %s\n", name, element
-@}
-@end example
+processing arrays. This is described in @ref{Walking Arrays}.
Remember that you must supply a leading @samp{@@} in front of an indirect function call.
@@ -23049,6 +23076,66 @@ $ @kbd{gawk -f walk_array.awk}
@print{} a[4][2] = 42
@end example
+The function just presented simply prints the
+name and value of each scalar array element. However, it is easy to
+generalize it, by passing in the name of a function to call
+when walking an array. The modified function looks like this:
+
+@example
+@c file eg/lib/processarray.awk
+function process_array(arr, name, process, do_arrays, i, new_name)
+@{
+ for (i in arr) @{
+ new_name = (name "[" i "]")
+ if (isarray(arr[i])) @{
+ if (do_arrays)
+ @@process(new_name, arr[i])
+ process_array(arr[i], new_name, process, do_arrays)
+ @} else
+ @@process(new_name, arr[i])
+ @}
+@}
+@c endfile
+@end example
+
+The arguments are as follows:
+
+@table @code
+@item arr
+The array.
+
+@item name
+The name of the array (a string).
+
+@item process
+The name of the function to call.
+
+@item do_arrays
+If this is true, the function can handle elements that are subarrays.
+@end table
+
+If subarrays are to be processed, that is done before walking them further.
+
+When run with the following scaffolding, the function produces the same
+results as does the earlier version of @code{walk_array()}:
+
+@example
+BEGIN @{
+ a[1] = 1
+ a[2][1] = 21
+ a[2][2] = 22
+ a[3] = 3
+ a[4][1][1] = 411
+ a[4][2] = 42
+
+ process_array(a, "a", "do_print", 0)
+@}
+
+function do_print(name, element)
+@{
+ printf "%s = %s\n", name, element
+@}
+@end example
@node Library Functions Summary
@section Summary
@@ -23087,7 +23174,7 @@ An @command{awk} version of the standard C @code{getopt()} function
Two sets of routines that parallel the C library versions
@item Traversing arrays of arrays
-A simple function to traverse an array of arrays to any depth
+Two functions that traverse an array of arrays to any depth
@end table
@c end nested list
@@ -30250,6 +30337,7 @@ signed. The possible ranges of values are shown in @ref{table-numeric-ranges}.
@end ifnottex
@ifdocbook
@item Single-precision floating point (approximate) @tab
+@c FIXME: Use @sup here for superscript
@docbook
1.175494<superscript>-38</superscript>
@end docbook
@@ -30868,6 +30956,7 @@ the following computes
@end docbook
the result of which is beyond the
limits of ordinary hardware double-precision floating-point values:
+@c FIXME: Use @sup here for superscript
@example
$ @kbd{gawk -M 'BEGIN @{}
@@ -31215,7 +31304,7 @@ This is faster and more space-efficient than using MPFR for
the same calculations.
@item
-There are several ``dark corners'' with respect to floating-point
+There are several areas with respect to floating-point
numbers where @command{gawk} disagrees with the POSIX standard.
It pays to be aware of them.
@@ -31893,14 +31982,14 @@ the way that extension code would use them:
@table @code
@item static inline awk_value_t *
-@itemx make_const_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_const_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a C string constant
(or other string data), and automatically creates a @emph{copy} of the data
for storage in @code{result}. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a @samp{char *}
value pointing to data previously obtained from @code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}. The idea here
@@ -31908,13 +31997,13 @@ is that the data is passed directly to @command{gawk}, which assumes
responsibility for it. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_null_string(awk_value_t *result)
+@itemx make_null_string(awk_value_t *result);
This specialized function creates a null string (the ``undefined'' value)
in the @code{awk_value_t} variable pointed to by @code{result}.
It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_number(double num, awk_value_t *result)
+@itemx make_number(double num, awk_value_t *result);
This function simply creates a numeric value in the @code{awk_value_t} variable
pointed to by @code{result}.
@end table
@@ -35689,6 +35778,10 @@ Indirect function calls
@item
Directories on the command line produce a warning and are skipped
(@pxref{Command-line directories})
+
+@item
+Output with @code{print} and @code{printf} need not be fatal
+(@pxref{Nonfatal})
@end itemize
@item
@@ -36568,6 +36661,10 @@ is now two.
@xref{Escape Sequences}.
@item
+Nonfatal output with @code{print} and @code{printf}.
+@xref{Nonfatal}.
+
+@item
Support for MirBSD was removed.
@end itemize
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 1e3a7c83..8612876e 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -46,7 +46,7 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH September, 2014
+@set UPDATE-MONTH February, 2015
@set VERSION 4.1
@set PATCHLEVEL 2
@@ -193,9 +193,9 @@
@ifclear FOR_PRINT
@set FN file name
-@set FFN File Name
+@set FFN File name
@set DF data file
-@set DDF Data File
+@set DDF Data file
@set PVERSION version
@end ifclear
@ifset FOR_PRINT
@@ -294,7 +294,7 @@ Fax: +1-617-542-2652
Email: <email>gnu@@gnu.org</email>
URL: <ulink url="http://www.gnu.org">http://www.gnu.org/</ulink></literallayout>
-<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2014
+<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2015
Free Software Foundation, Inc.
All Rights Reserved.</literallayout>
@end docbook
@@ -628,6 +628,7 @@ particular records in a file and perform operations upon them.
* Special Caveats:: Things to watch out for.
* Close Files And Pipes:: Closing Input and Output Files and
Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -1487,7 +1488,7 @@ is often referred to as ``new @command{awk}.''
By analogy, the original version of @command{awk} is
referred to as ``old @command{awk}.''
-Today, on most systems, when you run the @command{awk} utility
+On most current systems, when you run the @command{awk} utility
you get some version of new @command{awk}.@footnote{Only
Solaris systems still use an old @command{awk} for the
default @command{awk} utility. A more modern @command{awk} lives in
@@ -1718,15 +1719,39 @@ and how to compile and use it on different
non-POSIX systems. It also describes how to report bugs
in @command{gawk} and where to get other freely
available @command{awk} implementations.
-@end itemize
@ifset FOR_PRINT
-@itemize @value{MINUS}
@item
@ref{Copying},
presents the license that covers the @command{gawk} source code.
+@end ifset
+
+@ifclear FOR_PRINT
+@item
+@ref{Notes},
+describes how to disable @command{gawk}'s extensions, as
+well as how to contribute new code to @command{gawk},
+and some possible future directions for @command{gawk} development.
+
+@item
+@ref{Basic Concepts},
+provides some very cursory background material for those who
+are completely unfamiliar with computer programming.
+
+The @ref{Glossary}, defines most, if not all, of the significant terms used
+throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
+try looking them up here.
+
+@item
+@ref{Copying}, and
+@ref{GNU Free Documentation License},
+present the licenses that cover the @command{gawk} source code
+and this @value{DOCUMENT}, respectively.
+@end ifclear
+@end itemize
@end itemize
+@ifset FOR_PRINT
The version of this @value{DOCUMENT} distributed with @command{gawk}
contains additional appendices and other end material.
To save space, we have omitted them from the
@@ -1764,32 +1789,6 @@ Some of the chapters have exercise sections; these have also been
omitted from the print edition but are available online.
@end ifset
-@ifclear FOR_PRINT
-@itemize @value{MINUS}
-@item
-@ref{Notes},
-describes how to disable @command{gawk}'s extensions, as
-well as how to contribute new code to @command{gawk},
-and some possible future directions for @command{gawk} development.
-
-@item
-@ref{Basic Concepts},
-provides some very cursory background material for those who
-are completely unfamiliar with computer programming.
-
-The @ref{Glossary}, defines most, if not all, of the significant terms used
-throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
-try looking them up here.
-
-@item
-@ref{Copying}, and
-@ref{GNU Free Documentation License},
-present the licenses that cover the @command{gawk} source code
-and this @value{DOCUMENT}, respectively.
-@end itemize
-@end ifclear
-@end itemize
-
@c FULLXREF OFF
@node Conventions
@@ -1831,15 +1830,23 @@ $ @kbd{echo hello on stderr 1>&2}
@end example
@ifnotinfo
-In the text, command names appear in @code{this font}, while code segments
+In the text, almost anything related to programming, such as
+command names,
+variable and function names, and string, numeric and regexp constants
+appear in @code{this font}. Code fragments
appear in the same font and quoted, @samp{like this}.
+Things that are replaced by the user or programmer
+appear in @var{this font}.
Options look like this: @option{-f}.
+@value{FFN}s are indicated like this: @file{/path/to/ourfile}.
+@ifclear FOR_PRINT
Some things are
emphasized @emph{like this}, and if a point needs to be made
-strongly, it is done @strong{like this}. The first occurrence of
+strongly, it is done @strong{like this}.
+@end ifclear
+The first occurrence of
a new term is usually its @dfn{definition} and appears in the same
font as the previous occurrence of ``definition'' in this sentence.
-Finally, @value{FN}s are indicated like this: @file{/path/to/ourfile}.
@end ifnotinfo
Characters that you type at the keyboard look @kbd{like this}. In particular,
@@ -4454,6 +4461,8 @@ wait for input before returning with an error.
Controls the number of times @command{gawk} attempts to
retry a two-way TCP/IP (socket) connection before giving up.
@xref{TCP/IP Networking}.
+Note that when nonfatal I/O is enabled (@pxref{Nonfatal}),
+@command{gawk} only tries to open a TCP/IP socket once.
@item POSIXLY_CORRECT
Causes @command{gawk} to switch to POSIX-compatibility
@@ -8529,6 +8538,7 @@ and discusses the @code{close()} built-in function.
@command{gawk} allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@end menu
@@ -9007,12 +9017,12 @@ represent
spaces in the output. Here are the possible modifiers, in the order in
which they may appear:
-@table @code
+@table @asis
@cindex differences in @command{awk} and @command{gawk}, @code{print}/@code{printf} statements
@cindex @code{printf} statement, positional specifiers
@c the code{} does NOT start a secondary
@cindex positional specifiers, @code{printf} statement
-@item @var{N}$
+@item @code{@var{N}$}
An integer constant followed by a @samp{$} is a @dfn{positional specifier}.
Normally, format specifications are applied to arguments in the order
given in the format string. With a positional specifier, the format
@@ -9035,7 +9045,7 @@ messages at runtime.
which describes how and why to use positional specifiers.
For now, we ignore them.
-@item - @r{(Minus)}
+@item @code{-} (Minus)
The minus sign, used before the width modifier (see later on in
this list),
says to left-justify
@@ -9053,13 +9063,13 @@ prints @samp{foo@bullet{}}.
For numeric conversions, prefix positive values with a space and
negative values with a minus sign.
-@item +
+@item @code{+}
The plus sign, used before the width modifier (see later on in
this list),
says to always supply a sign for numeric conversions, even if the data
to format is positive. The @samp{+} overrides the space modifier.
-@item #
+@item @code{#}
Use an ``alternative form'' for certain control letters.
For @samp{%o}, supply a leading zero.
For @samp{%x} and @samp{%X}, supply a leading @samp{0x} or @samp{0X} for
@@ -9068,14 +9078,14 @@ For @samp{%e}, @samp{%E}, @samp{%f}, and @samp{%F}, the result always
contains a decimal point.
For @samp{%g} and @samp{%G}, trailing zeros are not removed from the result.
-@item 0
+@item @code{0}
A leading @samp{0} (zero) acts as a flag indicating that output should be
padded with zeros instead of spaces.
This applies only to the numeric output formats.
This flag only has an effect when the field width is wider than the
value to print.
-@item '
+@item @code{'}
A single quote or apostrophe character is a POSIX extension to ISO C.
It indicates that the integer part of a floating-point value, or the
entire part of an integer decimal value, should have a thousands-separator
@@ -9128,7 +9138,7 @@ prints @samp{foobar}.
Preceding the @var{width} with a minus sign causes the output to be
padded with spaces on the right, instead of on the left.
-@item .@var{prec}
+@item @code{.@var{prec}}
A period followed by an integer constant
specifies the precision to use when printing.
The meaning of the precision varies by control letter:
@@ -9931,6 +9941,71 @@ when closing a pipe.
@end sidebar
+@node Nonfatal
+@section Enabling Nonfatal Output
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+In standard @command{awk}, output with @code{print} or @code{printf}
+to a nonexistent file, or some other I/O error (such as filling up the
+disk) is a fatal error.
+
+@example
+$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
+@error{} gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No such file or directory)
+@end example
+
+@command{gawk} makes it possible to detect that an error has
+occurred, allowing you to possibly recover from the error, or
+at least print an error message of your choosing before exiting.
+You can do this in one of two ways:
+
+@itemize @bullet
+@item
+For all output files, by assigning any value to @code{PROCINFO["NONFATAL"]}.
+
+@item
+On a per-file basis, by assigning any value to
+@code{PROCINFO[@var{filename}, "NONFATAL"]}.
+Here, @var{filename} is the name of the file to which
+you wish output to be nonfatal.
+@end itemize
+
+Once you have enabled nonfatal output, you must check @code{ERRNO}
+after every relevant @code{print} or @code{printf} statement to
+see if something went wrong. It is also a good idea to initialize
+@code{ERRNO} to zero before attempting the output. For example:
+
+@example
+$ @kbd{gawk '}
+> @kbd{BEGIN @{}
+> @kbd{ PROCINFO["NONFATAL"] = 1}
+> @kbd{ ERRNO = 0}
+> @kbd{ print "hi" > "/no/such/file"}
+> @kbd{ if (ERRNO) @{}
+> @kbd{ print("Output failed:", ERRNO) > "/dev/stderr"}
+> @kbd{ exit 1}
+> @kbd{ @}}
+> @kbd{@}'}
+@error{} Output failed: No such file or directory
+@end example
+
+Here, @command{gawk} did not produce a fatal error; instead
+it let the @command{awk} program code detect the problem and handle it.
+
+This mechanism works also for standard output and standard error.
+For standard output, you may use @code{PROCINFO["-", "NONFATAL"]}
+or @code{PROCINFO["/dev/stdout", "NONFATAL"]}. For standard error, use
+@code{PROCINFO["/dev/stderr", "NONFATAL"]}.
+
+When attempting to open a TCP/IP socket (@pxref{TCP/IP Networking}),
+@command{gawk} tries multiple times. The @env{GAWK_SOCK_RETRIES}
+environment variable (@pxref{Other Environment Variables}) allows you to
+override @command{gawk}'s builtin default number of attempts. However,
+once nonfatal I/O is enabled for a given socket, @command{gawk} only
+retries once, relying on @command{awk}-level code to notice that there
+was a problem.
+
@node Output Summary
@section Summary
@@ -9959,6 +10034,12 @@ Use @code{close()} to close open file, pipe, and coprocess redirections.
For coprocesses, it is possible to close only one direction of the
communications.
+@item
+Normally errors with @code{print} or @code{printf} are fatal.
+@command{gawk} lets you make output errors be nonfatal either for
+all files or on a per-file basis. You must then check for errors
+after every relevant output statement.
+
@end itemize
@c EXCLUDE START
@@ -11163,6 +11244,7 @@ has the value four, but it changes the value of @code{foo} to five.
In other words, the operator returns the old value of the variable,
but with the side effect of incrementing it.
+@c FIXME: Use @sup here for superscript
The post-increment @samp{foo++} is nearly the same as writing @samp{(foo
+= 1) - 1}. It is not perfectly equivalent because all numbers in
@command{awk} are floating point---in floating point, @samp{foo + 1 - 1} does
@@ -11325,6 +11407,9 @@ the string constant @code{"0"} is actually true, because it is non-null.
@i{The Guide is definitive. Reality is frequently inaccurate.}
@author Douglas Adams, @cite{The Hitchhiker's Guide to the Galaxy}
@end quotation
+@c 2/2015: Antonio Colombo points out that this is really from
+@c The Restaurant at the End of the Universe. But I'm going to
+@c leave it alone.
@cindex comparison expressions
@cindex expressions, comparison
@@ -13447,12 +13532,12 @@ numbers:
# find smallest divisor of num
@{
num = $1
- for (div = 2; div * div <= num; div++) @{
- if (num % div == 0)
+ for (divisor = 2; divisor * divisor <= num; divisor++) @{
+ if (num % divisor == 0)
break
@}
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
+ if (num % divisor == 0)
+ printf "Smallest divisor of %d is %d\n", num, divisor
else
printf "%d is prime\n", num
@}
@@ -13473,12 +13558,12 @@ an @code{if}:
# find smallest divisor of num
@{
num = $1
- for (div = 2; ; div++) @{
- if (num % div == 0) @{
- printf "Smallest divisor of %d is %d\n", num, div
+ for (divisor = 2; ; divisor++) @{
+ if (num % divisor == 0) @{
+ printf "Smallest divisor of %d is %d\n", num, divisor
break
@}
- if (div * div > num) @{
+ if (divisor * divisor > num) @{
printf "%d is prime\n", num
break
@}
@@ -13920,12 +14005,13 @@ is to simply say @samp{FS = FS}, perhaps with an explanatory comment.
@cindex regular expressions, case sensitivity
@item IGNORECASE #
If @code{IGNORECASE} is nonzero or non-null, then all string comparisons
-and all regular expression matching are case-independent. Thus, regexp
-matching with @samp{~} and @samp{!~}, as well as the @code{gensub()},
-@code{gsub()}, @code{index()}, @code{match()}, @code{patsplit()},
-@code{split()}, and @code{sub()}
-functions, record termination with @code{RS}, and field splitting with
-@code{FS} and @code{FPAT}, all ignore case when doing their particular regexp operations.
+and all regular expression matching are case-independent.
+This applies to
+regexp matching with @samp{~} and @samp{!~},
+the @code{gensub()}, @code{gsub()}, @code{index()}, @code{match()},
+@code{patsplit()}, @code{split()}, and @code{sub()} functions,
+record termination with @code{RS}, and field splitting with
+@code{FS} and @code{FPAT}.
However, the value of @code{IGNORECASE} does @emph{not} affect array subscripting
and it does not affect field splitting when using a single-character
field separator.
@@ -16347,7 +16433,7 @@ for generating random numbers to the value @var{x}.
Each seed value leads to a particular sequence of random
numbers.@footnote{Computer-generated random numbers really are not truly
-random. They are technically known as ``pseudorandom.'' This means
+random. They are technically known as @dfn{pseudorandom}. This means
that although the numbers in a sequence appear to be random, you can in
fact generate the same sequence of random numbers over and over again.}
Thus, if the seed is set to the same value a second time,
@@ -17704,6 +17790,7 @@ which is sufficient to represent times through
2038-01-19 03:14:07 UTC. Many systems support a wider range of timestamps,
including negative timestamps that represent times before the
epoch.
+@c FIXME: Use @sup here for superscript
@cindex @command{date} utility, GNU
@cindex time, retrieving
@@ -19479,67 +19566,7 @@ $ @kbd{gawk -f quicksort.awk -f indirectcall.awk class_data2}
@end example
Another example where indirect functions calls are useful can be found in
-processing arrays. @DBREF{Walking Arrays} presented a simple function
-for ``walking'' an array of arrays. That function simply printed the
-name and value of each scalar array element. However, it is easy to
-generalize that function, by passing in the name of a function to call
-when walking an array. The modified function looks like this:
-
-@example
-@c file eg/lib/processarray.awk
-function process_array(arr, name, process, do_arrays, i, new_name)
-@{
- for (i in arr) @{
- new_name = (name "[" i "]")
- if (isarray(arr[i])) @{
- if (do_arrays)
- @@process(new_name, arr[i])
- process_array(arr[i], new_name, process, do_arrays)
- @} else
- @@process(new_name, arr[i])
- @}
-@}
-@c endfile
-@end example
-
-The arguments are as follows:
-
-@table @code
-@item arr
-The array.
-
-@item name
-The name of the array (a string).
-
-@item process
-The name of the function to call.
-
-@item do_arrays
-If this is true, the function can handle elements that are subarrays.
-@end table
-
-If subarrays are to be processed, that is done before walking them further.
-
-When run with the following scaffolding, the function produces the same
-results as does the earlier @code{walk_array()} function:
-
-@example
-BEGIN @{
- a[1] = 1
- a[2][1] = 21
- a[2][2] = 22
- a[3] = 3
- a[4][1][1] = 411
- a[4][2] = 42
-
- process_array(a, "a", "do_print", 0)
-@}
-
-function do_print(name, element)
-@{
- printf "%s = %s\n", name, element
-@}
-@end example
+processing arrays. This is described in @ref{Walking Arrays}.
Remember that you must supply a leading @samp{@@} in front of an indirect function call.
@@ -22140,6 +22167,66 @@ $ @kbd{gawk -f walk_array.awk}
@print{} a[4][2] = 42
@end example
+The function just presented simply prints the
+name and value of each scalar array element. However, it is easy to
+generalize it, by passing in the name of a function to call
+when walking an array. The modified function looks like this:
+
+@example
+@c file eg/lib/processarray.awk
+function process_array(arr, name, process, do_arrays, i, new_name)
+@{
+ for (i in arr) @{
+ new_name = (name "[" i "]")
+ if (isarray(arr[i])) @{
+ if (do_arrays)
+ @@process(new_name, arr[i])
+ process_array(arr[i], new_name, process, do_arrays)
+ @} else
+ @@process(new_name, arr[i])
+ @}
+@}
+@c endfile
+@end example
+
+The arguments are as follows:
+
+@table @code
+@item arr
+The array.
+
+@item name
+The name of the array (a string).
+
+@item process
+The name of the function to call.
+
+@item do_arrays
+If this is true, the function can handle elements that are subarrays.
+@end table
+
+If subarrays are to be processed, that is done before walking them further.
+
+When run with the following scaffolding, the function produces the same
+results as does the earlier version of @code{walk_array()}:
+
+@example
+BEGIN @{
+ a[1] = 1
+ a[2][1] = 21
+ a[2][2] = 22
+ a[3] = 3
+ a[4][1][1] = 411
+ a[4][2] = 42
+
+ process_array(a, "a", "do_print", 0)
+@}
+
+function do_print(name, element)
+@{
+ printf "%s = %s\n", name, element
+@}
+@end example
@node Library Functions Summary
@section Summary
@@ -22178,7 +22265,7 @@ An @command{awk} version of the standard C @code{getopt()} function
Two sets of routines that parallel the C library versions
@item Traversing arrays of arrays
-A simple function to traverse an array of arrays to any depth
+Two functions that traverse an array of arrays to any depth
@end table
@c end nested list
@@ -29341,6 +29428,7 @@ signed. The possible ranges of values are shown in @ref{table-numeric-ranges}.
@end ifnottex
@ifdocbook
@item Single-precision floating point (approximate) @tab
+@c FIXME: Use @sup here for superscript
@docbook
1.175494<superscript>-38</superscript>
@end docbook
@@ -29959,6 +30047,7 @@ the following computes
@end docbook
the result of which is beyond the
limits of ordinary hardware double-precision floating-point values:
+@c FIXME: Use @sup here for superscript
@example
$ @kbd{gawk -M 'BEGIN @{}
@@ -30306,7 +30395,7 @@ This is faster and more space-efficient than using MPFR for
the same calculations.
@item
-There are several ``dark corners'' with respect to floating-point
+There are several areas with respect to floating-point
numbers where @command{gawk} disagrees with the POSIX standard.
It pays to be aware of them.
@@ -30984,14 +31073,14 @@ the way that extension code would use them:
@table @code
@item static inline awk_value_t *
-@itemx make_const_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_const_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a C string constant
(or other string data), and automatically creates a @emph{copy} of the data
for storage in @code{result}. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a @samp{char *}
value pointing to data previously obtained from @code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}. The idea here
@@ -30999,13 +31088,13 @@ is that the data is passed directly to @command{gawk}, which assumes
responsibility for it. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_null_string(awk_value_t *result)
+@itemx make_null_string(awk_value_t *result);
This specialized function creates a null string (the ``undefined'' value)
in the @code{awk_value_t} variable pointed to by @code{result}.
It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_number(double num, awk_value_t *result)
+@itemx make_number(double num, awk_value_t *result);
This function simply creates a numeric value in the @code{awk_value_t} variable
pointed to by @code{result}.
@end table
@@ -34780,6 +34869,10 @@ Indirect function calls
@item
Directories on the command line produce a warning and are skipped
(@pxref{Command-line directories})
+
+@item
+Output with @code{print} and @code{printf} need not be fatal
+(@pxref{Nonfatal})
@end itemize
@item
@@ -35659,6 +35752,10 @@ is now two.
@xref{Escape Sequences}.
@item
+Nonfatal output with @code{print} and @code{printf}.
+@xref{Nonfatal}.
+
+@item
Support for MirBSD was removed.
@end itemize
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
index 370d4505..8236d7d2 100644
--- a/doc/texinfo.tex
+++ b/doc/texinfo.tex
@@ -3,11 +3,12 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2014-12-03.16}
+\def\texinfoversion{2015-02-05.16}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
+% Free Software Foundation, Inc.
%
% This texinfo.tex file is free software: you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
@@ -4488,7 +4489,6 @@ end
% Called from \indexdummies and \atdummies.
%
\def\commondummies{%
- %
% \definedummyword defines \#1 as \string\#1\space, thus effectively
% preventing its expansion. This is used only for control words,
% not control letters, because the \space would be incorrect for
@@ -4565,6 +4565,7 @@ end
\definedummyword\guilsinglright
\definedummyword\lbracechar
\definedummyword\leq
+ \definedummyword\mathopsup
\definedummyword\minus
\definedummyword\ogonek
\definedummyword\pounds
@@ -4578,6 +4579,8 @@ end
\definedummyword\quotesinglbase
\definedummyword\rbracechar
\definedummyword\result
+ \definedummyword\sub
+ \definedummyword\sup
\definedummyword\textdegree
%
% We want to disable all macros so that they are not expanded by \write.
@@ -4652,6 +4655,7 @@ end
\definedummyword\samp
\definedummyword\strong
\definedummyword\tie
+ \definedummyword\U
\definedummyword\uref
\definedummyword\url
\definedummyword\var
@@ -8334,14 +8338,7 @@ end
\catcode`\\=\other
%
% Make the characters 128-255 be printing characters.
- {%
- \count1=128
- \def\loop{%
- \catcode\count1=\other
- \advance\count1 by 1
- \ifnum \count1<256 \loop \fi
- }%
- }%
+ {\setnonasciicharscatcodenonglobal\other}%
%
% @ is our escape character in .aux files, and we need braces.
\catcode`\{=1
@@ -8952,6 +8949,7 @@ directory should work if nowhere else does.}
\catcode\count255=#1\relax
\advance\count255 by 1
\repeat
+
}
% @documentencoding sets the definition of non-ASCII characters
@@ -8986,10 +8984,12 @@ directory should work if nowhere else does.}
%
\else \ifx \declaredencoding \utfeight
\setnonasciicharscatcode\active
- \utfeightchardefs
+ % since we already invoked \utfeightchardefs at the top level
+ % (below), do not re-invoke it, then our check for duplicated
+ % definitions triggers. Making non-ascii chars active is enough.
%
\else
- \message{Unknown document encoding #1, ignoring.}%
+ \message{Ignoring unknown document encoding: #1.}%
%
\fi % utfeight
\fi % latnine
@@ -8998,10 +8998,11 @@ directory should work if nowhere else does.}
\fi % ascii
}
+% emacs-page
% A message to be logged when using a character that isn't available
% the default font encoding (OT1).
%
-\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
% Take account of \c (plain) vs. \, (Texinfo) difference.
\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
@@ -9037,12 +9038,10 @@ directory should work if nowhere else does.}
\gdef^^b4{\'{}}
\gdef^^b5{$\mu$}
\gdef^^b6{\P}
- %
- \gdef^^b7{$^.$}
+ \gdef^^b7{\ifmmode\cdot\else $\cdot$\fi}
\gdef^^b8{\cedilla\ }
\gdef^^b9{$^1$}
\gdef^^ba{\ordm}
- %
\gdef^^bb{\guillemetright}
\gdef^^bc{$1\over4$}
\gdef^^bd{$1\over2$}
@@ -9331,6 +9330,11 @@ directory should work if nowhere else does.}
\expandafter\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter
\gdef\UTFviiiTmp{#2}%
+ %
+ \expandafter\ifx\csname uni:#1\endcsname \relax \else
+ \errmessage{Internal error, already defined: #1}%
+ \fi
+ %
% define an additional control sequence for this code point.
\expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
\endgroup}
@@ -9370,23 +9374,49 @@ directory should work if nowhere else does.}
\uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
\endgroup
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere. Loading the necessary fonts
+% awaits user request. We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file. But we can try to at
+% least make most of the characters not bomb out.
+%
\def\utfeightchardefs{%
\DeclareUnicodeCharacter{00A0}{\tie}
\DeclareUnicodeCharacter{00A1}{\exclamdown}
\DeclareUnicodeCharacter{00A3}{\pounds}
+ \DeclareUnicodeCharacter{00A7}{\S}
\DeclareUnicodeCharacter{00A8}{\"{ }}
\DeclareUnicodeCharacter{00A9}{\copyright}
\DeclareUnicodeCharacter{00AA}{\ordf}
\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+ \DeclareUnicodeCharacter{00AC}{\ifmmode\lnot\else $\lnot$\fi}
\DeclareUnicodeCharacter{00AD}{\-}
\DeclareUnicodeCharacter{00AE}{\registeredsymbol}
\DeclareUnicodeCharacter{00AF}{\={ }}
\DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B1}{\ifmmode\pm\else $\pm$\fi}
+ \DeclareUnicodeCharacter{00B2}{$^2$}
+ \DeclareUnicodeCharacter{00B3}{$^3$}
\DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B5}{$\mu$}
+ \DeclareUnicodeCharacter{00B6}{\P}
+ \DeclareUnicodeCharacter{00B7}{\ifmmode\cdot\else $\cdot$\fi}
\DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00B9}{$^1$}
\DeclareUnicodeCharacter{00BA}{\ordm}
\DeclareUnicodeCharacter{00BB}{\guillemetright}
+ \DeclareUnicodeCharacter{00BC}{$1\over4$}
+ \DeclareUnicodeCharacter{00BD}{$1\over2$}
+ \DeclareUnicodeCharacter{00BE}{$3\over4$}
\DeclareUnicodeCharacter{00BF}{\questiondown}
\DeclareUnicodeCharacter{00C0}{\`A}
@@ -9413,6 +9443,7 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{00D4}{\^O}
\DeclareUnicodeCharacter{00D5}{\~O}
\DeclareUnicodeCharacter{00D6}{\"O}
+ \DeclareUnicodeCharacter{00D7}{\ifmmode\times\else $\times$\fi}
\DeclareUnicodeCharacter{00D8}{\O}
\DeclareUnicodeCharacter{00D9}{\`U}
\DeclareUnicodeCharacter{00DA}{\'U}
@@ -9446,6 +9477,7 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{00F4}{\^o}
\DeclareUnicodeCharacter{00F5}{\~o}
\DeclareUnicodeCharacter{00F6}{\"o}
+ \DeclareUnicodeCharacter{00F7}{\ifmmode\div\else $\div$\fi}
\DeclareUnicodeCharacter{00F8}{\o}
\DeclareUnicodeCharacter{00F9}{\`u}
\DeclareUnicodeCharacter{00FA}{\'u}
@@ -9465,20 +9497,23 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0107}{\'c}
\DeclareUnicodeCharacter{0108}{\^C}
\DeclareUnicodeCharacter{0109}{\^c}
- \DeclareUnicodeCharacter{0118}{\ogonek{E}}
- \DeclareUnicodeCharacter{0119}{\ogonek{e}}
\DeclareUnicodeCharacter{010A}{\dotaccent{C}}
\DeclareUnicodeCharacter{010B}{\dotaccent{c}}
\DeclareUnicodeCharacter{010C}{\v{C}}
\DeclareUnicodeCharacter{010D}{\v{c}}
\DeclareUnicodeCharacter{010E}{\v{D}}
+ \DeclareUnicodeCharacter{010F}{d'}
+ \DeclareUnicodeCharacter{0110}{\DH}
+ \DeclareUnicodeCharacter{0111}{\dh}
\DeclareUnicodeCharacter{0112}{\=E}
\DeclareUnicodeCharacter{0113}{\=e}
\DeclareUnicodeCharacter{0114}{\u{E}}
\DeclareUnicodeCharacter{0115}{\u{e}}
\DeclareUnicodeCharacter{0116}{\dotaccent{E}}
\DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
\DeclareUnicodeCharacter{011A}{\v{E}}
\DeclareUnicodeCharacter{011B}{\v{e}}
\DeclareUnicodeCharacter{011C}{\^G}
@@ -9488,14 +9523,20 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0120}{\dotaccent{G}}
\DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+ \DeclareUnicodeCharacter{0122}{\cedilla{G}}
+ \DeclareUnicodeCharacter{0123}{\cedilla{g}}
\DeclareUnicodeCharacter{0124}{\^H}
\DeclareUnicodeCharacter{0125}{\^h}
+ \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}
+ \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}
\DeclareUnicodeCharacter{0128}{\~I}
\DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
\DeclareUnicodeCharacter{012A}{\=I}
\DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
\DeclareUnicodeCharacter{012C}{\u{I}}
\DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+ \DeclareUnicodeCharacter{012E}{\ogonek{I}}
+ \DeclareUnicodeCharacter{012F}{\ogonek{i}}
\DeclareUnicodeCharacter{0130}{\dotaccent{I}}
\DeclareUnicodeCharacter{0131}{\dotless{i}}
@@ -9503,15 +9544,29 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0133}{ij}
\DeclareUnicodeCharacter{0134}{\^J}
\DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+ \DeclareUnicodeCharacter{0136}{\cedilla{K}}
+ \DeclareUnicodeCharacter{0137}{\cedilla{k}}
+ \DeclareUnicodeCharacter{0138}{\ifmmode\kappa\else $\kappa$\fi}
\DeclareUnicodeCharacter{0139}{\'L}
\DeclareUnicodeCharacter{013A}{\'l}
+ \DeclareUnicodeCharacter{013B}{\cedilla{L}}
+ \DeclareUnicodeCharacter{013C}{\cedilla{l}}
+ \DeclareUnicodeCharacter{013D}{L'}% should kern
+ \DeclareUnicodeCharacter{013E}{l'}% should kern
+ \DeclareUnicodeCharacter{013F}{L\U{00B7}}
+ \DeclareUnicodeCharacter{0140}{l\U{00B7}}
\DeclareUnicodeCharacter{0141}{\L}
\DeclareUnicodeCharacter{0142}{\l}
\DeclareUnicodeCharacter{0143}{\'N}
\DeclareUnicodeCharacter{0144}{\'n}
+ \DeclareUnicodeCharacter{0145}{\cedilla{N}}
+ \DeclareUnicodeCharacter{0146}{\cedilla{n}}
\DeclareUnicodeCharacter{0147}{\v{N}}
\DeclareUnicodeCharacter{0148}{\v{n}}
+ \DeclareUnicodeCharacter{0149}{'n}
+ \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}
+ \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}
\DeclareUnicodeCharacter{014C}{\=O}
\DeclareUnicodeCharacter{014D}{\=o}
\DeclareUnicodeCharacter{014E}{\u{O}}
@@ -9523,6 +9578,8 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0153}{\oe}
\DeclareUnicodeCharacter{0154}{\'R}
\DeclareUnicodeCharacter{0155}{\'r}
+ \DeclareUnicodeCharacter{0156}{\cedilla{R}}
+ \DeclareUnicodeCharacter{0157}{\cedilla{r}}
\DeclareUnicodeCharacter{0158}{\v{R}}
\DeclareUnicodeCharacter{0159}{\v{r}}
\DeclareUnicodeCharacter{015A}{\'S}
@@ -9534,10 +9591,12 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0160}{\v{S}}
\DeclareUnicodeCharacter{0161}{\v{s}}
- \DeclareUnicodeCharacter{0162}{\cedilla{t}}
- \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0162}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0163}{\cedilla{t}}
\DeclareUnicodeCharacter{0164}{\v{T}}
-
+ \DeclareUnicodeCharacter{0165}{\v{t}}
+ \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}
+ \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}
\DeclareUnicodeCharacter{0168}{\~U}
\DeclareUnicodeCharacter{0169}{\~u}
\DeclareUnicodeCharacter{016A}{\=U}
@@ -9549,6 +9608,8 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0170}{\H{U}}
\DeclareUnicodeCharacter{0171}{\H{u}}
+ \DeclareUnicodeCharacter{0172}{\ogonek{U}}
+ \DeclareUnicodeCharacter{0173}{\ogonek{u}}
\DeclareUnicodeCharacter{0174}{\^W}
\DeclareUnicodeCharacter{0175}{\^w}
\DeclareUnicodeCharacter{0176}{\^Y}
@@ -9560,6 +9621,7 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{017C}{\dotaccent{z}}
\DeclareUnicodeCharacter{017D}{\v{Z}}
\DeclareUnicodeCharacter{017E}{\v{z}}
+ \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}
\DeclareUnicodeCharacter{01C4}{D\v{Z}}
\DeclareUnicodeCharacter{01C5}{D\v{z}}
@@ -9765,12 +9827,51 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{2261}{\equiv}
}% end of \utfeightchardefs
-
% US-ASCII character definitions.
\def\asciichardefs{% nothing need be done
\relax
}
+% Latin1 (ISO-8859-1) character definitions.
+\def\nonasciistringdefs{%
+ \setnonasciicharscatcode\active
+ \def\defstringchar##1{\def##1{\string##1}}%
+ \defstringchar^^a0\defstringchar^^a1\defstringchar^^a2\defstringchar^^a3%
+ \defstringchar^^a4\defstringchar^^a5\defstringchar^^a6\defstringchar^^a7%
+ \defstringchar^^a8\defstringchar^^a9\defstringchar^^aa\defstringchar^^ab%
+ \defstringchar^^ac\defstringchar^^ad\defstringchar^^ae\defstringchar^^af%
+ %
+ \defstringchar^^b0\defstringchar^^b1\defstringchar^^b2\defstringchar^^b3%
+ \defstringchar^^b4\defstringchar^^b5\defstringchar^^b6\defstringchar^^b7%
+ \defstringchar^^b8\defstringchar^^b9\defstringchar^^ba\defstringchar^^bb%
+ \defstringchar^^bc\defstringchar^^bd\defstringchar^^be\defstringchar^^bf%
+ %
+ \defstringchar^^c0\defstringchar^^c1\defstringchar^^c2\defstringchar^^c3%
+ \defstringchar^^c4\defstringchar^^c5\defstringchar^^c6\defstringchar^^c7%
+ \defstringchar^^c8\defstringchar^^c9\defstringchar^^ca\defstringchar^^cb%
+ \defstringchar^^cc\defstringchar^^cd\defstringchar^^ce\defstringchar^^cf%
+ %
+ \defstringchar^^d0\defstringchar^^d1\defstringchar^^d2\defstringchar^^d3%
+ \defstringchar^^d4\defstringchar^^d5\defstringchar^^d6\defstringchar^^d7%
+ \defstringchar^^d8\defstringchar^^d9\defstringchar^^da\defstringchar^^db%
+ \defstringchar^^dc\defstringchar^^dd\defstringchar^^de\defstringchar^^df%
+ %
+ \defstringchar^^e0\defstringchar^^e1\defstringchar^^e2\defstringchar^^e3%
+ \defstringchar^^e4\defstringchar^^e5\defstringchar^^e6\defstringchar^^e7%
+ \defstringchar^^e8\defstringchar^^e9\defstringchar^^ea\defstringchar^^eb%
+ \defstringchar^^ec\defstringchar^^ed\defstringchar^^ee\defstringchar^^ef%
+ %
+ \defstringchar^^f0\defstringchar^^f1\defstringchar^^f2\defstringchar^^f3%
+ \defstringchar^^f4\defstringchar^^f5\defstringchar^^f6\defstringchar^^f7%
+ \defstringchar^^f8\defstringchar^^f9\defstringchar^^fa\defstringchar^^fb%
+ \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff%
+}
+
+
+% define all the unicode characters we know about, for the sake of @U.
+\utfeightchardefs
+
+
% Make non-ASCII characters printable again for compatibility with
% existing Texinfo documents that may use them, even without declaring a
% document encoding.
@@ -10124,6 +10225,7 @@ directory should work if nowhere else does.}
%
{@catcode`- = @active
@gdef@normalturnoffactive{%
+ @nonasciistringdefs
@let-=@normaldash
@let"=@normaldoublequote
@let$=@normaldollar %$ font-lock fix
@@ -10192,7 +10294,7 @@ directory should work if nowhere else does.}
@c Local variables:
@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
+@c page-delimiter: "^\\\\message\\|emacs-page"
@c time-stamp-start: "def\\\\texinfoversion{"
@c time-stamp-format: "%:y-%02m-%02d.%02H"
@c time-stamp-end: "}"