gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-815


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-815-g7224d3f
Date: Sun, 14 Feb 2016 21:00:23 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, gawk-4.1-stable has been updated
       via  7224d3f6b8db04439e8fdf8025b99db321a3f5ea (commit)
      from  37aba870575eccc0f19ed08eea2efe0640de8c64 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=7224d3f6b8db04439e8fdf8025b99db321a3f5ea

commit 7224d3f6b8db04439e8fdf8025b99db321a3f5ea
Author: Arnold D. Robbins <address@hidden>
Date:   Sun Feb 14 22:59:45 2016 +0200

    Upgrade to Texinfo 6.1, including some doc simplifications.

diff --git a/ChangeLog b/ChangeLog
index 77a8ffb..57db1c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-02-14         Arnold D. Robbins     <address@hidden>
+
+       * README, NEWS: Updated to reflect use of Texinfo 6.1.
+
 2016-01-25         John E. Malmberg      <address@hidden>
 
        * io.c (redirect): Need to call close_one more than once after
diff --git a/NEWS b/NEWS
index 3eba89f..09a34ff 100644
--- a/NEWS
+++ b/NEWS
@@ -8,7 +8,8 @@
 Changes from 4.1.3 to 4.1.x
 ---------------------------
 
-1. Updated to GNU autoconf 2.69, automake 1.15, gettext 0.19.5.1.
+1. Updated to GNU autoconf 2.69, automake 1.15, gettext 0.19.5.1,
+   texinfo 6.1.
 
 2. z/OS support updated.
 
diff --git a/README b/README
index 1190589..d89c2e9 100644
--- a/README
+++ b/README
@@ -7,7 +7,7 @@
 
 README:
 
-This is GNU Awk 4.1.2. It is upwardly compatible with Brian Kernighan's
+This is GNU Awk 4.1.3. It is upwardly compatible with Brian Kernighan's
 version of Unix awk.  It is almost completely compliant with the
 2008 POSIX 1003.1 standard for awk. (See the note below about POSIX.)
 
@@ -21,8 +21,10 @@ Changes in this version are summarized in the NEWS file.
 Read the file POSIX.STD for a discussion of issues where the standard
 says one thing but gawk does something different.
 
-To format the documentation with TeX, use at least version 2014-03-18.17
+To format the documentation with TeX, use at least version 2016-02-05.07
 of texinfo.tex. There is a usable copy of texinfo.tex in the doc directory.
+You should also use at least version 6.1 of texindex and of makeinfo
+from the texinfo-6.1 distribution.
 
 INSTALLATION:
 
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 77d2605..7ecd1b9 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,11 @@
+2016-02-14         Arnold D. Robbins     <address@hidden>
+
+       * gawktexi.in: Revise for use with Texinfo 6.1.
+       Remove ` @c' at the end of inline docbook constructs.
+       Remove special @DB*REF macros, not needed anymore.
+       Use @sup for superscripts where possible.
+       * texinfo.tex: Updated.
+
 2016-02-03         Andrew J. Schorr     <address@hidden>
 
        * gawktexi.in (Command-Line Options): Change wording of -M description
diff --git a/doc/gawk.info b/doc/gawk.info
index 24bd51a..f66dacb 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -1,4 +1,4 @@
-This is gawk.info, produced by makeinfo version 6.0dev from gawk.texi.
+This is gawk.info, produced by makeinfo version 6.1 from gawk.texi.
 
 Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2015
 Free Software Foundation, Inc.
@@ -939,8 +939,8 @@ the 'gawk' distribution).  His code finally became part of 
the main
 'awk'-level debugger.  This version became available as 'gawk' version
 4.0 in 2011.
 
-   *Note Contributors::, for a full list of those who have made
-important contributions to 'gawk'.
+   *Note Contributors:: for a full list of those who have made important
+contributions to 'gawk'.
 
 
 File: gawk.info,  Node: Names,  Next: This Manual,  Prev: History,  Up: Preface
@@ -1154,7 +1154,7 @@ by first pressing and holding the 'CONTROL' key, next 
pressing the 'd'
 key, and finally releasing both keys.
 
    For the sake of brevity, throughout this Info file, we refer to Brian
-Kernighan's version of 'awk' as "BWK 'awk'."  (*Note Other Versions::,
+Kernighan's version of 'awk' as "BWK 'awk'."  (*Note Other Versions::
 for information on his and other versions.)
 
 Dark Corners
@@ -1233,7 +1233,7 @@ the major new additions are *note Arbitrary Precision 
Arithmetic::, and
 *note Dynamic Extensions::.
 
    This Info file will undoubtedly continue to evolve.  If you find an
-error in the Info file, please report it!  *Note Bugs::, for information
+error in the Info file, please report it!  *Note Bugs:: for information
 on submitting problem reports electronically.
 
    ---------- Footnotes ----------
@@ -1340,7 +1340,7 @@ has been and continues to be a pleasure working with this 
team of fine
 people.
 
    Notable code and documentation contributions were made by a number of
-people.  *Note Contributors::, for the full list.
+people.  *Note Contributors:: for the full list.
 
    Thanks to Michael Brennan for the Forewords.
 
@@ -1760,7 +1760,7 @@ the quoting rules:
      quotes.  The shell does no interpretation of the quoted text,
      passing it on verbatim to the command.  It is _impossible_ to embed
      a single quote inside single-quoted text.  Refer back to *note
-     Comments::, for an example of what happens if you try.
+     Comments:: for an example of what happens if you try.
 
    * Double quotes protect most things between the opening and closing
      quotes.  The shell does at least variable and command substitution
@@ -2059,7 +2059,7 @@ then several actions execute in the order in which they 
appear in the
 'awk' program.  If no patterns match, then no actions run.
 
    After processing all the rules that match the line (and perhaps there
-are none), 'awk' reads the next line.  (However, *note Next Statement::,
+are none), 'awk' reads the next line.  (However, *note Next Statement::
 and also *note Nextfile Statement::.)  This continues until the program
 reaches the end of the file.  For example, the following 'awk' program
 contains two rules:
@@ -2279,7 +2279,7 @@ determining the type of a variable, and array sorting.
 
    As we develop our presentation of the 'awk' language, we will
 introduce most of the variables and many of the functions.  They are
-described systematically in *note Built-in Variables::, and in *note
+described systematically in *note Built-in Variables:: and in *note
 Built-in::.
 
 
@@ -2658,9 +2658,9 @@ The following list describes options mandated by the 
POSIX standard:
 '--posix'
      Operate in strict POSIX mode.  This disables all 'gawk' extensions
      (just like '--traditional') and disables all extensions not allowed
-     by POSIX. *Note Common Extensions::, for a summary of the
-     extensions in 'gawk' that are disabled by this option.  Also, the
-     following additional restrictions apply:
+     by POSIX. *Note Common Extensions:: for a summary of the extensions
+     in 'gawk' that are disabled by this option.  Also, the following
+     additional restrictions apply:
 
         * Newlines do not act as whitespace to separate fields when 'FS'
           is equal to a single space (*note Fields::).
@@ -3472,7 +3472,7 @@ with a backslash have special meaning in regexps.  *Note 
GNU Regexp
 Operators::.
 
    In a regexp, a backslash before any character that is not in the
-previous list and not listed in *note GNU Regexp Operators::, means that
+previous list and not listed in *note GNU Regexp Operators:: means that
 the next character should be taken literally, even if it would normally
 be a regexp operator.  For example, '/a\+b/' matches the three
 characters 'a+b'.
@@ -3534,7 +3534,7 @@ You can combine regular expressions with special 
characters, called
 "regular expression operators" or "metacharacters", to increase the
 power and versatility of regular expressions.
 
-   The escape sequences described in *note Escape Sequences::, are valid
+   The escape sequences described in *note Escape Sequences:: are valid
 inside a regexp.  They are introduced by a '\' and are recognized and
 converted into corresponding real characters as the very first step in
 processing regexps.
@@ -3714,7 +3714,7 @@ those listed between the opening and closing square 
brackets.
 characters separated by a hyphen.  It matches any single character that
 sorts between the two characters, based upon the system's native
 character set.  For example, '[0-9]' is equivalent to '[0123456789]'.
-(See *note Ranges and Locales::, for an explanation of how the POSIX
+(See *note Ranges and Locales:: for an explanation of how the POSIX
 standard and 'gawk' have changed over time.  This is mainly of
 historical interest.)
 
@@ -4305,7 +4305,7 @@ record, even if the last character in the file is not the 
character in
 
    The empty string '""' (a string without any characters) has a special
 meaning as the value of 'RS'.  It means that records are separated by
-one or more blank lines and nothing else.  *Note Multiple Line::, for
+one or more blank lines and nothing else.  *Note Multiple Line:: for
 more details.
 
    If you change the value of 'RS' in the middle of an 'awk' run, the
@@ -4355,7 +4355,7 @@ trailing whitespace:
 
 The square brackets delineate the contents of 'RT', letting you see the
 leading and trailing whitespace.  The final value of 'RT' is a newline.
-*Note Simple Sed::, for a more useful example of 'RS' as a regexp and
+*Note Simple Sed:: for a more useful example of 'RS' as a regexp and
 'RT'.
 
    If you set 'RS' to a regular expression that allows optional trailing
@@ -4408,9 +4408,9 @@ as a record separator.  However, this is a special case: 
'mawk' does not
 allow embedded NUL characters in strings.  (This may change in a future
 version of 'mawk'.)
 
-   *Note Readfile Function::, for an interesting way to read whole
-files.  If you are using 'gawk', see *note Extension Sample Readfile::,
-for another option.
+   *Note Readfile Function:: for an interesting way to read whole files.
+If you are using 'gawk', see *note Extension Sample Readfile:: for
+another option.
 
    ---------- Footnotes ----------
 
@@ -4614,8 +4614,8 @@ out-of-range field only produces an empty string.  For 
example:
          print "everything is normal"
 
 should print 'everything is normal', because 'NF+1' is certain to be out
-of range.  (*Note If Statement::, for more information about 'awk''s
-'if-else' statements.  *Note Typing and Comparison::, for more
+of range.  (*Note If Statement:: for more information about 'awk''s
+'if-else' statements.  *Note Typing and Comparison:: for more
 information about the '!=' operator.)
 
    It is important to note that making an assignment to an existing
@@ -5153,7 +5153,7 @@ value is '"FS"' if regular field splitting is being used, 
or
 
    This information is useful when writing a function that needs to
 temporarily change 'FS' or 'FIELDWIDTHS', read some records, and then
-restore the original settings (*note Passwd Functions::, for an example
+restore the original settings (*note Passwd Functions:: for an example
 of such a function).
 
 
@@ -5367,7 +5367,7 @@ A simple program to process this file is as follows:
      -|
      ...
 
-   *Note Labels Program::, for a more realistic program dealing with
+   *Note Labels Program:: for a more realistic program dealing with
 address lists.  The following list summarizes how records are split,
 based on the value of 'RS'.  ('==' means "is equal to.")
 
@@ -5621,7 +5621,7 @@ included twice.  *Note Close Files And Pipes::.
 
    One deficiency of this program is that it does not process nested
 '@include' statements (i.e., '@include' statements in included files)
-the way a true macro preprocessor would.  *Note Igawk Program::, for a
+the way a true macro preprocessor would.  *Note Igawk Program:: for a
 program that does handle nested '@include' statements.
 
    ---------- Footnotes ----------
@@ -5975,7 +5975,7 @@ wildcards with your 'awk' program:
 'gawk' reverts to treating a directory on the command line as a fatal
 error.
 
-   *Note Extension Sample Readdir::, for a way to treat directories as
+   *Note Extension Sample Readdir:: for a way to treat directories as
 usable data from an 'awk' program.
 
 
@@ -6080,7 +6080,7 @@ and the 'printf' statement for fancier formatting.  The 
'print'
 statement is not limited when computing _which_ values to print.
 However, with two exceptions, you cannot specify _how_ to print
 them--how many columns, whether to use exponential notation or not, and
-so on.  (For the exceptions, *note Output Separators::, and *note
+so on.  (For the exceptions, *note Output Separators:: and *note
 OFMT::.)  For printing with specifications, you need the 'printf'
 statement (*note Printf::).
 
@@ -6784,7 +6784,7 @@ work identically for 'printf':
 
      The 'close()' function is called here because it's a good idea to
      close the pipe as soon as all the intended output has been sent to
-     it.  *Note Close Files And Pipes::, for more information.
+     it.  *Note Close Files And Pipes:: for more information.
 
      This example also illustrates the use of a variable to represent a
      FILE or COMMAND--it is not necessary to always use a string
@@ -6847,7 +6847,7 @@ uppercase characters converted to lowercase (*note String 
Functions::).
 The program builds up a list of command lines, using the 'mv' utility to
 rename the files.  It then sends the list to the shell for execution.
 
-   *Note Shell Quoting::, for a function that can help in generating
+   *Note Shell Quoting:: for a function that can help in generating
 command lines to be fed to the shell.
 
 
@@ -7372,7 +7372,7 @@ option; *note Nondecimal Data::.)  If you have octal or 
hexadecimal
 data, you can use the 'strtonum()' function (*note String Functions::)
 to convert the data into a number.  Most of the time, you will want to
 use octal or hexadecimal constants when working with the built-in
-bit-manipulation functions; see *note Bitwise Functions::, for more
+bit-manipulation functions; see *note Bitwise Functions:: for more
 information.
 
    Unlike in some early C implementations, '8' and '9' are not valid in
@@ -7531,7 +7531,7 @@ parameters (*note String Functions::).
 
    A few variables have special built-in meanings, such as 'FS' (the
 field separator) and 'NF' (the number of fields in the current input
-record).  *Note Built-in Variables::, for a list of the predefined
+record).  *Note Built-in Variables:: for a list of the predefined
 variables.  These predefined variables can be used and assigned just
 like all other variables, but their values are also used or changed
 automatically by 'awk'.  All predefined variables' names are entirely
@@ -7564,7 +7564,7 @@ option, as in the following:
 
 the variable is set at the very beginning, even before the 'BEGIN' rules
 execute.  The '-v' option and its assignment must precede all the file
-name arguments, as well as the program text.  (*Note Options::, for more
+name arguments, as well as the program text.  (*Note Options:: for more
 information about the '-v' option.)  Otherwise, the variable assignment
 is performed at a time determined by its position among the input file
 arguments--after the processing of the preceding input file argument.
@@ -7670,7 +7670,7 @@ use when printing numbers with 'print'.  'CONVFMT' was 
introduced in
 order to separate the semantics of conversion from the semantics of
 printing.  Both 'CONVFMT' and 'OFMT' have the same default value:
 '"%.6g"'.  In the vast majority of cases, old 'awk' programs do not
-change their behavior.  *Note Print::, for more information on the
+change their behavior.  *Note Print:: for more information on the
 'print' statement.
 
    ---------- Footnotes ----------
@@ -8049,7 +8049,7 @@ expression.  For example:
 The indices of 'bar' are practically guaranteed to be different, because
 'rand()' returns different values each time it is called.  (Arrays and
 the 'rand()' function haven't been covered yet.  *Note Arrays::, and
-*note Numeric Functions::, for more information.)  This example
+*note Numeric Functions:: for more information.)  This example
 illustrates an important fact about assignment operators: the lefthand
 expression is only evaluated _once_.
 
@@ -8646,9 +8646,9 @@ function 'sqrt()' computes the square root of a number.
 
    A fixed set of functions are "built in", which means they are
 available in every 'awk' program.  The 'sqrt()' function is one of
-these.  *Note Built-in::, for a list of built-in functions and their
+these.  *Note Built-in:: for a list of built-in functions and their
 descriptions.  In addition, you can define functions for use in your
-program.  *Note User-defined::, for instructions on how to do this.
+program.  *Note User-defined:: for instructions on how to do this.
 Finally, 'gawk' lets you write functions in C or C++ that may be called
 from your program (*note Dynamic Extensions::).
 
@@ -8680,7 +8680,7 @@ of which to take the square root:
 
    Some of the built-in functions have one or more optional arguments.
 If those arguments are not supplied, the functions use a reasonable
-default value.  *Note Built-in::, for full details.  If arguments are
+default value.  *Note Built-in:: for full details.  If arguments are
 omitted in calls to user-defined functions, then those arguments are
 treated as local variables.  Such local variables act like the empty
 string if referenced where a string value is required, and like zero if
@@ -9215,7 +9215,7 @@ functions, because each library file can have its own 
'BEGIN' and/or
 which library functions are named on the command line controls the order
 in which their 'BEGIN' and 'END' rules are executed.  Therefore, you
 have to be careful when writing such rules in library files so that the
-order in which they are executed doesn't matter.  *Note Options::, for
+order in which they are executed doesn't matter.  *Note Options:: for
 more information on using library functions.  *Note Library Functions::,
 for a number of useful library functions.
 
@@ -9270,8 +9270,8 @@ explicitly.
 'BEGIN' rule, because the implicit
 read-a-record-and-match-against-the-rules loop has not started yet.
 Similarly, those statements are not valid in an 'END' rule, because all
-the input has been read.  (*Note Next Statement::, and *note Nextfile
-Statement::,.)
+the input has been read.  (*Note Next Statement:: and *note Nextfile
+Statement::.)
 
 
 File: gawk.info,  Node: BEGINFILE/ENDFILE,  Next: Empty,  Prev: BEGIN/END,  
Up: Pattern Overview
@@ -9697,7 +9697,7 @@ all the indices of an array:
      for (i in array)
          DO SOMETHING WITH array[i]
 
-*Note Scanning an Array::, for more information on this version of the
+*Note Scanning an Array:: for more information on this version of the
 'for' loop.
 
 
@@ -10008,15 +10008,15 @@ execute.
 
    In such a case, if you don't want the 'END' rule to do its job, set a
 variable to a nonzero value before the 'exit' statement and check that
-variable in the 'END' rule.  *Note Assert Function::, for an example
-that does this.
+variable in the 'END' rule.  *Note Assert Function:: for an example that
+does this.
 
    If an argument is supplied to 'exit', its value is used as the exit
 status code for the 'awk' process.  If no argument is supplied, 'exit'
 causes 'awk' to return a "success" status.  In the case where an
 argument is supplied to a first 'exit' statement, and then 'exit' is
 called a second time from an 'END' rule with no argument, 'awk' uses the
-previously supplied exit value.  (d.c.)  *Note Exit Status::, for more
+previously supplied exit value.  (d.c.)  *Note Exit Status:: for more
 information.
 
    For example, suppose an error condition occurs that is difficult or
@@ -10104,13 +10104,13 @@ each variable.)
      A space-separated list of columns that tells 'gawk' how to split
      input with fixed columnar boundaries.  Assigning a value to
      'FIELDWIDTHS' overrides the use of 'FS' and 'FPAT' for field
-     splitting.  *Note Constant Size::, for more information.
+     splitting.  *Note Constant Size:: for more information.
 
 'FPAT #'
      A regular expression (as a string) that tells 'gawk' to create the
      fields based on text that matches the regular expression.
      Assigning a value to 'FPAT' overrides the use of 'FS' and
-     'FIELDWIDTHS' for field splitting.  *Note Splitting By Content::,
+     'FIELDWIDTHS' for field splitting.  *Note Splitting By Content::
      for more information.
 
 'FS'
@@ -10267,8 +10267,8 @@ they are not special:
 
      The value of 'ARGV[0]' can vary from system to system.  Also, you
      should note that the program text is _not_ included in 'ARGV', nor
-     are any of 'awk''s command-line options.  *Note ARGC and ARGV::,
-     for information about how 'awk' uses these variables.  (d.c.)
+     are any of 'awk''s command-line options.  *Note ARGC and ARGV:: for
+     information about how 'awk' uses these variables.  (d.c.)
 
 'ARGIND #'
      The index in 'ARGV' of the current file being processed.  Every
@@ -10297,7 +10297,7 @@ they are not special:
      Some operating systems may not have environment variables.  On such
      systems, the 'ENVIRON' array is empty (except for
      'ENVIRON["AWKPATH"]' and 'ENVIRON["AWKLIBPATH"]'; *note AWKPATH
-     Variable::, and *note AWKLIBPATH Variable::).
+     Variable:: and *note AWKLIBPATH Variable::).
 
 'ERRNO #'
      If a system error occurs during a redirection for 'getline', during
@@ -10463,12 +10463,12 @@ they are not special:
 
      'PROCINFO["COMMAND", "pty"]'
           For two-way communication to COMMAND, use a pseudo-tty instead
-          of setting up a two-way pipe.  *Note Two-way I/O::, for more
+          of setting up a two-way pipe.  *Note Two-way I/O:: for more
           information.
 
      'PROCINFO["INPUT_NAME", "READ_TIMEOUT"]'
           Set a timeout for reading from input redirection INPUT_NAME.
-          *Note Read Timeout::, for more information.
+          *Note Read Timeout:: for more information.
 
      'PROCINFO["sorted_in"]'
           If this element exists in 'PROCINFO', its value controls the
@@ -10573,7 +10573,7 @@ File: gawk.info,  Node: ARGC and ARGV,  Prev: Auto-set, 
 Up: Built-in Variables
 7.5.3 Using 'ARGC' and 'ARGV'
 -----------------------------
 
-*note Auto-set::, presented the following program describing the
+*note Auto-set:: presented the following program describing the
 information contained in 'ARGC' and 'ARGV':
 
      $ awk 'BEGIN {
@@ -10628,9 +10628,8 @@ string.  Another option is to use the 'delete' 
statement to remove
 elements from 'ARGV' (*note Delete::).
 
    All of these actions are typically done in the 'BEGIN' rule, before
-actual processing of the input begins.  *Note Split Program::, and *note
-Tee Program::, for examples of each way of removing elements from
-'ARGV'.
+actual processing of the input begins.  *Note Split Program:: and *note
+Tee Program:: for examples of each way of removing elements from 'ARGV'.
 
    To actually get options into an 'awk' program, end the 'awk' options
 with '--' and then supply the 'awk' program's options, in the following
@@ -10667,14 +10666,14 @@ be:
      gawk -f myprog.awk -q -v file1 file2 ...
 
 Because '-q' is not a valid 'gawk' option, it and the following '-v' are
-passed on to the 'awk' program.  (*Note Getopt Function::, for an 'awk'
+passed on to the 'awk' program.  (*Note Getopt Function:: for an 'awk'
 library function that parses command-line options.)
 
    When designing your program, you should choose options that don't
 conflict with 'gawk''s, because it will process any options that it
 accepts before passing the rest of the command line on to your program.
-Using '#!' with the '-E' option may help (*note Executable Scripts::,
-and *note Options::,).
+Using '#!' with the '-E' option may help (*note Executable Scripts:: and
+*note Options::).
 
 
 File: gawk.info,  Node: Pattern Action Summary,  Prev: Built-in Variables,  
Up: Patterns and Actions
@@ -11053,7 +11052,7 @@ least once) in the input, by storing a one into the 
array 'used' with
 the word as the index.  The second rule scans the elements of 'used' to
 find all the distinct words that appear in the input.  It prints each
 word that is more than 10 characters long and also prints the number of
-such words.  *Note String Functions::, for more information on the
+such words.  *Note String Functions:: for more information on the
 built-in function 'length()'.
 
      # Record a 1 for each word that is used at least once
@@ -11073,7 +11072,7 @@ built-in function 'length()'.
          print num_long_words, "words longer than 10 characters"
      }
 
-*Note Word Sorting::, for a more detailed example of this type.
+*Note Word Sorting:: for a more detailed example of this type.
 
    The order in which elements of the array are accessed by this
 statement is determined by the internal arrangement of the array
@@ -11678,7 +11677,7 @@ following code prints the elements of our main array 
'a':
          }
      }
 
-*Note Walking Arrays::, for a user-defined function that "walks" an
+*Note Walking Arrays:: for a user-defined function that "walks" an
 arbitrarily dimensioned array of arrays.
 
    Recall that a reference to an uninitialized array element yields a
@@ -12004,7 +12003,7 @@ Options::):
           HOW, as it requires understanding features that we have not
           discussed yet.  Thus, the discussion here is a deliberate
           simplification.  (We do provide all the details later on; see
-          *note Array Sorting Functions::, for the full story.)
+          *note Array Sorting Functions:: for the full story.)
 
      Both functions return the number of elements in the array SOURCE.
      For 'asort()', 'gawk' sorts the values of SOURCE and replaces the
@@ -12172,7 +12171,7 @@ Options::):
 
      The REGEXP argument may be either a regexp constant ('/'...'/') or
      a string constant ('"'...'"').  In the latter case, the string is
-     treated as a regexp to be matched.  *Note Computed Regexps::, for a
+     treated as a regexp to be matched.  *Note Computed Regexps:: for a
      discussion of the difference between the two forms, and the
      implications for writing your program correctly.
 
@@ -12319,9 +12318,9 @@ Options::):
      Modern implementations of 'awk', including 'gawk', allow the third
      argument to be a regexp constant ('/'...'/') as well as a string.
      (d.c.)  The POSIX standard allows this as well.  *Note Computed
-     Regexps::, for a discussion of the difference between using a
-     string constant or a regexp constant, and the implications for
-     writing your program correctly.
+     Regexps:: for a discussion of the difference between using a string
+     constant or a regexp constant, and the implications for writing
+     your program correctly.
 
      Before splitting the string, 'split()' deletes any previously
      existing elements in the arrays ARRAY and SEPS.
@@ -12371,7 +12370,7 @@ Options::):
 
      The REGEXP argument may be either a regexp constant ('/'...'/') or
      a string constant ('"'...'"').  In the latter case, the string is
-     treated as a regexp to be matched.  *Note Computed Regexps::, for a
+     treated as a regexp to be matched.  *Note Computed Regexps:: for a
      discussion of the difference between the two forms, and the
      implications for writing your program correctly.
 
@@ -12503,7 +12502,7 @@ Although this makes a certain amount of sense, it can 
be surprising.
    ---------- Footnotes ----------
 
    (1) Unless you use the '--non-decimal-data' option, which isn't
-recommended.  *Note Nondecimal Data::, for more information.
+recommended.  *Note Nondecimal Data:: for more information.
 
    (2) Note that this means that the record will first be regenerated
 using the value of 'OFS' if any fields have been changed, and that the
@@ -12672,7 +12671,7 @@ parameters are enclosed in square brackets ([ ]):
      Close the file FILENAME for input or output.  Alternatively, the
      argument may be a shell command that was used for creating a
      coprocess, or for redirecting to or from a pipe; then the coprocess
-     or pipe is closed.  *Note Close Files And Pipes::, for more
+     or pipe is closed.  *Note Close Files And Pipes:: for more
      information.
 
      When closing a coprocess, it is occasionally useful to first close
@@ -14328,7 +14327,7 @@ File: gawk.info,  Node: Library Functions,  Next: 
Sample Programs,  Prev: Functi
 10 A Library of 'awk' Functions
 *******************************
 
-*note User-defined::, describes how to write your own 'awk' functions.
+*note User-defined:: describes how to write your own 'awk' functions.
 Writing functions is important, because it allows you to encapsulate
 algorithms and program tasks in a single place.  It simplifies
 programming, making program development more manageable and making
@@ -14355,7 +14354,7 @@ of the sample programs presented later in this Info 
file use these
 functions.  The functions are presented here in a progression from
 simple to complex.
 
-   *note Extract Program::, presents a program that you can use to
+   *note Extract Program:: presents a program that you can use to
 extract the source code for these example library functions and programs
 from the Texinfo source for this Info file.  (This has already been done
 as part of the 'gawk' distribution.)
@@ -14472,7 +14471,7 @@ program, leading to bugs that are very difficult to 
track down:
 single associative array to hold the values needed by the library
 function(s), or "package."  This significantly decreases the number of
 actual global names in use.  For example, the functions described in
-*note Passwd Functions::, might have used array elements
+*note Passwd Functions:: might have used array elements
 'PW_data["inited"]', 'PW_data["total"]', 'PW_data["count"]', and
 'PW_data["awklib"]', instead of '_pw_inited', '_pw_awklib', '_pw_total',
 and '_pw_count'.
@@ -14913,8 +14912,8 @@ File: gawk.info,  Node: Getlocaltime Function,  Next: 
Readfile Function,  Prev:
 -------------------------------
 
 The 'systime()' and 'strftime()' functions described in *note Time
-Functions::, provide the minimum functionality necessary for dealing
-with the time of day in human-readable form.  Although 'strftime()' is
+Functions:: provide the minimum functionality necessary for dealing with
+the time of day in human-readable form.  Although 'strftime()' is
 extensive, the control formats are not necessarily easy to remember or
 intuitively obvious when reading a program.
 
@@ -14984,8 +14983,8 @@ current time formatted in the same way as the 'date' 
utility:
 
    The string indices are easier to use and read than the various
 formats required by 'strftime()'.  The 'alarm' program presented in
-*note Alarm Program::, uses this function.  A more general design for
-the 'getlocaltime()' function would have allowed the user to supply an
+*note Alarm Program:: uses this function.  A more general design for the
+'getlocaltime()' function would have allowed the user to supply an
 optional timestamp value to use instead of the current time.
 
 
@@ -15035,7 +15034,7 @@ reads the entire contents of the named file in one shot:
 never match if the file has contents.  'gawk' reads data from the file
 into 'tmp', attempting to match 'RS'.  The match fails after each read,
 but fails quickly, such that 'gawk' fills 'tmp' with the entire contents
-of the file.  (*Note Records::, for information on 'RT' and 'RS'.)
+of the file.  (*Note Records:: for information on 'RT' and 'RS'.)
 
    In the case that 'file' is empty, the return value is the null
 string.  Thus, calling code may use something like:
@@ -15047,8 +15046,8 @@ string.  Thus, calling code may use something like:
    This tests the result to see if it is empty or not.  An equivalent
 test would be 'contents == ""'.
 
-   *Note Extension Sample Readfile::, for an extension function that
-also reads an entire file into memory.
+   *Note Extension Sample Readfile:: for an extension function that also
+reads an entire file into memory.
 
 
 File: gawk.info,  Node: Shell Quoting,  Prev: Readfile Function,  Up: General 
Functions
@@ -15199,7 +15198,7 @@ solves the problem:
 
      END { endfile(_filename_) }
 
-   *note Wc Program::, shows how this library function can be used and
+   *note Wc Program:: shows how this library function can be used and
 how it simplifies writing the main program.
 
           So Why Does 'gawk' Have 'BEGINFILE' and 'ENDFILE'?
@@ -15673,7 +15672,7 @@ that it does not try to interpret the '-a', etc., as 
its own options.
 
    Using '#!' with the '-E' option may help avoid conflicts between your
 program's options and 'gawk''s options, as '-E' causes 'gawk' to abandon
-processing of further options (*note Executable Scripts::, and *note
+processing of further options (*note Executable Scripts:: and *note
 Options::).
 
    Several of the sample programs presented in *note Sample Programs::,
@@ -15698,7 +15697,7 @@ are numbers, they do not provide very useful 
information to the average
 user.  There needs to be some way to find the user information
 associated with the user and group ID numbers.  This minor node presents
 a suite of functions for retrieving information from the user database.
-*Note Group Functions::, for a similar suite that retrieves information
+*Note Group Functions:: for a similar suite that retrieves information
 from the group database.
 
    The POSIX standard does not define the file where user information is
@@ -15918,7 +15917,7 @@ once.  If you are worried about squeezing every last 
cycle out of your
 this is not necessary, as most 'awk' programs are I/O-bound, and such a
 change would clutter up the code.
 
-   The 'id' program in *note Id Program::, uses these functions.
+   The 'id' program in *note Id Program:: uses these functions.
 
    ---------- Footnotes ----------
 
@@ -15931,7 +15930,7 @@ File: gawk.info,  Node: Group Functions,  Next: Walking 
Arrays,  Prev: Passwd Fu
 10.6 Reading the Group Database
 ===============================
 
-Much of the discussion presented in *note Passwd Functions::, applies to
+Much of the discussion presented in *note Passwd Functions:: applies to
 the group database as well.  Although there has traditionally been a
 well-known file ('/etc/group') in a well-known format, the POSIX
 standard only provides a set of C library routines ('<grp.h>' and
@@ -16153,7 +16152,7 @@ body of '_gr_init()' into a 'BEGIN' rule).
 associative arrays.  The functions that the user calls are themselves
 very simple, relying on 'awk''s associative arrays to do work.
 
-   The 'id' program in *note Id Program::, uses these functions.
+   The 'id' program in *note Id Program:: uses these functions.
 
    ---------- Footnotes ----------
 
@@ -16167,10 +16166,10 @@ File: gawk.info,  Node: Walking Arrays,  Next: 
Library Functions Summary,  Prev:
 10.7 Traversing Arrays of Arrays
 ================================
 
-*note Arrays of Arrays::, described how 'gawk' provides arrays of
-arrays.  In particular, any element of an array may be either a scalar
-or another array.  The 'isarray()' function (*note Type Functions::)
-lets you distinguish an array from a scalar.  The following function,
+*note Arrays of Arrays:: described how 'gawk' provides arrays of arrays.
+In particular, any element of an array may be either a scalar or another
+array.  The 'isarray()' function (*note Type Functions::) lets you
+distinguish an array from a scalar.  The following function,
 'walk_array()', recursively traverses an array, printing the element
 indices and values.  You call it with the array and a string
 representing the name of the array:
@@ -18908,7 +18907,7 @@ File: gawk.info,  Node: Programs Summary,  Next: 
Programs Exercises,  Prev: Misc
      the separator can considerably simplify such tasks.
 
    * The examples here demonstrate the usefulness of the library
-     functions from *note Library Functions::, for a number of real (if
+     functions from *note Library Functions:: for a number of real (if
      small) programs.
 
    * Besides reinventing POSIX wheels, other programs solved a selection
@@ -19137,7 +19136,7 @@ implementation of arrays inside 'awk'.
 in a particular order that you, the programmer, choose.  'gawk' lets you
 do this.
 
-   *note Controlling Scanning::, describes how you can assign special,
+   *note Controlling Scanning:: describes how you can assign special,
 predefined values to 'PROCINFO["sorted_in"]' in order to control the
 order in which 'gawk' traverses an array during a 'for' loop.
 
@@ -19156,7 +19155,7 @@ arguments:
    Here, 'i1' and 'i2' are the indices, and 'v1' and 'v2' are the
 corresponding values of the two elements being compared.  Either 'v1' or
 'v2', or both, can be arrays if the array being traversed contains
-subarrays as values.  (*Note Arrays of Arrays::, for more information
+subarrays as values.  (*Note Arrays of Arrays:: for more information
 about subarrays.)  The three possible return values are interpreted as
 follows:
 
@@ -20284,7 +20283,7 @@ File: gawk.info,  Node: Programmer i18n,  Next: 
Translator i18n,  Prev: Explaini
              ...
           }
 
-   *Note I18N Example::, for an example program showing the steps to
+   *Note I18N Example:: for an example program showing the steps to
 create and use translations from 'awk'.
 
    ---------- Footnotes ----------
@@ -20332,7 +20331,7 @@ included in the output are any constant strings that 
appear as the first
 argument to 'dcgettext()' or as the first and second argument to
 'dcngettext()'.(1)  You should distribute the generated '.pot' file with
 your 'awk' program; translators will eventually use it to provide you
-translations that you can also then distribute.  *Note I18N Example::,
+translations that you can also then distribute.  *Note I18N Example::
 for the full list of steps to go through to create and test translations
 for 'guide'.
 
@@ -21958,7 +21957,7 @@ results to any desired precision level supported by 
MPFR.
    Two predefined variables, 'PREC' and 'ROUNDMODE', provide control
 over the working precision and the rounding mode.  The precision and the
 rounding mode are set globally for every operation to follow.  *Note
-Setting precision::, and *note Setting the rounding mode::, for more
+Setting precision:: and *note Setting the rounding mode:: for more
 information.
 
 
@@ -22762,7 +22761,7 @@ Example::) and also in the 'testext.c' code for testing 
the APIs.
      extension can check if the 'gawk' it is loaded with supports the
      facilities it was compiled with.  (Version mismatches "shouldn't"
      happen, but we all know how _that_ goes.)  *Note Extension
-     Versioning::, for details.
+     Versioning:: for details.
 
 
 File: gawk.info,  Node: Extension API Description,  Next: Finding Extensions,  
Prev: Extension Mechanism Outline,  Up: Dynamic Extensions
@@ -23781,7 +23780,7 @@ your extension function.  They are:
      Convert a parameter that was undefined into an array; this provides
      call by reference for arrays.  Return false if 'count' is too big,
      or if the argument's type is not undefined.  *Note Array
-     Manipulation::, for more information on creating arrays.
+     Manipulation:: for more information on creating arrays.
 
 
 File: gawk.info,  Node: Symbol Table Access,  Next: Array Manipulation,  Prev: 
Accessing Parameters,  Up: Extension API Description
@@ -24198,7 +24197,7 @@ The following functions relate to individual array 
elements:
 
 'awk_array_t create_array(void);'
      Create a new array to which elements may be added.  *Note Creating
-     Arrays::, for a discussion of how to create a new array and add
+     Arrays:: for a discussion of how to create a new array and add
      elements to it.
 
 'awk_bool_t clear_array(awk_array_t a_cookie);'
@@ -24530,7 +24529,7 @@ array:
      -| new_array["hello"] = world
      -| new_array["answer"] = 42
 
-(*Note Finding Extensions::, for more information on the 'AWKLIBPATH'
+(*Note Finding Extensions:: for more information on the 'AWKLIBPATH'
 environment variable.)
 
 
@@ -24745,7 +24744,7 @@ Compiled extensions have to be installed in a directory 
where 'gawk' can
 find them.  If 'gawk' is configured and built in the default fashion,
 the directory in which to find extensions is '/usr/local/lib/gawk'.  You
 can also specify a search path with a list of directories to search for
-compiled extensions.  *Note AWKLIBPATH Variable::, for more information.
+compiled extensions.  *Note AWKLIBPATH Variable:: for more information.
 
 
 File: gawk.info,  Node: Extension Example,  Next: Extension Samples,  Prev: 
Finding Extensions,  Up: Dynamic Extensions
@@ -25333,7 +25332,7 @@ directory and run the program:
    (1) In practice, you would probably want to use the GNU Autotools
 (Automake, Autoconf, Libtool, and 'gettext') to configure and build your
 libraries.  Instructions for doing so are beyond the scope of this Info
-file.  *Note gawkextlib::, for Internet links to the tools.
+file.  *Note gawkextlib:: for Internet links to the tools.
 
 
 File: gawk.info,  Node: Extension Samples,  Next: gawkextlib,  Prev: Extension 
Example,  Up: Dynamic Extensions
@@ -26305,7 +26304,7 @@ many years were finally added to POSIX. They are:
    * The ability to delete all of an array at once with 'delete ARRAY'
      (*note Delete::)
 
-   *Note Common Extensions::, for a list of common extensions not
+   *Note Common Extensions:: for a list of common extensions not
 permitted by the POSIX standard.
 
    The 2008 POSIX standard can be found online at
@@ -26332,8 +26331,8 @@ in his version of 'awk':
    * The 'fflush()' built-in function for flushing buffered output
      (*note I/O Functions::)
 
-   *Note Common Extensions::, for a full list of the extensions
-available in his 'awk'.
+   *Note Common Extensions:: for a full list of the extensions available
+in his 'awk'.
 
 
 File: gawk.info,  Node: POSIX/GNU,  Next: Feature History,  Prev: BTL,  Up: 
Language History
@@ -27201,7 +27200,7 @@ Appendix B Installing 'gawk'
 This appendix provides instructions for installing 'gawk' on the various
 platforms that are supported by the developers.  The primary developer
 supports GNU/Linux (and Unix), whereas the other ports are contributed.
-*Note Bugs::, for the email addresses of the people who maintain the
+*Note Bugs:: for the email addresses of the people who maintain the
 respective ports.
 
 * Menu:
@@ -27439,10 +27438,10 @@ Various '.c', '.y', and '.h' files
      contains a 'Makefile.in' file, which 'configure' uses to generate a
      'Makefile'.  'Makefile.am' is used by GNU Automake to create
      'Makefile.in'.  The library functions from *note Library
-     Functions::, and the 'igawk' program from *note Igawk Program::,
-     are included as ready-to-use files in the 'gawk' distribution.
-     They are installed as part of the installation process.  The rest
-     of the programs in this Info file are available in appropriate
+     Functions::, and the 'igawk' program from *note Igawk Program:: are
+     included as ready-to-use files in the 'gawk' distribution.  They
+     are installed as part of the installation process.  The rest of the
+     programs in this Info file are available in appropriate
      subdirectories of 'awklib/eg'.
 
 'extension/*'
@@ -27455,11 +27454,11 @@ Various '.c', '.y', and '.h' files
 
 'pc/*'
      Files needed for building 'gawk' under MS-Windows and OS/2 (*note
-     PC Installation::, for details).
+     PC Installation:: for details).
 
 'vms/*'
      Files needed for building 'gawk' under Vax/VMS and OpenVMS (*note
-     VMS Installation::, for details).
+     VMS Installation:: for details).
 
 'test/*'
      A test suite for 'gawk'.  You can use 'make check' from the
@@ -27624,7 +27623,7 @@ any constants that 'configure' defined and should not 
have.  The
 Autoconf will not work on your system in some other fashion.  If you do
 have a problem, the 'configure.ac' file is the input for Autoconf.  You
 may be able to change this file and generate a new version of
-'configure' that works on your system (*note Bugs::, for information on
+'configure' that works on your system (*note Bugs:: for information on
 how to report problems in configuring 'gawk').  The same mechanism may
 be used to send in updates to 'configure.ac' and/or 'custom.h'.
 
@@ -27995,8 +27994,8 @@ Compaq C V6.4, and under Alpha/VMS 7.3, Alpha/VMS 
7.3-2, and IA64/VMS
 8.3.  The most recent builds used HP C V7.3 on Alpha VMS 8.3 and both
 Alpha and IA64 VMS 8.4 used HP C 7.3.(1)
 
-   *Note VMS GNV::, for information on building 'gawk' as a PCSI kit
-that is compatible with the GNV product.
+   *Note VMS GNV:: for information on building 'gawk' as a PCSI kit that
+is compatible with the GNV product.
 
    ---------- Footnotes ----------
 
@@ -28379,7 +28378,7 @@ Unix 'awk'
      This version requires an ISO C (1990 standard) compiler; the C
      compiler from GCC (the GNU Compiler Collection) works quite nicely.
 
-     *Note Common Extensions::, for a list of extensions in this 'awk'
+     *Note Common Extensions:: for a list of extensions in this 'awk'
      that are not in POSIX 'awk'.
 
      As a side note, Dan Bornstein has created a Git repository tracking
@@ -28403,7 +28402,7 @@ Unix 'awk'
      Once you have it, 'gunzip' may be used to decompress this file.
      Installation is similar to 'gawk''s (*note Unix Installation::).
 
-     *Note Common Extensions::, for a list of extensions in 'mawk' that
+     *Note Common Extensions:: for a list of extensions in 'mawk' that
      are not in POSIX 'awk'.
 
 'awka'
@@ -28596,7 +28595,7 @@ C.2.1 Accessing The 'gawk' Git Repository
 -----------------------------------------
 
 As 'gawk' is Free Software, the source code is always available.  *note
-Gawk Distribution::, describes how to get and build the formal, released
+Gawk Distribution:: describes how to get and build the formal, released
 versions of 'gawk'.
 
    However, if you want to modify 'gawk' and contribute back your
@@ -32547,7 +32546,7 @@ Index
 * describe call stack frame, in debugger: Debugger Info.      (line  27)
 * differences between gawk and awk:      String Functions.    (line 200)
 * differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
-                                                              (line  90)
+                                                              (line  89)
 * differences in awk and gawk, ARGIND variable: Auto-set.     (line  44)
 * differences in awk and gawk, array elements, deleting: Delete.
                                                               (line  39)
@@ -34593,560 +34592,560 @@ Index
 
 
 Tag Table:
-Node: Top1203
-Node: Foreword342141
-Node: Foreword446583
-Node: Preface48115
-Ref: Preface-Footnote-150987
-Ref: Preface-Footnote-251094
-Ref: Preface-Footnote-351328
-Node: History51470
-Node: Names53823
-Ref: Names-Footnote-154917
-Node: This Manual55064
-Ref: This Manual-Footnote-161546
-Node: Conventions61646
-Node: Manual History64001
-Ref: Manual History-Footnote-166997
-Ref: Manual History-Footnote-267038
-Node: How To Contribute67112
-Node: Acknowledgments68241
-Node: Getting Started73128
-Node: Running gawk75567
-Node: One-shot76757
-Node: Read Terminal78020
-Node: Long80052
-Node: Executable Scripts81565
-Ref: Executable Scripts-Footnote-184360
-Node: Comments84463
-Node: Quoting86947
-Node: DOS Quoting92465
-Node: Sample Data Files93140
-Node: Very Simple95735
-Node: Two Rules100637
-Node: More Complex102523
-Node: Statements/Lines105386
-Ref: Statements/Lines-Footnote-1109845
-Node: Other Features110110
-Node: When111047
-Ref: When-Footnote-1112801
-Node: Intro Summary112866
-Node: Invoking Gawk113750
-Node: Command Line115264
-Node: Options116062
-Ref: Options-Footnote-1131970
-Ref: Options-Footnote-2132200
-Node: Other Arguments132225
-Node: Naming Standard Input135172
-Node: Environment Variables136265
-Node: AWKPATH Variable136823
-Ref: AWKPATH Variable-Footnote-1140124
-Ref: AWKPATH Variable-Footnote-2140169
-Node: AWKLIBPATH Variable140430
-Node: Other Environment Variables141574
-Node: Exit Status145339
-Node: Include Files146016
-Node: Loading Shared Libraries149611
-Node: Obsolete151039
-Node: Undocumented151731
-Node: Invoking Summary152028
-Node: Regexp153688
-Node: Regexp Usage155142
-Node: Escape Sequences157179
-Node: Regexp Operators163194
-Ref: Regexp Operators-Footnote-1170611
-Ref: Regexp Operators-Footnote-2170758
-Node: Bracket Expressions170856
-Ref: table-char-classes172879
-Node: Leftmost Longest176016
-Node: Computed Regexps177319
-Node: GNU Regexp Operators180746
-Node: Case-sensitivity184425
-Ref: Case-sensitivity-Footnote-1187312
-Ref: Case-sensitivity-Footnote-2187547
-Node: Regexp Summary187655
-Node: Reading Files189121
-Node: Records191215
-Node: awk split records191948
-Node: gawk split records196880
-Ref: gawk split records-Footnote-1201424
-Node: Fields201461
-Ref: Fields-Footnote-1204241
-Node: Nonconstant Fields204327
-Ref: Nonconstant Fields-Footnote-1206563
-Node: Changing Fields206767
-Node: Field Separators212697
-Node: Default Field Splitting215395
-Node: Regexp Field Splitting216513
-Node: Single Character Fields219866
-Node: Command Line Field Separator220926
-Node: Full Line Fields224144
-Ref: Full Line Fields-Footnote-1225666
-Ref: Full Line Fields-Footnote-2225712
-Node: Field Splitting Summary225813
-Node: Constant Size227887
-Node: Splitting By Content232466
-Ref: Splitting By Content-Footnote-1236437
-Node: Multiple Line236600
-Ref: Multiple Line-Footnote-1242483
-Node: Getline242662
-Node: Plain Getline244866
-Node: Getline/Variable247505
-Node: Getline/File248654
-Node: Getline/Variable/File250040
-Ref: Getline/Variable/File-Footnote-1251644
-Node: Getline/Pipe251732
-Node: Getline/Variable/Pipe254437
-Node: Getline/Coprocess255570
-Node: Getline/Variable/Coprocess256835
-Node: Getline Notes257575
-Node: Getline Summary260370
-Ref: table-getline-variants260792
-Node: Read Timeout261540
-Ref: Read Timeout-Footnote-1265381
-Node: Command-line directories265439
-Node: Input Summary266344
-Node: Input Exercises269516
-Node: Printing270244
-Node: Print272021
-Node: Print Examples273478
-Node: Output Separators276258
-Node: OFMT278275
-Node: Printf279631
-Node: Basic Printf280416
-Node: Control Letters281990
-Node: Format Modifiers285978
-Node: Printf Examples291993
-Node: Redirection294479
-Node: Special FD301322
-Ref: Special FD-Footnote-1304490
-Node: Special Files304564
-Node: Other Inherited Files305181
-Node: Special Network306182
-Node: Special Caveats307042
-Node: Close Files And Pipes307991
-Ref: Close Files And Pipes-Footnote-1315184
-Ref: Close Files And Pipes-Footnote-2315332
-Node: Output Summary315483
-Node: Output Exercises316481
-Node: Expressions317160
-Node: Values318348
-Node: Constants319026
-Node: Scalar Constants319717
-Ref: Scalar Constants-Footnote-1320581
-Node: Nondecimal-numbers320831
-Node: Regexp Constants323845
-Node: Using Constant Regexps324371
-Node: Variables327534
-Node: Using Variables328191
-Node: Assignment Options330102
-Node: Conversion331976
-Node: Strings And Numbers332500
-Ref: Strings And Numbers-Footnote-1335564
-Node: Locale influences conversions335673
-Ref: table-locale-affects338431
-Node: All Operators339049
-Node: Arithmetic Ops339678
-Node: Concatenation342184
-Ref: Concatenation-Footnote-1345031
-Node: Assignment Ops345138
-Ref: table-assign-ops350130
-Node: Increment Ops351443
-Node: Truth Values and Conditions354903
-Node: Truth Values355977
-Node: Typing and Comparison357025
-Node: Variable Typing357845
-Node: Comparison Operators361469
-Ref: table-relational-ops361888
-Node: POSIX String Comparison365383
-Ref: POSIX String Comparison-Footnote-1366457
-Node: Boolean Ops366596
-Ref: Boolean Ops-Footnote-1371078
-Node: Conditional Exp371170
-Node: Function Calls372906
-Node: Precedence376786
-Node: Locales380445
-Node: Expressions Summary382077
-Node: Patterns and Actions384650
-Node: Pattern Overview385770
-Node: Regexp Patterns387447
-Node: Expression Patterns387989
-Node: Ranges391770
-Node: BEGIN/END394878
-Node: Using BEGIN/END395639
-Ref: Using BEGIN/END-Footnote-1398376
-Node: I/O And BEGIN/END398482
-Node: BEGINFILE/ENDFILE400798
-Node: Empty403705
-Node: Using Shell Variables404022
-Node: Action Overview406296
-Node: Statements408621
-Node: If Statement410469
-Node: While Statement411964
-Node: Do Statement413992
-Node: For Statement415140
-Node: Switch Statement418299
-Node: Break Statement420685
-Node: Continue Statement422777
-Node: Next Statement424604
-Node: Nextfile Statement426987
-Node: Exit Statement429639
-Node: Built-in Variables432044
-Node: User-modified433177
-Ref: User-modified-Footnote-1440804
-Node: Auto-set440866
-Ref: Auto-set-Footnote-1453960
-Ref: Auto-set-Footnote-2454166
-Node: ARGC and ARGV454222
-Node: Pattern Action Summary458441
-Node: Arrays460871
-Node: Array Basics462200
-Node: Array Intro463044
-Ref: figure-array-elements465019
-Ref: Array Intro-Footnote-1467723
-Node: Reference to Elements467851
-Node: Assigning Elements470315
-Node: Array Example470806
-Node: Scanning an Array472565
-Node: Controlling Scanning475589
-Ref: Controlling Scanning-Footnote-1480988
-Node: Numeric Array Subscripts481304
-Node: Uninitialized Subscripts483488
-Node: Delete485107
-Ref: Delete-Footnote-1487859
-Node: Multidimensional487916
-Node: Multiscanning491011
-Node: Arrays of Arrays492602
-Node: Arrays Summary497370
-Node: Functions499463
-Node: Built-in500501
-Node: Calling Built-in501579
-Node: Numeric Functions503575
-Ref: Numeric Functions-Footnote-1507603
-Ref: Numeric Functions-Footnote-2507960
-Ref: Numeric Functions-Footnote-3508008
-Node: String Functions508280
-Ref: String Functions-Footnote-1531788
-Ref: String Functions-Footnote-2531917
-Ref: String Functions-Footnote-3532165
-Node: Gory Details532252
-Ref: table-sub-escapes534043
-Ref: table-sub-proposed535562
-Ref: table-posix-sub536925
-Ref: table-gensub-escapes538466
-Ref: Gory Details-Footnote-1539289
-Node: I/O Functions539440
-Ref: I/O Functions-Footnote-1546661
-Node: Time Functions546809
-Ref: Time Functions-Footnote-1557314
-Ref: Time Functions-Footnote-2557382
-Ref: Time Functions-Footnote-3557540
-Ref: Time Functions-Footnote-4557651
-Ref: Time Functions-Footnote-5557763
-Ref: Time Functions-Footnote-6557990
-Node: Bitwise Functions558256
-Ref: table-bitwise-ops558850
-Ref: Bitwise Functions-Footnote-1563188
-Node: Type Functions563361
-Node: I18N Functions564517
-Node: User-defined566168
-Node: Definition Syntax566973
-Ref: Definition Syntax-Footnote-1572660
-Node: Function Example572731
-Ref: Function Example-Footnote-1575653
-Node: Function Caveats575675
-Node: Calling A Function576193
-Node: Variable Scope577151
-Node: Pass By Value/Reference580145
-Node: Return Statement583644
-Node: Dynamic Typing586623
-Node: Indirect Calls587553
-Ref: Indirect Calls-Footnote-1597804
-Node: Functions Summary597932
-Node: Library Functions600637
-Ref: Library Functions-Footnote-1604246
-Ref: Library Functions-Footnote-2604389
-Node: Library Names604560
-Ref: Library Names-Footnote-1608021
-Ref: Library Names-Footnote-2608244
-Node: General Functions608330
-Node: Strtonum Function609433
-Node: Assert Function612455
-Node: Round Function615781
-Node: Cliff Random Function617322
-Node: Ordinal Functions618338
-Ref: Ordinal Functions-Footnote-1621401
-Ref: Ordinal Functions-Footnote-2621653
-Node: Join Function621863
-Ref: Join Function-Footnote-1623633
-Node: Getlocaltime Function623833
-Node: Readfile Function627577
-Node: Shell Quoting629551
-Node: Data File Management630952
-Node: Filetrans Function631584
-Node: Rewind Function635681
-Node: File Checking637067
-Ref: File Checking-Footnote-1638401
-Node: Empty Files638602
-Node: Ignoring Assigns640581
-Node: Getopt Function642131
-Ref: Getopt Function-Footnote-1653601
-Node: Passwd Functions653801
-Ref: Passwd Functions-Footnote-1662642
-Node: Group Functions662730
-Ref: Group Functions-Footnote-1670629
-Node: Walking Arrays670836
-Node: Library Functions Summary673846
-Node: Library Exercises675252
-Node: Sample Programs675717
-Node: Running Examples676487
-Node: Clones677215
-Node: Cut Program678439
-Node: Egrep Program688160
-Ref: Egrep Program-Footnote-1695672
-Node: Id Program695782
-Node: Split Program699462
-Ref: Split Program-Footnote-1702921
-Node: Tee Program703050
-Node: Uniq Program705840
-Node: Wc Program713266
-Ref: Wc Program-Footnote-1717521
-Node: Miscellaneous Programs717615
-Node: Dupword Program718828
-Node: Alarm Program720858
-Node: Translate Program725713
-Ref: Translate Program-Footnote-1730278
-Node: Labels Program730548
-Ref: Labels Program-Footnote-1733899
-Node: Word Sorting733983
-Node: History Sorting738055
-Node: Extract Program739890
-Node: Simple Sed747419
-Node: Igawk Program750493
-Ref: Igawk Program-Footnote-1764824
-Ref: Igawk Program-Footnote-2765026
-Ref: Igawk Program-Footnote-3765148
-Node: Anagram Program765263
-Node: Signature Program768325
-Node: Programs Summary769572
-Node: Programs Exercises770787
-Ref: Programs Exercises-Footnote-1774916
-Node: Advanced Features775007
-Node: Nondecimal Data776997
-Node: Array Sorting778588
-Node: Controlling Array Traversal779288
-Ref: Controlling Array Traversal-Footnote-1787657
-Node: Array Sorting Functions787775
-Ref: Array Sorting Functions-Footnote-1792866
-Node: Two-way I/O793062
-Ref: Two-way I/O-Footnote-1798882
-Ref: Two-way I/O-Footnote-2799069
-Node: TCP/IP Networking799151
-Node: Profiling802269
-Node: Advanced Features Summary809808
-Node: Internationalization811744
-Node: I18N and L10N813224
-Node: Explaining gettext813911
-Ref: Explaining gettext-Footnote-1818934
-Ref: Explaining gettext-Footnote-2819119
-Node: Programmer i18n819284
-Ref: Programmer i18n-Footnote-1824140
-Node: Translator i18n824189
-Node: String Extraction824983
-Ref: String Extraction-Footnote-1826116
-Node: Printf Ordering826202
-Ref: Printf Ordering-Footnote-1828988
-Node: I18N Portability829052
-Ref: I18N Portability-Footnote-1831508
-Node: I18N Example831571
-Ref: I18N Example-Footnote-1834377
-Node: Gawk I18N834450
-Node: I18N Summary835095
-Node: Debugger836436
-Node: Debugging837458
-Node: Debugging Concepts837899
-Node: Debugging Terms839708
-Node: Awk Debugging842283
-Node: Sample Debugging Session843189
-Node: Debugger Invocation843723
-Node: Finding The Bug845109
-Node: List of Debugger Commands851587
-Node: Breakpoint Control852920
-Node: Debugger Execution Control856614
-Node: Viewing And Changing Data859976
-Node: Execution Stack863350
-Node: Debugger Info864987
-Node: Miscellaneous Debugger Commands869058
-Node: Readline Support874146
-Node: Limitations875042
-Node: Debugging Summary877151
-Node: Arbitrary Precision Arithmetic878324
-Node: Computer Arithmetic879740
-Ref: table-numeric-ranges883331
-Ref: Computer Arithmetic-Footnote-1884053
-Node: Math Definitions884110
-Ref: table-ieee-formats887424
-Ref: Math Definitions-Footnote-1888027
-Node: MPFR features888132
-Node: FP Math Caution889851
-Ref: FP Math Caution-Footnote-1890923
-Node: Inexactness of computations891292
-Node: Inexact representation892252
-Node: Comparing FP Values893612
-Node: Errors accumulate894694
-Node: Getting Accuracy896127
-Node: Try To Round898837
-Node: Setting precision899736
-Ref: table-predefined-precision-strings900433
-Node: Setting the rounding mode902263
-Ref: table-gawk-rounding-modes902637
-Ref: Setting the rounding mode-Footnote-1906045
-Node: Arbitrary Precision Integers906224
-Ref: Arbitrary Precision Integers-Footnote-1909208
-Node: POSIX Floating Point Problems909357
-Ref: POSIX Floating Point Problems-Footnote-1913239
-Node: Floating point summary913277
-Node: Dynamic Extensions915467
-Node: Extension Intro917020
-Node: Plugin License918286
-Node: Extension Mechanism Outline919083
-Ref: figure-load-extension919522
-Ref: figure-register-new-function921087
-Ref: figure-call-new-function922179
-Node: Extension API Description924242
-Node: Extension API Functions Introduction925690
-Node: General Data Types930502
-Ref: General Data Types-Footnote-1936457
-Node: Memory Allocation Functions936756
-Ref: Memory Allocation Functions-Footnote-1939601
-Node: Constructor Functions939700
-Node: Registration Functions941445
-Node: Extension Functions942130
-Node: Exit Callback Functions944429
-Node: Extension Version String945679
-Node: Input Parsers946342
-Node: Output Wrappers956227
-Node: Two-way processors960739
-Node: Printing Messages963003
-Ref: Printing Messages-Footnote-1964077
-Node: Updating ERRNO964230
-Node: Requesting Values964969
-Ref: table-value-types-returned965706
-Node: Accessing Parameters966589
-Node: Symbol Table Access967825
-Node: Symbol table by name968337
-Node: Symbol table by cookie970358
-Ref: Symbol table by cookie-Footnote-1974507
-Node: Cached values974571
-Ref: Cached values-Footnote-1978072
-Node: Array Manipulation978163
-Ref: Array Manipulation-Footnote-1979262
-Node: Array Data Types979299
-Ref: Array Data Types-Footnote-1981957
-Node: Array Functions982049
-Node: Flattening Arrays985908
-Node: Creating Arrays992816
-Node: Extension API Variables997588
-Node: Extension Versioning998224
-Node: Extension API Informational Variables1000115
-Node: Extension API Boilerplate1001179
-Node: Finding Extensions1004993
-Node: Extension Example1005553
-Node: Internal File Description1006351
-Node: Internal File Ops1010431
-Ref: Internal File Ops-Footnote-11022193
-Node: Using Internal File Ops1022333
-Ref: Using Internal File Ops-Footnote-11024716
-Node: Extension Samples1024991
-Node: Extension Sample File Functions1026520
-Node: Extension Sample Fnmatch1034169
-Node: Extension Sample Fork1035656
-Node: Extension Sample Inplace1036874
-Node: Extension Sample Ord1040084
-Node: Extension Sample Readdir1040920
-Ref: table-readdir-file-types1041809
-Node: Extension Sample Revout1042614
-Node: Extension Sample Rev2way1043203
-Node: Extension Sample Read write array1043943
-Node: Extension Sample Readfile1045885
-Node: Extension Sample Time1046980
-Node: Extension Sample API Tests1048328
-Node: gawkextlib1048820
-Node: Extension summary1051244
-Node: Extension Exercises1054936
-Node: Language History1056433
-Node: V7/SVR3.11058089
-Node: SVR41060241
-Node: POSIX1061675
-Node: BTL1063055
-Node: POSIX/GNU1063785
-Node: Feature History1069306
-Node: Common Extensions1082635
-Node: Ranges and Locales1083918
-Ref: Ranges and Locales-Footnote-11088534
-Ref: Ranges and Locales-Footnote-21088561
-Ref: Ranges and Locales-Footnote-31088796
-Node: Contributors1089017
-Node: History summary1094586
-Node: Installation1095966
-Node: Gawk Distribution1096911
-Node: Getting1097395
-Node: Extracting1098356
-Node: Distribution contents1099994
-Node: Unix Installation1105747
-Node: Quick Installation1106363
-Node: Additional Configuration Options1108790
-Node: Configuration Philosophy1110594
-Node: Non-Unix Installation1112964
-Node: PC Installation1113422
-Node: PC Binary Installation1114742
-Node: PC Compiling1116594
-Ref: PC Compiling-Footnote-11119618
-Node: PC Testing1119727
-Node: PC Using1120907
-Node: Cygwin1125021
-Node: MSYS1125791
-Node: VMS Installation1126292
-Node: VMS Compilation1127083
-Ref: VMS Compilation-Footnote-11128313
-Node: VMS Dynamic Extensions1128371
-Node: VMS Installation Details1130056
-Node: VMS Running1132309
-Node: VMS GNV1136588
-Node: VMS Old Gawk1137323
-Node: Bugs1137794
-Node: Other Versions1141991
-Node: Installation summary1148577
-Node: Notes1149635
-Node: Compatibility Mode1150500
-Node: Additions1151282
-Node: Accessing The Source1152207
-Node: Adding Code1153643
-Node: New Ports1159862
-Node: Derived Files1164350
-Ref: Derived Files-Footnote-11169835
-Ref: Derived Files-Footnote-21169870
-Ref: Derived Files-Footnote-31170468
-Node: Future Extensions1170582
-Node: Implementation Limitations1171240
-Node: Extension Design1172423
-Node: Old Extension Problems1173577
-Ref: Old Extension Problems-Footnote-11175095
-Node: Extension New Mechanism Goals1175152
-Ref: Extension New Mechanism Goals-Footnote-11178516
-Node: Extension Other Design Decisions1178705
-Node: Extension Future Growth1180818
-Node: Old Extension Mechanism1181654
-Node: Notes summary1183417
-Node: Basic Concepts1184599
-Node: Basic High Level1185280
-Ref: figure-general-flow1185562
-Ref: figure-process-flow1186247
-Ref: Basic High Level-Footnote-11189548
-Node: Basic Data Typing1189733
-Node: Glossary1193061
-Node: Copying1225007
-Node: GNU Free Documentation License1262546
-Node: Index1287664
+Node: Top1200
+Node: Foreword342138
+Node: Foreword446580
+Node: Preface48112
+Ref: Preface-Footnote-150984
+Ref: Preface-Footnote-251091
+Ref: Preface-Footnote-351325
+Node: History51467
+Node: Names53819
+Ref: Names-Footnote-154913
+Node: This Manual55060
+Ref: This Manual-Footnote-161542
+Node: Conventions61642
+Node: Manual History63996
+Ref: Manual History-Footnote-166991
+Ref: Manual History-Footnote-267032
+Node: How To Contribute67106
+Node: Acknowledgments68235
+Node: Getting Started73121
+Node: Running gawk75560
+Node: One-shot76750
+Node: Read Terminal78013
+Node: Long80045
+Node: Executable Scripts81558
+Ref: Executable Scripts-Footnote-184353
+Node: Comments84456
+Node: Quoting86940
+Node: DOS Quoting92457
+Node: Sample Data Files93132
+Node: Very Simple95727
+Node: Two Rules100629
+Node: More Complex102514
+Node: Statements/Lines105377
+Ref: Statements/Lines-Footnote-1109836
+Node: Other Features110101
+Node: When111037
+Ref: When-Footnote-1112791
+Node: Intro Summary112856
+Node: Invoking Gawk113740
+Node: Command Line115254
+Node: Options116052
+Ref: Options-Footnote-1131959
+Ref: Options-Footnote-2132189
+Node: Other Arguments132214
+Node: Naming Standard Input135161
+Node: Environment Variables136254
+Node: AWKPATH Variable136812
+Ref: AWKPATH Variable-Footnote-1140113
+Ref: AWKPATH Variable-Footnote-2140158
+Node: AWKLIBPATH Variable140419
+Node: Other Environment Variables141563
+Node: Exit Status145328
+Node: Include Files146005
+Node: Loading Shared Libraries149600
+Node: Obsolete151028
+Node: Undocumented151720
+Node: Invoking Summary152017
+Node: Regexp153677
+Node: Regexp Usage155131
+Node: Escape Sequences157168
+Node: Regexp Operators163182
+Ref: Regexp Operators-Footnote-1170598
+Ref: Regexp Operators-Footnote-2170745
+Node: Bracket Expressions170843
+Ref: table-char-classes172865
+Node: Leftmost Longest176002
+Node: Computed Regexps177305
+Node: GNU Regexp Operators180732
+Node: Case-sensitivity184411
+Ref: Case-sensitivity-Footnote-1187298
+Ref: Case-sensitivity-Footnote-2187533
+Node: Regexp Summary187641
+Node: Reading Files189107
+Node: Records191201
+Node: awk split records191934
+Node: gawk split records196865
+Ref: gawk split records-Footnote-1201405
+Node: Fields201442
+Ref: Fields-Footnote-1204222
+Node: Nonconstant Fields204308
+Ref: Nonconstant Fields-Footnote-1206544
+Node: Changing Fields206748
+Node: Field Separators212676
+Node: Default Field Splitting215374
+Node: Regexp Field Splitting216492
+Node: Single Character Fields219845
+Node: Command Line Field Separator220905
+Node: Full Line Fields224123
+Ref: Full Line Fields-Footnote-1225645
+Ref: Full Line Fields-Footnote-2225691
+Node: Field Splitting Summary225792
+Node: Constant Size227866
+Node: Splitting By Content232444
+Ref: Splitting By Content-Footnote-1236415
+Node: Multiple Line236578
+Ref: Multiple Line-Footnote-1242460
+Node: Getline242639
+Node: Plain Getline244843
+Node: Getline/Variable247482
+Node: Getline/File248631
+Node: Getline/Variable/File250017
+Ref: Getline/Variable/File-Footnote-1251620
+Node: Getline/Pipe251708
+Node: Getline/Variable/Pipe254413
+Node: Getline/Coprocess255546
+Node: Getline/Variable/Coprocess256811
+Node: Getline Notes257551
+Node: Getline Summary260346
+Ref: table-getline-variants260768
+Node: Read Timeout261516
+Ref: Read Timeout-Footnote-1265357
+Node: Command-line directories265415
+Node: Input Summary266319
+Node: Input Exercises269491
+Node: Printing270219
+Node: Print271995
+Node: Print Examples273452
+Node: Output Separators276232
+Node: OFMT278249
+Node: Printf279605
+Node: Basic Printf280390
+Node: Control Letters281964
+Node: Format Modifiers285952
+Node: Printf Examples291967
+Node: Redirection294453
+Node: Special FD301294
+Ref: Special FD-Footnote-1304462
+Node: Special Files304536
+Node: Other Inherited Files305153
+Node: Special Network306154
+Node: Special Caveats307014
+Node: Close Files And Pipes307963
+Ref: Close Files And Pipes-Footnote-1315156
+Ref: Close Files And Pipes-Footnote-2315304
+Node: Output Summary315455
+Node: Output Exercises316453
+Node: Expressions317132
+Node: Values318320
+Node: Constants318998
+Node: Scalar Constants319689
+Ref: Scalar Constants-Footnote-1320553
+Node: Nondecimal-numbers320803
+Node: Regexp Constants323816
+Node: Using Constant Regexps324342
+Node: Variables327505
+Node: Using Variables328162
+Node: Assignment Options330072
+Node: Conversion331945
+Node: Strings And Numbers332469
+Ref: Strings And Numbers-Footnote-1335532
+Node: Locale influences conversions335641
+Ref: table-locale-affects338399
+Node: All Operators339017
+Node: Arithmetic Ops339646
+Node: Concatenation342152
+Ref: Concatenation-Footnote-1344999
+Node: Assignment Ops345106
+Ref: table-assign-ops350097
+Node: Increment Ops351410
+Node: Truth Values and Conditions354870
+Node: Truth Values355944
+Node: Typing and Comparison356992
+Node: Variable Typing357812
+Node: Comparison Operators361436
+Ref: table-relational-ops361855
+Node: POSIX String Comparison365350
+Ref: POSIX String Comparison-Footnote-1366424
+Node: Boolean Ops366563
+Ref: Boolean Ops-Footnote-1371045
+Node: Conditional Exp371137
+Node: Function Calls372873
+Node: Precedence376750
+Node: Locales380409
+Node: Expressions Summary382041
+Node: Patterns and Actions384614
+Node: Pattern Overview385734
+Node: Regexp Patterns387411
+Node: Expression Patterns387953
+Node: Ranges391734
+Node: BEGIN/END394842
+Node: Using BEGIN/END395603
+Ref: Using BEGIN/END-Footnote-1398339
+Node: I/O And BEGIN/END398445
+Node: BEGINFILE/ENDFILE400759
+Node: Empty403666
+Node: Using Shell Variables403983
+Node: Action Overview406257
+Node: Statements408582
+Node: If Statement410430
+Node: While Statement411925
+Node: Do Statement413953
+Node: For Statement415101
+Node: Switch Statement418259
+Node: Break Statement420645
+Node: Continue Statement422737
+Node: Next Statement424564
+Node: Nextfile Statement426947
+Node: Exit Statement429599
+Node: Built-in Variables432002
+Node: User-modified433135
+Ref: User-modified-Footnote-1440760
+Node: Auto-set440822
+Ref: Auto-set-Footnote-1453912
+Ref: Auto-set-Footnote-2454118
+Node: ARGC and ARGV454174
+Node: Pattern Action Summary458387
+Node: Arrays460817
+Node: Array Basics462146
+Node: Array Intro462990
+Ref: figure-array-elements464965
+Ref: Array Intro-Footnote-1467669
+Node: Reference to Elements467797
+Node: Assigning Elements470261
+Node: Array Example470752
+Node: Scanning an Array472511
+Node: Controlling Scanning475533
+Ref: Controlling Scanning-Footnote-1480932
+Node: Numeric Array Subscripts481248
+Node: Uninitialized Subscripts483432
+Node: Delete485051
+Ref: Delete-Footnote-1487803
+Node: Multidimensional487860
+Node: Multiscanning490955
+Node: Arrays of Arrays492546
+Node: Arrays Summary497313
+Node: Functions499406
+Node: Built-in500444
+Node: Calling Built-in501522
+Node: Numeric Functions503518
+Ref: Numeric Functions-Footnote-1507546
+Ref: Numeric Functions-Footnote-2507903
+Ref: Numeric Functions-Footnote-3507951
+Node: String Functions508223
+Ref: String Functions-Footnote-1531727
+Ref: String Functions-Footnote-2531855
+Ref: String Functions-Footnote-3532103
+Node: Gory Details532190
+Ref: table-sub-escapes533981
+Ref: table-sub-proposed535500
+Ref: table-posix-sub536863
+Ref: table-gensub-escapes538404
+Ref: Gory Details-Footnote-1539227
+Node: I/O Functions539378
+Ref: I/O Functions-Footnote-1546598
+Node: Time Functions546746
+Ref: Time Functions-Footnote-1557251
+Ref: Time Functions-Footnote-2557319
+Ref: Time Functions-Footnote-3557477
+Ref: Time Functions-Footnote-4557588
+Ref: Time Functions-Footnote-5557700
+Ref: Time Functions-Footnote-6557927
+Node: Bitwise Functions558193
+Ref: table-bitwise-ops558787
+Ref: Bitwise Functions-Footnote-1563125
+Node: Type Functions563298
+Node: I18N Functions564454
+Node: User-defined566105
+Node: Definition Syntax566910
+Ref: Definition Syntax-Footnote-1572597
+Node: Function Example572668
+Ref: Function Example-Footnote-1575590
+Node: Function Caveats575612
+Node: Calling A Function576130
+Node: Variable Scope577088
+Node: Pass By Value/Reference580082
+Node: Return Statement583581
+Node: Dynamic Typing586560
+Node: Indirect Calls587490
+Ref: Indirect Calls-Footnote-1597741
+Node: Functions Summary597869
+Node: Library Functions600574
+Ref: Library Functions-Footnote-1604181
+Ref: Library Functions-Footnote-2604324
+Node: Library Names604495
+Ref: Library Names-Footnote-1607955
+Ref: Library Names-Footnote-2608178
+Node: General Functions608264
+Node: Strtonum Function609367
+Node: Assert Function612389
+Node: Round Function615715
+Node: Cliff Random Function617256
+Node: Ordinal Functions618272
+Ref: Ordinal Functions-Footnote-1621335
+Ref: Ordinal Functions-Footnote-2621587
+Node: Join Function621797
+Ref: Join Function-Footnote-1623567
+Node: Getlocaltime Function623767
+Node: Readfile Function627509
+Node: Shell Quoting629481
+Node: Data File Management630882
+Node: Filetrans Function631514
+Node: Rewind Function635610
+Node: File Checking636996
+Ref: File Checking-Footnote-1638330
+Node: Empty Files638531
+Node: Ignoring Assigns640510
+Node: Getopt Function642060
+Ref: Getopt Function-Footnote-1653529
+Node: Passwd Functions653729
+Ref: Passwd Functions-Footnote-1662568
+Node: Group Functions662656
+Ref: Group Functions-Footnote-1670553
+Node: Walking Arrays670760
+Node: Library Functions Summary673768
+Node: Library Exercises675174
+Node: Sample Programs675639
+Node: Running Examples676409
+Node: Clones677137
+Node: Cut Program678361
+Node: Egrep Program688082
+Ref: Egrep Program-Footnote-1695594
+Node: Id Program695704
+Node: Split Program699384
+Ref: Split Program-Footnote-1702843
+Node: Tee Program702972
+Node: Uniq Program705762
+Node: Wc Program713188
+Ref: Wc Program-Footnote-1717443
+Node: Miscellaneous Programs717537
+Node: Dupword Program718750
+Node: Alarm Program720780
+Node: Translate Program725635
+Ref: Translate Program-Footnote-1730200
+Node: Labels Program730470
+Ref: Labels Program-Footnote-1733821
+Node: Word Sorting733905
+Node: History Sorting737977
+Node: Extract Program739812
+Node: Simple Sed747341
+Node: Igawk Program750415
+Ref: Igawk Program-Footnote-1764746
+Ref: Igawk Program-Footnote-2764948
+Ref: Igawk Program-Footnote-3765070
+Node: Anagram Program765185
+Node: Signature Program768247
+Node: Programs Summary769494
+Node: Programs Exercises770708
+Ref: Programs Exercises-Footnote-1774837
+Node: Advanced Features774928
+Node: Nondecimal Data776918
+Node: Array Sorting778509
+Node: Controlling Array Traversal779209
+Ref: Controlling Array Traversal-Footnote-1787576
+Node: Array Sorting Functions787694
+Ref: Array Sorting Functions-Footnote-1792785
+Node: Two-way I/O792981
+Ref: Two-way I/O-Footnote-1798801
+Ref: Two-way I/O-Footnote-2798988
+Node: TCP/IP Networking799070
+Node: Profiling802188
+Node: Advanced Features Summary809727
+Node: Internationalization811663
+Node: I18N and L10N813143
+Node: Explaining gettext813830
+Ref: Explaining gettext-Footnote-1818853
+Ref: Explaining gettext-Footnote-2819038
+Node: Programmer i18n819203
+Ref: Programmer i18n-Footnote-1824058
+Node: Translator i18n824107
+Node: String Extraction824901
+Ref: String Extraction-Footnote-1826033
+Node: Printf Ordering826119
+Ref: Printf Ordering-Footnote-1828905
+Node: I18N Portability828969
+Ref: I18N Portability-Footnote-1831425
+Node: I18N Example831488
+Ref: I18N Example-Footnote-1834294
+Node: Gawk I18N834367
+Node: I18N Summary835012
+Node: Debugger836353
+Node: Debugging837375
+Node: Debugging Concepts837816
+Node: Debugging Terms839625
+Node: Awk Debugging842200
+Node: Sample Debugging Session843106
+Node: Debugger Invocation843640
+Node: Finding The Bug845026
+Node: List of Debugger Commands851504
+Node: Breakpoint Control852837
+Node: Debugger Execution Control856531
+Node: Viewing And Changing Data859893
+Node: Execution Stack863267
+Node: Debugger Info864904
+Node: Miscellaneous Debugger Commands868975
+Node: Readline Support874063
+Node: Limitations874959
+Node: Debugging Summary877068
+Node: Arbitrary Precision Arithmetic878241
+Node: Computer Arithmetic879657
+Ref: table-numeric-ranges883248
+Ref: Computer Arithmetic-Footnote-1883970
+Node: Math Definitions884027
+Ref: table-ieee-formats887341
+Ref: Math Definitions-Footnote-1887944
+Node: MPFR features888049
+Node: FP Math Caution889766
+Ref: FP Math Caution-Footnote-1890838
+Node: Inexactness of computations891207
+Node: Inexact representation892167
+Node: Comparing FP Values893527
+Node: Errors accumulate894609
+Node: Getting Accuracy896042
+Node: Try To Round898752
+Node: Setting precision899651
+Ref: table-predefined-precision-strings900348
+Node: Setting the rounding mode902178
+Ref: table-gawk-rounding-modes902552
+Ref: Setting the rounding mode-Footnote-1905960
+Node: Arbitrary Precision Integers906139
+Ref: Arbitrary Precision Integers-Footnote-1909123
+Node: POSIX Floating Point Problems909272
+Ref: POSIX Floating Point Problems-Footnote-1913154
+Node: Floating point summary913192
+Node: Dynamic Extensions915382
+Node: Extension Intro916935
+Node: Plugin License918201
+Node: Extension Mechanism Outline918998
+Ref: figure-load-extension919437
+Ref: figure-register-new-function921002
+Ref: figure-call-new-function922094
+Node: Extension API Description924156
+Node: Extension API Functions Introduction925604
+Node: General Data Types930416
+Ref: General Data Types-Footnote-1936371
+Node: Memory Allocation Functions936670
+Ref: Memory Allocation Functions-Footnote-1939515
+Node: Constructor Functions939614
+Node: Registration Functions941359
+Node: Extension Functions942044
+Node: Exit Callback Functions944343
+Node: Extension Version String945593
+Node: Input Parsers946256
+Node: Output Wrappers956141
+Node: Two-way processors960653
+Node: Printing Messages962917
+Ref: Printing Messages-Footnote-1963991
+Node: Updating ERRNO964144
+Node: Requesting Values964883
+Ref: table-value-types-returned965620
+Node: Accessing Parameters966503
+Node: Symbol Table Access967738
+Node: Symbol table by name968250
+Node: Symbol table by cookie970271
+Ref: Symbol table by cookie-Footnote-1974420
+Node: Cached values974484
+Ref: Cached values-Footnote-1977985
+Node: Array Manipulation978076
+Ref: Array Manipulation-Footnote-1979175
+Node: Array Data Types979212
+Ref: Array Data Types-Footnote-1981870
+Node: Array Functions981962
+Node: Flattening Arrays985820
+Node: Creating Arrays992728
+Node: Extension API Variables997499
+Node: Extension Versioning998135
+Node: Extension API Informational Variables1000026
+Node: Extension API Boilerplate1001090
+Node: Finding Extensions1004904
+Node: Extension Example1005463
+Node: Internal File Description1006261
+Node: Internal File Ops1010341
+Ref: Internal File Ops-Footnote-11022103
+Node: Using Internal File Ops1022243
+Ref: Using Internal File Ops-Footnote-11024626
+Node: Extension Samples1024900
+Node: Extension Sample File Functions1026429
+Node: Extension Sample Fnmatch1034078
+Node: Extension Sample Fork1035565
+Node: Extension Sample Inplace1036783
+Node: Extension Sample Ord1039993
+Node: Extension Sample Readdir1040829
+Ref: table-readdir-file-types1041718
+Node: Extension Sample Revout1042523
+Node: Extension Sample Rev2way1043112
+Node: Extension Sample Read write array1043852
+Node: Extension Sample Readfile1045794
+Node: Extension Sample Time1046889
+Node: Extension Sample API Tests1048237
+Node: gawkextlib1048729
+Node: Extension summary1051153
+Node: Extension Exercises1054845
+Node: Language History1056342
+Node: V7/SVR3.11057998
+Node: SVR41060150
+Node: POSIX1061584
+Node: BTL1062963
+Node: POSIX/GNU1063692
+Node: Feature History1069213
+Node: Common Extensions1082542
+Node: Ranges and Locales1083825
+Ref: Ranges and Locales-Footnote-11088441
+Ref: Ranges and Locales-Footnote-21088468
+Ref: Ranges and Locales-Footnote-31088703
+Node: Contributors1088924
+Node: History summary1094493
+Node: Installation1095873
+Node: Gawk Distribution1096817
+Node: Getting1097301
+Node: Extracting1098262
+Node: Distribution contents1099900
+Node: Unix Installation1105651
+Node: Quick Installation1106267
+Node: Additional Configuration Options1108694
+Node: Configuration Philosophy1110498
+Node: Non-Unix Installation1112867
+Node: PC Installation1113325
+Node: PC Binary Installation1114645
+Node: PC Compiling1116497
+Ref: PC Compiling-Footnote-11119521
+Node: PC Testing1119630
+Node: PC Using1120810
+Node: Cygwin1124924
+Node: MSYS1125694
+Node: VMS Installation1126195
+Node: VMS Compilation1126986
+Ref: VMS Compilation-Footnote-11128215
+Node: VMS Dynamic Extensions1128273
+Node: VMS Installation Details1129958
+Node: VMS Running1132211
+Node: VMS GNV1136490
+Node: VMS Old Gawk1137225
+Node: Bugs1137696
+Node: Other Versions1141893
+Node: Installation summary1148477
+Node: Notes1149535
+Node: Compatibility Mode1150400
+Node: Additions1151182
+Node: Accessing The Source1152107
+Node: Adding Code1153542
+Node: New Ports1159761
+Node: Derived Files1164249
+Ref: Derived Files-Footnote-11169734
+Ref: Derived Files-Footnote-21169769
+Ref: Derived Files-Footnote-31170367
+Node: Future Extensions1170481
+Node: Implementation Limitations1171139
+Node: Extension Design1172322
+Node: Old Extension Problems1173476
+Ref: Old Extension Problems-Footnote-11174994
+Node: Extension New Mechanism Goals1175051
+Ref: Extension New Mechanism Goals-Footnote-11178415
+Node: Extension Other Design Decisions1178604
+Node: Extension Future Growth1180717
+Node: Old Extension Mechanism1181553
+Node: Notes summary1183316
+Node: Basic Concepts1184498
+Node: Basic High Level1185179
+Ref: figure-general-flow1185461
+Ref: figure-process-flow1186146
+Ref: Basic High Level-Footnote-11189447
+Node: Basic Data Typing1189632
+Node: Glossary1192960
+Node: Copying1224906
+Node: GNU Free Documentation License1262445
+Node: Index1287563
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index a48c40f..ec816c3 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -171,31 +171,6 @@
 @end macro
 @end ifdocbook
 
address@hidden hack for docbook, where comma shouldn't always follow an @ref{}
address@hidden
address@hidden DBREF{text}
address@hidden
address@hidden macro
address@hidden DBXREF{text}
address@hidden
address@hidden macro
address@hidden DBPXREF{text}
address@hidden
address@hidden macro
address@hidden ifdocbook
-
address@hidden
address@hidden DBREF{text}
address@hidden,
address@hidden macro
address@hidden DBXREF{text}
address@hidden,
address@hidden macro
address@hidden DBPXREF{text}
address@hidden,
address@hidden macro
address@hidden ifnotdocbook
-
 @ifclear FOR_PRINT
 @set FN file name
 @set FFN File name
@@ -1194,7 +1169,7 @@ $\sim\! Cn^2$
 @end ifnotdocbook
 @end ifnottex
 @docbook
-<emphasis>&sim; Cn<superscript>2</superscript></emphasis> @c
+<emphasis>&sim; Cn<superscript>2</superscript></emphasis>
 @end docbook
 performance, while
 theory predicted
@@ -1207,7 +1182,7 @@ $\sim\! Cn\log n$
 @end ifnotdocbook
 @end ifnottex
 @docbook
-<emphasis>&sim; Cn log n</emphasis> @c
+<emphasis>&sim; Cn log n</emphasis>
 @end docbook
 behavior. A few minutes poring
 over the @file{awkprof.out} profile pinpointed the problem to
@@ -1505,7 +1480,7 @@ John Haque rewrote the @command{gawk} internals, in the 
process providing
 an @command{awk}-level debugger. This version became available as
 @command{gawk} @value{PVERSION} 4.0 in 2011.
 
address@hidden
address@hidden
 for a full list of those who have made important contributions to 
@command{gawk}.
 
 @node Names
@@ -1889,7 +1864,7 @@ pressing the @kbd{d} key, and finally releasing both keys.
 
 For the sake of brevity, throughout this @value{DOCUMENT}, we refer to
 Brian Kernighan's version of @command{awk} as ``BWK @command{awk}.''
-(@DBXREF{Other Versions} for information on his and other versions.)
+(@xref{Other Versions} for information on his and other versions.)
 
 @ifset FOR_PRINT
 @quotation NOTE
@@ -2048,7 +2023,7 @@ and the major new additions are @ref{Arbitrary Precision 
Arithmetic},
 and @ref{Dynamic Extensions}.
 
 This @value{DOCUMENT} will undoubtedly continue to evolve.  If you
-find an error in the @value{DOCUMENT}, please report it!  @DBXREF{Bugs}
+find an error in the @value{DOCUMENT}, please report it!  @xref{Bugs}
 for information on submitting problem reports electronically.
 
 @ifset FOR_PRINT
@@ -2244,7 +2219,7 @@ portable program it is today.  It has been and continues 
to be a pleasure
 working with this team of fine people.
 
 Notable code and documentation contributions were made by
-a number of people. @DBXREF{Contributors} for the full list.
+a number of people. @xref{Contributors} for the full list.
 
 @ifset FOR_PRINT
 @cindex Oram, Andy
@@ -2886,7 +2861,7 @@ The shell does no interpretation of the quoted text, 
passing it on verbatim
 to the command.
 It is @emph{impossible} to embed a single quote inside single-quoted text.
 Refer back to
address@hidden
address@hidden
 for an example of what happens if you try.
 
 @item
@@ -3314,9 +3289,9 @@ no actions run.
 
 After processing all the rules that match the line (and perhaps there are 
none),
 @command{awk} reads the next line.  (However,
address@hidden Statement}
address@hidden Statement}
 @ifdocbook
-and @DBREF{Nextfile Statement}.)
+and @ref{Nextfile Statement}.)
 @end ifdocbook
 @ifnotdocbook
 and also @pxref{Nextfile Statement}.)
@@ -3587,7 +3562,7 @@ and array sorting.
 
 As we develop our presentation of the @command{awk} language, we will introduce
 most of the variables and many of the functions. They are described
-systematically in @DBREF{Built-in Variables} and in
+systematically in @ref{Built-in Variables} and in
 @ref{Built-in}.
 
 @node When
@@ -4122,7 +4097,7 @@ in the left margin, and function call counts for each 
function.
 Operate in strict POSIX mode.  This disables all @command{gawk}
 extensions (just like @option{--traditional}) and
 disables all extensions not allowed by POSIX.
address@hidden Extensions} for a summary of the extensions
address@hidden Extensions} for a summary of the extensions
 in @command{gawk} that are disabled by this option.
 Also,
 the following additional
@@ -5225,7 +5200,7 @@ with a backslash have special meaning in regexps.
 
 In a regexp, a backslash before any character that is not in the previous list
 and not listed in
address@hidden Regexp Operators}
address@hidden Regexp Operators}
 means that the next character should be taken literally, even if it would
 normally be a regexp operator.  For example, @code{/a\+b/} matches the three
 characters @samp{a+b}.
@@ -5407,7 +5382,7 @@ The escape sequences described
 @ifnotinfo
 earlier
 @end ifnotinfo
-in @DBREF{Escape Sequences}
+in @ref{Escape Sequences}
 are valid inside a regexp.  They are introduced by a @samp{\} and
 are recognized and converted into corresponding real characters as
 the very first step in processing regexps.
@@ -5642,7 +5617,7 @@ Within a bracket expression, a @dfn{range expression} 
consists of two
 characters separated by a hyphen.  It matches any single character that
 sorts between the two characters, based upon the system's native character
 set.  For example, @samp{[0-9]} is equivalent to @samp{[0123456789]}.
-(See @DBREF{Ranges and Locales} for an explanation of how the POSIX
+(See @ref{Ranges and Locales} for an explanation of how the POSIX
 standard and @command{gawk} have changed over time.  This is mainly
 of historical interest.)
 
@@ -6503,7 +6478,7 @@ The empty string @code{""} (a string without any 
characters)
 has a special meaning
 as the value of @code{RS}. It means that records are separated
 by one or more blank lines and nothing else.
address@hidden Line} for more details.
address@hidden Line} for more details.
 
 If you change the value of @code{RS} in the middle of an @command{awk} run,
 the new value is used to delimit subsequent records, but the record
@@ -6567,7 +6542,7 @@ $ @kbd{echo record 1 AAAA record 2 BBBB record 3 |}
 The square brackets delineate the contents of @code{RT}, letting you
 see the leading and trailing whitespace. The final value of
 @code{RT} is a newline.
address@hidden Sed} for a more useful example
address@hidden Sed} for a more useful example
 of @code{RS} as a regexp and @code{RT}.
 
 If you set @code{RS} to a regular expression that allows optional
@@ -6639,8 +6614,8 @@ character as a record separator. However, this is a 
special case:
 
 @cindex records, treating files as
 @cindex treating files, as single records
address@hidden Function} for an interesting way to read
-whole files.  If you are using @command{gawk}, see @DBREF{Extension Sample
address@hidden Function} for an interesting way to read
+whole files.  If you are using @command{gawk}, see @ref{Extension Sample
 Readfile} for another option.
 
 @docbook
@@ -6690,8 +6665,8 @@ character as a record separator. However, this is a 
special case:
 
 @cindex records, treating files as
 @cindex treating files, as single records
address@hidden Function} for an interesting way to read
-whole files.  If you are using @command{gawk}, see @DBREF{Extension Sample
address@hidden Function} for an interesting way to read
+whole files.  If you are using @command{gawk}, see @ref{Extension Sample
 Readfile} for another option.
 @end cartouche
 @end ifnotdocbook
@@ -6941,9 +6916,9 @@ else
 
 @noindent
 should print @samp{everything is normal}, because @code{NF+1} is certain
-to be out of range.  (@DBXREF{If Statement}
+to be out of range.  (@xref{If Statement}
 for more information about @command{awk}'s @code{if-else} statements.
address@hidden and Comparison}
address@hidden and Comparison}
 for more information about the @samp{!=} operator.)
 
 It is important to note that making an assignment to an existing field
@@ -7768,7 +7743,7 @@ else
 This information is useful when writing a function
 that needs to temporarily change @code{FS} or @code{FIELDWIDTHS},
 read some records, and then restore the original settings
-(@DBPXREF{Passwd Functions}
+(@pxref{Passwd Functions}
 for an example of such a function).
 
 @node Splitting By Content
@@ -8035,7 +8010,7 @@ $ @kbd{awk -f addrs.awk addresses}
 @dots{}
 @end example
 
address@hidden Program} for a more realistic program dealing with
address@hidden Program} for a more realistic program dealing with
 address lists.  The following list summarizes how records are split,
 based on the value of
 @ifinfo
@@ -8358,7 +8333,7 @@ One deficiency of this program is that it does not 
process nested
 @code{@@include} statements
 (i.e., @code{@@include} statements in included files)
 the way a true macro preprocessor would.
address@hidden Program} for a program
address@hidden Program} for a program
 that does handle nested @code{@@include} statements.
 
 @node Getline/Pipe
@@ -8807,7 +8782,7 @@ If either of the @option{--posix}
 or @option{--traditional} options is given, then @command{gawk} reverts
 to treating a directory on the command line as a fatal error.
 
address@hidden Sample Readdir} for a way to treat directories
address@hidden Sample Readdir} for a way to treat directories
 as usable data from an @command{awk} program.
 
 @node Input Summary
@@ -8920,7 +8895,7 @@ The @code{print} statement is not limited when
 computing @emph{which} values to print. However, with two exceptions,
 you cannot specify @emph{how} to print them---how many
 columns, whether to use exponential notation or not, and so on.
-(For the exceptions, @DBPXREF{Output Separators} and
+(For the exceptions, @pxref{Output Separators} and
 @ref{OFMT}.)
 For printing with specifications, you need the @code{printf} statement
 (@pxref{Printf}).
@@ -9817,7 +9792,7 @@ close(report)
 
 The @code{close()} function is called here because it's a good idea to close
 the pipe as soon as all the intended output has been sent to it.
address@hidden Files And Pipes}
address@hidden Files And Pipes}
 for more information.
 
 This example also illustrates the use of a variable to represent
@@ -9848,9 +9823,9 @@ for a brief discussion.
 for a more complete discussion.
 @end ifnotdocbook
 @ifdocbook
address@hidden/Coprocess}
address@hidden/Coprocess}
 for a brief discussion and
address@hidden I/O}
address@hidden I/O}
 for a more complete discussion.
 @end ifdocbook
 @end table
@@ -9929,7 +9904,7 @@ The program builds up a list of command lines,
 using the @command{mv} utility to rename the files.
 It then sends the list to the shell for execution.
 
address@hidden Quoting} for a function that can help in generating
address@hidden Quoting} for a function that can help in generating
 command lines to be fed to the shell.
 
 @docbook
@@ -9964,7 +9939,7 @@ The program builds up a list of command lines,
 using the @command{mv} utility to rename the files.
 It then sends the list to the shell for execution.
 
address@hidden Quoting} for a function that can help in generating
address@hidden Quoting} for a function that can help in generating
 command lines to be fed to the shell.
 @end cartouche
 @end ifnotdocbook
@@ -10676,7 +10651,7 @@ you can use the @code{strtonum()} function
 to convert the data into a number.
 Most of the time, you will want to use octal or hexadecimal constants
 when working with the built-in bit-manipulation functions;
-see @DBREF{Bitwise Functions}
+see @ref{Bitwise Functions}
 for more information.
 
 Unlike in some early C implementations, @samp{8} and @samp{9} are not
@@ -10909,7 +10884,7 @@ array parameters (@pxref{String Functions}).
 @cindex variables, initializing
 A few variables have special built-in meanings, such as @code{FS} (the
 field separator) and @code{NF} (the number of fields in the current input
-record).  @DBXREF{Built-in Variables} for a list of the predefined variables.
+record).  @xref{Built-in Variables} for a list of the predefined variables.
 These predefined variables can be used and assigned just like all other
 variables, but their values are also used or changed automatically by
 @command{awk}.  All predefined variables' names are entirely uppercase.
@@ -10950,7 +10925,7 @@ as in the following:
 the variable is set at the very beginning, even before the
 @code{BEGIN} rules execute.  The @option{-v} option and its assignment
 must precede all the @value{FN} arguments, as well as the program text.
-(@DBXREF{Options} for more information about
+(@xref{Options} for more information about
 the @option{-v} option.)
 Otherwise, the variable assignment is performed at a time determined by
 its position among the input file arguments---after the processing of the
@@ -11089,7 +11064,7 @@ specifies the output format to use when printing 
numbers with @code{print}.
 conversion from the semantics of printing.  Both @code{CONVFMT} and
 @code{OFMT} have the same default value: @code{"%.6g"}.  In the vast majority
 of cases, old @command{awk} programs do not change their behavior.
address@hidden for more information on the @code{print} statement.
address@hidden for more information on the @code{print} statement.
 
 @docbook
 </sidebar>
@@ -11112,7 +11087,7 @@ specifies the output format to use when printing 
numbers with @code{print}.
 conversion from the semantics of printing.  Both @code{CONVFMT} and
 @code{OFMT} have the same default value: @code{"%.6g"}.  In the vast majority
 of cases, old @command{awk} programs do not change their behavior.
address@hidden for more information on the @code{print} statement.
address@hidden for more information on the @code{print} statement.
 @end cartouche
 @end ifnotdocbook
 
@@ -11614,10 +11589,10 @@ The indices of @code{bar} are practically guaranteed 
to be different, because
 @xref{Arrays},
 and
 @ifnotdocbook
address@hidden Functions}
address@hidden Functions}
 @end ifnotdocbook
 @ifdocbook
address@hidden Functions}
address@hidden Functions}
 @end ifdocbook
 for more information.)
 This example illustrates an important fact about assignment
@@ -11793,7 +11768,6 @@ 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.
 
address@hidden 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
@@ -11802,14 +11776,14 @@ long as you stick to numbers that are fairly small 
(less than
 @iftex
 @math{10^{12}}).
 @end iftex
address@hidden
address@hidden
address@hidden
 10e12).
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden).
address@hidden ifnotinfo
 @end ifnottex
address@hidden
-10<superscript>12</superscript>). @c
address@hidden docbook
 
 @cindex @code{$} (dollar sign), incrementing fields and arrays
 @cindex dollar sign (@code{$}), incrementing fields and arrays
@@ -12647,10 +12621,10 @@ example, the function @code{sqrt()} computes the 
square root of a number.
 @cindex functions, built-in
 A fixed set of functions are @dfn{built in}, which means they are
 available in every @command{awk} program.  The @code{sqrt()} function is one
-of these.  @DBXREF{Built-in} for a list of built-in
+of these.  @xref{Built-in} for a list of built-in
 functions and their descriptions.  In addition, you can define
 functions for use in your program.
address@hidden
address@hidden
 for instructions on how to do this.
 Finally, @command{gawk} lets you write functions in C or C++
 that may be called from your program (@pxref{Dynamic Extensions}).
@@ -12693,7 +12667,7 @@ Some of the built-in functions have one or
 more optional arguments.
 If those arguments are not supplied, the functions
 use a reasonable default value.
address@hidden for full details.  If arguments
address@hidden for full details.  If arguments
 are omitted in calls to user-defined functions, then those arguments are
 treated as local variables. Such local variables act like the
 empty string if referenced where a string value is required,
@@ -13408,7 +13382,7 @@ The order in which library functions are named on the 
command line
 controls the order in which their @code{BEGIN} and @code{END} rules are
 executed.  Therefore, you have to be careful when writing such rules in
 library files so that the order in which they are executed doesn't matter.
address@hidden for more information on
address@hidden for more information on
 using library functions.
 @xref{Library Functions},
 for a number of useful library functions.
@@ -13472,12 +13446,12 @@ Finally, the @code{next} and @code{nextfile} 
statements are not allowed
 in a @code{BEGIN} rule, because the implicit
 read-a-record-and-match-against-the-rules loop has not started yet.  
Similarly, those statements
 are not valid in an @code{END} rule, because all the input has been read.
-(@DBXREF{Next Statement} and
+(@xref{Next Statement} and
 @ifnotdocbook
address@hidden Statement}.)
address@hidden Statement}.)
 @end ifnotdocbook
 @ifdocbook
address@hidden Statement}.)
address@hidden Statement}.)
 @end ifdocbook
 
 @node BEGINFILE/ENDFILE
@@ -14049,7 +14023,7 @@ for (i in array)
 @end example
 
 @noindent
address@hidden an Array}
address@hidden an Array}
 for more information on this version of the @code{for} loop.
 
 @node Switch Statement
@@ -14434,7 +14408,7 @@ In such a case,
 if you don't want the @code{END} rule to do its job, set a variable
 to a nonzero value before the @code{exit} statement and check that variable in
 the @code{END} rule.
address@hidden Function}
address@hidden Function}
 for an example that does this.
 
 @cindex dark corner, @code{exit} statement
@@ -14445,7 +14419,7 @@ In the case where an argument
 is supplied to a first @code{exit} statement, and then @code{exit} is
 called a second time from an @code{END} rule with no argument,
 @command{awk} uses the previously supplied exit value.  @value{DARKCORNER}
address@hidden Status} for more information.
address@hidden Status} for more information.
 
 @cindex programming conventions, @code{exit} statement
 For example, suppose an error condition occurs that is difficult or
@@ -14555,7 +14529,7 @@ A space-separated list of columns that tells 
@command{gawk}
 how to split input with fixed columnar boundaries.
 Assigning a value to @code{FIELDWIDTHS}
 overrides the use of @code{FS} and @code{FPAT} for field splitting.
address@hidden Size} for more information.
address@hidden Size} for more information.
 
 @cindex @command{gawk}, @code{FPAT} variable in
 @cindex @code{FPAT} variable
@@ -14567,7 +14541,7 @@ A regular expression (as a string) that tells 
@command{gawk}
 to create the fields based on text that matches the regular expression.
 Assigning a value to @code{FPAT}
 overrides the use of @code{FS} and @code{FIELDWIDTHS} for field splitting.
address@hidden By Content} for more information.
address@hidden By Content} for more information.
 
 @cindex @code{FS} variable
 @cindex separators, field
@@ -14783,7 +14757,7 @@ method of accessing command-line arguments.
 The value of @code{ARGV[0]} can vary from system to system.
 Also, you should note that the program text is @emph{not} included in
 @code{ARGV}, nor are any of @command{awk}'s command-line options.
address@hidden and ARGV} for information
address@hidden and ARGV} for information
 about how @command{awk} uses these variables.
 @value{DARKCORNER}
 
@@ -14821,9 +14795,9 @@ Some operating systems may not have environment 
variables.
 On such systems, the @code{ENVIRON} array is empty (except for
 @address@hidden"AWKPATH"]}} and
 @address@hidden"AWKLIBPATH"]}};
address@hidden Variable} and
address@hidden Variable} and
 @ifdocbook
address@hidden Variable}).
address@hidden Variable}).
 @end ifdocbook
 @ifnotdocbook
 @pxref{AWKLIBPATH Variable}).
@@ -15043,11 +15017,11 @@ The following elements allow you to change 
@command{gawk}'s behavior:
 @item PROCINFO["@var{command}", "pty"]
 For two-way communication to @var{command}, use a pseudo-tty instead
 of setting up a two-way pipe.
address@hidden I/O} for more information.
address@hidden I/O} for more information.
 
 @item PROCINFO["@var{input_name}", "READ_TIMEOUT"]
 Set a timeout for reading from input redirection @var{input_name}.
address@hidden Timeout} for more information.
address@hidden Timeout} for more information.
 
 @item PROCINFO["sorted_in"]
 If this element exists in @code{PROCINFO}, its value controls the
@@ -15223,7 +15197,7 @@ changed.
 @cindex arguments, command-line
 @cindex command line, arguments
 
address@hidden
address@hidden
 presented the following program describing the information contained in 
@code{ARGC}
 and @code{ARGV}:
 
@@ -15293,12 +15267,12 @@ use the @code{delete} statement to remove elements 
from
 
 All of these actions are typically done in the @code{BEGIN} rule,
 before actual processing of the input begins.
address@hidden Program} and
address@hidden Program} and
 @ifnotdocbook
address@hidden Program}
address@hidden Program}
 @end ifnotdocbook
 @ifdocbook
address@hidden Program}
address@hidden Program}
 @end ifdocbook
 for examples
 of each way of removing elements from @code{ARGV}.
@@ -15348,20 +15322,20 @@ gawk -f myprog.awk -q -v file1 file2 @dots{}
 @noindent
 Because @option{-q} is not a valid @command{gawk} option, it and the
 following @option{-v} are passed on to the @command{awk} program.
-(@DBXREF{Getopt Function} for an @command{awk} library function that
+(@xref{Getopt Function} for an @command{awk} library function that
 parses command-line options.)
 
 When designing your program, you should choose options that don't
 conflict with @command{gawk}'s, because it will process any options
 that it accepts before passing the rest of the command line on to
 your program.  Using @samp{#!} with the @option{-E} option may help
-(@DBPXREF{Executable Scripts}
+(@pxref{Executable Scripts}
 and
 @ifnotdocbook
address@hidden).
address@hidden).
 @end ifnotdocbook
 @ifdocbook
address@hidden).
address@hidden).
 @end ifdocbook
 
 @node Pattern Action Summary
@@ -15968,7 +15942,7 @@ the word as the index.  The second rule scans the 
elements of @code{used} to
 find all the distinct words that appear in the input.  It prints each
 word that is more than 10 characters long and also prints the number of
 such words.
address@hidden Functions}
address@hidden Functions}
 for more information on the built-in function @code{length()}.
 
 @example
@@ -15991,7 +15965,7 @@ END @{
 @end example
 
 @noindent
address@hidden Sorting}
address@hidden Sorting}
 for a more detailed example of this type.
 
 @cindex arrays, elements, order of access by @code{in} operator
@@ -16739,7 +16713,7 @@ for (i in a) @{
 @end example
 
 @noindent
address@hidden Arrays} for a user-defined function that ``walks'' an
address@hidden Arrays} for a user-defined function that ``walks'' an
 arbitrarily dimensioned array of arrays.
 
 Recall that a reference to an uninitialized array element yields a value
@@ -17127,7 +17101,7 @@ together.
 The following description ignores the third argument, @var{how}, as it
 requires understanding features that we have not discussed yet.  Thus,
 the discussion here is a deliberate simplification.  (We do provide all
-the details later on; see @DBREF{Array Sorting Functions} for the full story.)
+the details later on; see @ref{Array Sorting Functions} for the full story.)
 @end quotation
 
 Both functions return the number of elements in the array @var{source}.
@@ -17302,7 +17276,7 @@ contrast, @code{length(15 * 35)} works out to three. In 
this example,
 @end ifnotdocbook
 @end ifnottex
 @docbook
-15 &sdot; 35 = 525, @c
+15 &sdot; 35 = 525,
 @end docbook
 and 525 is then converted to the string @code{"525"}, which has
 three characters.
@@ -17374,7 +17348,7 @@ at which that substring begins (one, if it starts at 
the beginning of
 The @var{regexp} argument may be either a regexp constant
 (@code{/address@hidden@code{/}) or a string constant 
(@code{"address@hidden@code{"}).
 In the latter case, the string is treated as a regexp to be matched.
address@hidden Regexps} for a
address@hidden Regexps} for a
 discussion of the difference between the two forms, and the
 implications for writing your program correctly.
 
@@ -17571,7 +17545,7 @@ Modern implementations of @command{awk}, including 
@command{gawk}, allow
 the third argument to be a regexp constant 
(@address@hidden/address@hidden@code{/}})
 as well as a string.  @value{DARKCORNER}
 The POSIX standard allows this as well.
address@hidden Regexps} for a
address@hidden Regexps} for a
 discussion of the difference between using a string constant or a regexp 
constant,
 and the implications for writing your program correctly.
 
@@ -17622,7 +17596,7 @@ Using the @code{strtonum()} function is @emph{not} the 
same as adding zero
 to a string value; the automatic coercion of strings to numbers
 works only for decimal data, not for octal or address@hidden
 you use the @option{--non-decimal-data} option, which isn't recommended.
address@hidden Data} for more information.}
address@hidden Data} for more information.}
 
 Note also that @code{strtonum()} uses the current locale's decimal point
 for recognizing numbers (@pxref{Locales}).
@@ -17640,7 +17614,7 @@ Return the number of substitutions made (zero or one).
 The @var{regexp} argument may be either a regexp constant
 (@code{/address@hidden@code{/}) or a string constant 
(@code{"address@hidden@code{"}).
 In the latter case, the string is treated as a regexp to be matched.
address@hidden Regexps} for a
address@hidden Regexps} for a
 discussion of the difference between the two forms, and the
 implications for writing your program correctly.
 
@@ -18177,7 +18151,7 @@ Optional parameters are enclosed in square brackets ([ 
]):
 Close the file @var{filename} for input or output. Alternatively, the
 argument may be a shell command that was used for creating a coprocess, or
 for redirecting to or from a pipe; then the coprocess or pipe is closed.
address@hidden Files And Pipes}
address@hidden Files And Pipes}
 for more information.
 
 When closing a coprocess, it is occasionally useful to first close
@@ -18553,19 +18527,18 @@ All known POSIX-compliant systems support timestamps 
from 0 through
 @iftex
 @math{2^{31} - 1},
 @end iftex
address@hidden
address@hidden
address@hidden
 2^31 - 1,
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden @minus{} 1,
address@hidden ifnotinfo
 @end ifnottex
address@hidden
-2<superscript>31</superscript> &minus; 1, @c
address@hidden docbook
 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.
address@hidden FIXME: Use @sup here for superscript
 
 @cindex @command{date} utility, GNU
 @cindex time, retrieving
@@ -20466,7 +20439,7 @@ It contains the following chapters:
 @cindex functions, library
 @cindex functions, user-defined, library of
 
address@hidden describes how to write
address@hidden describes how to write
 your own @command{awk} functions.  Writing functions is important, because
 it allows you to encapsulate algorithms and program tasks in a single
 place.  It simplifies programming, making program development more
@@ -20499,7 +20472,7 @@ use these functions.
 The functions are presented here in a progression from simple to complex.
 
 @cindex Texinfo
address@hidden Program}
address@hidden Program}
 presents a program that you can use to extract the source code for
 these example library functions and programs from the Texinfo source
 for this @value{DOCUMENT}.
@@ -20651,7 +20624,7 @@ A different convention, common in the Tcl community, is 
to use a single
 associative array to hold the values needed by the library function(s), or
 ``package.''  This significantly decreases the number of actual global names
 in use.  For example, the functions described in
address@hidden Functions}
address@hidden Functions}
 might have used array elements @address@hidden"inited"]}}, 
@address@hidden"total"]}},
 @address@hidden"count"]}}, and @address@hidden"awklib"]}}, instead of
 @address@hidden, @address@hidden, @address@hidden,
@@ -21210,7 +21183,7 @@ more difficult than they really need to be.}
 @cindex timestamps, formatted
 @cindex time, managing
 The @code{systime()} and @code{strftime()} functions described in
address@hidden Functions}
address@hidden Functions}
 provide the minimum functionality necessary for dealing with the time of day
 in human-readable form.  Although @code{strftime()} is extensive, the control
 formats are not necessarily easy to remember or intuitively obvious when
@@ -21296,7 +21269,7 @@ function getlocaltime(time,    ret, now, i)
 
 The string indices are easier to use and read than the various formats
 required by @code{strftime()}.  The @code{alarm} program presented in
address@hidden Program}
address@hidden Program}
 uses this function.
 A more general design for the @code{getlocaltime()} function would have
 allowed the user to supply an optional timestamp value to use instead
@@ -21363,7 +21336,7 @@ will never match if the file has contents.  
@command{gawk} reads data from
 the file into @code{tmp}, attempting to match @code{RS}.  The match fails
 after each read, but fails quickly, such that @command{gawk} fills
 @code{tmp} with the entire contents of the file.
-(@DBXREF{Records} for information on @code{RT} and @code{RS}.)
+(@xref{Records} for information on @code{RT} and @code{RS}.)
 
 In the case that @code{file} is empty, the return value is the null
 string.  Thus, calling code may use something like:
@@ -21377,7 +21350,7 @@ if (length(contents) == 0)
 This tests the result to see if it is empty or not. An equivalent
 test would be @samp{contents == ""}.
 
address@hidden Sample Readfile} for an extension function that
address@hidden Sample Readfile} for an extension function that
 also reads an entire file into memory.
 
 @node Shell Quoting
@@ -21576,7 +21549,7 @@ END @{ endfile(_filename_) @}
 @c endfile
 @end example
 
address@hidden Program}
address@hidden Program}
 shows how this library function can be used and
 how it simplifies writing the main program.
 
@@ -22204,7 +22177,7 @@ Using @samp{#!} with the @option{-E} option may help 
avoid
 conflicts between your program's options and @command{gawk}'s options,
 as @option{-E} causes @command{gawk} to abandon processing of
 further options
-(@DBPXREF{Executable Scripts} and
+(@pxref{Executable Scripts} and
 @ifnotdocbook
 @pxref{Options}).
 @end ifnotdocbook
@@ -22232,7 +22205,7 @@ However, because these are numbers, they do not provide 
very useful
 information to the average user.  There needs to be some way to find the
 user information associated with the user and group ID numbers.  This
 @value{SECTION} presents a suite of functions for retrieving information from 
the
-user database.  @DBXREF{Group Functions}
+user database.  @xref{Group Functions}
 for a similar suite that retrieves information from the group database.
 
 @cindex @code{getpwent()} function (C library)
@@ -22566,7 +22539,7 @@ once.  If you are worried about squeezing every last 
cycle out of your
 this is not necessary, as most @command{awk} programs are I/O-bound,
 and such a change would clutter up the code.
 
-The @command{id} program in @DBREF{Id Program}
+The @command{id} program in @ref{Id Program}
 uses these functions.
 
 @node Group Functions
@@ -22584,7 +22557,7 @@ uses these functions.
 @cindex group file
 @cindex files, group
 Much of the discussion presented in
address@hidden Functions}
address@hidden Functions}
 applies to the group database as well.  Although there has traditionally
 been a well-known file (@file{/etc/group}) in a well-known format, the POSIX
 standard only provides a set of C library routines
@@ -22921,13 +22894,13 @@ Most of the work is in scanning the database and 
building the various
 associative arrays.  The functions that the user calls are themselves very
 simple, relying on @command{awk}'s associative arrays to do work.
 
-The @command{id} program in @DBREF{Id Program}
+The @command{id} program in @ref{Id Program}
 uses these functions.
 
 @node Walking Arrays
 @section Traversing Arrays of Arrays
 
address@hidden of Arrays} described how @command{gawk}
address@hidden of Arrays} described how @command{gawk}
 provides arrays of arrays.  In particular, any element of
 an array may be either a scalar or another array. The
 @code{isarray()} function (@pxref{Type Functions})
@@ -23140,7 +23113,7 @@ an intervening value in @code{ARGV} is a variable 
assignment.
 @ignore
 @c June 13 2015: Antonio points out that this is answered in the text. Ooops.
 @item
address@hidden Arrays} presented a function that walked a multidimensional
address@hidden Arrays} presented a function that walked a multidimensional
 array to print it out.  However, walking an array and processing
 each element is a general-purpose operation.  Generalize the
 @code{walk_array()} function by adding an additional parameter named
@@ -25164,7 +25137,7 @@ of lines on the page
 @end ifnotdocbook
 @end ifnottex
 @docbook
-(20 &sdot; 5 = 100). @c
+(20 &sdot; 5 = 100).
 @end docbook
 
 Most of the work is done in the @code{printpage()} function.
@@ -26543,7 +26516,7 @@ the separator can considerably simplify such tasks.
 
 @item
 The examples here demonstrate the usefulness of the library
-functions from @DBREF{Library Functions}
+functions from @ref{Library Functions}
 for a number of real (if small) programs.
 
 @item
@@ -26874,7 +26847,7 @@ Often, though, it is desirable to be able to loop over 
the elements
 in a particular order that you, the programmer, choose.  @command{gawk}
 lets you do this.
 
address@hidden Scanning} describes how you can assign special,
address@hidden Scanning} describes how you can assign special,
 predefined values to @code{PROCINFO["sorted_in"]} in order to
 control the order in which @command{gawk} traverses an array
 during a @code{for} loop.
@@ -26899,7 +26872,7 @@ Here, @code{i1} and @code{i2} are the indices, and 
@code{v1} and @code{v2}
 are the corresponding values of the two elements being compared.
 Either @code{v1} or @code{v2}, or both, can be arrays if the array being
 traversed contains subarrays as values.
-(@DBXREF{Arrays of Arrays} for more information about subarrays.)
+(@xref{Arrays of Arrays} for more information about subarrays.)
 The three possible return values are interpreted as follows:
 
 @table @code
@@ -28398,7 +28371,7 @@ BEGIN @{
 
 @end enumerate
 
address@hidden Example}
address@hidden Example}
 for an example program showing the steps to create
 and use translations from @command{awk}.
 
@@ -28459,7 +28432,7 @@ second argument to @code{dcngettext()address@hidden
 You should distribute the generated @file{.pot} file with
 your @command{awk} program; translators will eventually use it
 to provide you translations that you can also then distribute.
address@hidden Example}
address@hidden Example}
 for the full list of steps to go through to create and test
 translations for @command{guide}.
 
@@ -30307,31 +30280,16 @@ signed. The possible ranges of values are shown in 
@ref{table-numeric-ranges}.
 @item Single-precision floating point (approximate) @tab @math{1.175494^{-38}} 
@tab @math{3.402823^{38}}
 @item Double-precision floating point (approximate) @tab 
@math{2.225074^{-308}} @tab @math{1.797693^{308}}
 @end iftex
address@hidden
address@hidden
address@hidden
 @item Single-precision floating point (approximate) @tab 1.175494e-38 @tab 
3.402823e38
 @item Double-precision floating point (approximate) @tab 2.225074e-308 @tab 
1.797693e308
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden Single-precision floating point (approximate) @tab 
address@hidden @tab address@hidden
address@hidden Double-precision floating point (approximate) @tab 
address@hidden @tab address@hidden
address@hidden ifnotinfo
 @end ifnottex
address@hidden
address@hidden Single-precision floating point (approximate) @tab
address@hidden FIXME: Use @sup here for superscript
address@hidden
-1.175494<superscript>-38</superscript>
address@hidden docbook
address@hidden
address@hidden
-3.402823<superscript>38</superscript>
address@hidden docbook
address@hidden Double-precision floating point (approximate) @tab
address@hidden
-2.225074<superscript>-308</superscript>
address@hidden docbook
address@hidden
address@hidden
-1.797693<superscript>308</superscript>
address@hidden docbook
address@hidden ifdocbook
 @end multitable
 @end float
 
@@ -30399,7 +30357,7 @@ formula:
 @end ifnotdocbook
 @end ifnottex
 @docbook
-<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis> @c
+<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>
 @end docbook
 @end display
 
@@ -30491,7 +30449,7 @@ Two predefined variables, @code{PREC} and 
@code{ROUNDMODE},
 provide control over the working precision and the rounding mode.
 The precision and the rounding mode are set globally for every operation
 to follow.
address@hidden precision} and @DBREF{Setting the rounding mode}
address@hidden precision} and @ref{Setting the rounding mode}
 for more information.
 
 @node FP Math Caution
@@ -30925,17 +30883,16 @@ the following computes
 @iftex
 @math{5^{4^{3^{2}}}},
 @end iftex
address@hidden
address@hidden
address@hidden
 5^4^3^2,
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden@address@hidden,
address@hidden ifnotinfo
 @end ifnottex
address@hidden
-5<superscript>4<superscript>3<superscript>2</superscript></superscript></superscript>,
 @c
address@hidden docbook
 the result of which is beyond the
 limits of ordinary hardware double-precision floating-point values:
address@hidden FIXME: Use @sup here for superscript
 
 @example
 $ @kbd{gawk -M 'BEGIN @{}
@@ -30963,7 +30920,7 @@ would be 3.322 x 183231,
 @docbook
 <emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>)
 would be
-<emphasis>prec</emphasis> = 3.322 &sdot; 183231, @c
+<emphasis>prec</emphasis> = 3.322 &sdot; 183231,
 @end docbook
 or 608693.
 
@@ -31393,7 +31350,7 @@ The API also provides major and minor version numbers, 
so that an
 extension can check if the @command{gawk} it is loaded with supports the
 facilities it was compiled with.  (Version mismatches ``shouldn't''
 happen, but we all know how @emph{that} goes.)
address@hidden Versioning} for details.
address@hidden Versioning} for details.
 @end itemize
 
 @node Extension API Description
@@ -32614,7 +32571,7 @@ indicates the type of value expected.
 @item awk_bool_t set_argument(size_t count, awk_array_t array);
 Convert a parameter that was undefined into an array; this provides
 call by reference for arrays.  Return false if @code{count} is too big,
-or if the argument's type is not undefined.  @DBXREF{Array Manipulation}
+or if the argument's type is not undefined.  @xref{Array Manipulation}
 for more information on creating arrays.
 @end table
 
@@ -33032,7 +32989,7 @@ The following functions relate to arrays as a whole:
 @table @code
 @item awk_array_t create_array(void);
 Create a new array to which elements may be added.
address@hidden Arrays} for a discussion of how to
address@hidden Arrays} for a discussion of how to
 create a new array and add elements to it.
 
 @item awk_bool_t clear_array(awk_array_t a_cookie);
@@ -33461,7 +33418,7 @@ $ @kbd{AWKLIBPATH=$PWD ./gawk -f subarray.awk}
 @end example
 
 @noindent
-(@DBXREF{Finding Extensions} for more information on the
+(@xref{Finding Extensions} for more information on the
 @env{AWKLIBPATH} environment variable.)
 
 @node Extension API Variables
@@ -33696,7 +33653,7 @@ Compiled extensions have to be installed in a directory 
where
 built in the default fashion, the directory in which to find
 extensions is @file{/usr/local/lib/gawk}.  You can also specify a search
 path with a list of directories to search for compiled extensions.
address@hidden Variable} for more information.
address@hidden Variable} for more information.
 
 @node Extension Example
 @section Example: Some File Functions
@@ -34275,7 +34232,7 @@ of the @file{gawkapi.h} header file,
 the following address@hidden practice, you would probably want to
 use the GNU Autotools (Automake, Autoconf, Libtool, and @command{gettext}) to
 configure and build your libraries. Instructions for doing so are beyond
-the scope of this @value{DOCUMENT}. @DBXREF{gawkextlib} for Internet links to
+the scope of this @value{DOCUMENT}. @xref{gawkextlib} for Internet links to
 the tools.} create a GNU/Linux shared library:
 
 @example
@@ -35529,7 +35486,7 @@ The ability to delete all of an array at once with 
@samp{delete @var{array}}
 
 @end itemize
 
address@hidden Extensions} for a list of common extensions
address@hidden Extensions} for a list of common extensions
 not permitted by the POSIX standard.
 
 The 2008 POSIX standard can be found online at
@@ -35574,7 +35531,7 @@ or array elements through it
 @end ignore
 @end itemize
 
address@hidden Extensions} for a full list of the extensions
address@hidden Extensions} for a full list of the extensions
 available in his @command{awk}.
 
 @node POSIX/GNU
@@ -36958,7 +36915,7 @@ This appendix provides instructions for installing 
@command{gawk} on the
 various platforms that are supported by the developers.  The primary
 developer supports GNU/Linux (and Unix), whereas the other ports are
 contributed.
address@hidden
address@hidden
 for the email addresses of the people who maintain
 the respective ports.
 
@@ -37225,7 +37182,7 @@ source file for this @value{DOCUMENT}. It also contains 
a @file{Makefile.in} fil
 The library functions from
 @ref{Library Functions},
 and the @command{igawk} program from
address@hidden Program}
address@hidden Program}
 are included as ready-to-use files in the @command{gawk} distribution.
 They are installed as part of the installation process.
 The rest of the programs in this @value{DOCUMENT} are available in appropriate
@@ -37244,11 +37201,11 @@ Files needed for building @command{gawk} under 
MS-Windows
 @ifclear FOR_PRINT
 and OS/2
 @end ifclear
-(@DBPXREF{PC Installation} for details).
+(@pxref{PC Installation} for details).
 
 @item vms/*
 Files needed for building @command{gawk} under Vax/VMS and OpenVMS
-(@DBPXREF{VMS Installation} for details).
+(@pxref{VMS Installation} for details).
 
 @item test/*
 A test suite for
@@ -37449,7 +37406,7 @@ Autoconf will not work on your system in some other 
fashion.
 If you do have a problem, the @file{configure.ac} file is the input for
 Autoconf.  You may be able to change this file and generate a
 new version of @command{configure} that works on your system
-(@DBPXREF{Bugs}
+(@pxref{Bugs}
 for information on how to report problems in configuring @command{gawk}).
 The same mechanism may be used to send in updates to @file{configure.ac}
 and/or @file{custom.h}.
@@ -37924,7 +37881,7 @@ The most recent builds used HP C V7.3 on Alpha VMS 8.3 
and both
 Alpha and IA64 VMS 8.4 used HP C address@hidden IA64 architecture
 is also known as ``Itanium.''}
 
address@hidden GNV} for information on building
address@hidden GNV} for information on building
 @command{gawk} as a PCSI kit that is compatible with the GNV product.
 
 @node VMS Dynamic Extensions
@@ -38444,7 +38401,7 @@ directory named @file{awk}.
 This version requires an ISO C (1990 standard) compiler; the C compiler
 from GCC (the GNU Compiler Collection) works quite nicely.
 
address@hidden Extensions}
address@hidden Extensions}
 for a list of extensions in this @command{awk} that are not in POSIX 
@command{awk}.
 
 As a side note, Dan Bornstein has created a Git repository tracking
@@ -38480,7 +38437,7 @@ Once you have it,
 is similar to @command{gawk}'s
 (@pxref{Unix Installation}).
 
address@hidden Extensions}
address@hidden Extensions}
 for a list of extensions in @command{mawk} that are not in POSIX @command{awk}.
 
 @cindex Sumner, Andrew
@@ -38708,7 +38665,7 @@ as well as any considerations you should bear in mind.
 @appendixsubsec Accessing The @command{gawk} Git Repository
 
 As @command{gawk} is Free Software, the source code is always available.
address@hidden Distribution} describes how to get and build the formal,
address@hidden Distribution} describes how to get and build the formal,
 released versions of @command{gawk}.
 
 @cindex @command{git} utility
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index c392624..678fac3 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -166,31 +166,6 @@
 @end macro
 @end ifdocbook
 
address@hidden hack for docbook, where comma shouldn't always follow an @ref{}
address@hidden
address@hidden DBREF{text}
address@hidden
address@hidden macro
address@hidden DBXREF{text}
address@hidden
address@hidden macro
address@hidden DBPXREF{text}
address@hidden
address@hidden macro
address@hidden ifdocbook
-
address@hidden
address@hidden DBREF{text}
address@hidden,
address@hidden macro
address@hidden DBXREF{text}
address@hidden,
address@hidden macro
address@hidden DBPXREF{text}
address@hidden,
address@hidden macro
address@hidden ifnotdocbook
-
 @ifclear FOR_PRINT
 @set FN file name
 @set FFN File name
@@ -1189,7 +1164,7 @@ $\sim\! Cn^2$
 @end ifnotdocbook
 @end ifnottex
 @docbook
-<emphasis>&sim; Cn<superscript>2</superscript></emphasis> @c
+<emphasis>&sim; Cn<superscript>2</superscript></emphasis>
 @end docbook
 performance, while
 theory predicted
@@ -1202,7 +1177,7 @@ $\sim\! Cn\log n$
 @end ifnotdocbook
 @end ifnottex
 @docbook
-<emphasis>&sim; Cn log n</emphasis> @c
+<emphasis>&sim; Cn log n</emphasis>
 @end docbook
 behavior. A few minutes poring
 over the @file{awkprof.out} profile pinpointed the problem to
@@ -1472,7 +1447,7 @@ John Haque rewrote the @command{gawk} internals, in the 
process providing
 an @command{awk}-level debugger. This version became available as
 @command{gawk} @value{PVERSION} 4.0 in 2011.
 
address@hidden
address@hidden
 for a full list of those who have made important contributions to 
@command{gawk}.
 
 @node Names
@@ -1856,7 +1831,7 @@ pressing the @kbd{d} key, and finally releasing both keys.
 
 For the sake of brevity, throughout this @value{DOCUMENT}, we refer to
 Brian Kernighan's version of @command{awk} as ``BWK @command{awk}.''
-(@DBXREF{Other Versions} for information on his and other versions.)
+(@xref{Other Versions} for information on his and other versions.)
 
 @ifset FOR_PRINT
 @quotation NOTE
@@ -2015,7 +1990,7 @@ and the major new additions are @ref{Arbitrary Precision 
Arithmetic},
 and @ref{Dynamic Extensions}.
 
 This @value{DOCUMENT} will undoubtedly continue to evolve.  If you
-find an error in the @value{DOCUMENT}, please report it!  @DBXREF{Bugs}
+find an error in the @value{DOCUMENT}, please report it!  @xref{Bugs}
 for information on submitting problem reports electronically.
 
 @ifset FOR_PRINT
@@ -2211,7 +2186,7 @@ portable program it is today.  It has been and continues 
to be a pleasure
 working with this team of fine people.
 
 Notable code and documentation contributions were made by
-a number of people. @DBXREF{Contributors} for the full list.
+a number of people. @xref{Contributors} for the full list.
 
 @ifset FOR_PRINT
 @cindex Oram, Andy
@@ -2797,7 +2772,7 @@ The shell does no interpretation of the quoted text, 
passing it on verbatim
 to the command.
 It is @emph{impossible} to embed a single quote inside single-quoted text.
 Refer back to
address@hidden
address@hidden
 for an example of what happens if you try.
 
 @item
@@ -3225,9 +3200,9 @@ no actions run.
 
 After processing all the rules that match the line (and perhaps there are 
none),
 @command{awk} reads the next line.  (However,
address@hidden Statement}
address@hidden Statement}
 @ifdocbook
-and @DBREF{Nextfile Statement}.)
+and @ref{Nextfile Statement}.)
 @end ifdocbook
 @ifnotdocbook
 and also @pxref{Nextfile Statement}.)
@@ -3498,7 +3473,7 @@ and array sorting.
 
 As we develop our presentation of the @command{awk} language, we will introduce
 most of the variables and many of the functions. They are described
-systematically in @DBREF{Built-in Variables} and in
+systematically in @ref{Built-in Variables} and in
 @ref{Built-in}.
 
 @node When
@@ -4033,7 +4008,7 @@ in the left margin, and function call counts for each 
function.
 Operate in strict POSIX mode.  This disables all @command{gawk}
 extensions (just like @option{--traditional}) and
 disables all extensions not allowed by POSIX.
address@hidden Extensions} for a summary of the extensions
address@hidden Extensions} for a summary of the extensions
 in @command{gawk} that are disabled by this option.
 Also,
 the following additional
@@ -5136,7 +5111,7 @@ with a backslash have special meaning in regexps.
 
 In a regexp, a backslash before any character that is not in the previous list
 and not listed in
address@hidden Regexp Operators}
address@hidden Regexp Operators}
 means that the next character should be taken literally, even if it would
 normally be a regexp operator.  For example, @code{/a\+b/} matches the three
 characters @samp{a+b}.
@@ -5235,7 +5210,7 @@ The escape sequences described
 @ifnotinfo
 earlier
 @end ifnotinfo
-in @DBREF{Escape Sequences}
+in @ref{Escape Sequences}
 are valid inside a regexp.  They are introduced by a @samp{\} and
 are recognized and converted into corresponding real characters as
 the very first step in processing regexps.
@@ -5470,7 +5445,7 @@ Within a bracket expression, a @dfn{range expression} 
consists of two
 characters separated by a hyphen.  It matches any single character that
 sorts between the two characters, based upon the system's native character
 set.  For example, @samp{[0-9]} is equivalent to @samp{[0123456789]}.
-(See @DBREF{Ranges and Locales} for an explanation of how the POSIX
+(See @ref{Ranges and Locales} for an explanation of how the POSIX
 standard and @command{gawk} have changed over time.  This is mainly
 of historical interest.)
 
@@ -6287,7 +6262,7 @@ The empty string @code{""} (a string without any 
characters)
 has a special meaning
 as the value of @code{RS}. It means that records are separated
 by one or more blank lines and nothing else.
address@hidden Line} for more details.
address@hidden Line} for more details.
 
 If you change the value of @code{RS} in the middle of an @command{awk} run,
 the new value is used to delimit subsequent records, but the record
@@ -6351,7 +6326,7 @@ $ @kbd{echo record 1 AAAA record 2 BBBB record 3 |}
 The square brackets delineate the contents of @code{RT}, letting you
 see the leading and trailing whitespace. The final value of
 @code{RT} is a newline.
address@hidden Sed} for a more useful example
address@hidden Sed} for a more useful example
 of @code{RS} as a regexp and @code{RT}.
 
 If you set @code{RS} to a regular expression that allows optional
@@ -6418,8 +6393,8 @@ character as a record separator. However, this is a 
special case:
 
 @cindex records, treating files as
 @cindex treating files, as single records
address@hidden Function} for an interesting way to read
-whole files.  If you are using @command{gawk}, see @DBREF{Extension Sample
address@hidden Function} for an interesting way to read
+whole files.  If you are using @command{gawk}, see @ref{Extension Sample
 Readfile} for another option.
 @end sidebar
 
@@ -6668,9 +6643,9 @@ else
 
 @noindent
 should print @samp{everything is normal}, because @code{NF+1} is certain
-to be out of range.  (@DBXREF{If Statement}
+to be out of range.  (@xref{If Statement}
 for more information about @command{awk}'s @code{if-else} statements.
address@hidden and Comparison}
address@hidden and Comparison}
 for more information about the @samp{!=} operator.)
 
 It is important to note that making an assignment to an existing field
@@ -7368,7 +7343,7 @@ else
 This information is useful when writing a function
 that needs to temporarily change @code{FS} or @code{FIELDWIDTHS},
 read some records, and then restore the original settings
-(@DBPXREF{Passwd Functions}
+(@pxref{Passwd Functions}
 for an example of such a function).
 
 @node Splitting By Content
@@ -7635,7 +7610,7 @@ $ @kbd{awk -f addrs.awk addresses}
 @dots{}
 @end example
 
address@hidden Program} for a more realistic program dealing with
address@hidden Program} for a more realistic program dealing with
 address lists.  The following list summarizes how records are split,
 based on the value of
 @ifinfo
@@ -7958,7 +7933,7 @@ One deficiency of this program is that it does not 
process nested
 @code{@@include} statements
 (i.e., @code{@@include} statements in included files)
 the way a true macro preprocessor would.
address@hidden Program} for a program
address@hidden Program} for a program
 that does handle nested @code{@@include} statements.
 
 @node Getline/Pipe
@@ -8407,7 +8382,7 @@ If either of the @option{--posix}
 or @option{--traditional} options is given, then @command{gawk} reverts
 to treating a directory on the command line as a fatal error.
 
address@hidden Sample Readdir} for a way to treat directories
address@hidden Sample Readdir} for a way to treat directories
 as usable data from an @command{awk} program.
 
 @node Input Summary
@@ -8520,7 +8495,7 @@ The @code{print} statement is not limited when
 computing @emph{which} values to print. However, with two exceptions,
 you cannot specify @emph{how} to print them---how many
 columns, whether to use exponential notation or not, and so on.
-(For the exceptions, @DBPXREF{Output Separators} and
+(For the exceptions, @pxref{Output Separators} and
 @ref{OFMT}.)
 For printing with specifications, you need the @code{printf} statement
 (@pxref{Printf}).
@@ -9417,7 +9392,7 @@ close(report)
 
 The @code{close()} function is called here because it's a good idea to close
 the pipe as soon as all the intended output has been sent to it.
address@hidden Files And Pipes}
address@hidden Files And Pipes}
 for more information.
 
 This example also illustrates the use of a variable to represent
@@ -9448,9 +9423,9 @@ for a brief discussion.
 for a more complete discussion.
 @end ifnotdocbook
 @ifdocbook
address@hidden/Coprocess}
address@hidden/Coprocess}
 for a brief discussion and
address@hidden I/O}
address@hidden I/O}
 for a more complete discussion.
 @end ifdocbook
 @end table
@@ -9524,7 +9499,7 @@ The program builds up a list of command lines,
 using the @command{mv} utility to rename the files.
 It then sends the list to the shell for execution.
 
address@hidden Quoting} for a function that can help in generating
address@hidden Quoting} for a function that can help in generating
 command lines to be fed to the shell.
 @end sidebar
 
@@ -10172,7 +10147,7 @@ you can use the @code{strtonum()} function
 to convert the data into a number.
 Most of the time, you will want to use octal or hexadecimal constants
 when working with the built-in bit-manipulation functions;
-see @DBREF{Bitwise Functions}
+see @ref{Bitwise Functions}
 for more information.
 
 Unlike in some early C implementations, @samp{8} and @samp{9} are not
@@ -10376,7 +10351,7 @@ array parameters (@pxref{String Functions}).
 @cindex variables, initializing
 A few variables have special built-in meanings, such as @code{FS} (the
 field separator) and @code{NF} (the number of fields in the current input
-record).  @DBXREF{Built-in Variables} for a list of the predefined variables.
+record).  @xref{Built-in Variables} for a list of the predefined variables.
 These predefined variables can be used and assigned just like all other
 variables, but their values are also used or changed automatically by
 @command{awk}.  All predefined variables' names are entirely uppercase.
@@ -10417,7 +10392,7 @@ as in the following:
 the variable is set at the very beginning, even before the
 @code{BEGIN} rules execute.  The @option{-v} option and its assignment
 must precede all the @value{FN} arguments, as well as the program text.
-(@DBXREF{Options} for more information about
+(@xref{Options} for more information about
 the @option{-v} option.)
 Otherwise, the variable assignment is performed at a time determined by
 its position among the input file arguments---after the processing of the
@@ -10551,7 +10526,7 @@ specifies the output format to use when printing 
numbers with @code{print}.
 conversion from the semantics of printing.  Both @code{CONVFMT} and
 @code{OFMT} have the same default value: @code{"%.6g"}.  In the vast majority
 of cases, old @command{awk} programs do not change their behavior.
address@hidden for more information on the @code{print} statement.
address@hidden for more information on the @code{print} statement.
 @end sidebar
 
 @node Locale influences conversions
@@ -11052,10 +11027,10 @@ The indices of @code{bar} are practically guaranteed 
to be different, because
 @xref{Arrays},
 and
 @ifnotdocbook
address@hidden Functions}
address@hidden Functions}
 @end ifnotdocbook
 @ifdocbook
address@hidden Functions}
address@hidden Functions}
 @end ifdocbook
 for more information.)
 This example illustrates an important fact about assignment
@@ -11179,7 +11154,6 @@ 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.
 
address@hidden 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
@@ -11188,14 +11162,14 @@ long as you stick to numbers that are fairly small 
(less than
 @iftex
 @math{10^{12}}).
 @end iftex
address@hidden
address@hidden
address@hidden
 10e12).
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden).
address@hidden ifnotinfo
 @end ifnottex
address@hidden
-10<superscript>12</superscript>). @c
address@hidden docbook
 
 @cindex @code{$} (dollar sign), incrementing fields and arrays
 @cindex dollar sign (@code{$}), incrementing fields and arrays
@@ -11975,10 +11949,10 @@ example, the function @code{sqrt()} computes the 
square root of a number.
 @cindex functions, built-in
 A fixed set of functions are @dfn{built in}, which means they are
 available in every @command{awk} program.  The @code{sqrt()} function is one
-of these.  @DBXREF{Built-in} for a list of built-in
+of these.  @xref{Built-in} for a list of built-in
 functions and their descriptions.  In addition, you can define
 functions for use in your program.
address@hidden
address@hidden
 for instructions on how to do this.
 Finally, @command{gawk} lets you write functions in C or C++
 that may be called from your program (@pxref{Dynamic Extensions}).
@@ -12021,7 +11995,7 @@ Some of the built-in functions have one or
 more optional arguments.
 If those arguments are not supplied, the functions
 use a reasonable default value.
address@hidden for full details.  If arguments
address@hidden for full details.  If arguments
 are omitted in calls to user-defined functions, then those arguments are
 treated as local variables. Such local variables act like the
 empty string if referenced where a string value is required,
@@ -12736,7 +12710,7 @@ The order in which library functions are named on the 
command line
 controls the order in which their @code{BEGIN} and @code{END} rules are
 executed.  Therefore, you have to be careful when writing such rules in
 library files so that the order in which they are executed doesn't matter.
address@hidden for more information on
address@hidden for more information on
 using library functions.
 @xref{Library Functions},
 for a number of useful library functions.
@@ -12800,12 +12774,12 @@ Finally, the @code{next} and @code{nextfile} 
statements are not allowed
 in a @code{BEGIN} rule, because the implicit
 read-a-record-and-match-against-the-rules loop has not started yet.  
Similarly, those statements
 are not valid in an @code{END} rule, because all the input has been read.
-(@DBXREF{Next Statement} and
+(@xref{Next Statement} and
 @ifnotdocbook
address@hidden Statement}.)
address@hidden Statement}.)
 @end ifnotdocbook
 @ifdocbook
address@hidden Statement}.)
address@hidden Statement}.)
 @end ifdocbook
 
 @node BEGINFILE/ENDFILE
@@ -13377,7 +13351,7 @@ for (i in array)
 @end example
 
 @noindent
address@hidden an Array}
address@hidden an Array}
 for more information on this version of the @code{for} loop.
 
 @node Switch Statement
@@ -13762,7 +13736,7 @@ In such a case,
 if you don't want the @code{END} rule to do its job, set a variable
 to a nonzero value before the @code{exit} statement and check that variable in
 the @code{END} rule.
address@hidden Function}
address@hidden Function}
 for an example that does this.
 
 @cindex dark corner, @code{exit} statement
@@ -13773,7 +13747,7 @@ In the case where an argument
 is supplied to a first @code{exit} statement, and then @code{exit} is
 called a second time from an @code{END} rule with no argument,
 @command{awk} uses the previously supplied exit value.  @value{DARKCORNER}
address@hidden Status} for more information.
address@hidden Status} for more information.
 
 @cindex programming conventions, @code{exit} statement
 For example, suppose an error condition occurs that is difficult or
@@ -13883,7 +13857,7 @@ A space-separated list of columns that tells 
@command{gawk}
 how to split input with fixed columnar boundaries.
 Assigning a value to @code{FIELDWIDTHS}
 overrides the use of @code{FS} and @code{FPAT} for field splitting.
address@hidden Size} for more information.
address@hidden Size} for more information.
 
 @cindex @command{gawk}, @code{FPAT} variable in
 @cindex @code{FPAT} variable
@@ -13895,7 +13869,7 @@ A regular expression (as a string) that tells 
@command{gawk}
 to create the fields based on text that matches the regular expression.
 Assigning a value to @code{FPAT}
 overrides the use of @code{FS} and @code{FIELDWIDTHS} for field splitting.
address@hidden By Content} for more information.
address@hidden By Content} for more information.
 
 @cindex @code{FS} variable
 @cindex separators, field
@@ -14111,7 +14085,7 @@ method of accessing command-line arguments.
 The value of @code{ARGV[0]} can vary from system to system.
 Also, you should note that the program text is @emph{not} included in
 @code{ARGV}, nor are any of @command{awk}'s command-line options.
address@hidden and ARGV} for information
address@hidden and ARGV} for information
 about how @command{awk} uses these variables.
 @value{DARKCORNER}
 
@@ -14149,9 +14123,9 @@ Some operating systems may not have environment 
variables.
 On such systems, the @code{ENVIRON} array is empty (except for
 @address@hidden"AWKPATH"]}} and
 @address@hidden"AWKLIBPATH"]}};
address@hidden Variable} and
address@hidden Variable} and
 @ifdocbook
address@hidden Variable}).
address@hidden Variable}).
 @end ifdocbook
 @ifnotdocbook
 @pxref{AWKLIBPATH Variable}).
@@ -14371,11 +14345,11 @@ The following elements allow you to change 
@command{gawk}'s behavior:
 @item PROCINFO["@var{command}", "pty"]
 For two-way communication to @var{command}, use a pseudo-tty instead
 of setting up a two-way pipe.
address@hidden I/O} for more information.
address@hidden I/O} for more information.
 
 @item PROCINFO["@var{input_name}", "READ_TIMEOUT"]
 Set a timeout for reading from input redirection @var{input_name}.
address@hidden Timeout} for more information.
address@hidden Timeout} for more information.
 
 @item PROCINFO["sorted_in"]
 If this element exists in @code{PROCINFO}, its value controls the
@@ -14505,7 +14479,7 @@ changed.
 @cindex arguments, command-line
 @cindex command line, arguments
 
address@hidden
address@hidden
 presented the following program describing the information contained in 
@code{ARGC}
 and @code{ARGV}:
 
@@ -14575,12 +14549,12 @@ use the @code{delete} statement to remove elements 
from
 
 All of these actions are typically done in the @code{BEGIN} rule,
 before actual processing of the input begins.
address@hidden Program} and
address@hidden Program} and
 @ifnotdocbook
address@hidden Program}
address@hidden Program}
 @end ifnotdocbook
 @ifdocbook
address@hidden Program}
address@hidden Program}
 @end ifdocbook
 for examples
 of each way of removing elements from @code{ARGV}.
@@ -14630,20 +14604,20 @@ gawk -f myprog.awk -q -v file1 file2 @dots{}
 @noindent
 Because @option{-q} is not a valid @command{gawk} option, it and the
 following @option{-v} are passed on to the @command{awk} program.
-(@DBXREF{Getopt Function} for an @command{awk} library function that
+(@xref{Getopt Function} for an @command{awk} library function that
 parses command-line options.)
 
 When designing your program, you should choose options that don't
 conflict with @command{gawk}'s, because it will process any options
 that it accepts before passing the rest of the command line on to
 your program.  Using @samp{#!} with the @option{-E} option may help
-(@DBPXREF{Executable Scripts}
+(@pxref{Executable Scripts}
 and
 @ifnotdocbook
address@hidden).
address@hidden).
 @end ifnotdocbook
 @ifdocbook
address@hidden).
address@hidden).
 @end ifdocbook
 
 @node Pattern Action Summary
@@ -15250,7 +15224,7 @@ the word as the index.  The second rule scans the 
elements of @code{used} to
 find all the distinct words that appear in the input.  It prints each
 word that is more than 10 characters long and also prints the number of
 such words.
address@hidden Functions}
address@hidden Functions}
 for more information on the built-in function @code{length()}.
 
 @example
@@ -15273,7 +15247,7 @@ END @{
 @end example
 
 @noindent
address@hidden Sorting}
address@hidden Sorting}
 for a more detailed example of this type.
 
 @cindex arrays, elements, order of access by @code{in} operator
@@ -16021,7 +15995,7 @@ for (i in a) @{
 @end example
 
 @noindent
address@hidden Arrays} for a user-defined function that ``walks'' an
address@hidden Arrays} for a user-defined function that ``walks'' an
 arbitrarily dimensioned array of arrays.
 
 Recall that a reference to an uninitialized array element yields a value
@@ -16409,7 +16383,7 @@ together.
 The following description ignores the third argument, @var{how}, as it
 requires understanding features that we have not discussed yet.  Thus,
 the discussion here is a deliberate simplification.  (We do provide all
-the details later on; see @DBREF{Array Sorting Functions} for the full story.)
+the details later on; see @ref{Array Sorting Functions} for the full story.)
 @end quotation
 
 Both functions return the number of elements in the array @var{source}.
@@ -16584,7 +16558,7 @@ contrast, @code{length(15 * 35)} works out to three. In 
this example,
 @end ifnotdocbook
 @end ifnottex
 @docbook
-15 &sdot; 35 = 525, @c
+15 &sdot; 35 = 525,
 @end docbook
 and 525 is then converted to the string @code{"525"}, which has
 three characters.
@@ -16656,7 +16630,7 @@ at which that substring begins (one, if it starts at 
the beginning of
 The @var{regexp} argument may be either a regexp constant
 (@code{/address@hidden@code{/}) or a string constant 
(@code{"address@hidden@code{"}).
 In the latter case, the string is treated as a regexp to be matched.
address@hidden Regexps} for a
address@hidden Regexps} for a
 discussion of the difference between the two forms, and the
 implications for writing your program correctly.
 
@@ -16853,7 +16827,7 @@ Modern implementations of @command{awk}, including 
@command{gawk}, allow
 the third argument to be a regexp constant 
(@address@hidden/address@hidden@code{/}})
 as well as a string.  @value{DARKCORNER}
 The POSIX standard allows this as well.
address@hidden Regexps} for a
address@hidden Regexps} for a
 discussion of the difference between using a string constant or a regexp 
constant,
 and the implications for writing your program correctly.
 
@@ -16904,7 +16878,7 @@ Using the @code{strtonum()} function is @emph{not} the 
same as adding zero
 to a string value; the automatic coercion of strings to numbers
 works only for decimal data, not for octal or address@hidden
 you use the @option{--non-decimal-data} option, which isn't recommended.
address@hidden Data} for more information.}
address@hidden Data} for more information.}
 
 Note also that @code{strtonum()} uses the current locale's decimal point
 for recognizing numbers (@pxref{Locales}).
@@ -16922,7 +16896,7 @@ Return the number of substitutions made (zero or one).
 The @var{regexp} argument may be either a regexp constant
 (@code{/address@hidden@code{/}) or a string constant 
(@code{"address@hidden@code{"}).
 In the latter case, the string is treated as a regexp to be matched.
address@hidden Regexps} for a
address@hidden Regexps} for a
 discussion of the difference between the two forms, and the
 implications for writing your program correctly.
 
@@ -17426,7 +17400,7 @@ Optional parameters are enclosed in square brackets ([ 
]):
 Close the file @var{filename} for input or output. Alternatively, the
 argument may be a shell command that was used for creating a coprocess, or
 for redirecting to or from a pipe; then the coprocess or pipe is closed.
address@hidden Files And Pipes}
address@hidden Files And Pipes}
 for more information.
 
 When closing a coprocess, it is occasionally useful to first close
@@ -17674,19 +17648,18 @@ All known POSIX-compliant systems support timestamps 
from 0 through
 @iftex
 @math{2^{31} - 1},
 @end iftex
address@hidden
address@hidden
address@hidden
 2^31 - 1,
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden @minus{} 1,
address@hidden ifnotinfo
 @end ifnottex
address@hidden
-2<superscript>31</superscript> &minus; 1, @c
address@hidden docbook
 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.
address@hidden FIXME: Use @sup here for superscript
 
 @cindex @command{date} utility, GNU
 @cindex time, retrieving
@@ -19587,7 +19560,7 @@ It contains the following chapters:
 @cindex functions, library
 @cindex functions, user-defined, library of
 
address@hidden describes how to write
address@hidden describes how to write
 your own @command{awk} functions.  Writing functions is important, because
 it allows you to encapsulate algorithms and program tasks in a single
 place.  It simplifies programming, making program development more
@@ -19620,7 +19593,7 @@ use these functions.
 The functions are presented here in a progression from simple to complex.
 
 @cindex Texinfo
address@hidden Program}
address@hidden Program}
 presents a program that you can use to extract the source code for
 these example library functions and programs from the Texinfo source
 for this @value{DOCUMENT}.
@@ -19772,7 +19745,7 @@ A different convention, common in the Tcl community, is 
to use a single
 associative array to hold the values needed by the library function(s), or
 ``package.''  This significantly decreases the number of actual global names
 in use.  For example, the functions described in
address@hidden Functions}
address@hidden Functions}
 might have used array elements @address@hidden"inited"]}}, 
@address@hidden"total"]}},
 @address@hidden"count"]}}, and @address@hidden"awklib"]}}, instead of
 @address@hidden, @address@hidden, @address@hidden,
@@ -20331,7 +20304,7 @@ more difficult than they really need to be.}
 @cindex timestamps, formatted
 @cindex time, managing
 The @code{systime()} and @code{strftime()} functions described in
address@hidden Functions}
address@hidden Functions}
 provide the minimum functionality necessary for dealing with the time of day
 in human-readable form.  Although @code{strftime()} is extensive, the control
 formats are not necessarily easy to remember or intuitively obvious when
@@ -20417,7 +20390,7 @@ function getlocaltime(time,    ret, now, i)
 
 The string indices are easier to use and read than the various formats
 required by @code{strftime()}.  The @code{alarm} program presented in
address@hidden Program}
address@hidden Program}
 uses this function.
 A more general design for the @code{getlocaltime()} function would have
 allowed the user to supply an optional timestamp value to use instead
@@ -20484,7 +20457,7 @@ will never match if the file has contents.  
@command{gawk} reads data from
 the file into @code{tmp}, attempting to match @code{RS}.  The match fails
 after each read, but fails quickly, such that @command{gawk} fills
 @code{tmp} with the entire contents of the file.
-(@DBXREF{Records} for information on @code{RT} and @code{RS}.)
+(@xref{Records} for information on @code{RT} and @code{RS}.)
 
 In the case that @code{file} is empty, the return value is the null
 string.  Thus, calling code may use something like:
@@ -20498,7 +20471,7 @@ if (length(contents) == 0)
 This tests the result to see if it is empty or not. An equivalent
 test would be @samp{contents == ""}.
 
address@hidden Sample Readfile} for an extension function that
address@hidden Sample Readfile} for an extension function that
 also reads an entire file into memory.
 
 @node Shell Quoting
@@ -20697,7 +20670,7 @@ END @{ endfile(_filename_) @}
 @c endfile
 @end example
 
address@hidden Program}
address@hidden Program}
 shows how this library function can be used and
 how it simplifies writing the main program.
 
@@ -21295,7 +21268,7 @@ Using @samp{#!} with the @option{-E} option may help 
avoid
 conflicts between your program's options and @command{gawk}'s options,
 as @option{-E} causes @command{gawk} to abandon processing of
 further options
-(@DBPXREF{Executable Scripts} and
+(@pxref{Executable Scripts} and
 @ifnotdocbook
 @pxref{Options}).
 @end ifnotdocbook
@@ -21323,7 +21296,7 @@ However, because these are numbers, they do not provide 
very useful
 information to the average user.  There needs to be some way to find the
 user information associated with the user and group ID numbers.  This
 @value{SECTION} presents a suite of functions for retrieving information from 
the
-user database.  @DBXREF{Group Functions}
+user database.  @xref{Group Functions}
 for a similar suite that retrieves information from the group database.
 
 @cindex @code{getpwent()} function (C library)
@@ -21657,7 +21630,7 @@ once.  If you are worried about squeezing every last 
cycle out of your
 this is not necessary, as most @command{awk} programs are I/O-bound,
 and such a change would clutter up the code.
 
-The @command{id} program in @DBREF{Id Program}
+The @command{id} program in @ref{Id Program}
 uses these functions.
 
 @node Group Functions
@@ -21675,7 +21648,7 @@ uses these functions.
 @cindex group file
 @cindex files, group
 Much of the discussion presented in
address@hidden Functions}
address@hidden Functions}
 applies to the group database as well.  Although there has traditionally
 been a well-known file (@file{/etc/group}) in a well-known format, the POSIX
 standard only provides a set of C library routines
@@ -22012,13 +21985,13 @@ Most of the work is in scanning the database and 
building the various
 associative arrays.  The functions that the user calls are themselves very
 simple, relying on @command{awk}'s associative arrays to do work.
 
-The @command{id} program in @DBREF{Id Program}
+The @command{id} program in @ref{Id Program}
 uses these functions.
 
 @node Walking Arrays
 @section Traversing Arrays of Arrays
 
address@hidden of Arrays} described how @command{gawk}
address@hidden of Arrays} described how @command{gawk}
 provides arrays of arrays.  In particular, any element of
 an array may be either a scalar or another array. The
 @code{isarray()} function (@pxref{Type Functions})
@@ -22231,7 +22204,7 @@ an intervening value in @code{ARGV} is a variable 
assignment.
 @ignore
 @c June 13 2015: Antonio points out that this is answered in the text. Ooops.
 @item
address@hidden Arrays} presented a function that walked a multidimensional
address@hidden Arrays} presented a function that walked a multidimensional
 array to print it out.  However, walking an array and processing
 each element is a general-purpose operation.  Generalize the
 @code{walk_array()} function by adding an additional parameter named
@@ -24255,7 +24228,7 @@ of lines on the page
 @end ifnotdocbook
 @end ifnottex
 @docbook
-(20 &sdot; 5 = 100). @c
+(20 &sdot; 5 = 100).
 @end docbook
 
 Most of the work is done in the @code{printpage()} function.
@@ -25634,7 +25607,7 @@ the separator can considerably simplify such tasks.
 
 @item
 The examples here demonstrate the usefulness of the library
-functions from @DBREF{Library Functions}
+functions from @ref{Library Functions}
 for a number of real (if small) programs.
 
 @item
@@ -25965,7 +25938,7 @@ Often, though, it is desirable to be able to loop over 
the elements
 in a particular order that you, the programmer, choose.  @command{gawk}
 lets you do this.
 
address@hidden Scanning} describes how you can assign special,
address@hidden Scanning} describes how you can assign special,
 predefined values to @code{PROCINFO["sorted_in"]} in order to
 control the order in which @command{gawk} traverses an array
 during a @code{for} loop.
@@ -25990,7 +25963,7 @@ Here, @code{i1} and @code{i2} are the indices, and 
@code{v1} and @code{v2}
 are the corresponding values of the two elements being compared.
 Either @code{v1} or @code{v2}, or both, can be arrays if the array being
 traversed contains subarrays as values.
-(@DBXREF{Arrays of Arrays} for more information about subarrays.)
+(@xref{Arrays of Arrays} for more information about subarrays.)
 The three possible return values are interpreted as follows:
 
 @table @code
@@ -27489,7 +27462,7 @@ BEGIN @{
 
 @end enumerate
 
address@hidden Example}
address@hidden Example}
 for an example program showing the steps to create
 and use translations from @command{awk}.
 
@@ -27550,7 +27523,7 @@ second argument to @code{dcngettext()address@hidden
 You should distribute the generated @file{.pot} file with
 your @command{awk} program; translators will eventually use it
 to provide you translations that you can also then distribute.
address@hidden Example}
address@hidden Example}
 for the full list of steps to go through to create and test
 translations for @command{guide}.
 
@@ -29398,31 +29371,16 @@ signed. The possible ranges of values are shown in 
@ref{table-numeric-ranges}.
 @item Single-precision floating point (approximate) @tab @math{1.175494^{-38}} 
@tab @math{3.402823^{38}}
 @item Double-precision floating point (approximate) @tab 
@math{2.225074^{-308}} @tab @math{1.797693^{308}}
 @end iftex
address@hidden
address@hidden
address@hidden
 @item Single-precision floating point (approximate) @tab 1.175494e-38 @tab 
3.402823e38
 @item Double-precision floating point (approximate) @tab 2.225074e-308 @tab 
1.797693e308
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden Single-precision floating point (approximate) @tab 
address@hidden @tab address@hidden
address@hidden Double-precision floating point (approximate) @tab 
address@hidden @tab address@hidden
address@hidden ifnotinfo
 @end ifnottex
address@hidden
address@hidden Single-precision floating point (approximate) @tab
address@hidden FIXME: Use @sup here for superscript
address@hidden
-1.175494<superscript>-38</superscript>
address@hidden docbook
address@hidden
address@hidden
-3.402823<superscript>38</superscript>
address@hidden docbook
address@hidden Double-precision floating point (approximate) @tab
address@hidden
-2.225074<superscript>-308</superscript>
address@hidden docbook
address@hidden
address@hidden
-1.797693<superscript>308</superscript>
address@hidden docbook
address@hidden ifdocbook
 @end multitable
 @end float
 
@@ -29490,7 +29448,7 @@ formula:
 @end ifnotdocbook
 @end ifnottex
 @docbook
-<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis> @c
+<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>
 @end docbook
 @end display
 
@@ -29582,7 +29540,7 @@ Two predefined variables, @code{PREC} and 
@code{ROUNDMODE},
 provide control over the working precision and the rounding mode.
 The precision and the rounding mode are set globally for every operation
 to follow.
address@hidden precision} and @DBREF{Setting the rounding mode}
address@hidden precision} and @ref{Setting the rounding mode}
 for more information.
 
 @node FP Math Caution
@@ -30016,17 +29974,16 @@ the following computes
 @iftex
 @math{5^{4^{3^{2}}}},
 @end iftex
address@hidden
address@hidden
address@hidden
 5^4^3^2,
address@hidden ifnotdocbook
address@hidden ifinfo
address@hidden
address@hidden
address@hidden@address@hidden,
address@hidden ifnotinfo
 @end ifnottex
address@hidden
-5<superscript>4<superscript>3<superscript>2</superscript></superscript></superscript>,
 @c
address@hidden docbook
 the result of which is beyond the
 limits of ordinary hardware double-precision floating-point values:
address@hidden FIXME: Use @sup here for superscript
 
 @example
 $ @kbd{gawk -M 'BEGIN @{}
@@ -30054,7 +30011,7 @@ would be 3.322 x 183231,
 @docbook
 <emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>)
 would be
-<emphasis>prec</emphasis> = 3.322 &sdot; 183231, @c
+<emphasis>prec</emphasis> = 3.322 &sdot; 183231,
 @end docbook
 or 608693.
 
@@ -30484,7 +30441,7 @@ The API also provides major and minor version numbers, 
so that an
 extension can check if the @command{gawk} it is loaded with supports the
 facilities it was compiled with.  (Version mismatches ``shouldn't''
 happen, but we all know how @emph{that} goes.)
address@hidden Versioning} for details.
address@hidden Versioning} for details.
 @end itemize
 
 @node Extension API Description
@@ -31705,7 +31662,7 @@ indicates the type of value expected.
 @item awk_bool_t set_argument(size_t count, awk_array_t array);
 Convert a parameter that was undefined into an array; this provides
 call by reference for arrays.  Return false if @code{count} is too big,
-or if the argument's type is not undefined.  @DBXREF{Array Manipulation}
+or if the argument's type is not undefined.  @xref{Array Manipulation}
 for more information on creating arrays.
 @end table
 
@@ -32123,7 +32080,7 @@ The following functions relate to arrays as a whole:
 @table @code
 @item awk_array_t create_array(void);
 Create a new array to which elements may be added.
address@hidden Arrays} for a discussion of how to
address@hidden Arrays} for a discussion of how to
 create a new array and add elements to it.
 
 @item awk_bool_t clear_array(awk_array_t a_cookie);
@@ -32552,7 +32509,7 @@ $ @kbd{AWKLIBPATH=$PWD ./gawk -f subarray.awk}
 @end example
 
 @noindent
-(@DBXREF{Finding Extensions} for more information on the
+(@xref{Finding Extensions} for more information on the
 @env{AWKLIBPATH} environment variable.)
 
 @node Extension API Variables
@@ -32787,7 +32744,7 @@ Compiled extensions have to be installed in a directory 
where
 built in the default fashion, the directory in which to find
 extensions is @file{/usr/local/lib/gawk}.  You can also specify a search
 path with a list of directories to search for compiled extensions.
address@hidden Variable} for more information.
address@hidden Variable} for more information.
 
 @node Extension Example
 @section Example: Some File Functions
@@ -33366,7 +33323,7 @@ of the @file{gawkapi.h} header file,
 the following address@hidden practice, you would probably want to
 use the GNU Autotools (Automake, Autoconf, Libtool, and @command{gettext}) to
 configure and build your libraries. Instructions for doing so are beyond
-the scope of this @value{DOCUMENT}. @DBXREF{gawkextlib} for Internet links to
+the scope of this @value{DOCUMENT}. @xref{gawkextlib} for Internet links to
 the tools.} create a GNU/Linux shared library:
 
 @example
@@ -34620,7 +34577,7 @@ The ability to delete all of an array at once with 
@samp{delete @var{array}}
 
 @end itemize
 
address@hidden Extensions} for a list of common extensions
address@hidden Extensions} for a list of common extensions
 not permitted by the POSIX standard.
 
 The 2008 POSIX standard can be found online at
@@ -34665,7 +34622,7 @@ or array elements through it
 @end ignore
 @end itemize
 
address@hidden Extensions} for a full list of the extensions
address@hidden Extensions} for a full list of the extensions
 available in his @command{awk}.
 
 @node POSIX/GNU
@@ -36049,7 +36006,7 @@ This appendix provides instructions for installing 
@command{gawk} on the
 various platforms that are supported by the developers.  The primary
 developer supports GNU/Linux (and Unix), whereas the other ports are
 contributed.
address@hidden
address@hidden
 for the email addresses of the people who maintain
 the respective ports.
 
@@ -36316,7 +36273,7 @@ source file for this @value{DOCUMENT}. It also contains 
a @file{Makefile.in} fil
 The library functions from
 @ref{Library Functions},
 and the @command{igawk} program from
address@hidden Program}
address@hidden Program}
 are included as ready-to-use files in the @command{gawk} distribution.
 They are installed as part of the installation process.
 The rest of the programs in this @value{DOCUMENT} are available in appropriate
@@ -36335,11 +36292,11 @@ Files needed for building @command{gawk} under 
MS-Windows
 @ifclear FOR_PRINT
 and OS/2
 @end ifclear
-(@DBPXREF{PC Installation} for details).
+(@pxref{PC Installation} for details).
 
 @item vms/*
 Files needed for building @command{gawk} under Vax/VMS and OpenVMS
-(@DBPXREF{VMS Installation} for details).
+(@pxref{VMS Installation} for details).
 
 @item test/*
 A test suite for
@@ -36540,7 +36497,7 @@ Autoconf will not work on your system in some other 
fashion.
 If you do have a problem, the @file{configure.ac} file is the input for
 Autoconf.  You may be able to change this file and generate a
 new version of @command{configure} that works on your system
-(@DBPXREF{Bugs}
+(@pxref{Bugs}
 for information on how to report problems in configuring @command{gawk}).
 The same mechanism may be used to send in updates to @file{configure.ac}
 and/or @file{custom.h}.
@@ -37015,7 +36972,7 @@ The most recent builds used HP C V7.3 on Alpha VMS 8.3 
and both
 Alpha and IA64 VMS 8.4 used HP C address@hidden IA64 architecture
 is also known as ``Itanium.''}
 
address@hidden GNV} for information on building
address@hidden GNV} for information on building
 @command{gawk} as a PCSI kit that is compatible with the GNV product.
 
 @node VMS Dynamic Extensions
@@ -37535,7 +37492,7 @@ directory named @file{awk}.
 This version requires an ISO C (1990 standard) compiler; the C compiler
 from GCC (the GNU Compiler Collection) works quite nicely.
 
address@hidden Extensions}
address@hidden Extensions}
 for a list of extensions in this @command{awk} that are not in POSIX 
@command{awk}.
 
 As a side note, Dan Bornstein has created a Git repository tracking
@@ -37571,7 +37528,7 @@ Once you have it,
 is similar to @command{gawk}'s
 (@pxref{Unix Installation}).
 
address@hidden Extensions}
address@hidden Extensions}
 for a list of extensions in @command{mawk} that are not in POSIX @command{awk}.
 
 @cindex Sumner, Andrew
@@ -37799,7 +37756,7 @@ as well as any considerations you should bear in mind.
 @appendixsubsec Accessing The @command{gawk} Git Repository
 
 As @command{gawk} is Free Software, the source code is always available.
address@hidden Distribution} describes how to get and build the formal,
address@hidden Distribution} describes how to get and build the formal,
 released versions of @command{gawk}.
 
 @cindex @command{git} utility
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
index 6a81594..ddda670 100644
--- a/doc/texinfo.tex
+++ b/doc/texinfo.tex
@@ -3,11 +3,11 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2015-10-06.21}
+\def\texinfoversion{2016-02-05.07}
 %
 % 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, 2015
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
 % Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
@@ -158,22 +158,10 @@
 \ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
 \ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
 
-% Since the category of space is not known, we have to be careful.
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode`\ =\spacecat}
+% Give the space character the catcode for a space.
+\def\spaceisspace{\catcode`\ =10\relax}
 
-% sometimes characters are active, so we need control sequences.
-\chardef\ampChar   = `\&
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
 \chardef\dashChar  = `\-
-\chardef\dotChar   = `\.
-\chardef\exclamChar= `\!
-\chardef\hashChar  = `\#
-\chardef\lquoteChar= `\`
-\chardef\questChar = `\?
-\chardef\rquoteChar= `\'
-\chardef\semiChar  = `\;
 \chardef\slashChar = `\/
 \chardef\underChar = `\_
 
@@ -271,11 +259,18 @@
 %
 % Another complication is to let the user choose whether \thischapter
 % (\thissection) refers to the chapter (section) in effect at the top
-% of a page, or that at the bottom of a page.  The solution is
-% described on page 260 of The TeXbook.  It involves outputting two
-% marks for the sectioning macros, one before the section break, and
-% one after.  I won't pretend I can describe this better than DEK...
-%
+% of a page, or that at the bottom of a page.
+
+% \domark is called twice inside \chapmacro, to add one
+% mark before the section break, and one after.
+%   In the second call \prevchapterdefs is the same as \lastchapterdefs,
+% and \prevsectiondefs is the same as \lastsectiondefs.
+%   Then if the page is not broken at the mark, some of the previous
+% section appears on the page, and we can get the name of this section
+% from \firstmark for @everyheadingmarks top.
+%   @everyheadingmarks bottom uses \botmark.
+%
+% See page 260 of The TeXbook.
 \def\domark{%
   \toks0=\expandafter{\lastchapterdefs}%
   \toks2=\expandafter{\lastsectiondefs}%
@@ -283,13 +278,14 @@
   \toks6=\expandafter{\prevsectiondefs}%
   \toks8=\expandafter{\lastcolordefs}%
   \mark{%
-                   \the\toks0 \the\toks2  % 0: top marks (\last...)
-      \noexpand\or \the\toks4 \the\toks6  % 1: bottom marks (default, \prev...)
+                   \the\toks0 \the\toks2  % 0: marks for @everyheadingmarks top
+      \noexpand\or \the\toks4 \the\toks6  % 1: for @everyheadingmarks bottom
     \noexpand\else \the\toks8             % 2: color marks
   }%
 }
 
-% \gettopheadingmarks, \getbottomheadingmarks - extract needed part of mark.
+% \gettopheadingmarks, \getbottomheadingmarks,
+% \getcolormarks - extract needed part of mark.
 %
 % \topmark doesn't work for the very first chapter (after the title
 % page or the contents), so we use \firstmark there -- this gets us
@@ -345,28 +341,21 @@
   % values in \headline and \footline.
   %
   % This is used to check if we are on the first page of a chapter.
-  \ifcase0\topmark\fi
-  \ifx\thischapter\empty
-    % See comment for \gettopheadingmarks
-    \ifcase0\firstmark\fi
-    \let\curchaptername\thischaptername
-    \ifcase1\firstmark\fi
-    \let\prevchaptername\thischaptername
-  \else
-    \let\curchaptername\thischaptername
-    \ifcase1\topmark\fi
-    \let\prevchaptername\thischaptername
-  \fi
+  \ifcase1\topmark\fi
+  \let\prevchaptername\thischaptername
+  \ifcase0\firstmark\fi
+  \let\curchaptername\thischaptername
   %
   \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
   \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
   %
   \ifx\curchaptername\prevchaptername
+    \let\thischapterheading\thischapter
   \else
-    % If on the first page of a chapter, clear @thischapter so it
-    % doesn't appear in the headline, because the chapter is already
-    % shown in the chapter heading.
-    \def\thischapter{}%
+    % \thischapterheading is the same as \thischapter except it is blank
+    % for the first page of a chapter.  This is to prevent the chapter name 
+    % being shown twice.
+    \def\thischapterheading{}%
   \fi
   %
   \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
@@ -530,14 +519,13 @@
 %
 \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
 
+
+% \parseargdef - define a command taking an argument on the line
+%
 % \parseargdef\foo{...}
 %      is roughly equivalent to
 % \def\foo{\parsearg\Xfoo}
 % \def\Xfoo#1{...}
-%
-% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-% favourite TeX trick.  --kasal, 16nov03
-
 \def\parseargdef#1{%
   \expandafter \doparseargdef \csname\string#1\endcsname #1%
 }
@@ -1107,6 +1095,7 @@ where each line of input produces a line of output.}
 \newtoks\toksC
 \newtoks\toksD
 \newbox\boxA
+\newbox\boxB
 \newcount\countA
 \newif\ifpdf
 \newif\ifpdfmakepagedest
@@ -1164,8 +1153,8 @@ output) for that.)}
   \def\rgbDarkRed{0.50 0.09 0.12}
   \def\rgbBlack{0 0 0}
   %
-  % k sets the color for filling (usual text, etc.);
-  % K sets the color for stroking (thin rules, e.g., normal _'s).
+  % rg sets the color for filling (usual text, etc.);
+  % RG sets the color for stroking (thin rules, e.g., normal _'s).
   \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
   %
   % Set color, and create a mark which defines \thiscolor accordingly,
@@ -1416,7 +1405,6 @@ output) for that.)}
       \normalturnoffactive
       address@hidden@}%
       \let\/=\empty
-      \let\xprocessmacroarg=\eatspaces % in case we are in a macro expansion
       \makevalueexpandable
       % do we want to go so far as to use \indexnofonts instead of just
       % special-casing \var here?
@@ -1461,6 +1449,56 @@ output) for that.)}
   \let\pdfmakeoutlines = \relax
 \fi  % \ifx\pdfoutput
 
+%
+% @image support for XeTeX
+%
+\newif\ifxeteximgpdf
+\ifx\XeTeXrevision\thisisundefined
+\else
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+  \def\doxeteximage#1#2#3{%
+    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % XeTeX (and the PDF format) support .pdf, .png, .jpg (among
+    % others).  Let's try in that order, PDF first since if
+    % someone has a scalable image, presumably better to use that than a
+    % bitmap.
+    \let\xeteximgext=\empty
+    \xeteximgpdffalse
+    \begingroup
+      \openin 1 #1.pdf \ifeof 1
+        \openin 1 #1.PDF \ifeof 1
+          \openin 1 #1.png \ifeof 1
+            \openin 1 #1.jpg \ifeof 1
+              \openin 1 #1.jpeg \ifeof 1
+                \openin 1 #1.JPG \ifeof 1
+                  \errmessage{Could not find image file #1 for XeTeX}%
+                \else \gdef\xeteximgext{JPG}%
+                \fi
+              \else \gdef\xeteximgext{jpeg}%
+              \fi
+            \else \gdef\xeteximgext{jpg}%
+            \fi
+          \else \gdef\xeteximgext{png}%
+          \fi
+        \else \gdef\xeteximgext{PDF} \global\xeteximgpdftrue%
+        \fi
+      \else \gdef\xeteximgext{pdf} \global\xeteximgpdftrue%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    \ifxeteximgpdf
+      \XeTeXpdffile "#1".\xeteximgext ""
+    \else
+      \XeTeXpicfile "#1".\xeteximgext ""
+    \fi
+    \ifdim \wd0 >0pt width \xeteximagewidth \fi
+    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+  }
+\fi
 
 \message{fonts,}
 
@@ -2452,8 +2490,8 @@ end
 %
 address@hidden
   \def\plainfrenchspacing{%
-    \sfcode\dotChar  address@hidden address@hidden address@hidden
-    address@hidden \sfcode\semiChar address@hidden \sfcode\commaChar 
address@hidden
+    address@hidden address@hidden address@hidden
+    \sfcode`\:address@hidden \sfcode`\;address@hidden \sfcode`\,address@hidden
     \def\endofsentencespacefactor{1000}% for @. and friends
   }
   \def\plainnonfrenchspacing{%
@@ -2641,9 +2679,9 @@ end
 
 % Allow line breaks around only a few characters (only).
 \def\urefcatcodes{%
-  \catcode\ampChar=\active   \catcode\dotChar=\active
-  \catcode\hashChar=\active  \catcode\questChar=\active
-  \catcode\slashChar=\active
+  \catcode`\&=\active \catcode`\.=\active
+  \catcode`\#=\active \catcode`\?=\active
+  \catcode`\/=\active
 }
 {
   \urefcatcodes
@@ -2852,23 +2890,24 @@ end
 \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
 %
 \def\math{%
-  \tex
-  \mathunderscore
-  \let\\ = \mathbackslash
-  \mathactive
-  % make the texinfo accent commands work in math mode
-  \let\"=\ddot
-  \let\'=\acute
-  \let\==\bar
-  \let\^=\hat
-  \let\`=\grave
-  \let\u=\breve
-  \let\v=\check
-  \let\~=\tilde
-  \let\dotaccent=\dot
-  % have to provide another name for sup operator
-  \let\mathopsup=\sup
-  $\finishmath
+  \ifmmode\else % only go into math if not in math mode already
+    \tex
+    \mathunderscore
+    \let\\ = \mathbackslash
+    \mathactive
+    % make the texinfo accent commands work in math mode
+    \let\"=\ddot
+    \let\'=\acute
+    \let\==\bar
+    \let\^=\hat
+    \let\`=\grave
+    \let\u=\breve
+    \let\v=\check
+    \let\~=\tilde
+    \let\dotaccent=\dot
+    % have to provide another name for sup operator
+    \let\mathopsup=\sup
+  $\expandafter\finishmath\fi
 }
 \def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
 
@@ -3517,7 +3556,7 @@ end
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chapoddpage
 }
 \let\contentsalignmacro = \chappager
@@ -3528,8 +3567,8 @@ end
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chappager
 }
 \def\HEADINGSon{\HEADINGSdouble}
@@ -3540,7 +3579,7 @@ end
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chapoddpage
 }
 
@@ -3548,8 +3587,8 @@ end
 \def\HEADINGSsinglex{%
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenheadline={\line{\thischapterheading\hfil\folio}}
+\global\oddheadline={\line{\thischapterheading\hfil\folio}}
 \global\let\contentsalignmacro = \chappager
 }
 
@@ -4606,6 +4645,8 @@ end
 }
 
 % \commondummiesnofonts: common to \commondummies and \indexnofonts.
+% Define \definedumyletter, \definedummyaccent and \definedummyword before
+% using.
 %
 \def\commondummiesnofonts{%
   % Control letters and accents.
@@ -4674,17 +4715,6 @@ end
   \definedummyword\verb
   \definedummyword\w
   \definedummyword\xref
-  %
-  % Consider:
-  %   @macro mkind{arg1,arg2}
-  %   @cindex \arg2\
-  %   @end macro
-  %   @mkind{foo, bar}
-  % The space after the comma will end up in the temporary definition
-  % that we make for arg2 (see \parsemargdef ff.).  We want all this to be
-  % expanded for the sake of the index, so we end up just seeing "bar".
-  \let\xeatspaces = \eatspaces
-  \let\xprocessmacroarg\eatspaces
 }
 
 % For testing: output @{ and @} in index sort strings as \{ and \}.
@@ -4701,11 +4731,27 @@ end
 {
 \catcode`\<=13
 \catcode`\-=13
+\catcode`\`=13
   \gdef\indexnonalnumdisappear{%
-    \backslashdisappear
-    \def-{}%
-    \def<{}%
-    address@hidden
+    \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
+      % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+      % (Introduced for FSFS 2nd ed.)
+      \let`=\empty
+    \fi
+    %
+    \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
+      \backslashdisappear
+    \fi
+    %
+    \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
+      \def-{}%
+    \fi
+    \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
+      \def<{}%
+    \fi
+    \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
+      address@hidden
+    \fi
   }
 
   \gdef\indexnonalnumreappear{%
@@ -4729,7 +4775,6 @@ end
   \def\definedummyletter##1{\let##1\empty}%
   % All control words become @asis by default; overrides below.
   \let\definedummyword\definedummyaccent
-  %
   \commondummiesnofonts
   %
   % Don't no-op \tt, since it isn't a user-level command
@@ -4742,13 +4787,10 @@ end
   \def\_{\normalunderscore}%
   \def\-{}% @- shouldn't affect sorting
   %
-  % Unfortunately, texindex < 6.0 is not prepared to handle braces in the
-  % content at all, so these won't be sorted in ASCII order.
-  \def\lbracechar{{\indexlbrace}}%
-  \def\rbracechar{{\indexrbrace}}%
-  \let\{=\lbracechar
-  \let\}=\rbracechar
-  %
+  \uccode`\1=`\{ \uppercase{\def\{{1}}%
+  \uccode`\1=`\} \uppercase{\def\}{1}}%
+  \let\lbracechar\{%
+  \let\rbracechar\}%
   %
   % Non-English letters.
   \def\AA{AA}%
@@ -4806,9 +4848,6 @@ end
   \def\result{=>}%
   \def\textdegree{o}%
   %
-  \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
-  \else \indexlquoteignore \fi
-  %
   % We need to get rid of all macros, leaving only the arguments (if present).
   % Of course this is not nearly correct, but it is the best we can do for now.
   % makeinfo does not expand macros in the argument to @deffn, which ends up
@@ -4822,10 +4861,6 @@ end
   \macrolist
 }
 
-% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
-% ignore left quotes in the sort term.
-{\catcode`\`=\active
- \gdef\indexlquoteignore{\let`=\empty}}
 
 \let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
@@ -4915,12 +4950,18 @@ end
   \indexdummies % Must do this here, since \bf, etc expand at this stage
   \useindexbackslash % \indexbackslash isn't defined now so it will be output 
                      % as is; and it will print as backslash.
+  % The braces around \indexbrace are recognized by texindex.
+  %
   % Get the string to sort by, by processing the index entry with all
   % font commands turned off.
   {\indexnofonts
+   \def\lbracechar{{\indexlbrace}}%
+   \def\rbracechar{{\indexrbrace}}%
+   \let\{=\lbracechar
+   \let\}=\rbracechar
+   \indexnonalnumdisappear
    \xdef\indexsortkey{}%
    \let\sortas=\indexwritesortas
-   \indexnonalnumdisappear
    \edef\temp{\the\toks0}%
    \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas
    \ifx\indexsortkey\empty
@@ -5205,61 +5246,38 @@ end
     % from @* into spaces.  The user might give these in long section
     % titles, for instance.
     \def\*{\unskip\space\ignorespaces}%
-    \def\entrybreak{\hfil\break}%
+    \def\entrybreak{\hfil\break}% An undocumented command
     %
     % A bit of stretch before each entry for the benefit of balancing
     % columns.
     \vskip 0pt plus0.5pt
     %
-    % Badness calculation for paragraph affected by -
-    %  How much \indexdotfill is stretched, or how much \parfillskip is shrunk
-    %  Number of lines (\linepenalty)
-    %  
-    % Do not prefer a separate line ending with a hyphen to fewer lines.
-    \finalhyphendemerits = 0
-    %
-    % Word spacing - no stretch
-    \spaceskip=\fontdimen2\font minus \fontdimen4\font
-    %
-    \linepenalty=1000  % Discourage line breaks.
-    \hyphenpenalty=5000  % Discourage hyphenation.
-    %
-    % Ragged right margin, but not for the last line with the leaders in it.
-    % When an index entry spans lines, this stretch competes with the stretch
-    % in \indexdotfill to determine how the line will be split.
-    \rightskip=\entryrightmargin
-    \advance\rightskip by 0pt plus .6\hsize
-    %
-    % \parfillskip is at the end of the line with the page number
-    \parfillskip=0pt
-    % Cancel the \rightskip stretch
-    \advance \parfillskip by 0pt plus -.6\hsize
-    % Determine how far we can stretch into the margin.
-    % This allows, e.g., "Appendix H  GNU Free Documentation License" to fit
-    % on one line.
-    \advance \parfillskip by 0pt minus .6\entryrightmargin
-    %
     % Swallow the left brace of the text (first parameter):
     \afterassignment\doentry
     \let\temp =
 }
 \def\entrybreak{\unskip\space\ignorespaces}%
 \def\doentry{%
-    % Save the text of the entry in a \vtop.
-    \global\setbox\entryindexbox=\vtop\bgroup
+    % Save the text of the entry
+    \global\setbox\boxA=\hbox\bgroup
     \bgroup % Instead of the swallowed brace.
       \noindent
       \aftergroup\finishentry
       % And now comes the text of the entry.
+      % Not absorbing as a macro argument reduces the chance of problems
+      % with catcodes occurring.
 }
-\def\finishentry#1{%
address@hidden
+\gdef\finishentry#1{%
+    \egroup % end box A
+    \dimen@ = \wd\boxA % Length of text of entry
+    \global\setbox\boxA=\hbox\bgroup\unhbox\boxA
     % #1 is the page number.
     %
-    % The following is kludged to not output a line of dots in the index if
-    % there are no page numbers.  The next person who breaks this will be
-    % cursed by a Unix daemon.
-    \setbox\boxA = \hbox{#1}%
-    \ifdim\wd\boxA = 0pt
+    % Get the width of the page numbers, and only use
+    % leaders if they are present.
+    \global\setbox\boxB = \hbox{#1}%
+    \ifdim\wd\boxB = 0pt
       \null\nobreak\hfill\ %
     \else
       %
@@ -5267,38 +5285,106 @@ end
       %
       \ifpdf
         \pdfgettoks#1.%
-        \hskip\skip\thinshrinkable\the\toksA
+        \bgroup\let\domark\relax
+          \hskip\skip\thinshrinkable\the\toksA
+        \egroup
+        % The redefinion of \domark stops marks being added in \pdflink to 
+        % preserve coloured links across page boundaries.  Otherwise the marks
+        % would get in the way of \lastbox in \insertindexentrybox.
       \else
         \hskip\skip\thinshrinkable #1%
       \fi
     \fi
-    % Parameters for formatting this paragraph, reset for each paragraph.
-    %
-    % \hangindent is only relevant when the entry text and page number
-    % don't both fit on one line.  In that case, bob suggests starting the
-    % dots pretty far over on the line.  Unfortunately, a large
-    % indentation looks wrong when the entry text itself is broken across
-    % lines.  So we use a small indentation and put up with long leaders.
-    %
-    \hangafter = 1
-    \hangindent = 1em
-    \par
-    \egroup % The \vtop
+    \egroup % end \boxA
+    \ifdim\wd\boxB = 0pt
+      \global\setbox\entryindexbox=\vbox{\unhbox\boxA}%
+    \else
+    \global\setbox\entryindexbox=\vbox\bgroup
+      \prevdepth=\entrylinedepth
+      \noindent
+      % We want the text of the entries to be aligned to the left, and the
+      % page numbers to be aligned to the right.
+      %
+      \advance\leftskip by 0pt plus 1fil
+      \advance\leftskip by 0pt plus -1fill
+      \rightskip = 0pt plus -1fil
+      \advance\rightskip by 0pt plus 1fill
+      % Cause last line, which could consist of page numbers on their own
+      % if the list of page numbers is long, to be aligned to the right.
+      \parfillskip=0pt plus -1fill
+      %
+      \hangindent=1em
+      %
+      \advance\rightskip by \entryrightmargin
+      % Determine how far we can stretch into the margin.
+      % This allows, e.g., "Appendix H  GNU Free Documentation License" to
+      % fit on one line in @letterpaper format.
+      \ifdim\entryrightmargin>2.1em
+        address@hidden
+      \else
+        address@hidden
+      \fi
+      \advance \parfillskip by 0pt minus address@hidden
+      %
+      address@hidden = \hsize
+      address@hidden by -1\leftskip
+      address@hidden by -1\entryrightmargin
+      address@hidden by address@hidden
+      \ifdim\wd\boxA > address@hidden % If the entry doesn't fit in one line
+      \ifdim\dimen@ > address@hidden   % due to long index text
+        \dimen@ = 0.7\dimen@ % Try to split the text roughly evenly
+        address@hidden = \hsize
+        \advance address@hidden by -1em
+        \ifnum\dimen@>address@hidden
+          % If the entry is too long, use the whole line
+          \dimen@ = address@hidden
+        \fi
+        \advance\leftskip by 0pt plus 1fill % ragged right
+        \advance \dimen@ by 1\rightskip
+        \parshape = 2 0pt \dimen@ 1em address@hidden
+        % Ideally we'd add a finite glue at the end of the first line only, but
+        % TeX doesn't seem to provide a way to do such a thing.
+      \fi\fi
+      \unhbox\boxA
+      %
+      % Do not prefer a separate line ending with a hyphen to fewer lines.
+      \finalhyphendemerits = 0
+      %
+      % Word spacing - no stretch
+      \spaceskip=\fontdimen2\font minus \fontdimen4\font
+      %
+      \linepenalty=1000  % Discourage line breaks.
+      \hyphenpenalty=5000  % Discourage hyphenation.
+      %
+      \par % format the paragraph
+    \egroup % The \vbox
+    \fi
   \endgroup
   % delay text of entry until after penalty
   \bgroup\aftergroup\insertindexentrybox
   \entryorphanpenalty
-}
+}}
 
 \newskip\thinshrinkable
 \skip\thinshrinkable=.15em minus .15em
 
 \newbox\entryindexbox
 \def\insertindexentrybox{%
-\lineskip=.8ex plus .6ex % This comes into effect when the \vtop has a large 
-                         % depth due to the paragraph in it having several 
-                         % lines.
-\box\entryindexbox}
+  \copy\entryindexbox
+  % The following gets the depth of the last box.  This is for even
+  % line spacing when entries span several lines.
+  \setbox\dummybox\vbox{%
+    \unvbox\entryindexbox
+    \nointerlineskip
+    \lastbox
+    \global\entrylinedepth=\prevdepth
+  }%
+  % Note that we couldn't simply \unvbox\entryindexbox followed by 
+  % \nointerlineskip\lastbox to remove the last box and then reinstate it, 
+  % because this resets how far the box has been \moveleft'ed to 0.  \unvbox
+  % doesn't affect \prevdepth either.
+}
+\newdimen\entrylinedepth
 
 % Default is no penalty
 \let\entryorphanpenalty\egroup
@@ -5323,10 +5409,11 @@ end
 }
 
 % Like plain.tex's \dotfill, except uses up at least 1 em.
-% Using a finite stretch encourages several words to appear on a second line
-% if the entry is broken.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
 \def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus .4\hsize}
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
 
 \def\primary #1{\line{#1\hfil}}
 
@@ -5348,15 +5435,39 @@ end
 % Define two-column mode, which we use to typeset indexes.
 % Adapted from the TeXbook, page 416, which is to say,
 % the manmac.tex format used to print the TeXbook itself.
address@hidden
address@hidden  % private names
 
 \newbox\partialpage
 \newdimen\doublecolumnhsize
+\newdimen\doublecolumntopgap
+\doublecolumntopgap = 0pt
 
-\newtoks\savedtopmark % Used in \begindoublecolumns
+% Use inside an output routine to save \topmark and \firstmark
+\def\savemarks{%
+  \global\savedtopmark=\expandafter{\topmark }%
+  \global\savedfirstmark=\expandafter{\firstmark }%
+}
+\newtoks\savedtopmark
 \newtoks\savedfirstmark
 
+% Set \topmark and \firstmark for next time \output runs.
+% Can't be run from withinside \output (because any material
+% added while an output routine is active, including 
+% penalties, is saved for after it finishes).  The page so far
+% should be empty, otherwise what's on it will be thrown away.
+\def\restoremarks{%
+  \mark{\the\savedtopmark}%
+  \bgroup\output = {%
+    \setbox\dummybox=\box\PAGE
+  }abc\eject\egroup
+  % "abc" because output routine doesn't fire for a completely empty page.
+  \mark{\the\savedfirstmark}%
+}
+
 \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+  % If not much space left on page, start a new page.
+  \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
+  %
   % Grab any single-column material above us.
   \output = {%
     %
@@ -5376,22 +5487,15 @@ end
       \unvbox\PAGE
       \kern-\topskip \kern\baselineskip
     }%
-    % Save \topmark and \firstmark
-    \global\savedtopmark=\expandafter{\topmark}%
-    \global\savedfirstmark=\expandafter{\firstmark}%
+    \savemarks
   }%
   \eject % run that output routine to set \partialpage
+  \restoremarks
   %
   % We recover the two marks that the last output routine saved in order
   % to propagate the information in marks added around a chapter heading,
   % which could be otherwise be lost by the time the final page is output.
   %
-  \mark{\the\savedtopmark}% Only mark in page passed to following \output.
-  \output = {%
-    \setbox0=\box\PAGE % clear box 255
-  }abc\eject
-  %
-  \mark{\the\savedfirstmark}%
   %
   % Use the double-column output routine for subsequent pages.
   \output = {\doublecolumnout}%
@@ -5419,13 +5523,19 @@ end
   %
   % Double the \vsize as well.  (We don't need a separate register here,
   % since nobody clobbers \vsize.)
+  \global\doublecolumntopgap = \topskip
+  \global\advance\doublecolumntopgap by -1\baselineskip
+  \advance\vsize by -1\doublecolumntopgap
   \vsize = 2\vsize
+  \topskip=0pt
+  \global\entrylinedepth=0pt\relax
 }
 
 % The double-column output routine for all double-column pages except
 % the last, which is done by \balancecolumns.
 %
 \def\doublecolumnout{%
+  %
   \splittopskip=\topskip \splitmaxdepth=\maxdepth
   % Get the available space for the double columns -- the normal
   % (undoubled) page height minus any material left over from the
@@ -5448,10 +5558,13 @@ end
   %
   \hsize = \doublecolumnhsize
   \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
+  \vbox{%
+    \vskip\doublecolumntopgap
+    \hbox to\pagewidth{\box0\hfil\box2}}%
 }
-%
-% All done with double columns.
+
+
+% Finished with with double columns.
 \def\enddoublecolumns{%
   % The following penalty ensures that the page builder is exercised
   % _before_ we change the output routine.  This is necessary in the
@@ -5482,21 +5595,21 @@ end
   \penalty0
   %
   \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
+    % Split the last of the double-column material.
+    \savemarks
     \balancecolumns
     %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
+    % Having called \balancecolumns once, we do not
     % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
+    % definition right away.
     \global\output = {\onepageout{\pagecontents\PAGE}}%
   }%
   \eject
   \endgroup % started in \begindoublecolumns
+  \restoremarks
+  % Leave the double-column material on the current page, no automatic
+  % page break.
+  \box\balancedcolumns
   %
   % \pagegoal was set to the doubled \vsize above, since we restarted
   % the current page.  We're now back to normal single-column
@@ -5504,6 +5617,8 @@ end
   % \endgroup where \vsize got restored).
   \pagegoal = \vsize
 }
+\newbox\balancedcolumns
+\setbox\balancedcolumns=\vbox{shouldnt see this}%
 %
 % Only called for the last of the double column material.  \doublecolumnout 
 % does the others.
@@ -5547,7 +5662,7 @@ end
     \fi
   \fi
   %
-  \pagesofar
+  \global\setbox\balancedcolumns=\vbox{\pagesofar}%
 }
 \catcode`\@ = \other
 
@@ -5989,7 +6104,13 @@ end
 \def\Yomitfromtockeyword{Yomitfromtoc}
 %
 \def\chapmacro#1#2#3{%
-  \checkenv{}% chapters, etc., should not start inside an environment.
+  \expandafter\ifx\thisenv\titlepage\else
+    \checkenv{}% chapters, etc., should not start inside an environment.
+  \fi
+  % FIXME: \chapmacro is currently called from inside \titlepage when
+  % \setcontentsaftertitlepage to print the "Table of Contents" heading, but
+  % this should probably be done by \sectionheading with an option to print
+  % in chapter size.
   %
   % Insert the first mark before the heading break (see notes for \domark).
   \let\prevchapterdefs=\lastchapterdefs
@@ -7564,9 +7685,7 @@ end
 % Argument is macro body with arguments substituted
 \def\scanmacro#1{%
   \newlinechar`\^^M
-  \let\xeatspaces\eatspaces
-  % Reduce doubled backslashes to one
-  \def\xprocessmacroarg{\passargtomacro\eatspaces}%
+  \def\xprocessmacroarg{\eatspaces}%
   %
   % Process the macro body under the current catcode regime.
   \scantokens{#1\texinfoc}\aftermacro%
@@ -7582,6 +7701,7 @@ end
   % to allow macros to open or close groups themselves.
 }
 
+% Used for copying and captions
 \def\scanexp#1{%
   \bgroup
   % Undo catcode changes of \startcontents and \printindex
@@ -7686,6 +7806,7 @@ end
 % an argument to another Texinfo command.
 \def\macroargctxt{%
   \scanctxt
+  \catcode`\ =\active
   \catcode`\^^M=\other
   \catcode`\\=\active
 }
@@ -8080,16 +8201,23 @@ end
          \egroup\noexpand\scanmacro{\macrobody}}%
     \else
       \ifnum\paramno<10\relax % at most 9
+        % See non-recursive section below for comments
         \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \noexpand\csname\the\macname @@\endcsname}%
+          \bgroup
+          \noexpand\expandafter
+          \noexpand\macroargctxt
+          \noexpand\expandafter
+          \expandafter\noexpand\csname\the\macname @@\endcsname}%
         \expandafter\xdef\csname\the\macname @@\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname @@@\endcsname ##1,}%
+            \noexpand\passargtomacro
+            \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+        \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
         \expandafter\expandafter
         \expandafter\xdef
         \expandafter\expandafter
-          \csname\the\macname @@@\endcsname
-            \paramlist{\egroup\noexpand\scanmacro{\macrobody}}%
+          \csname\the\macname @@@@\endcsname\paramlist{%
+            \egroup\noexpand\scanmacro{\macrobody}}%
       \else % 10 or more
         \expandafter\xdef\csname\the\macname\endcsname{%
           address@hidden
@@ -8119,19 +8247,27 @@ end
         }%
     \else % at most 9
       \ifnum\paramno<10\relax
+        % @MACNAME sets the context for reading the macro argument
+        % @MACNAME@@ gets the argument, processes backslashes and appends a 
+        % comma.
+        % @MACNAME@@@ removes braces surrounding the argument list.
+        % @MACNAME@@@@ scans the macro body with arguments substituted.
         \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \expandafter\noexpand\csname\the\macname @@\endcsname}%
+          \bgroup
+          \noexpand\expandafter  % This \expandafter skip any spaces after the
+          \noexpand\macroargctxt % macro before we change the catcode of space.
+          \noexpand\expandafter
+          \expandafter\noexpand\csname\the\macname @@\endcsname}%
         \expandafter\xdef\csname\the\macname @@\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname @@@\endcsname ##1,}%
+            \noexpand\passargtomacro
+            \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+        \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+            \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
         \expandafter\expandafter
         \expandafter\xdef
         \expandafter\expandafter
-        \csname\the\macname @@@\endcsname
-        \paramlist{%
-            \egroup
-            \noexpand\scanmacro{\macrobody}%
-            }%
+          \csname\the\macname @@@@\endcsname\paramlist{%
+            \egroup\noexpand\scanmacro{\macrobody}}%
       \else % 10 or more:
         \expandafter\xdef\csname\the\macname\endcsname{%
           address@hidden
@@ -8147,71 +8283,96 @@ end
 \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
 
 
address@hidden \catcode`\\=13
address@hidden@_=11
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
address@hidden \catcode`\\=13  % We need to manipulate \ so use @ as escape
address@hidden@_=11  % private names
address@hidden@!=11  % used as argument separator
 
+% \passargtomacro#1#2 -
 % Call #1 with a list of tokens #2, with any doubled backslashes in #2
 % compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use 
+% \def or similar).  This reduces the risk of this failing in contexts where 
+% complete expansion is done with no execution (for example, in writing out to 
+% an auxiliary file for an index entry).
+% 
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN  (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
 @address@hidden
-  @address@hidden
-  @address@hidden
-  @address@hidden@finish}%
-  @address@hidden
-  @address@hidden@relax
-  @address@hidden
-}
-
-% Input stream is just after a backslash.  If the next token is not a
-% backslash, process the rest of the argument; otherwise, remove the next
-% token.
address@hidden@look_ahead{%
-  @address@hidden@look_aheadzzz}
address@hidden@look_aheadzzz{%
-  @address@hidden
-   @address@hidden@gobble_and_check_finish 
-  @else
-   @address@hidden@add_segment
-  @address@hidden
+  @add_segment address@hidden@_finish\%
 }
address@hidden@address@hidden @address@hidden@address@hidden
 
-% Double backslash found.  Add a single backslash here.
address@hidden@gobble_and_check_finish#1{%
-  @add_the_backslash
-  @address@hidden
-  @address@hidden@add_segment
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument; 
+% otherwise, remove the next token.
address@hidden@look_ahead#1!#2#3#4{%
+  @ifx#4\%
+   @address@hidden 
+  @else
+   @address@hidden
+  @fi#1!{#2}#4#4%
 }
 
-% append a backslash to \arg_result
address@hidden@add_the_backslash{%
-  @address@hidden@address@hidden@address@hidden
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found.  Add a single backslash, and look ahead.
address@hidden@gobble_and_check_finish#1!#2#3#4#5{%
+  @add_segment#1\!{}#5#5%
 }
 
address@hidden@address@hidden
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
 % Input stream is either at the start of the argument, or just after a 
 % backslash sequence, either a lone backslash, or a doubled backslash.  
-% \next_token contains the first token in the input stream: if it is \finish, 
-% finish; otherwise, append to \arg_result the segment of the argument up until
-% the next backslash.  \pending_backslash contains a backslash to represent
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish, 
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash.  PENDING_BACKSLASH contains a backslash to represent
 % a backslash just before the start of the input stream that has not been
-% added to \arg_result.
address@hidden@add_segment#1\{%
address@hidden@address@hidden
-  @address@hidden@call_the_macro%
+% added to ARG_RESULT.
address@hidden@add_segment#1!#2#3#4\{%
address@hidden@_finish
+  @call_the_macro#1!%
 @else
-  @address@hidden@look_ahead
-  %
-  % append to @arg_result
-  % token list registers might be better
-  @address@hidden@address@hidden
-  @address@hidden@address@hidden
-  @address@hidden@expandafter{%
-  @address@hidden
-  @pending_backslash#1}%
-  @address@hidden
address@hidden@next}
+  % append the pending backslash to the result, followed by the next segment
+  @address@hidden@address@hidden
+  % this @fi is discarded by @look_ahead.
+  % we can't get rid of it with \expandafter because we don't know how 
+  % long #4 is.
+}
 
address@hidden@address@hidden@address@hidden@arg_result}}
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the 
+% conditional.
address@hidden@address@hidden@is_fi #1{#2}}
 
 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 % \braceorline MAC is used for a one-argument macro MAC.  It checks
 % whether the next non-whitespace character is a {.  It sets the context
@@ -8426,10 +8587,6 @@ end
     }%
     \setcolor{\linkcolor}%
   \fi
-  %
-  % Float references are printed completely differently: "Figure 1.2"
-  % instead of "[somenode], p.3".  We distinguish them by the
-  % LABEL-title being set to a magic string.
   {%
     % Have to otherify everything special to allow the \csname to
     % include an _ in the xref name, etc.
@@ -8438,6 +8595,10 @@ end
     \expandafter\global\expandafter\let\expandafter\Xthisreftitle
       \csname XR#1-title\endcsname
   }%
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  \iffloat distinguishes them by
+  % \Xthisreftitle being set to a magic string.
   \iffloat\Xthisreftitle
     % If the user specified the print name (third arg) to the ref,
     % print it instead of our usual "Figure 1.2".
@@ -8496,12 +8657,15 @@ end
       %
       % output the `page 3'.
       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-           \ifx,\tokenafterxref
-      \else\ifx.\tokenafterxref
-      \else\ifx;\tokenafterxref
-      \else\ifx)\tokenafterxref
-      \else,% add a , if xref not followed by punctuation
-      \fi\fi\fi\fi
+      % Add a , if xref followed by a space
+      \if\space\noexpand\tokenafterxref ,%
+      \else\ifx\       \tokenafterxref ,% @TAB
+      \else\ifx\*\tokenafterxref ,%   @*
+      \else\ifx\ \tokenafterxref ,%   @SPACE
+      \else\ifx\
+                \tokenafterxref ,%    @NL
+      \else\ifx\tie\tokenafterxref ,% @tie
+      \fi\fi\fi\fi\fi\fi
     \fi\fi
   \fi
   \endlink
@@ -8946,6 +9110,7 @@ end
 \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
   \catcode`\^^M = 5     % in case we're inside an example
   \normalturnoffactive  % allow _ et al. in names
+  \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
   % If the image is by itself, center it.
   \ifvmode
     \imagevmodetrue
@@ -8975,12 +9140,21 @@ end
   %
   % Output the image.
   \ifpdf
+    % For pdfTeX and LuaTeX <= 0.80
     \dopdfimage{#1}{#2}{#3}%
   \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
+    \ifx\XeTeXrevision\thisisundefined
+      % For epsf.tex
+      % \epsfbox itself resets \epsf?size at each figure.
+      \setbox0 = \hbox{\ignorespaces #2}%
+        \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+      \setbox0 = \hbox{\ignorespaces #3}%
+        \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+      \epsfbox{#1.eps}%
+    \else
+      % For XeTeX
+      \doxeteximage{#1}{#2}{#3}%
+    \fi
   \fi
   %
   \ifimagevmode
@@ -9327,6 +9501,45 @@ directory should work if nowhere else does.}
   \global\righthyphenmin = #3\relax
 }
 
+% Get input by bytes instead of by UTF-8 codepoints for XeTeX and LuaTeX, 
+% otherwise the encoding support is completely broken.
+\ifx\XeTeXrevision\thisisundefined
+\else
+\XeTeXdefaultencoding "bytes"  % For subsequent files to be read
+\XeTeXinputencoding "bytes"  % Effective in texinfo.tex only
+% Unfortunately, there seems to be no corresponding XeTeX command for
+% output encoding.  This is a problem for auxiliary index and TOC files.
+% The only solution would be perhaps to write out @U{...} sequences in
+% place of UTF-8 characters.
+\fi
+
+\ifx\luatexversion\thisisundefined
+\else
+\directlua{
+local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+local function convert_char (char)
+  return utf8_char(byte(char))
+end
+
+local function convert_line (line)
+  return gsub(line, ".", convert_char)
+end
+
+callback.register("process_input_buffer", convert_line)
+
+local function convert_line_out (line)
+  local line_out = ""
+  for c in string.utfvalues(line) do
+     line_out = line_out .. string.char(c)
+  end
+  return line_out
+end
+
+callback.register("process_output_buffer", convert_line_out)
+}
+\fi
+
+
 % Helpers for encodings.
 % Set the catcode of characters 128 through 255 to the specified number.
 %
@@ -9349,7 +9562,16 @@ directory should work if nowhere else does.}
 % @documentencoding sets the definition of non-ASCII characters
 % according to the specified encoding.
 %
-\parseargdef\documentencoding{%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+  % Get input by bytes instead of by UTF-8 codepoints for XeTeX,
+  % otherwise the encoding support is completely broken.
+  % This settings is for the document root file.
+  \ifx\XeTeXrevision\thisisundefined
+  \else
+    \XeTeXinputencoding "bytes"
+  \fi
+  %
   % Encoding being declared for the document.
   \def\declaredencoding{\csname #1.enc\endcsname}%
   %
@@ -9726,7 +9948,7 @@ directory should work if nowhere else does.}
        \gdef\UTFviiiTmp{#2}%
       % 
       \expandafter\ifx\csname uni:#1\endcsname \relax \else
-       \errmessage{Internal error, already defined: #1}%
+       \message{Internal error, already defined: #1}%
       \fi
       %
       % define an additional control sequence for this code point.
@@ -9799,7 +10021,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00AD}{\-}
   \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
   \DeclareUnicodeCharacter{00AF}{\={ }}
-
+  %
   \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
   \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}
   \DeclareUnicodeCharacter{00B2}{$^2$}
@@ -9816,7 +10038,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00BD}{$1\over2$}
   \DeclareUnicodeCharacter{00BE}{$3\over4$}
   \DeclareUnicodeCharacter{00BF}{\questiondown}
-
+  %
   \DeclareUnicodeCharacter{00C0}{\`A}
   \DeclareUnicodeCharacter{00C1}{\'A}
   \DeclareUnicodeCharacter{00C2}{\^A}
@@ -9833,7 +10055,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00CD}{\'I}
   \DeclareUnicodeCharacter{00CE}{\^I}
   \DeclareUnicodeCharacter{00CF}{\"I}
-
+  %
   \DeclareUnicodeCharacter{00D0}{\DH}
   \DeclareUnicodeCharacter{00D1}{\~N}
   \DeclareUnicodeCharacter{00D2}{\`O}
@@ -9850,7 +10072,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00DD}{\'Y}
   \DeclareUnicodeCharacter{00DE}{\TH}
   \DeclareUnicodeCharacter{00DF}{\ss}
-
+  %
   \DeclareUnicodeCharacter{00E0}{\`a}
   \DeclareUnicodeCharacter{00E1}{\'a}
   \DeclareUnicodeCharacter{00E2}{\^a}
@@ -9867,7 +10089,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
   \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
   \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
-
+  %
   \DeclareUnicodeCharacter{00F0}{\dh}
   \DeclareUnicodeCharacter{00F1}{\~n}
   \DeclareUnicodeCharacter{00F2}{\`o}
@@ -9884,7 +10106,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00FD}{\'y}
   \DeclareUnicodeCharacter{00FE}{\th}
   \DeclareUnicodeCharacter{00FF}{\"y}
-
+  %
   \DeclareUnicodeCharacter{0100}{\=A}
   \DeclareUnicodeCharacter{0101}{\=a}
   \DeclareUnicodeCharacter{0102}{\u{A}}
@@ -9901,7 +10123,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{010D}{\v{c}}
   \DeclareUnicodeCharacter{010E}{\v{D}}
   \DeclareUnicodeCharacter{010F}{d'}
-
+  %
   \DeclareUnicodeCharacter{0110}{\DH}
   \DeclareUnicodeCharacter{0111}{\dh}
   \DeclareUnicodeCharacter{0112}{\=E}
@@ -9918,7 +10140,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{011D}{\^g}
   \DeclareUnicodeCharacter{011E}{\u{G}}
   \DeclareUnicodeCharacter{011F}{\u{g}}
-
+  %
   \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
   \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
   \DeclareUnicodeCharacter{0122}{\cedilla{G}}
@@ -9935,7 +10157,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
   \DeclareUnicodeCharacter{012E}{\ogonek{I}}
   \DeclareUnicodeCharacter{012F}{\ogonek{i}}
-
+  %
   \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
   \DeclareUnicodeCharacter{0131}{\dotless{i}}
   \DeclareUnicodeCharacter{0132}{IJ}
@@ -9952,7 +10174,7 @@ directory should work if nowhere else does.}
   \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}
@@ -9969,7 +10191,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{014D}{\=o}
   \DeclareUnicodeCharacter{014E}{\u{O}}
   \DeclareUnicodeCharacter{014F}{\u{o}}
-
+  %
   \DeclareUnicodeCharacter{0150}{\H{O}}
   \DeclareUnicodeCharacter{0151}{\H{o}}
   \DeclareUnicodeCharacter{0152}{\OE}
@@ -9986,7 +10208,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{015D}{\^s}
   \DeclareUnicodeCharacter{015E}{\cedilla{S}}
   \DeclareUnicodeCharacter{015F}{\cedilla{s}}
-
+  %
   \DeclareUnicodeCharacter{0160}{\v{S}}
   \DeclareUnicodeCharacter{0161}{\v{s}}
   \DeclareUnicodeCharacter{0162}{\cedilla{T}}
@@ -10003,7 +10225,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{016D}{\u{u}}
   \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
   \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
-
+  %
   \DeclareUnicodeCharacter{0170}{\H{U}}
   \DeclareUnicodeCharacter{0171}{\H{u}}
   \DeclareUnicodeCharacter{0172}{\ogonek{U}}
@@ -10020,7 +10242,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{017D}{\v{Z}}
   \DeclareUnicodeCharacter{017E}{\v{z}}
   \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}
-
+  %
   \DeclareUnicodeCharacter{01C4}{D\v{Z}}
   \DeclareUnicodeCharacter{01C5}{D\v{z}}
   \DeclareUnicodeCharacter{01C6}{d\v{z}}
@@ -10033,20 +10255,20 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{01CD}{\v{A}}
   \DeclareUnicodeCharacter{01CE}{\v{a}}
   \DeclareUnicodeCharacter{01CF}{\v{I}}
-
+  %
   \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
   \DeclareUnicodeCharacter{01D1}{\v{O}}
   \DeclareUnicodeCharacter{01D2}{\v{o}}
   \DeclareUnicodeCharacter{01D3}{\v{U}}
   \DeclareUnicodeCharacter{01D4}{\v{u}}
-
+  %
   \DeclareUnicodeCharacter{01E2}{\={\AE}}
   \DeclareUnicodeCharacter{01E3}{\={\ae}}
   \DeclareUnicodeCharacter{01E6}{\v{G}}
   \DeclareUnicodeCharacter{01E7}{\v{g}}
   \DeclareUnicodeCharacter{01E8}{\v{K}}
   \DeclareUnicodeCharacter{01E9}{\v{k}}
-
+  %
   \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
   \DeclareUnicodeCharacter{01F1}{DZ}
   \DeclareUnicodeCharacter{01F2}{Dz}
@@ -10059,23 +10281,100 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{01FD}{\'{\ae}}
   \DeclareUnicodeCharacter{01FE}{\'{\O}}
   \DeclareUnicodeCharacter{01FF}{\'{\o}}
-
+  %
   \DeclareUnicodeCharacter{021E}{\v{H}}
   \DeclareUnicodeCharacter{021F}{\v{h}}
-
+  %
   \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
   \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
   \DeclareUnicodeCharacter{0228}{\cedilla{E}}
   \DeclareUnicodeCharacter{0229}{\cedilla{e}}
   \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
   \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
-
+  %
   \DeclareUnicodeCharacter{0232}{\=Y}
   \DeclareUnicodeCharacter{0233}{\=y}
   \DeclareUnicodeCharacter{0237}{\dotless{j}}
-
+  %
   \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
-
+  %
+  % Greek letters upper case
+  \DeclareUnicodeCharacter{0391}{{\it A}}
+  \DeclareUnicodeCharacter{0392}{{\it B}}
+  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}
+  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}
+  \DeclareUnicodeCharacter{0395}{{\it E}}
+  \DeclareUnicodeCharacter{0396}{{\it Z}}
+  \DeclareUnicodeCharacter{0397}{{\it H}}
+  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}
+  \DeclareUnicodeCharacter{0399}{{\it I}}
+  \DeclareUnicodeCharacter{039A}{{\it K}}
+  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}
+  \DeclareUnicodeCharacter{039C}{{\it M}}
+  \DeclareUnicodeCharacter{039D}{{\it N}}
+  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}
+  \DeclareUnicodeCharacter{039F}{{\it O}}
+  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}
+  \DeclareUnicodeCharacter{03A1}{{\it P}}
+  %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}
+  \DeclareUnicodeCharacter{03A4}{{\it T}}
+  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}
+  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}
+  \DeclareUnicodeCharacter{03A7}{{\it X}}
+  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}
+  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}
+  %
+  % Vowels with accents
+  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}
+  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}
+  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}
+  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}
+  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}
+  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}
+  %
+  % Standalone accent
+  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}
+  %
+  % Greek letters lower case
+  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}
+  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}
+  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}
+  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}
+  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}
+  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}
+  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}
+  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}
+  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}
+  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}
+  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}
+  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}
+  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}
+  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}
+  \DeclareUnicodeCharacter{03BF}{{\it o}} % omicron
+  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}
+  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}
+  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}
+  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}
+  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}
+  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}
+  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}
+  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}
+  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}
+  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}
+  %
+  % More Greek vowels with accents
+  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}
+  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}
+  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}
+  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}
+  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}
+  %
+  % Variant Greek letters
+  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}
+  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}
+  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}
+  %
   \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
   \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
   \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
@@ -10088,10 +10387,10 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
   \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
   \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
-
+  %
   \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
   \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
-
+  %
   \DeclareUnicodeCharacter{1E20}{\=G}
   \DeclareUnicodeCharacter{1E21}{\=g}
   \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
@@ -10100,7 +10399,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
   \DeclareUnicodeCharacter{1E26}{\"H}
   \DeclareUnicodeCharacter{1E27}{\"h}
-
+  %
   \DeclareUnicodeCharacter{1E30}{\'K}
   \DeclareUnicodeCharacter{1E31}{\'k}
   \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
@@ -10113,7 +10412,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
   \DeclareUnicodeCharacter{1E3E}{\'M}
   \DeclareUnicodeCharacter{1E3F}{\'m}
-
+  %
   \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
   \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
   \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
@@ -10124,7 +10423,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
   \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
   \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
-
+  %
   \DeclareUnicodeCharacter{1E54}{\'P}
   \DeclareUnicodeCharacter{1E55}{\'p}
   \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
@@ -10135,7 +10434,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
   \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
   \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
-
+  %
   \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
   \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
   \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
@@ -10146,12 +10445,12 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
   \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
   \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
-
+  %
   \DeclareUnicodeCharacter{1E7C}{\~V}
   \DeclareUnicodeCharacter{1E7D}{\~v}
   \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
   \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
-
+  %
   \DeclareUnicodeCharacter{1E80}{\`W}
   \DeclareUnicodeCharacter{1E81}{\`w}
   \DeclareUnicodeCharacter{1E82}{\'W}
@@ -10168,7 +10467,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E8D}{\"x}
   \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
   \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
-
+  %
   \DeclareUnicodeCharacter{1E90}{\^Z}
   \DeclareUnicodeCharacter{1E91}{\^z}
   \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
@@ -10179,30 +10478,31 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{1E97}{\"t}
   \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
   \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
-
+  %
   \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
   \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
-
+  %
   \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
   \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
   \DeclareUnicodeCharacter{1EBC}{\~E}
   \DeclareUnicodeCharacter{1EBD}{\~e}
-
+  %
   \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
   \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
   \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
   \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
-
+  %
   \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
   \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
-
+  %
   \DeclareUnicodeCharacter{1EF2}{\`Y}
   \DeclareUnicodeCharacter{1EF3}{\`y}
   \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
-
+  %
   \DeclareUnicodeCharacter{1EF8}{\~Y}
   \DeclareUnicodeCharacter{1EF9}{\~y}
-
+  %
+  % Punctuation
   \DeclareUnicodeCharacter{2013}{--}
   \DeclareUnicodeCharacter{2014}{---}
   \DeclareUnicodeCharacter{2018}{\quoteleft}
@@ -10214,18 +10514,166 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}
   \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}
   \DeclareUnicodeCharacter{2022}{\bullet}
+  \DeclareUnicodeCharacter{202F}{\thinspace}
   \DeclareUnicodeCharacter{2026}{\dots}
   \DeclareUnicodeCharacter{2039}{\guilsinglleft}
   \DeclareUnicodeCharacter{203A}{\guilsinglright}
+  %
   \DeclareUnicodeCharacter{20AC}{\euro}
-
+  %
   \DeclareUnicodeCharacter{2192}{\expansion}
   \DeclareUnicodeCharacter{21D2}{\result}
-
+  %
+  % Mathematical symbols
+  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}
+  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}
+  \DeclareUnicodeCharacter{2208}{\ensuremath\in}
   \DeclareUnicodeCharacter{2212}{\minus}
-  \DeclareUnicodeCharacter{2217}{\point}
+  \DeclareUnicodeCharacter{2217}{\ast}
+  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}
   \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}
+  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}
+  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}
   \DeclareUnicodeCharacter{2261}{\equiv}
+  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}
+  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}
+  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}
+  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}
+  %
+  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}
+  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}
+  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}
+  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}
+  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}
+  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}
+  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}
+  \DeclareUnicodeCharacter{2127}{\ensuremath\mho}
+  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}
+  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}
+  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}
+  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}
+  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}
+  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}
+  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}
+  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}
+  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}
+  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}
+  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}
+  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}
+  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}
+  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}
+  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}
+  \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright}
+  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}
+  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}
+  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}
+  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}
+  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}
+  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}
+  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}
+  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}
+  \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto}
+  \DeclareUnicodeCharacter{2201}{\ensuremath\complement}
+  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}
+  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}
+  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}
+  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}
+  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}
+  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}
+  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}
+  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}
+  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}
+  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}
+  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}
+  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}
+  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}
+  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}
+  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}
+  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}
+  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}
+  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}
+  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}
+  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}
+  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}
+  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}
+  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}
+  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}
+  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}
+  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}
+  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}
+  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}
+  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}
+  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}
+  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}
+  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}
+  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}
+  \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset}
+  \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset}
+  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}
+  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}
+  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}
+  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}
+  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}
+  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}
+  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}
+  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}
+  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}
+  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}
+  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}
+  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}
+  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}
+  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}
+  \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd}
+  \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd}
+  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}
+  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}
+  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}
+  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}
+  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}
+  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}
+  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}
+  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}
+  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}
+  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}
+  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}
+  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}
+  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}
+  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}
+  %
+  \DeclareUnicodeCharacter{25A1}{\ensuremath\Box}
+  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}
+  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}
+  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}
+  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}
+  \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond}
+  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}
+  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}
+  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}
+  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}
+  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}
+  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}
+  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}
+  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}
+  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}
+  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}
+  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}
+  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}
+  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}
+  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}
+  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}
+  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}
+  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}
+  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}
+  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}
+  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}
+  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}
+  \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join}
+  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}
+  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}
+  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}
+  %
+  \global\mathchardef\checkmark="1370 % actually the square root sign
+  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}
 }% end of \utfeightchardefs
 
 % US-ASCII character definitions.
@@ -10543,11 +10991,12 @@ directory should work if nowhere else does.}
 % this is not a problem.
 \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
 
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
+% Set catcodes for Texinfo file
+
+% Active characters for printing the wanted glyph.
 % Most of these we simply print from the \tt font, but for some, we can
 % use math or other variants that look better in normal text.
-
+%
 \catcode`\"=\active
 \def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
@@ -10557,12 +11006,10 @@ directory should work if nowhere else does.}
 
 \catcode`\_=\active
 \def_{\ifusingtt\normalunderscore\_}
-\let\realunder=_
-% Subroutine for the previous macro.
 \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+\let\realunder=_
 
-\catcode`\|=\active
-\def|{{\tt\char124}}
+\catcode`\|=\active \def|{{\tt\char124}}
 
 \chardef \less=`\<
 \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
@@ -10677,9 +11124,20 @@ directory should work if nowhere else does.}
 address@hidden@^=7 @address@hidden
 @address@hidden input address@hidden
 
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
address@hidden@^=7 @catcode13=13%
address@hidden@enableemergencynewline{%
+  @gdef^^M{%
+    @par%
+    %<warning: active newline>@par%
+}}}
+
+
 @address@hidden
   @address@hidden @let\ = @ttbackslash @fi
   @catcode13=5 % regular end of line
+  @enableemergencynewline
   @address@hidden@texinfoc
   % Also turn back on active characters that might appear in the input
   % file name, in case not using a pre-dumped format.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog       |    4 +
 NEWS            |    3 +-
 README          |    6 +-
 doc/ChangeLog   |    8 +
 doc/gawk.info   | 1345 +++++++++++++++++++++++++++----------------------------
 doc/gawk.texi   |  323 ++++++--------
 doc/gawktexi.in |  315 ++++++--------
 doc/texinfo.tex | 1090 ++++++++++++++++++++++++++++++++-------------
 8 files changed, 1740 insertions(+), 1354 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]