gawk-diffs
[Top][All Lists]
Advanced

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

[gawk-diffs] [SCM] gawk branch, master, updated. 34e5e4114f8d7d9fe421a11


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, master, updated. 34e5e4114f8d7d9fe421a113698edec05dc95a15
Date: Wed, 17 Apr 2013 17:53:33 +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, master has been updated
       via  34e5e4114f8d7d9fe421a113698edec05dc95a15 (commit)
       via  2cc5fc89122ca058bccb2f9652b4b4c1f89f7be6 (commit)
       via  0238ddd5dfd879ca5f87b1e0ba17783b648dbffd (commit)
       via  e526c12acdeff316957c2fd5935b36172a61620f (commit)
      from  9eb3ed0c70149895f69cd04d6c0880b4d20a0ba1 (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=34e5e4114f8d7d9fe421a113698edec05dc95a15

commit 34e5e4114f8d7d9fe421a113698edec05dc95a15
Author: Arnold D. Robbins <address@hidden>
Date:   Wed Apr 17 20:53:13 2013 +0300

    Configuration fix for Cygwin.

diff --git a/ChangeLog b/ChangeLog
index 458fb56..a131f4a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-04-17         Corinna Vinschen      <address@hidden>
+
+       * configure.ac: Remove special casing for cygwin for libiconv
+       and libintl.
+
 2013-04-16         Arnold D. Robbins     <address@hidden>
 
        * bootstrap.sh: Touch gawk.texi too. Update copyright.
diff --git a/configure b/configure
index 73edd29..06d89d2 100755
--- a/configure
+++ b/configure
@@ -5936,15 +5936,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS 
$LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-case `(uname) 2> /dev/null` in
-*CYGWIN*)
-       with_libiconv_prefix=no
-       with_libintl_prefix=no
-       ;;
-*)
-       ;;
-esac
-
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" 
>&5
 $as_echo_n "checking whether NLS is requested... " >&6; }
diff --git a/configure.ac b/configure.ac
index 42b8454..6899854 100644
--- a/configure.ac
+++ b/configure.ac
@@ -129,17 +129,6 @@ dnl Set the programming language for checks. Fortunately,
 dnl this only needs to be set once, since everything is in C.
 AC_LANG([C])
 
-dnl Cygwin doesn't like to get libs with full paths
-dnl since that overrides linking against DLLs.
-case `(uname) 2> /dev/null` in
-*CYGWIN*)
-       with_libiconv_prefix=no
-       with_libintl_prefix=no
-       ;;
-*)
-       ;;
-esac
-
 dnl initialize GNU gettext
 AM_GNU_GETTEXT([external])
 AM_GNU_GETTEXT_VERSION([0.18.1])

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2cc5fc89122ca058bccb2f9652b4b4c1f89f7be6

commit 2cc5fc89122ca058bccb2f9652b4b4c1f89f7be6
Author: Arnold D. Robbins <address@hidden>
Date:   Wed Apr 17 20:50:55 2013 +0300

    Fix extensions to link with LTLIBINTL.

diff --git a/extension/ChangeLog b/extension/ChangeLog
index 950c6ce..b893ee1 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2013-04-17         Corinna Vinschen      <address@hidden>
+
+       * Makefile.am (MY_LIBS): Use $(LTLIBINTL) since we use libtool,
+       not LIBINTL.
+
 2013-04-16         Arnold D. Robbins     <address@hidden>
 
        * filefuncs.c, fnmatch.c, fork.c, ordchr.c, readdir.c, readfile.c,
diff --git a/extension/Makefile.am b/extension/Makefile.am
index d048497..b51b6c0 100644
--- a/extension/Makefile.am
+++ b/extension/Makefile.am
@@ -47,7 +47,7 @@ pkgextension_LTLIBRARIES =    \
 
 MY_MODULE_FLAGS = -module -avoid-version -no-undefined
 # on Cygwin, gettext requires that we link with -lintl 
-MY_LIBS = $(LIBINTL)
+MY_LIBS = $(LTLIBINTL)
 
 filefuncs_la_SOURCES  = filefuncs.c stack.h stack.c gawkfts.h \
                        gawkfts.c gawkdirfd.h
diff --git a/extension/Makefile.in b/extension/Makefile.in
index 84be843..1bd4750 100644
--- a/extension/Makefile.in
+++ b/extension/Makefile.in
@@ -502,7 +502,7 @@ pkgextension_LTLIBRARIES = \
 
 MY_MODULE_FLAGS = -module -avoid-version -no-undefined
 # on Cygwin, gettext requires that we link with -lintl 
-MY_LIBS = $(LIBINTL)
+MY_LIBS = $(LTLIBINTL)
 filefuncs_la_SOURCES = filefuncs.c stack.h stack.c gawkfts.h \
                        gawkfts.c gawkdirfd.h
 

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=0238ddd5dfd879ca5f87b1e0ba17783b648dbffd

commit 0238ddd5dfd879ca5f87b1e0ba17783b648dbffd
Author: Arnold D. Robbins <address@hidden>
Date:   Wed Apr 17 20:45:21 2013 +0300

    Minor fix for doc for building out of source dir.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index f3c85db..3b7c32a 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,9 @@
+2013-04-17         Arnold D. Robbins     <address@hidden>
+
+       * Makefile.am (gawk.ps, gawkinet.ps): Set TEXINPUTS to point
+       at $(srcdir) to be able to include various figures if doing a
+       build not in the source directory.
+
 2013-04-16         Arnold D. Robbins     <address@hidden>
 
        * gawkman.texi: New file. This is now the real source for the
diff --git a/doc/Makefile.am b/doc/Makefile.am
index e16e28e..5d015c7 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -78,10 +78,10 @@ postscript: gawk.ps gawkinet.ps gawk.1.ps igawk.1.ps 
$(AWKCARD)
 pdf: postscript gawk.pdf gawkinet.pdf awkcard.pdf gawk.1.pdf igawk.1.pdf
 
 gawk.ps: gawk.dvi
-       dvips -o gawk.ps gawk.dvi
+       TEXINPUTS=$(srcdir): dvips -o gawk.ps gawk.dvi
 
 gawkinet.ps: gawkinet.dvi
-       dvips -o gawkinet.ps gawkinet.dvi
+       TEXINPUTS=$(srcdir): dvips -o gawkinet.ps gawkinet.dvi
 
 gawk.1.ps: gawk.1
        -groff -man $(srcdir)/gawk.1 > gawk.1.ps
diff --git a/doc/Makefile.in b/doc/Makefile.in
index e285de8..2659655 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -844,10 +844,10 @@ postscript: gawk.ps gawkinet.ps gawk.1.ps igawk.1.ps 
$(AWKCARD)
 pdf: postscript gawk.pdf gawkinet.pdf awkcard.pdf gawk.1.pdf igawk.1.pdf
 
 gawk.ps: gawk.dvi
-       dvips -o gawk.ps gawk.dvi
+       TEXINPUTS=$(srcdir): dvips -o gawk.ps gawk.dvi
 
 gawkinet.ps: gawkinet.dvi
-       dvips -o gawkinet.ps gawkinet.dvi
+       TEXINPUTS=$(srcdir): dvips -o gawkinet.ps gawkinet.dvi
 
 gawk.1.ps: gawk.1
        -groff -man $(srcdir)/gawk.1 > gawk.1.ps

http://git.sv.gnu.org/cgit/gawk.git/commit/?id=e526c12acdeff316957c2fd5935b36172a61620f

commit e526c12acdeff316957c2fd5935b36172a61620f
Author: Arnold D. Robbins <address@hidden>
Date:   Tue Apr 16 22:07:39 2013 +0300

    Add support for sidebars in the doc.

diff --git a/ChangeLog b/ChangeLog
index 0b71c91..458fb56 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2013-04-16         Arnold D. Robbins     <address@hidden>
 
+       * bootstrap.sh: Touch gawk.texi too. Update copyright.
+
+2013-04-16         Arnold D. Robbins     <address@hidden>
+
        * awkgram.c: Regenerated from bison 2.7.1.
        * command.c: Ditto.
        * dfa.h, dfa.c: Minor edits to sync with GNU grep.
diff --git a/bootstrap.sh b/bootstrap.sh
index 700babe..cd6ed10 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -3,7 +3,7 @@
 # bootstrap.sh --- touch relevant files to avoid out-of-date issues in
 #                 Git sandboxes
 
-# Copyright (C) 2007, 2009, 2010, 2011, 2012 the Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009-2013 the Free Software Foundation, Inc.
 # 
 # This file is part of GAWK, the GNU implementation of the
 # AWK Programming Language.
@@ -34,6 +34,8 @@ touch extension/configh.in
 sleep 1
 touch test/Maketests
 find . -name Makefile.in -print | xargs touch
+touch doc/gawk.texi    # make later than gawkman.texi
+sleep 1
 touch doc/*.info
 touch po/*.gmo
 touch po/stamp-po
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 37b3156..f3c85db 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,5 +1,13 @@
 2013-04-16         Arnold D. Robbins     <address@hidden>
 
+       * gawkman.texi: New file. This is now the real source for the
+       manual and gawk.texi is generated from it.
+       * sidebar.awk: New file to DTRT for sidebars in the manual.
+       * Makefile.am (EXTRA_DIST): Update.
+       (gawk.texi): Add new rule to create / update it if necessary.
+
+2013-04-16         Arnold D. Robbins     <address@hidden>
+
        * gawk.texi: Pretty much finish cleanup. Move i18n chapter to
        after advanced features chapter.
        * texinfo.tex: Updated to current in texinfo SVN.
diff --git a/doc/Makefile.am b/doc/Makefile.am
index dfdec72..e16e28e 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -36,6 +36,7 @@ EXTRA_DIST = ChangeLog ChangeLog.0 README.card ad.block 
setter.outline \
        api-figure2.png api-figure2.txt \
        api-figure3.eps api-figure3.fig api-figure3.pdf \
        api-figure3.png api-figure3.txt \
+       gawkman.texi sidebar.awk \
        general-program.eps general-program.fig general-program.pdf \
        general-program.png general-program.txt \
        process-flow.eps process-flow.fig process-flow.pdf \
@@ -69,6 +70,9 @@ AWKCARD = awkcard.ps
 # to ensure that awkcard.tr is processed by tbl.
 #AWKCARD = awkcard.nc
 
+gawk.texi: $(srcdir)/gawkman.texi $(srcdir)/sidebar.awk
+       awk -f $(srcdir)/sidebar.awk < $(srcdir)/gawkman.texi > gawk.texi
+
 postscript: gawk.ps gawkinet.ps gawk.1.ps igawk.1.ps $(AWKCARD)
 
 pdf: postscript gawk.pdf gawkinet.pdf awkcard.pdf gawk.1.pdf igawk.1.pdf
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 1dae6d5..e285de8 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -322,6 +322,7 @@ EXTRA_DIST = ChangeLog ChangeLog.0 README.card ad.block 
setter.outline \
        api-figure2.png api-figure2.txt \
        api-figure3.eps api-figure3.fig api-figure3.pdf \
        api-figure3.png api-figure3.txt \
+       gawkman.texi sidebar.awk \
        general-program.eps general-program.fig general-program.pdf \
        general-program.png general-program.txt \
        process-flow.eps process-flow.fig process-flow.pdf \
@@ -835,6 +836,9 @@ uninstall-man: uninstall-man1
 # to ensure that awkcard.tr is processed by tbl.
 #AWKCARD = awkcard.nc
 
+gawk.texi: $(srcdir)/gawkman.texi $(srcdir)/sidebar.awk
+       awk -f $(srcdir)/sidebar.awk < $(srcdir)/gawkman.texi > gawk.texi
+
 postscript: gawk.ps gawkinet.ps gawk.1.ps igawk.1.ps $(AWKCARD)
 
 pdf: postscript gawk.pdf gawkinet.pdf awkcard.pdf gawk.1.pdf igawk.1.pdf
diff --git a/doc/gawk.info b/doc/gawk.info
index 2d1ee6c..afe757c 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -832,11 +832,11 @@ History of `awk' and `gawk'
           1 part  `egrep'   1 part  `snobol'
           2 parts `ed'      3 parts C
 
-     Blend all parts well using `lex' and `yacc'.  Document minimally
-     and release.
+   Blend all parts well using `lex' and `yacc'.  Document minimally and
+release.
 
-     After eight years, add another part `egrep' and two more parts C.
-     Document very well and release.
+   After eight years, add another part `egrep' and two more parts C.
+Document very well and release.
 
 The name `awk' comes from the initials of its designers: Alfred V.
 Aho, Peter J. Weinberger and Brian W. Kernighan.  The original version
@@ -928,11 +928,10 @@ differences between `gawk' and other `awk' 
implementations.(1) Finally,
 any `gawk' features that are not in the POSIX standard for `awk' are
 noted.
 
-   There are subsections labeled as *Advanced Notes* scattered
-throughout the Info file.  They add a more complete explanation of
-points that are relevant, but not likely to be of interest on first
-reading.  All appear in the index, under the heading "advanced
-features."
+   There are sidebars scattered throughout the Info file.  They add a
+more complete explanation of points that are relevant, but not likely
+to be of interest on first reading.  All appear in the index, under the
+heading "sidebar."
 
    Most of the time, the examples use complete `awk' programs.  Some of
 the more advanced sections show only the part of the `awk' program that
@@ -1530,11 +1529,10 @@ at the shell.)
 program that users can invoke without their having to know that the
 program is written in `awk'.
 
-Advanced Notes: Portability Issues with `#!'
---------------------------------------------
+                     Portability Issues with `#!'
 
-Some systems limit the length of the interpreter name to 32 characters.
-Often, this can be dealt with by using a symbolic link.
+   Some systems limit the length of the interpreter name to 32
+characters.  Often, this can be dealt with by using a symbolic link.
 
    You should not put more than one argument on the `#!' line after the
 path to `awk'. It does not work. The operating system treats the rest
@@ -3259,11 +3257,10 @@ character not shown in the previous list.
    * A backslash before any other character means to treat that
      character literally.
 
-Advanced Notes: Backslash Before Regular Characters
----------------------------------------------------
+                  Backslash Before Regular Characters
 
-If you place a backslash in a string constant before something that is
-not one of the characters previously listed, POSIX `awk' purposely
+   If you place a backslash in a string constant before something that
+is not one of the characters previously listed, POSIX `awk' purposely
 leaves what happens as undefined.  There are two choices:
 
 Strip the backslash out
@@ -3278,10 +3275,9 @@ Leave the backslash alone
      Some other `awk' implementations do this.  In such
      implementations, typing `"a\qc"' is the same as typing `"a\\qc"'.
 
-Advanced Notes: Escape Sequences for Metacharacters
----------------------------------------------------
+                  Escape Sequences for Metacharacters
 
-Suppose you use an octal or hexadecimal escape to represent a regexp
+   Suppose you use an octal or hexadecimal escape to represent a regexp
 metacharacter.  (See *note Regexp Operators::.)  Does `awk' treat the
 character as a literal character or as a regexp operator?
 
@@ -3823,11 +3819,10 @@ constants," for several reasons:
    * Using regexp constants is better form; it shows clearly that you
      intend a regexp match.
 
-Advanced Notes: Using `\n' in Bracket Expressions of Dynamic Regexps
---------------------------------------------------------------------
+         Using `\n' in Bracket Expressions of Dynamic Regexps
 
-Some commercial versions of `awk' do not allow the newline character to
-be used inside a bracket expression for a dynamic regexp:
+   Some commercial versions of `awk' do not allow the newline character
+to be used inside a bracket expression for a dynamic regexp:
 
      $ awk '$0 ~ "[ \t\n]"'
      error--> awk: newline in character class [
@@ -4064,10 +4059,9 @@ that this will never happen.
 Options::).  In compatibility mode, only the first character of the
 value of `RS' is used to determine the end of the record.
 
-Advanced Notes: `RS = "\0"' Is Not Portable
--------------------------------------------
+                      `RS = "\0"' Is Not Portable
 
-There are times when you might want to treat an entire data file as a
+   There are times when you might want to treat an entire data file as a
 single record.  The only way to make this happen is to give `RS' a
 value that you know doesn't occur in the input file.  This is hard to
 do in a general way, such that a program always works for arbitrary
@@ -4347,11 +4341,10 @@ fields using the _current_ value of `FS'.  This also 
applies to any
 built-in function that updates `$0', such as `sub()' and `gsub()'
 (*note String Functions::).
 
-Advanced Notes: Understanding `$0'
-----------------------------------
+                          Understanding `$0'
 
-It is important to remember that `$0' is the _full_ record, exactly as
-it was read from the input.  This includes any leading or trailing
+   It is important to remember that `$0' is the _full_ record, exactly
+as it was read from the input.  This includes any leading or trailing
 whitespace, and the exact whitespace (or other characters) that
 separate the fields.
 
@@ -4680,14 +4673,13 @@ value of `FS' (`==' means "is equal to"):
      (This is a `gawk' extension; it is not specified by the POSIX
      standard.)
 
-Advanced Notes: Changing `FS' Does Not Affect the Fields
---------------------------------------------------------
+               Changing `FS' Does Not Affect the Fields
 
-According to the POSIX standard, `awk' is supposed to behave as if each
-record is split into fields at the time it is read.  In particular,
-this means that if you change the value of `FS' after a record is read,
-the value of the fields (i.e., how they were split) should reflect the
-old value of `FS', not the new one.
+   According to the POSIX standard, `awk' is supposed to behave as if
+each record is split into fields at the time it is read.  In
+particular, this means that if you change the value of `FS' after a
+record is read, the value of the fields (i.e., how they were split)
+should reflect the old value of `FS', not the new one.
 
    However, many older implementations of `awk' do not work this way.
 Instead, they defer splitting the fields until a field is actually
@@ -4707,10 +4699,9 @@ like:
 
      root:nSijPlPhZZwgE:0:0:Root:/:
 
-Advanced Notes: `FS' and `IGNORECASE'
--------------------------------------
+                         `FS' and `IGNORECASE'
 
-The `IGNORECASE' variable (*note User-modified::) affects field
+   The `IGNORECASE' variable (*note User-modified::) affects field
 splitting _only_ when the value of `FS' is a regexp.  It has no effect
 when `FS' is a single character, even if that character is a letter.
 Thus, in the following code:
@@ -6385,14 +6376,13 @@ an `awk' program may have open to just one!  In `gawk', 
there is no
 such limit.  `gawk' allows a program to open as many pipelines as the
 underlying operating system permits.
 
-Advanced Notes: Piping into `sh'
---------------------------------
+                           Piping into `sh'
 
-A particularly powerful way to use redirection is to build command lines
-and pipe them into the shell, `sh'.  For example, suppose you have a
-list of files brought over from a system where all the file names are
-stored in uppercase, and you wish to rename them to have names in all
-lowercase.  The following program is both simple and efficient:
+   A particularly powerful way to use redirection is to build command
+lines and pipe them into the shell, `sh'.  For example, suppose you
+have a list of files brought over from a system where all the file names
+are stored in uppercase, and you wish to rename them to have names in
+all lowercase.  The following program is both simple and efficient:
 
      { printf("mv %s %s\n", $0, tolower($0)) | "sh" }
 
@@ -6670,10 +6660,9 @@ The second argument should be a string, with either of 
the values
 feature, a more complete discussion is delayed until *note Two-way
 I/O::, which discusses it in more detail and gives an example.
 
-Advanced Notes: Using `close()''s Return Value
-----------------------------------------------
+                    Using `close()''s Return Value
 
-In many versions of Unix `awk', the `close()' function is actually a
+   In many versions of Unix `awk', the `close()' function is actually a
 statement.  It is a syntax error to try and use the return value from
 `close()': (d.c.)
 
@@ -6870,10 +6859,9 @@ octal constants; e.g., `gawk' treats `018' as decimal 18:
 If `gawk' is in compatibility mode (*note Options::), they are not
 available.
 
-Advanced Notes: A Constant's Base Does Not Affect Its Value
------------------------------------------------------------
+              A Constant's Base Does Not Affect Its Value
 
-Once a numeric constant has been converted internally into a number,
+   Once a numeric constant has been converted internally into a number,
 `gawk' no longer remembers what the original form of the constant was;
 the internal value is always used.  This has particular consequences
 for conversion of numbers to strings:
@@ -7539,12 +7527,11 @@ Table 6.2: Arithmetic Assignment Operators
      NOTE: Only the `^=' operator is specified by POSIX.  For maximum
      portability, do not use the `**=' operator.
 
-Advanced Notes: Syntactic Ambiguities Between `/=' and Regular Expressions
---------------------------------------------------------------------------
+      Syntactic Ambiguities Between `/=' and Regular Expressions
 
-There is a syntactic ambiguity between the `/=' assignment operator and
-regexp constants whose first character is an `='.  (d.c.)  This is most
-notable in some commercial `awk' versions.  For example:
+   There is a syntactic ambiguity between the `/=' assignment operator
+and regexp constants whose first character is an `='.  (d.c.)  This is
+most notable in some commercial `awk' versions.  For example:
 
      $ awk /==/ /dev/null
      error--> awk: syntax error at source line 1
@@ -7617,8 +7604,7 @@ is a summary of increment and decrement expressions:
      of the expression.  (This expression is like `LVALUE++', but
      instead of adding, it subtracts.)
 
-Advanced Notes: Operator Evaluation Order
------------------------------------------
+                       Operator Evaluation Order
 
      Doctor, doctor!  It hurts when I do this!
      So don't do that!
@@ -9925,14 +9911,13 @@ with a pound sign (`#').
           neither `FUNCTAB' nor `SYMTAB' are available as elements
           within the `SYMTAB' array.
 
-Advanced Notes: Changing `NR' and `FNR'
----------------------------------------
+                        Changing `NR' and `FNR'
 
-`awk' increments `NR' and `FNR' each time it reads a record, instead of
-setting them to the absolute value of the number of records read.  This
-means that a program can change these variables and their new values
-are incremented for each record.  (d.c.)  The following example shows
-this:
+   `awk' increments `NR' and `FNR' each time it reads a record, instead
+of setting them to the absolute value of the number of records read.
+This means that a program can change these variables and their new
+values are incremented for each record.  (d.c.)  The following example
+shows this:
 
      $ echo '1
      > 2
@@ -11880,10 +11865,9 @@ Table 9.5: Escape Sequence Processing For `gensub()'
 and the special cases for `sub()' and `gsub()', we recommend the use of
 `gawk' and `gensub()' when you have to do substitutions.
 
-Advanced Notes: Matching the Null String
-----------------------------------------
+                       Matching the Null String
 
-In `awk', the `*' operator can match the null string.  This is
+   In `awk', the `*' operator can match the null string.  This is
 particularly important for the `sub()', `gsub()', and `gensub()'
 functions.  For example:
 
@@ -12004,12 +11988,11 @@ parameters are enclosed in square brackets ([ ]):
           is disabled (*note Options::).
 
 
-Advanced Notes: Interactive Versus Noninteractive Buffering
------------------------------------------------------------
+              Interactive Versus Noninteractive Buffering
 
-As a side point, buffering issues can be even more confusing, depending
-upon whether your program is "interactive", i.e., communicating with a
-user sitting at a keyboard.(1)
+   As a side point, buffering issues can be even more confusing,
+depending upon whether your program is "interactive", i.e.,
+communicating with a user sitting at a keyboard.(1)
 
    Interactive programs generally "line buffer" their output; i.e., they
 write out every line.  Noninteractive programs wait until they have a
@@ -12036,13 +12019,13 @@ this example:
 Here, no output is printed until after the `Ctrl-d' is typed, because
 it is all buffered and sent down the pipe to `cat' in one shot.
 
-Advanced Notes: Controlling Output Buffering with `system()'
-------------------------------------------------------------
+             Controlling Output Buffering with `system()'
 
-The `fflush()' function provides explicit control over output buffering
-for individual files and pipes.  However, its use is not portable to
-many older `awk' implementations.  An alternative method to flush output
-buffers is to call `system()' with a null string as its argument:
+   The `fflush()' function provides explicit control over output
+buffering for individual files and pipes.  However, its use is not
+portable to many older `awk' implementations.  An alternative method to
+flush output buffers is to call `system()' with a null string as its
+argument:
 
      system("")   # flush output
 
@@ -14222,12 +14205,11 @@ solves the problem:
    *note Wc Program::, shows how this library function can be used and
 how it simplifies writing the main program.
 
-Advanced Notes: So Why Does `gawk' have `BEGINFILE' and `ENDFILE'?
-------------------------------------------------------------------
+          So Why Does `gawk' have `BEGINFILE' and `ENDFILE'?
 
-You are probably wondering, if `beginfile()' and `endfile()' functions
-can do the job, why does `gawk' have `BEGINFILE' and `ENDFILE' patterns
-(*note BEGINFILE/ENDFILE::)?
+   You are probably wondering, if `beginfile()' and `endfile()'
+functions can do the job, why does `gawk' have `BEGINFILE' and
+`ENDFILE' patterns (*note BEGINFILE/ENDFILE::)?
 
    Good question.  Normally, if `awk' cannot open a file, this causes
 an immediate fatal error.  In this case, there is no way for a
@@ -29271,7 +29253,7 @@ Index
 * * (asterisk), * operator, as regexp operator: Regexp Operators.
                                                               (line  87)
 * * (asterisk), * operator, null strings, matching: Gory Details.
-                                                              (line 165)
+                                                              (line 164)
 * * (asterisk), ** operator <1>:         Precedence.          (line  49)
 * * (asterisk), ** operator:             Arithmetic Ops.      (line  81)
 * * (asterisk), **= operator <1>:        Precedence.          (line  95)
@@ -29386,9 +29368,9 @@ Index
 * / (forward slash), /= operator <1>:    Precedence.          (line  95)
 * / (forward slash), /= operator:        Assignment Ops.      (line 129)
 * / (forward slash), /= operator, vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 148)
+                                                              (line 147)
 * / (forward slash), patterns and:       Expression Patterns. (line  24)
-* /= operator vs. /=.../ regexp constant: Assignment Ops.     (line 148)
+* /= operator vs. /=.../ regexp constant: Assignment Ops.     (line 147)
 * /dev/... special files (gawk):         Special FD.          (line  46)
 * /dev/fd/N special files:               Special FD.          (line  46)
 * /inet/... special files (gawk):        TCP/IP Networking.   (line   6)
@@ -29473,7 +29455,7 @@ Index
 * \ (backslash), in bracket expressions: Bracket Expressions. (line  17)
 * \ (backslash), in escape sequences:    Escape Sequences.    (line   6)
 * \ (backslash), in escape sequences, POSIX and: Escape Sequences.
-                                                              (line 113)
+                                                              (line 112)
 * \ (backslash), regexp constants:       Computed Regexps.    (line  28)
 * ^ (caret) <1>:                         GNU Regexp Operators.
                                                               (line  59)
@@ -29500,14 +29482,7 @@ Index
 * Ada programming language:              Glossary.            (line  20)
 * adding, features to gawk:              Adding Code.         (line   6)
 * adding, fields:                        Changing Fields.     (line  53)
-* advanced features, buffering:          I/O Functions.       (line 107)
-* advanced features, close() function:   Close Files And Pipes.
-                                                              (line 131)
-* advanced features, constants, values of: Nondecimal-numbers.
-                                                              (line  67)
-* advanced features, data files as single record: Records.    (line 180)
 * advanced features, fixed-width data:   Constant Size.       (line   9)
-* advanced features, FNR/NR variables:   Auto-set.            (line 301)
 * advanced features, gawk:               Advanced Features.   (line   6)
 * advanced features, gawk, network programming: TCP/IP Networking.
                                                               (line   6)
@@ -29517,10 +29492,6 @@ Index
                                                               (line  23)
 * advanced features, network connections, See Also networks, connections: 
Advanced Features.
                                                               (line   6)
-* advanced features, null strings, matching: Gory Details.    (line 165)
-* advanced features, operators, precedence: Increment Ops.    (line  61)
-* advanced features, piping into sh:     Redirection.         (line 143)
-* advanced features, regexp constants:   Assignment Ops.      (line 148)
 * advanced features, specifying field content: Splitting By Content.
                                                               (line   9)
 * Aho, Alfred <1>:                       Contributors.        (line  12)
@@ -29532,7 +29503,7 @@ Index
 * amazing awk assembler (aaa):           Glossary.            (line  12)
 * amazingly workable formatter (awf):    Glossary.            (line  25)
 * ambiguity, syntactic: /= operator vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 148)
+                                                              (line 147)
 * ampersand (&), && operator <1>:        Precedence.          (line  86)
 * ampersand (&), && operator:            Boolean Ops.         (line  57)
 * ampersand (&), gsub()/gensub()/sub() functions and: Gory Details.
@@ -29549,7 +29520,7 @@ Index
 * ARGC/ARGV variables:                   Auto-set.            (line  11)
 * ARGC/ARGV variables, command-line arguments: Other Arguments.
                                                               (line  12)
-* ARGC/ARGV variables, portability and:  Executable Scripts.  (line  43)
+* ARGC/ARGV variables, portability and:  Executable Scripts.  (line  42)
 * ARGIND variable:                       Auto-set.            (line  40)
 * ARGIND variable, command-line arguments: Other Arguments.   (line  12)
 * arguments, command-line <1>:           ARGC and ARGV.       (line   6)
@@ -29611,7 +29582,7 @@ Index
 * asterisk (*), * operator, as regexp operator: Regexp Operators.
                                                               (line  87)
 * asterisk (*), * operator, null strings, matching: Gory Details.
-                                                              (line 165)
+                                                              (line 164)
 * asterisk (*), ** operator <1>:         Precedence.          (line  49)
 * asterisk (*), ** operator:             Arithmetic Ops.      (line  81)
 * asterisk (*), **= operator <1>:        Precedence.          (line  95)
@@ -29729,7 +29700,7 @@ Index
 * backslash (\), in bracket expressions: Bracket Expressions. (line  17)
 * backslash (\), in escape sequences:    Escape Sequences.    (line   6)
 * backslash (\), in escape sequences, POSIX and: Escape Sequences.
-                                                              (line 113)
+                                                              (line 112)
 * backslash (\), regexp constants:       Computed Regexps.    (line  28)
 * backtrace debugger command:            Execution Stack.     (line  13)
 * BBS-list file:                         Sample Data Files.   (line   6)
@@ -29813,8 +29784,8 @@ Index
 * Buening, Andreas <2>:                  Contributors.        (line  92)
 * Buening, Andreas:                      Acknowledgments.     (line  60)
 * buffering, input/output <1>:           Two-way I/O.         (line  70)
-* buffering, input/output:               I/O Functions.       (line 139)
-* buffering, interactive vs. noninteractive: I/O Functions.   (line 107)
+* buffering, input/output:               I/O Functions.       (line 137)
+* buffering, interactive vs. noninteractive: I/O Functions.   (line 106)
 * buffers, flushing:                     I/O Functions.       (line  29)
 * buffers, operators for:                GNU Regexp Operators.
                                                               (line  48)
@@ -29871,7 +29842,7 @@ Index
 * close() function:                      Getline/Variable/File.
                                                               (line  30)
 * close() function, return values:       Close Files And Pipes.
-                                                              (line 131)
+                                                              (line 130)
 * close() function, two-way pipes and:   Two-way I/O.         (line  77)
 * Close, Diane <1>:                      Contributors.        (line  21)
 * Close, Diane:                          Manual History.      (line  41)
@@ -29993,7 +29964,7 @@ Index
 * d.c., See dark corner:                 Conventions.         (line  38)
 * dark corner <1>:                       Glossary.            (line 197)
 * dark corner <2>:                       Truth Values.        (line  24)
-* dark corner <3>:                       Assignment Ops.      (line 148)
+* dark corner <3>:                       Assignment Ops.      (line 147)
 * dark corner:                           Conventions.         (line  38)
 * dark corner, ^, in FS:                 Regexp Field Splitting.
                                                               (line  59)
@@ -30001,19 +29972,19 @@ Index
                                                               (line  43)
 * dark corner, break statement:          Break Statement.     (line  51)
 * dark corner, close() function:         Close Files And Pipes.
-                                                              (line 131)
+                                                              (line 130)
 * dark corner, command-line arguments:   Assignment Options.  (line  43)
 * dark corner, continue statement:       Continue Statement.  (line  43)
 * dark corner, CONVFMT variable:         Conversion.          (line  40)
 * dark corner, escape sequences:         Other Arguments.     (line  31)
 * dark corner, escape sequences, for metacharacters: Escape Sequences.
-                                                              (line 136)
+                                                              (line 134)
 * dark corner, exit statement:           Exit Statement.      (line  30)
 * dark corner, field separators:         Field Splitting Summary.
-                                                              (line  47)
+                                                              (line  46)
 * dark corner, FILENAME variable <1>:    Auto-set.            (line  93)
 * dark corner, FILENAME variable:        Getline Notes.       (line  19)
-* dark corner, FNR/NR variables:         Auto-set.            (line 301)
+* dark corner, FNR/NR variables:         Auto-set.            (line 300)
 * dark corner, format-control characters: Control Letters.    (line  18)
 * dark corner, FS as null string:        Single Character Fields.
                                                               (line  20)
@@ -30026,11 +29997,11 @@ Index
 * dark corner, regexp constants:         Using Constant Regexps.
                                                               (line   6)
 * dark corner, regexp constants, /= operator and: Assignment Ops.
-                                                              (line 148)
+                                                              (line 147)
 * dark corner, regexp constants, as arguments to user-defined functions: Using 
Constant Regexps.
                                                               (line  43)
 * dark corner, split() function:         String Functions.    (line 361)
-* dark corner, strings, storing:         Records.             (line 196)
+* dark corner, strings, storing:         Records.             (line 195)
 * dark corner, value of ARGV[0]:         Auto-set.            (line  35)
 * data, fixed-width:                     Constant Size.       (line   9)
 * data-driven languages:                 Basic High Level.    (line  85)
@@ -30222,7 +30193,7 @@ Index
 * differences in awk and gawk, split() function: String Functions.
                                                               (line 349)
 * differences in awk and gawk, strings:  Scalar Constants.    (line  20)
-* differences in awk and gawk, strings, storing: Records.     (line 192)
+* differences in awk and gawk, strings, storing: Records.     (line 191)
 * differences in awk and gawk, strtonum() function (gawk): String Functions.
                                                               (line 404)
 * differences in awk and gawk, SYMTAB variable: Auto-set.     (line 260)
@@ -30309,7 +30280,7 @@ Index
 * ERRNO variable <2>:                    Auto-set.            (line  73)
 * ERRNO variable <3>:                    BEGINFILE/ENDFILE.   (line  26)
 * ERRNO variable <4>:                    Close Files And Pipes.
-                                                              (line 139)
+                                                              (line 138)
 * ERRNO variable:                        Getline.             (line  19)
 * error handling:                        Special FD.          (line  16)
 * error handling, ERRNO variable and:    Auto-set.            (line  73)
@@ -30319,7 +30290,7 @@ Index
 * escape sequences:                      Escape Sequences.    (line   6)
 * eval debugger command:                 Viewing And Changing Data.
                                                               (line  23)
-* evaluation order:                      Increment Ops.       (line  61)
+* evaluation order:                      Increment Ops.       (line  60)
 * evaluation order, concatenation:       Concatenation.       (line  42)
 * evaluation order, functions:           Calling Built-in.    (line  30)
 * examining fields:                      Fields.              (line   6)
@@ -30398,7 +30369,7 @@ Index
 * field separators, on command line:     Command Line Field Separator.
                                                               (line   6)
 * field separators, POSIX and <1>:       Field Splitting Summary.
-                                                              (line  41)
+                                                              (line  40)
 * field separators, POSIX and:           Fields.              (line   6)
 * field separators, regular expressions as <1>: Regexp Field Splitting.
                                                               (line   6)
@@ -30440,7 +30411,7 @@ Index
 * files, /inet/... (gawk):               TCP/IP Networking.   (line   6)
 * files, /inet4/... (gawk):              TCP/IP Networking.   (line   6)
 * files, /inet6/... (gawk):              TCP/IP Networking.   (line   6)
-* files, as single records:              Records.             (line 201)
+* files, as single records:              Records.             (line 200)
 * files, awk programs in:                Long.                (line   6)
 * files, awkprof.out:                    Profiling.           (line   6)
 * files, awkvars.out:                    Options.             (line 107)
@@ -30491,7 +30462,7 @@ Index
 * floating-point, numbers:               General Arithmetic.  (line   6)
 * FNR variable <1>:                      Auto-set.            (line 103)
 * FNR variable:                          Records.             (line   6)
-* FNR variable, changing:                Auto-set.            (line 301)
+* FNR variable, changing:                Auto-set.            (line 300)
 * for statement:                         For Statement.       (line   6)
 * for statement, in arrays:              Scanning an Array.   (line  20)
 * format specifiers, mixing regular with positional specifiers: Printf 
Ordering.
@@ -30507,7 +30478,7 @@ Index
 * forward slash (/), /= operator <1>:    Precedence.          (line  95)
 * forward slash (/), /= operator:        Assignment Ops.      (line 129)
 * forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 148)
+                                                              (line 147)
 * forward slash (/), patterns and:       Expression Patterns. (line  24)
 * FPAT variable <1>:                     User-modified.       (line  45)
 * FPAT variable:                         Splitting By Content.
@@ -30606,9 +30577,9 @@ Index
 * gawk, ERRNO variable in <2>:           Auto-set.            (line  73)
 * gawk, ERRNO variable in <3>:           BEGINFILE/ENDFILE.   (line  26)
 * gawk, ERRNO variable in <4>:           Close Files And Pipes.
-                                                              (line 139)
+                                                              (line 138)
 * gawk, ERRNO variable in:               Getline.             (line  19)
-* gawk, escape sequences:                Escape Sequences.    (line 125)
+* gawk, escape sequences:                Escape Sequences.    (line 124)
 * gawk, extensions, disabling:           Options.             (line 247)
 * gawk, features, adding:                Adding Code.         (line   6)
 * gawk, features, advanced:              Advanced Features.   (line   6)
@@ -30997,14 +30968,14 @@ Index
 * marked string extraction (internationalization): String Extraction.
                                                               (line   6)
 * marked strings, extracting:            String Extraction.   (line   6)
-* Marx, Groucho:                         Increment Ops.       (line  61)
+* Marx, Groucho:                         Increment Ops.       (line  60)
 * match() function:                      String Functions.    (line 206)
 * match() function, RSTART/RLENGTH variables: String Functions.
                                                               (line 223)
 * matching, expressions, See comparison expressions: Typing and Comparison.
                                                               (line   9)
 * matching, leftmost longest:            Multiple Line.       (line  26)
-* matching, null strings:                Gory Details.        (line 165)
+* matching, null strings:                Gory Details.        (line 164)
 * mawk program:                          Other Versions.      (line  44)
 * McPhee, Patrick:                       Contributors.        (line 100)
 * message object files:                  Explaining gettext.  (line  41)
@@ -31014,7 +30985,7 @@ Index
                                                               (line  47)
 * message object files, specifying directory of: Explaining gettext.
                                                               (line  53)
-* metacharacters, escape sequences for:  Escape Sequences.    (line 132)
+* metacharacters, escape sequences for:  Escape Sequences.    (line 130)
 * mktime() function (gawk):              Time Functions.      (line  25)
 * modifiers, in format specifiers:       Format Modifiers.    (line   6)
 * monetary information, localization:    Explaining gettext.  (line 103)
@@ -31043,8 +31014,8 @@ Index
 * newlines, as field separators:         Default Field Splitting.
                                                               (line   6)
 * newlines, as record separators:        Records.             (line  20)
-* newlines, in dynamic regexps:          Computed Regexps.    (line  59)
-* newlines, in regexp constants:         Computed Regexps.    (line  69)
+* newlines, in dynamic regexps:          Computed Regexps.    (line  58)
+* newlines, in regexp constants:         Computed Regexps.    (line  68)
 * newlines, printing:                    Print Examples.      (line  12)
 * newlines, separating statements in actions <1>: Statements. (line  10)
 * newlines, separating statements in actions: Action Overview.
@@ -31075,7 +31046,7 @@ Index
 * not Boolean-logic operator:            Boolean Ops.         (line   6)
 * NR variable <1>:                       Auto-set.            (line 125)
 * NR variable:                           Records.             (line   6)
-* NR variable, changing:                 Auto-set.            (line 301)
+* NR variable, changing:                 Auto-set.            (line 300)
 * null strings <1>:                      Basic Data Typing.   (line  26)
 * null strings <2>:                      Truth Values.        (line   6)
 * null strings <3>:                      Regexp Field Splitting.
@@ -31085,7 +31056,7 @@ Index
 * null strings, as array subscripts:     Uninitialized Subscripts.
                                                               (line  43)
 * null strings, converting numbers to strings: Conversion.    (line  21)
-* null strings, matching:                Gory Details.        (line 165)
+* null strings, matching:                Gory Details.        (line 164)
 * null strings, quoting and:             Quoting.             (line  62)
 * number sign (#), #! (executable scripts): Executable Scripts.
                                                               (line   6)
@@ -31144,7 +31115,7 @@ Index
 * operators, input/output:               Getline/File.        (line   6)
 * operators, logical, See Boolean expressions: Boolean Ops.   (line   6)
 * operators, precedence <1>:             Precedence.          (line   6)
-* operators, precedence:                 Increment Ops.       (line  61)
+* operators, precedence:                 Increment Ops.       (line  60)
 * operators, relational, See operators, comparison: Typing and Comparison.
                                                               (line   9)
 * operators, short-circuit:              Boolean Ops.         (line  57)
@@ -31233,16 +31204,16 @@ Index
 * plus sign (+), += operator:            Assignment Ops.      (line  82)
 * pointers to functions:                 Indirect Calls.      (line   6)
 * portability:                           Escape Sequences.    (line  94)
-* portability, #! (executable scripts):  Executable Scripts.  (line  34)
+* portability, #! (executable scripts):  Executable Scripts.  (line  33)
 * portability, ** operator and:          Arithmetic Ops.      (line  81)
 * portability, **= operator and:         Assignment Ops.      (line 142)
-* portability, ARGV variable:            Executable Scripts.  (line  43)
+* portability, ARGV variable:            Executable Scripts.  (line  42)
 * portability, backslash continuation and: Statements/Lines.  (line  30)
 * portability, backslash in escape sequences: Escape Sequences.
-                                                              (line 113)
+                                                              (line 112)
 * portability, close() function and:     Close Files And Pipes.
                                                               (line  81)
-* portability, data files as single record: Records.          (line 180)
+* portability, data files as single record: Records.          (line 179)
 * portability, deleting array elements:  Delete.              (line  56)
 * portability, example programs:         Library Functions.   (line  42)
 * portability, fflush() function and:    I/O Functions.       (line  29)
@@ -31255,7 +31226,7 @@ Index
 * portability, next statement in user-defined functions: Pass By 
Value/Reference.
                                                               (line  91)
 * portability, NF variable, decrementing: Changing Fields.    (line 115)
-* portability, operators:                Increment Ops.       (line  61)
+* portability, operators:                Increment Ops.       (line  60)
 * portability, operators, not in POSIX awk: Precedence.       (line  98)
 * portability, POSIXLY_CORRECT environment variable: Options. (line 353)
 * portability, substr() function:        String Functions.    (line 512)
@@ -31279,7 +31250,7 @@ Index
 * POSIX awk, < operator and:             Getline/File.        (line  26)
 * POSIX awk, arithmetic operators and:   Arithmetic Ops.      (line  36)
 * POSIX awk, backslashes in string constants: Escape Sequences.
-                                                              (line 113)
+                                                              (line 112)
 * POSIX awk, BEGIN/END patterns:         I/O And BEGIN/END.   (line  16)
 * POSIX awk, bracket expressions and:    Bracket Expressions. (line  24)
 * POSIX awk, bracket expressions and, character classes: Bracket Expressions.
@@ -31290,7 +31261,7 @@ Index
 * POSIX awk, CONVFMT variable and:       User-modified.       (line  28)
 * POSIX awk, date utility and:           Time Functions.      (line 262)
 * POSIX awk, field separators and <1>:   Field Splitting Summary.
-                                                              (line  41)
+                                                              (line  40)
 * POSIX awk, field separators and:       Fields.              (line   6)
 * POSIX awk, FS variable and:            User-modified.       (line  66)
 * POSIX awk, function keyword in:        Definition Syntax.   (line  83)
@@ -31315,7 +31286,7 @@ Index
 * PREC variable <1>:                     Setting Precision.   (line   6)
 * PREC variable:                         User-modified.       (line 134)
 * precedence <1>:                        Precedence.          (line   6)
-* precedence:                            Increment Ops.       (line  61)
+* precedence:                            Increment Ops.       (line  60)
 * precedence, regexp operators:          Regexp Operators.    (line 156)
 * print debugger command:                Viewing And Changing Data.
                                                               (line  36)
@@ -31433,7 +31404,7 @@ Index
 * records, printing:                     Print.               (line  22)
 * records, splitting input into:         Records.             (line   6)
 * records, terminating:                  Records.             (line 117)
-* records, treating files as:            Records.             (line 201)
+* records, treating files as:            Records.             (line 200)
 * recursive functions:                   Definition Syntax.   (line  73)
 * redirection of input:                  Getline/File.        (line   6)
 * redirection of output:                 Redirection.         (line   6)
@@ -31443,7 +31414,7 @@ Index
                                                               (line 103)
 * regexp constants <2>:                  Regexp Constants.    (line   6)
 * regexp constants:                      Regexp Usage.        (line  57)
-* regexp constants, /=.../, /= operator and: Assignment Ops.  (line 148)
+* regexp constants, /=.../, /= operator and: Assignment Ops.  (line 147)
 * regexp constants, as patterns:         Expression Patterns. (line  36)
 * regexp constants, in gawk:             Using Constant Regexps.
                                                               (line  28)
@@ -31465,7 +31436,7 @@ Index
                                                               (line  57)
 * regular expressions, dynamic:          Computed Regexps.    (line   6)
 * regular expressions, dynamic, with embedded newlines: Computed Regexps.
-                                                              (line  59)
+                                                              (line  58)
 * regular expressions, gawk, command-line options: GNU Regexp Operators.
                                                               (line  70)
 * regular expressions, interval expressions and: Options.     (line 272)
@@ -31488,7 +31459,7 @@ Index
                                                               (line  54)
 * return statement, user-defined functions: Return Statement. (line   6)
 * return values, close() function:       Close Files And Pipes.
-                                                              (line 131)
+                                                              (line 130)
 * rev() user-defined function:           Function Example.    (line  52)
 * rewind() user-defined function:        Rewind Function.     (line  16)
 * right angle bracket (>), > operator <1>: Precedence.        (line  65)
@@ -31566,7 +31537,7 @@ Index
 * sed utility <1>:                       Glossary.            (line  12)
 * sed utility <2>:                       Simple Sed.          (line   6)
 * sed utility:                           Field Splitting Summary.
-                                                              (line  47)
+                                                              (line  46)
 * semicolon (;):                         Statements/Lines.    (line  91)
 * semicolon (;), AWKPATH variable and:   PC Using.            (line  11)
 * semicolon (;), separating statements in actions <1>: Statements.
@@ -31584,7 +31555,7 @@ Index
 * separators, subscript:                 User-modified.       (line 156)
 * set debugger command:                  Viewing And Changing Data.
                                                               (line  59)
-* shells, piping commands into:          Redirection.         (line 143)
+* shells, piping commands into:          Redirection.         (line 142)
 * shells, quoting:                       Using Shell Variables.
                                                               (line  12)
 * shells, quoting, rules for:            Quoting.             (line  18)
@@ -31608,6 +31579,36 @@ Index
 * side effects, FILENAME variable:       Getline Notes.       (line  19)
 * side effects, function calls:          Function Calls.      (line  54)
 * side effects, statements:              Action Overview.     (line  32)
+* sidebar, A Constant's Base Does Not Affect Its Value: Nondecimal-numbers.
+                                                              (line  64)
+* sidebar, Backslash Before Regular Characters: Escape Sequences.
+                                                              (line 110)
+* sidebar, Changing FS Does Not Affect the Fields: Field Splitting Summary.
+                                                              (line  38)
+* sidebar, Changing NR and FNR:          Auto-set.            (line 298)
+* sidebar, Controlling Output Buffering with system(): I/O Functions.
+                                                              (line 135)
+* sidebar, Escape Sequences for Metacharacters: Escape Sequences.
+                                                              (line 128)
+* sidebar, FS and IGNORECASE:            Field Splitting Summary.
+                                                              (line  64)
+* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
+                                                              (line 104)
+* sidebar, Matching the Null String:     Gory Details.        (line 162)
+* sidebar, Operator Evaluation Order:    Increment Ops.       (line  58)
+* sidebar, Piping into sh:               Redirection.         (line 140)
+* sidebar, Portability Issues with #!:   Executable Scripts.  (line  31)
+* sidebar, Recipe For A Programming Language: History.        (line   6)
+* sidebar, RS = "\0" Is Not Portable:    Records.             (line 177)
+* sidebar, So Why Does gawk have BEGINFILE and ENDFILE?: Filetrans Function.
+                                                              (line  83)
+* sidebar, Syntactic Ambiguities Between /= and Regular Expressions: 
Assignment Ops.
+                                                              (line 145)
+* sidebar, Understanding $0:             Changing Fields.     (line 134)
+* sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed 
Regexps.
+                                                              (line  56)
+* sidebar, Using close()'s Return Value: Close Files And Pipes.
+                                                              (line 128)
 * SIGHUP signal:                         Profiling.           (line 203)
 * SIGINT signal (MS-Windows):            Profiling.           (line 206)
 * signals, HUP/SIGHUP:                   Profiling.           (line 203)
@@ -31684,7 +31685,7 @@ Index
                                                               (line  76)
 * stream editors <1>:                    Simple Sed.          (line   6)
 * stream editors:                        Field Splitting Summary.
-                                                              (line  47)
+                                                              (line  46)
 * strftime() function (gawk):            Time Functions.      (line  48)
 * string constants:                      Scalar Constants.    (line  15)
 * string constants, vs. regexp constants: Computed Regexps.   (line  38)
@@ -31728,7 +31729,7 @@ Index
 * switch statement:                      Switch Statement.    (line   6)
 * SYMTAB array:                          Auto-set.            (line 260)
 * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 148)
+                                                              (line 147)
 * system() function:                     I/O Functions.       (line  72)
 * systime() function (gawk):             Time Functions.      (line  65)
 * t debugger command (alias for tbreak): Breakpoint Control.  (line  90)
@@ -31789,7 +31790,7 @@ Index
                                                               (line  37)
 * troubleshooting, awk uses FS not IFS:  Field Separators.    (line  29)
 * troubleshooting, backslash before nonspecial character: Escape Sequences.
-                                                              (line 113)
+                                                              (line 112)
 * troubleshooting, division:             Arithmetic Ops.      (line  44)
 * troubleshooting, fatal errors, field widths, specifying: Constant Size.
                                                               (line  22)
@@ -31842,9 +31843,9 @@ Index
 * uniq.awk program:                      Uniq Program.        (line  65)
 * Unix:                                  Glossary.            (line 624)
 * Unix awk, backslashes in escape sequences: Escape Sequences.
-                                                              (line 125)
+                                                              (line 124)
 * Unix awk, close() function and:        Close Files And Pipes.
-                                                              (line 131)
+                                                              (line 130)
 * Unix awk, password files, field separators and: Command Line Field Separator.
                                                               (line  72)
 * Unix, awk scripts and:                 Executable Scripts.  (line   6)
@@ -31981,513 +31982,513 @@ Node: Preface44646
 Ref: Preface-Footnote-147699
 Ref: Preface-Footnote-247795
 Node: History48027
-Node: Names50415
-Ref: Names-Footnote-151892
-Node: This Manual51964
-Ref: This Manual-Footnote-157870
-Node: Conventions57970
-Node: Manual History60122
-Ref: Manual History-Footnote-163523
-Ref: Manual History-Footnote-263564
-Node: How To Contribute63638
-Node: Acknowledgments64782
-Node: Getting Started68992
-Node: Running gawk71371
-Node: One-shot72557
-Node: Read Terminal73782
-Ref: Read Terminal-Footnote-175432
-Ref: Read Terminal-Footnote-275708
-Node: Long75879
-Node: Executable Scripts77255
-Ref: Executable Scripts-Footnote-179124
-Ref: Executable Scripts-Footnote-279226
-Node: Comments79773
-Node: Quoting82240
-Node: DOS Quoting86863
-Node: Sample Data Files87538
-Node: Very Simple90570
-Node: Two Rules95169
-Node: More Complex97316
-Ref: More Complex-Footnote-1100246
-Node: Statements/Lines100331
-Ref: Statements/Lines-Footnote-1104793
-Node: Other Features105058
-Node: When105986
-Node: Invoking Gawk108133
-Node: Command Line109594
-Node: Options110377
-Ref: Options-Footnote-1125769
-Node: Other Arguments125794
-Node: Naming Standard Input128452
-Node: Environment Variables129546
-Node: AWKPATH Variable130104
-Ref: AWKPATH Variable-Footnote-1132862
-Node: AWKLIBPATH Variable133122
-Node: Other Environment Variables133840
-Node: Exit Status136335
-Node: Include Files137010
-Node: Loading Shared Libraries140579
-Node: Obsolete141943
-Node: Undocumented142640
-Node: Regexp142883
-Node: Regexp Usage144272
-Node: Escape Sequences146298
-Node: Regexp Operators152061
-Ref: Regexp Operators-Footnote-1159441
-Ref: Regexp Operators-Footnote-2159588
-Node: Bracket Expressions159686
-Ref: table-char-classes161576
-Node: GNU Regexp Operators164099
-Node: Case-sensitivity167822
-Ref: Case-sensitivity-Footnote-1170790
-Ref: Case-sensitivity-Footnote-2171025
-Node: Leftmost Longest171133
-Node: Computed Regexps172334
-Node: Reading Files175744
-Node: Records177747
-Ref: Records-Footnote-1186671
-Node: Fields186708
-Ref: Fields-Footnote-1189741
-Node: Nonconstant Fields189827
-Node: Changing Fields192029
-Node: Field Separators198010
-Node: Default Field Splitting200639
-Node: Regexp Field Splitting201756
-Node: Single Character Fields205098
-Node: Command Line Field Separator206157
-Node: Field Splitting Summary209598
-Ref: Field Splitting Summary-Footnote-1212790
-Node: Constant Size212891
-Node: Splitting By Content217475
-Ref: Splitting By Content-Footnote-1221201
-Node: Multiple Line221241
-Ref: Multiple Line-Footnote-1227088
-Node: Getline227267
-Node: Plain Getline229483
-Node: Getline/Variable231572
-Node: Getline/File232713
-Node: Getline/Variable/File234035
-Ref: Getline/Variable/File-Footnote-1235634
-Node: Getline/Pipe235721
-Node: Getline/Variable/Pipe238407
-Node: Getline/Coprocess239514
-Node: Getline/Variable/Coprocess240757
-Node: Getline Notes241471
-Node: Getline Summary244258
-Ref: table-getline-variants244666
-Node: Read Timeout245524
-Ref: Read Timeout-Footnote-1249265
-Node: Command line directories249322
-Node: Printing249952
-Node: Print251583
-Node: Print Examples252920
-Node: Output Separators255704
-Node: OFMT257464
-Node: Printf258822
-Node: Basic Printf259728
-Node: Control Letters261267
-Node: Format Modifiers265079
-Node: Printf Examples271088
-Node: Redirection273803
-Node: Special Files280787
-Node: Special FD281320
-Ref: Special FD-Footnote-1284945
-Node: Special Network285019
-Node: Special Caveats285869
-Node: Close Files And Pipes286665
-Ref: Close Files And Pipes-Footnote-1293688
-Ref: Close Files And Pipes-Footnote-2293836
-Node: Expressions293986
-Node: Values295118
-Node: Constants295794
-Node: Scalar Constants296474
-Ref: Scalar Constants-Footnote-1297333
-Node: Nondecimal-numbers297515
-Node: Regexp Constants300574
-Node: Using Constant Regexps301049
-Node: Variables304104
-Node: Using Variables304759
-Node: Assignment Options306483
-Node: Conversion308355
-Ref: table-locale-affects313846
-Ref: Conversion-Footnote-1314470
-Node: All Operators314579
-Node: Arithmetic Ops315209
-Node: Concatenation317714
-Ref: Concatenation-Footnote-1320507
-Node: Assignment Ops320627
-Ref: table-assign-ops325615
-Node: Increment Ops327028
-Node: Truth Values and Conditions330498
-Node: Truth Values331581
-Node: Typing and Comparison332630
-Node: Variable Typing333419
-Ref: Variable Typing-Footnote-1337316
-Node: Comparison Operators337438
-Ref: table-relational-ops337848
-Node: POSIX String Comparison341397
-Ref: POSIX String Comparison-Footnote-1342353
-Node: Boolean Ops342491
-Ref: Boolean Ops-Footnote-1346569
-Node: Conditional Exp346660
-Node: Function Calls348392
-Node: Precedence351986
-Node: Locales355655
-Node: Patterns and Actions356744
-Node: Pattern Overview357798
-Node: Regexp Patterns359467
-Node: Expression Patterns360010
-Node: Ranges363695
-Node: BEGIN/END366661
-Node: Using BEGIN/END367423
-Ref: Using BEGIN/END-Footnote-1370154
-Node: I/O And BEGIN/END370260
-Node: BEGINFILE/ENDFILE372542
-Node: Empty375446
-Node: Using Shell Variables375762
-Node: Action Overview378047
-Node: Statements380404
-Node: If Statement382258
-Node: While Statement383757
-Node: Do Statement385801
-Node: For Statement386957
-Node: Switch Statement390109
-Node: Break Statement392206
-Node: Continue Statement394196
-Node: Next Statement395989
-Node: Nextfile Statement398379
-Node: Exit Statement401022
-Node: Built-in Variables403438
-Node: User-modified404533
-Ref: User-modified-Footnote-1412888
-Node: Auto-set412950
-Ref: Auto-set-Footnote-1425530
-Ref: Auto-set-Footnote-2425735
-Node: ARGC and ARGV425791
-Node: Arrays429642
-Node: Array Basics431147
-Node: Array Intro431973
-Node: Reference to Elements436291
-Node: Assigning Elements438561
-Node: Array Example439052
-Node: Scanning an Array440784
-Node: Controlling Scanning443098
-Ref: Controlling Scanning-Footnote-1448021
-Node: Delete448337
-Ref: Delete-Footnote-1451102
-Node: Numeric Array Subscripts451159
-Node: Uninitialized Subscripts453342
-Node: Multi-dimensional454970
-Node: Multi-scanning458064
-Node: Arrays of Arrays459655
-Node: Functions464296
-Node: Built-in465115
-Node: Calling Built-in466193
-Node: Numeric Functions468181
-Ref: Numeric Functions-Footnote-1472013
-Ref: Numeric Functions-Footnote-2472370
-Ref: Numeric Functions-Footnote-3472418
-Node: String Functions472687
-Ref: String Functions-Footnote-1496184
-Ref: String Functions-Footnote-2496313
-Ref: String Functions-Footnote-3496561
-Node: Gory Details496648
-Ref: table-sub-escapes498327
-Ref: table-sub-posix-92499681
-Ref: table-sub-proposed501032
-Ref: table-posix-sub502386
-Ref: table-gensub-escapes503931
-Ref: Gory Details-Footnote-1505138
-Ref: Gory Details-Footnote-2505189
-Node: I/O Functions505340
-Ref: I/O Functions-Footnote-1512445
-Node: Time Functions512592
-Ref: Time Functions-Footnote-1523525
-Ref: Time Functions-Footnote-2523593
-Ref: Time Functions-Footnote-3523751
-Ref: Time Functions-Footnote-4523862
-Ref: Time Functions-Footnote-5523974
-Ref: Time Functions-Footnote-6524201
-Node: Bitwise Functions524467
-Ref: table-bitwise-ops525025
-Ref: Bitwise Functions-Footnote-1529246
-Node: Type Functions529430
-Node: I18N Functions529900
-Node: User-defined531527
-Node: Definition Syntax532331
-Ref: Definition Syntax-Footnote-1537241
-Node: Function Example537310
-Node: Function Caveats539904
-Node: Calling A Function540325
-Node: Variable Scope541440
-Node: Pass By Value/Reference544403
-Node: Return Statement547911
-Node: Dynamic Typing550892
-Node: Indirect Calls551823
-Node: Library Functions561508
-Ref: Library Functions-Footnote-1565021
-Ref: Library Functions-Footnote-2565164
-Node: Library Names565335
-Ref: Library Names-Footnote-1568806
-Ref: Library Names-Footnote-2569026
-Node: General Functions569112
-Node: Strtonum Function570065
-Node: Assert Function572995
-Node: Round Function576321
-Node: Cliff Random Function577864
-Node: Ordinal Functions578880
-Ref: Ordinal Functions-Footnote-1581950
-Ref: Ordinal Functions-Footnote-2582202
-Node: Join Function582411
-Ref: Join Function-Footnote-1584182
-Node: Getlocaltime Function584382
-Node: Data File Management588097
-Node: Filetrans Function588729
-Node: Rewind Function592868
-Node: File Checking594255
-Node: Empty Files595349
-Node: Ignoring Assigns597579
-Node: Getopt Function599132
-Ref: Getopt Function-Footnote-1610436
-Node: Passwd Functions610639
-Ref: Passwd Functions-Footnote-1619614
-Node: Group Functions619702
-Node: Walking Arrays627786
-Node: Sample Programs629923
-Node: Running Examples630597
-Node: Clones631325
-Node: Cut Program632549
-Node: Egrep Program642394
-Ref: Egrep Program-Footnote-1650167
-Node: Id Program650277
-Node: Split Program653893
-Ref: Split Program-Footnote-1657412
-Node: Tee Program657540
-Node: Uniq Program660343
-Node: Wc Program667772
-Ref: Wc Program-Footnote-1672038
-Ref: Wc Program-Footnote-2672238
-Node: Miscellaneous Programs672330
-Node: Dupword Program673518
-Node: Alarm Program675549
-Node: Translate Program680298
-Ref: Translate Program-Footnote-1684685
-Ref: Translate Program-Footnote-2684913
-Node: Labels Program685047
-Ref: Labels Program-Footnote-1688418
-Node: Word Sorting688502
-Node: History Sorting692386
-Node: Extract Program694225
-Ref: Extract Program-Footnote-1701726
-Node: Simple Sed701854
-Node: Igawk Program704916
-Ref: Igawk Program-Footnote-1720073
-Ref: Igawk Program-Footnote-2720274
-Node: Anagram Program720412
-Node: Signature Program723480
-Node: Advanced Features724580
-Node: Nondecimal Data726462
-Node: Array Sorting728045
-Node: Controlling Array Traversal728742
-Node: Array Sorting Functions736980
-Ref: Array Sorting Functions-Footnote-1740654
-Ref: Array Sorting Functions-Footnote-2740747
-Node: Two-way I/O740941
-Ref: Two-way I/O-Footnote-1746373
-Node: TCP/IP Networking746443
-Node: Profiling749287
-Node: Internationalization756742
-Node: I18N and L10N758167
-Node: Explaining gettext758853
-Ref: Explaining gettext-Footnote-1763919
-Ref: Explaining gettext-Footnote-2764103
-Node: Programmer i18n764268
-Node: Translator i18n768468
-Node: String Extraction769261
-Ref: String Extraction-Footnote-1770222
-Node: Printf Ordering770308
-Ref: Printf Ordering-Footnote-1773092
-Node: I18N Portability773156
-Ref: I18N Portability-Footnote-1775605
-Node: I18N Example775668
-Ref: I18N Example-Footnote-1778303
-Node: Gawk I18N778375
-Node: Debugger778996
-Node: Debugging779967
-Node: Debugging Concepts780400
-Node: Debugging Terms782256
-Node: Awk Debugging784853
-Node: Sample Debugging Session785745
-Node: Debugger Invocation786265
-Node: Finding The Bug787597
-Node: List of Debugger Commands794085
-Node: Breakpoint Control795419
-Node: Debugger Execution Control799083
-Node: Viewing And Changing Data802443
-Node: Execution Stack805799
-Node: Debugger Info807266
-Node: Miscellaneous Debugger Commands811248
-Node: Readline Support816424
-Node: Limitations817255
-Node: Arbitrary Precision Arithmetic819507
-Ref: Arbitrary Precision Arithmetic-Footnote-1821158
-Node: General Arithmetic821306
-Node: Floating Point Issues823026
-Node: String Conversion Precision823907
-Ref: String Conversion Precision-Footnote-1825613
-Node: Unexpected Results825722
-Node: POSIX Floating Point Problems827875
-Ref: POSIX Floating Point Problems-Footnote-1831700
-Node: Integer Programming831738
-Node: Floating-point Programming833491
-Ref: Floating-point Programming-Footnote-1839800
-Node: Floating-point Representation840064
-Node: Floating-point Context841229
-Ref: table-ieee-formats842071
-Node: Rounding Mode843455
-Ref: table-rounding-modes843934
-Ref: Rounding Mode-Footnote-1846938
-Node: Gawk and MPFR847119
-Node: Arbitrary Precision Floats848361
-Ref: Arbitrary Precision Floats-Footnote-1850790
-Node: Setting Precision851101
-Node: Setting Rounding Mode853834
-Ref: table-gawk-rounding-modes854238
-Node: Floating-point Constants855418
-Node: Changing Precision856842
-Ref: Changing Precision-Footnote-1858242
-Node: Exact Arithmetic858416
-Node: Arbitrary Precision Integers861524
-Ref: Arbitrary Precision Integers-Footnote-1864524
-Node: Dynamic Extensions864671
-Node: Extension Intro866048
-Node: Plugin License867256
-Node: Extension Mechanism Outline867941
-Ref: load-extension868358
-Ref: load-new-function869836
-Ref: call-new-function870831
-Node: Extension API Description872839
-Node: Extension API Functions Introduction874178
-Node: General Data Types878956
-Ref: General Data Types-Footnote-1884558
-Node: Requesting Values884857
-Ref: table-value-types-returned885588
-Node: Constructor Functions886542
-Node: Registration Functions889538
-Node: Extension Functions890223
-Node: Exit Callback Functions892397
-Node: Extension Version String893640
-Node: Input Parsers894290
-Node: Output Wrappers904007
-Node: Two-way processors908423
-Node: Printing Messages910553
-Ref: Printing Messages-Footnote-1911630
-Node: Updating `ERRNO'911782
-Node: Accessing Parameters912521
-Node: Symbol Table Access913751
-Node: Symbol table by name914263
-Node: Symbol table by cookie915836
-Ref: Symbol table by cookie-Footnote-1919965
-Node: Cached values920028
-Ref: Cached values-Footnote-1923471
-Node: Array Manipulation923562
-Ref: Array Manipulation-Footnote-1924660
-Node: Array Data Types924699
-Ref: Array Data Types-Footnote-1927402
-Node: Array Functions927494
-Node: Flattening Arrays931260
-Node: Creating Arrays938099
-Node: Extension API Variables942894
-Node: Extension Versioning943530
-Node: Extension API Informational Variables945431
-Node: Extension API Boilerplate946517
-Node: Finding Extensions950348
-Node: Extension Example950895
-Node: Internal File Description951633
-Node: Internal File Ops955321
-Ref: Internal File Ops-Footnote-1966768
-Node: Using Internal File Ops966908
-Ref: Using Internal File Ops-Footnote-1969261
-Node: Extension Samples969527
-Node: Extension Sample File Functions971051
-Node: Extension Sample Fnmatch979524
-Node: Extension Sample Fork981250
-Node: Extension Sample Inplace982468
-Node: Extension Sample Ord984246
-Node: Extension Sample Readdir985025
-Node: Extension Sample Revout986529
-Node: Extension Sample Rev2way987122
-Node: Extension Sample Read write array987812
-Node: Extension Sample Readfile989695
-Node: Extension Sample API Tests990452
-Node: Extension Sample Time990977
-Node: gawkextlib992284
-Node: Language History994665
-Node: V7/SVR3.1996187
-Node: SVR4998508
-Node: POSIX999950
-Node: BTL1001336
-Node: POSIX/GNU1002070
-Node: Common Extensions1007605
-Node: Ranges and Locales1008760
-Ref: Ranges and Locales-Footnote-11013378
-Ref: Ranges and Locales-Footnote-21013405
-Ref: Ranges and Locales-Footnote-31013665
-Node: Contributors1013886
-Node: Installation1018690
-Node: Gawk Distribution1019584
-Node: Getting1020068
-Node: Extracting1020894
-Node: Distribution contents1022586
-Node: Unix Installation1027847
-Node: Quick Installation1028464
-Node: Additional Configuration Options1030426
-Node: Configuration Philosophy1031903
-Node: Non-Unix Installation1034245
-Node: PC Installation1034703
-Node: PC Binary Installation1036002
-Node: PC Compiling1037850
-Node: PC Testing1040794
-Node: PC Using1041970
-Node: Cygwin1046155
-Node: MSYS1047155
-Node: VMS Installation1047669
-Node: VMS Compilation1048272
-Ref: VMS Compilation-Footnote-11049279
-Node: VMS Installation Details1049337
-Node: VMS Running1050972
-Node: VMS Old Gawk1052579
-Node: Bugs1053053
-Node: Other Versions1056905
-Node: Notes1062506
-Node: Compatibility Mode1063306
-Node: Additions1064089
-Node: Accessing The Source1065016
-Node: Adding Code1066456
-Node: New Ports1072501
-Node: Derived Files1076636
-Ref: Derived Files-Footnote-11081957
-Ref: Derived Files-Footnote-21081991
-Ref: Derived Files-Footnote-31082591
-Node: Future Extensions1082689
-Node: Implementation Limitations1083270
-Node: Extension Design1084522
-Node: Old Extension Problems1085671
-Ref: Old Extension Problems-Footnote-11087179
-Node: Extension New Mechanism Goals1087236
-Ref: Extension New Mechanism Goals-Footnote-11090595
-Node: Extension Other Design Decisions1090781
-Node: Extension Future Growth1092887
-Node: Old Extension Mechansim1093708
-Node: Basic Concepts1095447
-Node: Basic High Level1096128
-Ref: figure-general-flow1096399
-Ref: figure-process-flow1096998
-Ref: Basic High Level-Footnote-11100227
-Node: Basic Data Typing1100412
-Node: Glossary1103767
-Node: Copying1129238
-Node: GNU Free Documentation License1166795
-Node: Index1191932
+Node: Names50401
+Ref: Names-Footnote-151878
+Node: This Manual51950
+Ref: This Manual-Footnote-157815
+Node: Conventions57915
+Node: Manual History60067
+Ref: Manual History-Footnote-163468
+Ref: Manual History-Footnote-263509
+Node: How To Contribute63583
+Node: Acknowledgments64727
+Node: Getting Started68937
+Node: Running gawk71316
+Node: One-shot72502
+Node: Read Terminal73727
+Ref: Read Terminal-Footnote-175377
+Ref: Read Terminal-Footnote-275653
+Node: Long75824
+Node: Executable Scripts77200
+Ref: Executable Scripts-Footnote-179033
+Ref: Executable Scripts-Footnote-279135
+Node: Comments79682
+Node: Quoting82149
+Node: DOS Quoting86772
+Node: Sample Data Files87447
+Node: Very Simple90479
+Node: Two Rules95078
+Node: More Complex97225
+Ref: More Complex-Footnote-1100155
+Node: Statements/Lines100240
+Ref: Statements/Lines-Footnote-1104702
+Node: Other Features104967
+Node: When105895
+Node: Invoking Gawk108042
+Node: Command Line109503
+Node: Options110286
+Ref: Options-Footnote-1125678
+Node: Other Arguments125703
+Node: Naming Standard Input128361
+Node: Environment Variables129455
+Node: AWKPATH Variable130013
+Ref: AWKPATH Variable-Footnote-1132771
+Node: AWKLIBPATH Variable133031
+Node: Other Environment Variables133749
+Node: Exit Status136244
+Node: Include Files136919
+Node: Loading Shared Libraries140488
+Node: Obsolete141852
+Node: Undocumented142549
+Node: Regexp142792
+Node: Regexp Usage144181
+Node: Escape Sequences146207
+Node: Regexp Operators151876
+Ref: Regexp Operators-Footnote-1159256
+Ref: Regexp Operators-Footnote-2159403
+Node: Bracket Expressions159501
+Ref: table-char-classes161391
+Node: GNU Regexp Operators163914
+Node: Case-sensitivity167637
+Ref: Case-sensitivity-Footnote-1170605
+Ref: Case-sensitivity-Footnote-2170840
+Node: Leftmost Longest170948
+Node: Computed Regexps172149
+Node: Reading Files175486
+Node: Records177489
+Ref: Records-Footnote-1186378
+Node: Fields186415
+Ref: Fields-Footnote-1189448
+Node: Nonconstant Fields189534
+Node: Changing Fields191736
+Node: Field Separators197695
+Node: Default Field Splitting200324
+Node: Regexp Field Splitting201441
+Node: Single Character Fields204783
+Node: Command Line Field Separator205842
+Node: Field Splitting Summary209283
+Ref: Field Splitting Summary-Footnote-1212394
+Node: Constant Size212495
+Node: Splitting By Content217079
+Ref: Splitting By Content-Footnote-1220805
+Node: Multiple Line220845
+Ref: Multiple Line-Footnote-1226692
+Node: Getline226871
+Node: Plain Getline229087
+Node: Getline/Variable231176
+Node: Getline/File232317
+Node: Getline/Variable/File233639
+Ref: Getline/Variable/File-Footnote-1235238
+Node: Getline/Pipe235325
+Node: Getline/Variable/Pipe238011
+Node: Getline/Coprocess239118
+Node: Getline/Variable/Coprocess240361
+Node: Getline Notes241075
+Node: Getline Summary243862
+Ref: table-getline-variants244270
+Node: Read Timeout245128
+Ref: Read Timeout-Footnote-1248869
+Node: Command line directories248926
+Node: Printing249556
+Node: Print251187
+Node: Print Examples252524
+Node: Output Separators255308
+Node: OFMT257068
+Node: Printf258426
+Node: Basic Printf259332
+Node: Control Letters260871
+Node: Format Modifiers264683
+Node: Printf Examples270692
+Node: Redirection273407
+Node: Special Files280372
+Node: Special FD280905
+Ref: Special FD-Footnote-1284530
+Node: Special Network284604
+Node: Special Caveats285454
+Node: Close Files And Pipes286250
+Ref: Close Files And Pipes-Footnote-1293233
+Ref: Close Files And Pipes-Footnote-2293381
+Node: Expressions293531
+Node: Values294663
+Node: Constants295339
+Node: Scalar Constants296019
+Ref: Scalar Constants-Footnote-1296878
+Node: Nondecimal-numbers297060
+Node: Regexp Constants300060
+Node: Using Constant Regexps300535
+Node: Variables303590
+Node: Using Variables304245
+Node: Assignment Options305969
+Node: Conversion307841
+Ref: table-locale-affects313332
+Ref: Conversion-Footnote-1313956
+Node: All Operators314065
+Node: Arithmetic Ops314695
+Node: Concatenation317200
+Ref: Concatenation-Footnote-1319993
+Node: Assignment Ops320113
+Ref: table-assign-ops325101
+Node: Increment Ops326432
+Node: Truth Values and Conditions329867
+Node: Truth Values330950
+Node: Typing and Comparison331999
+Node: Variable Typing332788
+Ref: Variable Typing-Footnote-1336685
+Node: Comparison Operators336807
+Ref: table-relational-ops337217
+Node: POSIX String Comparison340766
+Ref: POSIX String Comparison-Footnote-1341722
+Node: Boolean Ops341860
+Ref: Boolean Ops-Footnote-1345938
+Node: Conditional Exp346029
+Node: Function Calls347761
+Node: Precedence351355
+Node: Locales355024
+Node: Patterns and Actions356113
+Node: Pattern Overview357167
+Node: Regexp Patterns358836
+Node: Expression Patterns359379
+Node: Ranges363064
+Node: BEGIN/END366030
+Node: Using BEGIN/END366792
+Ref: Using BEGIN/END-Footnote-1369523
+Node: I/O And BEGIN/END369629
+Node: BEGINFILE/ENDFILE371911
+Node: Empty374815
+Node: Using Shell Variables375131
+Node: Action Overview377416
+Node: Statements379773
+Node: If Statement381627
+Node: While Statement383126
+Node: Do Statement385170
+Node: For Statement386326
+Node: Switch Statement389478
+Node: Break Statement391575
+Node: Continue Statement393565
+Node: Next Statement395358
+Node: Nextfile Statement397748
+Node: Exit Statement400391
+Node: Built-in Variables402807
+Node: User-modified403902
+Ref: User-modified-Footnote-1412257
+Node: Auto-set412319
+Ref: Auto-set-Footnote-1424869
+Ref: Auto-set-Footnote-2425074
+Node: ARGC and ARGV425130
+Node: Arrays428981
+Node: Array Basics430486
+Node: Array Intro431312
+Node: Reference to Elements435630
+Node: Assigning Elements437900
+Node: Array Example438391
+Node: Scanning an Array440123
+Node: Controlling Scanning442437
+Ref: Controlling Scanning-Footnote-1447360
+Node: Delete447676
+Ref: Delete-Footnote-1450441
+Node: Numeric Array Subscripts450498
+Node: Uninitialized Subscripts452681
+Node: Multi-dimensional454309
+Node: Multi-scanning457403
+Node: Arrays of Arrays458994
+Node: Functions463635
+Node: Built-in464454
+Node: Calling Built-in465532
+Node: Numeric Functions467520
+Ref: Numeric Functions-Footnote-1471352
+Ref: Numeric Functions-Footnote-2471709
+Ref: Numeric Functions-Footnote-3471757
+Node: String Functions472026
+Ref: String Functions-Footnote-1495523
+Ref: String Functions-Footnote-2495652
+Ref: String Functions-Footnote-3495900
+Node: Gory Details495987
+Ref: table-sub-escapes497666
+Ref: table-sub-posix-92499020
+Ref: table-sub-proposed500371
+Ref: table-posix-sub501725
+Ref: table-gensub-escapes503270
+Ref: Gory Details-Footnote-1504446
+Ref: Gory Details-Footnote-2504497
+Node: I/O Functions504648
+Ref: I/O Functions-Footnote-1511633
+Node: Time Functions511780
+Ref: Time Functions-Footnote-1522713
+Ref: Time Functions-Footnote-2522781
+Ref: Time Functions-Footnote-3522939
+Ref: Time Functions-Footnote-4523050
+Ref: Time Functions-Footnote-5523162
+Ref: Time Functions-Footnote-6523389
+Node: Bitwise Functions523655
+Ref: table-bitwise-ops524213
+Ref: Bitwise Functions-Footnote-1528434
+Node: Type Functions528618
+Node: I18N Functions529088
+Node: User-defined530715
+Node: Definition Syntax531519
+Ref: Definition Syntax-Footnote-1536429
+Node: Function Example536498
+Node: Function Caveats539092
+Node: Calling A Function539513
+Node: Variable Scope540628
+Node: Pass By Value/Reference543591
+Node: Return Statement547099
+Node: Dynamic Typing550080
+Node: Indirect Calls551011
+Node: Library Functions560696
+Ref: Library Functions-Footnote-1564209
+Ref: Library Functions-Footnote-2564352
+Node: Library Names564523
+Ref: Library Names-Footnote-1567994
+Ref: Library Names-Footnote-2568214
+Node: General Functions568300
+Node: Strtonum Function569253
+Node: Assert Function572183
+Node: Round Function575509
+Node: Cliff Random Function577052
+Node: Ordinal Functions578068
+Ref: Ordinal Functions-Footnote-1581138
+Ref: Ordinal Functions-Footnote-2581390
+Node: Join Function581599
+Ref: Join Function-Footnote-1583370
+Node: Getlocaltime Function583570
+Node: Data File Management587285
+Node: Filetrans Function587917
+Node: Rewind Function591986
+Node: File Checking593373
+Node: Empty Files594467
+Node: Ignoring Assigns596697
+Node: Getopt Function598250
+Ref: Getopt Function-Footnote-1609554
+Node: Passwd Functions609757
+Ref: Passwd Functions-Footnote-1618732
+Node: Group Functions618820
+Node: Walking Arrays626904
+Node: Sample Programs629041
+Node: Running Examples629715
+Node: Clones630443
+Node: Cut Program631667
+Node: Egrep Program641512
+Ref: Egrep Program-Footnote-1649285
+Node: Id Program649395
+Node: Split Program653011
+Ref: Split Program-Footnote-1656530
+Node: Tee Program656658
+Node: Uniq Program659461
+Node: Wc Program666890
+Ref: Wc Program-Footnote-1671156
+Ref: Wc Program-Footnote-2671356
+Node: Miscellaneous Programs671448
+Node: Dupword Program672636
+Node: Alarm Program674667
+Node: Translate Program679416
+Ref: Translate Program-Footnote-1683803
+Ref: Translate Program-Footnote-2684031
+Node: Labels Program684165
+Ref: Labels Program-Footnote-1687536
+Node: Word Sorting687620
+Node: History Sorting691504
+Node: Extract Program693343
+Ref: Extract Program-Footnote-1700844
+Node: Simple Sed700972
+Node: Igawk Program704034
+Ref: Igawk Program-Footnote-1719191
+Ref: Igawk Program-Footnote-2719392
+Node: Anagram Program719530
+Node: Signature Program722598
+Node: Advanced Features723698
+Node: Nondecimal Data725580
+Node: Array Sorting727163
+Node: Controlling Array Traversal727860
+Node: Array Sorting Functions736098
+Ref: Array Sorting Functions-Footnote-1739772
+Ref: Array Sorting Functions-Footnote-2739865
+Node: Two-way I/O740059
+Ref: Two-way I/O-Footnote-1745491
+Node: TCP/IP Networking745561
+Node: Profiling748405
+Node: Internationalization755860
+Node: I18N and L10N757285
+Node: Explaining gettext757971
+Ref: Explaining gettext-Footnote-1763037
+Ref: Explaining gettext-Footnote-2763221
+Node: Programmer i18n763386
+Node: Translator i18n767586
+Node: String Extraction768379
+Ref: String Extraction-Footnote-1769340
+Node: Printf Ordering769426
+Ref: Printf Ordering-Footnote-1772210
+Node: I18N Portability772274
+Ref: I18N Portability-Footnote-1774723
+Node: I18N Example774786
+Ref: I18N Example-Footnote-1777421
+Node: Gawk I18N777493
+Node: Debugger778114
+Node: Debugging779085
+Node: Debugging Concepts779518
+Node: Debugging Terms781374
+Node: Awk Debugging783971
+Node: Sample Debugging Session784863
+Node: Debugger Invocation785383
+Node: Finding The Bug786715
+Node: List of Debugger Commands793203
+Node: Breakpoint Control794537
+Node: Debugger Execution Control798201
+Node: Viewing And Changing Data801561
+Node: Execution Stack804917
+Node: Debugger Info806384
+Node: Miscellaneous Debugger Commands810366
+Node: Readline Support815542
+Node: Limitations816373
+Node: Arbitrary Precision Arithmetic818625
+Ref: Arbitrary Precision Arithmetic-Footnote-1820276
+Node: General Arithmetic820424
+Node: Floating Point Issues822144
+Node: String Conversion Precision823025
+Ref: String Conversion Precision-Footnote-1824731
+Node: Unexpected Results824840
+Node: POSIX Floating Point Problems826993
+Ref: POSIX Floating Point Problems-Footnote-1830818
+Node: Integer Programming830856
+Node: Floating-point Programming832609
+Ref: Floating-point Programming-Footnote-1838918
+Node: Floating-point Representation839182
+Node: Floating-point Context840347
+Ref: table-ieee-formats841189
+Node: Rounding Mode842573
+Ref: table-rounding-modes843052
+Ref: Rounding Mode-Footnote-1846056
+Node: Gawk and MPFR846237
+Node: Arbitrary Precision Floats847479
+Ref: Arbitrary Precision Floats-Footnote-1849908
+Node: Setting Precision850219
+Node: Setting Rounding Mode852952
+Ref: table-gawk-rounding-modes853356
+Node: Floating-point Constants854536
+Node: Changing Precision855960
+Ref: Changing Precision-Footnote-1857360
+Node: Exact Arithmetic857534
+Node: Arbitrary Precision Integers860642
+Ref: Arbitrary Precision Integers-Footnote-1863642
+Node: Dynamic Extensions863789
+Node: Extension Intro865166
+Node: Plugin License866374
+Node: Extension Mechanism Outline867059
+Ref: load-extension867476
+Ref: load-new-function868954
+Ref: call-new-function869949
+Node: Extension API Description871957
+Node: Extension API Functions Introduction873296
+Node: General Data Types878074
+Ref: General Data Types-Footnote-1883676
+Node: Requesting Values883975
+Ref: table-value-types-returned884706
+Node: Constructor Functions885660
+Node: Registration Functions888656
+Node: Extension Functions889341
+Node: Exit Callback Functions891515
+Node: Extension Version String892758
+Node: Input Parsers893408
+Node: Output Wrappers903125
+Node: Two-way processors907541
+Node: Printing Messages909671
+Ref: Printing Messages-Footnote-1910748
+Node: Updating `ERRNO'910900
+Node: Accessing Parameters911639
+Node: Symbol Table Access912869
+Node: Symbol table by name913381
+Node: Symbol table by cookie914954
+Ref: Symbol table by cookie-Footnote-1919083
+Node: Cached values919146
+Ref: Cached values-Footnote-1922589
+Node: Array Manipulation922680
+Ref: Array Manipulation-Footnote-1923778
+Node: Array Data Types923817
+Ref: Array Data Types-Footnote-1926520
+Node: Array Functions926612
+Node: Flattening Arrays930378
+Node: Creating Arrays937217
+Node: Extension API Variables942012
+Node: Extension Versioning942648
+Node: Extension API Informational Variables944549
+Node: Extension API Boilerplate945635
+Node: Finding Extensions949466
+Node: Extension Example950013
+Node: Internal File Description950751
+Node: Internal File Ops954439
+Ref: Internal File Ops-Footnote-1965886
+Node: Using Internal File Ops966026
+Ref: Using Internal File Ops-Footnote-1968379
+Node: Extension Samples968645
+Node: Extension Sample File Functions970169
+Node: Extension Sample Fnmatch978642
+Node: Extension Sample Fork980368
+Node: Extension Sample Inplace981586
+Node: Extension Sample Ord983364
+Node: Extension Sample Readdir984143
+Node: Extension Sample Revout985647
+Node: Extension Sample Rev2way986240
+Node: Extension Sample Read write array986930
+Node: Extension Sample Readfile988813
+Node: Extension Sample API Tests989570
+Node: Extension Sample Time990095
+Node: gawkextlib991402
+Node: Language History993783
+Node: V7/SVR3.1995305
+Node: SVR4997626
+Node: POSIX999068
+Node: BTL1000454
+Node: POSIX/GNU1001188
+Node: Common Extensions1006723
+Node: Ranges and Locales1007878
+Ref: Ranges and Locales-Footnote-11012496
+Ref: Ranges and Locales-Footnote-21012523
+Ref: Ranges and Locales-Footnote-31012783
+Node: Contributors1013004
+Node: Installation1017808
+Node: Gawk Distribution1018702
+Node: Getting1019186
+Node: Extracting1020012
+Node: Distribution contents1021704
+Node: Unix Installation1026965
+Node: Quick Installation1027582
+Node: Additional Configuration Options1029544
+Node: Configuration Philosophy1031021
+Node: Non-Unix Installation1033363
+Node: PC Installation1033821
+Node: PC Binary Installation1035120
+Node: PC Compiling1036968
+Node: PC Testing1039912
+Node: PC Using1041088
+Node: Cygwin1045273
+Node: MSYS1046273
+Node: VMS Installation1046787
+Node: VMS Compilation1047390
+Ref: VMS Compilation-Footnote-11048397
+Node: VMS Installation Details1048455
+Node: VMS Running1050090
+Node: VMS Old Gawk1051697
+Node: Bugs1052171
+Node: Other Versions1056023
+Node: Notes1061624
+Node: Compatibility Mode1062424
+Node: Additions1063207
+Node: Accessing The Source1064134
+Node: Adding Code1065574
+Node: New Ports1071619
+Node: Derived Files1075754
+Ref: Derived Files-Footnote-11081075
+Ref: Derived Files-Footnote-21081109
+Ref: Derived Files-Footnote-31081709
+Node: Future Extensions1081807
+Node: Implementation Limitations1082388
+Node: Extension Design1083640
+Node: Old Extension Problems1084789
+Ref: Old Extension Problems-Footnote-11086297
+Node: Extension New Mechanism Goals1086354
+Ref: Extension New Mechanism Goals-Footnote-11089713
+Node: Extension Other Design Decisions1089899
+Node: Extension Future Growth1092005
+Node: Old Extension Mechansim1092826
+Node: Basic Concepts1094565
+Node: Basic High Level1095246
+Ref: figure-general-flow1095517
+Ref: figure-process-flow1096116
+Ref: Basic High Level-Footnote-11099345
+Node: Basic Data Typing1099530
+Node: Glossary1102885
+Node: Copying1128356
+Node: GNU Free Documentation License1165913
+Node: Index1191050
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 94de0af..b579592 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -1,3 +1,8 @@
+% *****************************************************
+% * DO NOT MODIFY THIS FILE!!!!                       *
+% * It was generated from gawkman.texi by sidebar.awk *
+% * Edit gawkman.texi instead.                        *
+% *****************************************************
 \input texinfo   @c -*-texinfo-*-
 @c %**start of header (This is for running Texinfo on a region.)
 @setfilename gawk.info
@@ -1101,22 +1106,47 @@ has been removed.)
 @unnumberedsec History of @command{awk} and @command{gawk}
 @cindex recipe for a programming language
 @cindex programming language, recipe for
address@hidden sidebar, Recipe For A Programming Language
address@hidden
address@hidden
+<sidebar><title>Recipe For A Programming Language</title>
address@hidden docbook
+
+
address@hidden {2 parts} {1 part  @code{egrep}} {1 part  @code{snobol}}
address@hidden @tab 1 part  @code{egrep} @tab 1 part  @code{snobol}
address@hidden @tab 2 parts @code{ed} @tab 3 parts C
address@hidden multitable
+
+Blend all parts well using @code{lex} and @code{yacc}.
+Document minimally and release.
+
+After eight years, add another part @code{egrep} and two
+more parts C.  Document very well and release.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
 @cartouche
 @center @b{Recipe For A Programming Language}
 
+
+
 @multitable {2 parts} {1 part  @code{egrep}} {1 part  @code{snobol}}
 @item @tab 1 part  @code{egrep} @tab 1 part  @code{snobol}
 @item @tab 2 parts @code{ed} @tab 3 parts C
 @end multitable
 
address@hidden
 Blend all parts well using @code{lex} and @code{yacc}.
 Document minimally and release.
 
 After eight years, add another part @code{egrep} and two
 more parts C.  Document very well and release.
address@hidden quotation
 @end cartouche
address@hidden ifnotdocbook
 
 @cindex Aho, Alfred
 @cindex Weinberger, Peter
@@ -1235,13 +1265,11 @@ You should also ignore the many cross-references; they 
are for the
 expert user and for the online Info and HTML versions of the document.
 @end ifnotinfo
 
-There are
-subsections labeled
-as @strong{Advanced Notes}
+There are sidebars
 scattered throughout the @value{DOCUMENT}.
 They add a more complete explanation of points that are relevant, but not 
likely
 to be of interest on first reading.
-All appear in the index, under the heading ``advanced features.''
+All appear in the index, under the heading ``sidebar.''
 
 Most of the time, the examples use complete @command{awk} programs.
 Some of the more advanced sections show only the part of the @command{awk}
@@ -2166,8 +2194,12 @@ Self-contained @command{awk} scripts are useful when you 
want to write a
 program that users can invoke without their having to know that the program is
 written in @command{awk}.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Portability Issues with @samp{#!}
address@hidden sidebar, Portability Issues with @samp{#!}
address@hidden
address@hidden
+<sidebar><title>Portability Issues with @samp{#!}</title>
address@hidden docbook
+
 @cindex portability, @code{#!} (executable scripts)
 
 Some systems limit the length of the interpreter name to 32 characters.
@@ -2191,6 +2223,41 @@ of your script (@samp{advice}).  @value{DARKCORNER}
 Don't rely on the value of @code{ARGV[0]}
 to provide your script name.
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Portability Issues with @samp{#!}}
+
+
address@hidden portability, @code{#!} (executable scripts)
+
+Some systems limit the length of the interpreter name to 32 characters.
+Often, this can be dealt with by using a symbolic link.
+
+You should not put more than one argument on the @samp{#!}
+line after the path to @command{awk}. It does not work. The operating system
+treats the rest of the line as a single argument and passes it to 
@command{awk}.
+Doing this leads to confusing behavior---most likely a usage diagnostic
+of some sort from @command{awk}.
+
address@hidden @code{ARGC}/@code{ARGV} variables, portability and
address@hidden portability, @code{ARGV} variable
+Finally,
+the value of @code{ARGV[0]}
+(@pxref{Built-in Variables})
+varies depending upon your operating system.
+Some systems put @samp{awk} there, some put the full pathname
+of @command{awk} (such as @file{/bin/awk}), and some put the name
+of your script (@samp{advice}).  @value{DARKCORNER}
+Don't rely on the value of @code{ARGV[0]}
+to provide your script name.
address@hidden cartouche
address@hidden ifnotdocbook
+
 @node Comments
 @subsection Comments in @command{awk} Programs
 @cindex @code{#} (number sign), commenting
@@ -4495,8 +4562,12 @@ A backslash before any other character means to treat 
that character
 literally.
 @end itemize
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Backslash Before Regular Characters
address@hidden sidebar, Backslash Before Regular Characters
address@hidden
address@hidden
+<sidebar><title>Backslash Before Regular Characters</title>
address@hidden docbook
+
 @cindex portability, backslash in escape sequences
 @cindex POSIX @command{awk}, backslashes in string constants
 @cindex backslash (@code{\}), in escape sequences, POSIX and
@@ -4528,8 +4599,55 @@ In such implementations, typing @code{"a\qc"} is the 
same as typing
 @code{"a\\qc"}.
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Escape Sequences for Metacharacters
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Backslash Before Regular Characters}
+
+
address@hidden portability, backslash in escape sequences
address@hidden POSIX @command{awk}, backslashes in string constants
address@hidden backslash (@code{\}), in escape sequences, POSIX and
address@hidden @code{\} (backslash), in escape sequences, POSIX and
+
address@hidden troubleshooting, backslash before nonspecial character
+If you place a backslash in a string constant before something that is
+not one of the characters previously listed, POSIX @command{awk} purposely
+leaves what happens as undefined.  There are two choices:
+
address@hidden @cindex automatic warnings
address@hidden @cindex warnings, automatic
address@hidden @asis
address@hidden Strip the backslash out
+This is what Brian Kernighan's @command{awk} and @command{gawk} both do.
+For example, @code{"a\qc"} is the same as @code{"aqc"}.
+(Because this is such an easy bug both to introduce and to miss,
address@hidden warns you about it.)
+Consider @samp{FS = @w{"[ \t]+\|[ \t]+"}} to use vertical bars
+surrounded by whitespace as the field separator. There should be
+two backslashes in the string: @samp{FS = @w{"[ \t]+\\|[ \t]+"}}.)
address@hidden I did this!  This is why I added the warning.
+
address@hidden @command{gawk}, escape sequences
address@hidden Unix @command{awk}, backslashes in escape sequences
address@hidden Leave the backslash alone
+Some other @command{awk} implementations do this.
+In such implementations, typing @code{"a\qc"} is the same as typing
address@hidden"a\\qc"}.
address@hidden table
address@hidden cartouche
address@hidden ifnotdocbook
+
address@hidden sidebar, Escape Sequences for Metacharacters
address@hidden
address@hidden
+<sidebar><title>Escape Sequences for Metacharacters</title>
address@hidden docbook
+
 @cindex metacharacters, escape sequences for
 
 Suppose you use an octal or hexadecimal
@@ -4548,6 +4666,36 @@ In compatibility mode (@pxref{Options}),
 escape sequences literally when used in regexp constants. Thus,
 @code{/a\52b/} is equivalent to @code{/a\*b/}.
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Escape Sequences for Metacharacters}
+
+
address@hidden metacharacters, escape sequences for
+
+Suppose you use an octal or hexadecimal
+escape to represent a regexp metacharacter.
+(See @ref{Regexp Operators}.)
+Does @command{awk} treat the character as a literal character or as a regexp
+operator?
+
address@hidden dark corner, escape sequences, for metacharacters
+Historically, such characters were taken literally.
address@hidden
+However, the POSIX standard indicates that they should be treated
+as real metacharacters, which is what @command{gawk} does.
+In compatibility mode (@pxref{Options}),
address@hidden treats the characters represented by octal and hexadecimal
+escape sequences literally when used in regexp constants. Thus,
address@hidden/a\52b/} is equivalent to @code{/a\*b/}.
address@hidden cartouche
address@hidden ifnotdocbook
+
 @node Regexp Operators
 @section Regular Expression Operators
 @c STARTOFRANGE regexpo
@@ -5316,7 +5464,50 @@ intend a regexp match.
 @end itemize
 
 @c fakenode --- for prepinfo
address@hidden Advanced Notes: Using @code{\n} in Bracket Expressions of 
Dynamic Regexps
address@hidden sidebar, Using @code{\n} in Bracket Expressions of Dynamic 
Regexps
address@hidden
address@hidden
+<sidebar><title>Using @code{\n} in Bracket Expressions of Dynamic 
Regexps</title>
address@hidden docbook
+
address@hidden regular expressions, dynamic, with embedded newlines
address@hidden newlines, in dynamic regexps
+
+Some commercial versions of @command{awk} do not allow the newline
+character to be used inside a bracket expression for a dynamic regexp:
+
address@hidden
+$ @kbd{awk '$0 ~ "[ \t\n]"'}
address@hidden awk: newline in character class [
address@hidden ]...
address@hidden  source line number 1
address@hidden  context is
address@hidden          >>>  <<<
address@hidden example
+
address@hidden newlines, in regexp constants
+But a newline in a regexp constant works with no problem:
+
address@hidden
+$ @kbd{awk '$0 ~ /[ \t\n]/'}
address@hidden is a sample line}
address@hidden here is a sample line
address@hidden@value{CTL}-d}
address@hidden example
+
address@hidden does not have this problem, and it isn't likely to
+occur often in practice, but it's worth noting for future reference.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Using @code{\n} in Bracket Expressions of Dynamic Regexps}
+
+
 @cindex regular expressions, dynamic, with embedded newlines
 @cindex newlines, in dynamic regexps
 
@@ -5344,6 +5535,8 @@ $ @kbd{awk '$0 ~ /[ \t\n]/'}
 
 @command{gawk} does not have this problem, and it isn't likely to
 occur often in practice, but it's worth noting for future reference.
address@hidden cartouche
address@hidden ifnotdocbook
 @c ENDOFRANGE dregexp
 @c ENDOFRANGE regexpd
 @c ENDOFRANGE regexp
@@ -5635,10 +5828,57 @@ compatibility mode
 In compatibility mode, only the first character of the value of
 @code{RS} is used to determine the end of the record.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: @code{RS = "\0"} Is Not Portable
address@hidden sidebar, @code{RS = "\0"} Is Not Portable
address@hidden
address@hidden
+<sidebar><title>@code{RS = "\0"} Is Not Portable</title>
address@hidden docbook
+
address@hidden portability, @value{DF}s as single record
+There are times when you might want to treat an entire @value{DF} as a
+single record.  The only way to make this happen is to give @code{RS}
+a value that you know doesn't occur in the input file.  This is hard
+to do in a general way, such that a program always works for arbitrary
+input files.
address@hidden can you say `understatement' boys and girls?
+
+You might think that for text files, the @sc{nul} character, which
+consists of a character with all bits equal to zero, is a good
+value to use for @code{RS} in this case:
+
address@hidden
+BEGIN @{ RS = "\0" @}  # whole file becomes one record?
address@hidden example
+
address@hidden differences in @command{awk} and @command{gawk}, strings, storing
address@hidden in fact accepts this, and uses the @sc{nul}
+character for the record separator.
+However, this usage is @emph{not} portable
+to other @command{awk} implementations.
+
address@hidden dark corner, strings, storing
+All other @command{awk} address@hidden least that we know
+about.} store strings internally as C-style strings.  C strings use the
address@hidden character as the string terminator.  In effect, this means that
address@hidden = "\0"} is the same as @samp{RS = ""}.
address@hidden
+
address@hidden records, treating files as
address@hidden files, as single records
+The best way to treat a whole file as a single record is to
+simply read the file in, one record at a time, concatenating each
+record onto the end of the previous ones.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @address@hidden = "\0"} Is Not Portable}
+
 
address@hidden advanced features, @value{DF}s as single record
 @cindex portability, @value{DF}s as single record
 There are times when you might want to treat an entire @value{DF} as a
 single record.  The only way to make this happen is to give @code{RS}
@@ -5673,6 +5913,8 @@ about.} store strings internally as C-style strings.  C 
strings use the
 The best way to treat a whole file as a single record is to
 simply read the file in, one record at a time, concatenating each
 record onto the end of the previous ones.
address@hidden cartouche
address@hidden ifnotdocbook
 @c ENDOFRANGE inspl
 @c ENDOFRANGE recspl
 
@@ -6001,8 +6243,12 @@ This also applies to any built-in function that updates 
@code{$0},
 such as @code{sub()} and @code{gsub()}
 (@pxref{String Functions}).
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Understanding @code{$0}
address@hidden sidebar, Understanding @code{$0}
address@hidden
address@hidden
+<sidebar><title>Understanding @code{$0}</title>
address@hidden docbook
+
 
 It is important to remember that @code{$0} is the @emph{full}
 record, exactly as it was read from the input.  This includes
@@ -6018,6 +6264,33 @@ But this does not work, since nothing was done to change 
the record
 itself.  Instead, you must force the record to be rebuilt, typically
 with a statement such as @samp{$1 = $1}, as described earlier.
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Understanding @code{$0}}
+
+
+
+It is important to remember that @code{$0} is the @emph{full}
+record, exactly as it was read from the input.  This includes
+any leading or trailing whitespace, and the exact whitespace (or other
+characters) that separate the fields.
+
+It is a not-uncommon error to try to change the field separators
+in a record simply by setting @code{FS} and @code{OFS}, and then
+expecting a plain @samp{print} or @samp{print $0} to print the
+modified record.
+
+But this does not work, since nothing was done to change the record
+itself.  Instead, you must force the record to be rebuilt, typically
+with a statement such as @samp{$1 = $1}, as described earlier.
address@hidden cartouche
address@hidden ifnotdocbook
+
 @c ENDOFRANGE ficon
 
 @node Field Separators
@@ -6433,8 +6706,12 @@ Each individual character in the record becomes a 
separate field.
 POSIX standard.)
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Changing @code{FS} Does Not Affect the Fields
address@hidden sidebar, Changing @code{FS} Does Not Affect the Fields
address@hidden
address@hidden
+<sidebar><title>Changing @code{FS} Does Not Affect the Fields</title>
address@hidden docbook
+
 
 @cindex POSIX @command{awk}, field separators and
 @cindex field separators, POSIX and
@@ -6478,8 +6755,97 @@ prints something like:
 root:nSijPlPhZZwgE:0:0:Root:/:
 @end example
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: @code{FS} and @code{IGNORECASE}
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Changing @code{FS} Does Not Affect the Fields}
+
+
+
address@hidden POSIX @command{awk}, field separators and
address@hidden field separators, POSIX and
+According to the POSIX standard, @command{awk} is supposed to behave
+as if each record is split into fields at the time it is read.
+In particular, this means that if you change the value of @code{FS}
+after a record is read, the value of the fields (i.e., how they were split)
+should reflect the old value of @code{FS}, not the new one.
+
address@hidden dark corner, field separators
address@hidden @command{sed} utility
address@hidden stream editors
+However, many older implementations of @command{awk} do not work this way.  
Instead,
+they defer splitting the fields until a field is actually
+referenced.  The fields are split
+using the @emph{current} value of @code{FS}!
address@hidden
+This behavior can be difficult
+to diagnose. The following example illustrates the difference
+between the two methods.
+(The @address@hidden @command{sed} utility is a ``stream editor.''
+Its behavior is also defined by the POSIX standard.}
+command prints just the first line of @file{/etc/passwd}.)
+
address@hidden
+sed 1q /etc/passwd | awk '@{ FS = ":" ; print $1 @}'
address@hidden example
+
address@hidden
+which usually prints:
+
address@hidden
+root
address@hidden example
+
address@hidden
+on an incorrect implementation of @command{awk}, while @command{gawk}
+prints something like:
+
address@hidden
+root:nSijPlPhZZwgE:0:0:Root:/:
address@hidden example
address@hidden cartouche
address@hidden ifnotdocbook
+
address@hidden sidebar, @code{FS} and @code{IGNORECASE}
address@hidden
address@hidden
+<sidebar><title>@code{FS} and @code{IGNORECASE}</title>
address@hidden docbook
+
+
+The @code{IGNORECASE} variable
+(@pxref{User-modified})
+affects field splitting @emph{only} when the value of @code{FS} is a regexp.
+It has no effect when @code{FS} is a single character, even if
+that character is a letter.  Thus, in the following code:
+
address@hidden
+FS = "c"
+IGNORECASE = 1
+$0 = "aCa"
+print $1
address@hidden example
+
address@hidden
+The output is @samp{aCa}.  If you really want to split fields on an
+alphabetic character while ignoring case, use a regexp that will
+do it for you.  E.g., @samp{FS = "[c]"}.  In this case, @code{IGNORECASE}
+will take effect.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @address@hidden and @code{IGNORECASE}}
+
+
 
 The @code{IGNORECASE} variable
 (@pxref{User-modified})
@@ -6499,6 +6865,8 @@ The output is @samp{aCa}.  If you really want to split 
fields on an
 alphabetic character while ignoring case, use a regexp that will
 do it for you.  E.g., @samp{FS = "[c]"}.  In this case, @code{IGNORECASE}
 will take effect.
address@hidden cartouche
address@hidden ifnotdocbook
 
 @c ENDOFRANGE fisepr
 @c ENDOFRANGE fisepg
@@ -8619,9 +8987,44 @@ program may have open to just one!  In @command{gawk}, 
there is no such limit.
 @command{gawk} allows a program to
 open as many pipelines as the underlying operating system permits.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Piping into @command{sh}
address@hidden advanced features, piping into @command{sh}
address@hidden sidebar, Piping into @command{sh}
address@hidden
address@hidden
+<sidebar><title>Piping into @command{sh}</title>
address@hidden docbook
+
address@hidden shells, piping commands into
+
+A particularly powerful way to use redirection is to build command lines
+and pipe them into the shell, @command{sh}.  For example, suppose you
+have a list of files brought over from a system where all the @value{FN}s
+are stored in uppercase, and you wish to rename them to have names in
+all lowercase.  The following program is both simple and efficient:
+
address@hidden @cindex @command{mv} utility
address@hidden
address@hidden printf("mv %s %s\n", $0, tolower($0)) | "sh" @}
+
+END @{ close("sh") @}
address@hidden example
+
+The @code{tolower()} function returns its argument string with all
+uppercase characters converted to lowercase
+(@pxref{String Functions}).
+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
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Piping into @command{sh}}
+
+
 @cindex shells, piping commands into
 
 A particularly powerful way to use redirection is to build command lines
@@ -8643,6 +9046,8 @@ uppercase characters converted to lowercase
 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 cartouche
address@hidden ifnotdocbook
 @c ENDOFRANGE outre
 @c ENDOFRANGE reout
 
@@ -8997,9 +9402,12 @@ delayed until
 @ref{Two-way I/O},
 which discusses it in more detail and gives an example.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Using @code{close()}'s Return Value
address@hidden advanced features, @code{close()} function
address@hidden sidebar, Using @code{close()}'s Return Value
address@hidden
address@hidden
+<sidebar><title>Using @code{close()}'s Return Value</title>
address@hidden docbook
+
 @cindex dark corner, @code{close()} function
 @cindex @code{close()} function, return values
 @cindex return address@hidden @code{close()} function
@@ -9046,6 +9454,64 @@ pipes; thus the return value cannot be used portably.
 In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
 when closing a pipe.
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Using @code{close()}'s Return Value}
+
+
address@hidden dark corner, @code{close()} function
address@hidden @code{close()} function, return values
address@hidden return address@hidden @code{close()} function
address@hidden differences in @command{awk} and @command{gawk}, @code{close()} 
function
address@hidden Unix @command{awk}, @code{close()} function and
+
+In many versions of Unix @command{awk}, the @code{close()} function
+is actually a statement.  It is a syntax error to try and use the return
+value from @code{close()}:
address@hidden
+
address@hidden
+command = "@dots{}"
+command | getline info
+retval = close(command)  # syntax error in many Unix awks
address@hidden example
+
address@hidden @command{gawk}, @code{ERRNO} variable in
address@hidden @code{ERRNO} variable
address@hidden treats @code{close()} as a function.
+The return value is @minus{}1 if the argument names something
+that was never opened with a redirection, or if there is
+a system problem closing the file or process.
+In these cases, @command{gawk} sets the built-in variable
address@hidden to a string describing the problem.
+
+In @command{gawk},
+when closing a pipe or coprocess (input or output),
+the return value is the exit status of the address@hidden
+This is a full 16-bit value as returned by the @code{wait()}
+system call. See the system manual pages for information on
+how to decode this value.}
+Otherwise, it is the return value from the system's @code{close()} or
address@hidden()} C functions when closing input or output
+files, respectively.
+This value is zero if the close succeeds, or @minus{}1 if
+it fails.
+
+The POSIX standard is very vague; it says that @code{close()}
+returns zero on success and nonzero otherwise.  In general,
+different implementations vary in what they report when closing
+pipes; thus the return value cannot be used portably.
address@hidden
+In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
+when closing a pipe.
address@hidden cartouche
address@hidden ifnotdocbook
+
 @c ENDOFRANGE ifc
 @c ENDOFRANGE ofc
 @c ENDOFRANGE pc
@@ -9232,8 +9698,12 @@ If @command{gawk} is in compatibility mode
 they are not available.
 
 @c fakenode --- for prepinfo
address@hidden Advanced Notes: A Constant's Base Does Not Affect Its Value
address@hidden advanced features, address@hidden values of
address@hidden sidebar, A Constant's Base Does Not Affect Its Value
address@hidden
address@hidden
+<sidebar><title>A Constant's Base Does Not Affect Its Value</title>
address@hidden docbook
+
 
 Once a numeric constant has
 been converted internally into a number,
@@ -9247,6 +9717,31 @@ $ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
 @print{} 0x11 is <17>
 @end example
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{A Constant's Base Does Not Affect Its Value}
+
+
+
+Once a numeric constant has
+been converted internally into a number,
address@hidden no longer remembers
+what the original form of the constant was; the internal value is
+always used.  This has particular consequences for conversion of
+numbers to strings:
+
address@hidden
+$ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
address@hidden 0x11 is <17>
address@hidden example
address@hidden cartouche
address@hidden ifnotdocbook
+
 @node Regexp Constants
 @subsubsection Regular Expression Constants
 
@@ -10130,9 +10625,12 @@ Only the @samp{^=} operator is specified by POSIX.
 For maximum portability, do not use the @samp{**=} operator.
 @end quotation
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Syntactic Ambiguities Between @samp{/=} and 
Regular Expressions
address@hidden advanced features, regexp constants
address@hidden sidebar, Syntactic Ambiguities Between @samp{/=} and Regular 
Expressions
address@hidden
address@hidden
+<sidebar><title>Syntactic Ambiguities Between @samp{/=} and Regular 
Expressions</title>
address@hidden docbook
+
 @cindex dark corner, regexp constants, @code{/=} operator and
 @cindex @code{/} (forward slash), @code{/=} operator, vs. 
@code{/address@hidden/} regexp constant
 @cindex forward slash (@code{/}), @code{/=} operator, vs. 
@code{/address@hidden/} regexp constant
@@ -10170,6 +10668,56 @@ awk '/[=]=/' /dev/null
 nor do the other
 freely available versions described in
 @ref{Other Versions}.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Syntactic Ambiguities Between @samp{/=} and Regular 
Expressions}
+
+
address@hidden dark corner, regexp constants, @code{/=} operator and
address@hidden @code{/} (forward slash), @code{/=} operator, vs. 
@code{/address@hidden/} regexp constant
address@hidden forward slash (@code{/}), @code{/=} operator, vs. 
@code{/address@hidden/} regexp constant
address@hidden regexp constants, @code{/address@hidden/}, @code{/=} operator and
+
address@hidden derived from email from  "Nelson H. F. Beebe" <address@hidden>
address@hidden Date: Mon, 1 Sep 1997 13:38:35 -0600 (MDT)
+
address@hidden dark corner
address@hidden ambiguity, syntactic: @code{/=} operator vs. 
@code{/address@hidden/} regexp constant
address@hidden syntactic ambiguity: @code{/=} operator vs. 
@code{/address@hidden/} regexp constant
address@hidden @code{/=} operator vs. @code{/address@hidden/} regexp constant
+There is a syntactic ambiguity between the @code{/=} assignment
+operator and regexp constants whose first character is an @samp{=}.
address@hidden
+This is most notable in some commercial @command{awk} versions.
+For example:
+
address@hidden
+$ awk /==/ /dev/null
address@hidden awk: syntax error at source line 1
address@hidden  context is
address@hidden         >>> /= <<<
address@hidden awk: bailing out at source line 1
address@hidden example
+
address@hidden
+A workaround is:
+
address@hidden
+awk '/[=]=/' /dev/null
address@hidden example
+
address@hidden does not have this problem,
+nor do the other
+freely available versions described in
address@hidden Versions}.
address@hidden cartouche
address@hidden ifnotdocbook
 @c ENDOFRANGE exas
 @c ENDOFRANGE opas
 @c ENDOFRANGE asop
@@ -10249,9 +10797,12 @@ as the value of the expression.
 like @address@hidden, but instead of adding, it subtracts.)
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Operator Evaluation Order
address@hidden advanced features, address@hidden precedence
address@hidden sidebar, Operator Evaluation Order
address@hidden
address@hidden
+<sidebar><title>Operator Evaluation Order</title>
address@hidden docbook
+
 @cindex precedence
 @cindex operators, precedence
 @cindex portability, operators
@@ -10293,6 +10844,60 @@ not anything that you can rely upon for portability.
 You should avoid such things in your own programs.
 @c You'll sleep better at night and be able to look at yourself
 @c in the mirror in the morning.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Operator Evaluation Order}
+
+
address@hidden precedence
address@hidden operators, precedence
address@hidden portability, operators
address@hidden evaluation order
address@hidden Marx, Groucho
address@hidden
address@hidden, doctor!  It hurts when I do address@hidden
+So don't do address@hidden
+Groucho Marx
address@hidden quotation
+
address@hidden
+What happens for something like the following?
+
address@hidden
+b = 6
+print b += b++
address@hidden example
+
address@hidden
+Or something even stranger?
+
address@hidden
+b = 6
+b += ++b + b++
+print b
address@hidden example
+
address@hidden side effects
+In other words, when do the various side effects prescribed by the
+postfix operators (@samp{b++}) take effect?
+When side effects happen is @dfn{implementation defined}.
+In other words, it is up to the particular version of @command{awk}.
+The result for the first example may be 12 or 13, and for the second, it
+may be 22 or 23.
+
+In short, doing things like this is not recommended and definitely
+not anything that you can rely upon for portability.
+You should avoid such things in your own programs.
address@hidden You'll sleep better at night and be able to look at yourself
address@hidden in the mirror in the morning.
address@hidden cartouche
address@hidden ifnotdocbook
 @c ENDOFRANGE inop
 @c ENDOFRANGE opde
 @c ENDOFRANGE deop
@@ -13366,11 +13971,14 @@ are available as elements within the @code{SYMTAB} 
array.
 @c ENDOFRANGE bvconi
 @c ENDOFRANGE vbconi
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Changing @code{NR} and @code{FNR}
address@hidden sidebar, Changing @code{NR} and @code{FNR}
address@hidden
address@hidden
+<sidebar><title>Changing @code{NR} and @code{FNR}</title>
address@hidden docbook
+
 @cindex @code{NR} variable, changing
 @cindex @code{FNR} variable, changing
address@hidden advanced features, @code{FNR}/@code{NR} variables
 @cindex dark corner, @code{FNR}/@code{NR} variables
 @command{awk} increments @code{NR} and @code{FNR}
 each time it reads a record, instead of setting them to the absolute
@@ -13399,6 +14007,48 @@ many @command{awk} programs used this feature to track 
the number of
 records in a file by resetting @code{NR} to zero when @code{FILENAME}
 changed.
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Changing @code{NR} and @code{FNR}}
+
+
address@hidden @code{NR} variable, changing
address@hidden @code{FNR} variable, changing
address@hidden dark corner, @code{FNR}/@code{NR} variables
address@hidden increments @code{NR} and @code{FNR}
+each time it reads a record, instead of setting them to the absolute
+value of the number of records read.  This means that a program can
+change these variables and their new values are incremented for
+each record.
address@hidden
+The following example shows this:
+
address@hidden
+$ @kbd{echo '1}
+> @kbd{2}
+> @kbd{3}
+> @kbd{4' | awk 'NR == 2 @{ NR = 17 @}}
+> @address@hidden print NR @}'}
address@hidden 1
address@hidden 17
address@hidden 18
address@hidden 19
address@hidden example
+
address@hidden
+Before @code{FNR} was added to the @command{awk} language
+(@pxref{V7/SVR3.1}),
+many @command{awk} programs used this feature to track the number of
+records in a file by resetting @code{NR} to zero when @code{FILENAME}
+changed.
address@hidden cartouche
address@hidden ifnotdocbook
+
 @node ARGC and ARGV
 @subsection Using @code{ARGC} and @code{ARGV}
 @cindex @code{ARGC}/@code{ARGV} variables
@@ -15969,9 +16619,39 @@ and the special cases for @code{sub()} and 
@code{gsub()},
 we recommend the use of @command{gawk} and @code{gensub()} when you have
 to do substitutions.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Matching the Null String
address@hidden advanced features, null address@hidden matching
address@hidden sidebar, Matching the Null String
address@hidden
address@hidden
+<sidebar><title>Matching the Null String</title>
address@hidden docbook
+
address@hidden matching, null strings
address@hidden null strings, matching
address@hidden @code{*} (asterisk), @code{*} operator, null address@hidden 
matching
address@hidden asterisk (@code{*}), @code{*} operator, null address@hidden 
matching
+
+In @command{awk}, the @samp{*} operator can match the null string.
+This is particularly important for the @code{sub()}, @code{gsub()},
+and @code{gensub()} functions.  For example:
+
address@hidden
+$ @kbd{echo abc | awk '@{ gsub(/m*/, "X"); print @}'}
address@hidden XaXbXcX
address@hidden example
+
address@hidden
+Although this makes a certain amount of sense, it can be surprising.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Matching the Null String}
+
+
 @cindex matching, null strings
 @cindex null strings, matching
 @cindex @code{*} (asterisk), @code{*} operator, null address@hidden matching
@@ -15988,6 +16668,8 @@ $ @kbd{echo abc | awk '@{ gsub(/m*/, "X"); print @}'}
 
 @noindent
 Although this makes a certain amount of sense, it can be surprising.
address@hidden cartouche
address@hidden ifnotdocbook
 
 @node I/O Functions
 @subsection Input/Output Functions
@@ -16121,9 +16803,12 @@ When @option{--sandbox} is specified, the 
@code{system()} function is disabled
 
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Interactive Versus Noninteractive Buffering
address@hidden advanced features, buffering
address@hidden sidebar, Interactive Versus Noninteractive Buffering
address@hidden
address@hidden
+<sidebar><title>Interactive Versus Noninteractive Buffering</title>
address@hidden docbook
+
 @cindex buffering, interactive vs.@: noninteractive
 
 As a side point, buffering issues can be even more confusing, depending
@@ -16165,9 +16850,130 @@ $ @kbd{awk '@{ print $1 + $2 @}' | cat}
 Here, no output is printed until after the @address@hidden is typed, because
 it is all buffered and sent down the pipe to @command{cat} in one shot.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Controlling Output Buffering with @code{system()}
address@hidden advanced features, buffering
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Interactive Versus Noninteractive Buffering}
+
+
address@hidden buffering, interactive vs.@: noninteractive
+
+As a side point, buffering issues can be even more confusing, depending
+upon whether your program is @dfn{interactive}, i.e., communicating
+with a user sitting at a address@hidden program is interactive
+if the standard output is connected to a terminal device. On modern
+systems, this means your keyboard and screen.}
+
address@hidden Thanks to address@hidden for this example, and for
address@hidden motivating me to write this section.
+Interactive programs generally @dfn{line buffer} their output; i.e., they
+write out every line.  Noninteractive programs wait until they have
+a full buffer, which may be many lines of output.
+Here is an example of the difference:
+
address@hidden
+$ @kbd{awk '@{ print $1 + $2 @}'}
address@hidden 1}
address@hidden 2
address@hidden 3}
address@hidden 5
address@hidden@value{CTL}-d}
address@hidden example
+
address@hidden
+Each line of output is printed immediately. Compare that behavior
+with this example:
+
address@hidden
+$ @kbd{awk '@{ print $1 + $2 @}' | cat}
address@hidden 1}
address@hidden 3}
address@hidden@value{CTL}-d}
address@hidden 2
address@hidden 5
address@hidden example
+
address@hidden
+Here, no output is printed until after the @address@hidden is typed, because
+it is all buffered and sent down the pipe to @command{cat} in one shot.
address@hidden cartouche
address@hidden ifnotdocbook
+
address@hidden sidebar, Controlling Output Buffering with @code{system()}
address@hidden
address@hidden
+<sidebar><title>Controlling Output Buffering with @code{system()}</title>
address@hidden docbook
+
address@hidden buffers, flushing
address@hidden buffering, input/output
address@hidden output, buffering
+
+The @code{fflush()} function provides explicit control over output buffering 
for
+individual files and pipes.  However, its use is not portable to many older
address@hidden implementations.  An alternative method to flush output
+buffers is to call @code{system()} with a null string as its argument:
+
address@hidden
+system("")   # flush output
address@hidden example
+
address@hidden
address@hidden treats this use of the @code{system()} function as a special
+case and is smart enough not to run a shell (or other command
+interpreter) with the empty command.  Therefore, with @command{gawk}, this
+idiom is not only useful, it is also efficient.  While this method should work
+with other @command{awk} implementations, it does not necessarily avoid
+starting an unnecessary shell.  (Other implementations may only
+flush the buffer associated with the standard output and not necessarily
+all buffered output.)
+
+If you think about what a programmer expects, it makes sense that
address@hidden()} should flush any pending output.  The following program:
+
address@hidden
+BEGIN @{
+     print "first print"
+     system("echo system echo")
+     print "second print"
address@hidden
address@hidden example
+
address@hidden
+must print:
+
address@hidden
+first print
+system echo
+second print
address@hidden example
+
address@hidden
+and not:
+
address@hidden
+system echo
+first print
+second print
address@hidden example
+
+If @command{awk} did not flush its buffers before calling @code{system()},
+you would see the latter (undesirable) output.
+
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{Controlling Output Buffering with @code{system()}}
+
+
 @cindex buffers, flushing
 @cindex buffering, input/output
 @cindex output, buffering
@@ -16222,6 +17028,8 @@ second print
 
 If @command{awk} did not flush its buffers before calling @code{system()},
 you would see the latter (undesirable) output.
address@hidden cartouche
address@hidden ifnotdocbook
 
 @node Time Functions
 @subsection Time Functions
@@ -18997,8 +19805,12 @@ END  @{ endfile(_filename_) @}
 shows how this library function can be used and
 how it simplifies writing the main program.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: So Why Does @command{gawk} have @code{BEGINFILE} 
and @code{ENDFILE}?
address@hidden sidebar, So Why Does @command{gawk} have @code{BEGINFILE} and 
@code{ENDFILE}?
address@hidden
address@hidden
+<sidebar><title>So Why Does @command{gawk} have @code{BEGINFILE} and 
@code{ENDFILE}?</title>
address@hidden docbook
+
 
 You are probably wondering, if @code{beginfile()} and @code{endfile()}
 functions can do the job, why does @command{gawk} have
@@ -19012,6 +19824,31 @@ the main reason for @code{BEGINFILE} is to give you a 
``hook'' to catch
 files that cannot be processed.  @code{ENDFILE} exists for symmetry,
 and because it provides an easy way to do per-file cleanup processing.
 
address@hidden
+</sidebar>
address@hidden docbook
address@hidden ifdocbook
+
address@hidden
address@hidden
address@hidden @b{So Why Does @command{gawk} have @code{BEGINFILE} and 
@code{ENDFILE}?}
+
+
+
+You are probably wondering, if @code{beginfile()} and @code{endfile()}
+functions can do the job, why does @command{gawk} have
address@hidden and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
+
+Good question.  Normally, if @command{awk} cannot open a file, this
+causes an immediate fatal error.  In this case, there is no way for a
+user-defined function to deal with the problem, since the mechanism for
+calling it relies on the file being open and at the first record.  Thus,
+the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
+files that cannot be processed.  @code{ENDFILE} exists for symmetry,
+and because it provides an easy way to do per-file cleanup processing.
address@hidden cartouche
address@hidden ifnotdocbook
+
 @node Rewind Function
 @subsection Rereading the Current File
 
@@ -37528,3 +38365,35 @@ Suggestions:
 %         in the two sample code chapters.
 %      2. Nuke the BBS stuff and use something that won't be obsolete
 %      3. Turn the advanced notes into sidebars by using @cartouche
+
+Better sidebars can almost sort of be done with:
+
+       @ifdocbook
+       @macro @sidebar{title, content}
+       @inlinefmt{docbook, <sidebar><title>}
+       \title\
+       @inlinefmt{docbook, </title>}
+       \content\
+       @inlinefmt{docbook, </sidebar>}
+       @end macro
+       @end ifdocbook
+
+
+       @ifnotdocbook
+       @macro @sidebar{title, content}
+       @cartouche
+       @center @b{\title\}
+
+       \content\
+       @end cartouche
+       @end macro
+       @end ifnotdocbook
+
+But to use it you have to say
+
+       @sidebar{Title Here,
+       @include file-with-content
+       }
+
+which sorta sucks.
+
diff --git a/doc/gawk.texi b/doc/gawkman.texi
similarity index 99%
copy from doc/gawk.texi
copy to doc/gawkman.texi
index 94de0af..463d4b2 100644
--- a/doc/gawk.texi
+++ b/doc/gawkman.texi
@@ -1101,22 +1101,19 @@ has been removed.)
 @unnumberedsec History of @command{awk} and @command{gawk}
 @cindex recipe for a programming language
 @cindex programming language, recipe for
address@hidden
address@hidden @b{Recipe For A Programming Language}
address@hidden Recipe For A Programming Language
 
 @multitable {2 parts} {1 part  @code{egrep}} {1 part  @code{snobol}}
 @item @tab 1 part  @code{egrep} @tab 1 part  @code{snobol}
 @item @tab 2 parts @code{ed} @tab 3 parts C
 @end multitable
 
address@hidden
 Blend all parts well using @code{lex} and @code{yacc}.
 Document minimally and release.
 
 After eight years, add another part @code{egrep} and two
 more parts C.  Document very well and release.
address@hidden quotation
address@hidden cartouche
address@hidden sidebar
 
 @cindex Aho, Alfred
 @cindex Weinberger, Peter
@@ -1235,13 +1232,11 @@ You should also ignore the many cross-references; they 
are for the
 expert user and for the online Info and HTML versions of the document.
 @end ifnotinfo
 
-There are
-subsections labeled
-as @strong{Advanced Notes}
+There are sidebars
 scattered throughout the @value{DOCUMENT}.
 They add a more complete explanation of points that are relevant, but not 
likely
 to be of interest on first reading.
-All appear in the index, under the heading ``advanced features.''
+All appear in the index, under the heading ``sidebar.''
 
 Most of the time, the examples use complete @command{awk} programs.
 Some of the more advanced sections show only the part of the @command{awk}
@@ -2166,8 +2161,7 @@ Self-contained @command{awk} scripts are useful when you 
want to write a
 program that users can invoke without their having to know that the program is
 written in @command{awk}.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Portability Issues with @samp{#!}
address@hidden Portability Issues with @samp{#!}
 @cindex portability, @code{#!} (executable scripts)
 
 Some systems limit the length of the interpreter name to 32 characters.
@@ -2190,6 +2184,7 @@ of @command{awk} (such as @file{/bin/awk}), and some put 
the name
 of your script (@samp{advice}).  @value{DARKCORNER}
 Don't rely on the value of @code{ARGV[0]}
 to provide your script name.
address@hidden sidebar
 
 @node Comments
 @subsection Comments in @command{awk} Programs
@@ -4495,8 +4490,7 @@ A backslash before any other character means to treat 
that character
 literally.
 @end itemize
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Backslash Before Regular Characters
address@hidden Backslash Before Regular Characters
 @cindex portability, backslash in escape sequences
 @cindex POSIX @command{awk}, backslashes in string constants
 @cindex backslash (@code{\}), in escape sequences, POSIX and
@@ -4527,9 +4521,9 @@ Some other @command{awk} implementations do this.
 In such implementations, typing @code{"a\qc"} is the same as typing
 @code{"a\\qc"}.
 @end table
address@hidden sidebar
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Escape Sequences for Metacharacters
address@hidden Escape Sequences for Metacharacters
 @cindex metacharacters, escape sequences for
 
 Suppose you use an octal or hexadecimal
@@ -4547,6 +4541,7 @@ In compatibility mode (@pxref{Options}),
 @command{gawk} treats the characters represented by octal and hexadecimal
 escape sequences literally when used in regexp constants. Thus,
 @code{/a\52b/} is equivalent to @code{/a\*b/}.
address@hidden sidebar
 
 @node Regexp Operators
 @section Regular Expression Operators
@@ -5316,7 +5311,7 @@ intend a regexp match.
 @end itemize
 
 @c fakenode --- for prepinfo
address@hidden Advanced Notes: Using @code{\n} in Bracket Expressions of 
Dynamic Regexps
address@hidden Using @code{\n} in Bracket Expressions of Dynamic Regexps
 @cindex regular expressions, dynamic, with embedded newlines
 @cindex newlines, in dynamic regexps
 
@@ -5344,6 +5339,7 @@ $ @kbd{awk '$0 ~ /[ \t\n]/'}
 
 @command{gawk} does not have this problem, and it isn't likely to
 occur often in practice, but it's worth noting for future reference.
address@hidden sidebar
 @c ENDOFRANGE dregexp
 @c ENDOFRANGE regexpd
 @c ENDOFRANGE regexp
@@ -5635,10 +5631,7 @@ compatibility mode
 In compatibility mode, only the first character of the value of
 @code{RS} is used to determine the end of the record.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: @code{RS = "\0"} Is Not Portable
-
address@hidden advanced features, @value{DF}s as single record
address@hidden @code{RS = "\0"} Is Not Portable
 @cindex portability, @value{DF}s as single record
 There are times when you might want to treat an entire @value{DF} as a
 single record.  The only way to make this happen is to give @code{RS}
@@ -5673,6 +5666,7 @@ about.} store strings internally as C-style strings.  C 
strings use the
 The best way to treat a whole file as a single record is to
 simply read the file in, one record at a time, concatenating each
 record onto the end of the previous ones.
address@hidden sidebar
 @c ENDOFRANGE inspl
 @c ENDOFRANGE recspl
 
@@ -6001,8 +5995,7 @@ This also applies to any built-in function that updates 
@code{$0},
 such as @code{sub()} and @code{gsub()}
 (@pxref{String Functions}).
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Understanding @code{$0}
address@hidden Understanding @code{$0}
 
 It is important to remember that @code{$0} is the @emph{full}
 record, exactly as it was read from the input.  This includes
@@ -6017,6 +6010,7 @@ modified record.
 But this does not work, since nothing was done to change the record
 itself.  Instead, you must force the record to be rebuilt, typically
 with a statement such as @samp{$1 = $1}, as described earlier.
address@hidden sidebar
 
 @c ENDOFRANGE ficon
 
@@ -6433,8 +6427,7 @@ Each individual character in the record becomes a 
separate field.
 POSIX standard.)
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Changing @code{FS} Does Not Affect the Fields
address@hidden Changing @code{FS} Does Not Affect the Fields
 
 @cindex POSIX @command{awk}, field separators and
 @cindex field separators, POSIX and
@@ -6477,9 +6470,9 @@ prints something like:
 @example
 root:nSijPlPhZZwgE:0:0:Root:/:
 @end example
address@hidden sidebar
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: @code{FS} and @code{IGNORECASE}
address@hidden @code{FS} and @code{IGNORECASE}
 
 The @code{IGNORECASE} variable
 (@pxref{User-modified})
@@ -6499,6 +6492,7 @@ The output is @samp{aCa}.  If you really want to split 
fields on an
 alphabetic character while ignoring case, use a regexp that will
 do it for you.  E.g., @samp{FS = "[c]"}.  In this case, @code{IGNORECASE}
 will take effect.
address@hidden sidebar
 
 @c ENDOFRANGE fisepr
 @c ENDOFRANGE fisepg
@@ -8619,9 +8613,7 @@ program may have open to just one!  In @command{gawk}, 
there is no such limit.
 @command{gawk} allows a program to
 open as many pipelines as the underlying operating system permits.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Piping into @command{sh}
address@hidden advanced features, piping into @command{sh}
address@hidden Piping into @command{sh}
 @cindex shells, piping commands into
 
 A particularly powerful way to use redirection is to build command lines
@@ -8643,6 +8635,7 @@ uppercase characters converted to lowercase
 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 sidebar
 @c ENDOFRANGE outre
 @c ENDOFRANGE reout
 
@@ -8997,9 +8990,7 @@ delayed until
 @ref{Two-way I/O},
 which discusses it in more detail and gives an example.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Using @code{close()}'s Return Value
address@hidden advanced features, @code{close()} function
address@hidden Using @code{close()}'s Return Value
 @cindex dark corner, @code{close()} function
 @cindex @code{close()} function, return values
 @cindex return address@hidden @code{close()} function
@@ -9045,6 +9036,7 @@ pipes; thus the return value cannot be used portably.
 @value{DARKCORNER}
 In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
 when closing a pipe.
address@hidden sidebar
 
 @c ENDOFRANGE ifc
 @c ENDOFRANGE ofc
@@ -9232,8 +9224,7 @@ If @command{gawk} is in compatibility mode
 they are not available.
 
 @c fakenode --- for prepinfo
address@hidden Advanced Notes: A Constant's Base Does Not Affect Its Value
address@hidden advanced features, address@hidden values of
address@hidden A Constant's Base Does Not Affect Its Value
 
 Once a numeric constant has
 been converted internally into a number,
@@ -9246,6 +9237,7 @@ numbers to strings:
 $ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
 @print{} 0x11 is <17>
 @end example
address@hidden sidebar
 
 @node Regexp Constants
 @subsubsection Regular Expression Constants
@@ -10130,9 +10122,7 @@ Only the @samp{^=} operator is specified by POSIX.
 For maximum portability, do not use the @samp{**=} operator.
 @end quotation
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Syntactic Ambiguities Between @samp{/=} and 
Regular Expressions
address@hidden advanced features, regexp constants
address@hidden Syntactic Ambiguities Between @samp{/=} and Regular Expressions
 @cindex dark corner, regexp constants, @code{/=} operator and
 @cindex @code{/} (forward slash), @code{/=} operator, vs. 
@code{/address@hidden/} regexp constant
 @cindex forward slash (@code{/}), @code{/=} operator, vs. 
@code{/address@hidden/} regexp constant
@@ -10170,6 +10160,7 @@ awk '/[=]=/' /dev/null
 nor do the other
 freely available versions described in
 @ref{Other Versions}.
address@hidden sidebar
 @c ENDOFRANGE exas
 @c ENDOFRANGE opas
 @c ENDOFRANGE asop
@@ -10249,9 +10240,7 @@ as the value of the expression.
 like @address@hidden, but instead of adding, it subtracts.)
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Operator Evaluation Order
address@hidden advanced features, address@hidden precedence
address@hidden Operator Evaluation Order
 @cindex precedence
 @cindex operators, precedence
 @cindex portability, operators
@@ -10293,6 +10282,7 @@ not anything that you can rely upon for portability.
 You should avoid such things in your own programs.
 @c You'll sleep better at night and be able to look at yourself
 @c in the mirror in the morning.
address@hidden sidebar
 @c ENDOFRANGE inop
 @c ENDOFRANGE opde
 @c ENDOFRANGE deop
@@ -13366,11 +13356,9 @@ are available as elements within the @code{SYMTAB} 
array.
 @c ENDOFRANGE bvconi
 @c ENDOFRANGE vbconi
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Changing @code{NR} and @code{FNR}
address@hidden Changing @code{NR} and @code{FNR}
 @cindex @code{NR} variable, changing
 @cindex @code{FNR} variable, changing
address@hidden advanced features, @code{FNR}/@code{NR} variables
 @cindex dark corner, @code{FNR}/@code{NR} variables
 @command{awk} increments @code{NR} and @code{FNR}
 each time it reads a record, instead of setting them to the absolute
@@ -13398,6 +13386,7 @@ Before @code{FNR} was added to the @command{awk} 
language
 many @command{awk} programs used this feature to track the number of
 records in a file by resetting @code{NR} to zero when @code{FILENAME}
 changed.
address@hidden sidebar
 
 @node ARGC and ARGV
 @subsection Using @code{ARGC} and @code{ARGV}
@@ -15969,9 +15958,7 @@ and the special cases for @code{sub()} and 
@code{gsub()},
 we recommend the use of @command{gawk} and @code{gensub()} when you have
 to do substitutions.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Matching the Null String
address@hidden advanced features, null address@hidden matching
address@hidden Matching the Null String
 @cindex matching, null strings
 @cindex null strings, matching
 @cindex @code{*} (asterisk), @code{*} operator, null address@hidden matching
@@ -15988,6 +15975,7 @@ $ @kbd{echo abc | awk '@{ gsub(/m*/, "X"); print @}'}
 
 @noindent
 Although this makes a certain amount of sense, it can be surprising.
address@hidden sidebar
 
 @node I/O Functions
 @subsection Input/Output Functions
@@ -16121,9 +16109,7 @@ When @option{--sandbox} is specified, the 
@code{system()} function is disabled
 
 @end table
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Interactive Versus Noninteractive Buffering
address@hidden advanced features, buffering
address@hidden Interactive Versus Noninteractive Buffering
 @cindex buffering, interactive vs.@: noninteractive
 
 As a side point, buffering issues can be even more confusing, depending
@@ -16164,10 +16150,9 @@ $ @kbd{awk '@{ print $1 + $2 @}' | cat}
 @noindent
 Here, no output is printed until after the @address@hidden is typed, because
 it is all buffered and sent down the pipe to @command{cat} in one shot.
address@hidden sidebar
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: Controlling Output Buffering with @code{system()}
address@hidden advanced features, buffering
address@hidden Controlling Output Buffering with @code{system()}
 @cindex buffers, flushing
 @cindex buffering, input/output
 @cindex output, buffering
@@ -16222,6 +16207,7 @@ second print
 
 If @command{awk} did not flush its buffers before calling @code{system()},
 you would see the latter (undesirable) output.
address@hidden sidebar
 
 @node Time Functions
 @subsection Time Functions
@@ -18997,8 +18983,7 @@ END  @{ endfile(_filename_) @}
 shows how this library function can be used and
 how it simplifies writing the main program.
 
address@hidden fakenode --- for prepinfo
address@hidden Advanced Notes: So Why Does @command{gawk} have @code{BEGINFILE} 
and @code{ENDFILE}?
address@hidden So Why Does @command{gawk} have @code{BEGINFILE} and 
@code{ENDFILE}?
 
 You are probably wondering, if @code{beginfile()} and @code{endfile()}
 functions can do the job, why does @command{gawk} have
@@ -19011,6 +18996,7 @@ calling it relies on the file being open and at the 
first record.  Thus,
 the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
 files that cannot be processed.  @code{ENDFILE} exists for symmetry,
 and because it provides an easy way to do per-file cleanup processing.
address@hidden sidebar
 
 @node Rewind Function
 @subsection Rereading the Current File
@@ -37528,3 +37514,35 @@ Suggestions:
 %         in the two sample code chapters.
 %      2. Nuke the BBS stuff and use something that won't be obsolete
 %      3. Turn the advanced notes into sidebars by using @cartouche
+
+Better sidebars can almost sort of be done with:
+
+       @ifdocbook
+       @macro @sidebar{title, content}
+       @inlinefmt{docbook, <sidebar><title>}
+       \title\
+       @inlinefmt{docbook, </title>}
+       \content\
+       @inlinefmt{docbook, </sidebar>}
+       @end macro
+       @end ifdocbook
+
+
+       @ifnotdocbook
+       @macro @sidebar{title, content}
+       @cartouche
+       @center @b{\title\}
+
+       \content\
+       @end cartouche
+       @end macro
+       @end ifnotdocbook
+
+But to use it you have to say
+
+       @sidebar{Title Here,
+       @include file-with-content
+       }
+
+which sorta sucks.
+
diff --git a/doc/sidebar.awk b/doc/sidebar.awk
new file mode 100644
index 0000000..a8d25bf
--- /dev/null
+++ b/doc/sidebar.awk
@@ -0,0 +1,67 @@
+# sidebar.awk --- add support for sidebars, other stuff to gawk.texi
+
+# Copyright (C) 2013 the Free Software Foundation, Inc.
+# 
+# This file is part of GAWK, the GNU implementation of the
+# AWK Programming Language.
+# 
+# GAWK is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# GAWK is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA
+
+BEGIN {
+       print "% *****************************************************"
+       print "% * DO NOT MODIFY THIS FILE!!!!                       *"
+       print "% * It was generated from gawkman.texi by sidebar.awk *"
+       print "% * Edit gawkman.texi instead.                        *"
+       print "% *****************************************************"
+}
+
+/address@hidden/ {
+       sub(/address@hidden:space:]]+/, "", $0)
+       title = $0
+       body = ""
+       collecting = 1
+       next
+}
+
+/address@hidden:space:]]+sidebar[[:space:]]*$/ {
+       collecting = 0
+       printf "@cindex sidebar, %s\n", title
+       printf "@ifdocbook\n"
+               printf "@docbook\n"
+               printf "<sidebar><title>%s</title>\n", title
+               printf "@end docbook\n"
+                       print  body
+               print ""
+               printf "@docbook\n"
+               printf "</sidebar>\n"
+               printf "@end docbook\n"
+       printf "@end ifdocbook\n\n"
+
+       printf "@ifnotdocbook\n"
+               printf "@cartouche\n"
+               printf "@center @b{%s}\n\n", title
+                       print  body
+               printf "@end cartouche\n"
+       printf "@end ifnotdocbook\n"
+       body = ""
+       next
+}
+
+collecting == 1 {
+       body = body RS $0
+       next
+}
+
+{ print }

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

Summary of changes:
 ChangeLog                       |    9 +
 bootstrap.sh                    |    4 +-
 configure                       |    9 -
 configure.ac                    |   11 -
 doc/ChangeLog                   |   14 +
 doc/Makefile.am                 |    8 +-
 doc/Makefile.in                 |    8 +-
 doc/gawk.info                   | 1321 ++++++++++++++++++++-------------------
 doc/gawk.texi                   |  969 +++++++++++++++++++++++++++--
 doc/{gawk.texi => gawkman.texi} |  126 +++--
 doc/sidebar.awk                 |   67 ++
 extension/ChangeLog             |    5 +
 extension/Makefile.am           |    2 +-
 extension/Makefile.in           |    2 +-
 14 files changed, 1764 insertions(+), 791 deletions(-)
 copy doc/{gawk.texi => gawkman.texi} (99%)
 create mode 100644 doc/sidebar.awk


hooks/post-receive
-- 
gawk



reply via email to

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