gawk-diffs
[Top][All Lists]
Advanced

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

[SCM] gawk branch, master, updated. gawk-4.1.0-5387-gcd915e25


From: Arnold Robbins
Subject: [SCM] gawk branch, master, updated. gawk-4.1.0-5387-gcd915e25
Date: Thu, 19 Oct 2023 02:41:24 -0400 (EDT)

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  cd915e2556c62b4957fb8ee38674436425127d2e (commit)
      from  1064fd0dc1766023303d7ca24fee7e0bae4bb402 (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=cd915e2556c62b4957fb8ee38674436425127d2e

commit cd915e2556c62b4957fb8ee38674436425127d2e
Author: Arnold D. Robbins <arnold@skeeve.com>
Date:   Thu Oct 19 09:40:48 2023 +0300

    Update to Texinfo 7.1. Lets us remove gawktexi.in in favor of gawk.texi.

diff --git a/ChangeLog b/ChangeLog
index a4d15075..123bcf41 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2023-10-19         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * NEWS: Updated.
+       * README: Version bumped to 5.3.0. Updated info about makeinfo
+       and texinfo.tex versions.
+
 2023-10-17         Arnold D. Robbins     <arnold@skeeve.com>
 
        * re.c (make_regexp): Fix setting ok_to_escape.
diff --git a/NEWS b/NEWS
index 93fab8a0..82459204 100644
--- a/NEWS
+++ b/NEWS
@@ -30,7 +30,11 @@ Changes from 5.2.x to 5.3.0
    the minor version was reset to zero.  The API remains source code
    compatible; that is, existing extensions should only require recompilation.
 
-6. And of course, there have been several minor code cleanups and bug fixes.
+6. The manual now requires Texinfo 7.1 and its texinfo.tex for formatting.
+   As a result, we no longer need to pre-process it, removing the need
+   for gawktexi.in and leaving just gawk.texi.
+
+7. And of course, there have been several minor code cleanups and bug fixes.
    See the ChangeLog for details.
 
 Changes from 5.2.2 to 5.2.x
diff --git a/README b/README
index faf9c893..f34d07b5 100644
--- a/README
+++ b/README
@@ -7,7 +7,7 @@
 
 README:
 
-This is GNU Awk 5.2.2. It is upwardly compatible with Brian Kernighan's
+This is GNU Awk 5.3.0. It is upwardly compatible with Brian Kernighan's
 version of Unix awk.  It is almost completely compliant with the
 2018 POSIX 1003.1 standard for awk. (See the note below about POSIX.)
 
@@ -21,10 +21,10 @@ Changes in this version are summarized in the NEWS file.
 Read the file POSIX.STD for a discussion of issues where the standard
 says one thing but gawk does something different.
 
-To format the documentation with TeX, use at least version 2023-01-02.21
+To format the documentation with TeX, use at least version 2023-09-19.19
 of texinfo.tex. There is a usable copy of texinfo.tex in the doc directory.
-You must also use at least version 7.0.1 of texindex and of makeinfo
-from the texinfo-7.0.1 distribution.
+You must also use at least version 7.1 of texindex and of makeinfo
+from the texinfo-7.1 distribution.
 
 INSTALLATION:
 
diff --git a/awklib/ChangeLog b/awklib/ChangeLog
index 1a840d44..34cb9352 100644
--- a/awklib/ChangeLog
+++ b/awklib/ChangeLog
@@ -1,3 +1,7 @@
+2023-10-19         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * Makefile.am: Replace gawktexi.in with gawk.texi.
+
 2023-05-07         Arnold D. Robbins     <arnold@skeeve.com>
 
        * 5.2.2: Release tar ball made.
diff --git a/awklib/Makefile.am b/awklib/Makefile.am
index 0eeccf9c..df881805 100644
--- a/awklib/Makefile.am
+++ b/awklib/Makefile.am
@@ -65,11 +65,11 @@ clean-local:
        rm -fr eg.old
        rm -fr grcat.dSYM pwcat.dSYM
 
-$(srcdir)/stamp-eg: $(srcdir)/../doc/gawktexi.in $(srcdir)/../doc/gawkinet.texi
+$(srcdir)/stamp-eg: $(srcdir)/../doc/gawk.texi $(srcdir)/../doc/gawkinet.texi
        cd $(srcdir) && \
        rm -fr eg && \
        rm -fr stamp-eg && \
-       $(AWKPROG) -f ./extract.awk ../doc/gawktexi.in ../doc/gawkinet.texi
+       $(AWKPROG) -f ./extract.awk ../doc/gawk.texi ../doc/gawkinet.texi
        @echo 'some makes are stupid and will not check a directory' > 
$(srcdir)/stamp-eg
        @echo 'against a file, so this file is a place holder. gack.' >> 
$(srcdir)/stamp-eg
 
diff --git a/awklib/Makefile.in b/awklib/Makefile.in
index 5b3a7d9a..28847cac 100644
--- a/awklib/Makefile.in
+++ b/awklib/Makefile.in
@@ -692,11 +692,11 @@ clean-local:
        rm -fr eg.old
        rm -fr grcat.dSYM pwcat.dSYM
 
-$(srcdir)/stamp-eg: $(srcdir)/../doc/gawktexi.in $(srcdir)/../doc/gawkinet.texi
+$(srcdir)/stamp-eg: $(srcdir)/../doc/gawk.texi $(srcdir)/../doc/gawkinet.texi
        cd $(srcdir) && \
        rm -fr eg && \
        rm -fr stamp-eg && \
-       $(AWKPROG) -f ./extract.awk ../doc/gawktexi.in ../doc/gawkinet.texi
+       $(AWKPROG) -f ./extract.awk ../doc/gawk.texi ../doc/gawkinet.texi
        @echo 'some makes are stupid and will not check a directory' > 
$(srcdir)/stamp-eg
        @echo 'against a file, so this file is a place holder. gack.' >> 
$(srcdir)/stamp-eg
 
diff --git a/build-aux/ChangeLog b/build-aux/ChangeLog
index 369ee1fd..8819d06f 100644
--- a/build-aux/ChangeLog
+++ b/build-aux/ChangeLog
@@ -1,3 +1,7 @@
+2023-10-19         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * texinfo.tex: Upated from Texinfo 7.1 distribution.
+
 2023-10-04         Arnold D. Robbins     <arnold@skeeve.com>
 
        * config.guess, config.sub, texinfo.tex: Sync from GNULIB.
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
index e8c382f5..c96d4d7b 100644
--- a/build-aux/texinfo.tex
+++ b/build-aux/texinfo.tex
@@ -1,5 +1,5 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-%
+% 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
@@ -212,7 +212,7 @@
 % @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
 % aren't perfect, it's not the end of the world, being an error message,
 % after all.
-%
+% 
 \def\errormsg{\begingroup \indexnofonts \doerrormsg}
 \def\doerrormsg#1{\errmessage{#1}}
 
@@ -425,7 +425,7 @@
   }%
 }
 
-% First remove any @comment, then any @c comment.  Pass the result on to
+% First remove any @comment, then any @c comment.  Pass the result on to 
 % \argremovespace.
 \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
 \def\argremovec#1\c#2\ArgTerm{\argremovespace#1$ $\ArgTerm}
@@ -1026,8 +1026,8 @@ where each line of input produces a line of output.}
         end
       end
     }
-    % The -2 in the arguments here gives all the input to TeX catcode 12
-    % (other) or 10 (space), preventing undefined control sequence errors. See
+    % The -2 in the arguments here gives all the input to TeX catcode 12 
+    % (other) or 10 (space), preventing undefined control sequence errors. See 
     % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
     %
   \endgroup
@@ -1129,7 +1129,7 @@ where each line of input produces a line of output.}
 % for display in the outlines, and in other places.  Thus, we have to
 % double any backslashes.  Otherwise, a name like "\node" will be
 % interpreted as a newline (\n), followed by o, d, e.  Not good.
-%
+% 
 % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
 % related messages.  The final outcome is that it is up to the TeX user
 % to double the backslashes and otherwise make the string valid, so
@@ -1421,7 +1421,7 @@ output) for that.)}
       % We use the node names as the destinations.
       %
       % Currently we prefix the section name with the section number
-      % for chapter and appendix headings only in order to avoid too much
+      % for chapter and appendix headings only in order to avoid too much 
       % horizontal space being required in the PDF viewer.
       \def\numchapentry##1##2##3##4{%
         \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}%
@@ -1444,7 +1444,7 @@ output) for that.)}
       % their "best" equivalent, based on the @documentencoding.  Too
       % much work for too little return.  Just use the ASCII equivalents
       % we use for the index sort strings.
-      %
+      % 
       \indexnofonts
       \setupdatafile
       % We can have normal brace characters in the PDF outlines, unlike
@@ -1670,7 +1670,7 @@ output) for that.)}
       % We use node names as destinations.
       %
       % Currently we prefix the section name with the section number
-      % for chapter and appendix headings only in order to avoid too much
+      % for chapter and appendix headings only in order to avoid too much 
       % horizontal space being required in the PDF viewer.
       \def\partentry##1##2##3##4{}% ignore parts in the outlines
       \def\numchapentry##1##2##3##4{%
@@ -2697,7 +2697,7 @@ end
 }
 
 % Commands to set the quote options.
-%
+% 
 \parseargdef\codequoteundirected{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -2743,7 +2743,7 @@ end
 % If we are in a monospaced environment, however, 1) always use \ttsl,
 % and 2) do not add an italic correction.
 \def\dosmartslant#1#2{%
-  \ifusingtt
+  \ifusingtt 
     {{\ttsl #2}\let\next=\relax}%
     {\def\next{{#1#2}\smartitaliccorrection}}%
   \next
@@ -2922,7 +2922,7 @@ end
   \gdef\codedash{\futurelet\next\codedashfinish}
   \gdef\codedashfinish{%
     \normaldash % always output the dash character itself.
-    %
+    % 
     % Now, output a discretionary to allow a line break, unless
     % (a) the next character is a -, or
     % (b) the preceding character is a -, or
@@ -3028,7 +3028,7 @@ end
         % For pdfTeX and LuaTeX
         \ifurefurlonlylink
           % PDF plus option to not display url, show just arg
-          \unhbox0
+          \unhbox0             
         \else
           % PDF, normally display both arg and url for consistency,
           % visibility, if the pdf is eventually used to print, etc.
@@ -3041,7 +3041,7 @@ end
           % For XeTeX
           \ifurefurlonlylink
             % PDF plus option to not display url, show just arg
-            \unhbox0
+            \unhbox0             
           \else
             % PDF, normally display both arg and url for consistency,
             % visibility, if the pdf is eventually used to print, etc.
@@ -3099,10 +3099,10 @@ end
   }
 }
 
-% By default we'll break after the special characters, but some people like to
-% break before the special chars, so allow that.  Also allow no breaking at
+% By default we'll break after the special characters, but some people like to 
+% break before the special chars, so allow that.  Also allow no breaking at 
 % all, for manual control.
-%
+% 
 \parseargdef\urefbreakstyle{%
   \def\txiarg{#1}%
   \ifx\txiarg\wordnone
@@ -3121,10 +3121,10 @@ end
 \def\wordnone{none}
 
 % Allow a ragged right output to aid breaking long URL's.  There can
-% be a break at the \allowbreak with no extra glue (if the existing stretch in
+% be a break at the \allowbreak with no extra glue (if the existing stretch in 
 % the line is sufficient), a break at the \penalty with extra glue added
 % at the end of the line, or no break at all here.
-%   Changing the value of the penalty and/or the amount of stretch affects how
+%   Changing the value of the penalty and/or the amount of stretch affects how 
 % preferable one choice is over the other.
 \def\urefallowbreak{%
   \penalty0\relax
@@ -3339,7 +3339,7 @@ $$%
 % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
 % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
 % except specified as a normal braced arg, so no newlines to worry about.
-%
+% 
 \def\outfmtnametex{tex}
 %
 \long\def\inlinefmt#1{\doinlinefmt #1,\finish}
@@ -3347,7 +3347,7 @@ $$%
   \def\inlinefmtname{#1}%
   \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
 }
-%
+% 
 % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
 % FMTNAME is tex, else ELSE-TEXT.
 \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
@@ -3363,7 +3363,7 @@ $$%
 % *right* brace they would have to use a command anyway, so they may as
 % well use a command to get a left brace too.  We could re-use the
 % delimiter character idea from \verb, but it seems like overkill.
-%
+% 
 \long\def\inlineraw{\tex \doinlineraw}
 \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
 \def\doinlinerawtwo#1,#2,\finish{%
@@ -3649,7 +3649,7 @@ $$%
 % for non-CM glyphs.  That is ec* for regular text and tc* for the text
 % companion symbols (LaTeX TS1 encoding).  Both are part of the ec
 % package and follow the same conventions.
-%
+% 
 \def\ecfont{\etcfont{e}}
 \def\tcfont{\etcfont{t}}
 %
@@ -3731,7 +3731,7 @@ $$%
               after the title page.}}%
 \def\setshortcontentsaftertitlepage{%
   \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
-              command; move your @shortcontents and @contents commands if you
+              command; move your @shortcontents and @contents commands if you 
               want the contents after the title page.}}%
 
 \parseargdef\shorttitlepage{%
@@ -3785,7 +3785,7 @@ $$%
 % don't worry much about spacing, ragged right.  This should be used
 % inside a \vbox, and fonts need to be set appropriately first. \par should
 % be specified before the end of the \vbox, since a vbox is a group.
-%
+% 
 \def\raggedtitlesettings{%
   \rm
   \hyphenpenalty=10000
@@ -4611,7 +4611,7 @@ $$%
 % Like \expandablevalue, but completely expandable (the \message in the
 % definition above operates at the execution level of TeX).  Used when
 % writing to auxiliary files, due to the expansion that \write does.
-% If flag is undefined, pass through an unexpanded @value command: maybe it
+% If flag is undefined, pass through an unexpanded @value command: maybe it 
 % will be set by the time it is read back in.
 %
 % NB flag names containing - or _ may not work here.
@@ -4635,7 +4635,7 @@ $$%
 
 % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
 % with @set.
-%
+% 
 % To get the special treatment we need for `@end ifset,' we call
 % \makecond and then redefine.
 %
@@ -4668,7 +4668,7 @@ $$%
 % without the @) is in fact defined.  We can only feasibly check at the
 % TeX level, so something like `mathcode' is going to considered
 % defined even though it is not a Texinfo command.
-%
+% 
 \makecond{ifcommanddefined}
 \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
 %
@@ -4774,7 +4774,7 @@ $$%
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
 \def\docodeindexxxx #1{\docind{\indexname}{#1}}
 
-
+
 % \definedummyword defines \#1 as \string\#1\space, thus effectively
 % preventing its expansion.  This is used only for control words,
 % not control letters, because the \space would be incorrect for
@@ -4791,7 +4791,7 @@ $$%
 \def\definedummyword  #1{\def#1{\string#1\space}}%
 \def\definedummyletter#1{\def#1{\string#1}}%
 
-% Used for the aux, toc and index files to prevent expansion of Texinfo
+% Used for the aux, toc and index files to prevent expansion of Texinfo 
 % commands.  Most of the commands are controlled through the
 % \ifdummies conditional.
 %
@@ -5081,7 +5081,7 @@ $$%
   \let\value\indexnofontsvalue
 }
 
-
+
 
 
 % #1 is the index name, #2 is the entry text.
@@ -5122,7 +5122,7 @@ $$%
   \ifx\suffix\indexisfl\def\suffix{f1}\fi
   % Open the file
   \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
-  % Using \immediate above here prevents an object entering into the current
+  % Using \immediate above here prevents an object entering into the current 
   % box, which could confound checks such as those in \safewhatsit for
   % preceding skips.
   \typeout{Writing index file \jobname.\suffix}%
@@ -5174,7 +5174,7 @@ $$%
   \ifx\segment\isfinish
   \else
     %
-    % Fully expand the segment, throwing away any @sortas directives, and
+    % Fully expand the segment, throwing away any @sortas directives, and 
     % trim spaces.
     \edef\trimmed{\segment}%
     \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
@@ -5238,12 +5238,12 @@ $$%
 % the current value of \escapechar.
 \def\escapeisbackslash{\escapechar=`\\}
 
-% Use \ in index files by default.  texi2dvi didn't support @ as the escape
-% character (as it checked for "\entry" in the files, and not "@entry").  When
-% the new version of texi2dvi has had a chance to become more prevalent, then
-% the escape character can change back to @ again.  This should be an easy
-% change to make now because both @ and \ are only used as escape characters in
-% index files, never standing for themselves.
+% Use \ in index files by default.  texi2dvi didn't support @ as the escape 
+% character (as it checked for "\entry" in the files, and not "@entry").  When 
+% the new version of texi2dvi has had a chance to become more prevalent, then 
+% the escape character can change back to @ again.  This should be an easy 
+% change to make now because both @ and \ are only used as escape characters 
in 
+% index files, never standing for themselves. 
 %
 \set txiindexescapeisbackslash
 
@@ -5266,7 +5266,7 @@ $$%
   \def\}{\rbracechar{}}%
   \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
   %
-  % Split the entry into primary entry and any subentries, and get the index
+  % Split the entry into primary entry and any subentries, and get the index 
   % sort key.
   \splitindexentry\indextext
   %
@@ -5447,18 +5447,18 @@ $$%
     \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
       \ifflagclear{txiskipindexfileswithbackslash}{%
 \errmessage{%
-ERROR: A sorted index file in an obsolete format was skipped.
+ERROR: A sorted index file in an obsolete format was skipped.  
 To fix this problem, please upgrade your version of 'texi2dvi'
 or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
-If you are using an old version of 'texindex' (part of the Texinfo
+If you are using an old version of 'texindex' (part of the Texinfo 
 distribution), you may also need to upgrade to a newer version (at least 6.0).
 You may be able to typeset the index if you run
 'texindex \jobname.\indexname' yourself.
-You could also try setting the 'txiindexescapeisbackslash' flag by
+You could also try setting the 'txiindexescapeisbackslash' flag by 
 running a command like
-'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do
+'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do 
 this, Texinfo will try to use index files in the old format.
-If you continue to have problems, deleting the index files and starting again
+If you continue to have problems, deleting the index files and starting again 
 might help (with 'rm \jobname.?? \jobname.??s')%
 }%
       }{%
@@ -5531,7 +5531,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   % bottom of a column to reduce an increase in inter-line spacing.
   \nobreak
   \vskip 0pt plus 5\baselineskip
-  \penalty -300
+  \penalty -300 
   \vskip 0pt plus -5\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
@@ -5851,7 +5851,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \newbox\balancedcolumns
 \setbox\balancedcolumns=\vbox{shouldnt see this}%
 %
-% Only called for the last of the double column material.  \doublecolumnout
+% Only called for the last of the double column material.  \doublecolumnout 
 % does the others.
 \def\balancecolumns{%
   \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
@@ -5879,7 +5879,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
     }%
     % Now the left column is in box 1, and the right column in box 3.
     %
-    % Check whether the left column has come out higher than the page itself.
+    % Check whether the left column has come out higher than the page itself.  
     % (Note that we have doubled \vsize for the double columns, so
     % the actual height of the page is 0.5\vsize).
     \ifdim2\ht1>\vsize
@@ -6176,7 +6176,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 \let\top\unnumbered
 
 % Sections.
-%
+% 
 \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
 \def\seczzz#1{%
   \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
@@ -6199,7 +6199,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Subsections.
-%
+% 
 % normally calls numberedsubseczzz:
 \outer\parseargdef\numberedsubsec{\numhead2{#1}}
 \def\numberedsubseczzz#1{%
@@ -6224,7 +6224,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Subsubsections.
-%
+% 
 % normally numberedsubsubseczzz:
 \outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
 \def\numberedsubsubseczzz#1{%
@@ -7409,7 +7409,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % @indentedblock is like @quotation, but indents only on the left and
 % has no optional argument.
-%
+% 
 \makedispenvdef{indentedblock}{\indentedblockstart}
 %
 \def\indentedblockstart{%
@@ -7723,7 +7723,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % @deftypefnnewline on|off says whether the return type of typed functions
 % are printed on their own line.  This affects @deftypefn, @deftypefun,
 % @deftypeop, and @deftypemethod.
-%
+% 
 \parseargdef\deftypefnnewline{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -7893,7 +7893,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
       \tclose{\temp}% typeset the return type
       \ifrettypeownline
         % put return type on its own line; prohibit line break following:
-        \hfil\vadjust{\nobreak}\break
+        \hfil\vadjust{\nobreak}\break  
       \else
         \space  % type on same line, so just followed by a space
       \fi
@@ -8043,7 +8043,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \scantokens{#1@comment}%
   %
   % The \comment is to remove the \newlinechar added by \scantokens, and
-  % can be noticed by \parsearg.  Note \c isn't used because this means cedilla
+  % can be noticed by \parsearg.  Note \c isn't used because this means 
cedilla 
   % in math mode.
 }
 
@@ -8238,7 +8238,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % list to some hook where the argument is to be expanded.  If there are
 % less than 10 arguments that hook is to be replaced by ##N where N
 % is the position in that list, that is to say the macro arguments are to be
-% defined `a la TeX in the macro body.
+% defined `a la TeX in the macro body.  
 %
 % That gets used by \mbodybackslash (above).
 %
@@ -8272,7 +8272,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 %
 % Read recursive and nonrecursive macro bodies. (They're different since
 % rec and nonrec macros end differently.)
-%
+% 
 % We are in \macrobodyctxt, and the \xdef causes backslashes in the macro
 % body to be transformed.
 % Set \macrobody to the body of the macro, and call \macrodef.
@@ -8307,7 +8307,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % twice the \macarg.BLAH macros does not cost too much processing power.
 \def\parsemmanyargdef@@#1,{%
   \if#1;\let\next=\relax
-  \else
+  \else 
     \let\next=\parsemmanyargdef@@
     \edef\tempb{\eatspaces{#1}}%
     \expandafter\def\expandafter\tempa
@@ -8392,7 +8392,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Replace arguments by their values in the macro body, and place the result
 % in macro \@tempa.
-%
+% 
 \def\macvalstoargs@{%
   %  To do this we use the property that token registers that are \the'ed
   % within an \edef  expand only once. So we are going to place all argument
@@ -8416,9 +8416,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
   }
 
-% Define the named-macro outside of this group and then close this group.
-%
-\def\macargexpandinbody@{%
+% Define the named-macro outside of this group and then close this group. 
+% 
+\def\macargexpandinbody@{% 
   \expandafter
   \endgroup
   \macargdeflist@
@@ -8456,7 +8456,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 }
 
 % Trailing missing arguments are set to empty.
-%
+% 
 \def\setemptyargvalues@{%
   \ifx\paramlist\nilm@
     \let\next\macargexpandinbody@
@@ -8534,7 +8534,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \else % at most 9
     \ifnum\paramno<10\relax
       % @MACNAME sets the context for reading the macro argument
-      % @MACNAME@@ gets the argument, processes backslashes and appends a
+      % @MACNAME@@ gets the argument, processes backslashes and appends a 
       % comma.
       % @MACNAME@@@ removes braces surrounding the argument list.
       % @MACNAME@@@@ scans the macro body with arguments substituted.
@@ -8578,11 +8578,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % Call #1 with a list of tokens #2, with any doubled backslashes in #2
 % compressed to one.
 %
-% This implementation works by expansion, and not execution (so we cannot use
-% \def or similar).  This reduces the risk of this failing in contexts where
-% complete expansion is done with no execution (for example, in writing out to
+% This implementation works by expansion, and not execution (so we cannot use 
+% \def or similar).  This reduces the risk of this failing in contexts where 
+% complete expansion is done with no execution (for example, in writing out to 
 % an auxiliary file for an index entry).
-%
+% 
 % State is kept in the input stream: the argument passed to
 % @look_ahead, @gobble_and_check_finish and @add_segment is
 %
@@ -8604,11 +8604,11 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % #3 - NEXT_TOKEN
 % #4 used to look ahead
 %
-% If the next token is not a backslash, process the rest of the argument;
+% If the next token is not a backslash, process the rest of the argument; 
 % otherwise, remove the next token.
 @gdef@look_ahead#1!#2#3#4{%
   @ifx#4\%
-   @expandafter@gobble_and_check_finish
+   @expandafter@gobble_and_check_finish 
   @else
    @expandafter@add_segment
   @fi#1!{#2}#4#4%
@@ -8632,9 +8632,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % #3 - NEXT_TOKEN
 % #4 is input stream until next backslash
 %
-% Input stream is either at the start of the argument, or just after a
-% backslash sequence, either a lone backslash, or a doubled backslash.
-% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% Input stream is either at the start of the argument, or just after a 
+% backslash sequence, either a lone backslash, or a doubled backslash.  
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish, 
 % finish; otherwise, append to ARG_RESULT the segment of the argument up until
 % the next backslash.  PENDING_BACKSLASH contains a backslash to represent
 % a backslash just before the start of the input stream that has not been
@@ -8646,13 +8646,13 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   % append the pending backslash to the result, followed by the next segment
   @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
   % this @fi is discarded by @look_ahead.
-  % we can't get rid of it with \expandafter because we don't know how
+  % we can't get rid of it with \expandafter because we don't know how 
   % long #4 is.
 }
 
 % #1 - THE_MACRO
 % #2 - ARG_RESULT
-% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the 
 % conditional.
 @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
 
@@ -8664,7 +8664,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % for reading the argument (slightly different in the two cases).  Then,
 % to read the argument, in the whole-line case, it then calls the regular
 % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
-%
+% 
 \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
 \def\braceorlinexxx{%
   \ifx\nchar\bgroup
@@ -8787,7 +8787,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 
 % Used so that the @top node doesn't have to be wrapped in an @ifnottex
 % conditional.
-% \doignore goes to more effort to skip nested conditionals but we don't need
+% \doignore goes to more effort to skip nested conditionals but we don't need 
 % that here.
 \def\omittopnode{%
    \ifx\lastnode\wordTop
@@ -8869,7 +8869,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
 % automatically in xrefs, if the third arg is not explicitly specified.
 % This was provided as a "secret" @set xref-automatic-section-title
 % variable, now it's official.
-%
+% 
 \parseargdef\xrefautomaticsectiontitle{%
   \def\temp{#1}%
   \ifx\temp\onword
@@ -8885,7 +8885,7 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi\fi
 }
 
-%
+% 
 % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
 % the node name, #2 the name of the Info cross-reference, #3 the printed
 % node name, #4 the name of the Info file, #5 the name of the printed
@@ -9083,20 +9083,20 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \space\putwordpage\tie\refx{#1-pg}}
 
 % Output a cross-manual xref to #1.  Used just above (twice).
-%
+% 
 % Only include the text "Section ``foo'' in" if the foo is neither
 % missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
 % "see The Foo Manual", the idea being to refer to the whole manual.
-%
+% 
 % But, this being TeX, we can't easily compare our node name against the
 % string "Top" while ignoring the possible spaces before and after in
 % the input.  By adding the arbitrary 7sp below, we make it much less
 % likely that a real node name would have the same width as "Top" (e.g.,
 % in a monospaced font).  Hopefully it will never happen in practice.
-%
+% 
 % For the same basic reason, we retypeset the "Top" at every
 % reference, since the current font is indeterminate.
-%
+% 
 \def\crossmanualxref#1{%
   \setbox\toprefbox = \hbox{Top\kern7sp}%
   \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
@@ -9188,9 +9188,9 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \fi
 }
 
-% This is the macro invoked by entries in the aux file.  Define a control
-% sequence for a cross-reference target (we prepend XR to the control sequence
-% name to avoid collisions).  The value is the page number.  If this is a float
+% This is the macro invoked by entries in the aux file.  Define a control 
+% sequence for a cross-reference target (we prepend XR to the control sequence 
+% name to avoid collisions).  The value is the page number.  If this is a 
float 
 % type, we have more work to do.
 %
 \def\xrdef#1#2{%
@@ -9206,10 +9206,10 @@ might help (with 'rm \jobname.?? \jobname.??s')%
   \bgroup
     \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
   \egroup
-  % We put the \gdef inside a group to avoid the definitions building up on
-  % TeX's save stack, which can cause it to run out of space for aux files with
+  % We put the \gdef inside a group to avoid the definitions building up on 
+  % TeX's save stack, which can cause it to run out of space for aux files 
with 
   % thousands of lines.  \gdef doesn't use the save stack, but \csname does
-  % when it defines an unknown control sequence as \relax.
+  % when it defines an unknown control sequence as \relax. 
   %
   % Was that xref control sequence that we just defined for a float?
   \expandafter\iffloat\csname XR\safexrefname\endcsname
@@ -10406,7 +10406,7 @@ directory should work if nowhere else does.}
         \uppercase{.}
       \endgroup
     \else
-      \errhelp = \EMsimple
+      \errhelp = \EMsimple     
       \errmessage{Unicode character U+#1 not supported, sorry}%
     \fi
   \else
@@ -10439,7 +10439,7 @@ directory should work if nowhere else does.}
     \countUTFz = "#1\relax
     \begingroup
       \parseXMLCharref
-
+    
       % Give \u8:... its definition.  The sequence of seven \expandafter's
       % expands after the \gdef three times, e.g.
       %
@@ -10451,7 +10451,7 @@ directory should work if nowhere else does.}
       \expandafter\expandafter
       \expandafter\expandafter
       \expandafter\gdef       \UTFviiiTmp{#2}%
-      %
+      % 
       \expandafter\ifx\csname uni:#1\endcsname \relax \else
        \message{Internal error, already defined: #1}%
       \fi
@@ -10490,7 +10490,7 @@ directory should work if nowhere else does.}
     \divide\countUTFz by 64
     \countUTFy = \countUTFz  % Save to be the future value of \countUTFz.
     \multiply\countUTFz by 64
-
+    
     % \countUTFz is now \countUTFx with the last 5 bits cleared.  Subtract
     % in order to get the last five bits.
     \advance\countUTFx by -\countUTFz
@@ -10525,7 +10525,7 @@ directory should work if nowhere else does.}
 % U+0080..U+00FF = 
https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
 % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
 % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
-%
+% 
 % Many of our renditions are less than wonderful, and all the missing
 % characters are available somewhere.  Loading the necessary fonts
 % awaits user request.  We can't truly support Unicode without
@@ -11770,7 +11770,7 @@ directory should work if nowhere else does.}
 \def\texinfochars{%
   \let< = \activeless
   \let> = \activegtr
-  \let~ = \activetilde
+  \let~ = \activetilde 
   \let^ = \activehat
   \setregularquotes
   \let\b = \strong
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 931efe69..3baa4282 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,11 @@
+2023-10-19         Arnold D. Robbins     <arnold@skeeve.com>
+
+       * gawk.texi: Renamed from gawktexi.in. Sidebars converted to
+       @cartouche for Texinfo 7.1.
+       * sidebar.awk: Removed.
+       * texinfo.tex: Updated from Texinfo 7.1 distribution.
+       * Makefile.am: Converted gawktexi.in to gawk.texi.
+
 2023-10-19         Arnold D. Robbins     <arnold@skeeve.com>
 
        * gawktexi.in: Update the date, add some indexing, removing FIXMEs.
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 10fafd37..a8d8dfd7 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -43,7 +43,6 @@ EXTRA_DIST = ChangeLog ChangeLog.0 ChangeLog.1 \
        awkcard.in awkforai.txt texinfo.tex cardfonts \
        $(fig_images) $(txt_images) $(eps_images) $(pdf_images) \
        $(html_images) \
-       gawktexi.in sidebar.awk \
        it \
        macros colors no.colors $(man_MANS) \
        lflashlight-small.xpic lflashlight.eps lflashlight.pdf \
@@ -75,9 +74,6 @@ AWKCARD = awkcard.ps
 # to ensure that awkcard.tr is processed by tbl.
 #AWKCARD = awkcard.nc
 
-gawk.texi: $(srcdir)/gawktexi.in $(srcdir)/sidebar.awk
-       awk -f $(srcdir)/sidebar.awk < $(srcdir)/gawktexi.in > gawk.texi
-
 postscript: gawk.ps gawkinet.ps gawkworkflow.ps pm-gawk.ps gawk.1.ps 
gawkbug.1.ps pm-gawk.1.ps $(AWKCARD)
 
 pdf-local: postscript gawk.pdf gawkinet.pdf awkcard.pdf gawk.1.pdf 
gawkbug.1.pdf pm-gawk.1.pdf pm-gawk.pdf
@@ -127,8 +123,8 @@ awkcard.pdf: awkcard.ps
 spell: spellmanual spellworkflow spellmanpage spellinet
 
 spellmanual:
-       @echo ==== gawktexi.in ====;
-       export LC_ALL=C ; spell "$(srcdir)"/gawktexi.in | \
+       @echo ==== gawk.texi ====;
+       export LC_ALL=C ; spell "$(srcdir)"/gawk.texi | \
        sort -u | comm -23 - "$(srcdir)"/wordlist
 
 spellworkflow:
diff --git a/doc/Makefile.in b/doc/Makefile.in
index ab9f7429..c6745dfc 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -380,7 +380,6 @@ EXTRA_DIST = ChangeLog ChangeLog.0 ChangeLog.1 \
        awkcard.in awkforai.txt texinfo.tex cardfonts \
        $(fig_images) $(txt_images) $(eps_images) $(pdf_images) \
        $(html_images) \
-       gawktexi.in sidebar.awk \
        it \
        macros colors no.colors $(man_MANS) \
        lflashlight-small.xpic lflashlight.eps lflashlight.pdf \
@@ -933,9 +932,6 @@ uninstall-man: uninstall-man1
 # to ensure that awkcard.tr is processed by tbl.
 #AWKCARD = awkcard.nc
 
-gawk.texi: $(srcdir)/gawktexi.in $(srcdir)/sidebar.awk
-       awk -f $(srcdir)/sidebar.awk < $(srcdir)/gawktexi.in > gawk.texi
-
 postscript: gawk.ps gawkinet.ps gawkworkflow.ps pm-gawk.ps gawk.1.ps 
gawkbug.1.ps pm-gawk.1.ps $(AWKCARD)
 
 pdf-local: postscript gawk.pdf gawkinet.pdf awkcard.pdf gawk.1.pdf 
gawkbug.1.pdf pm-gawk.1.pdf pm-gawk.pdf
@@ -985,8 +981,8 @@ awkcard.pdf: awkcard.ps
 spell: spellmanual spellworkflow spellmanpage spellinet
 
 spellmanual:
-       @echo ==== gawktexi.in ====;
-       export LC_ALL=C ; spell "$(srcdir)"/gawktexi.in | \
+       @echo ==== gawk.texi ====;
+       export LC_ALL=C ; spell "$(srcdir)"/gawk.texi | \
        sort -u | comm -23 - "$(srcdir)"/wordlist
 
 spellworkflow:
diff --git a/doc/gawk.info b/doc/gawk.info
index 84807c15..3f99c67b 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -1,23 +1,23 @@
-This is gawk.info, produced by makeinfo version 7.0.1 from gawk.texi.
+This is gawk.info, produced by makeinfo version 7.1 from gawk.texi.
 
-Copyright © 1989, 1991, 1992, 1993, 1996–2005, 2007, 2009–2023
+Copyright © 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2023
 Free Software Foundation, Inc.
 
 
-   This is Edition 5.3 of ‘GAWK: Effective AWK Programming: A User’s
+   This is Edition 5.3 of ‘GAWK: Effective AWK Programming: A User's
 Guide for GNU Awk’, for the 5.3.0 (or later) version of the GNU
 implementation of AWK.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
 any later version published by the Free Software Foundation; with the
-Invariant Sections being “GNU General Public License”, with the
-Front-Cover Texts being “A GNU Manual”, and with the Back-Cover Texts as
+Invariant Sections being "GNU General Public License", with the
+Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts as
 in (a) below.  A copy of the license is included in the section entitled
-“GNU Free Documentation License”.
+"GNU Free Documentation License".
 
-  a. The FSF’s Back-Cover Text is: “You have the freedom to copy and
-     modify this GNU manual.”
+  a. The FSF's Back-Cover Text is: "You have the freedom to copy and
+     modify this GNU manual."
 INFO-DIR-SECTION Text creation and manipulation
 START-INFO-DIR-ENTRY
 * Gawk: (gawk).                 A text scanning and processing language.
@@ -37,24 +37,24 @@ General Introduction
 This file documents ‘awk’, a program that you can use to select
 particular records in a file and perform operations upon them.
 
-   Copyright © 1989, 1991, 1992, 1993, 1996–2005, 2007, 2009–2023
+   Copyright © 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2023
 Free Software Foundation, Inc.
 
 
-   This is Edition 5.3 of ‘GAWK: Effective AWK Programming: A User’s
+   This is Edition 5.3 of ‘GAWK: Effective AWK Programming: A User's
 Guide for GNU Awk’, for the 5.3.0 (or later) version of the GNU
 implementation of AWK.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
 any later version published by the Free Software Foundation; with the
-Invariant Sections being “GNU General Public License”, with the
-Front-Cover Texts being “A GNU Manual”, and with the Back-Cover Texts as
+Invariant Sections being "GNU General Public License", with the
+Front-Cover Texts being "A GNU Manual", and with the Back-Cover Texts as
 in (a) below.  A copy of the license is included in the section entitled
-“GNU Free Documentation License”.
+"GNU Free Documentation License".
 
-  a. The FSF’s Back-Cover Text is: “You have the freedom to copy and
-     modify this GNU manual.”
+  a. The FSF's Back-Cover Text is: "You have the freedom to copy and
+     modify this GNU manual."
 
 * Menu:
 
@@ -160,7 +160,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * AWKLIBPATH Variable::                 Searching directories for
                                         ‘awk’ shared libraries.
 * Other Environment Variables::         The environment variables.
-* Exit Status::                         ‘gawk’’s exit status.
+* Exit Status::                         ‘gawk’'s exit status.
 * Include Files::                       Including other files into your
                                         program.
 * Loading Shared Libraries::            Loading shared libraries into your
@@ -286,7 +286,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Strings And Numbers::                 How ‘awk’ Converts Between
                                         Strings And Numbers.
 * Locale influences conversions::       How the locale may affect conversions.
-* All Operators::                       ‘gawk’’s operators.
+* All Operators::                       ‘gawk’'s operators.
 * Arithmetic Ops::                      Arithmetic operations (‘+’,
                                         ‘-’, etc.)
 * Concatenation::                       Concatenating strings.
@@ -295,8 +295,8 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Increment Ops::                       Incrementing the numeric value of a
                                         variable.
 * Truth Values and Conditions::         Testing for true and false.
-* Truth Values::                        What is “true” and what is
-                                        “false”.
+* Truth Values::                        What is "true" and what is
+                                        "false".
 * Typing and Comparison::               How variables acquire types and how
                                         this affects comparison of numbers and
                                         strings with ‘<’, etc.
@@ -304,9 +304,9 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Comparison Operators::                The comparison operators.
 * POSIX String Comparison::             String comparison with POSIX rules.
 * Boolean Ops::                         Combining comparison expressions using
-                                        boolean operators ‘||’ (“or”),
-                                        ‘&&’ (“and”) and ‘!’
-                                        (“not”).
+                                        boolean operators ‘||’ ("or"),
+                                        ‘&&’ ("and") and ‘!’
+                                        ("not").
 * Conditional Exp::                     Conditional expressions select between
                                         two subexpressions under control of a
                                         third subexpression.
@@ -369,7 +369,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Array Example::                       Basic Example of an Array
 * Scanning an Array::                   A variation of the ‘for’
                                         statement. It loops through the
-                                        indices of an array’s existing
+                                        indices of an array's existing
                                         elements.
 * Controlling Scanning::                Controlling the order in which arrays
                                         are scanned.
@@ -411,7 +411,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Function Example::                    An example function definition and
                                         what it does.
 * Function Calling::                    Calling user-defined functions.
-* Calling A Function::                  Don’t use spaces.
+* Calling A Function::                  Don't use spaces.
 * Variable Scope::                      Controlling variable scope.
 * Pass By Value/Reference::             Passing parameters.
 * Function Caveats::                    Other points to know about functions.
@@ -600,7 +600,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Symbol Table Access::                 Functions for accessing global
                                         variables.
 * Symbol table by name::                Accessing variables by name.
-* Symbol table by cookie::              Accessing variables by “cookie”.
+* Symbol table by cookie::              Accessing variables by "cookie".
 * Cached values::                       Creating and using cached values.
 * Array Manipulation::                  Functions for working with arrays.
 * Array Data Types::                    Data types for working with arrays.
@@ -614,7 +614,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Extension GMP/MPFR Versioning::       Version information about GMP and
                                         MPFR.
 * Extension API Informational Variables:: Variables providing information about
-                                        ‘gawk’’s invocation.
+                                        ‘gawk’'s invocation.
 * Extension API Boilerplate::           Boilerplate code for using the API.
 * Changes from API V1::                 Changes from V1 of the API.
 * Finding Extensions::                  How ‘gawk’ finds compiled
@@ -650,7 +650,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * SVR4::                                Minor changes between System V
                                         Releases 3.1 and 4.
 * POSIX::                               New features from the POSIX standard.
-* BTL::                                 New features from Brian Kernighan’s
+* BTL::                                 New features from Brian Kernighan's
                                         version of ‘awk’.
 * POSIX/GNU::                           The extensions in ‘gawk’ not
                                         in POSIX ‘awk’.
@@ -673,7 +673,7 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Compiling with MPFR::                 Building with MPFR.
 * Shell Startup Files::                 Shell convenience functions.
 * Additional Configuration Options::    Other compile-time options.
-* Configuration Philosophy::            How it’s all supposed to work.
+* Configuration Philosophy::            How it's all supposed to work.
 * Compiling from Git::                  Compiling from Git.
 * Building the Documentation::          Building the Documentation.
 * Non-Unix Installation::               Installation on Other Operating
@@ -748,7 +748,7 @@ Foreword to the Third Edition
 *****************************
 
 Arnold Robbins and I are good friends.  We were introduced in 1990 by
-circumstances—and our favorite programming language, AWK. The
+circumstances--and our favorite programming language, AWK. The
 circumstances started a couple of years earlier.  I was working at a new
 job and noticed an unplugged Unix computer sitting in the corner.  No
 one knew how to use it, and neither did I. However, a couple of days
@@ -757,15 +757,15 @@ day, I began the transition from statistician to Unix 
programmer.
 
    On one of many trips to the library or bookstore in search of books
 on Unix, I found the gray AWK book, a.k.a. Alfred V. Aho, Brian W.
-Kernighan, and Peter J. Weinberger’s ‘The AWK Programming Language’
-(Addison-Wesley, 1988).  ‘awk’’s simple programming paradigm—find a
-pattern in the input and then perform an action—often reduced complex or
-tedious data manipulations to a few lines of code.  I was excited to try
-my hand at programming in AWK.
+Kernighan, and Peter J. Weinberger's ‘The AWK Programming Language’
+(Addison-Wesley, 1988).  ‘awk’'s simple programming paradigm--find a
+pattern in the input and then perform an action--often reduced complex
+or tedious data manipulations to a few lines of code.  I was excited to
+try my hand at programming in AWK.
 
    Alas, the ‘awk’ on my computer was a limited version of the language
-described in the gray book.  I discovered that my computer had “old
-‘awk’” and the book described “new ‘awk’.” I learned that this 
was
+described in the gray book.  I discovered that my computer had "old
+‘awk’" and the book described "new ‘awk’."  I learned that this was
 typical; the old version refused to step aside or relinquish its name.
 If a system had a new ‘awk’, it was invariably called ‘nawk’, and few
 systems had it.  The best way to get a new ‘awk’ was to ‘ftp’ the 
source
@@ -773,7 +773,7 @@ code for ‘gawk’ from ‘prep.ai.mit.edu’.  ‘gawk’ 
was a version of new
 ‘awk’ written by David Trueman and Arnold, and available under the GNU
 General Public License.
 
-   (Incidentally, it’s no longer difficult to find a new ‘awk’.  
‘gawk’
+   (Incidentally, it's no longer difficult to find a new ‘awk’.  ‘gawk’
 ships with GNU/Linux, and you can download binaries or source code for
 almost any system; my wife uses ‘gawk’ on her VMS box.)
 
@@ -791,8 +791,8 @@ support language extensions added after publication of 
‘The AWK
 Programming Language’.
 
    Frankly, if our roles had been reversed, I would not have been so
-open and we probably would have never met.  I’m glad we did meet.  He is
-an AWK expert’s AWK expert and a genuinely nice person.  Arnold
+open and we probably would have never met.  I'm glad we did meet.  He is
+an AWK expert's AWK expert and a genuinely nice person.  Arnold
 contributes significant amounts of his expertise and time to the Free
 Software Foundation.
 
@@ -802,10 +802,10 @@ definitive reference to the AWK language as defined by 
the 1987 Bell
 Laboratories release and codified in the 1992 POSIX Utilities standard.
 
    On the other hand, the novice AWK programmer can study a wealth of
-practical programs that emphasize the power of AWK’s basic idioms:
+practical programs that emphasize the power of AWK's basic idioms:
 data-driven control flow, pattern matching with regular expressions, and
 associative arrays.  Those looking for something new can try out
-‘gawk’’s interface to network protocols via special ‘/inet’ files.
+‘gawk’'s interface to network protocols via special ‘/inet’ files.
 
    The programs in this book make clear that an AWK program is typically
 much smaller and faster to develop than a counterpart written in C.
@@ -819,7 +819,7 @@ counts.  I recently experimented with an algorithm that for 
n lines of
 input, exhibited ~ C n^2 performance, while theory predicted ~ C n log n
 behavior.  A few minutes poring over the ‘awkprof.out’ profile
 pinpointed the problem to a single line of code.  ‘pgawk’ is a welcome
-addition to my programmer’s toolbox.
+addition to my programmer's toolbox.
 
    Arnold has distilled over a decade of experience writing and using
 AWK programs, and developing ‘gawk’, into this book.  If you use AWK or
@@ -835,8 +835,8 @@ File: gawk.info,  Node: Foreword4,  Next: Preface,  Prev: 
Foreword3,  Up: Top
 Foreword to the Fourth Edition
 ******************************
 
-Some things don’t change.  Thirteen years ago I wrote: “If you use AWK
-or want to learn how, then read this book.” True then, and still true
+Some things don't change.  Thirteen years ago I wrote: "If you use AWK
+or want to learn how, then read this book."  True then, and still true
 today.
 
    Learning to use a programming language is about more than mastering
@@ -884,7 +884,7 @@ with the proper options or environment variables, it is 
fully compatible
 with the POSIX(1) specification of the ‘awk’ language and with the Unix
 version of ‘awk’ maintained by Brian Kernighan.  This means that all
 properly written ‘awk’ programs should work with ‘gawk’.  So most of 
the
-time, we don’t distinguish between ‘gawk’ and other ‘awk’
+time, we don't distinguish between ‘gawk’ and other ‘awk’
 implementations.
 
    Using ‘awk’ you can:
@@ -920,7 +920,7 @@ such as input/output (I/O) redirection and pipes.
    Implementations of the ‘awk’ language are available for many
 different computing environments.  This Info file, while describing the
 ‘awk’ language in general, also describes the particular implementation
-of ‘awk’ called ‘gawk’ (which stands for “GNU ‘awk’”).  
‘gawk’ runs on a
+of ‘awk’ called ‘gawk’ (which stands for "GNU ‘awk’").  ‘gawk’ 
runs on a
 broad range of Unix systems, ranging from Intel-architecture PC-based
 computers up through large-scale systems.  ‘gawk’ has also been ported
 to macOS, z/OS, Microsoft Windows (all versions), and OpenVMS.(3)
@@ -979,8 +979,8 @@ version made the programming language more powerful, 
introducing
 user-defined functions, multiple input streams, and computed regular
 expressions.  This new version became widely available with Unix System
 V Release 3.1 (1987).  The version in System V Release 4 (1989) added
-some new features and cleaned up the behavior in some of the “dark
-corners” of the language.  The specification for ‘awk’ in the POSIX
+some new features and cleaned up the behavior in some of the "dark
+corners" of the language.  The specification for ‘awk’ in the POSIX
 Command Language and Utilities standard further clarified the language.
 Both the ‘gawk’ designers and the original ‘awk’ designers at Bell
 Laboratories provided feedback for the POSIX specification.
@@ -1015,11 +1015,11 @@ A Rose by Any Other Name
 
 The ‘awk’ language has evolved over the years.  Full details are
 provided in *note Language History::.  The language described in this
-Info file is often referred to as “new ‘awk’.” By analogy, the original
-version of ‘awk’ is referred to as “old ‘awk’.”
+Info file is often referred to as "new ‘awk’."  By analogy, the original
+version of ‘awk’ is referred to as "old ‘awk’."
 
    On most current systems, when you run the ‘awk’ utility you get some
-version of new ‘awk’.(1)  If your system’s standard ‘awk’ is the old
+version of new ‘awk’.(1)  If your system's standard ‘awk’ is the old
 one, you will see something like this if you try the following test
 program:
 
@@ -1048,10 +1048,10 @@ Using This Book
 
 The term ‘awk’ refers to a particular program as well as to the language
 you use to tell this program what to do.  When we need to be careful, we
-call the language “the ‘awk’ language,” and the program “the 
‘awk’
-utility.” This Info file explains both how to write programs in the
-‘awk’ language and how to run the ‘awk’ utility.  The term “‘awk’
-program” refers to a program written by you in the ‘awk’ programming
+call the language "the ‘awk’ language," and the program "the ‘awk’
+utility."  This Info file explains both how to write programs in the
+‘awk’ language and how to run the ‘awk’ utility.  The term "‘awk’
+program" refers to a program written by you in the ‘awk’ programming
 language.
 
    Primarily, this Info file explains the features of ‘awk’ as defined
@@ -1064,7 +1064,7 @@ it notes any ‘gawk’ features that are not in the 
POSIX standard for
    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.”
+heading "sidebar."
 
    Most of the time, the examples use complete ‘awk’ programs.  Some of
 the more advanced minor nodes show only the part of the ‘awk’ program
@@ -1109,7 +1109,7 @@ in *note Sample Programs::, should be of interest.
           record is matched, and the predefined variables ‘awk’ and
           ‘gawk’ use.
 
-        − *note Arrays::, covers ‘awk’’s one-and-only data structure:
+        − *note Arrays::, covers ‘awk’'s one-and-only data structure:
           the associative array.  Deleting array elements and whole
           arrays is described, as well as sorting arrays in ‘gawk’.  The
           major node also describes how ‘gawk’ provides arrays of
@@ -1171,7 +1171,7 @@ in *note Sample Programs::, should be of interest.
           to report bugs in ‘gawk’ and where to get other freely
           available ‘awk’ implementations.
 
-        − *note Notes::, describes how to disable ‘gawk’’s extensions,
+        − *note Notes::, describes how to disable ‘gawk’'s extensions,
           as well as how to contribute new code to ‘gawk’, and some
           possible future directions for ‘gawk’ development.
 
@@ -1181,7 +1181,7 @@ in *note Sample Programs::, should be of interest.
 
         − The *note Glossary::, defines most, if not all, of the
           significant terms used throughout the Info file.  If you find
-          terms that you aren’t familiar with, try looking them up here.
+          terms that you aren't familiar with, try looking them up here.
 
         − *note Copying::, and *note GNU Free Documentation License::,
           present the licenses that cover the ‘gawk’ source code and
@@ -1190,7 +1190,7 @@ in *note Sample Programs::, should be of interest.
    ---------- Footnotes ----------
 
    (1) All such differences appear in the index under the entry
-“differences in ‘awk’ and ‘gawk’.”
+"differences in ‘awk’ and ‘gawk’."
 
 
 File: gawk.info,  Node: Conventions,  Next: Manual History,  Prev: This 
Manual,  Up: Preface
@@ -1207,9 +1207,9 @@ node briefly documents the typographical conventions used 
in Texinfo.
    Examples you would type at the command line are preceded by the
 common shell primary and secondary prompts, ‘$’ and ‘>’, respectively.
 Input that you type is shown ‘like this’.  Output from the command is
-preceded by the glyph “⊣”.  This typically represents the command’s
-standard output.  Error messages and other output on the command’s
-standard error are preceded by the glyph “error→”.  For example:
+preceded by the glyph "⊣".  This typically represents the command's
+standard output.  Error messages and other output on the command's
+standard error are preceded by the glyph "error→".  For example:
 
      $ echo hi on stdout
      ⊣ hi on stdout
@@ -1217,35 +1217,35 @@ standard error are preceded by the glyph 
“error→”.  For example:
      error→ hello on stderr
 
    Characters that you type at the keyboard look ‘like this’.  In
-particular, there are special characters called “control characters.”
+particular, there are special characters called "control characters."
 These are characters that you type by holding down both the ‘CONTROL’
 key and another key, at the same time.  For example, a ‘Ctrl-d’ is typed
 by first pressing and holding the ‘CONTROL’ key, next pressing the ‘d’
 key, and finally releasing both keys.
 
    For the sake of brevity, throughout this Info file, we refer to Brian
-Kernighan’s version of ‘awk’ as “BWK ‘awk’.” (*Note Other 
Versions:: for
-information on his and other versions.)
+Kernighan's version of ‘awk’ as "BWK ‘awk’."  (*Note Other Versions::
+for information on his and other versions.)
 
 Dark Corners
 ------------
 
-     Dark corners are basically fractal—no matter how much you
-     illuminate, there’s always a smaller but darker one.
-                          — _Brian Kernighan_
+     Dark corners are basically fractal--no matter how much you
+     illuminate, there's always a smaller but darker one.
+                         -- _Brian Kernighan_
 
    Until the POSIX standard (and ‘GAWK: Effective AWK Programming’),
 many features of ‘awk’ were either poorly documented or not documented
-at all.  Descriptions of such features (often called “dark corners”) are
-noted in this Info file with “(d.c.).” They also appear in the index
-under the heading “dark corner.”
+at all.  Descriptions of such features (often called "dark corners") are
+noted in this Info file with "(d.c.)."  They also appear in the index
+under the heading "dark corner."
 
    But, as noted by the opening quote, any coverage of dark corners is
 by definition incomplete.
 
    Extensions to the standard ‘awk’ language that are supported by more
-than one ‘awk’ implementation are marked “(c.e.),” and listed in the
-index under “common extensions” and “extensions, common.”
+than one ‘awk’ implementation are marked "(c.e.)," and listed in the
+index under "common extensions" and "extensions, common."
 
 
 File: gawk.info,  Node: Manual History,  Next: How To Contribute,  Prev: 
Conventions,  Up: Preface
@@ -1261,12 +1261,12 @@ editor.  GNU Emacs is the most widely used version of 
Emacs today.
    The GNU(1) Project is an ongoing effort on the part of the Free
 Software Foundation to create a complete, freely distributable,
 POSIX-compliant computing environment.  The FSF uses the GNU General
-Public License (GPL) to ensure that its software’s source code is always
+Public License (GPL) to ensure that its software's source code is always
 available to the end user.  A copy of the GPL is included for your
 reference (*note Copying::).  The GPL applies to the C language source
 code for ‘gawk’.  To find out more about the FSF and the GNU Project
-online, see the GNU Project’s home page (https://www.gnu.org).  This
-Info file may also be read from GNU’s website
+online, see the GNU Project's home page (https://www.gnu.org).  This
+Info file may also be read from GNU's website
 (https://www.gnu.org/software/gawk/manual/).
 
    A shell, an editor (Emacs), highly portable optimizing C, C++, and
@@ -1285,12 +1285,12 @@ from the Internet.
 Paul Rubin wrote the very first draft of ‘The GAWK Manual’; it was
 around 40 pages long.  Diane Close and Richard Stallman improved it,
 yielding a version that was around 90 pages and barely described the
-original, “old” version of ‘awk’.
+original, "old" version of ‘awk’.
 
    I started working with that version in the fall of 1988.  As work on
 it progressed, the FSF published several preliminary versions (numbered
 0.X).  In 1996, edition 1.0 was released with ‘gawk’ 3.0.0.  The FSF
-published the first two editions under the title ‘The GNU Awk User’s
+published the first two editions under the title ‘The GNU Awk User's
 Guide’.
 
    This edition maintains the basic structure of the previous editions.
@@ -1308,9 +1308,9 @@ on submitting problem reports electronically.
 
    ---------- Footnotes ----------
 
-   (1) GNU stands for “GNU’s Not Unix.”
+   (1) GNU stands for "GNU's Not Unix."
 
-   (2) The terminology “GNU/Linux” is explained in the *note Glossary::.
+   (2) The terminology "GNU/Linux" is explained in the *note Glossary::.
 
 
 File: gawk.info,  Node: How To Contribute,  Next: Acknowledgments,  Prev: 
Manual History,  Up: Preface
@@ -1331,7 +1331,7 @@ domain.  Late in 2017, a volunteer took on the task of 
managing it.
 
    If you have written an interesting ‘awk’ program that you would like
 to share with the rest of the world, please see <http://www.awklang.org>
-and use the “Contact” link.
+and use the "Contact" link.
 
    If you have written a ‘gawk’ extension, please see *note
 gawkextlib::.
@@ -1364,7 +1364,7 @@ acknowledgements:
      The following people (in alphabetical order) provided helpful
      comments on various versions of this book: Rick Adams, Dr. Nelson
      H.F. Beebe, Karl Berry, Dr. Michael Brennan, Rich Burridge, Claire
-     Cloutier, Diane Close, Scott Deifik, Christopher (“Topher”) Eliot,
+     Cloutier, Diane Close, Scott Deifik, Christopher ("Topher") Eliot,
      Jeffrey Friedl, Dr. Darrel Hankerson, Michal Jaegermann, Dr.
      Richard J. LeBlanc, Michael Lijewski, Pat Rankin, Miriam Robbins,
      Mary Sheehan, and Chuck Toporek.
@@ -1392,7 +1392,7 @@ acknowledgements:
      Ulrich Drepper, provided invaluable help and feedback for the
      design of the internationalization features.
 
-     Chuck Toporek, Mary Sheehan, and Claire Cloutier of O’Reilly &
+     Chuck Toporek, Mary Sheehan, and Claire Cloutier of O'Reilly &
      Associates contributed significant editorial help for this Info
      file for the 3.1 release of ‘gawk’.
 
@@ -1401,7 +1401,7 @@ Colombo, Stephen Davies, Scott Deifik, Akim Demaille, 
Daniel Richard G.,
 Juan Manuel Guerrero, Darrel Hankerson, Michal Jaegermann, Jürgen Kahrs,
 Stepan Kasal, John Malmberg, Chet Ramey, Pat Rankin, Andrew Schorr,
 Corinna Vinschen, and Eli Zaretskii (in alphabetical order) make up the
-current ‘gawk’ “crack portability team.” Without their hard work and
+current ‘gawk’ "crack portability team."  Without their hard work and
 help, ‘gawk’ would not be nearly the robust, portable program it is
 today.  It has been and continues to be a pleasure working with this
 team of fine people.
@@ -1547,7 +1547,7 @@ earlier.
 
    This command format instructs the “shell”, or command interpreter, to
 start ‘awk’ and use the PROGRAM to process records in the input file(s).
-There are single quotes around PROGRAM so the shell won’t interpret any
+There are single quotes around PROGRAM so the shell won't interpret any
 ‘awk’ characters as special shell characters.  The quotes also cause the
 shell to treat all of PROGRAM as a single argument for ‘awk’, and allow
 PROGRAM to be more than one line long.
@@ -1557,7 +1557,7 @@ programs from shell scripts, because it avoids the need 
for a separate
 file for the ‘awk’ program.  A self-contained shell script is more
 reliable because there are no other files to misplace.
 
-   Later in this chapter, in *note Very Simple::, we’ll see examples of
+   Later in this chapter, in *note Very Simple::, we'll see examples of
 several short, self-contained programs.
 
 
@@ -1577,7 +1577,7 @@ end-of-file by typing ‘Ctrl-d’.  (On non-POSIX 
operating systems, the
 end-of-file character may be different.)
 
    As an example, the following program prints a friendly piece of
-advice (from Douglas Adams’s ‘The Hitchhiker’s Guide to the Galaxy’), 
to
+advice (from Douglas Adams's ‘The Hitchhiker's Guide to the Galaxy’), to
 keep you from worrying about the complexities of computer programming:
 
      $ awk 'BEGIN { print "Don\47t Panic!" }'
@@ -1585,7 +1585,7 @@ keep you from worrying about the complexities of computer 
programming:
 
    ‘awk’ executes statements associated with ‘BEGIN’ before reading any
 input.  If there are no other statements in your program, as is the case
-here, ‘awk’ just stops, instead of trying to read input it doesn’t know
+here, ‘awk’ just stops, instead of trying to read input it doesn't know
 how to process.  The ‘\47’ is a magic way (explained later) of getting a
 single quote into the program, without having to engage in ugly shell
 quoting tricks.
@@ -1637,9 +1637,9 @@ does the same thing as this one:
 
      awk 'BEGIN { print "Don\47t Panic!" }'
 
-This was explained earlier (*note Read Terminal::).  Note that you don’t
+This was explained earlier (*note Read Terminal::).  Note that you don't
 usually need single quotes around the file name that you specify with
-‘-f’, because most file names don’t contain any of the shell’s special
+‘-f’, because most file names don't contain any of the shell's special
 characters.  Notice that in ‘advice’, the ‘awk’ program did not have
 single quotes around it.  The quotes are only needed for programs that
 are provided on the ‘awk’ command line.  (Also, placing the program in a
@@ -1647,8 +1647,8 @@ file allows us to use a literal single quote in the 
program text,
 instead of the magic ‘\47’.)
 
    If you want to clearly identify an ‘awk’ program file as such, you
-can add the extension ‘.awk’ to the file name.  This doesn’t affect the
-execution of the ‘awk’ program but it does make “housekeeping” easier.
+can add the extension ‘.awk’ to the file name.  This doesn't affect the
+execution of the ‘awk’ program but it does make "housekeeping" easier.
 
 
 File: gawk.info,  Node: Executable Scripts,  Next: Comments,  Prev: Long,  Up: 
Running gawk
@@ -1683,7 +1683,7 @@ written in ‘awk’.
 utility reads your program and then processes your data according to the
 instructions in your program.  (This is different from a “compiled”
 language such as C, where your program is first compiled into machine
-code that is executed directly by your system’s processor.)  The ‘awk’
+code that is executed directly by your system's processor.)  The ‘awk’
 utility is thus termed an “interpreter”.  Many modern languages are
 interpreted.
 
@@ -1702,13 +1702,13 @@ 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
 of the line as a single argument and passes it to ‘awk’.  Doing this
-leads to confusing behavior—most likely a usage diagnostic of some sort
+leads to confusing behavior--most likely a usage diagnostic of some sort
 from ‘awk’.
 
    Finally, the value of ‘ARGV[0]’ (*note Built-in Variables::) varies
 depending upon your operating system.  Some systems put ‘awk’ there,
 some put the full pathname of ‘awk’ (such as ‘/bin/awk’), and some put
-the name of your script (‘advice’).  (d.c.)  Don’t rely on the value of
+the name of your script (‘advice’).  (d.c.)  Don't rely on the value of
 ‘ARGV[0]’ to provide your script name.
 
    ---------- Footnotes ----------
@@ -1739,13 +1739,13 @@ put the following into ‘advice’:
      BEGIN    { print "Don't Panic!" }
 
    You can put comment lines into keyboard-composed throwaway ‘awk’
-programs, but this usually isn’t very useful; the purpose of a comment
+programs, but this usually isn't very useful; the purpose of a comment
 is to help you or another person understand the program when reading it
 at a later time.
 
      CAUTION: As mentioned in *note One-shot::, you can enclose short to
      medium-sized programs in single quotes, in order to keep your shell
-     scripts self-contained.  When doing so, _don’t_ put an apostrophe
+     scripts self-contained.  When doing so, _don't_ put an apostrophe
      (i.e., a single quote) into a comment (or anywhere else in your
      program).  The shell interprets the quote as the closing quote for
      the entire program.  As a result, usually the shell prints a
@@ -1766,9 +1766,9 @@ at a later time.
           error→ awk: can't open file be
           error→  source line number 1
 
-     Putting a backslash before the single quote in ‘let's’ wouldn’t
+     Putting a backslash before the single quote in ‘let's’ wouldn't
      help, because backslashes are not special inside single quotes.
-     The next node describes the shell’s quoting rules.
+     The next node describes the shell's quoting rules.
 
 
 File: gawk.info,  Node: Quoting,  Prev: Comments,  Up: Running gawk
@@ -1791,7 +1791,7 @@ it as part of a larger shell script:
    Once you are working with the shell, it is helpful to have a basic
 knowledge of shell quoting rules.  The following rules apply only to
 POSIX-compliant, Bourne-style shells (such as Bash, the GNU Bourne-Again
-Shell).  If you use the C shell, you’re on your own.
+Shell).  If you use the C shell, you're on your own.
 
    Before diving into the rules, we introduce a concept that appears
 throughout this Info file, which is that of the “null”, or empty,
@@ -1852,7 +1852,7 @@ the quoting rules:
 
           awk -F "" 'PROGRAM' FILES # correct
 
-     Don’t use this:
+     Don't use this:
 
           awk -F"" 'PROGRAM' FILES  # wrong!
 
@@ -1870,7 +1870,7 @@ shell quoting tricks, like this:
 This program consists of three concatenated quoted strings.  The first
 and the third are single-quoted, and the second is double-quoted.
 
-   This can be “simplified” to:
+   This can be "simplified" to:
 
      $ awk 'BEGIN { print "Here is a single quote <'\''>" }'
      ⊣ Here is a single quote <'>
@@ -1909,7 +1909,7 @@ concatenated into a single string that is printed by 
‘print’.)
 
    If you really need both single and double quotes in your ‘awk’
 program, it is probably best to move it into a separate file, where the
-shell won’t be part of the picture and you can say what you mean.
+shell won't be part of the picture and you can say what you mean.
 
 
 File: gawk.info,  Node: DOS Quoting,  Up: Quoting
@@ -1921,7 +1921,7 @@ Although this Info file generally only worries about 
POSIX systems and
 the POSIX shell, the following issue arises often enough for many users
 that it is worth addressing.
 
-   The “shells” on Microsoft Windows systems use the double-quote
+   The "shells" on Microsoft Windows systems use the double-quote
 character for quoting, and make it difficult or impossible to include an
 escaped double-quote character in a command-line script.  The following
 example, courtesy of Jeroen Brink, shows how to escape the double quotes
@@ -1961,7 +1961,7 @@ the previous example you would do it this way:
 
 However, the use of ‘\042’ instead of ‘\\\"’ is also possible and 
easier
 to read, because backslashes that are not followed by a double-quote
-don’t need duplication.
+don't need duplication.
 
 
 File: gawk.info,  Node: Sample Data Files,  Next: Very Simple,  Prev: Running 
gawk,  Up: Getting Started
@@ -1970,7 +1970,7 @@ File: gawk.info,  Node: Sample Data Files,  Next: Very 
Simple,  Prev: Running ga
 ===============================
 
 Many of the examples in this Info file take their input from two sample
-data files.  The first, ‘mail-list’, represents a list of peoples’ names
+data files.  The first, ‘mail-list’, represents a list of peoples' names
 together with their email addresses and information about those people.
 The second data file, called ‘inventory-shipped’, contains information
 about monthly shipments.  In both files, each line is considered to be
@@ -2033,8 +2033,8 @@ File: gawk.info,  Node: Very Simple,  Next: Two Rules,  
Prev: Sample Data Files,
 The following command runs a simple ‘awk’ program that searches the
 input file ‘mail-list’ for the character string ‘li’ (a grouping of
 characters is usually called a “string”; the term “string” is based on
-similar usage in English, such as “a string of pearls” or “a string of
-cars in a train”):
+similar usage in English, such as "a string of pearls" or "a string of
+cars in a train"):
 
      awk '/li/ { print $0 }' mail-list
 
@@ -2047,7 +2047,7 @@ the same thing, so we could have written that instead.)
 for.  This type of pattern is called a “regular expression”, which is
 covered in more detail later (*note Regexp::).  The pattern is allowed
 to match parts of words.  There are single quotes around the ‘awk’
-program so that the shell won’t interpret any of it as special shell
+program so that the shell won't interpret any of it as special shell
 characters.
 
    Here is what this program prints:
@@ -2071,16 +2071,16 @@ does nothing (i.e., no lines are printed).
 
    Many practical ‘awk’ programs are just a line or two long.  Following
 is a collection of useful, short programs to get you started.  Some of
-these programs contain constructs that haven’t been covered yet.  (The
+these programs contain constructs that haven't been covered yet.  (The
 description of the program will give you a good idea of what is going
-on, but you’ll need to read the rest of the Info file to become an ‘awk’
+on, but you'll need to read the rest of the Info file to become an ‘awk’
 expert!)  Most of the examples use a data file named ‘data’.  This is
 just a placeholder; if you use these programs yourself, substitute your
 own file names for ‘data’.
 
    Some of the following examples use the output of ‘ls -l’ as input.
 ‘ls’ is a system command that gives you a listing of the files in a
-directory.  With the ‘-l’ option, this listing includes each file’s size
+directory.  With the ‘-l’ option, this listing includes each file's size
 and the date the file was last modified.  Its output looks like this:
 
      -rw-r--r--  1 arnold   user   1933 Nov  7 13:05 Makefile
@@ -2094,8 +2094,8 @@ and the date the file was last modified.  Its output 
looks like this:
 
 The first field contains read-write permissions, the second field
 contains the number of links to the file, and the third field identifies
-the file’s owner.  The fourth field identifies the file’s group.  The
-fifth field contains the file’s size in bytes.  The sixth, seventh, and
+the file's owner.  The fourth field identifies the file's group.  The
+fifth field contains the file's size in bytes.  The sixth, seventh, and
 eighth fields contain the month, day, and time, respectively, that the
 file was last modified.  Finally, the ninth field contains the file
 name.
@@ -2110,7 +2110,7 @@ things shown here:
           awk 'length($0) > 80' data
 
      The sole rule has a relational expression as its pattern and has no
-     action—so it uses the default action, printing the record.
+     action--so it uses the default action, printing the record.
 
    • Print the length of the longest input line:
 
@@ -2118,7 +2118,7 @@ things shown here:
                END { print max }' data
 
      The code associated with ‘END’ executes after all input has been
-     read; it’s the other side of the coin to ‘BEGIN’.
+     read; it's the other side of the coin to ‘BEGIN’.
 
    • Print the length of the longest line in ‘data’:
 
@@ -2190,7 +2190,7 @@ contains two rules:
 
 The first rule has the string ‘12’ as the pattern and ‘print $0’ as the
 action.  The second rule has the string ‘21’ as the pattern and also has
-‘print $0’ as the action.  Each rule’s action is enclosed in its own
+‘print $0’ as the action.  Each rule's action is enclosed in its own
 pair of braces.
 
    This program prints every line that contains the string ‘12’ _or_ the
@@ -2219,10 +2219,10 @@ File: gawk.info,  Node: More Complex,  Next: 
Statements/Lines,  Prev: Two Rules,
 1.5 A More Complex Example
 ==========================
 
-Now that we’ve mastered some simple tasks, let’s look at what typical
+Now that we've mastered some simple tasks, let's look at what typical
 ‘awk’ programs do.  This example shows how ‘awk’ can be used to
 summarize, select, and rearrange the output of another utility.  It uses
-features that haven’t been covered yet, so don’t worry if you don’t
+features that haven't been covered yet, so don't worry if you don't
 understand all the details:
 
      ls -l | awk '$6 == "Nov" { sum += $5 }
@@ -2232,11 +2232,11 @@ understand all the details:
 current directory that were last modified in November (of any year).
 
    As a reminder, the output of ‘ls -l’ gives you a listing of the files
-in a directory, including each file’s size and the date the file was
+in a directory, including each file's size and the date the file was
 last modified.  The first field contains read-write permissions, the
 second field contains the number of links to the file, and the third
-field identifies the file’s owner.  The fourth field identifies the
-file’s group.  The fifth field contains the file’s size in bytes.  The
+field identifies the file's owner.  The fourth field identifies the
+file's group.  The fifth field contains the file's size in bytes.  The
 sixth, seventh, and eighth fields contain the month, day, and time,
 respectively, that the file was last modified.  Finally, the ninth field
 contains the file name.
@@ -2244,7 +2244,7 @@ contains the file name.
    The ‘$6 == "Nov"’ in our ‘awk’ program is an expression that tests
 whether the sixth field of the output from ‘ls -l’ matches the string
 ‘Nov’.  Each time a line has the string ‘Nov’ for its sixth field, 
‘awk’
-performs the action ‘sum += $5’.  This adds the fifth field (the file’s
+performs the action ‘sum += $5’.  This adds the fifth field (the file's
 size) to the variable ‘sum’.  As a result, when ‘awk’ has finished
 reading all the input lines, ‘sum’ is the total of the sizes of the
 files whose lines matched the pattern.  (This works because ‘awk’
@@ -2321,8 +2321,8 @@ split your lines in the middle of a regular expression or 
a string.
           ? }'
           ⊣ hello, world
 
-     Here, the ‘%’ and ‘?’ are the C shell’s primary and secondary
-     prompts, analogous to the standard shell’s ‘$’ and ‘>’.
+     Here, the ‘%’ and ‘?’ are the C shell's primary and secondary
+     prompts, analogous to the standard shell's ‘$’ and ‘>’.
 
      Compare the previous example to how it is done with a
      POSIX-compliant shell:
@@ -2333,7 +2333,7 @@ split your lines in the middle of a regular expression or 
a string.
           > }'
           ⊣ hello, world
 
-   ‘awk’ is a line-oriented language.  Each rule’s action has to begin
+   ‘awk’ is a line-oriented language.  Each rule's action has to begin
 on the same line as the pattern.  To have the pattern and action on
 separate lines, you _must_ use backslash continuation; there is no other
 option.
@@ -2350,7 +2350,7 @@ comment, it ignores _everything_ on the rest of the line. 
 For example:
 
 In this case, it looks like the backslash would continue the comment
 onto the next line.  However, the backslash-newline combination is never
-even noticed because it is “hidden” inside the comment.  Thus, the
+even noticed because it is "hidden" inside the comment.  Thus, the
 ‘BEGIN’ is noted as a syntax error.
 
    Backslash continuation comes into play in an additional, unexpected
@@ -2373,7 +2373,7 @@ In short, the backslash and newline are removed, 
assigning ‘"a"’ to
 ‘-v’ option (*note Options::) and to regular command-line variable
 assignments (*note Assignment Options::).
 
-   If you’re interested, see
+   If you're interested, see
 <https://lists.gnu.org/archive/html/bug-gawk/2022-10/msg00025.html> for
 a source code patch that allows lines to be continued when inside
 parentheses.  This patch was not added to ‘gawk’ since it would quietly
@@ -2427,7 +2427,7 @@ File: gawk.info,  Node: When,  Next: Intro Summary,  
Prev: Other Features,  Up:
 1.8 When to Use ‘awk’
 =====================
 
-Now that you’ve seen some of what ‘awk’ can do, you might wonder how
+Now that you've seen some of what ‘awk’ can do, you might wonder how
 ‘awk’ could be useful for you.  By using utility programs, advanced
 patterns, field separators, arithmetic statements, and other selection
 criteria, you can produce much more complex output.  The ‘awk’ language
@@ -2445,7 +2445,7 @@ edit-compile-test-debug cycle of software development.
    Complex programs have been written in ‘awk’, including a complete
 retargetable assembler for eight-bit microprocessors (*note Glossary::,
 for more information), and a microcode assembler for a special-purpose
-Prolog computer.  The original ‘awk’’s capabilities were strained by
+Prolog computer.  The original ‘awk’'s capabilities were strained by
 tasks of such complexity, but modern versions are more capable.
 
    If you find yourself writing ‘awk’ scripts of more than, say, a few
@@ -2465,7 +2465,7 @@ File: gawk.info,  Node: Intro Summary,  Prev: When,  Up: 
Getting Started
 1.9 Summary
 ===========
 
-   • Programs in ‘awk’ consist of PATTERN–ACTION pairs.
+   • Programs in ‘awk’ consist of PATTERN-ACTION pairs.
 
    • An ACTION without a PATTERN always runs.  The default ACTION for a
      pattern without one is ‘{ print $0 }’.
@@ -2495,13 +2495,13 @@ File: gawk.info,  Node: Invoking Gawk,  Next: Regexp,  
Prev: Getting Started,  U
 This major node covers how to run ‘awk’, both POSIX-standard and
 ‘gawk’-specific command-line options, and what ‘awk’ and ‘gawk’ do 
with
 nonoption arguments.  It then proceeds to cover how ‘gawk’ searches for
-source files, reading standard input along with other files, ‘gawk’’s
-environment variables, ‘gawk’’s exit status, using include files, and
+source files, reading standard input along with other files, ‘gawk’'s
+environment variables, ‘gawk’'s exit status, using include files, and
 obsolete and undocumented options and/or features.
 
    Many of the options and features described here are discussed in more
 detail later in the Info file; feel free to skip over things in this
-major node that don’t interest you right now.
+major node that don't interest you right now.
 
 * Menu:
 
@@ -2511,7 +2511,7 @@ major node that don’t interest you right now.
 * Naming Standard Input::       How to specify standard input with other
                                 files.
 * Environment Variables::       The environment variables ‘gawk’ uses.
-* Exit Status::                 ‘gawk’’s exit status.
+* Exit Status::                 ‘gawk’'s exit status.
 * Include Files::               Including other files into your program.
 * Loading Shared Libraries::    Loading shared libraries into your program.
 * Obsolete::                    Obsolete Options and/or features.
@@ -2524,7 +2524,7 @@ File: gawk.info,  Node: Command Line,  Next: Options,  
Up: Invoking Gawk
 2.1 Invoking ‘awk’
 ==================
 
-There are two ways to run ‘awk’—with an explicit program or with one or
+There are two ways to run ‘awk’--with an explicit program or with one or
 more program files.  Here are templates for both of them; items enclosed
 in [...] in these templates are optional:
 
@@ -2553,7 +2553,7 @@ long options consist of two dashes and a keyword.  The 
keyword can be
 abbreviated, as long as the abbreviation allows the option to be
 uniquely identified.  If the option takes an argument, either the
 keyword is immediately followed by an equals sign (‘=’) and the
-argument’s value, or the keyword and the argument’s value are separated
+argument's value, or the keyword and the argument's value are separated
 by whitespace (spaces or TABs).  If a particular option with a value is
 given more than once, it is (usually) the last value that counts.
 
@@ -2623,7 +2623,7 @@ The following list describes options mandated by the 
POSIX standard:
      This can often involve converting multibyte characters into wide
      characters (internally), and can lead to problems or confusion if
      the input data does not contain valid multibyte characters.  This
-     option is an easy way to tell ‘gawk’, “Hands off my data!”
+     option is an easy way to tell ‘gawk’, "Hands off my data!"
 
 ‘-c’
 ‘--traditional’
@@ -2647,7 +2647,7 @@ The following list describes options mandated by the 
POSIX standard:
      Having a list of all global variables is a good way to look for
      typographical errors in your programs.  You would also use this
      option if you have a large program with a lot of functions, and you
-     want to be sure that your functions don’t inadvertently use global
+     want to be sure that your functions don't inadvertently use global
      variables that you meant to be local.  (This is a particularly easy
      mistake to make with simple variable names like ‘i’, ‘j’, etc.)
 
@@ -2669,7 +2669,7 @@ The following list describes options mandated by the 
POSIX standard:
      programs (*note AWKPATH Variable::).
 
      Note that ‘gawk’ treats each string as if it ended with a newline
-     character (even if it doesn’t).  This makes building the total
+     character (even if it doesn't).  This makes building the total
      program easier.
 
           CAUTION: Prior to version 5.0, there was no requirement that
@@ -2717,7 +2717,7 @@ The following list describes options mandated by the 
POSIX standard:
 
 ‘-h’
 ‘--help’
-     Print a “usage” message summarizing the short- and long-style
+     Print a "usage" message summarizing the short- and long-style
      options that ‘gawk’ accepts and then exit.
 
 ‘-i’ SOURCE-FILE
@@ -2741,7 +2741,7 @@ The following list describes options mandated by the 
POSIX standard:
 ‘--trace’
      Print the internal byte code names as they are executed when
      running the program.  The trace is printed to standard error.  Each
-     “op code” is preceded by a ‘+’ sign in the output.
+     "op code" is preceded by a ‘+’ sign in the output.
 
 ‘-k’
 ‘--csv’
@@ -2795,11 +2795,11 @@ The following list describes options mandated by the 
POSIX standard:
      libraries (*note Arbitrary Precision Arithmetic::).
 
      As of version 5.2, the arbitrary precision arithmetic features in
-     ‘gawk’ are “on parole.” The primary maintainer is no longer 
willing
-     to support this feature, but another member of the development team
-     has stepped up to take it over.  As long as this situation remains
-     stable, MPFR will be supported.  If it changes, the MPFR support
-     will be removed from ‘gawk’.
+     ‘gawk’ are "on parole."  The primary maintainer is no longer
+     willing to support this feature, but another member of the
+     development team has stepped up to take it over.  As long as this
+     situation remains stable, MPFR will be supported.  If it changes,
+     the MPFR support will be removed from ‘gawk’.
 
 ‘-n’
 ‘--non-decimal-data’
@@ -2812,7 +2812,7 @@ The following list describes options mandated by the 
POSIX standard:
 
 ‘-N’
 ‘--use-lc-numeric’
-     Force the use of the locale’s decimal point character when parsing
+     Force the use of the locale's decimal point character when parsing
      numeric input data (*note Locales::).
 
 ‘-o’[FILE]
@@ -2828,7 +2828,7 @@ The following list describes options mandated by the 
POSIX standard:
 
 ‘-O’
 ‘--optimize’
-     Enable ‘gawk’’s default optimizations on the internal
+     Enable ‘gawk’'s default optimizations on the internal
      representation of the program.  At the moment, this includes just
      simple constant folding.
 
@@ -2862,7 +2862,7 @@ The following list describes options mandated by the 
POSIX standard:
         • Specifying ‘-Ft’ on the command line does not set the value of
           ‘FS’ to be a single TAB character (*note Field Separators::).
 
-        • The locale’s decimal point character is used for parsing input
+        • The locale's decimal point character is used for parsing input
           data (*note Locales::).
 
      If you supply both ‘--traditional’ and ‘--posix’ on the command
@@ -2872,12 +2872,12 @@ The following list describes options mandated by the 
POSIX standard:
 ‘-r’
 ‘--re-interval’
      Allow interval expressions (*note Regexp Operators::) in regexps.
-     This is now ‘gawk’’s default behavior.  Nevertheless, this option
+     This is now ‘gawk’'s default behavior.  Nevertheless, this option
      remains for backward compatibility.
 
 ‘-s’
 ‘--no-optimize’
-     Disable ‘gawk’’s default optimizations on the internal
+     Disable ‘gawk’'s default optimizations on the internal
      representation of the program.
 
 ‘-S’
@@ -2887,7 +2887,7 @@ The following list describes options mandated by the 
POSIX standard:
      extensions.  Also, disallow adding file names to ‘ARGV’ that were
      not there when ‘gawk’ started running.  This is particularly useful
      when you want to run ‘awk’ scripts from questionable sources and
-     need to make sure the scripts can’t access your system (other than
+     need to make sure the scripts can't access your system (other than
      the specified input data files).
 
 ‘-t’
@@ -2953,7 +2953,7 @@ and behaves in strict POSIX mode.  If ‘--lint’ is 
supplied on the
 command line and ‘gawk’ turns on POSIX mode because of
 ‘POSIXLY_CORRECT’, then it issues a warning message indicating that
 POSIX mode is in effect.  You would typically set this variable in your
-shell’s startup file.  For a Bourne-compatible shell (such as Bash), you
+shell's startup file.  For a Bourne-compatible shell (such as Bash), you
 would add these lines to the ‘.profile’ file in your home directory:
 
      POSIXLY_CORRECT=true
@@ -2986,7 +2986,7 @@ File: gawk.info,  Node: Other Arguments,  Next: Naming 
Standard Input,  Prev: Op
 Any additional arguments on the command line are normally treated as
 input files to be processed in the order specified.  However, an
 argument that has the form ‘VAR=VALUE’, assigns the value VALUE to the
-variable VAR—it does not specify a file at all.  (See *note Assignment
+variable VAR--it does not specify a file at all.  (See *note Assignment
 Options::.)  In the following example, ‘count=1’ is a variable
 assignment, not a file name:
 
@@ -3028,10 +3028,10 @@ escape sequences (*note Escape Sequences::).  (d.c.)
 
    In some very early implementations of ‘awk’, when a variable
 assignment occurred before any file names, the assignment would happen
-_before_ the ‘BEGIN’ rule was executed.  ‘awk’’s behavior was thus
+_before_ the ‘BEGIN’ rule was executed.  ‘awk’'s behavior was thus
 inconsistent; some command-line assignments were available inside the
 ‘BEGIN’ rule, while others were not.  Unfortunately, some applications
-came to depend upon this “feature.” When ‘awk’ was changed to be more
+came to depend upon this "feature."  When ‘awk’ was changed to be more
 consistent, the ‘-v’ option was added to accommodate applications that
 depended upon the old behavior.
 
@@ -3051,7 +3051,7 @@ compatibility.
            Quoting Shell Variables On The ‘awk’ Command Line
 
    Small ‘awk’ programs are often embedded in larger shell scripts, so
-it’s worthwhile to understand some shell basics.  Consider the
+it's worthwhile to understand some shell basics.  Consider the
 following:
 
      f=""
@@ -3061,8 +3061,8 @@ following:
 open any command line files.  To the unwary, this looks like ‘awk’ is
 hanging.
 
-   However ‘awk’ doesn’t see an explicit empty string.  When a variable
-expansion is the null string, _and_ it’s not quoted, the shell simply
+   However ‘awk’ doesn't see an explicit empty string.  When a variable
+expansion is the null string, _and_ it's not quoted, the shell simply
 removes it from the command line.  To demonstrate:
 
      $ f=""
@@ -3150,7 +3150,7 @@ true for both ‘--traditional’ and ‘--posix’.  
*Note Options::.
    If the source code file is not found after the initial search, the
 path is searched again after adding the suffix ‘.awk’ to the file name.
 
-   ‘gawk’’s path search mechanism is similar to the shell’s.  (See 
‘The
+   ‘gawk’'s path search mechanism is similar to the shell's.  (See ‘The
 Bourne-Again SHell manual’ (https://www.gnu.org/software/bash/manual/).)
 It treats a null entry in the path as indicating the current directory.
 (A null entry is indicated by starting or ending the path with a colon
@@ -3178,7 +3178,7 @@ to manipulate the ‘AWKPATH’ variable.
 value from within an ‘awk’ program.
 
    Although you can change ‘ENVIRON["AWKPATH"]’ within your ‘awk’
-program, this has no effect on the running program’s behavior.  This
+program, this has no effect on the running program's behavior.  This
 makes sense: the ‘AWKPATH’ environment variable is used to find the
 program source files.  Once your program is running, all the files have
 been found, and ‘gawk’ no longer needs to use ‘AWKPATH’.
@@ -3191,7 +3191,7 @@ been found, and ‘gawk’ no longer needs to use 
‘AWKPATH’.
 depend upon how ‘gawk’ was built and installed.  The actual directory is
 the value of ‘$(pkgdatadir)’ generated when ‘gawk’ was configured.  
(For
 more detail, see the ‘INSTALL’ file in the source distribution, and see
-*note Quick Installation::.  You probably don’t need to worry about
+*note Quick Installation::.  You probably don't need to worry about
 this, though.)
 
 
@@ -3222,7 +3222,7 @@ to manipulate the ‘AWKLIBPATH’ variable.
 value from within an ‘awk’ program.
 
    Although you can change ‘ENVIRON["AWKLIBPATH"]’ within your ‘awk’
-program, this has no effect on the running program’s behavior.  This
+program, this has no effect on the running program's behavior.  This
 makes sense: the ‘AWKLIBPATH’ environment variable is used to find any
 requested extensions, and they are loaded before the program starts to
 run.  Once your program is running, all the extensions have been found,
@@ -3234,7 +3234,7 @@ and ‘gawk’ no longer needs to use ‘AWKLIBPATH’.
 depend upon how ‘gawk’ was built and installed.  The actual directory is
 the value of ‘$(pkgextensiondir)’ generated when ‘gawk’ was configured.
 (For more detail, see the ‘INSTALL’ file in the source distribution, and
-see *note Quick Installation::.  You probably don’t need to worry about
+see *note Quick Installation::.  You probably don't need to worry about
 this, though.)
 
 
@@ -3243,7 +3243,7 @@ File: gawk.info,  Node: Other Environment Variables,  
Prev: AWKLIBPATH Variable,
 2.5.3 Other Environment Variables
 ---------------------------------
 
-A number of other environment variables affect ‘gawk’’s behavior, but
+A number of other environment variables affect ‘gawk’'s behavior, but
 they are more specialized.  Those in the following list are meant to be
 used by regular users:
 
@@ -3254,7 +3254,7 @@ used by regular users:
 
 ‘GAWK_PERSIST_FILE’
      Specifies the backing file to use for persistent storage of
-     ‘gawk’’s variables and arrays.  *Note Persistent Memory::.
+     ‘gawk’'s variables and arrays.  *Note Persistent Memory::.
 
 ‘GAWK_READ_TIMEOUT’
      Specifies the time, in milliseconds, for ‘gawk’ to wait for input
@@ -3284,8 +3284,8 @@ change.  The variables are:
      size of the memory buffer to allocate for I/O. Otherwise, the value
      should be a number, and ‘gawk’ uses that number as the size of the
      buffer to allocate.  (When this variable is not set, ‘gawk’ uses
-     the smaller of the file’s size and the “default” blocksize, which
-     is usually the filesystem’s I/O blocksize.)
+     the smaller of the file's size and the "default" blocksize, which
+     is usually the filesystem's I/O blocksize.)
 
 ‘AWK_HASH’
      If this variable exists with a value of ‘gst’, ‘gawk’ switches to
@@ -3314,11 +3314,11 @@ change.  The variables are:
 
 ‘GAWK_NO_DFA’
      If this variable exists, ‘gawk’ does not use the DFA regexp matcher
-     for “does it match” kinds of tests.  This can cause ‘gawk’ to be
+     for "does it match" kinds of tests.  This can cause ‘gawk’ to be
      slower.  Its purpose is to help isolate differences between the two
-     regexp matchers that ‘gawk’ uses internally.  (There aren’t
+     regexp matchers that ‘gawk’ uses internally.  (There aren't
      supposed to be differences, but occasionally theory and practice
-     don’t coordinate with each other.)
+     don't coordinate with each other.)
 
 ‘GAWK_STACKSIZE’
      This specifies the amount by which ‘gawk’ should grow its internal
@@ -3340,7 +3340,7 @@ change.  The variables are:
 
 File: gawk.info,  Node: Exit Status,  Next: Include Files,  Prev: Environment 
Variables,  Up: Invoking Gawk
 
-2.6 ‘gawk’’s Exit Status
+2.6 ‘gawk’'s Exit Status
 ========================
 
 If the ‘exit’ statement is used with a value (*note Exit Statement::),
@@ -3373,7 +3373,7 @@ files.  These files can be used just like function 
libraries, using the
 variable.  Note that source files may also be included using the ‘-i’
 option.
 
-   Let’s see an example.  We’ll start with two (trivial) ‘awk’ scripts,
+   Let's see an example.  We'll start with two (trivial) ‘awk’ scripts,
 namely ‘test1’ and ‘test2’.  Here is the ‘test1’ script:
 
      BEGIN {
@@ -3433,7 +3433,7 @@ Variable::) apply to ‘@include’ also.
    This is very helpful in constructing ‘gawk’ function libraries.  If
 you have a large script with useful, general-purpose ‘awk’ functions,
 you can break it down into library files and put those files in a
-special directory.  You can then include those “libraries,” either by
+special directory.  You can then include those "libraries," either by
 using the full pathnames of the files, or by setting the ‘AWKPATH’
 environment variable accordingly and then using ‘@include’ with just the
 file part of the full pathname.  Of course, you can keep library files
@@ -3474,7 +3474,7 @@ to extended capabilities not supported by the ‘awk’ 
language.  The
 ‘@load’ is completely equivalent to using the ‘-l’ command-line option.
 
    If the extension is not initially found in ‘AWKLIBPATH’, another
-search is conducted after appending the platform’s default shared
+search is conducted after appending the platform's default shared
 library suffix to the file name.  For example, on GNU/Linux systems, the
 suffix ‘.so’ is used:
 
@@ -3506,7 +3506,7 @@ version or are still supported but deprecated (meaning 
that they will
 _not_ be in a future release).
 
    As of ‘gawk’ version 5.2.  the arbitrary precision arithmetic feature
-is “on parole.” This feature is now being supported by a volunteer in
+is "on parole."  This feature is now being supported by a volunteer in
 the development team and not by the primary maintainer.  If this
 situation changes, then the feature will be removed.  For more
 information see *note MPFR On Parole::.
@@ -3518,7 +3518,7 @@ File: gawk.info,  Node: Undocumented,  Next: Invoking 
Summary,  Prev: Obsolete,
 ======================================
 
      Use the Source, Luke!
-                              — _Obi-Wan_
+                             -- _Obi-Wan_
 
    This minor node intentionally left blank.
 
@@ -3575,7 +3575,7 @@ File: gawk.info,  Node: Invoking Summary,  Prev: 
Undocumented,  Up: Invoking Gaw
      ‘AWKPATH’, ‘AWKLIBPATH’, and ‘POSIXLY_CORRECT’ are the most
      important ones.
 
-   • ‘gawk’’s exit status conveys information to the program that
+   • ‘gawk’'s exit status conveys information to the program that
      invoked it.  Use the ‘exit’ statement from within an ‘awk’ program
      to set the exit status.
 
@@ -3714,7 +3714,7 @@ sequences apply to both string constants and regexp 
constants:
      A literal backslash, ‘\’.
 
 ‘\a’
-     The “alert” character, ‘Ctrl-g’, ASCII code 7 (BEL). (This often
+     The "alert" character, ‘Ctrl-g’, ASCII code 7 (BEL). (This often
      makes some sort of audible noise.)
 
 ‘\b’
@@ -3742,7 +3742,7 @@ sequences apply to both string constants and regexp 
constants:
 
 ‘\xHH...’
      The hexadecimal value HH, where HH stands for a sequence of
-     hexadecimal digits (‘0’–‘9’, and either ‘A’–‘F’ or 
‘a’–‘f’).  A
+     hexadecimal digits (‘0’-‘9’, and either ‘A’-‘F’ or 
‘a’-‘f’).  A
      maximum of two digits are allowed after the ‘\x’.  Any further
      hexadecimal digits are treated as simple letters or numbers.
      (c.e.)  (The ‘\x’ escape sequence is not allowed in POSIX awk.)
@@ -3757,18 +3757,18 @@ sequences apply to both string constants and regexp 
constants:
 
 ‘\uHH...’
      The hexadecimal value HH, where HH stands for a sequence of one or
-     more hexadecimal digits (‘0’–‘9’, and either ‘A’–‘F’ 
or ‘a’–‘f’).
+     more hexadecimal digits (‘0’-‘9’, and either ‘A’-‘F’ or 
‘a’-‘f’).
      A maximum of eight digits are allowed after the ‘\u’.  Any further
      hexadecimal digits are treated as simple letters or numbers.
      (c.e.)  (The ‘\u’ escape sequence is not allowed in POSIX awk.)
 
      This escape sequence is intended for designating a character in the
-     current locale’s character set.(1)  ‘gawk’ first converts the given
-     digits into an integer and then translates the given “wide
-     character” value into the current locale’s multibyte encoding.  If
+     current locale's character set.(1)  ‘gawk’ first converts the given
+     digits into an integer and then translates the given "wide
+     character" value into the current locale's multibyte encoding.  If
      the wide character value does not represent a valid character, or
      if the character is valid but cannot be encoded into the current
-     locale’s multibyte encoding, the value becomes ‘"?"’.  ‘gawk’
+     locale's multibyte encoding, the value becomes ‘"?"’.  ‘gawk’
      issues a warning message when this happens.
 
 ‘\/’
@@ -3847,7 +3847,7 @@ Thus, ‘/a\52b/’ is equivalent to ‘/a\*b/’.
 
    ---------- Footnotes ----------
 
-   (1) Typically, this is a Unicode-based locale, but it doesn’t have to
+   (1) Typically, this is a Unicode-based locale, but it doesn't have to
 be.
 
 
@@ -4008,14 +4008,13 @@ concatenation, and finally by ‘|’.  As in 
arithmetic, parentheses can
 change how operators are grouped.
 
    According to the POSIX specification, when ‘*’, ‘+’, ‘?’, or 
‘{’ are
-not preceded by a character, the behavior is “undefined.” In practice,
+not preceded by a character, the behavior is "undefined."  In practice,
 for ‘gawk’, the ‘*’, ‘+’, ‘?’ and ‘{’ operators stand for 
themselves
 when there is nothing in the regexp that precedes them.  For example,
 ‘/+/’ matches a literal plus sign.  However, many other versions of
 ‘awk’ treat such a usage as a syntax error.
 
                      What About The Empty Regexp?
-
    We describe here an advanced regexp usage.  Feel free to skip it upon
 first reading.
 
@@ -4081,7 +4080,7 @@ stand for themselves.
 
    As mentioned, interval expressions were not traditionally available
 in ‘awk’.  In March of 2019, BWK ‘awk’ (finally) acquired them.
-Starting with version 5.2, ‘gawk’’s ‘--traditional’ option no longer
+Starting with version 5.2, ‘gawk’'s ‘--traditional’ option no longer
 disables interval expressions in regular expressions.
 
    POSIX says that interval expressions containing repetition counts
@@ -4103,7 +4102,7 @@ This same caveat applies to ‘gawk’.
 
    ---------- Footnotes ----------
 
-   (1) Use two backslashes if you’re using a string constant with a
+   (1) Use two backslashes if you're using a string constant with a
 regexp operator or function.
 
 
@@ -4117,7 +4116,7 @@ those listed between the opening and closing square 
brackets.
 
    Within a bracket expression, a “range expression” consists of two
 characters separated by a hyphen.  It matches any single character that
-sorts between the two characters, based upon the system’s native
+sorts between the two characters, based upon the system's native
 character set.  For example, ‘[0-9]’ is equivalent to ‘[0123456789]’.
 (See *note Ranges and Locales:: for an explanation of how the POSIX
 standard and ‘gawk’ have changed over time.  This is mainly of
@@ -4127,7 +4126,7 @@ historical interest.)
 (http://www.unicode.org), there is an additional wrinkle to consider.
 Octal and hexadecimal escape sequences inside bracket expressions are
 taken to represent only single-byte characters (characters whose values
-fit within the range 0–256).  To match a range of characters where the
+fit within the range 0-256).  To match a range of characters where the
 endpoints of the range are larger than 256, enter the multibyte
 encodings of the characters directly.
 
@@ -4158,7 +4157,6 @@ a bracket expression.  Character classes consist of 
‘[:’, a keyword
 denoting the class, and ‘:]’.  *note Table 3.1: table-char-classes.
 lists the character classes defined by the POSIX standard.
 
-
 Class       Meaning
 --------------------------------------------------------------------------
 ‘[:alnum:]’ Alphanumeric characters
@@ -4202,7 +4200,7 @@ These apply to non-ASCII character sets, which can have 
single symbols
 (called “collating elements”) that are represented with more than one
 character.  They can also have several characters that are equivalent
 for “collating”, or sorting, purposes.  (For example, in French, a plain
-“e” and a grave-accented “è” are equivalent.)  These sequences are:
+"e" and a grave-accented "è" are equivalent.)  These sequences are:
 
 Collating symbols
      Multicharacter collating elements enclosed between ‘[.’ and ‘.]’.
@@ -4213,7 +4211,7 @@ Collating symbols
 Equivalence classes
      Locale-specific names for a list of characters that are equal.  The
      name is enclosed between ‘[=’ and ‘=]’.  For example, the name 
‘e’
-     might be used to represent all of “e,” “ê,” “è,” and 
“é.” In this
+     might be used to represent all of "e," "ê," "è," and "é."  In this
      case, ‘[[=e=]]’ is a regexp that matches any of ‘e’, ‘ê’, 
‘é’, or
      ‘è’.
 
@@ -4241,8 +4239,8 @@ Consider the following:
    This example uses the ‘sub()’ function to make a change to the input
 record.  (‘sub()’ replaces the first instance of any text matched by the
 first argument with the string provided as the second argument; *note
-String Functions::.)  Here, the regexp ‘/a+/’ indicates “one or more 
‘a’
-characters,” and the replacement text is ‘<A>’.
+String Functions::.)  Here, the regexp ‘/a+/’ indicates "one or more 
‘a’
+characters," and the replacement text is ‘<A>’.
 
    The input contains four ‘a’ characters.  ‘awk’ (and POSIX) regular
 expressions always match the leftmost, _longest_ sequence of input
@@ -4300,8 +4298,8 @@ type ‘"\\*"’.  The first backslash escapes the second 
one so that the
 string actually contains the two characters ‘\’ and ‘*’.
 
    Given that you can use both regexp and string constants to describe
-regular expressions, which should you use?  The answer is “regexp
-constants,” for several reasons:
+regular expressions, which should you use?  The answer is "regexp
+constants," for several reasons:
 
    • String constants are more complicated to write and more difficult
      to read.  Using regexp constants makes your programs less
@@ -4336,8 +4334,8 @@ used inside a bracket expression for a dynamic regexp:
      ⊣ here is a sample line
      Ctrl-d
 
-   ‘gawk’ does not have this problem, and it isn’t likely to occur often
-in practice, but it’s worth noting for future reference.
+   ‘gawk’ does not have this problem, and it isn't likely to occur often
+in practice, but it's worth noting for future reference.
 
 
 File: gawk.info,  Node: GNU Regexp Operators,  Next: Case-sensitivity,  Prev: 
Computed Regexps,  Up: Regexp
@@ -4361,7 +4359,7 @@ letters, digits, or underscores (‘_’):
      current locale.  Think of it as shorthand for ‘[^[:space:]]’.
 
 ‘\w’
-     Matches any word-constituent character—that is, it matches any
+     Matches any word-constituent character--that is, it matches any
      letter, digit, or underscore.  Think of it as shorthand for
      ‘[[:alnum:]_]’.
 
@@ -4387,7 +4385,7 @@ letters, digits, or underscores (‘_’):
      characters.  For example, ‘/\Brat\B/’ matches ‘crate’, but it does
      not match ‘dirty rat’.  ‘\B’ is essentially the opposite of 
‘\y’.
      Another way to think of this is that ‘\B’ matches the empty string
-     provided it’s not at the edge of a word.
+     provided it's not at the edge of a word.
 
    There are two other operators that work on buffers.  In Emacs, a
 “buffer” is, naturally, an Emacs buffer.  Other GNU programs, including
@@ -4401,11 +4399,11 @@ operators are:
      Matches the empty string at the end of a buffer (string)
 
    Because ‘^’ and ‘$’ always work in terms of the beginning and end of
-strings, these operators don’t add any new capabilities for ‘awk’.  They
+strings, these operators don't add any new capabilities for ‘awk’.  They
 are provided for compatibility with other GNU software.
 
    In other GNU software, the word-boundary operator is ‘\b’.  However,
-that conflicts with the ‘awk’ language’s definition of ‘\b’ as
+that conflicts with the ‘awk’ language's definition of ‘\b’ as
 backspace, so ‘gawk’ uses a different letter.  An alternative method
 would have been to require two backslashes in the GNU operators, but
 this was deemed too confusing.  The current method of using ‘\y’ for the
@@ -4447,13 +4445,13 @@ expressions.  Thus, a ‘w’ in a regular expression 
matches only a
 lowercase ‘w’ and not an uppercase ‘W’.
 
    The simplest way to do a case-independent match is to use a bracket
-expression—for example, ‘[Ww]’.  However, this can be cumbersome if you
+expression--for example, ‘[Ww]’.  However, this can be cumbersome if you
 need to use it often, and it can make the regular expressions harder to
 read.  There are two alternatives that you might prefer.
 
    One way to perform a case-insensitive match at a particular point in
 the program is to convert the data to a single case, using the
-‘tolower()’ or ‘toupper()’ built-in string functions (which we 
haven’t
+‘tolower()’ or ‘toupper()’ built-in string functions (which we haven't
 discussed yet; *note String Functions::).  For example:
 
      tolower($1) ~ /foo/  { ... }
@@ -4489,11 +4487,11 @@ dynamically turn case sensitivity on or off for all the 
rules at once.
 insensitive without having to edit it.
 
    In multibyte locales, the equivalences between upper- and lowercase
-characters are tested based on the wide-character values of the locale’s
+characters are tested based on the wide-character values of the locale's
 character set.  Prior to version 5.0, single-byte characters were tested
 based on the ISO-8859-1 (ISO Latin-1) character set.  However, as of
 version 5.0, single-byte characters are also tested based on the values
-of the locale’s character set.(2)
+of the locale's character set.(2)
 
    The value of ‘IGNORECASE’ has no effect if ‘gawk’ is in 
compatibility
 mode (*note Options::).  Case is always significant in compatibility
@@ -4504,9 +4502,9 @@ mode.
    (1) Experienced C and C++ programmers will note that it is possible,
 using something like ‘IGNORECASE = 1 && /foObAr/ { ... }’ and
 ‘IGNORECASE = 0 || /foobar/ { ... }’.  However, this is somewhat obscure
-and we don’t recommend it.
+and we don't recommend it.
 
-   (2) If you don’t understand this, don’t worry about it; it just means
+   (2) If you don't understand this, don't worry about it; it just means
 that ‘gawk’ does the right thing.
 
 
@@ -4542,7 +4540,7 @@ File: gawk.info,  Node: Regexp Summary,  Prev: 
Case-sensitivity,  Up: Regexp
    • Matching expressions may use dynamic regexps (i.e., string values
      treated as regular expressions).
 
-   • ‘gawk’’s ‘IGNORECASE’ variable lets you control the case
+   • ‘gawk’'s ‘IGNORECASE’ variable lets you control the case
      sensitivity of regexp matching.  In other ‘awk’ versions, use
      ‘tolower()’ or ‘toupper()’.
 
@@ -4646,8 +4644,8 @@ BEGIN/END::).  For example:
           { print $0 }' mail-list
 
 changes the value of ‘RS’ to ‘u’, before reading any input.  The new
-value is a string whose first character is the letter “u”; as a result,
-records are separated by the letter “u”.  Then the input file is read,
+value is a string whose first character is the letter "u"; as a result,
+records are separated by the letter "u".  Then the input file is read,
 and the second rule in the ‘awk’ program (the action with no pattern)
 prints each record.  Because each ‘print’ statement adds a newline at
 the end of its output, this ‘awk’ program copies the input with each 
‘u’
@@ -4789,11 +4787,10 @@ text, such as ‘RS = "abc(XYZ)?"’, it is possible, 
due to implementation
 constraints, that ‘gawk’ may match the leading part of the regular
 expression, but not the trailing part, particularly if the input text
 that could match the trailing part is fairly long.  ‘gawk’ attempts to
-avoid this problem, but currently, there’s no guarantee that this will
+avoid this problem, but currently, there's no guarantee that this will
 never happen.
 
             Caveats When Using Regular Expressions for ‘RS’
-
    Remember that in ‘awk’, the ‘^’ and ‘$’ anchor metacharacters 
match
 the beginning and end of a _string_, and not the beginning and end of a
 _line_.  As a result, something like ‘RS = "^[[:upper:]]"’ can only
@@ -4818,10 +4815,9 @@ value of ‘RS’ determines the end of the record.
 however.
 
                       ‘RS = "\0"’ Is Not Portable
-
    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
+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.
 
    You might think that for text files, the NUL character, which
@@ -4869,8 +4865,8 @@ languages (such as formfeed, vertical tab, etc.)  are 
_not_ considered
 whitespace by ‘awk’.
 
    The purpose of fields is to make it more convenient for you to refer
-to these pieces of the record.  You don’t have to use them—you can
-operate on the whole record if you want—but fields are what make simple
+to these pieces of the record.  You don't have to use them--you can
+operate on the whole record if you want--but fields are what make simple
 ‘awk’ programs so powerful.
 
    You use a dollar sign (‘$’) to refer to a field in an ‘awk’ program,
@@ -4895,7 +4891,7 @@ field in a record can be represented by ‘$NF’.  So, 
‘$NF’ is the same as
 last one (such as ‘$8’ when the record has only seven fields), you get
 the empty string.  If used in a numeric operation, you get zero.(1)
 
-   The use of ‘$0’, which looks like a reference to the “zeroth” field,
+   The use of ‘$0’, which looks like a reference to the "zeroth" field,
 is a special case: it represents the whole input record.  Use it when
 you are not interested in specific fields.  Here are some more examples:
 
@@ -4959,11 +4955,11 @@ not allowed; trying to reference one usually terminates 
the program.
 negative field number.  ‘gawk’ notices this and terminates your program.
 Other ‘awk’ implementations may behave differently.)
 
-   As mentioned in *note Fields::, ‘awk’ stores the current record’s
+   As mentioned in *note Fields::, ‘awk’ stores the current record's
 number of fields in the built-in variable ‘NF’ (also *note Built-in
-Variables::).  Thus, the expression ‘$NF’ is not a special feature—it is
-the direct consequence of evaluating ‘NF’ and using its value as a field
-number.
+Variables::).  Thus, the expression ‘$NF’ is not a special feature--it
+is the direct consequence of evaluating ‘NF’ and using its value as a
+field number.
 
    ---------- Footnotes ----------
 
@@ -5024,12 +5020,12 @@ range.  For example:
      ⊣ 301
      ...
 
-We’ve just created ‘$6’, whose value is the sum of fields ‘$2’, 
‘$3’,
+We've just created ‘$6’, whose value is the sum of fields ‘$2’, 
‘$3’,
 ‘$4’, and ‘$5’.  The ‘+’ sign represents addition.  For the file
 ‘inventory-shipped’, ‘$6’ represents the total number of parcels 
shipped
 for a particular month.
 
-   Creating a new field changes ‘awk’’s internal copy of the current
+   Creating a new field changes ‘awk’'s internal copy of the current
 input record, which is the value of ‘$0’.  Thus, if you do ‘print $0’
 after adding a field, the record printed includes the new field, with
 the appropriate number of field separators between it and the previously
@@ -5052,7 +5048,7 @@ out-of-range field only produces an empty string.  For 
example:
          print "everything is normal"
 
 should print ‘everything is normal’, because ‘NF+1’ is certain to be 
out
-of range.  (*Note If Statement:: for more information about ‘awk’’s
+of range.  (*Note If Statement:: for more information about ‘awk’'s
 ‘if-else’ statements.  *Note Typing and Comparison:: for more
 information about the ‘!=’ operator.)
 
@@ -5086,7 +5082,7 @@ value of ‘NF’ and recomputes ‘$0’.  (d.c.)  Here 
is an example:
      ⊣ NF = 6
      ⊣ a b c
 
-     CAUTION: Some versions of ‘awk’ don’t rebuild ‘$0’ when 
‘NF’ is
+     CAUTION: Some versions of ‘awk’ don't rebuild ‘$0’ when ‘NF’ 
is
      decremented.  Until August, 2018, this included BWK ‘awk’;
      fortunately his version now handles this correctly.
 
@@ -5098,7 +5094,7 @@ rebuild the entire record, using the current values of 
the fields and
      print $0  # or whatever else with $0
 
 This forces ‘awk’ to rebuild the record.  It does help to add a comment,
-as we’ve shown here.
+as we've shown here.
 
    There is a flip side to the relationship between ‘$0’ and the fields.
 Any assignment to ‘$0’ causes the record to be reparsed into fields
@@ -5172,9 +5168,9 @@ Given the input line:
 
 this ‘awk’ program extracts and prints the string ‘•29•Oak•St.’.
 
-   Sometimes the input data contains separator characters that don’t
+   Sometimes the input data contains separator characters that don't
 separate fields the way you thought they would.  For instance, the
-person’s name in the example we just used might have a title or suffix
+person's name in the example we just used might have a title or suffix
 attached, such as:
 
      John Q. Smith: LXIX: 29 Oak St.: Walamazoo: MI 42139
@@ -5199,7 +5195,7 @@ containing a single space, ‘" "’.  If ‘awk’ 
interpreted this value in
 the usual way, each space character would separate fields, so two spaces
 in a row would make an empty field between them.  The reason this does
 not happen is that a single space as the value of ‘FS’ is a special
-case—it is taken to specify the default manner of delimiting fields.
+case--it is taken to specify the default manner of delimiting fields.
 
    If ‘FS’ is any other single character, such as ‘","’, then each
 occurrence of that character separates two fields.  Two consecutive
@@ -5330,7 +5326,7 @@ although RFC 4180 (http://www.ietf.org/rfc/rfc4180) lists 
the common
 practices.
 
    For decades, anyone wishing to work with CSV files and ‘awk’ had to
-“roll their own” solution.  (For an example, *note Splitting By
+"roll their own" solution.  (For an example, *note Splitting By
 Content::).  In 2023, Brian Kernighan decided to add CSV support to his
 version of ‘awk’.  In order to keep up, ‘gawk’ too provides the same
 support as his version.  To use CSV data, invoke ‘gawk’ with either of
@@ -5344,7 +5340,6 @@ quotes represent an actual double quote.  The double 
quote that starts a
 quoted field must be the first character after the comma.  *note Table
 4.1: table-csv-examples. shows some examples.
 
-
 Input                  Field Contents
 ----------------------------------------------
 ‘abc def’              ‘abc def’
@@ -5355,7 +5350,7 @@ Input                  Field Contents
 
 Table 4.1: Examples of CSV data
 
-   Additionally, and here’s where it gets messy, newlines are also
+   Additionally, and here's where it gets messy, newlines are also
 allowed inside double-quoted fields!  In order to deal with such things,
 when processing CSV files, ‘gawk’ scans the input data looking for
 newlines that are not enclosed in double quotes.  Thus, use of the
@@ -5363,13 +5358,12 @@ newlines that are not enclosed in double quotes.  Thus, 
use of the
 (*note Records::), as well as field splitting with any of ‘FS’,
 ‘FIELDWIDTHS’, or ‘FPAT’.
 
-          Carriage-Return–Line-Feed Line Endings In CSV Files
-
+          Carriage-Return-Line-Feed Line Endings In CSV Files
      ‘\r\n’ is the invention of the devil.
-                          — _Brian Kernighan_
+                         -- _Brian Kernighan_
 
    Many CSV files are imported from systems where the line terminator
-for text files is a carriage-return–line-feed pair (CR-LF, ‘\r’ followed
+for text files is a carriage-return-line-feed pair (CR-LF, ‘\r’ followed
 by ‘\n’).  For ease of use, when processing CSV files, ‘gawk’ converts
 CR-LF pairs into a single newline.  That is, the ‘\r’ is removed.
 
@@ -5431,12 +5425,12 @@ and not ‘t’s.  Use ‘-v FS="t"’ or ‘-F"[t]"’ 
on the command line if y
 really do want to separate your fields with ‘t’s.  Use ‘-F '\t'’ when
 not in compatibility mode to specify that TABs separate fields.
 
-   As an example, let’s use an ‘awk’ program file called ‘edu.awk’ 
that
+   As an example, let's use an ‘awk’ program file called ‘edu.awk’ that
 contains the pattern ‘/edu/’ and the action ‘print $1’:
 
      /edu/   { print $1 }
 
-   Let’s also set ‘FS’ to be the ‘-’ character and run the program on
+   Let's also set ‘FS’ to be the ‘-’ character and run the program on
 the file ‘mail-list’.  The following command prints a list of the names
 of the people that work at or attend a university, and the first three
 digits of their phone numbers:
@@ -5451,7 +5445,7 @@ looked like this:
 
      Jean-Paul    555-2127     jeanpaul.campanorum@nyu.edu     R
 
-   The ‘-’ as part of the person’s name was used as the field separator,
+   The ‘-’ as part of the person's name was used as the field separator,
 instead of the ‘-’ in the phone number that was originally intended.
 This demonstrates why you have to be careful in choosing your field and
 record separators.
@@ -5460,8 +5454,8 @@ record separators.
 separator occurs when processing the Unix system password file.  On many
 Unix systems, each user has a separate entry in the system password
 file, with one line per user.  The information in these lines is
-separated by colons.  The first field is the user’s login name and the
-second is the user’s encrypted or shadow password.  (A shadow password
+separated by colons.  The first field is the user's login name and the
+second is the user's encrypted or shadow password.  (A shadow password
 is indicated by the presence of a single ‘x’ in the second field.)  A
 password file entry might look like this:
 
@@ -5478,7 +5472,7 @@ File: gawk.info,  Node: Full Line Fields,  Next: Field 
Splitting Summary,  Prev:
 4.5.6 Making the Full Line Be a Single Field
 --------------------------------------------
 
-Occasionally, it’s useful to treat the whole input line as a single
+Occasionally, it's useful to treat the whole input line as a single
 field.  This can be done easily and portably simply by setting ‘FS’ to
 ‘"\n"’ (a newline):(1)
 
@@ -5517,7 +5511,7 @@ first line of the file, something like:
 
    (1) Thanks to Andrew Schorr for this tip.
 
-   (2) The ‘sed’ utility is a “stream editor.” Its behavior is also
+   (2) The ‘sed’ utility is a "stream editor."  Its behavior is also
 defined by the POSIX standard.
 
 
@@ -5530,12 +5524,12 @@ It is important to remember that when you assign a 
string constant as
 the value of ‘FS’, it undergoes normal ‘awk’ string processing.  For
 example, with Unix ‘awk’ and ‘gawk’, the assignment ‘FS = "\.."’ 
assigns
 the character string ‘".."’ to ‘FS’ (the backslash is stripped).  This
-creates a regexp meaning “fields are separated by occurrences of any two
-characters.” If instead you want fields to be separated by a literal
+creates a regexp meaning "fields are separated by occurrences of any two
+characters."  If instead you want fields to be separated by a literal
 period followed by any single character, use ‘FS = "\\.."’.
 
    The following list summarizes how fields are split, based on the
-value of ‘FS’ (‘==’ means “is equal to”):
+value of ‘FS’ (‘==’ means "is equal to"):
 
 ‘gawk was invoked with --csv’
      Field splitting follows the rules given in *note Comma Separated
@@ -5610,7 +5604,7 @@ did not anticipate the use of their output as input for 
other programs.
 
    An example of the latter is a table where all the columns are lined
 up by the use of a variable number of spaces and _empty fields are just
-spaces_.  Clearly, ‘awk’’s normal field splitting based on ‘FS’ does 
not
+spaces_.  Clearly, ‘awk’'s normal field splitting based on ‘FS’ does 
not
 work well in this case.  Although a portable ‘awk’ program can use a
 series of ‘substr()’ calls on ‘$0’ (*note String Functions::), this is
 awkward and inefficient for a large number of fields.
@@ -5658,7 +5652,7 @@ calculated idle time:
      }
 
      NOTE: The preceding program uses a number of ‘awk’ features that
-     haven’t been introduced yet.
+     haven't been introduced yet.
 
    Running the program on the data produces the following results:
 
@@ -5715,8 +5709,8 @@ There are times when fixed-width data may be followed by 
additional data
 that has no fixed length.  Such data may or may not be present, but if
 it is, it should be possible to get at it from an ‘awk’ program.
 
-   Starting with version 4.2, in order to provide a way to say “anything
-else in the record after the defined fields,” ‘gawk’ allows you to add a
+   Starting with version 4.2, in order to provide a way to say "anything
+else in the record after the defined fields," ‘gawk’ allows you to add a
 final ‘*’ character to the value of ‘FIELDWIDTHS’.  There can only be
 one such character, and it must be the final non-whitespace character in
 ‘FIELDWIDTHS’.  For example:
@@ -5735,7 +5729,7 @@ File: gawk.info,  Node: Fields with fixed data,  Prev: 
Allowing trailing data,
 4.6.4 Field Values With Fixed-Width Data
 ----------------------------------------
 
-So far, so good.  But what happens if there isn’t as much data as there
+So far, so good.  But what happens if there isn't as much data as there
 should be based on the contents of ‘FIELDWIDTHS’?  Or, what happens if
 there is more data than expected?
 
@@ -5749,7 +5743,7 @@ Enough data for some fields
 Not enough data for a field
      For example, if ‘FIELDWIDTHS’ is set to ‘"2 3 4"’ and the input
      record is ‘aab’.  In this case, ‘NF’ is set to two and ‘$2’ 
has the
-     value ‘"b"’.  The idea is that even though there aren’t as many
+     value ‘"b"’.  The idea is that even though there aren't as many
      characters as were expected, there are some, so the data should be
      made available to the program.
 
@@ -5791,7 +5785,7 @@ what they are, and not by what they are not.
    The most notorious such case is comma-separated values (CSV) data.
 Many spreadsheet programs, for example, can export their data into text
 files, where each record is terminated with a newline, and fields are
-separated by commas.  If commas only separated the data, there wouldn’t
+separated by commas.  If commas only separated the data, there wouldn't
 be an issue.  The problem comes when one of the fields contains an
 _embedded_ comma.  In such cases, most programs embed the field in
 double quotes.(1)  So, we might have data like this:
@@ -5803,10 +5797,10 @@ of ‘FPAT’ should be a string that provides a 
regular expression.  This
 regular expression describes the contents of each field.
 
    In the case of CSV data as presented here, each field is either
-“anything that is not a comma,” or “a double quote, anything that is not
-a double quote, and a closing double quote.” (There are more complicated
-definitions of CSV data, treated shortly.)  If written as a regular
-expression constant (*note Regexp::), we would have
+"anything that is not a comma," or "a double quote, anything that is not
+a double quote, and a closing double quote."  (There are more
+complicated definitions of CSV data, treated shortly.)  If written as a
+regular expression constant (*note Regexp::), we would have
 ‘/([^,]+)|("[^"]+")/’.  Writing this as a string requires us to escape
 the double quotes, leading to:
 
@@ -5850,7 +5844,7 @@ would be to remove the quotes when they occur, with 
something like this:
      NOTE: Some programs export CSV data that contains embedded newlines
      between the double quotes.  ‘gawk’ provides no way to deal with
      this.  Even though a formal specification for CSV data exists,
-     there isn’t much more to be done; the ‘FPAT’ mechanism provides an
+     there isn't much more to be done; the ‘FPAT’ mechanism provides an
      elegant solution for the majority of cases, and the ‘gawk’
      developers are satisfied with that.
 
@@ -5933,9 +5927,9 @@ And here is his test program:
      ⊣ NF = 3 <p><><s>
 
    In general, using ‘FPAT’ to do your own CSV parsing is like having a
-bed with a blanket that’s not quite big enough.  There’s always a corner
-that isn’t covered.  We recommend, instead, that you use Manuel
-Collado’s ‘CSVMODE’ library for ‘gawk’ 
(http://mcollado.z15.es/xgawk/).
+bed with a blanket that's not quite big enough.  There's always a corner
+that isn't covered.  We recommend, instead, that you use Manuel
+Collado's ‘CSVMODE’ library for ‘gawk’ (http://mcollado.z15.es/xgawk/).
 
 
 File: gawk.info,  Node: FS versus FPAT,  Prev: More CSV,  Up: Splitting By 
Content
@@ -5943,14 +5937,14 @@ File: gawk.info,  Node: FS versus FPAT,  Prev: More 
CSV,  Up: Splitting By Conte
 4.7.2 ‘FS’ Versus ‘FPAT’: A Subtle Difference
 ---------------------------------------------
 
-As we discussed earlier, ‘FS’ describes the data between fields (“what
-fields are not”) and ‘FPAT’ describes the fields themselves (“what
-fields are”).  This leads to a subtle difference in how fields are found
+As we discussed earlier, ‘FS’ describes the data between fields ("what
+fields are not") and ‘FPAT’ describes the fields themselves ("what
+fields are").  This leads to a subtle difference in how fields are found
 when using regexps as the value for ‘FS’ or ‘FPAT’.
 
    In order to distinguish one field from another, there must be a
 non-empty separator between each field.  This makes intuitive
-sense—otherwise one could not distinguish fields from separators.
+sense--otherwise one could not distinguish fields from separators.
 
    Thus, regular expression matching as done when splitting fields with
 ‘FS’ is not allowed to match the null string; it must always match at
@@ -5970,9 +5964,9 @@ File: gawk.info,  Node: Testing field creation,  Next: 
Multiple Line,  Prev: Spl
 4.8 Checking How ‘gawk’ Is Splitting Records
 ============================================
 
-As we’ve seen, ‘gawk’ provides three independent methods to split input
+As we've seen, ‘gawk’ provides three independent methods to split input
 records into fields.  The mechanism used is based on which of the three
-variables—‘FS’, ‘FIELDWIDTHS’, or ‘FPAT’—was last assigned to. 
 In
+variables--‘FS’, ‘FIELDWIDTHS’, or ‘FPAT’--was last assigned to.  
In
 addition, an API input parser may choose to override the record parsing
 mechanism; please refer to *note Input Parsers:: for further information
 about this feature.
@@ -6018,13 +6012,13 @@ records.  For example, you could use the formfeed 
character (written
 ‘\f’ in ‘awk’, as in C) to separate them, making each record a page of
 the file.  To do this, just set the variable ‘RS’ to ‘"\f"’ (a string
 containing the formfeed character).  Any other character could equally
-well be used, as long as it won’t be part of the data in a record.
+well be used, as long as it won't be part of the data in a record.
 
    Another technique is to have blank lines separate records.  By a
 special dispensation, an empty string as the value of ‘RS’ indicates
 that records are separated by one or more blank lines.  When ‘RS’ is set
 to the empty string, each record always ends at the first blank line
-encountered.  The next record doesn’t start until the first nonblank
+encountered.  The next record doesn't start until the first nonblank
 line that follows.  No matter how many blank lines appear in a row, they
 all act as one record separator.  (Blank lines must be completely empty;
 lines that contain only whitespace do not count.)
@@ -6034,7 +6028,7 @@ lines that contain only whitespace do not count.)
 record and one or more blank lines after the record.  In addition, a
 regular expression always matches the longest possible sequence when
 there is a choice (*note Leftmost Longest::).  So, the next record
-doesn’t start until the first nonblank line that follows—no matter how
+doesn't start until the first nonblank line that follows--no matter how
 many blank lines appear in a row, they are considered one record
 separator.
 
@@ -6063,7 +6057,7 @@ whatever field separations result from ‘FS’.
 
    The original motivation for this special exception was probably to
 provide useful behavior in the default case (i.e., ‘FS’ is equal to
-‘" "’).  This feature can be a problem if you really don’t want the
+‘" "’).  This feature can be a problem if you really don't want the
 newline character to separate fields, because there is no way to prevent
 it.  However, you can work around this by using the ‘split()’ function
 to break up the record manually (*note String Functions::).  If you have
@@ -6118,7 +6112,7 @@ A simple program to process this file is as follows:
 
    *Note Labels Program:: for a more realistic program dealing with
 address lists.  The following list summarizes how records are split,
-based on the value of ‘RS’.  (‘==’ means “is equal to.”)
+based on the value of ‘RS’.  (‘==’ means "is equal to.")
 
 ‘RS == "\n"’
      Records are separated by the newline character (‘\n’).  In effect,
@@ -6152,8 +6146,8 @@ File: gawk.info,  Node: Getline,  Next: Read Timeout,  
Prev: Multiple Line,  Up:
 4.10 Explicit Input with ‘getline’
 ==================================
 
-So far we have been getting our input data from ‘awk’’s main input
-stream—either the standard input (usually your keyboard, sometimes the
+So far we have been getting our input data from ‘awk’'s main input
+stream--either the standard input (usually your keyboard, sometimes the
 output from another program) or the files specified on the command line.
 The ‘awk’ language has a special built-in command called ‘getline’ that
 can be used to read input under your explicit control.
@@ -6206,7 +6200,7 @@ File: gawk.info,  Node: Plain Getline,  Next: 
Getline/Variable,  Up: Getline
 
 The ‘getline’ command can be used without arguments to read input from
 the current input file.  All it does in this case is read the next input
-record and split it up into fields.  This is useful if you’ve finished
+record and split it up into fields.  This is useful if you've finished
 processing the current record, but want to do some special processing on
 the next record _right now_.  For example:
 
@@ -6232,7 +6226,7 @@ the next record _right now_.  For example:
      }
 
    This ‘awk’ program deletes C-style comments (‘/* ... */’) from the
-input.  It uses a number of features we haven’t covered yet, including
+input.  It uses a number of features we haven't covered yet, including
 string concatenation (*note Concatenation::) and the ‘index()’ and
 ‘substr()’ built-in functions (*note String Functions::).  By replacing
 the ‘print $0’ with other statements, you could perform more complicated
@@ -6273,7 +6267,7 @@ File: gawk.info,  Node: Getline/Variable,  Next: 
Getline/File,  Prev: Plain Getl
 4.10.2 Using ‘getline’ into a Variable
 --------------------------------------
 
-You can use ‘getline VAR’ to read the next record from ‘awk’’s input
+You can use ‘getline VAR’ to read the next record from ‘awk’'s input
 into the variable VAR.  No other processing is done.  For example,
 suppose the next line is a comment or a special string, and you want to
 read it without triggering any rules.  This form of ‘getline’ allows you
@@ -6393,7 +6387,7 @@ File: gawk.info,  Node: Getline/Pipe,  Next: 
Getline/Variable/Pipe,  Prev: Getli
 
      Omniscience has much to recommend it.  Failing that, attention to
      details would be useful.
-                          — _Brian Kernighan_
+                         -- _Brian Kernighan_
 
    The output of a command can also be piped into ‘getline’, using
 ‘COMMAND | getline’.  In this case, the string COMMAND is run as a shell
@@ -6442,7 +6436,7 @@ value of ‘NF’, and recomputes the value of ‘$0’.  
The values of ‘NR’
 ‘FNR’ are not changed.  ‘RT’ is set.
 
    According to POSIX, ‘EXPRESSION | getline’ is ambiguous if EXPRESSION
-contains unparenthesized operators other than ‘$’—for example, ‘"echo "
+contains unparenthesized operators other than ‘$’--for example, ‘"echo "
 "date" | getline’ is ambiguous because the concatenation operator is not
 parenthesized.  You should write it as ‘("echo " "date") | getline’ if
 you want your program to be portable to all ‘awk’ implementations.
@@ -6453,7 +6447,7 @@ you want your program to be portable to all ‘awk’ 
implementations.
      "date") | getline’.  (This is also how BWK ‘awk’ behaves.)  Some
      versions instead treat it as ‘"echo " ("date" | getline)’.  (This
      is how ‘mawk’ behaves.)  In short, _always_ use explicit
-     parentheses, and then you won’t have to worry.
+     parentheses, and then you won't have to worry.
 
 
 File: gawk.info,  Node: Getline/Variable/Pipe,  Next: Getline/Coprocess,  
Prev: Getline/Pipe,  Up: Getline
@@ -6560,8 +6554,8 @@ in mind:
    • Using ‘FILENAME’ with ‘getline’ (‘getline < FILENAME’) is 
likely to
      be a source of confusion.  ‘awk’ opens a separate input stream from
      the current input file.  However, by not using a variable, ‘$0’ and
-     ‘NF’ are still updated.  If you’re doing this, it’s probably by
-     accident, and you should reconsider what it is you’re trying to
+     ‘NF’ are still updated.  If you're doing this, it's probably by
+     accident, and you should reconsider what it is you're trying to
      accomplish.
 
    • *note Getline Summary::, presents a table summarizing the ‘getline’
@@ -6572,7 +6566,7 @@ in mind:
 
    • If the variable being assigned is an expression with side effects,
      different versions of ‘awk’ behave differently upon encountering
-     end-of-file.  Some versions don’t evaluate the expression; many
+     end-of-file.  Some versions don't evaluate the expression; many
      versions (including ‘gawk’) do.  Here is an example, courtesy of
      Duncan Moore:
 
@@ -6601,7 +6595,6 @@ of ‘getline’, listing which predefined variables are 
set by each one,
 and whether the variant is standard or a ‘gawk’ extension.  Note: for
 each variant, ‘gawk’ sets the ‘RT’ predefined variable.
 
-
 Variant                  Effect                      ‘awk’ / ‘gawk’
 -------------------------------------------------------------------------
 ‘getline’                Sets ‘$0’, ‘NF’, ‘FNR’,     ‘awk’
@@ -6686,7 +6679,7 @@ input to arrive:
 
      NOTE: You should not assume that the read operation will block
      exactly after the tenth record has been printed.  It is possible
-     that ‘gawk’ will read and buffer more than one record’s worth of
+     that ‘gawk’ will read and buffer more than one record's worth of
      data the first time.  Because of this, changing the value of
      timeout like in the preceding example is not very useful.
 
@@ -6844,7 +6837,7 @@ File: gawk.info,  Node: Input Exercises,  Prev: Input 
Summary,  Up: Reading File
 
   1. Using the ‘FIELDWIDTHS’ variable (*note Constant Size::), write a
      program to read election data, where each record represents one
-     voter’s votes.  Come up with a way to define which columns are
+     voter's votes.  Come up with a way to define which columns are
      associated with each ballot item, and print the total votes,
      including abstentions, for each item.
 
@@ -6858,11 +6851,11 @@ One of the most common programming actions is to 
“print”, or output,
 some or all of the input.  Use the ‘print’ statement for simple output,
 and the ‘printf’ statement for fancier formatting.  The ‘print’
 statement is not limited when computing _which_ values to print.
-However, with two exceptions, you cannot specify _how_ to print them—how
-many columns, whether to use exponential notation or not, and so on.
-(For the exceptions, *note Output Separators:: and *note OFMT::.)  For
-printing with specifications, you need the ‘printf’ statement (*note
-Printf::).
+However, with two exceptions, you cannot specify _how_ to print
+them--how many columns, whether to use exponential notation or not, and
+so on.  (For the exceptions, *note Output Separators:: and *note
+OFMT::.)  For printing with specifications, you need the ‘printf’
+statement (*note Printf::).
 
    Besides basic and formatted printing, this major node also covers I/O
 redirections to files and pipes, introduces the special file names that
@@ -6919,7 +6912,7 @@ probably get an error.  Keep in mind that a space is 
printed between any
 two items.
 
    Note that the ‘print’ statement is a statement and not an
-expression—you can’t use it in the pattern part of a pattern–action
+expression--you can't use it in the pattern part of a pattern-action
 statement, for example.
 
 
@@ -6929,7 +6922,7 @@ File: gawk.info,  Node: Print Examples,  Next: Output 
Separators,  Prev: Print,
 ==============================
 
 Each ‘print’ statement makes at least one line of output.  However, it
-isn’t limited to only one line.  If an item value is a string containing
+isn't limited to only one line.  If an item value is a string containing
 a newline, the newline is output along with the rest of the string.  A
 single ‘print’ statement can make any number of lines this way.
 
@@ -6965,8 +6958,8 @@ Here is the same program, without the comma:
      ...
 
    To someone unfamiliar with the ‘inventory-shipped’ file, neither
-example’s output makes much sense.  A heading line at the beginning
-would make it clearer.  Let’s add some headings to our table of months
+example's output makes much sense.  A heading line at the beginning
+would make it clearer.  Let's add some headings to our table of months
 (‘$1’) and green crates shipped (‘$2’).  We do this using a 
‘BEGIN’ rule
 (*note BEGIN/END::) so that the headings are only printed once:
 
@@ -6983,7 +6976,7 @@ When run, the program prints the following:
      Mar 15
      ...
 
-The only problem, however, is that the headings and the table data don’t
+The only problem, however, is that the headings and the table data don't
 line up!  We can fix this by printing some spaces between the two
 fields:
 
@@ -7009,7 +7002,7 @@ File: gawk.info,  Node: Output Separators,  Next: OFMT,  
Prev: Print Examples,
 
 As mentioned previously, a ‘print’ statement contains a list of items
 separated by commas.  In the output, the items are normally separated by
-single spaces.  However, this doesn’t need to be the case; a single
+single spaces.  However, this doesn't need to be the case; a single
 space is simply the default.  Any string of characters may be used as
 the “output field separator” by setting the predefined variable ‘OFS’.
 The initial value of this variable is the string ‘" "’ (i.e., a single
@@ -7055,7 +7048,7 @@ with a blank line added after each newline:
      ⊣ Jean-Paul;555-2127
      ⊣
 
-   If the value of ‘ORS’ does not contain a newline, the program’s
+   If the value of ‘ORS’ does not contain a newline, the program's
 output runs together on a single line.
 
 
@@ -7090,7 +7083,7 @@ provided in *note Strings And Numbers::.  In particular, 
for ‘print’,
 ‘awk’ uses the value of ‘OFMT’ instead of that of ‘CONVFMT’, but
 otherwise behaves exactly the same as described in that minor node.
 
-According to the POSIX standard, ‘awk’’s behavior is undefined if 
‘OFMT’
+According to the POSIX standard, ‘awk’'s behavior is undefined if 
‘OFMT’
 contains anything but a floating-point conversion specification.  (d.c.)
 
 
@@ -7134,7 +7127,7 @@ string”.
 
    The format string is very similar to that in the ISO C library
 function ‘printf()’.  Most of FORMAT is text to output verbatim.
-Scattered among this text are “format specifiers”—one per item.  Each
+Scattered among this text are “format specifiers”--one per item.  Each
 format specifier says to output the next item in the argument list at
 that place in the format.
 
@@ -7160,7 +7153,7 @@ File: gawk.info,  Node: Control Letters,  Next: Format 
Modifiers,  Prev: Basic P
 ----------------------------
 
 A format specifier starts with the character ‘%’ and ends with a
-“format-control letter”—it tells the ‘printf’ statement how to output
+“format-control letter”--it tells the ‘printf’ statement how to output
 one item.  The format-control letter specifies what _kind_ of value to
 print.  The rest of the format specifier is made up of optional
 “modifiers” that control _how_ to print the value, such as the field
@@ -7174,7 +7167,7 @@ width.  Here is a list of the format-control letters:
           NOTE: The current POSIX standard requires support for ‘%a’ and
           ‘%A’ in ‘awk’.  As far as we know, besides ‘gawk’, the 
only
           other version of ‘awk’ that actually implements it is BWK
-          ‘awk’.  It’s use is thus highly nonportable!
+          ‘awk’.  It's use is thus highly nonportable!
 
           Furthermore, these formats are not available on any system
           where the underlying C library ‘printf()’ function does not
@@ -7198,7 +7191,7 @@ width.  Here is a list of the format-control letters:
 
           Other ‘awk’ versions generally restrict themselves to printing
           the first byte of a string or to numeric values within the
-          range of a single byte (0–255).  (d.c.)
+          range of a single byte (0-255).  (d.c.)
 
 ‘%d’, ‘%i’
      Print a decimal integer.  The two control letters are equivalent.
@@ -7226,15 +7219,15 @@ width.  Here is a list of the format-control letters:
      On systems supporting IEEE 754 floating-point format, values
      representing negative infinity are formatted as ‘-inf’ or
      ‘-infinity’, and positive infinity as ‘inf’ or ‘infinity’.  
The
-     special “not a number” value formats as ‘-nan’ or ‘nan’ (*note
+     special "not a number" value formats as ‘-nan’ or ‘nan’ (*note
      Strange values::).
 
 ‘%F’
-     Like ‘%f’, but the infinity and “not a number” values are spelled
+     Like ‘%f’, but the infinity and "not a number" values are spelled
      using uppercase letters.
 
      The ‘%F’ format is a POSIX extension to ISO C; not all systems
-     support it.  On those that don’t, ‘gawk’ uses ‘%f’ instead.
+     support it.  On those that don't, ‘gawk’ uses ‘%f’ instead.
 
 ‘%g’, ‘%G’
      Print a number in either scientific notation or in floating-point
@@ -7269,8 +7262,8 @@ width.  Here is a list of the format-control letters:
      entirely.  (d.c.)
 
      NOTE: The IEEE 754 standard for floating-point arithmetic allows
-     for special values that represent “infinity” (positive and
-     negative) and values that are “not a number” (NaN).
+     for special values that represent "infinity" (positive and
+     negative) and values that are "not a number" (NaN).
 
      Input and output of these values occurs as text strings.  This is
      somewhat problematic for the ‘awk’ language, which predates the
@@ -7284,9 +7277,9 @@ File: gawk.info,  Node: Format Modifiers,  Next: Printf 
Examples,  Prev: Control
 ------------------------------------
 
 A format specification can also include “modifiers” that can control how
-much of the item’s value is printed, as well as how much space it gets.
+much of the item's value is printed, as well as how much space it gets.
 The modifiers come between the ‘%’ and the format-control letter.  We
-use the bullet symbol “•” in the following examples to represent spaces
+use the bullet symbol "•" in the following examples to represent spaces
 in the output.  Here are the possible modifiers, in the order in which
 they may appear:
 
@@ -7303,7 +7296,7 @@ they may appear:
 
      prints the famous friendly message twice.
 
-     At first glance, this feature doesn’t seem to be of much use.  It
+     At first glance, this feature doesn't seem to be of much use.  It
      is in fact a ‘gawk’ extension, intended for use in translating
      messages at runtime.  *Note Printf Ordering::, which describes how
      and why to use positional specifiers.  For now, we ignore them.
@@ -7329,7 +7322,7 @@ SPACE
      modifier.
 
 ‘#’
-     Use an “alternative form” for certain control letters.  For ‘%o’,
+     Use an "alternative form" for certain control letters.  For ‘%o’,
      supply a leading zero.  For ‘%x’ and ‘%X’, supply a leading 
‘0x’ or
      ‘0X’ for a nonzero result.  For ‘%e’, ‘%E’, ‘%f’, and 
‘%F’, the
      result always contains a decimal point.  For ‘%g’ and ‘%G’,
@@ -7408,7 +7401,7 @@ WIDTH
 
      prints ‘foob’.
 
-   The C library ‘printf’’s dynamic WIDTH and PREC capability (e.g.,
+   The C library ‘printf’'s dynamic WIDTH and PREC capability (e.g.,
 ‘"%*.*s"’) is supported.  Instead of supplying explicit WIDTH and/or
 PREC values in the format string, they are passed in the argument list.
 For example:
@@ -7474,8 +7467,8 @@ the numbers are separated by dashes.  Printing the phone 
numbers as
 numbers would have produced just the first three digits: ‘555’.  This
 would have been pretty confusing.
 
-   It wasn’t necessary to specify a width for the phone numbers because
-they are last on their lines.  They don’t need to have spaces after
+   It wasn't necessary to specify a width for the phone numbers because
+they are last on their lines.  They don't need to have spaces after
 them.
 
    The table could be made to look even nicer by adding headings to the
@@ -7540,7 +7533,7 @@ work identically for ‘printf’:
      same OUTPUT-FILE do not erase OUTPUT-FILE, but append to it.  (This
      is different from how you use redirections in shell scripts.)  If
      OUTPUT-FILE does not exist, it is created.  For example, here is
-     how an ‘awk’ program can write a list of peoples’ names to one file
+     how an ‘awk’ program can write a list of peoples' names to one file
      named ‘name-list’, and a list of phone numbers to another file
      named ‘phone-list’:
 
@@ -7573,7 +7566,7 @@ work identically for ‘printf’:
      The redirection argument COMMAND is actually an ‘awk’ expression.
      Its value is converted to a string whose contents give the shell
      command to be run.  For example, the following produces two files,
-     one unsorted list of peoples’ names, and one list sorted in reverse
+     one unsorted list of peoples' names, and one list sorted in reverse
      alphabetical order:
 
           awk '{ print $1 > "names.unsorted"
@@ -7593,12 +7586,12 @@ work identically for ‘printf’:
           print("at record number", FNR, "of", FILENAME) | report
           close(report)
 
-     The ‘close()’ function is called here because it’s a good idea to
+     The ‘close()’ function is called here because it's a good idea to
      close the pipe as soon as all the intended output has been sent to
      it.  *Note Close Files And Pipes:: for more information.
 
      This example also illustrates the use of a variable to represent a
-     FILE or COMMAND—it is not necessary to always use a string
+     FILE or COMMAND--it is not necessary to always use a string
      constant.  Using a variable is generally a good idea, because (if
      you mean to refer to that same file or command) ‘awk’ requires that
      the string value be written identically every time.
@@ -7629,7 +7622,7 @@ a file, and then to use ‘>>’ for subsequent output:
      print "Avoid improbability generators" >> "guide.txt"
 
 This is indeed how redirections must be used from the shell.  But in
-‘awk’, it isn’t necessary.  In this kind of case, a program should use
+‘awk’, it isn't necessary.  In this kind of case, a program should use
 ‘>’ for all the ‘print’ statements, because the output file is only
 opened once.  (It happens that if you mix ‘>’ and ‘>>’ output is
 produced in the expected order.  However, mixing the operators for the
@@ -7688,13 +7681,13 @@ error message to standard error in an ‘awk’ program 
is as follows:
 This works by opening a pipeline to a shell command that can access the
 standard error stream that it inherits from the ‘awk’ process.  This is
 far from elegant, and it also requires a separate process.  So people
-writing ‘awk’ programs often don’t do this.  Instead, they send the
+writing ‘awk’ programs often don't do this.  Instead, they send the
 error messages to the screen, like this:
 
      print "Serious error detected!" > "/dev/tty"
 
 (‘/dev/tty’ is a special file supplied by the operating system that is
-connected to your keyboard and screen.  It represents the “terminal,”(1)
+connected to your keyboard and screen.  It represents the "terminal,"(1)
 which on modern systems is a keyboard and screen, not a serial console.)
 This generally has the same effect, but not always: although the
 standard error stream is usually the screen, it can be redirected; when
@@ -7734,7 +7727,7 @@ option (*note Options::).
 
    ---------- Footnotes ----------
 
-   (1) The “tty” in ‘/dev/tty’ stands for “Teletype,” a serial 
terminal.
+   (1) The "tty" in ‘/dev/tty’ stands for "Teletype," a serial terminal.
 
 
 File: gawk.info,  Node: Special Files,  Next: Close Files And Pipes,  Prev: 
Special FD,  Up: Printing
@@ -7855,7 +7848,7 @@ or:
 
    The argument FILENAME or COMMAND can be any expression.  Its value
 must _exactly_ match the string that was used to open the file or start
-the command (spaces and other “irrelevant” characters included).  For
+the command (spaces and other "irrelevant" characters included).  For
 example, if you open a pipe with this:
 
      "sort -r names" | getline foo
@@ -7885,7 +7878,7 @@ programs.  Here are some of the reasons for closing an 
output file:
      with ‘getline’.
 
    • To write numerous files, successively, in the same ‘awk’ program.
-     If the files aren’t closed, eventually ‘awk’ may exceed a system
+     If the files aren't closed, eventually ‘awk’ may exceed a system
      limit on the number of open files in one process.  It is best to
      close each one when the program has finished writing it.
 
@@ -7907,7 +7900,7 @@ programs.  Here are some of the reasons for closing an 
output file:
 
    If you use more files than the system allows you to have open, ‘gawk’
 attempts to multiplex the available open files among your data files.
-‘gawk’’s ability to do this depends upon the facilities of your
+‘gawk’'s ability to do this depends upon the facilities of your
 operating system, so it may not always work.  It is therefore both good
 practice and good portability advice to always use ‘close()’ on your
 files when you are done with them.  In fact, if you are using a lot of
@@ -7938,7 +7931,7 @@ represent a file, pipe, or coprocess that was opened with 
a redirection.
 In such a case, it returns a negative value, indicating an error.  In
 addition, ‘gawk’ sets ‘ERRNO’ to a string indicating the error.
 
-   Note also that ‘close(FILENAME)’ has no “magic” effects on the
+   Note also that ‘close(FILENAME)’ has no "magic" effects on the
 implicit loop that reads through the files named on the command line.
 It is, more likely, a close of a file that was never opened with a
 redirection, so ‘awk’ silently does nothing, except return a negative
@@ -7957,13 +7950,13 @@ more detail and gives an example.
    ---------- Footnotes ----------
 
    (1) The technical terminology is rather morbid.  The finished child
-is called a “zombie,” and cleaning up after it is referred to as
-“reaping.”
+is called a "zombie," and cleaning up after it is referred to as
+"reaping."
 
 
 File: gawk.info,  Node: Close Return Value,  Up: Close Files And Pipes
 
-5.9.1 Using ‘close()’’s Return Value
+5.9.1 Using ‘close()’'s Return Value
 ------------------------------------
 
 In many older versions of Unix ‘awk’, the ‘close()’ function is 
actually
@@ -7984,15 +7977,14 @@ problem.
 coprocess (input or output), the return value is the exit status of the
 command, as described in *note Table 5.1:
 table-close-pipe-return-values.(1)  Otherwise, it is the return value
-from the system’s ‘close()’ or ‘fclose()’ C functions when closing 
input
+from the system's ‘close()’ or ‘fclose()’ C functions when closing 
input
 or output files, respectively.  This value is zero if the close
 succeeds, or −1 if it fails.  Recent versions of BWK ‘awk’ also return
 the same values from ‘close()’.
 
-
 Situation                            Return value from ‘close()’
 --------------------------------------------------------------------------
-Normal exit of command               Command’s exit status
+Normal exit of command               Command's exit status
 Death by signal of command           256 + number of murderous signal
 Death by signal of command with      512 + number of murderous signal
 core dump
@@ -8023,7 +8015,7 @@ This minor node describes a ‘gawk’-specific feature.
    Normally, when you send data down a pipeline to a command with
 ‘print’ or ‘printf’, ‘gawk’ “flushes” the output down the 
pipe.  That
 is, output is not buffered, but written directly.  This assures, that
-pipeline output intermixed with ‘gawk’’s output comes out in the
+pipeline output intermixed with ‘gawk’'s output comes out in the
 expected order:
 
      print "something"                       # goes to standard output
@@ -8040,7 +8032,7 @@ expensive.
      ‘gawk’ will buffer data for all pipelines.
 
    • Set ‘PROCINFO["COMMAND", "BUFFERPIPE"]’ to any value.  In this
-     case, only COMMAND’s data will be fully buffered.
+     case, only COMMAND's data will be fully buffered.
 
    You _must_ create one or the other of these elements in ‘PROCINFO’
 before the first ‘print’ or ‘printf’ to the pipeline.  Doing so after
@@ -8105,7 +8097,7 @@ For standard output, you may use ‘PROCINFO["-", 
"NONFATAL"]’ or
    When attempting to open a TCP/IP socket (*note TCP/IP Networking::),
 ‘gawk’ tries multiple times.  The ‘GAWK_SOCK_RETRIES’ environment
 variable (*note Other Environment Variables::) allows you to override
-‘gawk’’s builtin default number of attempts.  However, once nonfatal I/O
+‘gawk’'s builtin default number of attempts.  However, once nonfatal I/O
 is enabled for a given socket, ‘gawk’ only retries once, relying on
 ‘awk’-level code to notice that there was a problem.
 
@@ -8183,7 +8175,7 @@ operators.
 * Menu:
 
 * Values::                      Constants, Variables, and Regular Expressions.
-* All Operators::               ‘gawk’’s operators.
+* All Operators::               ‘gawk’'s operators.
 * Truth Values and Conditions:: Testing for true and false.
 * Function Calls::              A function call is an expression.
 * Precedence::                  How various operators nest.
@@ -8219,7 +8211,7 @@ same value.  There are three types of constants: numeric, 
string, and
 regular expression.
 
    Each is used in the appropriate context when you need a data value
-that isn’t going to change.  Numeric constants can have different forms,
+that isn't going to change.  Numeric constants can have different forms,
 but are internally stored in an identical manner.
 
 * Menu:
@@ -8281,7 +8273,7 @@ an error if you try to do so.  For example:
      ⊣ gawk: cmd. line:1: BEGIN { print "hello,
      ⊣ gawk: cmd. line:1:               ^ syntax error
 
-   Although POSIX doesn’t define what happens if you use an escaped
+   Although POSIX doesn't define what happens if you use an escaped
 newline, as in the previous C example, all known versions of ‘awk’ allow
 you to do so.  Unfortunately, what each one does with such a string
 varies.  (d.c.)  ‘gawk’, ‘mawk’, and the OpenSolaris POSIX ‘awk’ 
(*note
@@ -8323,12 +8315,12 @@ octal (base 8) and hexadecimal (base 16).  In octal, 
the numbers go 0,
 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, and so on.  Just as ‘11’ in decimal is
 1 times 10 plus 1, so ‘11’ in octal is 1 times 8 plus 1.  This equals 9
 in decimal.  In hexadecimal, there are 16 digits.  Because the everyday
-decimal number system only has ten digits (‘0’–‘9’), the letters 
‘a’
+decimal number system only has ten digits (‘0’-‘9’), the letters 
‘a’
 through ‘f’ represent the rest.  (Case in the letters is usually
 irrelevant; hexadecimal ‘a’ and ‘A’ have the same value.)  Thus, 
‘11’ in
 hexadecimal is 1 times 16 plus 1, which equals 17 in decimal.
 
-   Just by looking at plain ‘11’, you can’t tell what base it’s in.  
So,
+   Just by looking at plain ‘11’, you can't tell what base it's in.  So,
 in C, C++, and other languages derived from C, there is a special
 notation to signify the base.  Octal numbers start with a leading ‘0’,
 and hexadecimal numbers start with a leading ‘0x’ or ‘0X’:
@@ -8374,7 +8366,7 @@ octal constants.  For example, ‘gawk’ treats 
‘018’ as decimal 18:
 If ‘gawk’ is in compatibility mode (*note Options::), they are not
 available.
 
-              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,
 ‘gawk’ no longer remembers what the original form of the constant was;
@@ -8442,7 +8434,7 @@ author probably intended:
      # Note that /foo/ is on the left of the ~
      if (/foo/ ~ $1) print "found foo"
 
-This code is “obviously” testing ‘$1’ for a match against the regexp
+This code is "obviously" testing ‘$1’ for a match against the regexp
 ‘/foo/’.  But in fact, the expression ‘/foo/ ~ $1’ really means ‘($0 
~
 /foo/) ~ $1’.  In other words, first match the input record against the
 regexp ‘/foo/’.  The result is either zero or one, depending upon the
@@ -8504,9 +8496,9 @@ This minor node describes a ‘gawk’-specific feature.
    As we saw in the previous minor node, regexp constants (‘/.../’) hold
 a strange position in the ‘awk’ language.  In most contexts, they act
 like an expression: ‘$0 ~ /.../’.  In other contexts, they denote only a
-regexp to be matched.  In no case are they really a “first class
-citizen” of the language.  That is, you cannot define a scalar variable
-whose type is “regexp” in the same sense that you can define a variable
+regexp to be matched.  In no case are they really a "first class
+citizen" of the language.  That is, you cannot define a scalar variable
+whose type is "regexp" in the same sense that you can define a variable
 to be a number or a string:
 
      num = 42        Numeric variable
@@ -8617,10 +8609,10 @@ names.  Case is significant in variable names; ‘a’ 
and ‘A’ are distinct
 variables.
 
    A variable name is a valid expression by itself; it represents the
-variable’s current value.  Variables are given new values with
+variable's current value.  Variables are given new values with
 “assignment operators”, “increment operators”, and “decrement 
operators”
 (*note Assignment Ops::).  In addition, the ‘sub()’ and ‘gsub()’
-functions can change a variable’s value, and the ‘match()’, 
‘split()’,
+functions can change a variable's value, and the ‘match()’, ‘split()’,
 and ‘patsplit()’ functions can change the contents of their array
 parameters (*note String Functions::).
 
@@ -8629,7 +8621,7 @@ field separator) and ‘NF’ (the number of fields in 
the current input
 record).  *Note Built-in Variables:: for a list of the predefined
 variables.  These predefined variables can be used and assigned just
 like all other variables, but their values are also used or changed
-automatically by ‘awk’.  All predefined variables’ names are entirely
+automatically by ‘awk’.  All predefined variables' names are entirely
 uppercase.
 
    Variables in ‘awk’ can be assigned either numeric or string values.
@@ -8662,7 +8654,7 @@ execute.  The ‘-v’ option and its assignment must 
precede all the file
 name arguments, as well as the program text.  (*Note Options:: for more
 information about the ‘-v’ option.)  Otherwise, the variable assignment
 is performed at a time determined by its position among the input file
-arguments—after the processing of the preceding input file argument.
+arguments--after the processing of the preceding input file argument.
 For example:
 
      awk '{ print $n }' n=4 inventory-shipped n=2 mail-list
@@ -8689,10 +8681,10 @@ processes the values of command-line assignments for 
escape sequences
 
    Normally, variables assigned on the command line (with or without the
 ‘-v’ option) are treated as strings.  When such variables are used as
-numbers, ‘awk’’s normal automatic conversion of strings to numbers takes
-place, and everything “just works.”
+numbers, ‘awk’'s normal automatic conversion of strings to numbers takes
+place, and everything "just works."
 
-   However, ‘gawk’ supports variables whose types are “regexp”.  You 
can
+   However, ‘gawk’ supports variables whose types are "regexp".  You can
 assign variables of this type using the following syntax:
 
      gawk -v 're1=@/foo|bar/' '...' /path/to/file1 're2=@/baz|quux/' 
/path/to/file2
@@ -8742,7 +8734,7 @@ string, concatenate that number with the empty string, 
‘""’.  To force a
 string to be converted to a number, add zero to that string.  A string
 is converted to a number by interpreting any numeric prefix of the
 string as numerals: ‘"2.5"’ converts to 2.5, ‘"1e3"’ converts to 1,000,
-and ‘"25fix"’ has a numeric value of 25.  Strings that can’t be
+and ‘"25fix"’ has a numeric value of 25.  Strings that can't be
 interpreted as valid numbers convert to zero.
 
    The exact manner in which numbers are converted into strings is
@@ -8750,13 +8742,13 @@ controlled by the ‘awk’ predefined variable 
‘CONVFMT’ (*note Built-in
 Variables::).  Numbers are converted using the ‘sprintf()’ function with
 ‘CONVFMT’ as the format specifier (*note String Functions::).
 
-   ‘CONVFMT’’s default value is ‘"%.6g"’, which creates a value with 
at
+   ‘CONVFMT’'s default value is ‘"%.6g"’, which creates a value with at
 most six significant digits.  For some applications, you might want to
 change it to specify more precision.  On most modern machines, 17 digits
-is usually enough to capture a floating-point number’s value exactly.(1)
+is usually enough to capture a floating-point number's value exactly.(1)
 
    Strange results can occur if you set ‘CONVFMT’ to a string that
-doesn’t tell ‘sprintf()’ how to format floating-point numbers in a
+doesn't tell ‘sprintf()’ how to format floating-point numbers in a
 useful way.  For example, if you forget the ‘%’ in the format, ‘awk’
 converts all numbers to the same constant string.
 
@@ -8771,7 +8763,6 @@ value of ‘CONVFMT’ may be.  Given the following code 
fragment:
 ‘b’ has the value ‘"12"’, not ‘"12.00"’.  (d.c.)
 
            Pre-POSIX ‘awk’ Used ‘OFMT’ for String Conversion
-
    Prior to the POSIX standard, ‘awk’ used the value of ‘OFMT’ for
 converting numbers to strings.  ‘OFMT’ specifies the output format to
 use when printing numbers with ‘print’.  ‘CONVFMT’ was introduced in
@@ -8793,11 +8784,11 @@ File: gawk.info,  Node: Locale influences conversions,  
Prev: Strings And Number
 ........................................
 
 Where you are can matter when it comes to converting between numbers and
-strings.  The local character set and language—the “locale”—can affect
+strings.  The local character set and language--the “locale”--can affect
 numeric formats.  In particular, for ‘awk’ programs, it affects the
 decimal point character and the thousands-separator character.  The
 ‘"C"’ locale, and most English-language locales, use the period
-character (‘.’) as the decimal point and don’t have a thousands
+character (‘.’) as the decimal point and don't have a thousands
 separator.  However, many (if not most) European and non-English locales
 use the comma (‘,’) as the decimal point character.  European locales
 often use either a space or a period as the thousands separator, if they
@@ -8824,7 +8815,7 @@ difference in behavior, on a GNU/Linux system:
 
 The ‘en_DK.utf-8’ locale is for English in Denmark, where the comma acts
 as the decimal point separator.  In the normal ‘"C"’ locale, ‘gawk’
-treats ‘4,321’ as 4, while in the Danish locale, it’s treated as the
+treats ‘4,321’ as 4, while in the Danish locale, it's treated as the
 full number including the fractional part, 4.321.
 
    Some earlier versions of ‘gawk’ fully complied with this aspect of
@@ -8832,16 +8823,15 @@ the standard.  However, many users in non-English 
locales complained
 about this behavior, because their data used a period as the decimal
 point, so the default behavior was restored to use a period as the
 decimal point character.  You can use the ‘--use-lc-numeric’ option
-(*note Options::) to force ‘gawk’ to use the locale’s decimal point
-character.  (‘gawk’ also uses the locale’s decimal point character when
+(*note Options::) to force ‘gawk’ to use the locale's decimal point
+character.  (‘gawk’ also uses the locale's decimal point character when
 in POSIX mode, either via ‘--posix’ or the ‘POSIXLY_CORRECT’ 
environment
 variable, as shown previously.)
 
    *note Table 6.1: table-locale-affects. describes the cases in which
-the locale’s decimal point character is used and when a period is used.
+the locale's decimal point character is used and when a period is used.
 Some of these features have not been described yet.
 
-
 Feature     Default        ‘--posix’ or
                            ‘--use-lc-numeric’
 ------------------------------------------------------------
@@ -8885,7 +8875,7 @@ expressions.  All of these arithmetic operators follow 
normal precedence
 rules and work as you would expect them to.
 
    The following example uses a file named ‘grades’, which contains a
-list of student names as well as three test scores per student (it’s a
+list of student names as well as three test scores per student (it's a
 small class):
 
      Pat   100 97 58
@@ -8920,7 +8910,7 @@ order from the highest precedence to the lowest:
 
 ‘X / Y’
      Division; because all numbers in ‘awk’ are floating-point numbers,
-     the result is _not_ rounded to an integer—‘3 / 4’ has the value
+     the result is _not_ rounded to an integer--‘3 / 4’ has the value
      0.75.  (It is a common mistake, especially for C programmers, to
      forget that _all_ numbers in ‘awk’ are floating point, and that
      division of integer-looking constants produces a real number, not
@@ -8942,8 +8932,8 @@ have the same precedence.
 
    When computing the remainder of ‘X % Y’, the quotient is rounded
 toward zero to an integer and multiplied by Y.  This result is
-subtracted from X; this operation is sometimes known as “trunc-mod.” The
-following relation always holds:
+subtracted from X; this operation is sometimes known as "trunc-mod."
+The following relation always holds:
 
      b * int(a / b) + (a % b) == a
 
@@ -8970,7 +8960,7 @@ File: gawk.info,  Node: Concatenation,  Next: Assignment 
Ops,  Prev: Arithmetic
 --------------------------
 
      It seemed like a good idea at the time.
-                          — _Brian Kernighan_
+                         -- _Brian Kernighan_
 
    There is only one string operation: concatenation.  It does not have
 a specific operator to represent it.  Instead, concatenation is
@@ -9025,16 +9015,16 @@ often counter-intuitive.  Consider this example:
      $ awk 'BEGIN { print -12 " " -24 }'
      ⊣ -12-24
 
-   This “obviously” is concatenating −12, a space, and −24.  But where
+   This "obviously" is concatenating −12, a space, and −24.  But where
 did the space disappear to?  The answer lies in the combination of
-operator precedences and ‘awk’’s automatic conversion rules.  To get the
+operator precedences and ‘awk’'s automatic conversion rules.  To get the
 desired result, write the program this way:
 
      $ awk 'BEGIN { print -12 " " (-24) }'
      ⊣ -12 -24
 
    This forces ‘awk’ to treat the ‘-’ on the ‘-24’ as unary.  
Otherwise,
-it’s parsed as follows:
+it's parsed as follows:
 
          −12 (‘" "’ − 24)
      ⇒ −12 (0 − 24)
@@ -9042,11 +9032,11 @@ it’s parsed as follows:
      ⇒ −12−24
 
    As mentioned earlier, when mixing concatenation with other operators,
-_parenthesize_.  Otherwise, you’re never quite sure what you’ll get.
+_parenthesize_.  Otherwise, you're never quite sure what you'll get.
 
    ---------- Footnotes ----------
 
-   (1) It happens that BWK ‘awk’, ‘gawk’, and ‘mawk’ all “get it 
right,”
+   (1) It happens that BWK ‘awk’, ‘gawk’, and ‘mawk’ all "get it 
right,"
 but you should not rely on this.
 
 
@@ -9056,7 +9046,7 @@ File: gawk.info,  Node: Assignment Ops,  Next: Increment 
Ops,  Prev: Concatenati
 ----------------------------
 
 An “assignment” is an expression that stores a (usually different) value
-into a variable.  For example, let’s assign the value one to the
+into a variable.  For example, let's assign the value one to the
 variable ‘z’:
 
      z = 1
@@ -9075,7 +9065,7 @@ This also illustrates string concatenation.  The ‘=’ 
sign is called an
 “assignment operator”.  It is the simplest assignment operator because
 the value of the righthand operand is stored unchanged.  Most operators
 (addition, concatenation, and so on) have no effect except to compute a
-value.  If the value isn’t used, there’s no reason to use the operator.
+value.  If the value isn't used, there's no reason to use the operator.
 An assignment operator is different; it does produce a value, but even
 if you ignore it, the assignment still makes itself felt through the
 alteration of the variable.  We call this a “side effect”.
@@ -9089,7 +9079,7 @@ that the assignment stores in the specified variable, 
field, or array
 element.  (Such values are called “rvalues”.)
 
    It is important to note that variables do _not_ have permanent types.
-A variable’s type is simply the type of whatever value was last assigned
+A variable's type is simply the type of whatever value was last assigned
 to it.  In the following program fragment, the variable ‘foo’ has a
 numeric value at first, and a string value later on:
 
@@ -9112,10 +9102,10 @@ zero.  After executing the following code, the value of 
‘foo’ is five:
      examples illustrate how ‘awk’ works, _not_ how you should write
      your programs!
 
-   An assignment is an expression, so it has a value—the same value that
-is assigned.  Thus, ‘z = 1’ is an expression with the value one.  One
-consequence of this is that you can write multiple assignments together,
-such as:
+   An assignment is an expression, so it has a value--the same value
+that is assigned.  Thus, ‘z = 1’ is an expression with the value one.
+One consequence of this is that you can write multiple assignments
+together, such as:
 
      x = y = z = 5
 
@@ -9161,7 +9151,7 @@ expression.  For example:
 
 The indices of ‘bar’ are practically guaranteed to be different, because
 ‘rand()’ returns different values each time it is called.  (Arrays and
-the ‘rand()’ function haven’t been covered yet.  *Note Arrays::, and
+the ‘rand()’ function haven't been covered yet.  *Note Arrays::, and
 *note Numeric Functions:: for more information.)  This example
 illustrates an important fact about assignment operators: the lefthand
 expression is only evaluated _once_.
@@ -9178,7 +9168,6 @@ The value of ‘a[3]’ could be either two or four.
 operators.  In each case, the righthand operand is an expression whose
 value is converted to a number.
 
-
 Operator               Effect
 --------------------------------------------------------------------------
 LVALUE ‘+=’            Add INCREMENT to the value of LVALUE.
@@ -9229,11 +9218,11 @@ are convenient abbreviations for very common operations.
    The operator used for adding one is written ‘++’.  It can be used to
 increment a variable either before or after taking its value.  To
 “pre-increment” a variable ‘v’, write ‘++v’.  This adds one to the 
value
-of ‘v’—that new value is also the value of the expression.  (The
+of ‘v’--that new value is also the value of the expression.  (The
 assignment expression ‘v += 1’ is completely equivalent.)  Writing the
 ‘++’ after the variable specifies “post-increment”.  This increments 
the
 variable value just the same; the difference is that the value of the
-increment expression itself is the variable’s _old_ value.  Thus, if
+increment expression itself is the variable's _old_ value.  Thus, if
 ‘foo’ has the value four, then the expression ‘foo++’ has the value
 four, but it changes the value of ‘foo’ to five.  In other words, the
 operator returns the old value of the variable, but with the side effect
@@ -9241,7 +9230,7 @@ of incrementing it.
 
    The post-increment ‘foo++’ is nearly the same as writing ‘(foo += 1)
 - 1’.  It is not perfectly equivalent because all numbers in ‘awk’ are
-floating point—in floating point, ‘foo + 1 - 1’ does not necessarily
+floating point--in floating point, ‘foo + 1 - 1’ does not necessarily
 equal ‘foo’.  But the difference is minute as long as you stick to
 numbers that are fairly small (less than 10e12).
 
@@ -9274,10 +9263,9 @@ a summary of increment and decrement expressions:
      instead of adding, it subtracts.)
 
                        Operator Evaluation Order
-
      Doctor, it hurts when I do this!
-     Then don’t do that!
-                           — _Groucho Marx_
+     Then don't do that!
+                           -- _Groucho Marx_
 
 What happens for something like the following?
 
@@ -9306,20 +9294,20 @@ File: gawk.info,  Node: Truth Values and Conditions,  
Next: Function Calls,  Pre
 6.3 Truth Values and Conditions
 ===============================
 
-In certain contexts, expression values also serve as “truth values”;
+In certain contexts, expression values also serve as "truth values";
 i.e., they determine what should happen next as the program runs.  This
-minor node describes how ‘awk’ defines “true” and “false” and how 
values
+minor node describes how ‘awk’ defines "true" and "false" and how values
 are compared.
 
 * Menu:
 
-* Truth Values::                What is “true” and what is “false”.
+* Truth Values::                What is "true" and what is "false".
 * Typing and Comparison::       How variables acquire types and how this
                                 affects comparison of numbers and strings with
                                 ‘<’, etc.
 * Boolean Ops::                 Combining comparison expressions using boolean
-                                operators ‘||’ (“or”), ‘&&’
-                                (“and”) and ‘!’ (“not”).
+                                operators ‘||’ ("or"), ‘&&’
+                                ("and") and ‘!’ ("not").
 * Conditional Exp::             Conditional expressions select between two
                                 subexpressions under control of a third
                                 subexpression.
@@ -9331,7 +9319,7 @@ File: gawk.info,  Node: Truth Values,  Next: Typing and 
Comparison,  Up: Truth V
 -----------------------------
 
 Many programming languages have a special representation for the
-concepts of “true” and “false.” Such languages usually use the special
+concepts of "true" and "false."  Such languages usually use the special
 constants ‘true’ and ‘false’, or perhaps their uppercase equivalents.
 However, ‘awk’ is different.  It borrows a very simple concept of true
 and false from C. In ‘awk’, any nonzero numeric value _or_ any nonempty
@@ -9348,7 +9336,7 @@ times:
             print "A strange truth value"
      }
 
-   There is a surprising consequence of the “nonzero or non-null” rule:
+   There is a surprising consequence of the "nonzero or non-null" rule:
 the string constant ‘"0"’ is actually true, because it is non-null.
 (d.c.)
 
@@ -9359,7 +9347,7 @@ File: gawk.info,  Node: Typing and Comparison,  Next: 
Boolean Ops,  Prev: Truth
 ------------------------------------------------
 
      The Guide is definitive.  Reality is frequently inaccurate.
-       — _Douglas Adams, ‘The Hitchhiker’s Guide to the Galaxy’_
+      -- _Douglas Adams, ‘The Hitchhiker's Guide to the Galaxy’_
 
    Unlike in other programming languages, in ‘awk’ variables do not have
 a fixed type.  Instead, they can be either a number or a string,
@@ -9382,14 +9370,14 @@ Scalar objects in ‘awk’ (variables, array elements, 
and fields) are
 _dynamically_ typed.  This means their type can change as the program
 runs, from “untyped” before any use,(1) to string or number, and then
 from string to number or number to string, as the program progresses.
-(‘gawk’ also provides regexp-typed scalars, but let’s ignore that for
+(‘gawk’ also provides regexp-typed scalars, but let's ignore that for
 now; *note Strong Regexp Constants::.)
 
-   You can’t do much with untyped variables, other than tell that they
+   You can't do much with untyped variables, other than tell that they
 are untyped.  The following program tests ‘a’ against ‘""’ and 
‘0’; the
 test succeeds when ‘a’ has never been assigned a value.  It also uses
 the built-in ‘typeof()’ function (not presented yet; *note Type
-Functions::) to show ‘a’’s type:
+Functions::) to show ‘a’'s type:
 
      $ gawk 'BEGIN { print (a == "" && a == 0 ?
      > "a is untyped" : "a has a type!") ; print typeof(a) }'
@@ -9413,7 +9401,7 @@ such as from a string constant, or from another scalar 
with string type:
      string
 
    So far, this is all simple and straightforward.  What happens,
-though, when ‘awk’ has to process data from a user?  Let’s start with
+though, when ‘awk’ has to process data from a user?  Let's start with
 field data.  What should the following command produce as output?
 
      echo hello | awk '{ printf("%s %s < 42\n", $1,
@@ -9421,7 +9409,7 @@ field data.  What should the following command produce as 
output?
 
 Since ‘hello’ is alphabetic data, ‘awk’ can only do a string 
comparison.
 Internally, it converts ‘42’ into ‘"42"’ and compares the two string
-values ‘"hello"’ and ‘"42"’.  Here’s the result:
+values ‘"hello"’ and ‘"42"’.  Here's the result:
 
      $ echo hello | awk '{ printf("%s %s < 42\n", $1,
      >                            ($1 < 42 ? "is" : "is not")) }'
@@ -9488,14 +9476,14 @@ NUMERIC |       string          numeric         numeric
 STRNUM  |       string          numeric         numeric
 --------+----------------------------------------------
 
-   The basic idea is that user input that looks numeric—and _only_ user
-input—should be treated as numeric, even though it is actually made of
+   The basic idea is that user input that looks numeric--and _only_ user
+input--should be treated as numeric, even though it is actually made of
 characters and is therefore also a string.  Thus, for example, the
 string constant ‘" +3.14"’, when it appears in program source code, is a
-string—even though it looks numeric—and is _never_ treated as a number
+string--even though it looks numeric--and is _never_ treated as a number
 for comparison purposes.
 
-   In short, when one operand is a “pure” string, such as a string
+   In short, when one operand is a "pure" string, such as a string
 constant, then a string comparison is performed.  Otherwise, a numeric
 comparison is performed.  (The primary difference between a number and a
 strnum is that for strnums ‘gawk’ preserves the original string value
@@ -9537,7 +9525,7 @@ program text comprise a string constant.  The following 
examples print
 
    (1) ‘gawk’ calls this “unassigned”, as the following example shows.
 
-   (2) Thus, a POSIX numeric string and ‘gawk’’s strnum are the same
+   (2) Thus, a POSIX numeric string and ‘gawk’'s strnum are the same
 thing.
 
 
@@ -9551,7 +9539,6 @@ such as equality.  They are written using “relational 
operators”, which
 are a superset of those in C. *note Table 6.3: table-relational-ops.
 describes them.
 
-
 Expression         Result
 --------------------------------------------------------------------------
 X ‘<’ Y            True if X is less than Y
@@ -9621,10 +9608,10 @@ comparison is:
      ⊣ false
 
 the result is ‘false’ because both ‘$1’ and ‘$2’ are user input.  
They
-are numeric strings—therefore both have the strnum attribute, dictating
+are numeric strings--therefore both have the strnum attribute, dictating
 a numeric comparison.  The purpose of the comparison rules and the use
-of numeric strings is to attempt to produce the behavior that is “least
-surprising,” while still “doing the right thing.”
+of numeric strings is to attempt to produce the behavior that is "least
+surprising," while still "doing the right thing."
 
    String comparisons and regular expression comparisons are very
 different.  For example:
@@ -9661,7 +9648,7 @@ File: gawk.info,  Node: POSIX String Comparison,  Prev: 
Comparison Operators,  U
 .........................................................
 
 The POSIX standard used to say that all string comparisons are performed
-based on the locale’s “collating order”.  This is the order in which
+based on the locale's “collating order”.  This is the order in which
 characters sort, as defined by the locale (for more discussion, *note
 Locales::).  This order is usually very different from the results
 obtained when doing straight byte-by-byte comparison.(1)
@@ -9706,8 +9693,8 @@ File: gawk.info,  Node: Boolean Ops,  Next: Conditional 
Exp,  Prev: Typing and C
 -------------------------
 
 A “Boolean expression” is a combination of comparison expressions or
-matching expressions, using the Boolean operators “or” (‘||’), 
“and”
-(‘&&’), and “not” (‘!’), along with parentheses to control 
nesting.  The
+matching expressions, using the Boolean operators "or" (‘||’), "and"
+(‘&&’), and "not" (‘!’), along with parentheses to control nesting.  
The
 truth value of the Boolean expression is computed by combining the truth
 values of the component expressions.  Boolean expressions are also
 referred to as “logical expressions”.  The terms are equivalent.
@@ -9745,7 +9732,7 @@ operators are:
      The subexpression BOOLEAN2 is evaluated only if BOOLEAN1 is false.
      This can make a difference when BOOLEAN2 contains expressions that
      have side effects.  (Thus, this test never really distinguishes
-     records that contain both ‘edu’ and ‘li’—as soon as ‘edu’ is
+     records that contain both ‘edu’ and ‘li’--as soon as ‘edu’ is
      matched, the full test succeeds.)
 
 ‘! BOOLEAN’
@@ -9760,7 +9747,7 @@ operators are:
 
    The ‘&&’ and ‘||’ operators are called “short-circuit” operators
 because of the way they work.  Evaluation of the full expression is
-“short-circuited” if the result can be determined partway through its
+"short-circuited" if the result can be determined partway through its
 evaluation.
 
    Statements that end with ‘&&’ or ‘||’ can be continued simply by
@@ -9797,7 +9784,7 @@ in the negative:
      NOTE: The ‘next’ statement is discussed in *note Next Statement::.
      ‘next’ tells ‘awk’ to skip the rest of the rules, get the next
      record, and start processing the rules over again at the top.  The
-     reason it’s there is to avoid printing the bracketing ‘START’ and
+     reason it's there is to avoid printing the bracketing ‘START’ and
      ‘END’ lines.
 
    ---------- Footnotes ----------
@@ -9812,14 +9799,14 @@ File: gawk.info,  Node: Conditional Exp,  Prev: Boolean 
Ops,  Up: Truth Values a
 -----------------------------
 
 A “conditional expression” is a special kind of expression that has
-three operands.  It allows you to use one expression’s value to select
+three operands.  It allows you to use one expression's value to select
 one of two other expressions.  The conditional expression in ‘awk’ is
 the same as in the C language, as shown here:
 
      SELECTOR ? IF-TRUE-EXP : IF-FALSE-EXP
 
 There are three subexpressions.  The first, SELECTOR, is always computed
-first.  If it is “true” (not zero or not null), then IF-TRUE-EXP is
+first.  If it is "true" (not zero or not null), then IF-TRUE-EXP is
 computed next, and its value becomes the value of the whole expression.
 Otherwise, IF-FALSE-EXP is computed next, and its value becomes the
 value of the whole expression.  For example, the following expression
@@ -9866,7 +9853,7 @@ from your program (*note Dynamic Extensions::).
    The way to use a function is with a “function call” expression, which
 consists of the function name followed immediately by a list of
 “arguments” in parentheses.  The arguments are expressions that provide
-the raw materials for the function’s calculations.  When there is more
+the raw materials for the function's calculations.  When there is more
 than one argument, they are separated by commas.  If there are no
 arguments, just write ‘()’ after the function name.  The following
 examples show function calls with and without arguments:
@@ -9877,7 +9864,7 @@ examples show function calls with and without arguments:
 
      CAUTION: Do not put any space between the function name and the
      opening parenthesis!  A user-defined function name looks just like
-     the name of a variable—a space would make the expression look like
+     the name of a variable--a space would make the expression look like
      concatenation of a variable with an expression inside parentheses.
      With built-in functions, space before the parenthesis is harmless,
      but it is best not to get into the habit of using space to avoid
@@ -9976,7 +9963,7 @@ rules; for example, ‘$$0++--’ is not a valid 
expression because the
 first ‘$’ has higher precedence than the ‘++’; to avoid the problem the
 expression can be rewritten as ‘$($0++)--’.
 
-   This list presents ‘awk’’s operators, in order of highest to lowest
+   This list presents ‘awk’'s operators, in order of highest to lowest
 precedence:
 
 ‘(’...‘)’
@@ -9992,7 +9979,7 @@ precedence:
      Exponentiation.  These operators group right to left.
 
 ‘+ - !’
-     Unary plus, minus, logical “not.”
+     Unary plus, minus, logical "not."
 
 ‘* / %’
      Multiplication, division, remainder.
@@ -10026,10 +10013,10 @@ String concatenation
      Array membership.
 
 ‘&&’
-     Logical “and.”
+     Logical "and."
 
 ‘||’
-     Logical “or.”
+     Logical "or."
 
 ‘?:’
      Conditional.  This operator groups right to left.
@@ -10063,8 +10050,8 @@ terminator.
 
    Locales can affect how dates and times are formatted (*note Time
 Functions::).  For example, a common way to abbreviate the date
-September 4, 2015, in the United States is “9/4/15.” In many countries
-in Europe, however, it is abbreviated “4.9.15.” Thus, the ‘%x’
+September 4, 2015, in the United States is "9/4/15."  In many countries
+in Europe, however, it is abbreviated "4.9.15."  Thus, the ‘%x’
 specification in a ‘"US"’ locale might produce ‘9/4/15’, while in a
 ‘"EUROPE"’ locale, it might produce ‘4.9.15’.
 
@@ -10107,7 +10094,7 @@ File: gawk.info,  Node: Expressions Summary,  Prev: 
Locales,  Up: Expressions
      an array membership testing operator, and regexp matching
      operators.  String concatenation is accomplished by placing two
      expressions next to each other; there is no explicit operator.  The
-     three-operand ‘?:’ operator provides an “if-else” test within
+     three-operand ‘?:’ operator provides an "if-else" test within
      expressions.
 
    • Assignment operators provide convenient shorthands for common
@@ -10116,7 +10103,7 @@ File: gawk.info,  Node: Expressions Summary,  Prev: 
Locales,  Up: Expressions
    • In ‘awk’, a value is considered to be true if it is nonzero _or_
      non-null.  Otherwise, the value is false.
 
-   • A variable’s type is set upon each assignment and may change over
+   • A variable's type is set upon each assignment and may change over
      its lifetime.  The type determines how it behaves in comparisons
      (string or numeric).
 
@@ -10126,7 +10113,7 @@ File: gawk.info,  Node: Expressions Summary,  Prev: 
Locales,  Up: Expressions
      and user-defined functions; this is described in *note Functions::.
 
    • Operator precedence specifies the order in which operations are
-     performed, unless explicitly overridden by parentheses.  ‘awk’’s
+     performed, unless explicitly overridden by parentheses.  ‘awk’'s
      operator precedence is compatible with that of C.
 
    • Locales can affect the format of data as output by an ‘awk’
@@ -10141,12 +10128,12 @@ File: gawk.info,  Node: Patterns and Actions,  Next: 
Arrays,  Prev: Expressions,
 As you have already seen, each ‘awk’ statement consists of a pattern
 with an associated action.  This major node describes how you build
 patterns and actions, what kinds of things you can do within actions,
-and ‘awk’’s predefined variables.
+and ‘awk’'s predefined variables.
 
-   The pattern–action rules and the statements available for use within
+   The pattern-action rules and the statements available for use within
 actions form the core of ‘awk’ programming.  In a sense, everything
 covered up to here has been the foundation that programs are built on
-top of.  Now it’s time to start building something useful.
+top of.  Now it's time to start building something useful.
 
 * Menu:
 
@@ -10173,8 +10160,8 @@ File: gawk.info,  Node: Pattern Overview,  Next: Using 
Shell Variables,  Up: Pat
 * BEGINFILE/ENDFILE::           Two special patterns for advanced control.
 * Empty::                       The empty pattern, which matches every record.
 
-Patterns in ‘awk’ control the execution of rules—a rule is executed when
-its pattern matches the current input record.  The following is a
+Patterns in ‘awk’ control the execution of rules--a rule is executed
+when its pattern matches the current input record.  The following is a
 summary of the types of ‘awk’ patterns:
 
 ‘/REGULAR EXPRESSION/’
@@ -10224,10 +10211,10 @@ File: gawk.info,  Node: Expression Patterns,  Next: 
Ranges,  Prev: Regexp Patter
 -----------------------------
 
 Any ‘awk’ expression is valid as an ‘awk’ pattern.  The pattern matches
-if the expression’s value is nonzero (if a number) or non-null (if a
+if the expression's value is nonzero (if a number) or non-null (if a
 string).  The expression is reevaluated each time the rule is tested
 against a new input record.  If the expression uses fields such as ‘$1’,
-the value depends directly on the new input record’s text; otherwise, it
+the value depends directly on the new input record's text; otherwise, it
 depends on only what has happened so far in the execution of the ‘awk’
 program.
 
@@ -10323,8 +10310,8 @@ following record.  Then the range pattern goes back to 
checking BEGPAT
 against each record.
 
    The record that turns on the range pattern and the one that turns it
-off both match the range pattern.  If you don’t want to operate on these
-records, you can write ‘if’ statements in the rule’s action to
+off both match the range pattern.  If you don't want to operate on these
+records, you can write ‘if’ statements in the rule's action to
 distinguish them from the records you are interested in.
 
    It is possible for a pattern to be turned on and off by the same
@@ -10375,7 +10362,7 @@ All the patterns described so far are for matching 
input records.  The
 and cleanup actions for ‘awk’ programs.  ‘BEGIN’ and ‘END’ rules 
must
 have actions; there is no default action for these rules because there
 is no current record when they run.  ‘BEGIN’ and ‘END’ rules are often
-referred to as “‘BEGIN’ and ‘END’ blocks” by longtime ‘awk’ 
programmers.
+referred to as "‘BEGIN’ and ‘END’ blocks" by longtime ‘awk’ 
programmers.
 
 * Menu:
 
@@ -10427,7 +10414,7 @@ functions, because each library file can have its own 
‘BEGIN’ and/or
 which library functions are named on the command line controls the order
 in which their ‘BEGIN’ and ‘END’ rules are executed.  Therefore, you
 have to be careful when writing such rules in library files so that the
-order in which they are executed doesn’t matter.  *Note Options:: for
+order in which they are executed doesn't matter.  *Note Options:: for
 more information on using library functions.  *Note Library Functions::,
 for a number of useful library functions.
 
@@ -10494,7 +10481,7 @@ File: gawk.info,  Node: BEGINFILE/ENDFILE,  Next: 
Empty,  Prev: BEGIN/END,  Up:
 This minor node describes a ‘gawk’-specific feature.
 
    Two special kinds of rule, ‘BEGINFILE’ and ‘ENDFILE’, give you
-“hooks” into ‘gawk’’s command-line file processing loop.  As with the
+"hooks" into ‘gawk’'s command-line file processing loop.  As with the
 ‘BEGIN’ and ‘END’ rules (*note BEGIN/END::), ‘BEGINFILE’ rules in a
 program execute in the order they are read by ‘gawk’.  Similarly, all
 ‘ENDFILE’ rules also execute in the order they are read.
@@ -10524,7 +10511,7 @@ tasks that would otherwise be difficult or impossible 
to perform:
      entirely.  Otherwise, ‘gawk’ exits with the usual fatal error.
 
    • If you have written extensions that modify the record handling (by
-     inserting an “input parser”; *note Input Parsers::), you can invoke
+     inserting an "input parser"; *note Input Parsers::), you can invoke
      them at this point, before ‘gawk’ has started processing the file.
      (This is a _very_ advanced feature, currently used only by the
      ‘gawkextlib’ project
@@ -10578,7 +10565,7 @@ hold a pattern that the ‘awk’ program searches for. 
 There are two ways
 to get the value of the shell variable into the body of the ‘awk’
 program.
 
-   A common method is to use shell quoting to substitute the variable’s
+   A common method is to use shell quoting to substitute the variable's
 value into the program inside the script.  For example, consider the
 following program:
 
@@ -10593,12 +10580,12 @@ double-quoted, which allows substitution of the 
‘pattern’ shell variable
 inside the quotes.  The second part is single-quoted.
 
    Variable substitution via quoting works, but can potentially be
-messy.  It requires a good understanding of the shell’s quoting rules
-(*note Quoting::), and it’s often difficult to correctly match up the
+messy.  It requires a good understanding of the shell's quoting rules
+(*note Quoting::), and it's often difficult to correctly match up the
 quotes when reading the program.
 
-   A better method is to use ‘awk’’s variable assignment feature (*note
-Assignment Options::) to assign the shell variable’s value to an ‘awk’
+   A better method is to use ‘awk’'s variable assignment feature (*note
+Assignment Options::) to assign the shell variable's value to an ‘awk’
 variable.  Then use dynamic regexps to match the pattern (*note Computed
 Regexps::).  The following shows how to redo the previous example using
 this technique:
@@ -10613,9 +10600,9 @@ Now, the ‘awk’ program is just one single-quoted 
string.  The assignment
 whitespace in the value of ‘$pattern’.  The ‘awk’ variable ‘pat’ 
could
 be named ‘pattern’ too, but that would be more confusing.  Using a
 variable also provides more flexibility, as the variable can be used
-anywhere inside the program—for printing, as an array subscript, or for
-any other use—without requiring the quoting tricks at every point in the
-program.
+anywhere inside the program--for printing, as an array subscript, or for
+any other use--without requiring the quoting tricks at every point in
+the program.
 
 
 File: gawk.info,  Node: Action Overview,  Next: Statements,  Prev: Using Shell 
Variables,  Up: Patterns and Actions
@@ -10683,7 +10670,7 @@ File: gawk.info,  Node: Statements,  Next: Built-in 
Variables,  Prev: Action Ove
 =================================
 
 “Control statements”, such as ‘if’, ‘while’, and so on, control 
the flow
-of execution in ‘awk’ programs.  Most of ‘awk’’s control statements 
are
+of execution in ‘awk’ programs.  Most of ‘awk’'s control statements are
 patterned after similar statements in C.
 
    All the control statements start with special keywords, such as ‘if’
@@ -10718,7 +10705,7 @@ File: gawk.info,  Node: If Statement,  Next: While 
Statement,  Up: Statements
 7.4.1 The ‘if’-‘else’ Statement
 -------------------------------
 
-The ‘if’-‘else’ statement is ‘awk’’s decision-making statement.  
It
+The ‘if’-‘else’ statement is ‘awk’'s decision-making statement.  It
 looks like this:
 
      ‘if (CONDITION) THEN-BODY’ [‘else ELSE-BODY’]
@@ -10745,8 +10732,8 @@ illustrate this, the previous example can be rewritten 
as:
      if (x % 2 == 0) print "x is even"; else
              print "x is odd"
 
-If the ‘;’ is left out, ‘awk’ can’t interpret the statement and it
-produces a syntax error.  Don’t actually write programs this way,
+If the ‘;’ is left out, ‘awk’ can't interpret the statement and it
+produces a syntax error.  Don't actually write programs this way,
 because a human reader might fail to see the ‘else’ if it is not the
 first thing on its line.
 
@@ -10830,7 +10817,7 @@ false to begin with.  The following is an example of a 
‘do’ statement:
          } while (i <= 10)
      }
 
-This program prints each input record 10 times.  However, it isn’t a
+This program prints each input record 10 times.  However, it isn't a
 very realistic example, because in this case an ordinary ‘while’ would
 do just as well.  This situation reflects actual experience; only
 occasionally is there a real use for a ‘do’ statement.
@@ -10877,7 +10864,7 @@ are workarounds, but they are nonobvious and can lead 
to code that is
 difficult to read and understand.  It is best, therefore, to simply
 write additional initializations as separate statements preceding the
 ‘for’ loop and to place additional increment statements at the end of
-the loop’s body.
+the loop's body.
 
    Most often, INCREMENT is an increment expression, as in the earlier
 example.  But this is not required; it can be any expression whatsoever.
@@ -10937,7 +10924,7 @@ checked for a match in the order they are defined.  If 
no suitable
 ‘case’ is found, the ‘default’ section is executed, if supplied.
 
    Each ‘case’ contains a single constant, be it numeric, string, or
-regexp.  The ‘switch’ expression is evaluated, and then each ‘case’’s
+regexp.  The ‘switch’ expression is evaluated, and then each ‘case’'s
 constant is compared against the result in turn.  The type of constant
 determines the comparison: numeric or string do the usual comparisons.
 A regexp constant (either regular, ‘/foo/’, or strongly typed, 
‘@/foo/’)
@@ -11070,10 +11057,10 @@ illustrates this fact:
           print ""
      }
 
-This program prints all the numbers from 0 to 20—except for 5, for which
-the ‘printf’ is skipped.  Because the increment ‘x++’ is not skipped,
-‘x’ does not remain stuck at 5.  Contrast the ‘for’ loop from the
-previous example with the following ‘while’ loop:
+This program prints all the numbers from 0 to 20--except for 5, for
+which the ‘printf’ is skipped.  Because the increment ‘x++’ is not
+skipped, ‘x’ does not remain stuck at 5.  Contrast the ‘for’ loop from
+the previous example with the following ‘while’ loop:
 
      BEGIN {
           x = 0
@@ -11106,7 +11093,7 @@ File: gawk.info,  Node: Next Statement,  Next: Nextfile 
Statement,  Prev: Contin
 The ‘next’ statement forces ‘awk’ to immediately stop processing the
 current record and go on to the next record.  This means that no further
 rules are executed for the current record, and the rest of the current
-rule’s action isn’t executed.
+rule's action isn't executed.
 
    Contrast this with the effect of the ‘getline’ function (*note
 Getline::).  That also causes ‘awk’ to read the next record immediately,
@@ -11114,15 +11101,15 @@ but it does not alter the flow of control in any way 
(i.e., the rest of
 the current action executes with a new input record).
 
    At the highest level, ‘awk’ program execution is a loop that reads an
-input record and then tests each rule’s pattern against it.  If you
+input record and then tests each rule's pattern against it.  If you
 think of this loop as a ‘for’ statement whose body contains the rules,
 then the ‘next’ statement is analogous to a ‘continue’ statement.  It
 skips to the end of the body of this implicit loop and executes the
 increment (which reads another record).
 
    For example, suppose an ‘awk’ program works only on records with four
-fields, and it shouldn’t fail when given bad input.  To avoid
-complicating the rest of the program, write a “weed out” rule near the
+fields, and it shouldn't fail when given bad input.  To avoid
+complicating the rest of the program, write a "weed out" rule near the
 beginning, in the following manner:
 
      NF != 4 {
@@ -11130,7 +11117,7 @@ beginning, in the following manner:
          next
      }
 
-Because of the ‘next’ statement, the program’s subsequent rules won’t
+Because of the ‘next’ statement, the program's subsequent rules won't
 see the bad record.  The error message is redirected to the standard
 error output stream, as error messages should be.  For more detail, see
 *note Special Files::.
@@ -11144,7 +11131,7 @@ rules.  *Note BEGINFILE/ENDFILE::.
    According to the POSIX standard, the behavior is undefined if the
 ‘next’ statement is used in a ‘BEGIN’ or ‘END’ rule.  ‘gawk’ 
treats it
 as a syntax error.  Although POSIX does not disallow it, most other
-‘awk’ implementations don’t allow the ‘next’ statement inside 
function
+‘awk’ implementations don't allow the ‘next’ statement inside function
 bodies (*note User-defined::).  Just as with any other ‘next’ statement,
 a ‘next’ statement inside a function body reads the next record and
 starts processing it with the first rule in the program.
@@ -11169,7 +11156,7 @@ an ‘END’ rule; in this case, it causes the program 
to stop immediately.
 *Note BEGIN/END::.
 
    The ‘nextfile’ statement is useful when there are many data files to
-process but it isn’t necessary to process every record in every file.
+process but it isn't necessary to process every record in every file.
 Without ‘nextfile’, in order to move on to the next data file, a program
 would have to continue scanning the unwanted records.  The ‘nextfile’
 statement accomplishes this much more efficiently.
@@ -11177,7 +11164,7 @@ statement accomplishes this much more efficiently.
    In ‘gawk’, execution of ‘nextfile’ causes additional things to
 happen: any ‘ENDFILE’ rules are executed if ‘gawk’ is not currently in
 an ‘END’ rule, ‘ARGIND’ is incremented, and any ‘BEGINFILE’ rules 
are
-executed.  (‘ARGIND’ hasn’t been introduced yet.  *Note Built-in
+executed.  (‘ARGIND’ hasn't been introduced yet.  *Note Built-in
 Variables::.)
 
    There is an additional, special, use case with ‘gawk’.  ‘nextfile’ 
is
@@ -11186,7 +11173,7 @@ otherwise cause ‘gawk’ to exit with a fatal error.  
In this special
 case, ‘ENDFILE’ rules are not executed.  *Note BEGINFILE/ENDFILE::.
 
    Although it might seem that ‘close(FILENAME)’ would accomplish the
-same as ‘nextfile’, this isn’t true.  ‘close()’ is reserved for 
closing
+same as ‘nextfile’, this isn't true.  ‘close()’ is reserved for closing
 files, pipes, and coprocesses that are opened with redirections.  It is
 not related to the main processing that ‘awk’ does with the files listed
 in ‘ARGV’.
@@ -11197,7 +11184,7 @@ in ‘ARGV’.
      (http://austingroupbugs.net/view.php?id=607).
 
    The current version of BWK ‘awk’ and ‘mawk’ also support 
‘nextfile’.
-However, they don’t allow the ‘nextfile’ statement inside function
+However, they don't allow the ‘nextfile’ statement inside function
 bodies (*note User-defined::).  ‘gawk’ does; a ‘nextfile’ inside a
 function body reads the first record from the next file and starts
 processing it with the first rule in the program, just as any other
@@ -11228,14 +11215,14 @@ skips reading any remaining input records, and 
executes the ‘END’ rule
 if there is one.  ‘gawk’ also skips any ‘ENDFILE’ rules; they do not
 execute.
 
-   In such a case, if you don’t want the ‘END’ rule to do its job, set a
+   In such a case, if you don't want the ‘END’ rule to do its job, set a
 variable to a nonzero value before the ‘exit’ statement and check that
 variable in the ‘END’ rule.  *Note Assert Function:: for an example that
 does this.
 
    If an argument is supplied to ‘exit’, its value is used as the exit
 status code for the ‘awk’ process.  If no argument is supplied, ‘exit’
-causes ‘awk’ to return a “success” status.  In the case where an
+causes ‘awk’ to return a "success" status.  In the case where an
 argument is supplied to a first ‘exit’ statement, and then ‘exit’ is
 called a second time from an ‘END’ rule with no argument, ‘awk’ uses 
the
 previously supplied exit value.  (d.c.)  *Note Exit Status:: for more
@@ -11273,7 +11260,7 @@ of these automatically, so that they enable you to tell 
‘awk’ how to do
 certain things.  Others are set automatically by ‘awk’, so that they
 carry information from the internal workings of ‘awk’ to your program.
 
-   This minor node documents all of ‘gawk’’s predefined variables, most
+   This minor node documents all of ‘gawk’'s predefined variables, most
 of which are also documented in the major nodes describing their areas
 of activity.
 
@@ -11389,7 +11376,7 @@ each variable.)
      changing ‘LINT’ does affect the production of lint warnings, even
      if ‘gawk’ is in compatibility mode.  Much as the ‘--lint’ and
      ‘--traditional’ options independently control different aspects of
-     ‘gawk’’s behavior, the control of lint warnings during program
+     ‘gawk’'s behavior, the control of lint warnings during program
      execution is independent of the flavor of ‘awk’ being executed.
 
 ‘OFMT’
@@ -11431,7 +11418,7 @@ each variable.)
      The ability for ‘RS’ to be a regular expression is a ‘gawk’
      extension.  In most other ‘awk’ implementations, or if ‘gawk’ is 
in
      compatibility mode (*note Options::), just the first character of
-     ‘RS’’s value is used.
+     ‘RS’'s value is used.
 
 ‘SUBSEP’
      The subscript separator.  It has the default value of ‘"\034"’ and
@@ -11483,12 +11470,12 @@ they are not special:
      elements are numbered from zero.
 
      The names ‘ARGC’ and ‘ARGV’, as well as the convention of indexing
-     the array from 0 to ‘ARGC’ − 1, are derived from the C language’s
+     the array from 0 to ‘ARGC’ − 1, are derived from the C language's
      method of accessing command-line arguments.
 
      The value of ‘ARGV[0]’ can vary from system to system.  Also, you
      should note that the program text is _not_ included in ‘ARGV’, nor
-     are any of ‘awk’’s command-line options.  *Note ARGC and ARGV:: for
+     are any of ‘awk’'s command-line options.  *Note ARGC and ARGV:: for
      information about how ‘awk’ uses these variables.  (d.c.)
 
 ‘ARGIND #’
@@ -11576,7 +11563,7 @@ they are not special:
      ‘$0’ changes (*note Fields::).
 
      Unlike most of the variables described in this node, assigning a
-     value to ‘NF’ has the potential to affect ‘awk’’s internal
+     value to ‘NF’ has the potential to affect ‘awk’'s internal
      workings.  In particular, assignments to ‘NF’ can be used to create
      fields in or remove fields from the current record.  *Note Changing
      Fields::.
@@ -11592,7 +11579,7 @@ they are not special:
 
 ‘NR’
      The number of input records ‘awk’ has processed since the beginning
-     of the program’s execution (*note Records::).  ‘awk’ increments
+     of the program's execution (*note Records::).  ‘awk’ increments
      ‘NR’ each time it reads a new record.
 
 ‘PROCINFO #’
@@ -11661,7 +11648,7 @@ they are not special:
 
           ‘"untyped"’
                The identifier is untyped (could be used as a scalar or
-               an array; ‘gawk’ doesn’t know yet).
+               an array; ‘gawk’ doesn't know yet).
 
           ‘"user"’
                The identifier is a user-defined function.
@@ -11744,7 +11731,7 @@ they are not special:
      groups that the process has.  Use the ‘in’ operator to test for
      these elements (*note Reference to Elements::).
 
-     The following elements allow you to change ‘gawk’’s behavior:
+     The following elements allow you to change ‘gawk’'s behavior:
 
      ‘PROCINFO["BUFFERPIPE"]’
           If this element exists, all output to pipelines becomes
@@ -11808,7 +11795,7 @@ they are not special:
 
 ‘SYMTAB #’
      An array whose indices are the names of all defined global
-     variables and arrays in the program.  ‘SYMTAB’ makes ‘gawk’’s
+     variables and arrays in the program.  ‘SYMTAB’ makes ‘gawk’'s
      symbol table visible to the ‘awk’ programmer.  It is built as
      ‘gawk’ parses the program and is complete before the program starts
      to run.
@@ -11862,7 +11849,6 @@ they are not special:
           within the ‘SYMTAB’ array.
 
                         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
@@ -11946,7 +11932,7 @@ program can treat the eliminated arguments as something 
other than file
 names.
 
    To eliminate a file from the middle of the list, store the null
-string (‘""’) into ‘ARGV’ in place of the file’s name.  As a special
+string (‘""’) into ‘ARGV’ in place of the file's name.  As a special
 feature, ‘awk’ ignores file names that have been replaced with the null
 string.  Another option is to use the ‘delete’ statement to remove
 elements from ‘ARGV’ (*note Delete::).
@@ -11956,7 +11942,7 @@ actual processing of the input begins.  *Note Split 
Program:: and *note
 Tee Program:: for examples of each way of removing elements from ‘ARGV’.
 
    To actually get options into an ‘awk’ program, end the ‘awk’ options
-with ‘--’ and then supply the ‘awk’ program’s options, in the 
following
+with ‘--’ and then supply the ‘awk’ program's options, in the following
 manner:
 
      awk -f myprog.awk -- -v -q file1 file2 ...
@@ -11980,7 +11966,7 @@ remove, the previously mentioned command-line options:
          }
      }
 
-   Ending the ‘awk’ options with ‘--’ isn’t necessary in ‘gawk’. 
 Unless
+   Ending the ‘awk’ options with ‘--’ isn't necessary in ‘gawk’.  
Unless
 ‘--posix’ has been specified, ‘gawk’ silently puts any unrecognized
 options into ‘ARGV’ for the ‘awk’ program to deal with.  As soon as it
 sees an unknown option, ‘gawk’ stops looking for other options that it
@@ -11993,8 +11979,8 @@ Because ‘-q’ is not a valid ‘gawk’ option, it 
and the following ‘-v’
 passed on to the ‘awk’ program.  (*Note Getopt Function:: for an ‘awk’
 library function that parses command-line options.)
 
-   When designing your program, you should choose options that don’t
-conflict with ‘gawk’’s, because it will process any options that it
+   When designing your program, you should choose options that don't
+conflict with ‘gawk’'s, because it will process any options that it
 accepts before passing the rest of the command line on to your program.
 Using ‘#!’ with the ‘-E’ option may help (*note Executable Scripts:: 
and
 *note Options::).
@@ -12005,7 +11991,7 @@ File: gawk.info,  Node: Pattern Action Summary,  Prev: 
Built-in Variables,  Up:
 7.6 Summary
 ===========
 
-   • Pattern–action pairs make up the basic elements of an ‘awk’
+   • Pattern-action pairs make up the basic elements of an ‘awk’
      program.  Patterns are either normal expressions, range
      expressions, or regexp constants; one of the special keywords
      ‘BEGIN’, ‘END’, ‘BEGINFILE’, or ‘ENDFILE’; or empty.  The 
action
@@ -12014,7 +12000,7 @@ File: gawk.info,  Node: Pattern Action Summary,  Prev: 
Built-in Variables,  Up:
 
    • I/O from ‘BEGIN’ and ‘END’ rules has certain constraints.  This 
is
      also true, only more so, for ‘BEGINFILE’ and ‘ENDFILE’ rules.  The
-     latter two give you “hooks” into ‘gawk’’s file processing, 
allowing
+     latter two give you "hooks" into ‘gawk’'s file processing, allowing
      you to recover from a file that otherwise would cause a fatal error
      (such as a file that cannot be opened).
 
@@ -12041,7 +12027,7 @@ File: gawk.info,  Node: Pattern Action Summary,  Prev: 
Built-in Variables,  Up:
    • The ‘exit’ statement terminates your program.  When executed from
      an action (or function body), it transfers control to the ‘END’
      statements.  From an ‘END’ statement body, it exits immediately.
-     You may pass an optional numeric value to be used as ‘awk’’s exit
+     You may pass an optional numeric value to be used as ‘awk’'s exit
      status.
 
    • Some predefined variables provide control over ‘awk’, mainly for
@@ -12065,8 +12051,8 @@ numbers or strings.
 elements, how to scan through every element in an array, and how to
 remove array elements.  It also describes how ‘awk’ simulates
 multidimensional arrays, as well as some of the less obvious points
-about array usage.  The major node moves on to discuss ‘gawk’’s facility
-for sorting arrays, and ends with a brief description of ‘gawk’’s
+about array usage.  The major node moves on to discuss ‘gawk’'s facility
+for sorting arrays, and ends with a brief description of ‘gawk’'s
 ability to support true arrays of arrays.
 
 * Menu:
@@ -12098,7 +12084,7 @@ at a time, and traversing all of the elements in an 
array.
 * Assigning Elements::          How to change an element of an array.
 * Array Example::               Basic Example of an Array
 * Scanning an Array::           A variation of the ‘for’ statement. It
-                                loops through the indices of an array’s
+                                loops through the indices of an array's
                                 existing elements.
 * Controlling Scanning::        Controlling the order in which arrays are
                                 scanned.
@@ -12111,7 +12097,7 @@ File: gawk.info,  Node: Array Intro,  Next: Reference 
to Elements,  Up: Array Ba
 
      Doing linear scans over an associative array is like trying to club
      someone to death with a loaded Uzi.
-                            — _Larry Wall_
+                            -- _Larry Wall_
 
    The ‘awk’ language provides one-dimensional arrays for storing groups
 of related strings or numbers.  Every ‘awk’ array must have a name.
@@ -12120,7 +12106,7 @@ name would also be a valid array name.  But one name 
cannot be used in
 both ways (as an array and as a variable) in the same ‘awk’ program.
 
    Arrays in ‘awk’ superficially resemble arrays in other programming
-languages, but there are fundamental differences.  In ‘awk’, it isn’t
+languages, but there are fundamental differences.  In ‘awk’, it isn't
 necessary to specify the size of an array before starting to use it.
 Additionally, any number or string, not just consecutive integers, may
 be used as an array index.
@@ -12135,15 +12121,14 @@ the beginning of the block of memory.  Index one 
specifies the second
 element, which is stored in memory right after the first element, and so
 on.  It is impossible to add more elements to the array, because it has
 room only for as many elements as given in the declaration.  (Some
-languages allow arbitrary starting and ending indices—e.g., ‘15 ..
-27’—but the size of the array is still fixed when the array is
+languages allow arbitrary starting and ending indices--e.g., ‘15 ..
+27’--but the size of the array is still fixed when the array is
 declared.)
 
    A contiguous array of four elements might look like *note Figure 8.1:
 figure-array-elements, conceptually, if the element values are eight,
 ‘"foo"’, ‘""’, and 30.
 
-
 [image src="gawk_array-elements.png" alt="A Contiguous Array" 
text="+---------+---------+--------+---------+
 |    8    |  \"foo\"  |   \"\"   |    30   |    Value
 +---------+---------+--------+---------+
@@ -12155,8 +12140,8 @@ Only the values are stored; the indices are implicit 
from the order of
 the values.  Here, eight is the value at index zero, because eight
 appears in the position with zero elements before it.
 
-   Arrays in ‘awk’ are different—they are “associative”.  This means
-that each array is a collection of pairs—an index and its corresponding
+   Arrays in ‘awk’ are different--they are “associative”.  This means
+that each array is a collection of pairs--an index and its corresponding
 array element value:
 
         Index   Value
@@ -12183,10 +12168,10 @@ whose value is ‘"number ten"’.  The result is:
         ‘2’     ‘""’
 
 Now the array is “sparse”, which just means some indices are missing.
-It has elements 0–3 and 10, but doesn’t have elements 4, 5, 6, 7, 8, or
+It has elements 0-3 and 10, but doesn't have elements 4, 5, 6, 7, 8, or
 9.
 
-   Another consequence of associative arrays is that the indices don’t
+   Another consequence of associative arrays is that the indices don't
 have to be nonnegative integers.  Any number, or even a string, can be
 an index.  For example, the following is an array that translates words
 from English to French:
@@ -12199,20 +12184,20 @@ from English to French:
         ‘1’     ‘"un"’
 
 Here we decided to translate the number one in both spelled-out and
-numeric form—thus illustrating that a single array can have both numbers
-and strings as indices.  (In fact, array subscripts are always strings.
-There are some subtleties to how numbers work when used as array
-subscripts; this is discussed in more detail in *note Numeric Array
-Subscripts::.)  Here, the number ‘1’ isn’t double-quoted, because 
‘awk’
-automatically converts it to a string.
+numeric form--thus illustrating that a single array can have both
+numbers and strings as indices.  (In fact, array subscripts are always
+strings.  There are some subtleties to how numbers work when used as
+array subscripts; this is discussed in more detail in *note Numeric
+Array Subscripts::.)  Here, the number ‘1’ isn't double-quoted, because
+‘awk’ automatically converts it to a string.
 
    The value of ‘IGNORECASE’ has no effect upon array subscripting.  The
 identical string value used to store an array element must be used to
 retrieve it.  When ‘awk’ creates an array (e.g., with the ‘split()’
-built-in function), that array’s indices are consecutive integers
+built-in function), that array's indices are consecutive integers
 starting at one.  (*Note String Functions::.)
 
-   ‘awk’’s arrays are efficient—the time to access an element is
+   ‘awk’'s arrays are efficient--the time to access an element is
 independent of the number of elements in the array.
 
    ---------- Footnotes ----------
@@ -12255,7 +12240,7 @@ been assigned any value as well as elements that have 
been deleted
           if (a["foo"] != "") ...
 
      This is incorrect for two reasons.  First, it _creates_ ‘a["foo"]’
-     if it didn’t exist before!  Second, it is valid (if a bit unusual)
+     if it didn't exist before!  Second, it is valid (if a bit unusual)
      to set an array element equal to the empty string.
 
    To determine whether an element exists in an array at a certain
@@ -12303,11 +12288,11 @@ File: gawk.info,  Node: Array Example,  Next: 
Scanning an Array,  Prev: Assignin
 
 The following program takes a list of lines, each beginning with a line
 number, and prints them out in order of line number.  The line numbers
-are not in order when they are first read—instead, they are scrambled.
+are not in order when they are first read--instead, they are scrambled.
 This program sorts the lines by making an array using the line numbers
 as subscripts.  The program then prints out the lines in sorted order of
 their numbers.  It is a very simple program and gets confused upon
-encountering repeated numbers, gaps, or lines that don’t begin with a
+encountering repeated numbers, gaps, or lines that don't begin with a
 number:
 
      {
@@ -12323,7 +12308,7 @@ number:
 
    The first rule keeps track of the largest line number seen so far; it
 also stores each line into the array ‘arr’, at an index that is the
-line’s number.  The second rule runs after all the input has been read,
+line's number.  The second rule runs after all the input has been read,
 to print out all the lines.  When this program is run with the following
 input:
 
@@ -12343,7 +12328,7 @@ Its output is:
 
    If a line number is repeated, the last line with a given number
 overrides the others.  Gaps in the line numbers can be handled with an
-easy improvement to the program’s ‘END’ rule, as follows:
+easy improvement to the program's ‘END’ rule, as follows:
 
      END {
          for (x = 1; x <= max; x++)
@@ -12365,7 +12350,7 @@ In programs that use arrays, it is often necessary to 
use a loop that
 executes once for each element of an array.  In other languages, where
 arrays are contiguous and indices are limited to nonnegative integers,
 this is easy: all the valid indices can be found by counting from the
-lowest index up to the highest.  This technique won’t do the job in
+lowest index up to the highest.  This technique won't do the job in
 ‘awk’, because any number or string can be an array index.  So ‘awk’ 
has
 a special kind of ‘for’ statement for scanning an array:
 
@@ -12458,9 +12443,9 @@ which the array is traversed.  This order is usually 
based on the
 internal implementation of arrays and will vary from one version of
 ‘awk’ to the next.
 
-   Often, though, you may wish to do something simple, such as “traverse
-the array by comparing the indices in ascending order,” or “traverse the
-array by comparing the values in descending order.” ‘gawk’ provides two
+   Often, though, you may wish to do something simple, such as "traverse
+the array by comparing the indices in ascending order," or "traverse the
+array by comparing the values in descending order."  ‘gawk’ provides two
 mechanisms that give you this control:
 
    • Set ‘PROCINFO["sorted_in"]’ to one of a set of predefined values.
@@ -12581,7 +12566,7 @@ traversal:
 
    • The value of ‘PROCINFO["sorted_in"]’ is global.  That is, it
      affects all array traversal ‘for’ loops.  If you need to change it
-     within your own code, you should see if it’s defined and save and
+     within your own code, you should see if it's defined and save and
      restore the value:
 
           ...
@@ -12597,7 +12582,7 @@ traversal:
      represented by ‘"@unsorted"’.  You can also get the default
      behavior by assigning the null string to ‘PROCINFO["sorted_in"]’ or
      by just deleting the ‘"sorted_in"’ element from the ‘PROCINFO’
-     array with the ‘delete’ statement.  (The ‘delete’ statement 
hasn’t
+     array with the ‘delete’ statement.  (The ‘delete’ statement hasn't
      been described yet; *note Delete::.)
 
    In addition, ‘gawk’ provides built-in functions for sorting arrays;
@@ -12638,8 +12623,8 @@ string value ‘"12.153"’ (using the default 
conversion value of
 ‘CONVFMT’, ‘"%.6g"’).  Thus, the array element ‘data["12.153"]’ is
 assigned the value one.  The program then changes the value of
 ‘CONVFMT’.  The test ‘(xyz in data)’ generates a new string value from
-‘xyz’—this time ‘"12.15"’—because the value of ‘CONVFMT’ only 
allows two
-significant digits.  This test fails, because ‘"12.15"’ is different
+‘xyz’--this time ‘"12.15"’--because the value of ‘CONVFMT’ only 
allows
+two significant digits.  This test fails, because ‘"12.15"’ is different
 from ‘"12.153"’.
 
    According to the rules for conversions (*note Conversion::), integer
@@ -12650,7 +12635,7 @@ works:
      for (i = 1; i <= maxsub; i++)
          do something with array[i]
 
-   The “integer values always convert to strings as integers” rule has
+   The "integer values always convert to strings as integers" rule has
 an additional consequence for array indexing.  Octal and hexadecimal
 constants (*note Nondecimal-numbers::) are converted internally into
 numbers, and their original form is forgotten.  This means, for example,
@@ -12668,7 +12653,7 @@ File: gawk.info,  Node: Uninitialized Subscripts,  
Next: Delete,  Prev: Numeric
 8.3 Using Uninitialized Variables as Subscripts
 ===============================================
 
-Suppose it’s necessary to write a program to print the input data in
+Suppose it's necessary to write a program to print the input data in
 reverse order.  A reasonable attempt to do so (with some test data)
 might look like this:
 
@@ -12701,8 +12686,8 @@ following version of the program works correctly:
             print l[i]
      }
 
-   Here, the ‘++’ forces ‘lines’ to be numeric, thus making the “old
-value” numeric zero.  This is then converted to ‘"0"’ as the array
+   Here, the ‘++’ forces ‘lines’ to be numeric, thus making the "old
+value" numeric zero.  This is then converted to ‘"0"’ as the array
 subscript.
 
    Even though it is somewhat unusual, the null string (‘""’) is a valid
@@ -12777,7 +12762,7 @@ Because there is no data to split out, the function 
simply clears the
 array and then returns.
 
      CAUTION: Deleting all the elements from an array does not change
-     its type; you cannot clear an array and then use the array’s name
+     its type; you cannot clear an array and then use the array's name
      as a scalar (i.e., a regular variable).  For example, the following
      does not work:
 
@@ -12818,7 +12803,7 @@ when the value of ‘SUBSEP’ is ‘"@"’.  The 
numbers 5 and 12 are converted
 to strings and concatenated with an ‘@’ between them, yielding 
‘"5@12"’;
 thus, the array element ‘foo["5@12"]’ is set to ‘"value"’.
 
-   Once the element’s value is stored, ‘awk’ has no record of whether it
+   Once the element's value is stored, ‘awk’ has no record of whether it
 was stored with a single index or a sequence of indices.  The two
 expressions ‘foo[5,12]’ and ‘foo[5 SUBSEP 12]’ are always equivalent.
 
@@ -12880,9 +12865,9 @@ File: gawk.info,  Node: Multiscanning,  Up: 
Multidimensional
 8.5.1 Scanning Multidimensional Arrays
 --------------------------------------
 
-There is no special ‘for’ statement for scanning a “multidimensional”
+There is no special ‘for’ statement for scanning a "multidimensional"
 array.  There cannot be one, because, in truth, ‘awk’ does not have
-multidimensional arrays or elements—there is only a multidimensional
+multidimensional arrays or elements--there is only a multidimensional
 _way of accessing_ an array.
 
    However, if your program has an array that is always accessed as
@@ -12920,7 +12905,7 @@ File: gawk.info,  Node: Arrays of Arrays,  Next: Arrays 
Summary,  Prev: Multidim
 8.6 Arrays of Arrays
 ====================
 
-‘gawk’ goes beyond standard ‘awk’’s multidimensional array access and
+‘gawk’ goes beyond standard ‘awk’'s multidimensional array access and
 provides true arrays of arrays.  Elements of a subarray are referred to
 by their own indices enclosed in square brackets, just like the elements
 of the main array.  For example, the following creates a two-element
@@ -12948,7 +12933,7 @@ itself an array and not a scalar:
      a[4] = "An element in a jagged array"
 
    The terms “dimension”, “row”, and “column” are meaningless when
-applied to such an array, but we will use “dimension” henceforth to
+applied to such an array, but we will use "dimension" henceforth to
 imply the maximum number of indices needed to refer to an existing
 element.  The type of any element that has already been assigned cannot
 be changed by assigning a value of a different type.  You have to first
@@ -13022,7 +13007,7 @@ following code prints the elements of our main array 
‘a’:
          }
      }
 
-*Note Walking Arrays:: for a user-defined function that “walks” an
+*Note Walking Arrays:: for a user-defined function that "walks" an
 arbitrarily dimensioned array of arrays.
 
    Recall that a reference to an uninitialized array element yields a
@@ -13057,7 +13042,7 @@ File: gawk.info,  Node: Arrays Summary,  Prev: Arrays 
of Arrays,  Up: Arrays
 
    • Use ‘for (INDX in ARRAY) ...’ to scan through all the individual
      elements of an array.  In the body of the loop, INDX takes on the
-     value of each element’s index in turn.
+     value of each element's index in turn.
 
    • The order in which a ‘for (INDX in ARRAY)’ loop traverses an array
      is undefined in POSIX ‘awk’ and varies among implementations.
@@ -13092,7 +13077,7 @@ File: gawk.info,  Node: Functions,  Next: Library 
Functions,  Prev: Arrays,  Up:
 9 Functions
 ***********
 
-This major node describes ‘awk’’s built-in functions, which fall into
+This major node describes ‘awk’'s built-in functions, which fall into
 three categories: numeric, string, and I/O. ‘gawk’ provides additional
 groups of functions to work with values that represent time, do bit
 manipulation, sort arrays, provide type information, and
@@ -13143,7 +13128,7 @@ File: gawk.info,  Node: Calling Built-in,  Next: 
Boolean Functions,  Up: Built-i
 9.1.1 Calling Built-in Functions
 --------------------------------
 
-To call one of ‘awk’’s built-in functions, write the name of the
+To call one of ‘awk’'s built-in functions, write the name of the
 function followed by arguments in parentheses.  For example, ‘atan2(y +
 z, 1)’ is a call to the function ‘atan2()’ and has two arguments.
 
@@ -13151,7 +13136,7 @@ z, 1)’ is a call to the function ‘atan2()’ and 
has two arguments.
 opening parenthesis, but nonetheless it is good practice to avoid using
 whitespace there.  User-defined functions do not permit whitespace in
 this way, and it is easier to avoid mistakes by following a simple
-convention that always works—no whitespace after a function name.
+convention that always works--no whitespace after a function name.
 
    Each built-in function accepts a certain number of arguments.  In
 some cases, arguments can be omitted.  The defaults for omitted
@@ -13160,7 +13145,7 @@ individual functions.  In some ‘awk’ 
implementations, extra arguments
 given to built-in functions are ignored.  However, in ‘gawk’, it is a
 fatal error to give extra arguments to a built-in function.
 
-   When a function is called, expressions that create the function’s
+   When a function is called, expressions that create the function's
 actual parameters are evaluated completely before the call is performed.
 For example, in the following code fragment:
 
@@ -13169,7 +13154,7 @@ For example, in the following code fragment:
 
 the variable ‘i’ is incremented to the value five before ‘sqrt()’ is
 called with a value of four for its actual parameter.  The order of
-evaluation of the expressions used for the function’s parameters is
+evaluation of the expressions used for the function's parameters is
 undefined.  Thus, avoid writing programs that assume that parameters are
 evaluated from left to right or from right to left.  For example:
 
@@ -13192,8 +13177,8 @@ compatibility mode (*note Options::):
 
 ‘mkbool(EXPRESSION)’
      Return a Boolean-typed value based on the regular Boolean value of
-     EXPRESSION.  Boolean “true” values have numeric value one.  Boolean
-     “false” values have numeric zero.  This is discussed in more detail
+     EXPRESSION.  Boolean "true" values have numeric value one.  Boolean
+     "false" values have numeric zero.  This is discussed in more detail
      in *note Boolean Typed Values::.
 
 
@@ -13216,7 +13201,7 @@ brackets ([ ]):
 ‘exp(X)’
      Return the exponential of X (‘e ^ X’) or report an error if X is
      out of range.  The range of values X can have depends on your
-     machine’s floating-point representation.
+     machine's floating-point representation.
 
 ‘int(X)’
      Return the nearest integer to X, located between X and zero and
@@ -13225,7 +13210,7 @@ brackets ([ ]):
 
 ‘log(X)’
      Return the natural logarithm of X, if X is positive; otherwise,
-     return NaN (“not a number”) on IEEE 754 systems.  Additionally,
+     return NaN ("not a number") on IEEE 754 systems.  Additionally,
      ‘gawk’ prints a warning message when ‘x’ is negative.
 
 ‘rand()’
@@ -13285,7 +13270,7 @@ brackets ([ ]):
      time, the same sequence of random numbers is produced again.
 
           CAUTION: Different ‘awk’ implementations use different
-          random-number generators internally.  Don’t expect the same
+          random-number generators internally.  Don't expect the same
           ‘awk’ program to produce the same series of random numbers
           when executed by different versions of ‘awk’.
 
@@ -13414,13 +13399,13 @@ Options::):
           actual sorting.
 
      You are allowed to use the same array for both the SOURCE and DEST
-     arguments, but doing so only makes sense if you’re also supplying
+     arguments, but doing so only makes sense if you're also supplying
      the third argument.
 
 ‘gensub(REGEXP, REPLACEMENT, HOW’ [‘, TARGET’]‘) #’
      Search the target string TARGET for matches of the regular
      expression REGEXP.  If HOW is a string beginning with ‘g’ or ‘G’
-     (short for “global”), then replace all matches of REGEXP with
+     (short for "global"), then replace all matches of REGEXP with
      REPLACEMENT.  Otherwise, treat HOW as a number indicating which
      match of REGEXP to replace.  Treat numeric values less than one as
      if they were one.  If no TARGET is supplied, use ‘$0’.  Return the
@@ -13468,7 +13453,7 @@ Options::):
      one substitution is performed.  If HOW is zero, ‘gawk’ issues a
      warning message.
 
-     If REGEXP does not match TARGET, ‘gensub()’’s return value is the
+     If REGEXP does not match TARGET, ‘gensub()’'s return value is the
      original unchanged value of TARGET.  Note that, as mentioned above,
      the returned value is a string, even if TARGET was not.
 
@@ -13480,7 +13465,7 @@ Options::):
 ‘gsub(REGEXP, REPLACEMENT’ [‘, TARGET’]‘)’
      Search TARGET for _all_ of the longest, leftmost, _nonoverlapping_
      matching substrings it can find and replace them with REPLACEMENT.
-     The ‘g’ in ‘gsub()’ stands for “global,” which means replace
+     The ‘g’ in ‘gsub()’ stands for "global," which means replace
      everywhere.  For example:
 
           { gsub(/Britain/, "United Kingdom"); print }
@@ -13635,7 +13620,7 @@ Options::):
      fatal error.
 
 ‘patsplit(STRING, ARRAY’ [‘, FIELDPAT’ [‘, SEPS’ ] ]‘) #’
-     Divide STRING into pieces (or “fields”) defined by FIELDPAT and
+     Divide STRING into pieces (or "fields") defined by FIELDPAT and
      store the pieces in ARRAY and the separator strings in the SEPS
      array.  The first piece is stored in ‘ARRAY[1]’, the second piece
      in ‘ARRAY[2]’, and so forth.  The third argument, FIELDPAT, is a
@@ -13754,7 +13739,7 @@ Options::):
      a string value; the automatic coercion of strings to numbers works
      only for decimal data, not for octal or hexadecimal.(1)
 
-     Note also that ‘strtonum()’ uses the current locale’s decimal point
+     Note also that ‘strtonum()’ uses the current locale's decimal point
      for recognizing numbers (*note Locales::).
 
 ‘sub(REGEXP, REPLACEMENT’ [‘, TARGET’]‘)’
@@ -13771,7 +13756,7 @@ Options::):
      implications for writing your program correctly.
 
      This function is peculiar because TARGET is not simply used to
-     compute a value, and not just any expression will do—it must be a
+     compute a value, and not just any expression will do--it must be a
      variable, field, or array element so that ‘sub()’ can store a
      modified value there.  If this argument is omitted, then the
      default is to use and alter ‘$0’.(2)  For example:
@@ -13800,7 +13785,7 @@ Options::):
           ⊣ dCaaCbaaa
 
      This shows how ‘&’ can represent a nonconstant string and also
-     illustrates the “leftmost, longest” rule in regexp matching (*note
+     illustrates the "leftmost, longest" rule in regexp matching (*note
      Leftmost Longest::).
 
      The effect of this special character (‘&’) can be turned off by
@@ -13843,7 +13828,7 @@ Options::):
      remaining in the string, counting from character START.
 
      If START is less than one, ‘substr()’ treats it as if it was one.
-     (POSIX doesn’t specify what to do in this case: BWK ‘awk’ acts this
+     (POSIX doesn't specify what to do in this case: BWK ‘awk’ acts this
      way, and therefore ‘gawk’ does too.)  If START is greater than the
      number of characters in the string, ‘substr()’ returns the null
      string.  Similarly, if LENGTH is present but less than or equal to
@@ -13906,13 +13891,13 @@ Although this makes a certain amount of sense, it can 
be surprising.
 
    ---------- Footnotes ----------
 
-   (1) Unless you use the ‘--non-decimal-data’ option, which isn’t
+   (1) Unless you use the ‘--non-decimal-data’ option, which isn't
 recommended.  *Note Nondecimal Data:: for more information.
 
    (2) Note that this means that the record will first be regenerated
 using the value of ‘OFS’ if any fields have been changed, and that the
 fields will be updated after the substitution, even if the operation is
-a “no-op” such as ‘sub(/^/, "")’.
+a "no-op" such as ‘sub(/^/, "")’.
 
    (3) This is different from C and C++, in which the first character is
 number zero.
@@ -13924,7 +13909,7 @@ File: gawk.info,  Node: Gory Details,  Up: String 
Functions
 .....................................................................
 
      I collect spores, molds, and fungus.
-             — _Dr. Egon Spengler (“Ghostbusters,” 1984)_
+             -- _Dr. Egon Spengler ("Ghostbusters," 1984)_
 
      CAUTION: This subsubsection has been reported to cause headaches.
      You might want to skip it upon first reading.
@@ -13956,9 +13941,8 @@ generated text with a single ‘&’.  Any other 
‘\’ within the REPLACEMENT
 string that did not precede an ‘&’ was passed through unchanged.  This
 is illustrated in *note Table 9.1: table-sub-escapes.
 
-
       You type         ‘sub()’ sees          ‘sub()’ generates
-      ——–         ———-          —————
+      -----         -------          ----------
           ‘\&’              ‘&’            The matched text
          ‘\\&’             ‘\&’            A literal ‘&’
         ‘\\\&’             ‘\&’            A literal ‘&’
@@ -13980,7 +13964,7 @@ backslashes entered at the lexical level.)
 get a literal ‘\’ followed by the matched text.
 
    Several editions of the POSIX standard attempted to fix this problem
-but weren’t successful.  The details are irrelevant at this point in
+but weren't successful.  The details are irrelevant at this point in
 time.
 
    At one point, the ‘gawk’ maintainer submitted proposed text for a
@@ -13989,9 +13973,8 @@ the original existing practice.  The proposed rules 
have special cases
 that make it possible to produce a ‘\’ preceding the matched text.  This
 is shown in *note Table 9.2: table-sub-proposed.
 
-
       You type         ‘sub()’ sees         ‘sub()’ generates
-      ——–         ———-         —————
+      -----         -------         ----------
      ‘\\\\\\&’           ‘\\\&’            A literal ‘\&’
        ‘\\\\&’            ‘\\&’            A literal ‘\’, followed 
by the matched text
          ‘\\&’             ‘\&’            A literal ‘&’
@@ -14008,7 +13991,7 @@ the output literally.
 
    ‘gawk’ 3.0 and 3.1 follow these rules for ‘sub()’ and ‘gsub()’. 
 The
 POSIX standard took much longer to be revised than was expected.  In
-addition, the ‘gawk’ maintainer’s proposal was lost during the
+addition, the ‘gawk’ maintainer's proposal was lost during the
 standardization process.  The final rules are somewhat simpler.  The
 results are similar except for one case.
 
@@ -14017,9 +14000,8 @@ literal ‘&’, ‘\\’ produces a literal ‘\’, 
and ‘\’ followed by an
 else is not special; the ‘\’ is placed straight into the output.  These
 rules are presented in *note Table 9.3: table-posix-sub.
 
-
       You type         ‘sub()’ sees         ‘sub()’ generates
-      ——–         ———-         —————
+      -----         -------         ----------
      ‘\\\\\\&’           ‘\\\&’            A literal ‘\&’
        ‘\\\\&’            ‘\\&’            A literal ‘\’, followed 
by the matched text
          ‘\\&’             ‘\&’            A literal ‘&’
@@ -14036,7 +14018,7 @@ Table 9.3: POSIX rules for ‘sub()’ and ‘gsub()’
 follow the proposed rules, as that had been its behavior for many years.
 
    When version 4.0.0 was released, the ‘gawk’ maintainer made the POSIX
-rules the default, breaking well over a decade’s worth of backward
+rules the default, breaking well over a decade's worth of backward
 compatibility.(1)  Needless to say, this was a bad idea, and as of
 version 4.0.1, ‘gawk’ resumed its historical behavior, and only follows
 the POSIX rules when ‘--posix’ is given.
@@ -14048,9 +14030,8 @@ subexpression is placed in the generated output.  
Otherwise, no matter
 what character follows the ‘\’, it appears in the generated text and the
 ‘\’ does not, as shown in *note Table 9.4: table-gensub-escapes.
 
-
        You type          ‘gensub()’ sees         ‘gensub()’ generates
-       ——–          ————-         ——————
+       -----          ---------         ------------
            ‘&’                    ‘&’            The matched text
          ‘\\&’                   ‘\&’            A literal ‘&’
         ‘\\\\’                   ‘\\’            A literal ‘\’
@@ -14110,7 +14091,7 @@ parameters are enclosed in square brackets ([ ]):
      sometimes it is necessary to force a program to “flush” its buffers
      (i.e., write the information to its destination, even if a buffer
      is not full).  This is the purpose of the ‘fflush()’
-     function—‘gawk’ also buffers its output, and the ‘fflush()’
+     function--‘gawk’ also buffers its output, and the ‘fflush()’
      function forces ‘gawk’ to flush its buffers.
 
      Brian Kernighan added ‘fflush()’ to his ‘awk’ in April 1992.  For
@@ -14176,7 +14157,7 @@ is all buffered and sent down the pipe to ‘cat’ in 
one shot.
 
 ‘system(COMMAND)’
      Execute the operating system command COMMAND and then return to the
-     ‘awk’ program.  Return COMMAND’s exit status (see further on).
+     ‘awk’ program.  Return COMMAND's exit status (see further on).
 
      For example, if the following fragment of code is put in your ‘awk’
      program:
@@ -14205,27 +14186,26 @@ is all buffered and sent down the pipe to ‘cat’ 
in one shot.
           NOTE: When ‘--sandbox’ is specified, the ‘system()’ function
           is disabled (*note Options::).
 
-     On POSIX systems, a command’s exit status is a 16-bit number.  The
+     On POSIX systems, a command's exit status is a 16-bit number.  The
      exit value passed to the C ‘exit()’ function is held in the
      high-order eight bits.  The low-order bits indicate if the process
      was killed by a signal (bit 7) and if so, the guilty signal number
-     (bits 0–6).
+     (bits 0-6).
 
-     Traditionally, ‘awk’’s ‘system()’ function has simply returned 
the
+     Traditionally, ‘awk’'s ‘system()’ function has simply returned the
      exit status value divided by 256.  In the normal case this gives
      the exit status but in the case of death-by-signal it yields a
-     fractional floating-point value.(2)  POSIX states that ‘awk’’s
+     fractional floating-point value.(2)  POSIX states that ‘awk’'s
      ‘system()’ should return the full 16-bit value.
 
      ‘gawk’ steers a middle ground.  The return values are summarized in
      *note Table 9.5: table-system-return-values.
 
-
      Situation                     Return value from ‘system()’
      --------------------------------------------------------------------------
-     ‘--traditional’               C ‘system()’’s value divided by 
256
-     ‘--posix’                     C ‘system()’’s value
-     Normal exit of command        Command’s exit status
+     ‘--traditional’               C ‘system()’'s value divided by 256
+     ‘--posix’                     C ‘system()’'s value
+     Normal exit of command        Command's exit status
      Death by signal of command    256 + number of murderous signal
      Death by signal of command    512 + number of murderous signal
      with core dump
@@ -14233,7 +14213,7 @@ is all buffered and sent down the pipe to ‘cat’ in 
one shot.
 
      Table 9.5: Return values from ‘system()’
 
-   As of August, 2018, BWK ‘awk’ now follows ‘gawk’’s behavior for 
the
+   As of August, 2018, BWK ‘awk’ now follows ‘gawk’'s behavior for the
 return value of ‘system()’.
 
              Controlling Output Buffering with ‘system()’
@@ -14363,7 +14343,7 @@ enclosed in square brackets ([ ]):
    The ‘systime()’ function allows you to compare a timestamp from a log
 file with the current time of day.  In particular, it is easy to
 determine how long ago a particular record was logged.  It also allows
-you to produce log records using the “seconds since the epoch” format.
+you to produce log records using the "seconds since the epoch" format.
 
    The ‘mktime()’ function allows you to convert a textual
 representation of a date and time into a timestamp.  This makes it easy
@@ -14382,19 +14362,19 @@ FORMAT string.
 the following date format specifications:
 
 ‘%a’
-     The locale’s abbreviated weekday name.
+     The locale's abbreviated weekday name.
 
 ‘%A’
-     The locale’s full weekday name.
+     The locale's full weekday name.
 
 ‘%b’
-     The locale’s abbreviated month name.
+     The locale's abbreviated month name.
 
 ‘%B’
-     The locale’s full month name.
+     The locale's full month name.
 
 ‘%c’
-     The locale’s “appropriate” date and time representation.  (This is
+     The locale's "appropriate" date and time representation.  (This is
      ‘%A %B %d %T %Y’ in the ‘"C"’ locale.)
 
 ‘%C’
@@ -14402,7 +14382,7 @@ the following date format specifications:
      100 and truncated to the next lower integer.
 
 ‘%d’
-     The day of the month as a decimal number (01–31).
+     The day of the month as a decimal number (01-31).
 
 ‘%D’
      Equivalent to specifying ‘%m/%d/%y’.
@@ -14416,7 +14396,7 @@ the following date format specifications:
 
 ‘%g’
      The year modulo 100 of the ISO 8601 week number, as a decimal
-     number (00–99).  For example, January 1, 2012, is in week 53 of
+     number (00-99).  For example, January 1, 2012, is in week 53 of
      2011.  Thus, the year of its ISO 8601 week number is 2011, even
      though its year is 2012.  Similarly, December 31, 2012, is in week
      1 of 2013.  Thus, the year of its ISO week number is 2013, even
@@ -14429,36 +14409,36 @@ the following date format specifications:
      Equivalent to ‘%b’.
 
 ‘%H’
-     The hour (24-hour clock) as a decimal number (00–23).
+     The hour (24-hour clock) as a decimal number (00-23).
 
 ‘%I’
-     The hour (12-hour clock) as a decimal number (01–12).
+     The hour (12-hour clock) as a decimal number (01-12).
 
 ‘%j’
-     The day of the year as a decimal number (001–366).
+     The day of the year as a decimal number (001-366).
 
 ‘%m’
-     The month as a decimal number (01–12).
+     The month as a decimal number (01-12).
 
 ‘%M’
-     The minute as a decimal number (00–59).
+     The minute as a decimal number (00-59).
 
 ‘%n’
      A newline character (ASCII LF).
 
 ‘%p’
-     The locale’s equivalent of the AM/PM designations associated with a
+     The locale's equivalent of the AM/PM designations associated with a
      12-hour clock.
 
 ‘%r’
-     The locale’s 12-hour clock time.  (This is ‘%I:%M:%S %p’ in the
+     The locale's 12-hour clock time.  (This is ‘%I:%M:%S %p’ in the
      ‘"C"’ locale.)
 
 ‘%R’
      Equivalent to specifying ‘%H:%M’.
 
 ‘%S’
-     The second as a decimal number (00–60).
+     The second as a decimal number (00-60).
 
 ‘%t’
      A TAB character.
@@ -14467,37 +14447,37 @@ the following date format specifications:
      Equivalent to specifying ‘%H:%M:%S’.
 
 ‘%u’
-     The weekday as a decimal number (1–7).  Monday is day one.
+     The weekday as a decimal number (1-7).  Monday is day one.
 
 ‘%U’
      The week number of the year (with the first Sunday as the first day
-     of week one) as a decimal number (00–53).
+     of week one) as a decimal number (00-53).
 
 ‘%V’
      The week number of the year (with the first Monday as the first day
-     of week one) as a decimal number (01–53).  The method for
+     of week one) as a decimal number (01-53).  The method for
      determining the week number is as specified by ISO 8601.  (To wit:
      if the week containing January 1 has four or more days in the new
      year, then it is week one; otherwise it is the last week [52 or 53]
      of the previous year and the next week is week one.)
 
 ‘%w’
-     The weekday as a decimal number (0–6).  Sunday is day zero.
+     The weekday as a decimal number (0-6).  Sunday is day zero.
 
 ‘%W’
      The week number of the year (with the first Monday as the first day
-     of week one) as a decimal number (00–53).
+     of week one) as a decimal number (00-53).
 
 ‘%x’
-     The locale’s “appropriate” date representation.  (This is ‘%A %B 
%d
+     The locale's "appropriate" date representation.  (This is ‘%A %B %d
      %Y’ in the ‘"C"’ locale.)
 
 ‘%X’
-     The locale’s “appropriate” time representation.  (This is ‘%T’ 
in
+     The locale's "appropriate" time representation.  (This is ‘%T’ in
      the ‘"C"’ locale.)
 
 ‘%y’
-     The year modulo 100 as a decimal number (00–99).
+     The year modulo 100 as a decimal number (00-99).
 
 ‘%Y’
      The full year as a decimal number (e.g., 2015).
@@ -14512,7 +14492,7 @@ the following date format specifications:
 
 ‘%Ec %EC %Ex %EX %Ey %EY %Od %Oe %OH’
 ‘%OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy’
-     “Alternative representations” for the specifications that use only
+     "Alternative representations" for the specifications that use only
      the second letter (‘%c’, ‘%C’, and so on).(5)  (These facilitate
      compliance with the POSIX ‘date’ utility.)
 
@@ -14529,11 +14509,11 @@ compile ‘gawk’ (*note Installation::), then the 
following additional
 format specifications are available:
 
 ‘%k’
-     The hour (24-hour clock) as a decimal number (0–23).  Single-digit
+     The hour (24-hour clock) as a decimal number (0-23).  Single-digit
      numbers are padded with a space.
 
 ‘%l’
-     The hour (12-hour clock) as a decimal number (1–12).  Single-digit
+     The hour (12-hour clock) as a decimal number (1-12).  Single-digit
      numbers are padded with a space.
 
 ‘%s’
@@ -14553,7 +14533,7 @@ format specifiers in the string.  For example:
      ⊣ Today is Monday, September 22, 2014.
 
    Here is the ‘gawk’ version of the ‘date’ utility.  It has a shell
-“wrapper” to handle the ‘-u’ option, which requires that ‘date’ 
run as
+"wrapper" to handle the ‘-u’ option, which requires that ‘date’ run as
 if the time zone is set to UTC:
 
      #! /bin/sh
@@ -14583,7 +14563,7 @@ if the time zone is set to UTC:
 
    ---------- Footnotes ----------
 
-   (1) *Note Glossary::, especially the entries “Epoch” and “UTC.”
+   (1) *Note Glossary::, especially the entries "Epoch" and "UTC."
 
    (2) The GNU ‘date’ utility can also do many of the things described
 here.  Its use may be preferable for simple time-related operations in
@@ -14592,17 +14572,17 @@ shell scripts.
    (3) Occasionally there are minutes in a year with a leap second,
 which is why the seconds can go up to 60.
 
-   (4) Unfortunately, not every system’s ‘strftime()’ necessarily
+   (4) Unfortunately, not every system's ‘strftime()’ necessarily
 supports all of the conversions listed here.
 
-   (5) If you don’t understand any of this, don’t worry about it; these
-facilities are meant to make it easier to “internationalize” programs.
+   (5) If you don't understand any of this, don't worry about it; these
+facilities are meant to make it easier to "internationalize" programs.
 Other internationalization features are described in *note
 Internationalization::.
 
    (6) This is because ISO C leaves the behavior of the C version of
-‘strftime()’ undefined and ‘gawk’ uses the system’s version of
-‘strftime()’ if it’s there.  Typically, the conversion specifier either
+‘strftime()’ undefined and ‘gawk’ uses the system's version of
+‘strftime()’ if it's there.  Typically, the conversion specifier either
 does not appear in the returned string or appears literally.
 
 
@@ -14611,8 +14591,8 @@ File: gawk.info,  Node: Bitwise Functions,  Next: Type 
Functions,  Prev: Time Fu
 9.1.7 Bit-Manipulation Functions
 --------------------------------
 
-     I can explain it for you, but I can’t understand it for you.
-                             — _Anonymous_
+     I can explain it for you, but I can't understand it for you.
+                            -- _Anonymous_
 
    Many languages provide the ability to perform “bitwise” operations on
 two integer numbers.  In other words, the operation is performed on each
@@ -14620,7 +14600,6 @@ successive pair of bits in the operands.  Three common 
operations are
 bitwise AND, OR, and XOR. The operations are described in *note Table
 9.6: table-bitwise-ops.
 
-
                 Bit operator
           |  AND  |   OR  |  XOR
           |---+---+---+---+---+---
@@ -14635,14 +14614,14 @@ Table 9.6: Bitwise operations
 bits are 1.  The result of an OR operation is 1 if _either_ bit is 1.
 The result of an XOR operation is 1 if either bit is 1, but not both.
 The next operation is the “complement”; the complement of 1 is 0 and the
-complement of 0 is 1.  Thus, this operation “flips” all the bits of a
+complement of 0 is 1.  Thus, this operation "flips" all the bits of a
 given value.
 
    Finally, two other common operations are to shift the bits left or
 right.  For example, if you have a bit string ‘10111001’ and you shift
 it right by three bits, you end up with ‘00010111’.(1)  If you start
 over again with ‘10111001’ and shift it left by three bits, you end up
-with ‘11001000’.  The following list describes ‘gawk’’s built-in
+with ‘11001000’.  The following list describes ‘gawk’'s built-in
 functions that implement the bitwise operations.  Optional parameters
 are enclosed in square brackets ([ ]):
 
@@ -14669,8 +14648,8 @@ are enclosed in square brackets ([ ]):
 
      CAUTION: Beginning with ‘gawk’ version 4.2, negative operands are
      not allowed for any of these functions.  A negative operand
-     produces a fatal error.  See the sidebar “Beware The Smoke and
-     Mirrors!” for more information as to why.
+     produces a fatal error.  See the sidebar "Beware The Smoke and
+     Mirrors!"  for more information as to why.
 
    Here is a user-defined function (*note User-defined::) that
 illustrates the use of these functions:
@@ -14759,7 +14738,7 @@ This is particularly noticeable with the ‘compl()’ 
function:
      $ gawk -M 'BEGIN { print compl(42) }'
      ⊣ -43
 
-   What’s going on becomes clear when printing the results in
+   What's going on becomes clear when printing the results in
 hexadecimal:
 
      $ gawk 'BEGIN { printf "%#x\n", compl(42) }'
@@ -14781,10 +14760,10 @@ operations is probably a bad idea; caveat emptor!
    ---------- Footnotes ----------
 
    (1) This example shows that zeros come in on the left side.  For
-‘gawk’, this is always true, but in some languages, it’s possible to
+‘gawk’, this is always true, but in some languages, it's possible to
 have the left side fill with ones.
 
-   (2) If you don’t understand this paragraph, the upshot is that ‘gawk’
+   (2) If you don't understand this paragraph, the upshot is that ‘gawk’
 can only store a particular range of integer values; numbers outside
 that range are reduced to fit within the range.
 
@@ -14907,9 +14886,9 @@ story.  Optional parameters are enclosed in square 
brackets ([ ]):
 
 ‘bindtextdomain(DIRECTORY’ [‘,’ DOMAIN]‘)’
      Set the directory in which ‘gawk’ will look for message translation
-     files, in case they will not or cannot be placed in the “standard”
+     files, in case they will not or cannot be placed in the "standard"
      locations (e.g., during testing).  It returns the directory in
-     which DOMAIN is “bound.”
+     which DOMAIN is "bound."
 
      The default DOMAIN is the value of ‘TEXTDOMAIN’.  If DIRECTORY is
      the null string (‘""’), then ‘bindtextdomain()’ returns the 
current
@@ -14955,9 +14934,9 @@ File: gawk.info,  Node: Definition Syntax,  Next: 
Function Example,  Up: User-de
 9.2.1 Function Definition Syntax
 --------------------------------
 
-     It’s entirely fair to say that the awk syntax for local variable
+     It's entirely fair to say that the awk syntax for local variable
      definitions is appallingly awful.
-                          — _Brian Kernighan_
+                         -- _Brian Kernighan_
 
    Definitions of functions can appear anywhere between the rules of an
 ‘awk’ program.  Thus, the general form of an ‘awk’ program is extended
@@ -14975,12 +14954,12 @@ starting to execute any of it.
 
 Here, NAME is the name of the function to define.  A valid function name
 is like a valid variable name: a sequence of letters, digits, and
-underscores that doesn’t start with a digit.  Here too, only the 52
+underscores that doesn't start with a digit.  Here too, only the 52
 upper- and lowercase English letters may be used in a function name.
 Within a single ‘awk’ program, any particular name can only be used as a
 variable, array, or function.
 
-   PARAMETER-LIST is an optional list of the function’s arguments and
+   PARAMETER-LIST is an optional list of the function's arguments and
 local variable names, separated by commas.  When the function is called,
 the argument names are used to hold the argument values given in the
 call.
@@ -15032,7 +15011,7 @@ in the rest of the program.  The shadowed variables are 
not accessible
 in the function definition, because there is no way to name them while
 their names have been taken away for the arguments and local variables.
 All other variables used in the ‘awk’ program can be referenced or set
-normally in the function’s body.
+normally in the function's body.
 
    The arguments and local variables last only as long as the function
 body is executing.  Once the body finishes, you can once again access
@@ -15068,7 +15047,7 @@ keyword ‘function’ when defining a function.
 
    ---------- Footnotes ----------
 
-   (1) This program won’t actually run, because ‘foo()’ is undefined.
+   (1) This program won't actually run, because ‘foo()’ is undefined.
 
 
 File: gawk.info,  Node: Function Example,  Next: Function Calling,  Prev: 
Definition Syntax,  Up: User-defined
@@ -15178,7 +15157,7 @@ the function.
 
 * Menu:
 
-* Calling A Function::          Don’t use spaces.
+* Calling A Function::          Don't use spaces.
 * Variable Scope::              Controlling variable scope.
 * Pass By Value/Reference::     Passing parameters.
 * Function Caveats::            Other points to know about functions.
@@ -15343,14 +15322,14 @@ argument is passed by value.
    Passing an argument by value means that when a function is called, it
 is given a _copy_ of the value of this argument.  The caller may use a
 variable as the expression for the argument, but the called function
-does not know this—it only knows what value the argument had.  For
+does not know this--it only knows what value the argument had.  For
 example, if you write the following code:
 
      foo = "bar"
      z = myfunc(foo)
 
-then you should not think of the argument to ‘myfunc()’ as being “the
-variable ‘foo’.” Instead, think of the argument as the string value
+then you should not think of the argument to ‘myfunc()’ as being "the
+variable ‘foo’."  Instead, think of the argument as the string value
 ‘"bar"’.  If the function ‘myfunc()’ alters the values of its local
 variables, this has no effect on any other variables.  Thus, if
 ‘myfunc()’ does this:
@@ -15447,13 +15426,13 @@ with more parameters than it accepts gives the false 
impression that
 those values are important to the function, when in fact they are not.
 
    Because this is such a bad practice, ‘gawk’ _unconditionally_ issues
-a warning whenever it executes such a function call.  (If you don’t like
-the warning, fix your code!  It’s incorrect, after all.)
+a warning whenever it executes such a function call.  (If you don't like
+the warning, fix your code!  It's incorrect, after all.)
 
    ---------- Footnotes ----------
 
    (1) Said person might even be you, sometime in the future, at which
-point you will wonder, “what was I thinking?!?”
+point you will wonder, "what was I thinking?!?"
 
 
 File: gawk.info,  Node: Return Statement,  Next: Dynamic Typing,  Prev: 
Function Calling,  Up: User-defined
@@ -15546,11 +15525,11 @@ File: gawk.info,  Node: Dynamic Typing,  Prev: Return 
Statement,  Up: User-defin
 9.2.5 Functions and Their Effects on Variable Typing
 ----------------------------------------------------
 
-     It’s a desert topping!
-     It’s a floor wax!
-        — _Saturday Night Live (back when it used to be funny)_
+     It's a desert topping!
+     It's a floor wax!
+       -- _Saturday Night Live (back when it used to be funny)_
 
-   ‘awk’ is a very fluid language.  It is possible that ‘awk’ can’t 
tell
+   ‘awk’ is a very fluid language.  It is possible that ‘awk’ can't 
tell
 if an identifier represents a scalar variable or an array until runtime.
 Here is an annotated sample program:
 
@@ -15591,7 +15570,7 @@ call, though, then ‘awk’ does report the second 
error.
 
    Here, the function uses its parameter differently depending upon the
 value of the global variable ‘A’.  If ‘A’ is zero, the parameter 
‘arr’
-is treated as a scalar.  Otherwise it’s treated as an array.
+is treated as a scalar.  Otherwise it's treated as an array.
 
    There are two ways this program might behave.  ‘awk’ could notice
 that in the main program, ‘a’ is subscripted, and so mark it as an array
@@ -15632,12 +15611,12 @@ which should be processed differently.
    Normally, you would have to use a series of ‘if’-‘else’ statements 
to
 decide which function to call.  By using “indirect” function calls, you
 can specify the name of the function to call as a string variable, and
-then call the function.  Let’s look at an example.
+then call the function.  Let's look at an example.
 
    Suppose you have a file with your test scores for the classes you are
 taking, and you wish to get the sum and the average of your test scores.
 The first field is the class name.  The following fields are the
-functions to call to process the data, up to a “marker” field ‘data:’.
+functions to call to process the data, up to a "marker" field ‘data:’.
 Following the marker, to the end of the record, are the various numeric
 test scores.
 
@@ -15751,10 +15730,10 @@ to force it to be a string value.)
      ⊣     average: <94.025>
 
    The ability to use indirect function calls is more powerful than you
-may think at first.  The C and C++ languages provide “function
-pointers,” which are a mechanism for calling a function chosen at
+may think at first.  The C and C++ languages provide "function
+pointers," which are a mechanism for calling a function chosen at
 runtime.  One of the most well-known uses of this ability is the C
-‘qsort()’ function, which sorts an array using the famous “quicksort”
+‘qsort()’ function, which sorts an array using the famous "quicksort"
 algorithm (see the Wikipedia article
 (https://en.wikipedia.org/wiki/Quicksort) for more information).  To use
 this function, you supply a pointer to a comparison function.  This
@@ -15794,7 +15773,7 @@ mechanism allows you to sort arbitrary data in an 
arbitrary fashion.
 
    The ‘quicksort()’ function receives the ‘data’ array, the starting
 and ending indices to sort (‘left’ and ‘right’), and the name of a
-function that performs a “less than” comparison.  It then implements the
+function that performs a "less than" comparison.  It then implements the
 quicksort algorithm.
 
    To make use of the sorting function, we return to our previous
@@ -15815,7 +15794,7 @@ example.  The first thing to do is write some 
comparison functions:
      }
 
    The ‘num_ge()’ function is needed to perform a descending sort; when
-used to perform a “less than” test, it actually does the opposite
+used to perform a "less than" test, it actually does the opposite
 (greater than or equal to), which yields data sorted in descending
 order.
 
@@ -15919,7 +15898,7 @@ functions indirectly, as follows.
      arguments for that function causes a fatal error.  For example,
      calling ‘length()’ with two arguments.  These errors are found at
      runtime instead of when ‘gawk’ parses your program, since ‘gawk’
-     doesn’t know until runtime if you have passed the correct number of
+     doesn't know until runtime if you have passed the correct number of
      arguments or not.
 
    ‘gawk’ does its best to make indirect function calls efficient.  For
@@ -15953,7 +15932,7 @@ File: gawk.info,  Node: Functions Summary,  Prev: 
Indirect Calls,  Up: Functions
      not defined.  The return value can be ignored.
 
    • The handling of backslash in ‘sub()’ and ‘gsub()’ is not simple.
-     It is more straightforward in ‘gawk’’s ‘gensub()’ function, but
+     It is more straightforward in ‘gawk’'s ‘gensub()’ function, but
      that function still requires care in its use.
 
    • User-defined functions provide important capabilities but come with
@@ -15966,7 +15945,7 @@ File: gawk.info,  Node: Functions Summary,  Prev: 
Indirect Calls,  Up: Functions
 
    • User-defined functions may call other user-defined (and built-in)
      functions and may call themselves recursively.  Function parameters
-     “hide” any global variables of the same names.  You cannot use the
+     "hide" any global variables of the same names.  You cannot use the
      name of a reserved variable (such as ‘ARGC’) as the name of a
      parameter in user-defined functions.
 
@@ -15976,7 +15955,7 @@ File: gawk.info,  Node: Functions Summary,  Prev: 
Indirect Calls,  Up: Functions
      has returned.
 
    • Use the ‘return’ statement to return from a user-defined function.
-     An optional expression becomes the function’s return value.  Only
+     An optional expression becomes the function's return value.  Only
      scalar values may be returned by a function.
 
    • If a variable that has never been used is passed to a user-defined
@@ -16085,25 +16064,25 @@ function).  There is no intermediate state analogous 
to ‘static’
 variables in C.
 
    Library functions often need to have global variables that they can
-use to preserve state information between calls to the function—for
-example, ‘getopt()’’s variable ‘_opti’ (*note Getopt Function::).  
Such
+use to preserve state information between calls to the function--for
+example, ‘getopt()’'s variable ‘_opti’ (*note Getopt Function::).  Such
 variables are called “private”, as the only functions that need to use
 them are the ones in the library.
 
    When writing a library function, you should try to choose names for
 your private variables that will not conflict with any variables used by
-either another library function or a user’s main program.  For example,
+either another library function or a user's main program.  For example,
 a name like ‘i’ or ‘j’ is not a good choice, because user programs 
often
 use variable names like these for their own purposes.
 
    The example programs shown in this major node all start the names of
-their private variables with an underscore (‘_’).  Users generally don’t
+their private variables with an underscore (‘_’).  Users generally don't
 use leading underscores in their variable names, so this convention
 immediately decreases the chances that the variable names will be
-accidentally shared with the user’s program.
+accidentally shared with the user's program.
 
    In addition, several of the library functions use a prefix that helps
-indicate what function or set of functions use the variables—for
+indicate what function or set of functions use the variables--for
 example, ‘_pw_byname()’ in the user database routines (*note Passwd
 Functions::).  This convention is recommended, as it even further
 decreases the chance of inadvertent conflict among variable names.  Note
@@ -16112,15 +16091,15 @@ private function names.(1)
 
    As a final note on variable naming, if a function makes global
 variables available for use by a main program, it is a good convention
-to start those variables’ names with a capital letter—for example,
-‘getopt()’’s ‘Opterr’ and ‘Optind’ variables (*note Getopt 
Function::).
+to start those variables' names with a capital letter--for example,
+‘getopt()’'s ‘Opterr’ and ‘Optind’ variables (*note Getopt 
Function::).
 The leading capital letter indicates that it is global, while the fact
 that the variable name is not all capital letters indicates that the
-variable is not one of ‘awk’’s predefined variables, such as ‘FS’.
+variable is not one of ‘awk’'s predefined variables, such as ‘FS’.
 
    It is also important that _all_ variables in library functions that
 do not need to save state are, in fact, declared local.(2)  If this is
-not done, the variables could accidentally be used in the user’s
+not done, the variables could accidentally be used in the user's
 program, leading to bugs that are very difficult to track down:
 
      function lib_func(x, y,    l1, l2)
@@ -16133,7 +16112,7 @@ program, leading to bugs that are very difficult to 
track down:
 
    A different convention, common in the Tcl community, is to use a
 single associative array to hold the values needed by the library
-function(s), or “package.” This significantly decreases the number of
+function(s), or "package."  This significantly decreases the number of
 actual global names in use.  For example, the functions described in
 *note Passwd Functions:: might have used array elements
 ‘PW_data["inited"]’, ‘PW_data["total"]’, ‘PW_data["count"]’, and
@@ -16141,7 +16120,7 @@ actual global names in use.  For example, the functions 
described in
 and ‘_pw_count’.
 
    The conventions presented in this minor node are exactly that:
-conventions.  You are not required to write your programs this way—we
+conventions.  You are not required to write your programs this way--we
 merely recommend that you do so.
 
    Beginning with version 5.0, ‘gawk’ provides a powerful mechanism for
@@ -16155,7 +16134,7 @@ use this convention, this was not done, in order to 
show how our own
 ‘awk’ programming style has evolved and to provide some basis for this
 discussion.
 
-   (2) ‘gawk’’s ‘--dump-variables’ command-line option is useful for
+   (2) ‘gawk’'s ‘--dump-variables’ command-line option is useful for
 verifying this.
 
 
@@ -16331,7 +16310,7 @@ statement jumps to the ‘END’ rule.  If the 
‘END’ rule finds
    The purpose of the test in the ‘END’ rule is to keep any other ‘END’
 rules from running.  When an assertion fails, the program should exit
 immediately.  If no assertions fail, then ‘_assert_exit’ is still false
-when the ‘END’ rule is run normally, and the rest of the program’s 
‘END’
+when the ‘END’ rule is run normally, and the rest of the program's 
‘END’
 rules execute.  For all of this to work correctly, ‘assert.awk’ must be
 the first source file read by ‘awk’.  The function can be used in a
 program in the following way:
@@ -16364,14 +16343,14 @@ File: gawk.info,  Node: Round Function,  Next: Cliff 
Random Function,  Prev: Ass
 -----------------------
 
 The way ‘printf’ and ‘sprintf()’ (*note Printf::) perform rounding 
often
-depends upon the system’s C ‘sprintf()’ subroutine.  On many machines,
-‘sprintf()’ rounding is “unbiased”, which means it doesn’t always 
round
+depends upon the system's C ‘sprintf()’ subroutine.  On many machines,
+‘sprintf()’ rounding is “unbiased”, which means it doesn't always round
 a trailing .5 up, contrary to naive expectations.  In unbiased rounding,
 .5 rounds to even, rather than always up, so 1.5 rounds to 2 but 4.5
 rounds to 4.  This means that if you are using a format that does
 rounding (e.g., ‘"%.0f"’), you should check what your system does.  The
 following function does traditional rounding; it might be useful if your
-‘awk’’s ‘printf’ does unbiased rounding:
+‘awk’'s ‘printf’ does unbiased rounding:
 
      # round.awk --- do normal rounding
 
@@ -16410,8 +16389,8 @@ File: gawk.info,  Node: Cliff Random Function,  Next: 
Ordinal Functions,  Prev:
 
 The Cliff random number generator
 (http://mathworld.wolfram.com/CliffRandomNumberGenerator.html) is a very
-simple random number generator that “passes the noise sphere test for
-randomness by showing no structure.” It is easily programmed, in less
+simple random number generator that "passes the noise sphere test for
+randomness by showing no structure."  It is easily programmed, in less
 than 10 lines of ‘awk’ code:
 
      # cliff_rand.awk --- generate Cliff random numbers
@@ -16426,9 +16405,9 @@ than 10 lines of ‘awk’ code:
          return _cliff_seed
      }
 
-   This algorithm requires an initial “seed” of 0.1.  Each new value
+   This algorithm requires an initial "seed" of 0.1.  Each new value
 uses the current seed as input for the calculation.  If the built-in
-‘rand()’ function (*note Numeric Functions::) isn’t random enough, you
+‘rand()’ function (*note Numeric Functions::) isn't random enough, you
 might try using this function instead.
 
 
@@ -16439,7 +16418,7 @@ File: gawk.info,  Node: Ordinal Functions,  Next: Join 
Function,  Prev: Cliff Ra
 
 One commercial implementation of ‘awk’ supplies a built-in function,
 ‘ord()’, which takes a character and returns the numeric value for that
-character in the machine’s character set.  If the string passed to
+character in the machine's character set.  If the string passed to
 ‘ord()’ has more than one character, only the first one is used.
 
    The inverse of this function is ‘chr()’ (from the function of the
@@ -16512,7 +16491,7 @@ on some older systems, but they are not really worth 
worrying about:
 
    An obvious improvement to these functions is to move the code for the
 ‘_ord_init’ function into the body of the ‘BEGIN’ rule.  It was written
-this way initially for ease of development.  There is a “test program”
+this way initially for ease of development.  There is a "test program"
 in a ‘BEGIN’ rule, to test the function.  It is commented out for
 production use.
 
@@ -16542,7 +16521,7 @@ application programs (*note Sample Programs::).
 but it should also have a reasonable default behavior.  It is called
 with an array as well as the beginning and ending indices of the
 elements in the array to be merged.  This assumes that the array indices
-are numeric—a reasonable assumption, as the array was likely created
+are numeric--a reasonable assumption, as the array was likely created
 with ‘split()’ (*note String Functions::):
 
      # join.awk --- join an array into a string
@@ -16564,7 +16543,7 @@ the strings back together.  If the caller supplies a 
nonempty value,
 ‘join()’ uses it; if it is not supplied, it has a null value.  In this
 case, ‘join()’ uses a single space as a default separator for the
 strings.  If the value is equal to ‘SUBSEP’, then ‘join()’ joins the
-strings with no separator between them.  ‘SUBSEP’ serves as a “magic”
+strings with no separator between them.  ‘SUBSEP’ serves as a "magic"
 value to indicate that there should be no separation between the
 component strings.(1)
 
@@ -16813,7 +16792,7 @@ File: gawk.info,  Node: To CSV Function,  Prev: 
Isnumeric Function,  Up: General
 10.2.11 Producing CSV Data
 --------------------------
 
-‘gawk’’s ‘--csv’ option causes ‘gawk’ to process CSV data (*note 
Comma
+‘gawk’'s ‘--csv’ option causes ‘gawk’ to process CSV data (*note 
Comma
 Separated Fields::).
 
    But what if you have regular data that you want to output in CSV
@@ -16905,7 +16884,7 @@ add new special patterns to ‘gawk’, named 
‘BEGIN_FILE’ and ‘END_FILE
 that would have the desired behavior.  He even supplied us the code to
 do so.
 
-   Adding these special patterns to ‘gawk’ wasn’t necessary; the job can
+   Adding these special patterns to ‘gawk’ wasn't necessary; the job can
 be done cleanly in ‘awk’ itself, as illustrated by the following library
 program.  It arranges to call two user-supplied functions, ‘beginfile()’
 and ‘endfile()’, at the beginning and end of each data file.  Besides
@@ -16929,10 +16908,10 @@ _portably_; this works with any implementation of 
‘awk’:
 
      END { endfile(FILENAME) }
 
-   This file must be loaded before the user’s “main” program, so that
+   This file must be loaded before the user's "main" program, so that
 the rule it supplies is executed first.
 
-   This rule relies on ‘awk’’s ‘FILENAME’ variable, which 
automatically
+   This rule relies on ‘awk’'s ‘FILENAME’ variable, which automatically
 changes for each new data file.  The current file name is saved in a
 private variable, ‘_oldfilename’.  If ‘FILENAME’ does not equal
 ‘_oldfilename’, then a new data file is being processed and it is
@@ -16946,7 +16925,7 @@ correctly even for the first data file.
 
    The program also supplies an ‘END’ rule to do the final processing
 for the last file.  Because this ‘END’ rule comes before any ‘END’ 
rules
-supplied in the “main” program, ‘endfile()’ is called first.  Once
+supplied in the "main" program, ‘endfile()’ is called first.  Once
 again, the value of multiple ‘BEGIN’ and ‘END’ rules should be clear.
 
    If the same data file occurs twice in a row on the command line, then
@@ -16980,7 +16959,7 @@ patterns?
 immediate fatal error.  In this case, there is no way for a user-defined
 function to deal with the problem, as the mechanism for calling it
 relies on the file being open and at the first record.  Thus, the main
-reason for ‘BEGINFILE’ is to give you a “hook” to catch files that
+reason for ‘BEGINFILE’ is to give you a "hook" to catch files that
 cannot be processed.  ‘ENDFILE’ exists for symmetry, and because it
 provides an easy way to do per-file cleanup processing.  For more
 information, refer to *note BEGINFILE/ENDFILE::.
@@ -16993,11 +16972,11 @@ File: gawk.info,  Node: Rewind Function,  Next: File 
Checking,  Prev: Filetrans
 
 Another request for a new built-in function was for a function that
 would make it possible to reread the current file.  The requesting user
-didn’t want to have to use ‘getline’ (*note Getline::) inside a loop.
+didn't want to have to use ‘getline’ (*note Getline::) inside a loop.
 
    However, as long as you are not in the ‘END’ rule, it is quite easy
 to arrange to immediately close the current input file and then start
-over with it from the top.  For lack of a better name, we’ll call the
+over with it from the top.  For lack of a better name, we'll call the
 function ‘rewind()’:
 
      # rewind.awk --- rewind the current file and start over
@@ -17021,12 +17000,12 @@ function ‘rewind()’:
    The ‘rewind()’ function relies on the ‘ARGIND’ variable (*note
 Auto-set::), which is specific to ‘gawk’.  It also relies on the
 ‘nextfile’ keyword (*note Nextfile Statement::).  Because of this, you
-should not call it from an ‘ENDFILE’ rule.  (This isn’t necessary
+should not call it from an ‘ENDFILE’ rule.  (This isn't necessary
 anyway, because ‘gawk’ goes to the next file as soon as an ‘ENDFILE’
 rule finishes!)
 
    You need to be careful calling ‘rewind()’.  You can end up causing
-infinite recursion if you don’t pay attention.  Here is an example use:
+infinite recursion if you don't pay attention.  Here is an example use:
 
      $ cat data
      ⊣ a
@@ -17058,7 +17037,7 @@ File: gawk.info,  Node: File Checking,  Next: Empty 
Files,  Prev: Rewind Functio
 10.3.3 Checking for Readable Data files
 ---------------------------------------
 
-Normally, if you give ‘awk’ a data file that isn’t readable, it stops
+Normally, if you give ‘awk’ a data file that isn't readable, it stops
 with a fatal error.  There are times when you might want to just ignore
 such files and keep going.(1)  You can do this by prepending the
 following program to your ‘awk’ program:
@@ -17077,8 +17056,8 @@ following program to your ‘awk’ program:
          }
      }
 
-   This works, because the ‘getline’ won’t be fatal.  Removing the
-element from ‘ARGV’ with ‘delete’ skips the file (because it’s no 
longer
+   This works, because the ‘getline’ won't be fatal.  Removing the
+element from ‘ARGV’ with ‘delete’ skips the file (because it's no 
longer
 in the list).  See also *note ARGC and ARGV::.
 
    Because ‘awk’ variable names only allow the English letters, the
@@ -17088,7 +17067,7 @@ as ‘[:alpha:]’ and ‘[:alnum:]’ (*note Bracket 
Expressions::).
    ---------- Footnotes ----------
 
    (1) The ‘BEGINFILE’ special pattern (*note BEGINFILE/ENDFILE::)
-provides an alternative mechanism for dealing with files that can’t be
+provides an alternative mechanism for dealing with files that can't be
 opened.  However, the code here provides a portable solution.
 
 
@@ -17098,13 +17077,13 @@ File: gawk.info,  Node: Empty Files,  Next: Ignoring 
Assigns,  Prev: File Checki
 -------------------------------------
 
 All known ‘awk’ implementations silently skip over zero-length files.
-This is a by-product of ‘awk’’s implicit
+This is a by-product of ‘awk’'s implicit
 read-a-record-and-match-against-the-rules loop: when ‘awk’ tries to read
 a record from an empty file, it immediately receives an end-of-file
 indication, closes the file, and proceeds on to the next command-line
 data file, _without_ executing any user-level ‘awk’ program code.
 
-   Using ‘gawk’’s ‘ARGIND’ variable (*note Built-in Variables::), it 
is
+   Using ‘gawk’'s ‘ARGIND’ variable (*note Built-in Variables::), it is
 possible to detect when an empty data file has been skipped.  Similar to
 the library file presented in *note Filetrans Function::, the following
 library file calls a function named ‘zerofile()’ that the user must
@@ -17194,7 +17173,7 @@ Most utilities on POSIX-compatible systems take options 
on the command
 line that can be used to change the way a program behaves.  ‘awk’ is an
 example of such a program (*note Options::).  Often, options take
 “arguments” (i.e., data that the program needs to correctly obey the
-command-line option).  For example, ‘awk’’s ‘-F’ option requires a
+command-line option).  For example, ‘awk’'s ‘-F’ option requires a
 string to use as the field separator.  The first occurrence on the
 command line of either ‘--’ or a string that does not begin with ‘-’
 ends the options.
@@ -17224,7 +17203,7 @@ following are valid ways of invoking the program:
      prog -acbfoo data1 data2 data3
 
    Notice that when the argument is grouped with its option, the rest of
-the argument is considered to be the option’s argument.  In this
+the argument is considered to be the option's argument.  In this
 example, ‘-acbfoo’ indicates that all of the ‘-a’, ‘-b’, and 
‘-c’
 options were supplied, and that ‘foo’ is the argument to the ‘-b’
 option.
@@ -17279,7 +17258,7 @@ command-line arguments for ‘awk’:
          ...
      }
 
-   The GNU project’s version of the original Unix utilities popularized
+   The GNU project's version of the original Unix utilities popularized
 the use of long command line options.  For example, ‘--help’ in addition
 to ‘-h’.  Arguments to long options are either provided as separate
 command line arguments (‘--source 'PROGRAM-TEXT'’) or separated from the
@@ -17320,7 +17299,7 @@ individual characters (*note String Functions::).(1)
 
    The function starts out with comments presenting a list of the global
 variables it uses, what the return values are, what they mean, and any
-global variables that are “private” to this library function.  Such
+global variables that are "private" to this library function.  Such
 documentation is essential for any program, and particularly for library
 functions.
 
@@ -17494,7 +17473,7 @@ long option (minus its leading dashes).
    The ‘BEGIN’ rule initializes both ‘Opterr’ and ‘Optind’ to one.
 ‘Opterr’ is set to one, because the default behavior is for ‘getopt()’
 to print a diagnostic message upon seeing an invalid option.  ‘Optind’
-is set to one, because there’s no reason to look at the program name,
+is set to one, because there's no reason to look at the program name,
 which is in ‘ARGV[0]’:
 
      BEGIN {
@@ -17553,7 +17532,7 @@ that it does not try to interpret the ‘-a’, etc., 
as its own options.
      not try to process the command-line options as file names.
 
    Using ‘#!’ with the ‘-E’ option may help avoid conflicts between 
your
-program’s options and ‘gawk’’s options, as ‘-E’ causes ‘gawk’ 
to abandon
+program's options and ‘gawk’'s options, as ‘-E’ causes ‘gawk’ to 
abandon
 processing of further options (*note Executable Scripts:: and *note
 Options::).
 
@@ -17573,8 +17552,8 @@ File: gawk.info,  Node: Passwd Functions,  Next: Group 
Functions,  Prev: Getopt
 ==============================
 
 The ‘PROCINFO’ array (*note Built-in Variables::) provides access to the
-current user’s real and effective user and group ID numbers, and, if
-available, the user’s supplementary group set.  However, because these
+current user's real and effective user and group ID numbers, and, if
+available, the user's supplementary group set.  However, because these
 are numbers, they do not provide very useful information to the average
 user.  There needs to be some way to find the user information
 associated with the user and group ID numbers.  This minor node presents
@@ -17585,19 +17564,19 @@ from the group database.
    The POSIX standard does not define the file where user information is
 kept.  Instead, it provides the ‘<pwd.h>’ header file and several C
 language subroutines for obtaining user information.  The primary
-function is ‘getpwent()’, for “get password entry.” The “password” 
comes
-from the original user database file, ‘/etc/passwd’, which stores user
-information along with the encrypted passwords (hence the name).
+function is ‘getpwent()’, for "get password entry."  The "password"
+comes from the original user database file, ‘/etc/passwd’, which stores
+user information along with the encrypted passwords (hence the name).
 
    Although an ‘awk’ program could simply read ‘/etc/passwd’ directly,
-this file may not contain complete information about the system’s set of
+this file may not contain complete information about the system's set of
 users.(1)  To be sure you are able to produce a readable and complete
 version of the user database, it is necessary to write a small C program
 that calls ‘getpwent()’.  ‘getpwent()’ is defined as returning a 
pointer
 to a ‘struct passwd’.  Each time it is called, it returns the next entry
 in the database.  When there are no more entries, it returns ‘NULL’, the
 null pointer.  When this happens, the C program should call ‘endpwent()’
-to close the database.  Following is ‘pwcat’, a C program that “cats”
+to close the database.  Following is ‘pwcat’, a C program that "cats"
 the password database:
 
      /*
@@ -17622,39 +17601,39 @@ the password database:
          return 0;
      }
 
-   If you don’t understand C, don’t worry about it.  The output from
+   If you don't understand C, don't worry about it.  The output from
 ‘pwcat’ is the user database, in the traditional ‘/etc/passwd’ format 
of
 colon-separated fields.  The fields are:
 
 Login name
-     The user’s login name.
+     The user's login name.
 
 Encrypted password
-     The user’s encrypted password.  This may not be available on some
+     The user's encrypted password.  This may not be available on some
      systems.
 
 User-ID
-     The user’s numeric user ID number.  (On some systems, it’s a C
+     The user's numeric user ID number.  (On some systems, it's a C
      ‘long’, and not an ‘int’.  Thus, we cast it to ‘long’ for all
      cases.)
 
 Group-ID
-     The user’s numeric group ID number.  (Similar comments about ‘long’
+     The user's numeric group ID number.  (Similar comments about ‘long’
      versus ‘int’ apply here.)
 
 Full name
-     The user’s full name, and perhaps other information associated with
+     The user's full name, and perhaps other information associated with
      the user.
 
 Home directory
-     The user’s login (or “home”) directory (familiar to shell
+     The user's login (or "home") directory (familiar to shell
      programmers as ‘$HOME’).
 
 Login shell
      The program that is run when the user logs in.  This is usually a
      shell, such as Bash.
 
-   A few lines representative of ‘pwcat’’s output are as follows:
+   A few lines representative of ‘pwcat’'s output are as follows:
 
      $ pwcat
      ⊣ root:x:0:1:Operator:/:/bin/sh
@@ -17724,7 +17703,7 @@ efficiency, as ‘_pw_init()’ needs to be called only 
once.
 ‘pwcat’, it first saves the values of ‘FS’, ‘RS’, and ‘$0’.  
It notes in
 the variable ‘using_fw’ whether field splitting with ‘FIELDWIDTHS’ is 
in
 effect or not.  Doing so is necessary, as these functions could be
-called from anywhere within a user’s program, and the user may have his
+called from anywhere within a user's program, and the user may have his
 or her own way of splitting records and fields.  This makes it possible
 to restore the correct field-splitting mechanism later.  The test can
 only be true for ‘gawk’.  It is false if using ‘FS’ or ‘FPAT’, or 
on
@@ -17784,8 +17763,8 @@ subsequent calls to ‘getpwent()’ start over again:
    A conscious design decision in this suite is that each subroutine
 calls ‘_pw_init()’ to initialize the database arrays.  The overhead of
 running a separate process to generate the user database, and the I/O to
-scan it, are only incurred if the user’s main program actually calls one
-of these functions.  If this library file is loaded along with a user’s
+scan it, are only incurred if the user's main program actually calls one
+of these functions.  If this library file is loaded along with a user's
 program, but none of the routines are ever called, then there is no
 extra runtime overhead.  (The alternative is move the body of
 ‘_pw_init()’ into a ‘BEGIN’ rule, which always runs ‘pwcat’.  This
@@ -17819,7 +17798,7 @@ standard only provides a set of C library routines 
(‘<grp.h>’ and
 ‘getgrent()’) for accessing the information.  Even though this file may
 exist, it may not have complete information.  Therefore, as with the
 user database, it is necessary to have a small C program that generates
-the group database as its output.  ‘grcat’, a C program that “cats” the
+the group database as its output.  ‘grcat’, a C program that "cats" the
 group database, is as follows:
 
      /*
@@ -17854,15 +17833,15 @@ group database, is as follows:
 separated with colons and represent the following information:
 
 Group Name
-     The group’s name.
+     The group's name.
 
 Group Password
-     The group’s encrypted password.  In practice, this field is never
+     The group's encrypted password.  In practice, this field is never
      used; it is usually empty or set to ‘*’.
 
 Group ID Number
-     The group’s numeric group ID number; the association of name to
-     number must be unique within the file.  (On some systems it’s a C
+     The group's numeric group ID number; the association of name to
+     number must be unique within the file.  (On some systems it's a C
      ‘long’, and not an ‘int’.  Thus, we cast it to ‘long’ for all
      cases.)
 
@@ -18032,7 +18011,7 @@ body of ‘_gr_init()’ into a ‘BEGIN’ rule).
 
    Most of the work is in scanning the database and building the various
 associative arrays.  The functions that the user calls are themselves
-very simple, relying on ‘awk’’s associative arrays to do work.
+very simple, relying on ‘awk’'s associative arrays to do work.
 
    The ‘id’ program in *note Id Program:: uses these functions.
 
@@ -18040,7 +18019,7 @@ very simple, relying on ‘awk’’s associative 
arrays to do work.
 
    (1) There is a subtle problem with the code just presented.  Suppose
 that the first time there were no names.  This code adds the names with
-a leading comma.  It also doesn’t check that there is a ‘$4’.
+a leading comma.  It also doesn't check that there is a ‘$4’.
 
 
 File: gawk.info,  Node: Walking Arrays,  Next: Library Functions Summary,  
Prev: Group Functions,  Up: Library Functions
@@ -18069,7 +18048,7 @@ representing the name of the array:
 It works by looping over each element of the array.  If any given
 element is itself an array, the function calls itself recursively,
 passing the subarray and a new string representing the current index.
-Otherwise, the function simply prints the element’s name, index, and
+Otherwise, the function simply prints the element's name, index, and
 value.  Here is a main program to demonstrate:
 
      BEGIN {
@@ -18159,8 +18138,8 @@ File: gawk.info,  Node: Library Functions Summary,  
Next: Library Exercises,  Pr
      are intended to serve that purpose.
 
    • When writing general-purpose library functions, put some thought
-     into how to name any global variables so that they won’t conflict
-     with variables from a user’s program.
+     into how to name any global variables so that they won't conflict
+     with variables from a user's program.
 
    • The functions presented here fit into the following categories:
 
@@ -18191,7 +18170,7 @@ File: gawk.info,  Node: Library Exercises,  Prev: 
Library Functions Summary,  Up
 ==============
 
   1. In *note Empty Files::, we presented the ‘zerofile.awk’ program,
-     which made use of ‘gawk’’s ‘ARGIND’ variable.  Can this problem 
be
+     which made use of ‘gawk’'s ‘ARGIND’ variable.  Can this problem be
      solved without relying on ‘ARGIND’?  If so, how?
 
   2. As a related challenge, revise that code to handle the case where
@@ -18258,7 +18237,7 @@ you.
 to replace the installed versions on your system.  Nor may all of these
 programs be fully compliant with the most recent POSIX standard.  This
 is not a problem; their purpose is to illustrate ‘awk’ language
-programming for “real-world” tasks.
+programming for "real-world" tasks.
 
    The programs are presented in alphabetical order.
 
@@ -18278,11 +18257,11 @@ File: gawk.info,  Node: Cut Program,  Next: Egrep 
Program,  Up: Clones
 11.2.1 Cutting Out Fields and Columns
 -------------------------------------
 
-The ‘cut’ utility selects, or “cuts,” characters or fields from its
+The ‘cut’ utility selects, or "cuts," characters or fields from its
 standard input and sends them to its standard output.  Fields are
 separated by TABs by default, but you may supply a command-line option
 to change the field “delimiter” (i.e., the field-separator character).
-‘cut’’s definition of fields is less general than ‘awk’’s.
+‘cut’'s definition of fields is less general than ‘awk’'s.
 
    A common use of ‘cut’ might be to pull out just the login names of
 logged-on users from the output of ‘who’.  For example, the following
@@ -18340,7 +18319,7 @@ supplied:
      }
 
    Next comes a ‘BEGIN’ rule that parses the command-line options.  It
-sets ‘FS’ to a single TAB character, because that is ‘cut’’s default
+sets ‘FS’ to a single TAB character, because that is ‘cut’'s default
 field separator.  The rule then sets the output field separator to be
 the same as the input field separator.  A loop using ‘getopt()’ steps
 through the command-line options.  Exactly one of the variables
@@ -18380,11 +18359,11 @@ by characters, the output field separator is set to 
the null string:
              ARGV[i] = ""
 
    The code must take special care when the field delimiter is a space.
-Using a single space (‘" "’) for the value of ‘FS’ is 
incorrect—‘awk’
+Using a single space (‘" "’) for the value of ‘FS’ is 
incorrect--‘awk’
 would separate fields with runs of spaces, TABs, and/or newlines, and we
 want them to be separated with individual spaces.  To this end, we save
 the original space character in the variable ‘fs’ for later use; after
-setting ‘FS’ to ‘"[ ]"’ we can’t use it directly to see if the field
+setting ‘FS’ to ‘"[ ]"’ we can't use it directly to see if the field
 delimiter character is in the string.
 
    Also remember that after ‘getopt()’ is through (as described in *note
@@ -18445,7 +18424,7 @@ splitting:
      }
 
    The ‘set_charlist()’ function is more complicated than
-‘set_fieldlist()’.  The idea here is to use ‘gawk’’s 
‘FIELDWIDTHS’
+‘set_fieldlist()’.  The idea here is to use ‘gawk’'s ‘FIELDWIDTHS’
 variable (*note Constant Size::), which describes constant-width input.
 When using a character list, that is exactly what we have.
 
@@ -18527,7 +18506,7 @@ out between the fields:
          print ""
      }
 
-   This version of ‘cut’ relies on ‘gawk’’s ‘FIELDWIDTHS’ 
variable to do
+   This version of ‘cut’ relies on ‘gawk’'s ‘FIELDWIDTHS’ variable 
to do
 the character-based cutting.  It is possible in other ‘awk’
 implementations to use ‘substr()’ (*note String Functions::), but it is
 also extremely painful.  The ‘FIELDWIDTHS’ variable supplies an elegant
@@ -18549,7 +18528,7 @@ There was also ‘fgrep’ (Fast ‘grep’), which 
searched for matches of one
 more fixed strings.
 
    POSIX chose to combine these three programs into one, simply named
-‘grep’.  On a POSIX system, ‘grep’’s default behavior is to search 
using
+‘grep’.  On a POSIX system, ‘grep’'s default behavior is to search 
using
 BREs.  You use ‘-E’ to specify the use of EREs, and ‘-F’ to specify
 searching for fixed strings.
 
@@ -18601,7 +18580,7 @@ line, each output line is preceded by the name of the 
file and a colon.
      having succeeded.
 
    This version uses the ‘getopt()’ library function (*note Getopt
-Function::) and ‘gawk’’s ‘BEGINFILE’ and ‘ENDFILE’ special 
patterns
+Function::) and ‘gawk’'s ‘BEGINFILE’ and ‘ENDFILE’ special patterns
 (*note BEGINFILE/ENDFILE::).
 
    The program begins with descriptive comments and then a ‘BEGIN’ rule
@@ -18651,15 +18630,15 @@ that processes the command-line arguments with 
‘getopt()’.  The ‘-i’
          }
 
 Note the comment about invocation: Because several of the options
-overlap with ‘gawk’’s, a ‘--’ is needed to tell ‘gawk’ to stop 
looking
+overlap with ‘gawk’'s, a ‘--’ is needed to tell ‘gawk’ to stop 
looking
 for options.
 
    Next comes the code that handles the ‘egrep’-specific behavior.
 ‘egrep’ uses the first nonoption on the command line if no pattern is
 supplied with ‘-e’.  If the pattern is empty, that means no pattern was
-supplied, so it’s necessary to print an error message and exit.  The
+supplied, so it's necessary to print an error message and exit.  The
 ‘awk’ command-line arguments up to ‘ARGV[Optind]’ are cleared, so that
-‘awk’ won’t try to process them as files.  If no files are specified,
+‘awk’ won't try to process them as files.  If no files are specified,
 the standard input is used, and if multiple files are specified, we make
 sure to note this so that the file names can precede the matched lines
 in the output:
@@ -18686,7 +18665,7 @@ zero.  ‘fcount’ tracks how many lines in the 
current file matched the
 pattern.
 
    Here also is where we implement the ‘-s’ option.  We check if 
‘ERRNO’
-has been set, and if ‘-s’ was supplied.  In that case, it’s necessary to
+has been set, and if ‘-s’ was supplied.  In that case, it's necessary to
 move on to the next file.  Otherwise ‘gawk’ would exit with an error:
 
      BEGINFILE {
@@ -18792,8 +18771,8 @@ File: gawk.info,  Node: Id Program,  Next: Split 
Program,  Prev: Egrep Program,
 11.2.3 Printing Out User Information
 ------------------------------------
 
-The ‘id’ utility lists a user’s real and effective user ID numbers, real
-and effective group ID numbers, and the user’s group set, if any.  ‘id’
+The ‘id’ utility lists a user's real and effective user ID numbers, real
+and effective group ID numbers, and the user's group set, if any.  ‘id’
 only prints the effective user ID and group ID if they are different
 from the real ones.  If possible, ‘id’ also supplies the corresponding
 user and group names.  The output might look like this:
@@ -18801,12 +18780,12 @@ user and group names.  The output might look like 
this:
      $ id
      ⊣ uid=1000(arnold) gid=1000(arnold) 
groups=1000(arnold),4(adm),7(lp),27(sudo)
 
-   This information is part of what is provided by ‘gawk’’s 
‘PROCINFO’
+   This information is part of what is provided by ‘gawk’'s ‘PROCINFO’
 array (*note Built-in Variables::).  However, the ‘id’ utility provides
 a more palatable output than just individual numbers.
 
    The POSIX version of ‘id’ takes several options that give you control
-over the output’s format, such as printing only real ids, or printing
+over the output's format, such as printing only real ids, or printing
 only numbers or only names.  Additionally, you can print the information
 for a specific user, instead of that of the current user.
 
@@ -18877,7 +18856,7 @@ more than one user name on the command line:
    The user and group ID numbers are obtained from ‘PROCINFO’ for the
 current user, or from the user and password databases for a user
 supplied on the command line.  In the latter case, ‘real_ids_only’ is
-set, since it’s not possible to print information about the effective
+set, since it's not possible to print information about the effective
 user and group IDs:
 
          if (ARGC - Optind == 0) {
@@ -18896,7 +18875,7 @@ user and group IDs:
    The test in the ‘for’ loop is worth noting.  Any supplementary groups
 in the ‘PROCINFO’ array have the indices ‘"group1"’ through 
‘"groupN"’
 for some N (i.e., the total number of supplementary groups).  However,
-we don’t know in advance how many of these groups there are.
+we don't know in advance how many of these groups there are.
 
    This loop works by starting at one, concatenating the value with
 ‘"group"’, and then using ‘in’ to see if that value is in the array
@@ -18904,7 +18883,7 @@ we don’t know in advance how many of these groups 
there are.
 last group in the array and the loop exits.
 
    The loop is also correct if there are _no_ supplementary groups; then
-the condition is false the first time it’s tested, and the loop body
+the condition is false the first time it's tested, and the loop body
 never executes.
 
    Now, based on the options, we decide what information to print.  For
@@ -18969,8 +18948,8 @@ combined with ‘-r’ and ‘-n’:
              exit 0
          }
 
-   At this point, we haven’t exited yet, so we print the regular,
-default output, based either on the current user’s information, or that
+   At this point, we haven't exited yet, so we print the regular,
+default output, based either on the current user's information, or that
 of the user whose name was provided on the command line.  We start with
 the real user ID:
 
@@ -18978,7 +18957,7 @@ the real user ID:
          pw = getpwuid(uid)
          print_first_field(pw)
 
-   The ‘print_first_field()’ function prints the user’s login name from
+   The ‘print_first_field()’ function prints the user's login name from
 the password file entry, surrounded by parentheses.  It is shown soon.
 Printing the effective user ID is next:
 
@@ -19044,7 +19023,7 @@ particular, moving the check for the empty string into
 
    Finally, ‘fill_info_for_user()’ fetches user, group, and group set
 information for the user named on the command.  The code is fairly
-straightforward, merely requiring that we exit if the given user doesn’t
+straightforward, merely requiring that we exit if the given user doesn't
 exist:
 
      function fill_info_for_user(user,
@@ -19123,7 +19102,7 @@ character.(1)
 
    The program begins with a standard descriptive comment and then a
 ‘usage()’ function describing the options.  The variable ‘common’ keeps
-the function’s lines short so that they look nice on the page:
+the function's lines short so that they look nice on the page:
 
      # split.awk --- do split in awk
      #
@@ -19207,10 +19186,10 @@ the way to ‘zzx’, ‘zzy’, and finally 
‘zzz’.  There are two important
 aspects to this:
 
    • We have to be able to easily generate these suffixes, and in
-     particular easily handle “rolling over”; for example, going from
+     particular easily handle "rolling over"; for example, going from
      ‘abz’ to ‘aca’.
 
-   • We have to tell when we’ve finished with the last file, so that if
+   • We have to tell when we've finished with the last file, so that if
      we still have more input data we can print an error message and
      exit.  The trick is to handle this _after_ using the last suffix,
      and not when the final suffix is created.
@@ -19232,16 +19211,16 @@ been used up.  The logical steps are as follows:
 
   2. Prepare the data structures for the next time ‘compute_suffix()’ is
      called.  To do this, we loop over ‘Suffix_ind’, _backwards_.  If
-     the current element is less than 26, it’s incremented and the loop
+     the current element is less than 26, it's incremented and the loop
      breaks (‘abq’ goes to ‘abr’).  Otherwise, the element is reset to
      one and we move down the list (‘abz’ to ‘aca’).  Thus, the
-     ‘Suffix_ind’ array is always “one step ahead” of the actual file
+     ‘Suffix_ind’ array is always "one step ahead" of the actual file
      name suffix to be returned.
 
-  3. Check if we’ve gone past the limit of possible file names.  If
+  3. Check if we've gone past the limit of possible file names.  If
      ‘Reached_last’ is true, print a message and exit.  Otherwise, check
      if ‘Suffix_ind’ describes a suffix where all the letters are ‘z’.
-     If that’s the case we’re about to return the final suffix.  If so,
+     If that's the case we're about to return the final suffix.  If so,
      we set ‘Reached_last’ to true so that the _next_ call to
      ‘compute_suffix()’ will cause a failure.
 
@@ -19305,7 +19284,7 @@ mutually exclusive, we simply use two separate rules, 
one for when
 greater than zero.
 
    The variable ‘tcount’ counts how many lines have been processed so
-far.  When it exceeds ‘Line_count’, it’s time to close the previous file
+far.  When it exceeds ‘Line_count’, it's time to close the previous file
 and switch to a new one:
 
      Line_count > 0 {
@@ -19355,7 +19334,7 @@ new file.  The logic here does all that:
 
    ---------- Footnotes ----------
 
-   (1) Using ‘-b’ twice requires separating ‘gawk’’s options from 
those
+   (1) Using ‘-b’ twice requires separating ‘gawk’'s options from those
 of the program.  For example: ‘gawk -f getopt.awk -f split.awk -b -- -b
 42m large-file.txt split-’.
 
@@ -19365,7 +19344,7 @@ File: gawk.info,  Node: Tee Program,  Next: Uniq 
Program,  Prev: Split Program,
 11.2.5 Duplicating Output into Multiple Files
 ---------------------------------------------
 
-The ‘tee’ program is known as a “pipe fitting.” ‘tee’ copies its
+The ‘tee’ program is known as a "pipe fitting."  ‘tee’ copies its
 standard input to its standard output and also duplicates it to the
 files named on the command line.  Its usage is as follows:
 
@@ -19453,8 +19432,8 @@ File: gawk.info,  Node: Uniq Program,  Next: Wc 
Program,  Prev: Tee Program,  Up
 
 The ‘uniq’ utility reads sorted lines of data on its standard input, and
 by default removes duplicate lines.  In other words, it only prints
-unique lines—hence the name.  ‘uniq’ has a number of options.  The usage
-is as follows:
+unique lines--hence the name.  ‘uniq’ has a number of options.  The
+usage is as follows:
 
      ‘uniq’ [‘-udc’ [‘-f N’] [‘-s N’]] [INPUTFILE [OUTPUTFILE]]
 
@@ -19472,7 +19451,7 @@ is as follows:
 
 ‘-f N’
      Skip N fields before comparing lines.  The definition of fields is
-     similar to ‘awk’’s default: nonwhitespace characters separated by
+     similar to ‘awk’'s default: nonwhitespace characters separated by
      runs of spaces and/or TABs.
 
 ‘-s N’
@@ -19614,7 +19593,7 @@ to ‘$0’, so that subsequent lines of text have 
something to be compared
 to.
 
    The second rule does the work.  The variable ‘equal’ is one or zero,
-depending upon the results of ‘are_equal()’’s comparison.  If ‘uniq’ 
is
+depending upon the results of ‘are_equal()’'s comparison.  If ‘uniq’ is
 counting repeated lines, and the lines are equal, then it increments the
 ‘count’ variable.  Otherwise, it prints the line and resets ‘count’,
 because the two lines are not equal.
@@ -19702,7 +19681,7 @@ punctuation and control characters.
 ASCII is a pure subset).  Unicode provides tens of thousands of unique
 characters (called “code points”) to cover most existing human languages
 (living and dead) and a number of nonhuman ones as well (such as Klingon
-and J.R.R. Tolkien’s elvish languages).
+and J.R.R. Tolkien's elvish languages).
 
    To save space in files, Unicode code points are “encoded”, where each
 character takes from one to four bytes in the file.  UTF-8 is possibly
@@ -19730,7 +19709,7 @@ Loadable extensions are presented in full detail in 
*note Dynamic
 Extensions::.  They provide a way to add functions to ‘gawk’ which can
 call out to other facilities written in C or C++.
 
-   For the purposes of ‘wc.awk’, it’s enough to know that the extension
+   For the purposes of ‘wc.awk’, it's enough to know that the extension
 is loaded with the ‘@load’ directive, and the additional function we
 will use is called ‘mbs_length()’.  This function returns the number of
 bytes in a string, not the number of characters.
@@ -19755,7 +19734,7 @@ follows:
 
 ‘-c’
      Count only bytes.  Once upon a time, the ‘c’ in this option stood
-     for “characters.” But, as explained earlier, bytes and character
+     for "characters."  But, as explained earlier, bytes and character
      are no longer synonymous with each other.
 
 ‘-l’
@@ -19765,7 +19744,7 @@ follows:
      Count only characters.
 
 ‘-w’
-     Count only words.  A “word” is a contiguous sequence of
+     Count only words.  A "word" is a contiguous sequence of
      nonwhitespace characters, separated by spaces and/or TABs.
      Luckily, this is the normal way ‘awk’ separates fields in its input
      data.
@@ -19837,7 +19816,7 @@ name in ‘fname’:
          fname = FILENAME
      }
 
-   The ‘endfile()’ function adds the current file’s numbers to the
+   The ‘endfile()’ function adds the current file's numbers to the
 running totals of lines, words, and characters.  It then prints out
 those numbers for the file that was just read.  It relies on
 ‘beginfile()’ to reset the numbers for the following data file:
@@ -19866,7 +19845,7 @@ is needed because the newline character separating 
records (the value of
 length.  Similarly, it adds the length of the record in bytes, plus one,
 to ‘bytes’.  Next, ‘lines’ is incremented for each line read, and
 ‘words’ is incremented by the value of ‘NF’, which is the number of
-“words” on this line:
+"words" on this line:
 
      # do per line
      {
@@ -19898,7 +19877,7 @@ File: gawk.info,  Node: Miscellaneous Programs,  Next: 
Programs Summary,  Prev:
 11.3 A Grab Bag of ‘awk’ Programs
 =================================
 
-This minor node is a large “grab bag” of miscellaneous programs.  We
+This minor node is a large "grab bag" of miscellaneous programs.  We
 hope you find them both interesting and enjoyable.
 
 * Menu:
@@ -19927,7 +19906,7 @@ File: gawk.info,  Node: Dupword Program,  Next: Alarm 
Program,  Up: Miscellaneou
 
 A common error when writing large amounts of prose is to accidentally
 duplicate words.  Typically you will see this in text as something like
-“the the program does the following...” When the text is online, often
+"the the program does the following..." When the text is online, often
 the duplicated words occur at the end of one line and at the beginning
 of another, making them very difficult to spot.
 
@@ -19937,11 +19916,11 @@ last word on a line (in the variable ‘prev’) for 
comparison with the
 first word on the next line.
 
    The first two statements make sure that the line is all lowercase, so
-that, for example, “The” and “the” compare equal to each other.  The
+that, for example, "The" and "the" compare equal to each other.  The
 next statement replaces nonalphanumeric and nonwhitespace characters
 with spaces, so that punctuation does not affect the comparison either.
 The characters are replaced with spaces so that formatting controls
-don’t create nonsense words (e.g., the Texinfo ‘@code{NF}’ becomes
+don't create nonsense words (e.g., the Texinfo ‘@code{NF}’ becomes
 ‘codeNF’ if punctuation is simply deleted).  The record is then resplit
 into fields, yielding just the actual words on the line, and ensuring
 that there are no empty fields.
@@ -19974,11 +19953,11 @@ File: gawk.info,  Node: Alarm Program,  Next: 
Translate Program,  Prev: Dupword
 -----------------------------
 
      Nothing cures insomnia like a ringing alarm clock.
-                          — _Arnold Robbins_
+                          -- _Arnold Robbins_
      Sleep is for web developers.
-                          — _Erik Quanstrom_
+                          -- _Erik Quanstrom_
 
-   The following program is a simple “alarm clock” program.  You give it
+   The following program is a simple "alarm clock" program.  You give it
 a time of day and an optional message.  At the specified time, it prints
 the message on the standard output.  In addition, you can give it the
 number of times to repeat the message as well as a delay between
@@ -19990,7 +19969,7 @@ Getlocaltime Function::.
    All the work is done in the ‘BEGIN’ rule.  The first part is argument
 checking and setting of defaults: the delay, the count, and the message
 to print.  If the user supplied a message without the ASCII BEL
-character (known as the “alert” character, ‘"\a"’), then it is added to
+character (known as the "alert" character, ‘"\a"’), then it is added to
 the message.  (On many systems, printing the ASCII BEL generates an
 audible alert.  Thus, when the alarm goes off, the system calls
 attention to itself in case the user is not looking at the computer.)
@@ -20116,9 +20095,9 @@ processing:
 the first character in the first list is replaced with the first
 character in the second list, the second character in the first list is
 replaced with the second character in the second list, and so on.  If
-there are more characters in the “from” list than in the “to” list, the
-last character of the “to” list is used for the remaining characters in
-the “from” list.
+there are more characters in the "from" list than in the "to" list, the
+last character of the "to" list is used for the remaining characters in
+the "from" list.
 
    Once upon a time, a user proposed adding a transliteration function
 to ‘gawk’.  The following program was written to prove that character
@@ -20142,7 +20121,7 @@ functions.  The first, ‘stranslate()’, takes three 
arguments:
      The string on which to do the translation
 
    Associative arrays make the translation part fairly easy.  ‘t_ar’
-holds the “to” characters, indexed by the “from” characters.  Then a
+holds the "to" characters, indexed by the "from" characters.  Then a
 simple loop goes through ‘from’, one character at a time.  For each
 character in ‘from’, if the character appears in ‘target’, it is
 replaced with the corresponding ‘to’ character.
@@ -20214,7 +20193,7 @@ alone.
 
    An obvious improvement to this program would be to set up the ‘t_ar’
 array only once, in a ‘BEGIN’ rule.  However, this assumes that the
-“from” and “to” lists will never change throughout the lifetime of the
+"from" and "to" lists will never change throughout the lifetime of the
 program.
 
    Another obvious improvement is to enable the use of ranges, such as
@@ -20234,13 +20213,13 @@ File: gawk.info,  Node: Labels Program,  Next: Word 
Sorting,  Prev: Translate Pr
 11.3.4 Printing Mailing Labels
 ------------------------------
 
-Here is a “real-world”(1) program.  This script reads lists of names and
+Here is a "real-world"(1) program.  This script reads lists of names and
 addresses and generates mailing labels.  Each page of labels has 20
 labels on it, two across and 10 down.  The addresses are guaranteed to
 be no more than five lines of data.  Each address is separated from the
 next by a blank line.
 
-   The basic idea is to read 20 labels’ worth of data.  Each line of
+   The basic idea is to read 20 labels' worth of data.  Each line of
 each label is stored in the ‘line’ array.  The single rule takes care of
 filling the ‘line’ array and printing the page when 20 labels have been
 read.
@@ -20331,8 +20310,8 @@ not have been an even multiple of 20 labels in the data:
 
    ---------- Footnotes ----------
 
-   (1) “Real world” is defined as “a program actually used to get
-something done.”
+   (1) "Real world" is defined as "a program actually used to get
+something done."
 
 
 File: gawk.info,  Node: Word Sorting,  Next: History Sorting,  Prev: Labels 
Program,  Up: Miscellaneous Programs
@@ -20361,8 +20340,8 @@ useful format.
              printf "%s\t%d\n", word, freq[word]
      }
 
-   The program relies on ‘awk’’s default field-splitting mechanism to
-break each line up into “words” and uses an associative array named
+   The program relies on ‘awk’'s default field-splitting mechanism to
+break each line up into "words" and uses an associative array named
 ‘freq’, indexed by each word, to count the number of times the word
 occurs.  In the ‘END’ rule, it prints the counts.
 
@@ -20370,17 +20349,17 @@ occurs.  In the ‘END’ rule, it prints the counts.
 on real text files:
 
    • The ‘awk’ language considers upper- and lowercase characters to be
-     distinct.  Therefore, “bartender” and “Bartender” are not treated
+     distinct.  Therefore, "bartender" and "Bartender" are not treated
      as the same word.  This is undesirable, because words are
      capitalized if they begin sentences in normal text, and a frequency
      analyzer should not be sensitive to capitalization.
 
    • Words are detected using the ‘awk’ convention that fields are
      separated just by whitespace.  Other characters in the input
-     (except newlines) don’t have any special meaning to ‘awk’.  This
+     (except newlines) don't have any special meaning to ‘awk’.  This
      means that punctuation characters count as part of words.
 
-   • The output does not come out in any useful order.  You’re more
+   • The output does not come out in any useful order.  You're more
      likely to be interested in which words occur most frequently or in
      having an alphabetized table of how frequently each word occurs.
 
@@ -20418,7 +20397,7 @@ produces a table of the words appearing in ‘file1’ 
in order of
 decreasing frequency.
 
    The ‘awk’ program suitably massages the data and produces a word
-frequency table, which is not ordered.  The ‘awk’ script’s output is
+frequency table, which is not ordered.  The ‘awk’ script's output is
 then sorted by the ‘sort’ utility and printed on the screen.
 
    The options given to ‘sort’ specify a sort that uses the second field
@@ -20497,7 +20476,7 @@ too obscure:
 
      awk '! seen[$0]++'
 
-This version uses the expression as a pattern, relying on ‘awk’’s
+This version uses the expression as a pattern, relying on ‘awk’'s
 default action of printing the line when the pattern is true.
 
 
@@ -20513,7 +20492,7 @@ hand.  Here we present a program that can extract parts 
of a Texinfo
 input file into separate files.
 
    This Info file is written in Texinfo
-(https://www.gnu.org/software/texinfo/), the GNU Project’s document
+(https://www.gnu.org/software/texinfo/), the GNU Project's document
 formatting language.  A single Texinfo source file can be used to
 produce both printed documentation, with TeX, and online documentation.
 (The Texinfo language is described fully, starting with *note Texinfo:
@@ -20522,7 +20501,7 @@ produce both printed documentation, with TeX, and 
online documentation.
    For our purposes, it is enough to know three things about Texinfo
 input files:
 
-   • The “at” symbol (‘@’) is special in Texinfo, much as the 
backslash
+   • The "at" symbol (‘@’) is special in Texinfo, much as the backslash
      (‘\’) is in C or ‘awk’.  Literal ‘@’ symbols are represented 
in
      Texinfo source files as ‘@@’.
 
@@ -20532,7 +20511,7 @@ input files:
 
    • Lines containing ‘@group’ and ‘@end group’ commands bracket 
example
      text that should not be split across a page boundary.
-     (Unfortunately, TeX isn’t always smart enough to do things exactly
+     (Unfortunately, TeX isn't always smart enough to do things exactly
      right, so we have to give it some help.)
 
    The following program, ‘extract.awk’, reads through a Texinfo source
@@ -20573,7 +20552,7 @@ looks something like this:
      ...
 
    ‘extract.awk’ begins by setting ‘IGNORECASE’ to one, so that mixed
-upper- and lowercase letters in the directives won’t matter.
+upper- and lowercase letters in the directives won't matter.
 
    The first rule handles calling ‘system()’, checking that a command is
 given (‘NF’ is at least three) and also checking that the command exits
@@ -20611,7 +20590,7 @@ simple.
 
    The ‘for’ loop does the work.  It reads lines using ‘getline’ (*note
 Getline::).  For an unexpected end-of-file, it calls the
-‘unexpected_eof()’ function.  If the line is an “endfile” line, then it
+‘unexpected_eof()’ function.  If the line is an "endfile" line, then it
 breaks out of the loop.  If the line is an ‘@group’ or ‘@end group’
 line, then it ignores it and goes on to the next line.  Similarly,
 comments within examples are also ignored.
@@ -20717,7 +20696,7 @@ middle of a pipeline:
 
    Here, ‘s/old/new/g’ tells ‘sed’ to look for the regexp ‘old’ on 
each
 input line and globally replace it with the text ‘new’ (i.e., all the
-occurrences on a line).  This is similar to ‘awk’’s ‘gsub()’ function
+occurrences on a line).  This is similar to ‘awk’'s ‘gsub()’ function
 (*note String Functions::).
 
    The following program, ‘awksed.awk’, accepts at least two
@@ -20754,7 +20733,7 @@ process.  If none are provided, the standard input is 
used:
              print
      }
 
-   The program relies on ‘gawk’’s ability to have ‘RS’ be a regexp, 
as
+   The program relies on ‘gawk’'s ability to have ‘RS’ be a regexp, as
 well as on the setting of ‘RT’ to the actual text that terminates the
 record (*note Records::).
 
@@ -20765,7 +20744,7 @@ to the replacement text, a simple ‘print’ statement 
outputs the text we
 want to keep, followed by the replacement text.
 
    There is one wrinkle to this scheme, which is what to do if the last
-record doesn’t end with text that matches ‘RS’.  Using a ‘print’
+record doesn't end with text that matches ‘RS’.  Using a ‘print’
 statement unconditionally prints the replacement text, which is not
 correct.  However, if the file did not end in text that matches ‘RS’,
 ‘RT’ is set to the null string.  In this case, we can print ‘$0’ using
@@ -20815,21 +20794,21 @@ to be able to write programs in the following manner:
      }
 
    The following program, ‘igawk.sh’, provides this service.  It
-simulates ‘gawk’’s searching of the ‘AWKPATH’ variable and also 
allows
+simulates ‘gawk’'s searching of the ‘AWKPATH’ variable and also allows
 “nested” includes (i.e., a file that is included with ‘@include’ can
 contain further ‘@include’ statements).  ‘igawk’ makes an effort to 
only
-include files once, so that nested includes don’t accidentally include a
+include files once, so that nested includes don't accidentally include a
 library function twice.
 
    ‘igawk’ should behave just like ‘gawk’ externally.  This means it
-should accept all of ‘gawk’’s command-line arguments, including the
+should accept all of ‘gawk’'s command-line arguments, including the
 ability to have multiple source files specified via ‘-f’ and the ability
 to mix command-line and library source files.
 
    The program is written using the POSIX Shell (‘sh’) command
 language.(1)  It works as follows:
 
-  1. Loop through the arguments, saving anything that doesn’t represent
+  1. Loop through the arguments, saving anything that doesn't represent
      ‘awk’ source code for later, when the expanded program is run.
 
   2. For any arguments that do represent ‘awk’ text, put the arguments
@@ -20839,12 +20818,12 @@ language.(1)  It works as follows:
           just appended directly.
 
        b. Source file names, provided with ‘-f’.  We use a neat trick
-          and append ‘@include FILENAME’ to the shell variable’s
+          and append ‘@include FILENAME’ to the shell variable's
           contents.  Because the file-inclusion program works the way
           ‘gawk’ does, this gets the text of the file included in the
           program at the correct point.
 
-  3. Run an ‘awk’ program (naturally) over the shell variable’s contents
+  3. Run an ‘awk’ program (naturally) over the shell variable's contents
      to expand ‘@include’ statements.  The expanded program is placed in
      a second shell variable.
 
@@ -20854,7 +20833,7 @@ language.(1)  It works as follows:
 
    This program uses shell variables extensively: for storing
 command-line arguments and the text of the ‘awk’ program that will
-expand the user’s program, for the user’s original program, and for the
+expand the user's program, for the user's original program, and for the
 expanded program.  Doing so removes some potential problems that might
 arise were we to use temporary files instead, at the cost of making the
 script somewhat more complicated.
@@ -20867,13 +20846,13 @@ are several cases of interest:
 
 ‘--’
      This ends the arguments to ‘igawk’.  Anything else should be passed
-     on to the user’s ‘awk’ program without being evaluated.
+     on to the user's ‘awk’ program without being evaluated.
 
 ‘-W’
      This indicates that the next option is specific to ‘gawk’.  To make
      argument processing easier, the ‘-W’ is appended to the front of
      the remaining arguments and the loop continues.  (This is an ‘sh’
-     programming trick.  Don’t worry about it if you are not familiar
+     programming trick.  Don't worry about it if you are not familiar
      with ‘sh’.)
 
 ‘-v’, ‘-F’
@@ -20983,17 +20962,17 @@ the original ‘awk’ program.
 
    The ‘awk’ program to process ‘@include’ directives is stored in the
 shell variable ‘expand_prog’.  Doing this keeps the shell script
-readable.  The ‘awk’ program reads through the user’s program, one line
+readable.  The ‘awk’ program reads through the user's program, one line
 at a time, using ‘getline’ (*note Getline::).  The input file names and
 ‘@include’ statements are managed using a stack.  As each ‘@include’ is
-encountered, the current file name is “pushed” onto the stack and the
+encountered, the current file name is "pushed" onto the stack and the
 file named in the ‘@include’ directive becomes the current file name.
-As each file is finished, the stack is “popped,” and the previous input
+As each file is finished, the stack is "popped," and the previous input
 file becomes the current input file again.  The process is started by
 making the original file the first one on the stack.
 
    The ‘pathto()’ function does the work of finding the full path to a
-file.  It simulates ‘gawk’’s behavior when searching the ‘AWKPATH’
+file.  It simulates ‘gawk’'s behavior when searching the ‘AWKPATH’
 environment variable (*note AWKPATH Variable::).  If a file name has a
 ‘/’ in it, no path search is done.  Similarly, if the file name is
 ‘"-"’, then that string is used as-is.  Otherwise, the file name is
@@ -21098,12 +21077,12 @@ command line.  Because the result is used in a 
variable assignment, it
 is saved as a single string, even if the results contain whitespace.
 
    The expanded program is saved in the variable ‘processed_program’.
-It’s done in these steps:
+It's done in these steps:
 
   1. Run ‘gawk’ with the ‘@include’-processing program (the value of 
the
      ‘expand_prog’ shell variable) reading standard input.
 
-  2. Standard input is the contents of the user’s program, from the
+  2. Standard input is the contents of the user's program, from the
      shell variable ‘program’.  Feed its contents to ‘gawk’ via a here
      document.
 
@@ -21115,7 +21094,7 @@ the original options and command-line arguments that 
the user supplied:
 
      eval gawk $opts -- '"$processed_program"' '"$@"'
 
-   The ‘eval’ command is a shell construct that reruns the shell’s
+   The ‘eval’ command is a shell construct that reruns the shell's
 parsing process.  This keeps things properly quoted.
 
    This version of ‘igawk’ represents the fifth version of this program.
@@ -21126,7 +21105,7 @@ There are four key simplifications that make the 
program work better:
      ‘@include’ processing can be done once.
 
    • Not trying to save the line read with ‘getline’ in the 
‘pathto()’
-     function when testing for the file’s accessibility for use with the
+     function when testing for the file's accessibility for use with the
      main program simplifies things considerably.
 
    • Using a ‘getline’ loop in the ‘BEGIN’ rule does it all in one
@@ -21137,7 +21116,7 @@ There are four key simplifications that make the 
program work better:
      it in a shell variable avoids some potential security problems.
      This has the disadvantage that the script relies upon more features
      of the ‘sh’ language, making it harder to follow for those who
-     aren’t familiar with ‘sh’.
+     aren't familiar with ‘sh’.
 
    Also, this program illustrates that it is often worthwhile to combine
 ‘sh’ and ‘awk’ programming together.  You can usually accomplish quite 
a
@@ -21150,8 +21129,8 @@ features to a program; they can often be layered on 
top.(3)
 
    Before ‘gawk’ acquired its built-in ‘@include’ mechanism, 
‘igawk’ and
 its manual page were installed as part of the regular ‘gawk’
-installation (‘make install’).  This is no longer done, because it’s no
-longer necessary.  But we’ve kept the program in this Info file for its
+installation (‘make install’).  This is no longer done, because it's no
+longer necessary.  But we've kept the program in this Info file for its
 educational value.
 
    ---------- Footnotes ----------
@@ -21175,9 +21154,9 @@ File: gawk.info,  Node: Anagram Program,  Next: 
Signature Program,  Prev: Igawk
 An interesting programming challenge is to search for “anagrams” in a
 word list (such as ‘/usr/share/dict/words’ on many GNU/Linux systems).
 One word is an anagram of another if both words contain the same letters
-(e.g., “babbling” and “blabbing”).
+(e.g., "babbling" and "blabbing").
 
-   Column 2, Problem C, of Jon Bentley’s ‘Programming Pearls’, Second
+   Column 2, Problem C, of Jon Bentley's ‘Programming Pearls’, Second
 Edition, presents an elegant algorithm.  The idea is to give words that
 are anagrams a common signature, sort all the words together by their
 signatures, and then print them.  Dr. Bentley observes that taking the
@@ -21281,7 +21260,7 @@ supplies the following copyright terms:
      O+X*(o*(o+O)+O),+x+O+X*o,x*(x-o),(o+X+x)*o*o-(x-O-O),O+(X-x)*(X+O),x-O}'
 
    We leave it to you to determine what the program does.  (If you are
-truly desperate to understand it, see Chris Johansen’s explanation,
+truly desperate to understand it, see Chris Johansen's explanation,
 which is embedded in the Texinfo source file for this Info file.)
 
 
@@ -21297,11 +21276,11 @@ File: gawk.info,  Node: Programs Summary,  Next: 
Programs Exercises,  Prev: Misc
      easier to use.  Otherwise, invoke the program using ‘awk -f ...’.
 
    • Reimplementing standard POSIX programs in ‘awk’ is a pleasant
-     exercise; ‘awk’’s expressive power lets you write such programs in
+     exercise; ‘awk’'s expressive power lets you write such programs in
      relatively few lines of code, yet they are functionally complete
      and usable.
 
-   • One of standard ‘awk’’s weaknesses is working with individual
+   • One of standard ‘awk’'s weaknesses is working with individual
      characters.  The ability to use ‘split()’ with the empty string as
      the separator can considerably simplify such tasks.
 
@@ -21334,22 +21313,22 @@ File: gawk.info,  Node: Programs Exercises,  Prev: 
Programs Summary,  Up: Sample
      way.
 
   4. The ‘split.awk’ program (*note Split Program::) assumes that
-     letters are contiguous in the character set, which isn’t true for
+     letters are contiguous in the character set, which isn't true for
      EBCDIC systems.  Fix this problem.  (Hint: Consider a different way
      to work through the alphabet, without relying on ‘ord()’ and
      ‘chr()’.)
 
   5. In ‘uniq.awk’ (*note Uniq Program::, the logic for choosing which
-     lines to print represents a “state machine”, which is “a device
+     lines to print represents a “state machine”, which is "a device
      which can be in one of a set number of stable conditions depending
      on its previous condition and on the present values of its
-     inputs.”(1) Brian Kernighan suggests that “an alternative approach
+     inputs."(1)  Brian Kernighan suggests that "an alternative approach
      to state machines is to just read the input into an array, then use
-     indexing.  It’s almost always easier code, and for most inputs
-     where you would use this, just as fast.” Rewrite the logic to
+     indexing.  It's almost always easier code, and for most inputs
+     where you would use this, just as fast."  Rewrite the logic to
      follow this suggestion.
 
-  6. Why can’t the ‘wc.awk’ program (*note Wc Program::) just use the
+  6. Why can't the ‘wc.awk’ program (*note Wc Program::) just use the
      value of ‘FNR’ in ‘endfile()’?  Hint: Examine the code in *note
      Filetrans Function::.
 
@@ -21379,7 +21358,7 @@ File: gawk.info,  Node: Programs Exercises,  Prev: 
Programs Summary,  Up: Sample
 
   11. In *note Igawk Program::, we mentioned that not trying to save the
      line read with ‘getline’ in the ‘pathto()’ function when testing
-     for the file’s accessibility for use with the main program
+     for the file's accessibility for use with the main program
      simplifies things considerably.  What problem does this engender
      though?
 
@@ -21421,20 +21400,20 @@ File: gawk.info,  Node: Advanced Features,  Next: 
Internationalization,  Prev: S
 
      Write documentation as if whoever reads it is a violent psychopath
      who knows where you live.
-            — _Steve English, as quoted by Peter Langston_
+            -- _Steve English, as quoted by Peter Langston_
 
-   This major node discusses advanced features in ‘gawk’.  It’s a bit of
-a “grab bag” of items that are otherwise unrelated to each other.
+   This major node discusses advanced features in ‘gawk’.  It's a bit of
+a "grab bag" of items that are otherwise unrelated to each other.
 First, we look at a command-line option that allows ‘gawk’ to recognize
 nondecimal numbers in input data, not just in ‘awk’ programs.  Then,
-‘gawk’’s special features for sorting arrays are presented.  Next,
+‘gawk’'s special features for sorting arrays are presented.  Next,
 two-way I/O, discussed briefly in earlier parts of this Info file, is
 described in full detail, along with the basics of TCP/IP networking.
 We then see how ‘gawk’ can “profile” an ‘awk’ program, making it
 possible to tune it for performance.  Next, we present an experimental
 feature that allows you to preserve the values of ‘awk’ variables and
 arrays between runs of ‘gawk’.  Finally, we discuss the philosophy
-behind ‘gawk’’s extension mechanism.
+behind ‘gawk’'s extension mechanism.
 
    Additional advanced features are discussed in separate major nodes of
 their own:
@@ -21443,7 +21422,7 @@ their own:
      your ‘awk’ programs, so that they can speak multiple national
      languages.
 
-   • *note Debugger::, describes ‘gawk’’s built-in command-line 
debugger
+   • *note Debugger::, describes ‘gawk’'s built-in command-line debugger
      for debugging ‘awk’ programs.
 
    • *note Arbitrary Precision Arithmetic::, describes how you can use
@@ -21517,9 +21496,9 @@ File: gawk.info,  Node: Boolean Typed Values,  Next: 
Array Sorting,  Prev: Nonde
 Scalar values in ‘awk’ are either numbers or strings.  ‘gawk’ also
 supports values of type ‘regexp’ (*note Strong Regexp Constants::).
 
-   As described in *note Truth Values::, Boolean values in ‘awk’ don’t
-have a separate type: a value counts as “true” if it is nonzero or
-non-null, and as “false” otherwise.
+   As described in *note Truth Values::, Boolean values in ‘awk’ don't
+have a separate type: a value counts as "true" if it is nonzero or
+non-null, and as "false" otherwise.
 
    When interchanging data with languages that do have a real Boolean
 type, using a standard format such as JSON or XML, the lack of a true
@@ -21527,9 +21506,9 @@ Boolean type in ‘awk’ is problematic.  (See, for 
example, the ‘json’
 extension provided by the ‘gawkextlib’ project
 (https://sourceforge.net/projects/gawkextlib).)
 
-   It’s easy to import Boolean data into ‘awk’, but then the fact that
+   It's easy to import Boolean data into ‘awk’, but then the fact that
 it was originally Boolean is lost.  Exporting data is even harder;
-there’s no way to indicate that a value is really Boolean.
+there's no way to indicate that a value is really Boolean.
 
    To solve this problem, ‘gawk’ provides a function named ‘mkbool()’.
 It takes one argument, which is any ‘awk’ expression, and it returns a
@@ -21548,7 +21527,7 @@ desired.
 
    While it would have been possible to add two new built-in variables
 of Boolean type named ‘TRUE’ and ‘FALSE’, doing so would undoubtedly
-have broken many existing ‘awk’ programs.  Instead, having a 
“generator”
+have broken many existing ‘awk’ programs.  Instead, having a "generator"
 function that creates Boolean values gives flexibility, without breaking
 as much existing code.
 
@@ -21732,7 +21711,7 @@ specific field position and can be used for this 
purpose:
          }
      }
 
-   The first field in each entry of the password file is the user’s
+   The first field in each entry of the password file is the user's
 login name, and the fields are separated by colons.  Each record defines
 a subarray, with each field as an element in the subarray.  Running the
 program produces the following output:
@@ -21787,7 +21766,7 @@ traversal, and the sky is really the limit when it 
comes to designing
 such a function.
 
    When string comparisons are made during a sort, either for element
-values where one or both aren’t numbers, or for element indices handled
+values where one or both aren't numbers, or for element indices handled
 as strings, the value of ‘IGNORECASE’ (*note Built-in Variables::)
 controls whether the comparisons treat corresponding upper- and
 lowercase letters as equivalent or distinct.
@@ -21818,7 +21797,7 @@ File: gawk.info,  Node: Array Sorting Functions,  Prev: 
Controlling Array Traver
 
 In most ‘awk’ implementations, sorting an array requires writing a
 ‘sort()’ function.  This can be educational for exploring different
-sorting algorithms, but usually that’s not the point of the program.
+sorting algorithms, but usually that's not the point of the program.
 ‘gawk’ provides the built-in ‘asort()’ and ‘asorti()’ functions 
(*note
 String Functions::) for sorting arrays.  For example:
 
@@ -21829,13 +21808,13 @@ String Functions::) for sorting arrays.  For example:
 
    After the call to ‘asort()’, the array ‘data’ is indexed from 1 to
 some number N, the total number of elements in ‘data’.  (This count is
-‘asort()’’s return value.)  ‘data[1]’ <= ‘data[2]’ <= 
‘data[3]’, and so
+‘asort()’'s return value.)  ‘data[1]’ <= ‘data[2]’ <= 
‘data[3]’, and so
 on.  The default comparison is based on the type of the elements (*note
 Typing and Comparison::).  All numeric values come before all string
 values, which in turn come before all subarrays.
 
-   An important side effect of calling ‘asort()’ is that _the array’s
-original indices are irrevocably lost_.  As this isn’t always desirable,
+   An important side effect of calling ‘asort()’ is that _the array's
+original indices are irrevocably lost_.  As this isn't always desirable,
 ‘asort()’ accepts a second argument:
 
      POPULATE THE ARRAY source
@@ -21847,7 +21826,7 @@ original indices are irrevocably lost_.  As this 
isn’t always desirable,
 and then sorts ‘dest’, destroying its indices.  However, the ‘source’
 array is not affected.
 
-   Often, what’s needed is to sort on the values of the _indices_
+   Often, what's needed is to sort on the values of the _indices_
 instead of the values of the elements.  To do that, use the ‘asorti()’
 function.  The interface and behavior are identical to that of
 ‘asort()’, except that the index values are used for sorting and become
@@ -21887,20 +21866,20 @@ order and uses them to fill in the result array, 
whereas ‘asorti()’
 takes the _indices_ in their final order and uses them to fill in the
 result array.
 
-     NOTE: Copying array indices and elements isn’t expensive in terms
+     NOTE: Copying array indices and elements isn't expensive in terms
      of memory.  Internally, ‘gawk’ maintains “reference counts” to
      data.  For example, when ‘asort()’ copies the first array to the
-     second one, there is only one copy of the original array elements’
+     second one, there is only one copy of the original array elements'
      data, even though both arrays use the values.
 
    You may use the same array for both the first and second arguments to
 ‘asort()’ and ‘asorti()’.  Doing so only makes sense if you are also
-supplying the third argument, since ‘awk’ doesn’t provide a way to pass
+supplying the third argument, since ‘awk’ doesn't provide a way to pass
 that third argument without also passing the first and second ones.
 
    Because ‘IGNORECASE’ affects string comparisons, the value of
 ‘IGNORECASE’ also affects sorting for both ‘asort()’ and 
‘asorti()’.
-Note also that the locale’s sorting order does _not_ come into play;
+Note also that the locale's sorting order does _not_ come into play;
 comparisons are based on character values only.(1)
 
    The following example demonstrates the use of a comparison function
@@ -21949,7 +21928,7 @@ both values to lowercase in order to compare them 
ignoring case.
      ⊣ A a B b c C D d e E F f g G H h i I J j k K l L M m
      ⊣ n N O o p P Q q r R S s t T u U V v w W X x y Y z Z
 
-     NOTE: “Under the hood,” ‘gawk’ uses the C library ‘qsort()’
+     NOTE: "Under the hood," ‘gawk’ uses the C library ‘qsort()’
      function to manage the sorting.  ‘qsort()’ can call itself
      recursively.  This means that when you write a comparison function,
      you should be careful to avoid the use of global variables and
@@ -22005,22 +21984,22 @@ in parallel with ‘gawk’.  The two-way connection 
is created using the
    The first time an I/O operation is executed using the ‘|&’ operator,
 ‘gawk’ creates a two-way pipeline to a child process that runs the other
 program.  Output created with ‘print’ or ‘printf’ is written to the
-program’s standard input, and output from the program’s standard output
+program's standard input, and output from the program's standard output
 can be read by the ‘gawk’ program using ‘getline’.  As is the case with
 processes started by ‘|’, the subprogram can be any program, or pipeline
 of programs, that can be started by the shell.
 
    There are some cautionary items to be aware of:
 
-   • As the code inside ‘gawk’ currently stands, the coprocess’s
-     standard error goes to the same place that the parent ‘gawk’’s
-     standard error goes.  It is not possible to read the child’s
+   • As the code inside ‘gawk’ currently stands, the coprocess's
+     standard error goes to the same place that the parent ‘gawk’'s
+     standard error goes.  It is not possible to read the child's
      standard error separately.
 
    • I/O buffering may be a problem.  ‘gawk’ automatically flushes all
      output down the pipe to the coprocess.  However, if the coprocess
      does not flush its output, ‘gawk’ may hang when doing a ‘getline’
-     in order to read the coprocess’s results.  This could lead to a
+     in order to read the coprocess's results.  This could lead to a
      situation known as “deadlock”, where each process is waiting for
      the other one to do something.
 
@@ -22061,7 +22040,7 @@ the coprocess and exits.
 
    As a side note, the assignment ‘LC_ALL=C’ in the ‘sort’ command
 ensures traditional Unix (ASCII) sorting from ‘sort’.  This is not
-strictly necessary here, but it’s good to know how to do this.
+strictly necessary here, but it's good to know how to do this.
 
    Be careful when closing the ‘"from"’ end of a two-way pipe; in this
 case ‘gawk’ waits for the child process to exit, which may cause your
@@ -22088,7 +22067,7 @@ Auto-set::), like so:
      print ... |& command           # start two-way pipe
      ...
 
-If your system does not have ptys, or if all the system’s ptys are in
+If your system does not have ptys, or if all the system's ptys are in
 use, ‘gawk’ automatically falls back to using regular pipes.
 
    Using ptys usually avoids the buffer deadlock issues described
@@ -22104,9 +22083,9 @@ driver and not passed through.
 
      CAUTION: Finally, coprocesses open up the possibility of “deadlock”
      between ‘gawk’ and the program running in the coprocess.  This can
-     occur if you send “too much” data to the coprocess before reading
+     occur if you send "too much" data to the coprocess before reading
      any back; each process is blocked writing data with no one
-     available to read what they’ve already written.  There is no
+     available to read what they've already written.  There is no
      workaround for deadlock; careful programming and knowledge of the
      behavior of the coprocess are required.
 
@@ -22114,7 +22093,7 @@ driver and not passed through.
 ptys can help deal with buffering deadlocks.
 
    Suppose ‘gawk’ were unable to add numbers.  You could use a coprocess
-to do it.  Here’s an exceedingly simple program written for that
+to do it.  Here's an exceedingly simple program written for that
 purpose:
 
      $ cat add.c
@@ -22167,10 +22146,10 @@ File: gawk.info,  Node: TCP/IP Networking,  Next: 
Profiling,  Prev: Two-way I/O,
 
      ‘EMRED’:
          A host is a host from coast to coast,
-         and nobody talks to a host that’s close,
-         unless the host that isn’t close
+         and nobody talks to a host that's close,
+         unless the host that isn't close
          is busy, hung, or dead.
-                  — _Mike O’Brien (aka Mr. Protocol)_
+                 -- _Mike O'Brien (aka Mr. Protocol)_
 
    In addition to being able to open a two-way pipeline to a coprocess
 on the same system (*note Two-way I/O::), it is possible to make a
@@ -22211,7 +22190,7 @@ REMOTE-HOST
 
 REMOTE-PORT
      The TCP or UDP port number to use on the given REMOTE-HOST.  Again,
-     use ‘0’ if you don’t care, or else a well-known service name.
+     use ‘0’ if you don't care, or else a well-known service name.
 
      NOTE: Failure in opening a two-way socket will result in a nonfatal
      error being returned to the calling code.  The value of ‘ERRNO’
@@ -22226,7 +22205,7 @@ REMOTE-PORT
          close(Service)
      }
 
-   This program reads the current date and time from the local system’s
+   This program reads the current date and time from the local system's
 TCP ‘daytime’ server.  It then prints the results and closes the
 connection.
 
@@ -22352,26 +22331,26 @@ profiler on this program and data (this example also 
illustrates that
 output.  They are as follows:
 
    • The program is printed in the order ‘BEGIN’ rules, ‘BEGINFILE’
-     rules, pattern–action rules, ‘ENDFILE’ rules, ‘END’ rules, and
+     rules, pattern-action rules, ‘ENDFILE’ rules, ‘END’ rules, and
      functions, listed alphabetically.  Multiple ‘BEGIN’ and ‘END’ 
rules
      retain their separate identities, as do multiple ‘BEGINFILE’ and
      ‘ENDFILE’ rules.
 
-   • Pattern–action rules have two counts.  The first count, to the left
-     of the rule, shows how many times the rule’s pattern was _tested_.
-     The second count, to the right of the rule’s opening left brace in
-     a comment, shows how many times the rule’s action was _executed_.
-     The difference between the two indicates how many times the rule’s
+   • Pattern-action rules have two counts.  The first count, to the left
+     of the rule, shows how many times the rule's pattern was _tested_.
+     The second count, to the right of the rule's opening left brace in
+     a comment, shows how many times the rule's action was _executed_.
+     The difference between the two indicates how many times the rule's
      pattern evaluated to false.
 
    • Similarly, the count for an ‘if’-‘else’ statement shows how many
      times the condition was tested.  To the right of the opening left
-     brace for the ‘if’’s body is a count showing how many times the
+     brace for the ‘if’'s body is a count showing how many times the
      condition was true.  The count for the ‘else’ indicates how many
      times the test failed.
 
    • The count for a loop header (such as ‘for’ or ‘while’) shows how
-     many times the loop test was executed.  (Because of this, you can’t
+     many times the loop test was executed.  (Because of this, you can't
      just look at the count on the first statement in a rule to
      determine how many times the rule was executed.  If the first
      statement is a loop, the count is misleading.)
@@ -22381,7 +22360,7 @@ output.  They are as follows:
      counts next to the statements in the body show how many times those
      statements were executed.
 
-   • The layout uses “K&R” style with TABs.  Braces are used everywhere,
+   • The layout uses "K&R" style with TABs.  Braces are used everywhere,
      even when the body of an ‘if’, ‘else’, or loop is only a single
      statement.
 
@@ -22394,11 +22373,11 @@ output.  They are as follows:
 
    • Parentheses are used around the arguments to ‘print’ and 
‘printf’
      only when the ‘print’ or ‘printf’ statement is followed by a
-     redirection.  Similarly, if the target of a redirection isn’t a
+     redirection.  Similarly, if the target of a redirection isn't a
      scalar, it gets parenthesized.
 
    • ‘gawk’ supplies leading comments in front of the ‘BEGIN’ and 
‘END’
-     rules, the ‘BEGINFILE’ and ‘ENDFILE’ rules, the pattern–action
+     rules, the ‘BEGINFILE’ and ‘ENDFILE’ rules, the pattern-action
      rules, and the functions.
 
    • Functions are listed alphabetically.  All functions in the ‘awk’
@@ -22409,7 +22388,7 @@ output.  They are as follows:
 
    The profiled version of your program may not look exactly like what
 you typed when you wrote it.  This is because ‘gawk’ creates the
-profiled version by “pretty-printing” its internal representation of the
+profiled version by "pretty-printing" its internal representation of the
 program.  The advantage to this is that ‘gawk’ can produce a standard
 representation.  Also, things such as:
 
@@ -22461,14 +22440,14 @@ produces the profile and the function call trace and 
then exits.
 
    When ‘gawk’ runs on MS-Windows systems, it uses the ‘INT’ and 
‘QUIT’
 signals for producing the profile, and in the case of the ‘INT’ signal,
-‘gawk’ exits.  This is because these systems don’t support the ‘kill’
+‘gawk’ exits.  This is because these systems don't support the ‘kill’
 command, so the only signals you can deliver to a program are those
 generated by the keyboard.  The ‘INT’ signal is generated by the
 ‘Ctrl-c’ or ‘Ctrl-BREAK’ key, while the ‘QUIT’ signal is generated 
by
 the ‘Ctrl-\’ key.
 
    Finally, ‘gawk’ also accepts another option, ‘--pretty-print’.  When
-called this way, ‘gawk’ “pretty-prints” the program into 
‘awkprof.out’,
+called this way, ‘gawk’ "pretty-prints" the program into ‘awkprof.out’,
 without any execution counts.
 
      NOTE: Once upon a time, the ‘--pretty-print’ option would also run
@@ -22480,11 +22459,11 @@ preserves the original comments that were in the 
program, although their
 placement may not correspond exactly to their original locations in the
 source code.  However, no comments should be lost.  Also, ‘gawk’ does
 the best it can to preserve the distinction between comments at the end
-of a statement and comments on lines by themselves.  This isn’t always
+of a statement and comments on lines by themselves.  This isn't always
 perfect, though.
 
    However, as a deliberate design decision, profiling output _omits_
-the original program’s comments.  This allows you to focus on the
+the original program's comments.  This allows you to focus on the
 execution count data and helps you avoid the temptation to use the
 profiler for pretty-printing.
 
@@ -22495,7 +22474,7 @@ result as the final version of your program.
 
    Because the internal representation of your program is formatted to
 recreate an ‘awk’ program, profiling and pretty-printing automatically
-disable ‘gawk’’s default optimizations.
+disable ‘gawk’'s default optimizations.
 
    Profiling and pretty-printing also preserve the original format of
 numeric constants; if you used an octal or hexadecimal value in your
@@ -22508,10 +22487,10 @@ File: gawk.info,  Node: Persistent Memory,  Next: 
Extension Philosophy,  Prev: P
 =================================
 
 Starting with version 5.2, ‘gawk’ supports “persistent memory”.  This
-experimental feature stores the values of all of ‘gawk’’s variables,
+experimental feature stores the values of all of ‘gawk’'s variables,
 arrays and user-defined functions in a persistent heap, which resides in
 a file in the filesystem.  When persistent memory is not in use (the
-normal case), ‘gawk’’s data resides in ephemeral system memory.
+normal case), ‘gawk’'s data resides in ephemeral system memory.
 
    Persistent memory is enabled on certain 64-bit systems supporting the
 ‘mmap()’ and ‘munmap()’ system calls.  ‘gawk’ must be compiled as a
@@ -22528,7 +22507,7 @@ so:
      ⊣ Copyright (C) 1989, 1991-2023 Free Software Foundation.
      ...
 
-If you see the ‘PMA’ with a version indicator, then it’s supported.
+If you see the ‘PMA’ with a version indicator, then it's supported.
 
    As of this writing, persistent memory has only been tested on
 GNU/Linux, Cygwin, Solaris 2.11, Intel architecture macOS systems,
@@ -22567,13 +22546,13 @@ the tests pass, please let the maintainer know.
           3
 
      As shown, in subsequent runs using the same data file, the values
-     of ‘gawk’’s variables are preserved.  However, ‘gawk’’s 
special
+     of ‘gawk’'s variables are preserved.  However, ‘gawk’'s special
      variables, such as ‘NR’, are reset upon each run.  Only the
      variables defined by the program are preserved across runs.
 
    Interestingly, the program that you execute need not be the same from
 run to run; the persistent store only maintains the values of variables,
-arrays, and user-defined functions, not the totality of ‘gawk’’s
+arrays, and user-defined functions, not the totality of ‘gawk’'s
 internal state.  This lets you share data between unrelated programs,
 eliminating the need for scripts to communicate via text files.
 
@@ -22582,11 +22561,11 @@ uses, provides the following advice about the backing 
file:
 
      Regarding backing file size, I recommend making it far larger than
      all of the data that will ever reside in it, assuming that the file
-     system supports sparse files.  The “pay only for what you use”
+     system supports sparse files.  The "pay only for what you use"
      aspect of sparse files ensures that the actual storage resource
-     footprint of the backing file will meet the application’s needs but
+     footprint of the backing file will meet the application's needs but
      will be as small as possible.  If the file system does _not_
-     support sparse files, there’s a dilemma: Making the backing file
+     support sparse files, there's a dilemma: Making the backing file
      too large is wasteful, but making it too small risks memory
      exhaustion, i.e., ‘pma_malloc()’ returns ‘NULL’.  But persistent
      ‘gawk’ should still work even without sparse files.
@@ -22605,7 +22584,7 @@ the different verbosity levels are.
 
    • If you use MPFR mode (the ‘-M’ option) on the first run of a
      program using persistent memory, you _must_ continue to use it on
-     all subsequent runs.  Similarly, if you don’t use ‘-M’ on the first
+     all subsequent runs.  Similarly, if you don't use ‘-M’ on the first
      run, do not use it on any subsequent runs.
 
      Mixing and matching MPFR mode and regular mode with the same
@@ -22613,14 +22592,14 @@ the different verbosity levels are.
      issues a fatal error message.
 
    • The GNU/Linux CIFS filesystem is known to not work well with the
-     PMA allocator.  Don’t use a backing file on a CIFS filesystem.
+     PMA allocator.  Don't use a backing file on a CIFS filesystem.
 
    • If ‘gawk’ is run by the ‘root’ user, then persistent memory is 
not
      allowed.  This is to avoid the possibility of private data
-     “leaking” into the backing file and being recovered later by an
+     "leaking" into the backing file and being recovered later by an
      attacker.
 
-   • Over time, the backing file will be filled with memory “leaked” by
+   • Over time, the backing file will be filled with memory "leaked" by
      ‘gawk’ as it runs.  Most notably this is the memory used to compile
      your program into an internal form before running it, which happens
      each time, but there are other leakages as well.  (For an extreme
@@ -22636,11 +22615,11 @@ Manual’ document, which is included in the 
‘gawk’ distribution.  It is
 worth reading.  *Note General Introduction: (pm-gawk)Top.
 
    Here are additional articles and web links that provide more
-information about persistent memory and why it’s useful in a scripting
+information about persistent memory and why it's useful in a scripting
 language like ‘gawk’.
 
 <https://web.eecs.umich.edu/~tpkelly/pma/>
-     This is the canonical source for Terence Kelly’s Persistent Memory
+     This is the canonical source for Terence Kelly's Persistent Memory
      Allocator (PMA). The latest source code and user manual will always
      be available at this location.  Kelly may be reached directly at
      any of the following email addresses: <tpkelly@acm.org>,
@@ -22678,7 +22657,7 @@ language like ‘gawk’.
      Terence Kelly, ACM ‘Queue’ magazine Vol.  19 No.  4 (July/Aug
      2021), PDF (https://dl.acm.org/doi/pdf/10.1145/3487019.3487353),
      HTML (https://queue.acm.org/detail.cfm?id=3487353).  This paper
-     describes a crash-tolerance feature added to GNU DBM’ (‘gdbm’).
+     describes a crash-tolerance feature added to GNU DBM' (‘gdbm’).
 
    When Terence Kelly published his papers, his collaborators produced a
 prototype integration of PMA with ‘gawk’.  That version used a
@@ -22709,7 +22688,7 @@ As this and subsequent major nodes show, ‘gawk’ has 
a large number of
 extensions over standard ‘awk’ built-in to the program.  These have
 developed over time.  More recently, the focus has moved to using the
 extension mechanism (*note Dynamic Extensions::) for adding features.
-This minor node discusses the “guiding philosophy” behind what should be
+This minor node discusses the "guiding philosophy" behind what should be
 added to the interpreter as a built-in feature versus what should be
 done in extensions.
 
@@ -22732,7 +22711,7 @@ done in extensions.
 the sample extensions demonstrate this.
 
    Loading extensions and library files should not be done
-automatically, because then there’s overhead that most users don’t want
+automatically, because then there's overhead that most users don't want
 or need.
 
 
@@ -22774,7 +22753,7 @@ File: gawk.info,  Node: Advanced Features Summary,  
Prev: Extension Philosophy,
      ‘USR1’ signal while profiling causes ‘gawk’ to dump the profile 
and
      keep going, including a function call stack.
 
-   • You can also just “pretty-print” the program.
+   • You can also just "pretty-print" the program.
 
    • Persistent memory allows you to preserve the values of variables
      and arrays between runs of ‘gawk’.  This feature is currently
@@ -22791,10 +22770,10 @@ File: gawk.info,  Node: Internationalization,  Next: 
Debugger,  Prev: Advanced F
 ***********************************
 
      Moon... Gorgeous... MEDITATION!
-          — _Pretty Guardian Sailor Moon Eternal, The Movie_
+          -- _Pretty Guardian Sailor Moon Eternal, The Movie_
 
      It probably sounded better in Japanese.
-                           — _Malka Robbins_
+                          -- _Malka Robbins_
 
    Once upon a time, computer makers wrote software that worked only in
 English.  Eventually, hardware and software vendors noticed that if
@@ -22808,8 +22787,8 @@ largely restricted to programs written in C and C++.  
This major node
 describes the underlying library ‘gawk’ uses for internationalization,
 as well as how ‘gawk’ makes internationalization features available at
 the ‘awk’ program level.  Having internationalization available at the
-‘awk’ level gives software developers additional flexibility—they are no
-longer forced to write in C or C++ when internationalization is a
+‘awk’ level gives software developers additional flexibility--they are
+no longer forced to write in C or C++ when internationalization is a
 requirement.
 
 * Menu:
@@ -22851,21 +22830,21 @@ program, either directly or via formatting with 
‘printf’ or
    When using GNU ‘gettext’, each application has its own “text 
domain”.
 This is a unique name, such as ‘kpilot’ or ‘gawk’, that identifies the
 application.  A complete application may have multiple
-components—programs written in C or C++, as well as scripts written in
+components--programs written in C or C++, as well as scripts written in
 ‘sh’ or ‘awk’.  All of the components use the same text domain.
 
-   To make the discussion concrete, assume we’re writing an application
+   To make the discussion concrete, assume we're writing an application
 named ‘guide’.  Internationalization consists of the following steps, in
 this order:
 
-  1. The programmer reviews the source for all of ‘guide’’s components
+  1. The programmer reviews the source for all of ‘guide’'s components
      and marks each string that is a candidate for translation.  For
      example, ‘"`-F': option required"’ is a good candidate for
      translation.  A table with strings of option names is not (e.g.,
-     ‘gawk’’s ‘--profile’ option should remain the same, no matter 
what
+     ‘gawk’'s ‘--profile’ option should remain the same, no matter what
      the local language).
 
-  2. The programmer indicates the application’s text domain (‘"guide"’)
+  2. The programmer indicates the application's text domain (‘"guide"’)
      to the ‘gettext’ library, by calling the ‘textdomain()’ function.
 
   3. Messages from the application are extracted from the source code
@@ -22879,7 +22858,7 @@ this order:
      shipped with the application.  For example, there might be a
      ‘fr.po’ for a French translation.
 
-  5. Each language’s ‘.po’ file is converted into a binary message
+  5. Each language's ‘.po’ file is converted into a binary message
      object (‘.gmo’) file.  A message object file contains the original
      messages and their translations in a binary format that allows fast
      lookup of translations at runtime.
@@ -22897,7 +22876,7 @@ this order:
 
   9. If necessary, it is possible to access messages from a different
      text domain than the one belonging to the application, without
-     having to switch the application’s default text domain back and
+     having to switch the application's default text domain back and
      forth.
 
    In C (or C++), the string marking and dynamic translation lookup are
@@ -22959,14 +22938,14 @@ are:
 
      NOTE: As described in *note Locales::, environment variables with
      the same name as the locale categories (‘LC_CTYPE’, ‘LC_ALL’, 
etc.)
-     influence ‘gawk’’s behavior (and that of other utilities).
+     influence ‘gawk’'s behavior (and that of other utilities).
 
      Normally, these variables also affect how the ‘gettext’ library
      finds translations.  However, the ‘LANGUAGE’ environment variable
      overrides the ‘LC_XXX’ variables.  Many GNU/Linux systems may
      define this variable without your knowledge, causing ‘gawk’ to not
      find the correct translations.  If this happens to you, look to see
-     if ‘LANGUAGE’ is defined, and if so, use the shell’s ‘unset’
+     if ‘LANGUAGE’ is defined, and if so, use the shell's ‘unset’
      command to remove it.
 
    For testing translations of ‘gawk’ itself, you can set the
@@ -22976,7 +22955,7 @@ Variables::.
 
    ---------- Footnotes ----------
 
-   (1) For some operating systems, the ‘gawk’ port doesn’t support GNU
+   (1) For some operating systems, the ‘gawk’ port doesn't support GNU
 ‘gettext’.  Therefore, these features are not available if you are using
 one of those operating systems.  Sorry.
 
@@ -22993,7 +22972,7 @@ File: gawk.info,  Node: Programmer i18n,  Next: 
Translator i18n,  Prev: Explaini
 ‘gawk’ provides the following variables for internationalization:
 
 ‘TEXTDOMAIN’
-     This variable indicates the application’s text domain.  For
+     This variable indicates the application's text domain.  For
      compatibility with GNU ‘gettext’, the default value is
      ‘"messages"’.
 
@@ -23017,7 +22996,7 @@ File: gawk.info,  Node: Programmer i18n,  Next: 
Translator i18n,  Prev: Explaini
 
           CAUTION: The order of arguments to the ‘awk’ version of the
           ‘dcgettext()’ function is purposely different from the order
-          for the C version.  The ‘awk’ version’s order was chosen to be
+          for the C version.  The ‘awk’ version's order was chosen to be
           simple and to allow for reasonable ‘awk’-style default
           arguments.
 
@@ -23036,7 +23015,7 @@ File: gawk.info,  Node: Programmer i18n,  Next: 
Translator i18n,  Prev: Explaini
      Change the directory in which ‘gettext’ looks for ‘.gmo’ files, in
      case they will not or cannot be placed in the standard locations
      (e.g., during testing).  Return the directory in which DOMAIN is
-     “bound.”
+     "bound."
 
      The default DOMAIN is the value of ‘TEXTDOMAIN’.  If DIRECTORY is
      the null string (‘""’), then ‘bindtextdomain()’ returns the 
current
@@ -23115,13 +23094,13 @@ File: gawk.info,  Node: Translator i18n,  Next: I18N 
Example,  Prev: Programmer
 13.4 Translating ‘awk’ Programs
 ===============================
 
-Once a program’s translatable strings have been marked, they must be
+Once a program's translatable strings have been marked, they must be
 extracted to create the initial ‘.pot’ file.  As part of translation, it
 is often helpful to rearrange the order in which arguments to ‘printf’
 are output.
 
-   ‘gawk’’s ‘--gen-pot’ command-line option extracts the messages 
and is
-discussed next.  After that, ‘printf’’s ability to rearrange the order
+   ‘gawk’'s ‘--gen-pot’ command-line option extracts the messages and 
is
+discussed next.  After that, ‘printf’'s ability to rearrange the order
 for ‘printf’ arguments at runtime is covered.
 
 * Menu:
@@ -23137,7 +23116,7 @@ File: gawk.info,  Node: String Extraction,  Next: 
Printf Ordering,  Up: Translat
 --------------------------------
 
 Once your ‘awk’ program is working, and all the strings have been marked
-and you’ve set (and perhaps bound) the text domain, it is time to
+and you've set (and perhaps bound) the text domain, it is time to
 produce translations.  First, use the ‘--gen-pot’ command-line option to
 create the initial ‘.pot’ file:
 
@@ -23224,7 +23203,7 @@ with positional specifiers in the same string:
 
      NOTE: There are some pathological cases that ‘gawk’ may fail to
      diagnose.  In such cases, the output may not be what you expect.
-     It’s still a bad idea to try mixing them, even if ‘gawk’ doesn’t
+     It's still a bad idea to try mixing them, even if ‘gawk’ doesn't
      detect it.
 
    Although positional specifiers can be used directly in ‘awk’
@@ -23242,7 +23221,7 @@ File: gawk.info,  Node: I18N Portability,  Prev: Printf 
Ordering,  Up: Translato
 13.4.3 ‘awk’ Portability Issues
 -------------------------------
 
-‘gawk’’s internationalization features were purposely chosen to have as
+‘gawk’'s internationalization features were purposely chosen to have as
 little impact as possible on the portability of ‘awk’ programs that use
 them to other versions of ‘awk’.  Consider this program:
 
@@ -23253,10 +23232,10 @@ them to other versions of ‘awk’.  Consider this 
program:
          print _"don't panic!"
      }
 
-As written, it won’t work on other versions of ‘awk’.  However, it is
+As written, it won't work on other versions of ‘awk’.  However, it is
 actually almost portable, requiring very little change:
 
-   • Assignments to ‘TEXTDOMAIN’ won’t have any effect, because
+   • Assignments to ‘TEXTDOMAIN’ won't have any effect, because
      ‘TEXTDOMAIN’ is not special in other ‘awk’ implementations.
 
    • Non-GNU versions of ‘awk’ treat marked strings as the concatenation
@@ -23264,7 +23243,7 @@ actually almost portable, requiring very little change:
      Typically, the variable ‘_’ has the null string (‘""’) as its
      value, leaving the original string constant as the result.
 
-   • By defining “dummy” functions to replace ‘dcgettext()’,
+   • By defining "dummy" functions to replace ‘dcgettext()’,
      ‘dcngettext()’, and ‘bindtextdomain()’, the ‘awk’ program can 
be
      made to run, but all the messages are output in the original
      language.  For example:
@@ -23286,12 +23265,12 @@ actually almost portable, requiring very little 
change:
 
    • The use of positional specifications in ‘printf’ or ‘sprintf()’ 
is
      _not_ portable.  To support ‘gettext()’ at the C level, many
-     systems’ C versions of ‘sprintf()’ do support positional
+     systems' C versions of ‘sprintf()’ do support positional
      specifiers.  But it works only if enough arguments are supplied in
      the function call.  Many versions of ‘awk’ pass ‘printf’ formats
      and arguments unchanged to the underlying C library version of
      ‘sprintf()’, but only one format and argument at a time.  What
-     happens if a positional specification is used is anybody’s guess.
+     happens if a positional specification is used is anybody's guess.
      However, because the positional specifications are primarily for
      use in _translated_ format strings, and because non-GNU ‘awk’s
      never retrieve the translated string, this should not be a problem
@@ -23299,7 +23278,7 @@ actually almost portable, requiring very little change:
 
    ---------- Footnotes ----------
 
-   (1) This is good fodder for an “Obfuscated ‘awk’” contest.
+   (1) This is good fodder for an "Obfuscated ‘awk’" contest.
 
 
 File: gawk.info,  Node: I18N Example,  Next: Gawk I18N,  Prev: Translator 
i18n,  Up: Internationalization
@@ -23307,7 +23286,7 @@ File: gawk.info,  Node: I18N Example,  Next: Gawk I18N, 
 Prev: Translator i18n,
 13.5 A Simple Internationalization Example
 ==========================================
 
-Now let’s look at a step-by-step example of how to internationalize and
+Now let's look at a step-by-step example of how to internationalize and
 localize a simple ‘awk’ program, using ‘guide.awk’ as our original
 source:
 
@@ -23342,7 +23321,7 @@ the original string and the ‘msgstr’ is the 
translation.
      the ‘guide.pot’ file.
 
    Next, the messages must be translated.  Here is a translation to a
-hypothetical dialect of English, called “Mellow”:(1)
+hypothetical dialect of English, called "Mellow":(1)
 
      $ cp guide.pot guide-mellow.po
      ADD TRANSLATIONS TO guide-mellow.po ...
@@ -23406,7 +23385,7 @@ and ‘bindtextdomain()’ (*note I18N Portability::) 
are in a file named
 
    ---------- Footnotes ----------
 
-   (1) Perhaps it would be better if it were called “Hippy.” Ah, well.
+   (1) Perhaps it would be better if it were called "Hippy."  Ah, well.
 
    (2) Well, sort of.  It seems that if ‘$LC_ALL’ is set to ‘C’, then 
no
 translations are done.  Go figure.
@@ -23423,7 +23402,7 @@ package.  (GNU ‘gettext’ is described in complete 
detail in *Note GNU
 version of GNU ‘gettext’ is version 0.19.8.1
 (ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.8.1.tar.gz).
 
-   If a translation of ‘gawk’’s messages exists, then ‘gawk’ produces
+   If a translation of ‘gawk’'s messages exists, then ‘gawk’ produces
 usage messages, warnings, and fatal errors in the local language.
 
 
@@ -23438,10 +23417,10 @@ File: gawk.info,  Node: I18N Summary,  Prev: Gawk 
I18N,  Up: Internationalizatio
      internationalized program to work in a particular language.
 
    • ‘gawk’ uses GNU ‘gettext’ to let you internationalize and 
localize
-     ‘awk’ programs.  A program’s text domain identifies the program for
+     ‘awk’ programs.  A program's text domain identifies the program for
      grouping all messages and other data together.
 
-   • You mark a program’s strings for translation by preceding them with
+   • You mark a program's strings for translation by preceding them with
      an underscore.  Once that is done, the strings are extracted into a
      ‘.pot’ file.  This file is copied for each language into a ‘.po’
      file, and the ‘.po’ files are compiled into ‘.gmo’ files for use 
at
@@ -23467,7 +23446,7 @@ File: gawk.info,  Node: Debugger,  Next: Namespaces,  
Prev: Internationalization
 It would be nice if computer programs worked perfectly the first time
 they were run, but in real life, this rarely happens for programs of any
 complexity.  Thus, most programming languages have facilities available
-for “debugging” programs, and ‘awk’ is no exception.
+for "debugging" programs, and ‘awk’ is no exception.
 
    The ‘gawk’ debugger is purposely modeled after the GNU Debugger (GDB)
 (https://www.gnu.org/software/gdb/) command-line debugger.  If you are
@@ -23508,8 +23487,8 @@ File: gawk.info,  Node: Debugging Concepts,  Next: 
Debugging Terms,  Up: Debuggi
 ahead to *note Awk Debugging::.)
 
    Of course, a debugging program cannot remove bugs for you, because it
-has no way of knowing what you or your users consider a “bug” versus a
-“feature.” (Sometimes, we humans have a hard time with this ourselves.)
+has no way of knowing what you or your users consider a "bug" versus a
+"feature."  (Sometimes, we humans have a hard time with this ourselves.)
 In that case, what can you expect from such a tool?  The answer to that
 depends on the language being debugged, but in general, you can expect
 at least the following:
@@ -23529,7 +23508,7 @@ at least the following:
      to look at internal data structures besides the variables you
      actually defined in your code.)
 
-   • The ability to obtain additional information about your program’s
+   • The ability to obtain additional information about your program's
      state or even its internal structure.
 
    All of these tools provide a great amount of help in using your own
@@ -23558,8 +23537,8 @@ defines terms used throughout the rest of this major 
node:
      stack”.
 
      For each function on the call stack, the system maintains a data
-     area that contains the function’s parameters, local variables, and
-     return value, as well as any other “bookkeeping” information needed
+     area that contains the function's parameters, local variables, and
+     return value, as well as any other "bookkeeping" information needed
      to manage the call stack.  This data area is termed a “stack
      frame”.
 
@@ -23575,7 +23554,7 @@ defines terms used throughout the rest of this major 
node:
      statement (or instruction) at a time.  The way to do this is to set
      a “breakpoint” within the program.  A breakpoint is where the
      execution of the program should break off (stop), so that you can
-     take over control of the program’s execution.  You can add and
+     take over control of the program's execution.  You can add and
      remove as many breakpoints as you like.
 
 “Watchpoint”
@@ -23584,7 +23563,7 @@ defines terms used throughout the rest of this major 
node:
      in the code is reached.  A watchpoint, however, specifies that
      program execution should stop when a _data value_ is changed.  This
      is useful, as sometimes it happens that a variable receives an
-     erroneous value, and it’s hard to track down where this happens
+     erroneous value, and it's hard to track down where this happens
      just by looking at the code.  By using a watchpoint, you can stop
      whenever a variable is assigned to, and usually find the errant
      code quite quickly.
@@ -23606,14 +23585,14 @@ treated almost like a function call, with its own 
specific block of
 instructions.
 
    In addition, because ‘awk’ is by design a very concise language, it
-is easy to lose sight of everything that is going on “inside” each line
+is easy to lose sight of everything that is going on "inside" each line
 of ‘awk’ code.  The debugger provides the opportunity to look at the
 individual primitive instructions carried out by the higher-level ‘awk’
 commands.(1)
 
    ---------- Footnotes ----------
 
-   (1) The “primitive instructions” are defined by ‘gawk’ itself; the
+   (1) The "primitive instructions" are defined by ‘gawk’ itself; the
 debugger does not work at the level of machine instructions.
 
 
@@ -23622,7 +23601,7 @@ File: gawk.info,  Node: Sample Debugging Session,  
Next: List of Debugger Comman
 14.2 Sample ‘gawk’ Debugging Session
 ====================================
 
-In order to illustrate the use of ‘gawk’ as a debugger, let’s look at a
+In order to illustrate the use of ‘gawk’ as a debugger, let's look at a
 sample debugging session.  We will use the ‘awk’ implementation of the
 POSIX ‘uniq’ command presented earlier (*note Uniq Program::) as our
 example.
@@ -23653,7 +23632,7 @@ users of GDB or similar debuggers should note that this 
syntax is
 slightly different from what you are used to.  With the ‘gawk’ debugger,
 you give the arguments for running the program in the command line to
 the debugger rather than as part of the ‘run’ command at the debugger
-prompt.)  The ‘--’ ends ‘gawk’’s command line options.  It’s not
+prompt.)  The ‘--’ ends ‘gawk’'s command line options.  It's not
 strictly necessary here, but it is needed if an option to the ‘awk’
 program conflicts with a ‘gawk’ option.  The ‘-1’ is an option to
 ‘uniq.awk’.
@@ -23673,8 +23652,8 @@ File: gawk.info,  Node: Finding The Bug,  Prev: 
Debugger Invocation,  Up: Sample
 14.2.2 Finding the Bug
 ----------------------
 
-Let’s say that we are having a problem using (a faulty version of)
-‘uniq.awk’ in “field-skipping” mode, and it doesn’t seem to be 
catching
+Let's say that we are having a problem using (a faulty version of)
+‘uniq.awk’ in "field-skipping" mode, and it doesn't seem to be catching
 lines which should be identical when skipping the first field, such as:
 
      awk is a wonderful program!
@@ -23714,9 +23693,9 @@ breakpoint for the first time:
      ⊣ 63          if (fcount == 0 && charcount == 0)
      gawk>
 
-   Now we can look at what’s going on inside our program.  First of all,
-let’s see how we got to where we are.  At the prompt, we type ‘bt’
-(short for “backtrace”), and the debugger responds with a listing of the
+   Now we can look at what's going on inside our program.  First of all,
+let's see how we got to where we are.  At the prompt, we type ‘bt’
+(short for "backtrace"), and the debugger responds with a listing of the
 current stack frames:
 
      gawk> bt
@@ -23730,8 +23709,8 @@ only call to ‘are_equal()’ in the program, but in 
more complex programs,
 knowing who called a function and with what parameters can be the key to
 finding the source of the problem.)
 
-   Now that we’re in ‘are_equal()’, we can start looking at the values
-of some variables.  Let’s say we type ‘p n’ (‘p’ is short for 
“print”).
+   Now that we're in ‘are_equal()’, we can start looking at the values
+of some variables.  Let's say we type ‘p n’ (‘p’ is short for "print").
 We would expect to see the value of ‘n’, a parameter to ‘are_equal()’.
 Actually, the debugger gives us:
 
@@ -23747,7 +23726,7 @@ function was called without arguments (*note Function 
Calls::).
      ⊣ $0 = "gawk is a wonderful program!"
 
 This might be a bit puzzling at first, as this is the second line of our
-test input.  Let’s look at ‘NR’:
+test input.  Let's look at ‘NR’:
 
      gawk> p NR
      ⊣ NR = 2
@@ -23761,7 +23740,7 @@ of the file.  Of course, this is because our program 
contains a rule for
          next
      }
 
-   OK, let’s just check that that rule worked correctly:
+   OK, let's just check that that rule worked correctly:
 
      gawk> p last
      ⊣ last = "awk is a wonderful program!"
@@ -23769,14 +23748,14 @@ of the file.  Of course, this is because our program 
contains a rule for
    Everything we have done so far has verified that the program has
 worked as planned, up to and including the call to ‘are_equal()’, so the
 problem must be inside this function.  To investigate further, we must
-begin “stepping through” the lines of ‘are_equal()’.  We start by 
typing
-‘n’ (for “next”):
+begin "stepping through" the lines of ‘are_equal()’.  We start by typing
+‘n’ (for "next"):
 
      gawk> n
      ⊣ 66          if (fcount > 0) {
 
    This tells us that ‘gawk’ is now ready to execute line 66, which
-decides whether to give the lines the special “field-skipping” treatment
+decides whether to give the lines the special "field-skipping" treatment
 indicated by the ‘-1’ command-line option.  (Notice that we skipped from
 where we were before, at line 63, to here, because the condition in line
 63, ‘if (fcount == 0 && charcount == 0)’, was false.)
@@ -23798,12 +23777,12 @@ split into, so we try to look:
      ⊣ alast = array, 5 elements
      ⊣ aline = untyped variable
 
-(The ‘p’ command can take more than one argument, similar to ‘awk’’s
+(The ‘p’ command can take more than one argument, similar to ‘awk’'s
 ‘print’ statement.)
 
    This is kind of disappointing, though.  All we found out is that
-there are five elements in ‘alast’; ‘m’ and ‘aline’ don’t have 
values
-because we are at line 68 but haven’t executed it yet.  This information
+there are five elements in ‘alast’; ‘m’ and ‘aline’ don't have 
values
+because we are at line 68 but haven't executed it yet.  This information
 is useful enough (we now know that none of the words were accidentally
 left out), but what if we want to see inside the array?
 
@@ -23828,7 +23807,7 @@ mentioned):
      ⊣ alast["4"] = "wonderful"
      ⊣ alast["5"] = "program!"
 
-   It looks like we got this far OK. Let’s take another step or two:
+   It looks like we got this far OK. Let's take another step or two:
 
      gawk> n
      ⊣ 69              clast = join(alast, fcount, n)
@@ -23838,13 +23817,13 @@ mentioned):
    Well, here we are at our error (sorry to spoil the suspense).  What
 we had in mind was to join the fields starting from the second one to
 make the virtual record to compare, and if the first field were numbered
-zero, this would work.  Let’s look at what we’ve got:
+zero, this would work.  Let's look at what we've got:
 
      gawk> p cline clast
      ⊣ cline = "gawk is a wonderful program!"
      ⊣ clast = "awk is a wonderful program!"
 
-   Hey, those look pretty familiar!  They’re just our original,
+   Hey, those look pretty familiar!  They're just our original,
 unaltered input records.  A little thinking (the human brain is still
 the best debugging tool), and we realize that we were off by one!
 
@@ -23963,17 +23942,17 @@ The commands for controlling breakpoints are:
      not specified, any existing condition is removed (i.e., the
      breakpoint or watchpoint is made unconditional).
 
-‘delete’ [N1 N2 ...] [N–M]
-‘d’ [N1 N2 ...] [N–M]
+‘delete’ [N1 N2 ...] [N-M]
+‘d’ [N1 N2 ...] [N-M]
      Delete specified breakpoints or a range of breakpoints.  Delete all
      defined breakpoints if no argument is supplied.
 
-‘disable’ [N1 N2 ... | N–M]
+‘disable’ [N1 N2 ... | N-M]
      Disable specified breakpoints or a range of breakpoints.  Without
      any argument, disable all breakpoints.
 
-‘enable’ [‘del’ | ‘once’] [N1 N2 ...] [N–M]
-‘e’ [‘del’ | ‘once’] [N1 N2 ...] [N–M]
+‘enable’ [‘del’ | ‘once’] [N1 N2 ...] [N-M]
+‘e’ [‘del’ | ‘once’] [N1 N2 ...] [N-M]
      Enable specified breakpoints or a range of breakpoints.  Without
      any argument, enable all breakpoints.  Optionally, you can specify
      how to enable the breakpoints:
@@ -24050,7 +24029,7 @@ execution of the program than we saw in our earlier 
example:
 
 ‘return’ [VALUE]
      Cancel execution of a function call.  If VALUE (either a string or
-     a number) is specified, it is used as the function’s return value.
+     a number) is specified, it is used as the function's return value.
      If used in a frame other than the innermost one (the currently
      executing function; i.e., frame number 0), discard all inner frames
      in addition to the selected one, and the caller of that frame
@@ -24072,7 +24051,7 @@ execution of the program than we saw in our earlier 
example:
 ‘stepi’ [COUNT]
 ‘si’ [COUNT]
      Execute one (or COUNT) instruction(s), stepping inside function
-     calls.  (For illustration of what is meant by an “instruction” in
+     calls.  (For illustration of what is meant by an "instruction" in
      ‘gawk’, see the output shown under ‘dump’ in *note Miscellaneous
      Debugger Commands::.)
 
@@ -24118,8 +24097,8 @@ The commands for viewing and changing variables inside 
of ‘gawk’ are:
 ‘eval’ PARAM, ...
 AWK STATEMENTS
 ‘end’
-     This form of ‘eval’ is similar, but it allows you to define “local
-     variables” that exist in the context of the AWK STATEMENTS, instead
+     This form of ‘eval’ is similar, but it allows you to define "local
+     variables" that exist in the context of the AWK STATEMENTS, instead
      of using variables or function parameters defined by the program.
 
 ‘print’ VAR1[‘,’ VAR2 ...]
@@ -24268,7 +24247,7 @@ know:
           List all items in the watch list.
 
    Additional commands give you control over the debugger, the ability
-to save the debugger’s state, and the ability to run debugger commands
+to save the debugger's state, and the ability to run debugger commands
 from a file.  The commands are:
 
 ‘option’ [NAME[‘=’VALUE]]
@@ -24314,7 +24293,7 @@ from a file.  The commands are:
      Run command(s) from a file; an error in any command does not
      terminate execution of subsequent commands.  Comments (lines
      starting with ‘#’) are allowed in a command file.  Empty lines are
-     ignored; they do _not_ repeat the last command.  You can’t restart
+     ignored; they do _not_ repeat the last command.  You can't restart
      the program by having more than one ‘run’ command in the file.
      Also, the list of commands may include additional ‘source’
      commands; however, the ‘gawk’ debugger will not source the same
@@ -24338,7 +24317,7 @@ categories, as follows:
      named in FILENAME.  This prints a representation of the internal
      instructions that ‘gawk’ executes to implement the ‘awk’ commands
      in a program.  This can be very enlightening, as the following
-     partial dump of Davide Brini’s obfuscated code (*note Signature
+     partial dump of Davide Brini's obfuscated code (*note Signature
      Program::) demonstrates:
 
           gawk> dump
@@ -24397,8 +24376,8 @@ categories, as follows:
      summary of their usage.  ‘help COMMAND’ prints the information
      about the command COMMAND.
 
-‘list’ [‘-’ | ‘+’ | N | FILENAME‘:’N | N–M | FUNCTION]
-‘l’ [‘-’ | ‘+’ | N | FILENAME‘:’N | N–M | FUNCTION]
+‘list’ [‘-’ | ‘+’ | N | FILENAME‘:’N | N-M | FUNCTION]
+‘l’ [‘-’ | ‘+’ | N | FILENAME‘:’N | N-M | FUNCTION]
      Print the specified lines (default 15) from the current source file
      or the file named FILENAME.  The possible arguments to ‘list’ are
      as follows:
@@ -24413,7 +24392,7 @@ categories, as follows:
      N
           Print lines centered around line number N.
 
-     N–M
+     N-M
           Print lines from N to M.
 
      FILENAME‘:’N
@@ -24437,7 +24416,7 @@ categories, as follows:
      about to be executed, along with the ‘awk’ lines they implement.
      The default is ‘off’.
 
-     It is to be hoped that most of the “opcodes” in these instructions
+     It is to be hoped that most of the "opcodes" in these instructions
      are fairly self-explanatory, and using ‘stepi’ and ‘nexti’ while
      ‘trace’ is on will make them into familiar friends.
 
@@ -24449,7 +24428,7 @@ File: gawk.info,  Node: Readline Support,  Next: 
Limitations,  Prev: List of Deb
 
 If ‘gawk’ is compiled with the GNU Readline library
 (http://cnswww.cns.cwru.edu/php/chet/readline/readline.html), you can
-take advantage of that library’s command completion and history
+take advantage of that library's command completion and history
 expansion features.  The following types of completion are available:
 
 Command completion
@@ -24476,36 +24455,36 @@ File: gawk.info,  Node: Limitations,  Next: Debugging 
Summary,  Prev: Readline S
 
 We hope you find the ‘gawk’ debugger useful and enjoyable to work with,
 but as with any program, especially in its early releases, it still has
-some limitations.  A few that it’s worth being aware of are:
+some limitations.  A few that it's worth being aware of are:
 
    • At this point, the debugger does not give a detailed explanation of
-     what you did wrong when you type in something it doesn’t like.
+     what you did wrong when you type in something it doesn't like.
      Rather, it just responds ‘syntax error’.  When you do figure out
-     what your mistake was, though, you’ll feel like a real guru.
+     what your mistake was, though, you'll feel like a real guru.
 
    • If you perused the dump of opcodes in *note Miscellaneous Debugger
      Commands:: (or if you are already familiar with ‘gawk’ internals),
      you will realize that much of the internal manipulation of data in
      ‘gawk’, as in many interpreters, is done on a stack.  ‘Op_push’,
-     ‘Op_pop’, and the like are the “bread and butter” of most 
‘gawk’
+     ‘Op_pop’, and the like are the "bread and butter" of most ‘gawk’
      code.
 
      Unfortunately, as of now, the ‘gawk’ debugger does not allow you to
-     examine the stack’s contents.  That is, the intermediate results of
+     examine the stack's contents.  That is, the intermediate results of
      expression evaluation are on the stack, but cannot be printed.
      Rather, only variables that are defined in the program can be
      printed.  Of course, a workaround for this is to use more explicit
      variables at the debugging stage and then change back to obscure,
      perhaps more optimal code later.
 
-   • There is no way to look “inside” the process of compiling regular
+   • There is no way to look "inside" the process of compiling regular
      expressions to see if you got it right.  As an ‘awk’ programmer,
      you are expected to know the meaning of ‘/[^[:alnum:][:blank:]]/’.
 
    • The ‘gawk’ debugger is designed to be used by running a program
      (with all its parameters) on the command line, as described in
      *note Debugger Invocation::.  There is no way (as of now) to attach
-     or “break into” a running program.  This seems reasonable for a
+     or "break into" a running program.  This seems reasonable for a
      language that is used mainly for quickly executing, short programs.
 
    • The ‘gawk’ debugger only accepts source code supplied with the 
‘-f’
@@ -24580,7 +24559,7 @@ This major node describes a feature that is specific to 
‘gawk’.
 
 File: gawk.info,  Node: Global Namespace,  Next: Qualified Names,  Up: 
Namespaces
 
-15.1 Standard ‘awk’’s Single Namespace
+15.1 Standard ‘awk’'s Single Namespace
 ======================================
 
 In standard ‘awk’, there is a single, global, “namespace”.  This means
@@ -24593,11 +24572,11 @@ and as an array in the other.
 lines, or even a few thousand, but it prevents the development of
 reusable libraries of ‘awk’ functions, and can inadvertently cause
 independently-developed library files to accidentally step on each
-other’s “private” global variables (*note Library Names::).
+other's "private" global variables (*note Library Names::).
 
    Most other programming languages solve this issue by providing some
-kind of namespace control: a way to say “this function is in namespace
-XXX, and that function is in namespace YYY.” (Of course, there is then
+kind of namespace control: a way to say "this function is in namespace
+XXX, and that function is in namespace YYY."  (Of course, there is then
 still a single namespace for the namespaces, but the hope is that there
 are much fewer namespaces in use by any given program, and thus much
 less chance for collisions.)  These facilities are sometimes referred to
@@ -24642,7 +24621,7 @@ have qualified names like ‘awk::ARGC’, 
‘awk::NF’, and so on.
 current source file (*note Changing The Namespace::), ‘gawk’ forces
 unqualified identifiers whose names are all uppercase letters to be in
 the ‘awk’ namespace.  This makes it possible for you to easily reference
-‘gawk’’s global variables from different namespaces.  It also keeps your
+‘gawk’'s global variables from different namespaces.  It also keeps your
 code looking natural.
 
 
@@ -24667,15 +24646,15 @@ file, although this is likely to become confusing if 
you do it too much.
 
      NOTE: Association of unqualified identifiers to a namespace is
      handled while ‘gawk’ parses your program, _before_ it starts to
-     run.  There is no concept of a “current” namespace once your
+     run.  There is no concept of a "current" namespace once your
      program starts executing.  Be sure you understand this.
 
    Each source file for ‘-i’ and ‘-f’ starts out with an implicit
 ‘@namespace "awk"’.  Similarly, each chunk of command-line code supplied
 with ‘-e’ has such an implicit initial statement (*note Options::).
 
-   Files included with ‘@include’ (*note Include Files::) “push” and
-“pop” the current namespace.  That is, each ‘@include’ saves the 
current
+   Files included with ‘@include’ (*note Include Files::) "push" and
+"pop" the current namespace.  That is, each ‘@include’ saves the current
 namespace and starts over with an implicit ‘@namespace "awk"’ which
 remains in effect until an explicit ‘@namespace’ directive is seen.
 When ‘gawk’ finishes processing the included file, the saved namespace
@@ -24855,7 +24834,7 @@ namespace.
 *note Library Names::, whereby global variable and function names start
 with a capital letter.
 
-   Here is a simple test program.  Since it’s in a separate file,
+   Here is a simple test program.  Since it's in a separate file,
 unadorned identifiers are sought for in the ‘awk’ namespace:
 
      BEGIN {
@@ -24863,7 +24842,7 @@ unadorned identifiers are sought for in the ‘awk’ 
namespace:
              print p
      }
 
-   Here’s what happens when it’s run:
+   Here's what happens when it's run:
 
      $ gawk -f ns_passwd.awk -f testpasswd.awk
      ⊣ root:x:0:0:root:/root:/bin/bash
@@ -24891,7 +24870,7 @@ everywhere.
 
    Interaction with the debugger (*note Debugging::) has not had to
 change (at least as of this writing).  Some of the internal byte codes
-changed in order to accommodate namespaces, and the debugger’s ‘dump’
+changed in order to accommodate namespaces, and the debugger's ‘dump’
 command was adjusted to match.
 
    The extension API (*note Dynamic Extensions::) has always allowed for
@@ -24931,7 +24910,7 @@ File: gawk.info,  Node: Namespace Summary,  Prev: 
Namespace And Features,  Up: N
      the extension facility (*note Dynamic Extensions::).
 
    • Overall, the namespace facility was designed and implemented such
-     that backwards compatibility is paramount.  Programs that don’t use
+     that backwards compatibility is paramount.  Programs that don't use
      namespaces should see absolutely no difference in behavior when run
      by a namespace-capable version of ‘gawk’.
 
@@ -25002,7 +24981,7 @@ Decimal arithmetic
      decimal arithmetic,(1) it does not do so.
 
 Integer arithmetic
-     In school, integer values were referred to as “whole” numbers—that
+     In school, integer values were referred to as "whole" numbers--that
      is, numbers without any fractional part, such as 1, 42, or −17.
      The advantage to integer numbers is that they represent values
      exactly.  The disadvantage is that their range is limited.
@@ -25016,7 +24995,7 @@ Integer arithmetic
      than floating-point arithmetic.
 
 Floating-point arithmetic
-     Floating-point numbers represent what were called in school “real”
+     Floating-point numbers represent what were called in school "real"
      numbers (i.e., those that have a fractional part, such as
      3.1415927).  The advantage to floating-point numbers is that they
      can represent a much larger range of values than can integers.  The
@@ -25043,7 +25022,6 @@ values are always signed.  The possible ranges of 
values are shown in
 *note Table 16.1: table-numeric-ranges. and *note Table 16.2:
 table-floating-point-ranges.
 
-
 Representation           Minimum value            Maximum value
 ---------------------------------------------------------------------------
 32-bit signed integer    −2,147,483,648           2,147,483,647
@@ -25055,7 +25033,6 @@ integer
 
 Table 16.1: Value ranges for integer representations
 
-
 Representation              Minimum          Minimum finite   Maximum finite
                             positive         value            value
                             nonzero value
@@ -25072,7 +25049,7 @@ representations
 
    ---------- Footnotes ----------
 
-   (1) We don’t know why they expect this, but they do.
+   (1) We don't know why they expect this, but they do.
 
 
 File: gawk.info,  Node: Math Definitions,  Next: MPFR features,  Prev: 
Computer Arithmetic,  Up: Arbitrary Precision Arithmetic
@@ -25085,11 +25062,11 @@ informal definitions that should help you work your 
way through the
 material here:
 
 “Accuracy”
-     A floating-point calculation’s accuracy is how close it comes to
+     A floating-point calculation's accuracy is how close it comes to
      the real (paper and pencil) value.
 
 “Error”
-     The difference between what the result of a computation “should be”
+     The difference between what the result of a computation "should be"
      and what it actually is.  It is best to minimize error as much as
      possible.
 
@@ -25102,7 +25079,7 @@ material here:
      another number and infinity produce infinity.
 
 “NaN”
-     “Not a number.” A special value that results from attempting a
+     "Not a number."  A special value that results from attempting a
      calculation that has no answer as a real number.  *Note Strange
      values::, for more information about infinity and not-a-number
      values.
@@ -25134,9 +25111,9 @@ material here:
 
 “Stability”
      From the Wikipedia article on numerical stability
-     (https://en.wikipedia.org/wiki/Numerical_stability): “Calculations
+     (https://en.wikipedia.org/wiki/Numerical_stability): "Calculations
      that can be proven not to magnify approximation errors are called
-     “numerically stable”.”
+     “numerically stable”."
 
    See the Wikipedia article on accuracy and precision
 (https://en.wikipedia.org/wiki/Accuracy_and_precision) for more
@@ -25152,7 +25129,6 @@ ranges.  (‘awk’ uses only the 64-bit 
double-precision format.)
    *note Table 16.3: table-ieee-formats. lists the precision and
 exponent field values for the basic IEEE 754 binary formats.
 
-
 Name           Total bits     Precision      Minimum        Maximum
                                              exponent       exponent
 ---------------------------------------------------------------------------
@@ -25185,8 +25161,8 @@ File: gawk.info,  Node: MPFR On Parole,  Next: MPFR 
Intro,  Up: MPFR features
 16.3.1 Arbitrary Precision Arithmetic is On Parole!
 ---------------------------------------------------
 
-As of version 5.2, arbitrary precision arithmetic in ‘gawk’ is “on
-parole.” The primary ‘gawk’ maintainer is no longer maintaining it.
+As of version 5.2, arbitrary precision arithmetic in ‘gawk’ is "on
+parole."  The primary ‘gawk’ maintainer is no longer maintaining it.
 Fortunately, a volunteer from the development team has agreed to take it
 over.
 
@@ -25224,8 +25200,8 @@ see if MPFR support is available like so:
      ⊣ Copyright (C) 1989, 1991-2022 Free Software Foundation.
      ...
 
-(You may see different version numbers than what’s shown here.  That’s
-OK; what’s important is to see that GNU MPFR and GNU MP are listed in
+(You may see different version numbers than what's shown here.  That's
+OK; what's important is to see that GNU MPFR and GNU MP are listed in
 the output.)
 
    Additionally, there are a few elements available in the ‘PROCINFO’
@@ -25251,7 +25227,7 @@ File: gawk.info,  Node: FP Math Caution,  Next: 
Arbitrary Precision Integers,  P
 ==============================================
 
      Math class is tough!
-                    — _Teen Talk Barbie, July 1992_
+                   -- _Teen Talk Barbie, July 1992_
 
    This minor node provides a high-level overview of the issues involved
 when doing lots of floating-point arithmetic.(1)  The discussion applies
@@ -25272,8 +25248,8 @@ to both hardware and arbitrary-precision floating-point 
arithmetic.
    ---------- Footnotes ----------
 
    (1) There is a very nice paper on floating-point arithmetic
-(http://www.validlab.com/goldberg/paper.pdf) by David Goldberg, “What
-Every Computer Scientist Should Know About Floating-Point Arithmetic,”
+(http://www.validlab.com/goldberg/paper.pdf) by David Goldberg, "What
+Every Computer Scientist Should Know About Floating-Point Arithmetic,"
 ‘ACM Computing Surveys’ *23*, 1 (1991-03): 5-48.  This is worth reading
 if you are interested in the details, but it does require a background
 in computer science.
@@ -25307,7 +25283,7 @@ File: gawk.info,  Node: Inexact representation,  Next: 
Comparing FP Values,  Up:
 ...................................................
 
 So, before you start to write any code, you should think about what you
-really want and what’s really happening.  Consider the two numbers in
+really want and what's really happening.  Consider the two numbers in
 the following example:
 
      x = 0.875             # 1/2 + 1/4 + 1/8
@@ -25369,7 +25345,7 @@ File: gawk.info,  Node: Errors accumulate,  Next: 
Strange values,  Prev: Compari
 ..........................
 
 The loss of accuracy during a single computation with floating-point
-numbers usually isn’t enough to worry about.  However, if you compute a
+numbers usually isn't enough to worry about.  However, if you compute a
 value that is the result of a sequence of floating-point operations, the
 error can accumulate and greatly affect the computation itself.  Here is
 an attempt to compute the value of pi using one of its many series
@@ -25413,11 +25389,11 @@ representations yield an unexpected result:
 
 File: gawk.info,  Node: Strange values,  Prev: Errors accumulate,  Up: 
Inexactness of computations
 
-16.4.1.4 Floating Point Values They Didn’t Talk About In School
+16.4.1.4 Floating Point Values They Didn't Talk About In School
 ...............................................................
 
 Both IEEE 754 floating-point hardware, and MPFR, support two kinds of
-values that you probably didn’t learn about in school.  The first is
+values that you probably didn't learn about in school.  The first is
 “infinity”, a special value, that can be either negative or positive,
 and which is either smaller than any other value (negative infinity), or
 larger than any other value (positive infinity).  When such values are
@@ -25429,7 +25405,7 @@ floating-point values internally.
 Otherwise, operations (addition, subtraction, etc.)  involving another
 number and infinity produce mathematically reasonable results.
 
-   The second kind of value is “not a number”, or NaN for short.(1)
+   The second kind of value is "not a number", or NaN for short.(1)
 This is a special value that results from attempting a calculation that
 has no answer as a real number.  In such a case, programs can either
 receive a floating-point exception, or get NaN back as the result.  The
@@ -25443,8 +25419,8 @@ IEEE 754 standard recommends that systems return NaN. 
Some examples:
      −8 is out of the domain of ‘log()’, so the result is NaN.
 
    NaN values are strange.  In particular, they cannot be compared with
-other floating point values; any such comparison, except for “is not
-equal to”, returns false.  NaN values are so much unequal to other
+other floating point values; any such comparison, except for "is not
+equal to", returns false.  NaN values are so much unequal to other
 values that even comparing two identical NaN values with ‘!=’ returns
 true!
 
@@ -25571,7 +25547,6 @@ set the value to one of the predefined case-insensitive 
strings shown in
 *note Table 16.4: table-predefined-precision-strings, to emulate an IEEE
 754 binary format.
 
-
 ‘PREC’       IEEE 754 binary format
 ---------------------------------------------------
 ‘"half"’     16-bit half-precision
@@ -25624,7 +25599,6 @@ The ‘ROUNDMODE’ variable provides program-level 
control over the
 rounding mode.  The correspondence between ‘ROUNDMODE’ and the IEEE
 rounding modes is shown in *note Table 16.5: table-gawk-rounding-modes.
 
-
 Rounding mode                    IEEE name              ‘ROUNDMODE’
 ---------------------------------------------------------------------------
 Round to nearest, ties to even   ‘roundTiesToEven’      ‘"N"’ or 
‘"n"’
@@ -25662,7 +25636,7 @@ example:
          }
      }
 
-produces the following output when run on the author’s system:(1)
+produces the following output when run on the author's system:(1)
 
      -3.5 => -4
      -2.5 => -2
@@ -25681,8 +25655,7 @@ the default rounding mode for IEEE 754 computing 
functions and
 operators.
 
                      Rounding Modes and Conversion
-
-   It’s important to understand that, along with ‘CONVFMT’ and 
‘OFMT’,
+   It's important to understand that, along with ‘CONVFMT’ and ‘OFMT’,
 the rounding mode affects how numbers are converted to strings.  For
 example, consider the following program:
 
@@ -25754,7 +25727,7 @@ correct output (using the formula ‘prec = 3.322 * 
dps’) would be 3.322 x
    The result from an arithmetic operation with an integer and a
 floating-point value is a floating-point value with a precision equal to
 the working precision.  The following program calculates the eighth term
-in Sylvester’s sequence(1) using a recurrence:
+in Sylvester's sequence(1) using a recurrence:
 
      $ gawk -M 'BEGIN {
      >   s = 2.0
@@ -25799,7 +25772,7 @@ the following:
 
    ---------- Footnotes ----------
 
-   (1) Weisstein, Eric W. ‘Sylvester’s Sequence’.  From MathWorld—A
+   (1) Weisstein, Eric W. ‘Sylvester's Sequence’.  From MathWorld--A
 Wolfram Web Resource
 (<http://mathworld.wolfram.com/SylvestersSequence.html>).
 
@@ -25864,9 +25837,9 @@ These features are:
      hexadecimal notation (e.g., ‘0xDEADBEEF’).  (Note: data values,
      _not_ source code constants.)
 
-   • Support for the special IEEE 754 floating-point values “not a
-     number” (NaN), positive infinity (“inf”), and negative infinity
-     (“−inf”).  In particular, the format for these values is as
+   • Support for the special IEEE 754 floating-point values "not a
+     number" (NaN), positive infinity ("inf"), and negative infinity
+     ("−inf").  In particular, the format for these values is as
      specified by the ISO 1999 C standard, which ignores case and can
      allow implementation-dependent additional characters after the
      ‘nan’ and allow either ‘inf’ or ‘infinity’.
@@ -25883,14 +25856,14 @@ historical practice:
 
    The second problem is that the ‘gawk’ maintainer feels that this
 interpretation of the standard, which required a certain amount of
-“language lawyering” to arrive at in the first place, was not even
-intended by the standard developers.  In other words, “We see how you
-got where you are, but we don’t think that that’s where you want to be.”
+"language lawyering" to arrive at in the first place, was not even
+intended by the standard developers.  In other words, "We see how you
+got where you are, but we don't think that that's where you want to be."
 
    Recognizing these issues, but attempting to provide compatibility
 with the earlier versions of the standard, the 2008 POSIX standard added
 explicit wording to allow, but not require, that ‘awk’ support
-hexadecimal floating-point values and special values for “not a number”
+hexadecimal floating-point values and special values for "not a number"
 and infinity.
 
    Although the ‘gawk’ maintainer continues to feel that providing those
@@ -25898,10 +25871,10 @@ features is inadvisable, nevertheless, on systems 
that support IEEE
 floating point, it seems reasonable to provide _some_ way to support NaN
 and infinity values.  The solution implemented in ‘gawk’ is as follows:
 
-   • With the ‘--posix’ command-line option, ‘gawk’ becomes “hands 
off.”
-     String values are passed directly to the system library’s
+   • With the ‘--posix’ command-line option, ‘gawk’ becomes "hands 
off."
+     String values are passed directly to the system library's
      ‘strtod()’ function, and if it successfully returns a numeric
-     value, that is what’s used.(1)  By definition, the results are not
+     value, that is what's used.(1)  By definition, the results are not
      portable across different systems.  They are also a little
      surprising:
 
@@ -25927,16 +25900,16 @@ and infinity values.  The solution implemented in 
‘gawk’ is as follows:
      ‘gawk’ ignores case in the four special values.  Thus, ‘+nan’ and
      ‘+NaN’ are the same.
 
-   Besides handling input, ‘gawk’ also needs to print “correct” values
+   Besides handling input, ‘gawk’ also needs to print "correct" values
 on output when a value is either NaN or infinity.  Starting with version
 4.2.2, for such values ‘gawk’ prints one of the four strings just
 described: ‘+inf’, ‘-inf’, ‘+nan’, or ‘-nan’.  Similarly, in 
POSIX mode,
-‘gawk’ prints the result of the system’s C ‘printf()’ function using 
the
+‘gawk’ prints the result of the system's C ‘printf()’ function using 
the
 ‘%g’ format string for the value, whatever that may be.
 
      NOTE: The sign used for NaN values can vary!  The result depends
      upon both the underlying system architecture and the underlying
-     library used to format NaN values.  In particular, it’s possible to
+     library used to format NaN values.  In particular, it's possible to
      get different results for the same function call depending upon
      whether or not ‘gawk’ is running in MPFR mode (‘-M’) or not.
      Caveat Emptor!
@@ -25955,8 +25928,8 @@ File: gawk.info,  Node: Floating point summary,  Prev: 
POSIX Floating Point Prob
      floating-point values.  Standard ‘awk’ uses double-precision
      floating-point values.
 
-   • In the early 1990s Barbie mistakenly said, “Math class is tough!”
-     Although math isn’t tough, floating-point arithmetic isn’t the same
+   • In the early 1990s Barbie mistakenly said, "Math class is tough!"
+     Although math isn't tough, floating-point arithmetic isn't the same
      as pencil-and-paper math, and care must be taken:
 
         − Not all numbers can be represented exactly.
@@ -26009,7 +25982,7 @@ dynamically loaded libraries.  This facility is 
available on systems
 that support the C ‘dlopen()’ and ‘dlsym()’ functions.  This major node
 describes how to create extensions using code written in C or C++.
 
-   If you don’t know anything about C programming, you can safely skip
+   If you don't know anything about C programming, you can safely skip
 this major node, although you may wish to review the documentation on
 the extensions that come with ‘gawk’ (*note Extension Samples::), and
 the information on the ‘gawkextlib’ project (*note gawkextlib::).  The
@@ -26044,10 +26017,10 @@ functionality, over and above the built-in 
capabilities described in the
 rest of this Info file.
 
    Extensions are useful because they allow you (of course) to extend
-‘gawk’’s functionality.  For example, they can provide access to system
+‘gawk’'s functionality.  For example, they can provide access to system
 calls (such as ‘chdir()’ to change directory) and to other C library
-routines that could be of use.  As with most software, “the sky is the
-limit”; if you can imagine something that you might want to do and can
+routines that could be of use.  As with most software, "the sky is the
+limit"; if you can imagine something that you might want to do and can
 write in C or C++, you can write an extension to do it!
 
    Extensions are written in C or C++, using the “application
@@ -26090,7 +26063,6 @@ an extension is loaded, ‘gawk’ passes it a pointer 
to a ‘struct’ whose
 fields are function pointers.  This is shown in *note Figure 17.1:
 figure-load-extension.
 
-
 [image src="gawk_api-figure1.png" alt="Loading the extension" text="         
                 API
                          Struct
                          +---+
@@ -26119,12 +26091,11 @@ figure-load-extension.
 Figure 17.1: Loading the extension
 
    The extension can call functions inside ‘gawk’ through these function
-pointers, at runtime, without needing (link-time) access to ‘gawk’’s
+pointers, at runtime, without needing (link-time) access to ‘gawk’'s
 symbols.  One of these function pointers is to a function for
-“registering” new functions.  This is shown in *note Figure 17.2:
+"registering" new functions.  This is shown in *note Figure 17.2:
 figure-register-new-function.
 
-
 [image src="gawk_api-figure2.png" alt="Registering a new Function" text="    
        register_ext_func({ \"chdir\", do_chdir, 1 });
 
             +--------------------------------------------+
@@ -26147,7 +26118,6 @@ function pointer with a name and can then call it, 
using a defined
 calling convention.  This is shown in *note Figure 17.3:
 figure-call-new-function.
 
-
 [image src="gawk_api-figure3.png" alt="Calling the new function" text="    
BEGIN {
         chdir(\"/path\")                             (*fnptr)(1);
     }
@@ -26179,7 +26149,7 @@ Example::) and also in the ‘testext.c’ code for 
testing the APIs.
 
    Some other bits and pieces:
 
-   • The API provides access to ‘gawk’’s ‘do_XXX’ values, 
reflecting
+   • The API provides access to ‘gawk’'s ‘do_XXX’ values, reflecting
      command-line options, like ‘do_lint’, ‘do_profiling’, and so on
      (*note Extension API Variables::).  These are informational: an
      extension cannot affect their values inside ‘gawk’.  In addition,
@@ -26187,7 +26157,7 @@ Example::) and also in the ‘testext.c’ code for 
testing the APIs.
 
    • The API also provides major and minor version numbers, so that an
      extension can check if the ‘gawk’ it is loaded with supports the
-     facilities it was compiled with.  (Version mismatches “shouldn’t”
+     facilities it was compiled with.  (Version mismatches "shouldn't"
      happen, but we all know how _that_ goes.)  *Note Extension
      Versioning:: for details.
 
@@ -26249,7 +26219,7 @@ operations:
 
      All of these are discussed in detail later in this major node.
 
-   • Printing fatal, warning, and “lint” warning messages.
+   • Printing fatal, warning, and "lint" warning messages.
 
    • Updating ‘ERRNO’, or unsetting it.
 
@@ -26286,7 +26256,6 @@ operations:
      The list of macros and related header files is shown in *note Table
      17.1: table-api-std-headers.
 
-
      C entity                 Header file
      -------------------------------------------
      ‘EOF’                    ‘<stdio.h>’
@@ -26314,7 +26283,7 @@ operations:
      effect.  Doing so, however, is poor coding practice.
 
    • Although the API only uses ISO C 90 features, there is an
-     exception; the “constructor” functions use the ‘inline’ keyword.
+     exception; the "constructor" functions use the ‘inline’ keyword.
      If your compiler does not support this keyword, you should either
      place ‘-Dinline=''’ on your command line or use the GNU Autotools
      and include a ‘config.h’ file in your extensions.
@@ -26356,14 +26325,14 @@ operations:
 
    • When retrieving a value (such as a parameter or that of a global
      variable or array element), the extension requests a specific type
-     (number, string, scalar, value cookie, array, or “undefined”).
-     When the request is “undefined,” the returned value will have the
+     (number, string, scalar, value cookie, array, or "undefined").
+     When the request is "undefined," the returned value will have the
      real underlying type.
 
-     However, if the request and actual type don’t match, the access
-     function returns “false” and fills in the type of the actual value
+     However, if the request and actual type don't match, the access
+     function returns "false" and fills in the type of the actual value
      that is there, so that the extension can, e.g., print an error
-     message (such as “scalar passed where array expected”).
+     message (such as "scalar passed where array expected").
 
    You may call the API functions by using the function pointers
 directly, but the interface is not so pretty.  To make extension code
@@ -26378,11 +26347,11 @@ File: gawk.info,  Node: General Data Types,  Next: 
Memory Allocation Functions,
 ---------------------------------
 
      I have a true love/hate relationship with unions.
-                          — _Arnold Robbins_
+                          -- _Arnold Robbins_
 
-     That’s the thing about unions: the compiler will arrange things so
+     That's the thing about unions: the compiler will arrange things so
      they can accommodate both love and hate.
-                            — _Chet Ramey_
+                            -- _Chet Ramey_
 
    The extension API defines a number of simple types and structures for
 general-purpose use.  Additional, more specialized, data structures are
@@ -26445,7 +26414,7 @@ use them.
 ‘        awk_bool_t         b;’
 ‘    } u;’
 ‘} awk_value_t;’
-     An “‘awk’ value.” The ‘val_type’ member indicates what kind of
+     An "‘awk’ value."  The ‘val_type’ member indicates what kind of
      value the ‘union’ holds, and each member is of the appropriate
      type.
 
@@ -26491,7 +26460,7 @@ use them.
 
           CAUTION: Any MPFR or MPZ values that you create and pass to
           ‘gawk’ to save are _copied_.  This means you are responsible
-          to release the storage once you’re done with it.  See the
+          to release the storage once you're done with it.  See the
           sample ‘intdiv’ extension for some example code.
 
 ‘typedef void *awk_scalar_t;’
@@ -26501,7 +26470,7 @@ use them.
      in more detail in *note Symbol table by cookie::.
 
 ‘typedef void *awk_value_cookie_t;’
-     A “value cookie” is an opaque type representing a cached value.
+     A "value cookie" is an opaque type representing a cached value.
      This is also discussed in a general fashion in the text following
      this list, and in more detail in *note Cached values::.
 
@@ -26509,7 +26478,7 @@ use them.
 regexps.  The ‘awk_value_t’ struct represents values.  The ‘val_type’
 member indicates what is in the ‘union’.
 
-   Representing numbers is easy—the API uses a C ‘double’.  Strings
+   Representing numbers is easy--the API uses a C ‘double’.  Strings
 require more work.  Because ‘gawk’ allows embedded NUL bytes in string
 values, a string must be represented as a pair containing a data pointer
 and length.  This is the ‘awk_string_t’ type.
@@ -26529,7 +26498,7 @@ The PostgreSQL ‘PQgetvalue()’ function, for 
example, returns a string
 that may be numeric or textual depending on the contents.
 
    Typed regexp values (*note Strong Regexp Constants::) are not of much
-use to extension functions.  Extension functions can tell that they’ve
+use to extension functions.  Extension functions can tell that they've
 received them, and create them for scalar values.  Otherwise, they can
 examine the text of the regexp through ‘regex_value.str’ and
 ‘regex_value.len’.
@@ -26549,7 +26518,7 @@ correctly reflects the type of the value in the 
‘awk_value_t’ struct.
    Conceptually, the first three members of the ‘union’ (number, string,
 and array) are all that is needed for working with ‘awk’ values.
 However, because the API provides routines for accessing and changing
-the value of a global scalar variable only by using the variable’s name,
+the value of a global scalar variable only by using the variable's name,
 there is a performance penalty: ‘gawk’ must find the variable each time
 it is accessed and changed.  This turns out to be a real issue, not just
 a theoretical one.
@@ -26557,8 +26526,8 @@ a theoretical one.
    Thus, if you know that your extension will spend considerable time
 reading and/or changing the value of one or more scalar variables, you
 can obtain a “scalar cookie”(1) object for that variable, and then use
-the cookie for getting the variable’s value or for changing the
-variable’s value.  The ‘awk_scalar_t’ type holds a scalar cookie, and
+the cookie for getting the variable's value or for changing the
+variable's value.  The ‘awk_scalar_t’ type holds a scalar cookie, and
 the ‘scalar_cookie’ macro provides access to the value of that type in
 the ‘awk_value_t’ struct.  Given a scalar cookie, ‘gawk’ can directly
 retrieve or modify the value, as required, without having to find it
@@ -26573,11 +26542,11 @@ running ‘gawk’ process and reduces the time 
needed to create the value.
 
    ---------- Footnotes ----------
 
-   (1) See the “cookie” entry in the Jargon file
+   (1) See the "cookie" entry in the Jargon file
 (http://catb.org/jargon/html/C/cookie.html) for a definition of
-“cookie”, and the “magic cookie” entry in the Jargon file
+“cookie”, and the "magic cookie" entry in the Jargon file
 (http://catb.org/jargon/html/M/magic-cookie.html) for a nice example.
-See also the entry for “Cookie” in the *note Glossary::.
+See also the entry for "Cookie" in the *note Glossary::.
 
 
 File: gawk.info,  Node: Memory Allocation Functions,  Next: Constructor 
Functions,  Prev: General Data Types,  Up: Extension API Description
@@ -26670,13 +26639,13 @@ The functions are:
 
 ‘void *get_mpfr_ptr();’
      Allocate and initialize an MPFR object and return a pointer to it.
-     If the allocation fails, ‘gawk’ exits with a fatal “out of memory”
+     If the allocation fails, ‘gawk’ exits with a fatal "out of memory"
      error.  If ‘gawk’ was compiled without MPFR support, calling this
      function causes a fatal error.
 
 ‘void *get_mpz_ptr();’
      Allocate and initialize a GMP object and return a pointer to it.
-     If the allocation fails, ‘gawk’ exits with a fatal “out of memory”
+     If the allocation fails, ‘gawk’ exits with a fatal "out of memory"
      error.  If ‘gawk’ was compiled without MPFR support, calling this
      function causes a fatal error.
 
@@ -26724,7 +26693,7 @@ code would use them:
 
 ‘static inline awk_value_t *’
 ‘make_null_string(awk_value_t *result);’
-     This specialized function creates a null string (the “undefined”
+     This specialized function creates a null string (the "undefined"
      value) in the ‘awk_value_t’ variable pointed to by ‘result’.  It
      returns ‘result’.
 
@@ -26781,7 +26750,7 @@ File: gawk.info,  Node: API Ownership of MPFR and GMP 
Values,  Next: Registratio
 -----------------------------------
 
 MPFR and GMP values are different from string values, where you can
-“take ownership” of the value simply by assigning pointers.  For
+"take ownership" of the value simply by assigning pointers.  For
 example:
 
      char *p = gawk_malloc(42);      p ``owns'' the memory
@@ -26791,7 +26760,7 @@ example:
    MPFR and GMP objects are indeed allocated on the stack or
 dynamically, but the MPFR and GMP libraries treat these objects as
 values, the same way that you would pass an ‘int’ or a ‘double’ by
-value.  There is no way to “transfer ownership” of MPFR and GMP objects.
+value.  There is no way to "transfer ownership" of MPFR and GMP objects.
 
    The final results of an MPFR or GMP calculation should be passed back
 to ‘gawk’, by value, as you would a string or a ‘double’.  ‘gawk’ 
will
@@ -26864,7 +26833,7 @@ Extension functions are described by the following 
record:
 ‘awk_value_t *(*const function)(int num_actual_args,’
 ‘                              awk_value_t *result,’
 ‘                              struct awk_ext_func *finfo);’
-     This is a pointer to the C function that provides the extension’s
+     This is a pointer to the C function that provides the extension's
      functionality.  The function must fill in ‘*result’ with either a
      number, a string, or a regexp.  ‘gawk’ takes ownership of any
      string memory.  As mentioned earlier, string memory _must_ come
@@ -26953,7 +26922,7 @@ File: gawk.info,  Node: Exit Callback Functions,  Next: 
Extension Version String
 ..............................................
 
 An “exit callback” function is a function that ‘gawk’ calls before it
-exits.  Such functions are useful if you have general “cleanup” tasks
+exits.  Such functions are useful if you have general "cleanup" tasks
 that should be performed in your extension (such as closing database
 connections or other resource deallocations).  You can register such a
 function with ‘gawk’ using the following function:
@@ -26973,7 +26942,7 @@ function with ‘gawk’ using the following function:
           to the function pointed to by ‘funcp’.
 
    Exit callback functions are called in last-in, first-out (LIFO)
-order—that is, in the reverse order in which they are registered with
+order--that is, in the reverse order in which they are registered with
 ‘gawk’.
 
 
@@ -27006,7 +26975,7 @@ Files::).  Additionally, it sets the value of ‘RT’ 
(*note Built-in
 Variables::).
 
    If you want, you can provide your own custom input parser.  An input
-parser’s job is to return a record to the ‘gawk’ record-processing code,
+parser's job is to return a record to the ‘gawk’ record-processing code,
 along with indicators for the value and length of the data to be used
 for ‘RT’, if any.
 
@@ -27092,10 +27061,10 @@ as follows:
      the file, then ‘fd’ will _not_ be equal to ‘INVALID_HANDLE’.
      Otherwise, it will.
 
-     An extension can decide that it doesn’t want to use the open file
+     An extension can decide that it doesn't want to use the open file
      descriptor provided by ‘gawk’.  In such a case it can close the
      file and set ‘fd’ to ‘INVALID_HANDLE’, or it can leave it alone 
and
-     keep it’s own file descriptor in private data pointed to by the
+     keep it's own file descriptor in private data pointed to by the
      ‘opaque’ pointer (see further in this list).  In any case, if the
      file descriptor is valid, it should _not_ just overwrite the value
      with something else; doing so would cause a resource leak.
@@ -27106,14 +27075,14 @@ as follows:
      if the ‘lstat()’ system call is available, it will use that.  If
      ‘lstat()’ is not available, then it uses ‘stat()’.
 
-     Getting the file’s information allows extensions to check the type
+     Getting the file's information allows extensions to check the type
      of the file even if it could not be opened.  This occurs, for
      example, on Windows systems when trying to use ‘open()’ on a
      directory.
 
      If ‘gawk’ was not able to get the file information, then ‘sbuf’
      will be zeroed out.  In particular, extension code can check if
-     ‘sbuf.st_mode == 0’.  If that’s true, then there is no information
+     ‘sbuf.st_mode == 0’.  If that's true, then there is no information
      in ‘sbuf’.
 
    The ‘XXX_can_take_file()’ function should examine these fields and
@@ -27132,7 +27101,7 @@ may be filled by ‘XXX_take_control_of()’:
 
 ‘void *opaque;’
      This is used to hold any state information needed by the input
-     parser for this file.  It is “opaque” to ‘gawk’.  The input parser
+     parser for this file.  It is "opaque" to ‘gawk’.  The input parser
      is not required to use this pointer.
 
 ‘int (*get_record)(char **out,’
@@ -27153,14 +27122,14 @@ may be filled by ‘XXX_take_control_of()’:
 
 ‘void (*close_func)(struct awk_input *iobuf);’
      This function pointer should point to a function that does the
-     “teardown.” It should release any resources allocated by
+     "teardown."  It should release any resources allocated by
      ‘XXX_take_control_of()’.  It may also close the file.  If it does
      so, it should set the ‘fd’ field to ‘INVALID_HANDLE’.
 
      If ‘fd’ is still not ‘INVALID_HANDLE’ after the call to this
      function, ‘gawk’ calls the regular ‘close()’ system call.
 
-     Having a “teardown” function is optional.  If your input parser
+     Having a "teardown" function is optional.  If your input parser
      does not need it, do not set this field.  Then, ‘gawk’ calls the
      regular ‘close()’ system call on the file descriptor, so it should
      be valid.
@@ -27184,7 +27153,7 @@ records.  The parameters are as follows:
 
 ‘char **rt_start’
 ‘size_t *rt_len’
-     If the concept of a “record terminator” makes sense, then
+     If the concept of a "record terminator" makes sense, then
      ‘*rt_start’ should be set to point to the data to be used for 
‘RT’,
      and ‘*rt_len’ should be set to the length of the data.  Otherwise,
      ‘*rt_len’ should be set to zero.  Here too, ‘gawk’ makes its own
@@ -27381,7 +27350,7 @@ in the ‘awk_output_buf_t’.  The data members are as 
follows:
      These pointers should be set to point to functions that perform the
      equivalent function as the ‘<stdio.h>’ functions do, if
      appropriate.  ‘gawk’ uses these function pointers for all output.
-     ‘gawk’ initializes the pointers to point to internal 
“pass-through”
+     ‘gawk’ initializes the pointers to point to internal "pass-through"
      functions that just call the regular ‘<stdio.h>’ functions, so an
      extension only needs to redefine those functions that are
      appropriate for what it does.
@@ -27393,7 +27362,7 @@ file for writing.  The ‘fp’ member will be 
‘NULL’ only if it fails.
 
    When ‘gawk’ calls ‘XXX_take_control_of()’, that function should fill
 in the other fields as appropriate, except for ‘fp’, which it should
-just use normally if it’s not ‘NULL’.
+just use normally if it's not ‘NULL’.
 
    You register your output wrapper with the following function:
 
@@ -27445,8 +27414,8 @@ structures as described earlier.
      This is for use by ‘gawk’; therefore it is marked ‘awk_const’ so
      that the extension cannot modify it.
 
-   As with the input parser and output processor, you provide “yes I can
-take this” and “take over for this” functions, 
‘XXX_can_take_two_way()’
+   As with the input parser and output processor, you provide "yes I can
+take this" and "take over for this" functions, ‘XXX_can_take_two_way()’
 and ‘XXX_take_control_of()’.
 
    You register your two-way processor with the following function:
@@ -27475,7 +27444,7 @@ extension ID received from ‘gawk’ when the 
extension was loaded:(1)
      Print a warning message.
 
 ‘void lintwarn(awk_ext_id_t id, const char *format, ...);’
-     Print a “lint warning.” Normally this is the same as printing a
+     Print a "lint warning."  Normally this is the same as printing a
      warning message, but if ‘gawk’ was invoked with ‘--lint=fatal’,
      then lint warnings become fatal error messages.
 
@@ -27486,7 +27455,7 @@ characters and formatting codes intermixed.
    ---------- Footnotes ----------
 
    (1) Because the API uses only ISO C 90 features, it cannot make use
-of the ISO C 99 variadic macro feature to hide that parameter.  More’s
+of the ISO C 99 variadic macro feature to hide that parameter.  More's
 the pity.
 
 
@@ -27525,7 +27494,6 @@ of the actual value.  You may then print an error 
message or reissue the
 request for the actual value type, as appropriate.  This behavior is
 summarized in *note Table 17.2: table-value-types-returned.
 
-
                                      Type of Actual Value
 --------------------------------------------------------------------------
                         String   Strnum   Number   Regex   Bool     Array   
Undefined
@@ -27559,14 +27527,14 @@ your extension function.  They are:
      ‘count’th argument.  Return true if the actual type matches
      ‘wanted’, and false otherwise.  In the latter case,
      ‘result->val_type’ indicates the actual type (*note Table 17.2:
-     table-value-types-returned.).  Counts are zero-based—the first
+     table-value-types-returned.).  Counts are zero-based--the first
      argument is numbered zero, the second one, and so on.  ‘wanted’
      indicates the type of value expected.
 
 ‘awk_bool_t set_argument(size_t count, awk_array_t array);’
      Convert a parameter that was undefined into an array; this provides
      call by reference for arrays.  Return false if ‘count’ is too big,
-     or if the argument’s type is not undefined.  *Note Array
+     or if the argument's type is not undefined.  *Note Array
      Manipulation:: for more information on creating arrays.
 
 
@@ -27581,7 +27549,7 @@ allows you to create and release cached values.
 * Menu:
 
 * Symbol table by name::        Accessing variables by name.
-* Symbol table by cookie::      Accessing variables by “cookie”.
+* Symbol table by cookie::      Accessing variables by "cookie".
 * Cached values::               Creating and using cached values.
 
 
@@ -27592,7 +27560,7 @@ File: gawk.info,  Node: Symbol table by name,  Next: 
Symbol table by cookie,  Up
 
 The following routines provide the ability to access and update global
 ‘awk’-level variables by name.  In compiler terminology, identifiers of
-different kinds are termed “symbols”, thus the “sym” in the routines’
+different kinds are termed “symbols”, thus the "sym" in the routines'
 names.  The data structure that stores information about symbols is
 termed a “symbol table”.  The functions are as follows:
 
@@ -27620,7 +27588,7 @@ termed a “symbol table”.  The functions are as 
follows:
 
 ‘awk_bool_t sym_update(const char *name, awk_value_t *value);’
      Update the variable named by the string ‘name’, which is a regular
-     C string.  The variable is added to ‘gawk’’s symbol table if it is
+     C string.  The variable is added to ‘gawk’'s symbol table if it is
      not there.  Return true if everything worked, and false otherwise.
 
      Changing types (scalar to array or vice versa) of an existing
@@ -27634,7 +27602,7 @@ termed a “symbol table”.  The functions are as 
follows:
      cannot be ‘NULL’.  If it is ‘""’ or ‘"awk"’, then ‘name’ 
is
      searched for in the default ‘awk’ namespace.
 
-   An extension can look up the value of ‘gawk’’s special variables.
+   An extension can look up the value of ‘gawk’'s special variables.
 However, with the exception of the ‘PROCINFO’ array, an extension cannot
 change any of those variables.
 
@@ -27656,7 +27624,7 @@ File: gawk.info,  Node: Symbol table by cookie,  Next: 
Cached values,  Prev: Sym
 
 A “scalar cookie” is an opaque handle that provides access to a global
 variable or array.  It is an optimization that avoids looking up
-variables in ‘gawk’’s symbol table every time access is needed.  This
+variables in ‘gawk’'s symbol table every time access is needed.  This
 was discussed earlier, in *note General Data Types::.
 
    The following functions let you work with scalar cookies:
@@ -27676,7 +27644,7 @@ was discussed earlier, in *note General Data Types::.
      may not be updated.
 
    It is not obvious at first glance how to work with scalar cookies or
-what their raison d’être really is.  In theory, the ‘sym_lookup()’ and
+what their raison d'être really is.  In theory, the ‘sym_lookup()’ and
 ‘sym_update()’ routines are all you really need to work with variables.
 For example, you might have code that looks up the value of a variable,
 evaluates a condition, and then possibly changes the value of the
@@ -27698,7 +27666,7 @@ variable based on the result of that evaluation, like 
so:
          return make_number(0.0, result);
      }
 
-This code looks (and is) simple and straightforward.  So what’s the
+This code looks (and is) simple and straightforward.  So what's the
 problem?
 
    Well, consider what happens if ‘awk’-level code associated with your
@@ -27709,10 +27677,10 @@ symbol table once or twice per function call!
 
    The symbol table lookup is really pure overhead; it is considerably
 more efficient to get a cookie that represents the variable, and use
-that to get the variable’s value and update it as needed.(1)
+that to get the variable's value and update it as needed.(1)
 
    Thus, the way to use cookies is as follows.  First, install your
-extension’s variable in ‘gawk’’s symbol table using 
‘sym_update()’, as
+extension's variable in ‘gawk’'s symbol table using ‘sym_update()’, as
 usual.  Then get a scalar cookie for the variable using ‘sym_lookup()’:
 
      static awk_scalar_t magic_var_cookie;    /* cookie for MAGIC_VAR */
@@ -27775,7 +27743,7 @@ necessary.  You can create numbers and strings using 
the functions in
 variables using ‘sym_update()’ or ‘sym_update_scalar()’, as you like.
 
    However, you can understand the point of cached values if you
-remember that _every_ string value’s storage _must_ come from
+remember that _every_ string value's storage _must_ come from
 ‘gawk_malloc()’, ‘gawk_calloc()’, or ‘gawk_realloc()’.  If you 
have 20
 variables, all of which have the same string value, you must create 20
 identical copies of the string.(1)
@@ -27839,14 +27807,14 @@ of variables:
 Using value cookies in this way saves considerable storage, as all of
 ‘VAR1’ through ‘VAR100’ share the same value.
 
-   You might be wondering, “Is this sharing problematic?  What happens
+   You might be wondering, "Is this sharing problematic?  What happens
 if ‘awk’ code assigns a new value to ‘VAR1’; are all the others changed
-too?”
+too?"
 
-   That’s a great question.  The answer is that no, it’s not a problem.
+   That's a great question.  The answer is that no, it's not a problem.
 Internally, ‘gawk’ uses “reference-counted strings”.  This means that
 many variables can share the same string value, and ‘gawk’ keeps track
-of the usage.  When a variable’s value changes, ‘gawk’ simply decrements
+of the usage.  When a variable's value changes, ‘gawk’ simply decrements
 the reference count on the old value and updates the variable to use the
 new value.
 
@@ -27870,7 +27838,7 @@ The primary data structure(1) in ‘awk’ is the 
associative array (*note
 Arrays::).  Extensions need to be able to manipulate ‘awk’ arrays.  The
 API provides a number of data structures for working with arrays,
 functions for working with individual elements, and functions for
-working with arrays as a whole.  This includes the ability to “flatten”
+working with arrays as a whole.  This includes the ability to "flatten"
 an array so that it is easy for C code to traverse every element in an
 array.  The array data structures integrate nicely with the data
 structures for values to make it easy to both work with and create true
@@ -27913,7 +27881,7 @@ The data types associated with arrays are as follows:
 ‘    awk_value_t index;’
 ‘    awk_value_t value;’
 ‘} awk_element_t;’
-     The ‘awk_element_t’ is a “flattened” array element.  ‘awk’ 
produces
+     The ‘awk_element_t’ is a "flattened" array element.  ‘awk’ 
produces
      an array of these inside the ‘awk_flat_array_t’ (see the next
      item).  Individual elements may be marked for deletion.  New
      elements must be added individually, one at a time, using the
@@ -27951,7 +27919,7 @@ The data types associated with arrays are as follows:
 
    ---------- Footnotes ----------
 
-   (1) It is also a “cookie,” but the ‘gawk’ developers did not wish to
+   (1) It is also a "cookie," but the ‘gawk’ developers did not wish to
 overuse this term.
 
 
@@ -28167,7 +28135,7 @@ second argument is numbered one:
              goto out;
          }
 
-   The fifth step is where the “real work” is done.  The function loops
+   The fifth step is where the "real work" is done.  The function loops
 over every element in the array, printing the index and element values.
 In addition, upon finding the element with the index that is supposed to
 be deleted, the function sets the ‘AWK_ELEMENT_DELETE’ bit in the
@@ -28237,7 +28205,7 @@ and manipulate them.
    There are two important points about creating arrays from extension
 code:
 
-   • You must install a new array into ‘gawk’’s symbol table 
immediately
+   • You must install a new array into ‘gawk’'s symbol table immediately
      upon creating it.  Once you have done so, you can then populate the
      array.
 
@@ -28245,8 +28213,8 @@ code:
      array, you must add the new array to its parent before adding any
      elements to it.
 
-     Thus, the correct way to build an array is to work “top down.”
-     Create the array, and immediately install it in ‘gawk’’s symbol
+     Thus, the correct way to build an array is to work "top down."
+     Create the array, and immediately install it in ‘gawk’'s symbol
      table using ‘sym_update()’, or install it as an element in a
      previously existing array using ‘set_array_element()’.  We show
      example code shortly.
@@ -28378,7 +28346,7 @@ redirections.
 ‘                    int fd,’
 ‘                    const awk_input_buf_t **ibufp,’
 ‘                    const awk_output_buf_t **obufp);’
-     Look up file ‘name’ in ‘gawk’’s internal redirection table.  If
+     Look up file ‘name’ in ‘gawk’'s internal redirection table.  If
      ‘name’ is ‘NULL’ or ‘name_len’ is zero, return data for the
      currently open input file corresponding to ‘FILENAME’.  (This does
      not access the ‘filetype’ argument, so that may be undefined).  If
@@ -28417,7 +28385,7 @@ redirections.
      and the ‘fd’ argument is nonnegative, ‘gawk’ will use that file
      descriptor instead of opening the file in the usual way.  If ‘fd’
      is nonnegative, but the file exists already, ‘gawk’ ignores ‘fd’
-     and returns the existing file.  It is the caller’s responsibility
+     and returns the existing file.  It is the caller's responsibility
      to notice that neither the ‘fd’ in the returned ‘awk_input_buf_t’
      nor the ‘fd’ in the returned ‘awk_output_buf_t’ matches the
      requested value.
@@ -28449,7 +28417,7 @@ information about how ‘gawk’ was invoked.
 * Extension Versioning::          API Version information.
 * Extension GMP/MPFR Versioning:: Version information about GMP and MPFR.
 * Extension API Informational Variables:: Variables providing information about
-                                  ‘gawk’’s invocation.
+                                  ‘gawk’'s invocation.
 
 
 File: gawk.info,  Node: Extension Versioning,  Next: Extension GMP/MPFR 
Versioning,  Up: Extension API Variables
@@ -28457,12 +28425,11 @@ File: gawk.info,  Node: Extension Versioning,  Next: 
Extension GMP/MPFR Versioni
 17.4.14.1 API Version Constants and Variables
 .............................................
 
-The API provides both a “major” and a “minor” version number.  The API
+The API provides both a "major" and a "minor" version number.  The API
 versions are available at compile time as C preprocessor defines to
 support conditional compilation, and as enum constants to facilitate
 debugging:
 
-
 API Version   C Preprocessor Define      enum constant
 --------------------------------------------------------------------
 Major         ‘gawk_api_major_version’   ‘GAWK_API_MAJOR_VERSION’
@@ -28540,7 +28507,7 @@ match those of ‘gawk’ with the following macro:
 
      If you have included that file, then this macro compares the MPFR
      and GMP major and minor versions against those of the library you
-     are compiling against.  If your libraries are newer than ‘gawk’’s,
+     are compiling against.  If your libraries are newer than ‘gawk’'s,
      it produces a fatal error message.
 
      The ‘dl_load_func()’ macro (*note Extension API Boilerplate::)
@@ -28661,7 +28628,7 @@ the ‘gawkapi.h’ header file:
      function should return ‘awk_false’ upon failure, or ‘awk_true’ if
      everything goes well.
 
-     If you don’t need to do any initialization, define the pointer and
+     If you don't need to do any initialization, define the pointer and
      initialize it to ‘NULL’.
 
 ‘dl_load_func(func_table, some_name, "name_space_in_quotes")’
@@ -28673,8 +28640,8 @@ function (from the ‘dl_load_func()’ macro) do all 
the standard work.  It
 does the following:
 
   1. Check the API versions.  If the extension major version does not
-     match ‘gawk’’s, or if the extension minor version is greater than
-     ‘gawk’’s, it prints a fatal error message and exits.
+     match ‘gawk’'s, or if the extension minor version is greater than
+     ‘gawk’'s, it prints a fatal error message and exits.
 
   2. Check the MPFR and GMP versions.  If there is a mismatch, it prints
      a fatal error message and exits.
@@ -28699,7 +28666,7 @@ You will have to recompile your extensions in order to 
use them with the
 current version of ‘gawk’.
 
    Fortunately, at the possible expense of some compile-time warnings,
-the API remains source-code–compatible with the previous API. The major
+the API remains source-code-compatible with the previous API. The major
 differences are the additional members in the ‘awk_ext_func_t’
 structure, and the addition of the third argument to the C
 implementation function (*note Extension Functions::).
@@ -28749,7 +28716,7 @@ File: gawk.info,  Node: Extension Example,  Next: 
Extension Samples,  Prev: Find
 =================================
 
      No matter where you go, there you are.
-                          — _Buckaroo Banzai_
+                         -- _Buckaroo Banzai_
 
    Two useful functions that are not in ‘awk’ are ‘chdir()’ (so that an
 ‘awk’ program can change its directory) and ‘stat()’ (so that an 
‘awk’
@@ -28770,7 +28737,7 @@ File: gawk.info,  Node: Internal File Description,  
Next: Internal File Ops,  Up
 -----------------------------------
 
 This minor node shows how to use the new functions at the ‘awk’ level
-once they’ve been integrated into the running ‘gawk’ interpreter.  Using
+once they've been integrated into the running ‘gawk’ interpreter.  Using
 ‘chdir()’ is very straightforward.  It takes one argument, the new
 directory to change to:
 
@@ -28809,10 +28776,10 @@ appropriate information:
 
 ‘"dev"’
 ‘"ino"’
-     The file’s device and inode numbers, respectively.
+     The file's device and inode numbers, respectively.
 
 ‘"mode"’
-     The file’s mode, as a numeric value.  This includes both the file’s
+     The file's mode, as a numeric value.  This includes both the file's
      type and its permissions.
 
 ‘"nlink"’
@@ -28820,34 +28787,34 @@ appropriate information:
 
 ‘"uid"’
 ‘"gid"’
-     The numeric user and group ID numbers of the file’s owner.
+     The numeric user and group ID numbers of the file's owner.
 
 ‘"size"’
      The size in bytes of the file.
 
 ‘"blocks"’
      The number of disk blocks the file actually occupies.  This may not
-     be a function of the file’s size if the file has holes.
+     be a function of the file's size if the file has holes.
 
 ‘"atime"’
 ‘"mtime"’
 ‘"ctime"’
-     The file’s last access, modification, and inode update times,
+     The file's last access, modification, and inode update times,
      respectively.  These are numeric timestamps, suitable for
      formatting with ‘strftime()’ (*note Time Functions::).
 
 ‘"pmode"’
-     The file’s “printable mode.” This is a string representation of the
-     file’s type and permissions, such as is produced by ‘ls -l’—for
-     example, ‘"drwxr-xr-x"’.
+     The file's "printable mode."  This is a string representation of
+     the file's type and permissions, such as is produced by ‘ls
+     -l’--for example, ‘"drwxr-xr-x"’.
 
 ‘"type"’
-     A printable string representation of the file’s type.  The value is
+     A printable string representation of the file's type.  The value is
      one of the following:
 
      ‘"blockdev"’
      ‘"chardev"’
-          The file is a block or character device (“special file”).
+          The file is a block or character device ("special file").
 
      ‘"directory"’
           The file is a directory.
@@ -28859,7 +28826,7 @@ appropriate information:
           The file is just a regular file.
 
      ‘"socket"’
-          The file is an ‘AF_UNIX’ (“Unix domain”) socket in the
+          The file is an ‘AF_UNIX’ ("Unix domain") socket in the
           filesystem.
 
      ‘"symlink"’
@@ -29196,7 +29163,7 @@ done, the function returns the result from 
‘fill_stat_array()’:
          return make_number(ret, result);
      }
 
-   Finally, it’s necessary to provide the “glue” that loads the new
+   Finally, it's necessary to provide the "glue" that loads the new
 function(s) into ‘gawk’.
 
    The ‘filefuncs’ extension also provides an ‘fts()’ function, which 
we
@@ -29228,7 +29195,7 @@ everything that needs to be loaded.  It is simplest to 
use the
 
      dl_load_func(func_table, filefuncs, "")
 
-   And that’s it!
+   And that's it!
 
    ---------- Footnotes ----------
 
@@ -29400,7 +29367,7 @@ follows.  The usage is:
      ‘"linkval"’ The value of the symbolic link       Symbolic
                                                       links
      ‘"type"’    The type of the file as a            All
-                 string—one of ‘"file"’,
+                 string--one of ‘"file"’,
                  ‘"blockdev"’, ‘"chardev"’,
                  ‘"directory"’, ‘"socket"’,
                  ‘"fifo"’, ‘"symlink"’, ‘"door"’,
@@ -29433,13 +29400,13 @@ requested hierarchies.
      value and sets ‘ERRNO’.  The flags are:
 
      ‘FTS_LOGICAL’
-          Do a “logical” file traversal, where the information returned
+          Do a "logical" file traversal, where the information returned
           for a symbolic link refers to the linked-to file, and not to
           the symbolic link itself.  This flag is mutually exclusive
           with ‘FTS_PHYSICAL’.
 
      ‘FTS_PHYSICAL’
-          Do a “physical” file traversal, where the information returned
+          Do a "physical" file traversal, where the information returned
           for a symbolic link refers to the symbolic link itself.  This
           flag is mutually exclusive with ‘FTS_LOGICAL’.
 
@@ -29473,7 +29440,7 @@ requested hierarchies.
           In this case, the array contains two or three elements:
 
           ‘"path"’
-               The full path to this file, starting from the “root” that
+               The full path to this file, starting from the "root" that
                was given in the ‘pathlist’ array.
 
           ‘"stat"’
@@ -29611,8 +29578,8 @@ File: gawk.info,  Node: Extension Sample Inplace,  
Next: Extension Sample Ord,
 17.7.4 Enabling In-Place File Editing
 -------------------------------------
 
-The ‘inplace’ extension emulates GNU ‘sed’’s ‘-i’ option, which 
performs
-“in-place” editing of each input file.  It uses the bundled
+The ‘inplace’ extension emulates GNU ‘sed’'s ‘-i’ option, which 
performs
+"in-place" editing of each input file.  It uses the bundled
 ‘inplace.awk’ include file to invoke the extension properly.  This
 extension makes use of the namespace facility to place all the variables
 and functions in the ‘inplace’ namespace (*note Namespaces::):
@@ -29743,7 +29710,6 @@ the third field is a single letter indicating the type 
of the file.  The
 letters and their corresponding file types are shown in *note Table
 17.4: table-readdir-file-types.
 
-
 Letter  File type
 --------------------------------------------------------------------------
 ‘b’     Block device
@@ -29760,7 +29726,7 @@ Table 17.4: File types returned by the ‘readdir’ 
extension
 third field is filled in from that information.  On systems without the
 file type information, the extension falls back to calling the ‘stat()’
 system call in order to provide the information.  Thus the third field
-should never be ‘u’ (for “unknown”).
+should never be ‘u’ (for "unknown").
 
    Normally, when reading directories, you should set ‘FS’ equal to
 ‘"/"’.  However, you may instead chose to create
@@ -29968,7 +29934,7 @@ The ‘time’ extension adds three functions, named 
‘gettimeofday()’
      ‘mktime()’ function, and its result is returned, expressing the
      time in seconds since the epoch in the current local timezone,
      regardless of any timezone specified in the string arguments.
-     (This is the same as ‘gawk’’s built-in ‘systime()’ function.)
+     (This is the same as ‘gawk’'s built-in ‘systime()’ function.)
      Otherwise it returns −1 upon error.  In the latter case,
 
      Note that the underlying ‘strptime()’ C library routine apparently
@@ -30010,7 +29976,7 @@ are:
      C.
 
    • MPFR library extension.  This provides access to a number of MPFR
-     functions that ‘gawk’’s native MPFR support does not.
+     functions that ‘gawk’'s native MPFR support does not.
 
    • Select extension.  It provides functionality based on the
      ‘select()’ system call.
@@ -30054,7 +30020,7 @@ upon how your system works.
 
    If you write an extension that you wish to share with other ‘gawk’
 users, consider doing so through the ‘gawkextlib’ project.  See the
-project’s website for more information.
+project's website for more information.
 
 
 File: gawk.info,  Node: Extension summary,  Next: Extension Exercises,  Prev: 
gawkextlib,  Up: Dynamic Extensions
@@ -30076,7 +30042,7 @@ File: gawk.info,  Node: Extension summary,  Next: 
Extension Exercises,  Prev: ga
      ‘gawk’ via the supplied function pointers to accomplish certain
      tasks.
 
-   • One of these tasks is to “register” the name and implementation of
+   • One of these tasks is to "register" the name and implementation of
      new ‘awk’-level functions with ‘gawk’.  The implementation takes
      the form of a C function pointer with a defined signature.  By
      convention, implementation functions are named ‘do_XXXX()’ for some
@@ -30095,7 +30061,7 @@ File: gawk.info,  Node: Extension summary,  Next: 
Extension Exercises,  Prev: ga
           exit callbacks, a version string, input parsers, output
           wrappers, and two-way processors)
 
-        • Printing fatal, nonfatal, warning, and “lint” warning messages
+        • Printing fatal, nonfatal, warning, and "lint" warning messages
 
         • Updating ‘ERRNO’, or unsetting it
 
@@ -30127,7 +30093,7 @@ File: gawk.info,  Node: Extension summary,  Next: 
Extension Exercises,  Prev: ga
      read-only by the extension.
 
    • _All_ memory passed from an extension to ‘gawk’ must come from the
-     API’s memory allocation functions.  ‘gawk’ takes responsibility for
+     API's memory allocation functions.  ‘gawk’ takes responsibility for
      the memory and releases it when appropriate.
 
    • The API provides information about the running version of ‘gawk’ so
@@ -30155,7 +30121,7 @@ File: gawk.info,  Node: Extension Exercises,  Prev: 
Extension summary,  Up: Dyna
      in *note Internal File Ops::.
 
   2. Write an input parser that prints a prompt if the input is a from a
-     “terminal” device.  You can use the ‘isatty()’ function to tell if
+     "terminal" device.  You can use the ‘isatty()’ function to tell if
      the input file is a terminal.  (Hint: this function is usually
      expensive to call; try to call it just once.)  The content of the
      prompt should come from a variable settable by ‘awk’-level code.
@@ -30169,7 +30135,7 @@ File: gawk.info,  Node: Extension Exercises,  Prev: 
Extension summary,  Up: Dyna
      the one to get a record, or the one to read raw bytes?
 
   3. Write a wrapper script that provides an interface similar to ‘sed
-     -i’ for the “inplace” extension presented in *note Extension Sample
+     -i’ for the "inplace" extension presented in *note Extension Sample
      Inplace::.
 
 
@@ -30195,7 +30161,7 @@ where you can find more information.
 * SVR4::                        Minor changes between System V Releases 3.1
                                 and 4.
 * POSIX::                       New features from the POSIX standard.
-* BTL::                         New features from Brian Kernighan’s version 
of
+* BTL::                         New features from Brian Kernighan's version of
                                 ‘awk’.
 * POSIX/GNU::                   The extensions in ‘gawk’ not in POSIX
                                 ‘awk’.
@@ -30353,7 +30319,7 @@ permitted by the POSIX standard.
 
 File: gawk.info,  Node: BTL,  Next: POSIX/GNU,  Prev: POSIX,  Up: Language 
History
 
-A.4 Extensions in Brian Kernighan’s ‘awk’
+A.4 Extensions in Brian Kernighan's ‘awk’
 =========================================
 
 Brian Kernighan has made his version available via his home page (*note
@@ -30452,7 +30418,7 @@ current version of ‘gawk’.
         − Positional specifiers in ‘printf’ formats for making
           translations easier (*note Printf Ordering::)
 
-        − The ‘split()’ function’s additional optional fourth argument,
+        − The ‘split()’ function's additional optional fourth argument,
           which is an array to hold the text of the field separators
           (*note String Functions::)
 
@@ -30673,7 +30639,7 @@ POSIX ‘awk’, in the order they were added to 
‘gawk’.
         − ‘PROCINFO’, an array for providing process-related
           information.
 
-        − ‘TEXTDOMAIN’, for setting an application’s
+        − ‘TEXTDOMAIN’, for setting an application's
           internationalization text domain (*note
           Internationalization::).
 
@@ -30738,13 +30704,13 @@ POSIX ‘awk’, in the order they were added to 
‘gawk’.
           (*note Profiling::).
 
         − The ‘--use-lc-numeric’ option to force ‘gawk’ to use the
-          locale’s decimal point for parsing input data (*note
+          locale's decimal point for parsing input data (*note
           Conversion::).
 
    • The use of GNU Automake to help in standardizing the configuration
      process (*note Quick Installation::).
 
-   • The use of GNU ‘gettext’ for ‘gawk’’s own message output 
(*note
+   • The use of GNU ‘gettext’ for ‘gawk’'s own message output (*note
      Gawk I18N::).
 
    • BeOS support.  This was later removed.
@@ -30943,7 +30909,7 @@ POSIX ‘awk’, in the order they were added to 
‘gawk’.
 
    Version 4.2 of ‘gawk’ introduced the following changes:
 
-   • Changes to ‘ENVIRON’ are reflected into ‘gawk’’s environment 
and
+   • Changes to ‘ENVIRON’ are reflected into ‘gawk’'s environment and
      that of programs that it runs.  *Note Auto-set::.
 
    • ‘FIELDWIDTHS’ was enhanced to allow skipping characters before
@@ -31038,7 +31004,7 @@ unfortunately.  It added the following features:
    • Several example programs in the manual were updated to their modern
      POSIX equivalents.
 
-   • The “no effect” lint warnings from ‘--lint’ were fixed up and 
now
+   • The "no effect" lint warnings from ‘--lint’ were fixed up and now
      behave more sanely (*note Options::).
 
    • Handling of Infinity and NaN values were improved.  *Note Math
@@ -31056,7 +31022,7 @@ unfortunately.  It added the following features:
 
    • The ‘gawkbug’ script for reporting bugs (*note Bug address::).
 
-   • Terence Kelly’s persistent memory allocator (PMA) was added,
+   • Terence Kelly's persistent memory allocator (PMA) was added,
      allowing the use of persistent data on certain systems (*note
      Persistent Memory::).
 
@@ -31090,7 +31056,7 @@ A.7 Common Extensions Summary
 =============================
 
 The following table summarizes the common extensions supported by
-‘gawk’, Brian Kernighan’s ‘awk’, and ‘mawk’, the three most 
widely used
+‘gawk’, Brian Kernighan's ‘awk’, and ‘mawk’, the three most widely 
used
 freely available versions of ‘awk’ (*note Other Versions::).
 
 Feature                      BWK ‘awk’   ‘mawk’   ‘gawk’   Now 
standard
@@ -31126,7 +31092,7 @@ different versions of ‘gawk’.
 character ranges (such as ‘[a-z]’) to match any character between the
 first character in the range and the last character in the range,
 inclusive.  Ordering was based on the numeric value of each character in
-the machine’s native character set.  Thus, on ASCII-based systems,
+the machine's native character set.  Thus, on ASCII-based systems,
 ‘[a-z]’ matched all the lowercase letters, and only the lowercase
 letters, as the numeric values for the letters from ‘a’ through ‘z’ 
were
 contiguous.  (On an EBCDIC system, the range ‘[a-z]’ includes additional
@@ -31134,8 +31100,8 @@ nonalphabetic characters as well.)
 
    Almost all introductory Unix literature explained range expressions
 as working in this fashion, and in particular, would teach that the
-“correct” way to match lowercase letters was with ‘[a-z]’, and that
-‘[A-Z]’ was the “correct” way to match uppercase letters.  And indeed,
+"correct" way to match lowercase letters was with ‘[a-z]’, and that
+‘[A-Z]’ was the "correct" way to match uppercase letters.  And indeed,
 this was true.(1)
 
    The 1992 POSIX standard introduced the idea of locales (*note
@@ -31183,12 +31149,12 @@ locale-aware, so ranges had their traditional 
interpretation.
    When ‘gawk’ switched to using locale-aware regexp matchers, the
 problems began; especially as both GNU/Linux and commercial Unix vendors
 started implementing non-ASCII locales, _and making them the default_.
-Perhaps the most frequently asked question became something like, “Why
-does ‘[A-Z]’ match lowercase letters?!?”
+Perhaps the most frequently asked question became something like, "Why
+does ‘[A-Z]’ match lowercase letters?!?"
 
    This situation existed for close to 10 years, if not more, and the
 ‘gawk’ maintainer grew weary of trying to explain that ‘gawk’ was being
-nicely standards-compliant, and that the issue was in the user’s locale.
+nicely standards-compliant, and that the issue was in the user's locale.
 During the development of version 4.0, he modified ‘gawk’ to always
 treat ranges in the original, pre-POSIX fashion, unless ‘--posix’ was
 used (*note Options::).(2)
@@ -31210,8 +31176,8 @@ In all cases ‘gawk’ remains POSIX-compliant.
 
    (2) And thus was born the Campaign for Rational Range Interpretation
 (or RRI). A number of GNU tools have already implemented this change, or
-will soon.  Thanks to Karl Berry for coining the phrase “Rational Range
-Interpretation.”
+will soon.  Thanks to Karl Berry for coining the phrase "Rational Range
+Interpretation."
 
    (3) See the standard
 
(https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05)
@@ -31225,7 +31191,7 @@ A.9 Major Contributors to ‘gawk’
 ================================
 
      Always give credit where credit is due.
-                             — _Anonymous_
+                            -- _Anonymous_
 
    This minor node names the major contributors to ‘gawk’ and/or this
 Info file, in approximate chronological order:
@@ -31250,7 +31216,7 @@ Info file, in approximate chronological order:
      initial version of ‘gawk’.
 
    • In 1988, David Trueman took over primary maintenance of ‘gawk’,
-     making it compatible with “new” ‘awk’, and greatly improving its
+     making it compatible with "new" ‘awk’, and greatly improving its
      performance.
 
    • Conrad Kwok, Scott Garfinkle, and Kent Williams did the initial
@@ -31270,7 +31236,7 @@ Info file, in approximate chronological order:
      sure ‘gawk’ works on non-32-bit systems.
 
    • Fred Fish provided the port to Amiga systems and its documentation.
-     (With Fred’s sad passing, this is no longer supported.)
+     (With Fred's sad passing, this is no longer supported.)
 
    • Scott Deifik formerly maintained the MS-DOS port using DJGPP.
 
@@ -31300,7 +31266,7 @@ Info file, in approximate chronological order:
      the work enabling the pretty-printer to preserve and output
      comments.
 
-   • Matthew Woehlke provided improvements for Tandem’s POSIX-compliant
+   • Matthew Woehlke provided improvements for Tandem's POSIX-compliant
      systems.
 
    • Martin Brown provided the port to BeOS and its documentation.
@@ -31370,7 +31336,7 @@ Info file, in approximate chronological order:
 
    • Juan Manuel Guerrero took over maintenance of the DJGPP port.
 
-   • “Jannick” provided support for MSYS2.
+   • "Jannick" provided support for MSYS2.
 
    • Arnold Robbins has been working on ‘gawk’ since 1988, at first
      helping David Trueman, and as the primary maintainer since around
@@ -31389,7 +31355,7 @@ A.10 Summary
      1989.  Since then, further minor changes have happened under the
      auspices of the POSIX standard.
 
-   • Brian Kernighan’s ‘awk’ provides a small number of extensions that
+   • Brian Kernighan's ‘awk’ provides a small number of extensions that
      are implemented in common with other versions of ‘awk’.
 
    • ‘gawk’ provides a large number of extensions over POSIX ‘awk’.
@@ -31399,7 +31365,7 @@ A.10 Summary
    • The interaction of POSIX locales and regexp matching in ‘gawk’ has
      been confusing over the years.  Today, ‘gawk’ implements Rational
      Range Interpretation, where ranges of the form ‘[a-z]’ match _only_
-     the characters numerically between ‘a’ through ‘z’ in the 
machine’s
+     the characters numerically between ‘a’ through ‘z’ in the 
machine's
      native character set.  Usually this is ASCII, but it can be EBCDIC
      on IBM S/390 systems.
 
@@ -31502,8 +31468,8 @@ release of version V, and the P represents a “patch 
level”, meaning that
 minor bugs have been fixed in the release.  The current patch level is
 0, but when retrieving distributions, you should get the version with
 the highest version, release, and patch level.  (Note, however, that
-patch levels greater than or equal to 60 denote “beta” or nonproduction
-software; you might not want to retrieve such a version unless you don’t
+patch levels greater than or equal to 60 denote "beta" or nonproduction
+software; you might not want to retrieve such a version unless you don't
 mind experimenting.)  If you are not on a Unix or GNU/Linux system, you
 need to make other arrangements for getting and extracting the ‘gawk’
 distribution.  You should consult a local expert.
@@ -31578,7 +31544,7 @@ Various ‘.c’, ‘.y’, and ‘.h’ files
      programming.
 
 ‘doc/bc_notes’
-     A brief description of ‘gawk’’s “byte code” internals.
+     A brief description of ‘gawk’'s "byte code" internals.
 
 ‘doc/README.card’
 ‘doc/ad.block’
@@ -31738,7 +31704,7 @@ for your system yourself.
 * Quick Installation::               Compiling ‘gawk’ under Unix.
 * Shell Startup Files::              Shell convenience functions.
 * Additional Configuration Options:: Other compile-time options.
-* Configuration Philosophy::         How it’s all supposed to work.
+* Configuration Philosophy::         How it's all supposed to work.
 * Compiling from Git::               Compiling from Git.
 * Building the Documentation::       Building the Documentation.
 
@@ -31787,13 +31753,13 @@ type:
      make
 
 Shortly thereafter, you should have an executable version of ‘gawk’.
-That’s all there is to it!  To verify that ‘gawk’ is working properly,
+That's all there is to it!  To verify that ‘gawk’ is working properly,
 run ‘make check’.  All of the tests should succeed.  If these steps do
 not work, or if any of the tests fail, check the files in the ‘README_d’
-directory to see if you’ve found a known problem.  If the failure is not
+directory to see if you've found a known problem.  If the failure is not
 described there, send in a bug report (*note Bugs::).
 
-   Of course, once you’ve built ‘gawk’, it is likely that you will wish
+   Of course, once you've built ‘gawk’, it is likely that you will wish
 to install it.  To do so, you need to run the command ‘make install’, as
 a user with the appropriate permissions.  How to do this varies by
 system, but on many systems you can use the ‘sudo’ command to do so.
@@ -31877,7 +31843,7 @@ command line when compiling ‘gawk’ from scratch, 
including:
      do nothing.  Similarly, setting the ‘LINT’ variable (*note
      User-modified::) has no effect on the running ‘awk’ program.
 
-     When used with the GNU Compiler Collection’s (GCC’s) automatic
+     When used with the GNU Compiler Collection's (GCC's) automatic
      dead-code-elimination, this option cuts almost 23K bytes off the
      size of the ‘gawk’ executable on GNU/Linux x86_64 systems.  Results
      on other systems and with other compilers are likely to vary.
@@ -31941,7 +31907,7 @@ undefined.
 so by not exiting with an error when a library function is not
 available.  To get around this, edit the ‘custom.h’ file.  Use an
 ‘#ifdef’ that is appropriate for your system, and either ‘#define’ any
-constants that ‘configure’ should have defined but didn’t, or 
‘#undef’
+constants that ‘configure’ should have defined but didn't, or ‘#undef’
 any constants that ‘configure’ defined and should not have.  The
 ‘custom.h’ file is automatically included by the ‘config.h’ file.
 
@@ -32028,7 +31994,7 @@ B.3.1 Installation on MS-Windows
 
 This minor node covers installation and usage of ‘gawk’ on Intel
 architecture machines running any version of MS-Windows.  In this minor
-node, the term “Windows32” refers to any of Microsoft Windows
+node, the term "Windows32" refers to any of Microsoft Windows
 95/98/ME/NT/2000/XP/Vista/7/8/10/11.
 
    See also the ‘README_d/README.pc’ file in the distribution.
@@ -32049,15 +32015,15 @@ B.3.1.1 Installing a Prepared Distribution for 
MS-Windows Systems
 .................................................................
 
 The only supported binary distribution for MS-Windows systems is that
-provided by Eli Zaretskii’s “ezwinports”
+provided by Eli Zaretskii's "ezwinports"
 (https://sourceforge.net/projects/ezwinports/) project.  Install the
 compiled ‘gawk’ from there.  Note that to run that port, you need to
 have the ‘libgcc_s_dw2-1.dll’ file installed on your system.  This file
 is part of the GCC distribution, and should reside either in the same
-directory where you install ‘gawk.exe’ or somewhere on your system’s
+directory where you install ‘gawk.exe’ or somewhere on your system's
 ‘Path’.  You can download this file from the MinGW site
-(https://osdn.net/projects/mingw/releases); look under the “MinGW.org
-Compiler Collection (GCC)” for the ‘LibGCC-1.DLL’ download.
+(https://osdn.net/projects/mingw/releases); look under the "MinGW.org
+Compiler Collection (GCC)" for the ‘LibGCC-1.DLL’ download.
 
 
 File: gawk.info,  Node: PC Compiling,  Next: PC Using,  Prev: PC Binary 
Installation,  Up: PC Installation
@@ -32125,7 +32091,7 @@ accomplished by using an appropriate ‘-v BINMODE=N’ 
option on the
 command line.  ‘BINMODE’ is set at the time a file or pipe is opened and
 cannot be changed midstream.
 
-   On POSIX-compatible systems, this variable’s value has no effect.
+   On POSIX-compatible systems, this variable's value has no effect.
 Thus, if you think your program will run on multiple different systems
 and that you may need to use ‘BINMODE’, you should simply set it (in the
 program or on the command line) unconditionally, and not worry about the
@@ -32136,14 +32102,14 @@ Versions::).  ‘mawk’ and ‘gawk’ handle 
‘BINMODE’ similarly; however,
 ‘mawk’ adds a ‘-W BINMODE=N’ option and an environment variable that 
can
 set ‘BINMODE’, ‘RS’, and ‘ORS’.  The files ‘binmode[1-3].awk’ 
(under
 ‘gnu/lib/awk’ in some of the prepared binary distributions) have been
-chosen to match ‘mawk’’s ‘-W BINMODE=N’ option.  These can be 
changed or
+chosen to match ‘mawk’'s ‘-W BINMODE=N’ option.  These can be changed 
or
 discarded; in particular, the setting of ‘RS’ giving the fewest
-“surprises” is open to debate.  ‘mawk’ uses ‘RS = "\r\n"’ if 
binary mode
+"surprises" is open to debate.  ‘mawk’ uses ‘RS = "\r\n"’ if binary 
mode
 is set on read, which is appropriate for files with the MS-DOS-style
 end-of-line.
 
    To illustrate, the following examples set binary mode on writes for
-standard output and other files, and set ‘ORS’ as the “usual”
+standard output and other files, and set ‘ORS’ as the "usual"
 MS-DOS-style end-of-line:
 
      gawk -v BINMODE=2 -v ORS="\r\n" ...
@@ -32171,7 +32137,7 @@ File: gawk.info,  Node: Cygwin,  Next: MSYS,  Prev: PC 
Using,  Up: PC Installati
 B.3.1.4 Using ‘gawk’ In The Cygwin Environment
 ..............................................
 
-‘gawk’ can be built and used “out of the box” under MS-Windows if you
+‘gawk’ can be built and used "out of the box" under MS-Windows if you
 are using the Cygwin environment (http://www.cygwin.com).  This
 environment provides an excellent simulation of GNU/Linux, using Bash,
 GCC, GNU Make, and other GNU programs.  Compilation and installation for
@@ -32209,10 +32175,10 @@ use the ‘BINMODE’ variable.
 
    This can cause problems with other Unix-like components that have
 been ported to MS-Windows that expect ‘gawk’ to do automatic translation
-of ‘"\r\n"’, because it won’t.
+of ‘"\r\n"’, because it won't.
 
    Under MSYS2, compilation using the standard ‘./configure && make’
-recipe works “out of the box.”
+recipe works "out of the box."
 
 
 File: gawk.info,  Node: OpenVMS Installation,  Prev: PC Installation,  Up: 
Non-Unix Installation
@@ -32277,7 +32243,7 @@ that is compatible with the GNV product.
 
    ---------- Footnotes ----------
 
-   (1) The IA64 architecture is also known as “Itanium.”
+   (1) The IA64 architecture is also known as "Itanium."
 
 
 File: gawk.info,  Node: OpenVMS Dynamic Extensions,  Next: OpenVMS 
Installation Details,  Prev: OpenVMS Compilation,  Up: OpenVMS Installation
@@ -32331,7 +32297,7 @@ File: gawk.info,  Node: OpenVMS Installation Details,  
Next: OpenVMS Running,  P
 B.3.2.3 Installing ‘gawk’ on OpenVMS
 ....................................
 
-To use ‘gawk’, all you need is a “foreign” command, which is a 
‘DCL’
+To use ‘gawk’, all you need is a "foreign" command, which is a ‘DCL’
 symbol whose value begins with a dollar sign.  For example:
 
      $ GAWK :== $disk1:[gnubin]gawk
@@ -32504,7 +32470,7 @@ B.4 Reporting Problems and Bugs
 ===============================
 
      There is nothing more dangerous than a bored archaeologist.
-       — _Douglas Adams, ‘The Hitchhiker’s Guide to the Galaxy’_
+      -- _Douglas Adams, ‘The Hitchhiker's Guide to the Galaxy’_
 
    If you have problems with ‘gawk’ or think that you have found a bug,
 report it to the developers; we cannot promise to do anything, but we
@@ -32526,16 +32492,16 @@ File: gawk.info,  Node: Bug definition,  Next: Bug 
address,  Up: Bugs
 B.4.1 Defining What Is and What Is Not A Bug
 --------------------------------------------
 
-Before talking about reporting bugs, let’s define what is a bug, and
+Before talking about reporting bugs, let's define what is a bug, and
 what is not.
 
    A bug is:
 
-   • When ‘gawk’ behaves differently from what’s described in the POSIX
+   • When ‘gawk’ behaves differently from what's described in the POSIX
      standard, and that difference is not mentioned in this Info file as
      being done on purpose.
 
-   • When ‘gawk’ behaves differently from what’s described in this Info
+   • When ‘gawk’ behaves differently from what's described in this Info
      file.
 
    • When ‘gawk’ behaves differently from other ‘awk’ 
implementations in
@@ -32545,13 +32511,13 @@ what is not.
    • Something that is obviously wrong, such as a core dump.
 
    • When this Info file is unclear or ambiguous about a particular
-     feature’s behavior.
+     feature's behavior.
 
    The following things are _not_ bugs, and should not be reported to
-the bug mailing list.  You can ask about them on the “help” mailing list
-(*note Asking for help::), but don’t be surprised if you get an answer
-of the form “that’s how ‘gawk’ behaves and it isn’t going to 
change.”
-Here’s the list:
+the bug mailing list.  You can ask about them on the "help" mailing list
+(*note Asking for help::), but don't be surprised if you get an answer
+of the form "that's how ‘gawk’ behaves and it isn't going to change."
+Here's the list:
 
    • Missing features, for any definition of “feature”.  For example,
      additional built-in arithmetic functions, or additional ways to
@@ -32559,15 +32525,15 @@ Here’s the list:
 
      The number of features that ‘gawk’ does _not_ have is by definition
      infinite.  It cannot be all things to all people.  In short, just
-     because ‘gawk’ doesn’t do what _you_ think it should, it’s not
+     because ‘gawk’ doesn't do what _you_ think it should, it's not
      necessarily a bug.
 
    • Behaviors that are defined by the POSIX standard and/or for
      historical compatibility with Unix ‘awk’.  Even if you happen to
-     dislike those behaviors, they’re not going to change: changing them
+     dislike those behaviors, they're not going to change: changing them
      would break millions of existing ‘awk’ programs.
 
-   • Behaviors that differ from how it’s done in other languages.  
‘awk’
+   • Behaviors that differ from how it's done in other languages.  ‘awk’
      and ‘gawk’ stand on their own and do not have to follow the crowd.
      This is particularly true when the requested behavior change would
      break backwards compatibility.
@@ -32577,22 +32543,21 @@ Here’s the list:
      detailed descriptions of what the problem is when a syntax error is
      encountered.
 
-   • Documentation issues of the form “the manual doesn’t tell me how to
-     do XYZ.” The manual is not a cookbook to solve every little problem
+   • Documentation issues of the form "the manual doesn't tell me how to
+     do XYZ." The manual is not a cookbook to solve every little problem
      you may have.  Its purpose is to teach you how to solve your
      problems on your own.
 
    • General questions and discussion about ‘awk’ programming or why
-     ‘gawk’ behaves the way it does.  For that use the “help” mailing
+     ‘gawk’ behaves the way it does.  For that use the "help" mailing
      list: see *note Asking for help::.
 
-   For more information, see ‘Fork My Code, Please!—An Open Letter To
+   For more information, see ‘Fork My Code, Please!--An Open Letter To
 Those of You Who Are Unhappy’ (http://www.skeeve.com/fork-my-code.html),
 by Arnold Robbins and Chet Ramey.
 
                          A Note About Fuzzers
-
-   In recent years, people have been running “fuzzers” to generate
+   In recent years, people have been running "fuzzers" to generate
 invalid ‘awk’ programs in order to find and report (so-called) bugs in
 ‘gawk’.
 
@@ -32601,7 +32566,7 @@ they create are not realistic and the bugs found are 
generally from some
 kind of memory corruption that is fatal anyway.
 
    So, if you want to run a fuzzer against ‘gawk’ and report the
-results, you may do so, but be aware that such reports don’t carry the
+results, you may do so, but be aware that such reports don't carry the
 same weight as reports of real bugs do.
 
 
@@ -32616,19 +32581,19 @@ Before reporting a bug, make sure you have really 
found a genuine bug.
 make both your life and the lives of the maintainers much easier.
 
   1. Make sure that what you want to report is appropriate.  *Note Bug
-     definition::.  If it’s not, you are wasting your time and ours.
+     definition::.  If it's not, you are wasting your time and ours.
 
   2. Verify that you have the latest version of ‘gawk’.  Many bugs
      (usually subtle ones) are fixed at each release, and if yours is
      out-of-date, the problem may already have been solved.
 
   3. Please see if setting the environment variable ‘LC_ALL’ to
-     ‘LC_ALL=C’ causes things to behave as you expect.  If so, it’s a
+     ‘LC_ALL=C’ causes things to behave as you expect.  If so, it's a
      locale issue, and may or may not really be a bug.
 
   4. Carefully reread the documentation and see if it says you can do
-     what you’re trying to do.  If it’s not clear whether you should be
-     able to do something or not, report that too; it’s a bug in the
+     what you're trying to do.  If it's not clear whether you should be
+     able to do something or not, report that too; it's a bug in the
      documentation!
 
   5. Before reporting a bug or trying to fix it yourself, try to isolate
@@ -32664,19 +32629,19 @@ directly; the bug reporting address is preferred 
because the email list
 is archived at the GNU Project.
 
    If you are using OpenVMS or the MinGW build of ‘gawk’, the ‘gawkbug’
-script won’t be available.  Please send the previously listed
+script won't be available.  Please send the previously listed
 information directly in an email to the bug list.  Please send any test
 program or data files as attachments, instead of inline in the email, to
 avoid their being mangled by various mail systems.
 
      NOTE: Many distributions of GNU/Linux and the various BSD-based
      operating systems have their own bug reporting systems.  If you
-     report a bug using your distribution’s bug reporting system, you
+     report a bug using your distribution's bug reporting system, you
      should also send a copy to <bug-gawk@gnu.org>.
 
      This is for two reasons.  First, although some distributions
-     forward bug reports “upstream” to the GNU mailing list, many don’t,
-     so there is a good chance that the ‘gawk’ maintainers won’t even
+     forward bug reports "upstream" to the GNU mailing list, many don't,
+     so there is a good chance that the ‘gawk’ maintainers won't even
      see the bug report!  Second, mail to the GNU list is archived, and
      having everything at the GNU Project keeps things self-contained
      and not dependent on other organizations.
@@ -32688,27 +32653,27 @@ correspondence on the list (as well as off of it).
 
 File: gawk.info,  Node: Usenet,  Next: Performance bugs,  Prev: Bug address,  
Up: Bugs
 
-B.4.3 Please Don’t Post Bug Reports to USENET
+B.4.3 Please Don't Post Bug Reports to USENET
 ---------------------------------------------
 
-     I gave up on Usenet a couple of years ago and haven’t really looked
-     back.  It’s like sports talk radio—you feel smarter for not having
+     I gave up on Usenet a couple of years ago and haven't really looked
+     back.  It's like sports talk radio--you feel smarter for not having
      read it.
-                            — _Chet Ramey_
+                            -- _Chet Ramey_
 
    Please do _not_ try to report bugs in ‘gawk’ by posting to the
 Usenet/Internet newsgroup ‘comp.lang.awk’.  Although some of the ‘gawk’
 developers occasionally read this news group, the primary ‘gawk’
-maintainer no longer does.  Thus it’s virtually guaranteed that he will
+maintainer no longer does.  Thus it's virtually guaranteed that he will
 _not_ see your posting.
 
-   If you really don’t care about the previous paragraph and continue to
-post bug reports in ‘comp.lang.awk’, then understand that you’re not
-reporting bugs, you’re just whining.
+   If you really don't care about the previous paragraph and continue to
+post bug reports in ‘comp.lang.awk’, then understand that you're not
+reporting bugs, you're just whining.
 
    Similarly, posting bug reports or questions in web forums (such as
 Stack Overflow (https://stackoverflow.com/)) may get you an answer, but
-it won’t be from the ‘gawk’ maintainers, who do not spend their time in
+it won't be from the ‘gawk’ maintainers, who do not spend their time in
 web forums.  The steps described here are the only officially recognized
 way for reporting bugs.  Really.
 
@@ -32730,7 +32695,7 @@ to follow:
      something for every file that only needs to be done once per run of
      the program.  (Use a ‘BEGIN’ rule; *note BEGIN/END::.)
 
-  2. If profiling at the ‘awk’ level doesn’t help, then you will need to
+  2. If profiling at the ‘awk’ level doesn't help, then you will need to
      compile ‘gawk’ itself for profiling at the C language level.
 
      To do that, start with the latest released version of ‘gawk’.
@@ -32810,7 +32775,7 @@ Proulx:
 _Subscribe by email_
 
      Send an email message to <help-gawk-request@gnu.org> with
-     “subscribe” in the body of the message.  The subject does not
+     "subscribe" in the body of the message.  The subject does not
      matter and is not used.
 
 _Subscribe by web form_
@@ -32863,9 +32828,9 @@ File: gawk.info,  Node: Other Versions,  Next: 
Installation summary,  Prev: Bugs
 B.5 Other Freely Available ‘awk’ Implementations
 ================================================
 
-     It’s kind of fun to put comments like this in your awk code:
+     It's kind of fun to put comments like this in your awk code:
            ‘// Do C++ comments work? answer: yes! of course’
-                          — _Michael Brennan_
+                         -- _Michael Brennan_
 
    There are a number of other freely available ‘awk’ implementations.
 This minor node briefly describes where to get them:
@@ -32893,7 +32858,7 @@ Unix ‘awk’
      that are not in POSIX ‘awk’.
 
      As a side note, Dan Bornstein has created a Git repository tracking
-     all the versions of BWK ‘awk’ that he could find.  It’s available
+     all the versions of BWK ‘awk’ that he could find.  It's available
      at <https://github.com/danfuzz/one-true-awk>.
 
 ‘mawk’
@@ -32906,19 +32871,19 @@ Unix ‘awk’
      <http://www.skeeve.com/gawk/mawk1.3.3.tar.gz>.
 
      In 2009, Thomas Dickey took on ‘mawk’ maintenance.  Basic
-     information is available on the project’s web page
+     information is available on the project's web page
      (http://www.invisible-island.net/mawk).  The download URL is
      <http://invisible-island.net/datafiles/release/mawk.tar.gz>.
 
      Once you have it, ‘gunzip’ may be used to decompress this file.
-     Installation is similar to ‘gawk’’s (*note Unix Installation::).
+     Installation is similar to ‘gawk’'s (*note Unix Installation::).
 
      *Note Common Extensions:: for a list of extensions in ‘mawk’ that
      are not in POSIX ‘awk’.
 
 ‘mawk’ 2.0
      In 2016, Michael Brennan resumed ‘mawk’ development.  His
-     development snapshots are available via Git from the project’s
+     development snapshots are available via Git from the project's
      GitHub page (https://github.com/mikebrennan000/mawk-2).
 
 ‘awka’
@@ -32954,14 +32919,14 @@ BusyBox ‘awk’
      systems.  It includes a full implementation of POSIX ‘awk’.  When
      building it, be careful not to do ‘make install’ as it will
      overwrite copies of other applications in your ‘/usr/local/bin’.
-     For more information, see the project’s home page
+     For more information, see the project's home page
      (https://busybox.net).
 
 The OpenSolaris POSIX ‘awk’
      The versions of ‘awk’ in ‘/usr/xpg4/bin’ and ‘/usr/xpg6/bin’ 
on
      Solaris are more or less POSIX-compliant.  They are based on the
      ‘awk’ from Mortice Kern Systems for PCs.  We were able to make this
-     code compile and work under GNU/Linux with 1–2 hours of work.
+     code compile and work under GNU/Linux with 1-2 hours of work.
      Making it more generally portable (using GNU Autoconf and/or
      Automake) would take more work, and this has not been done, at
      least to our knowledge.
@@ -32975,10 +32940,10 @@ The OpenSolaris POSIX ‘awk’
      
<https://github.com/joyent/illumos-joyent/blob/master/usr/src/cmd/awk_xpg4>.
 
 ‘frawk’
-     This is a language for writing short programs.  “To a first
+     This is a language for writing short programs.  "To a first
      approximation, it is an implementation of the AWK language; many
      common ‘awk’ programs produce equivalent output when passed to
-     ‘frawk’.” However, it has a number of important additional
+     ‘frawk’."  However, it has a number of important additional
      features.  The code is available at
      <https://github.com/ezrosent/frawk>.
 
@@ -32994,17 +32959,17 @@ The OpenSolaris POSIX ‘awk’
      This is an ‘awk’ to Go translator.  It was written by the author of
      ‘goawk’.  (See the previous entry in this list.)  Source code is
      available from
-     <https://github.com/benhoyt/goawk/tree/master/awkgo>.  The author’s
+     <https://github.com/benhoyt/goawk/tree/master/awkgo>.  The author's
      article about it is at <https://benhoyt.com/writings/awkgo/>.
 
 ‘jawk’
      This is an interpreter for ‘awk’ written in Java.  It claims to be
      a full interpreter, although because it uses Java facilities for
      I/O and for regexp matching, the language it supports is different
-     from POSIX ‘awk’.  More information is available on the project’s
+     from POSIX ‘awk’.  More information is available on the project's
      home page (http://jawk.sourceforge.net).
 
-Hoijui’s ‘jawk’
+Hoijui's ‘jawk’
      This project, available at <https://github.com/hoijui/Jawk>, is
      another ‘awk’ interpreter written in Java.  It uses modern Java
      build tools.
@@ -33013,20 +32978,20 @@ Libmawk
      This is an embeddable ‘awk’ interpreter derived from ‘mawk’.  For
      more information, see <http://repo.hu/projects/libmawk/>.
 
-Mircea Neacsu’s Embeddable ‘awk’
+Mircea Neacsu's Embeddable ‘awk’
      Mircea Neacsu has created an embeddable ‘awk’ interpreter, based on
-     BWK awk.  It’s available at <https://github.com/neacsum/awk>.
+     BWK awk.  It's available at <https://github.com/neacsum/awk>.
 
 ‘pawk’
      This is a Python module that claims to bring ‘awk’-like features to
      Python.  See <https://github.com/alecthomas/pawk> for more
-     information.  (This is not related to Nelson Beebe’s modified
+     information.  (This is not related to Nelson Beebe's modified
      version of BWK ‘awk’, described earlier.)
 
 ‘awkcc’
      This is an early adaptation of Unix ‘awk’ that translates ‘awk’
      into C code.  It was done by J. Christopher Ramming at Bell Labs,
-     circa 1988.  It’s available at <https://github.com/nokia/awkcc>.
+     circa 1988.  It's available at <https://github.com/nokia/awkcc>.
      Bringing this up to date would be an interesting software
      engineering exercise.
 
@@ -33047,15 +33012,15 @@ QSE ‘awk’
      since approximately 2014.
 
 ‘cppawk’
-     Quoting from the web page, “‘cppawk’ is a tiny shell script that is
+     Quoting from the web page, "‘cppawk’ is a tiny shell script that is
      used like ‘awk’.  It invokes the C preprocessor (GNU ‘cpp’) on the
-     Awk code and calls Awk on the result.” This program may be of use
-     if the way ‘gawk’’s ‘@include’ facility works doesn’t suit 
your
+     Awk code and calls Awk on the result."  This program may be of use
+     if the way ‘gawk’'s ‘@include’ facility works doesn't suit your
      needs.  For more information, see
      <https://www.kylheku.com/cgit/cppawk/>.
 
 Other versions
-     See also the “Versions and implementations” section of the
+     See also the "Versions and implementations" section of the
      Wikipedia article
      (https://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations)
      on ‘awk’ for information on additional versions.
@@ -33072,7 +33037,7 @@ File: gawk.info,  Node: Installation summary,  Prev: 
Other Versions,  Up: Instal
 B.6 Summary
 ===========
 
-   • The ‘gawk’ distribution is available from the GNU Project’s main
+   • The ‘gawk’ distribution is available from the GNU Project's main
      distribution site, ‘ftp.gnu.org’.  The canonical build recipe is:
 
           wget https://ftp.gnu.org/gnu/gawk/gawk-5.3.0.tar.gz
@@ -33183,7 +33148,7 @@ changes, you will probably wish to work with the 
development version.
 To do so, you will need to access the ‘gawk’ source code repository.
 The code is maintained using the Git distributed version control system
 (https://git-scm.com).  You will need to install it if your system
-doesn’t have it.  Once you have done so, use the command:
+doesn't have it.  Once you have done so, use the command:
 
      git clone git://git.savannah.gnu.org/gawk.git
 
@@ -33199,7 +33164,7 @@ the repository using:
 patch, and send that to the ‘gawk’ maintainer; see *note Bugs::, for how
 to do that.
 
-   Once upon a time there was Git–CVS gateway for use by people who
+   Once upon a time there was Git-CVS gateway for use by people who
 could not install Git.  However, this gateway no longer works, so you
 may have better luck using a more modern version control system like
 Bazaar, that has a Git plug-in for working with Git repositories.
@@ -33216,12 +33181,12 @@ there are several steps that you need to take in 
order to make it
 possible to include them:
 
   1. Discuss the proposed new feature with the ‘gawk’ maintainer.  The
-     bug list may be used for this.  Even if I don’t wish to include
+     bug list may be used for this.  Even if I don't wish to include
      your feature, be aware that you are still free to add it and
-     distribute your own “fork” of ‘gawk’.
+     distribute your own "fork" of ‘gawk’.
 
   2. Before building the new feature into ‘gawk’ itself, consider
-     writing it as an extension (*note Dynamic Extensions::).  If that’s
+     writing it as an extension (*note Dynamic Extensions::).  If that's
      not possible, continue with the rest of the steps in this list.
 
   3. Be prepared to sign the appropriate paperwork.  In order for the
@@ -33240,15 +33205,15 @@ possible to include them:
      information on getting the latest version of ‘gawk’.)
 
   5. *Note Version: (standards)Top.  This document describes how GNU
-     software should be written.  If you haven’t read it, please do so,
+     software should be written.  If you haven't read it, please do so,
      preferably _before_ starting to modify ‘gawk’.  (The ‘GNU Coding
-     Standards’ are available from the GNU Project’s website
+     Standards’ are available from the GNU Project's website
      (https://www.gnu.org/prep/standards/).  Texinfo, Info, and DVI
      versions are also available.)
 
   6. Use the ‘gawk’ coding style.  The C code for ‘gawk’ follows the
      instructions in the ‘GNU Coding Standards’, with minor exceptions.
-     The code is formatted using the traditional “K&R” style,
+     The code is formatted using the traditional "K&R" style,
      particularly as regards to the placement of braces and the use of
      TABs.  In brief, the coding rules for ‘gawk’ are as follows:
 
@@ -33280,7 +33245,7 @@ possible to include them:
 
         • Use real TABs for indenting, not spaces.
 
-        • Use the “K&R” brace layout style.
+        • Use the "K&R" brace layout style.
 
         • Use comparisons against ‘NULL’ and ‘'\0'’ in the 
conditions of
           ‘if’, ‘while’, and ‘for’ statements, as well as in the 
‘case’s
@@ -33305,8 +33270,8 @@ possible to include them:
           Instead, use ‘malloc()’ and ‘free()’.
 
         • Do not use comparisons of the form ‘! strcmp(a, b)’ or
-          similar.  As Henry Spencer once said, “‘strcmp()’ is not a
-          boolean!” Instead, use ‘strcmp(a, b) == 0’.
+          similar.  As Henry Spencer once said, "‘strcmp()’ is not a
+          boolean!"  Instead, use ‘strcmp(a, b) == 0’.
 
         • If adding new bit flag values, use explicit hexadecimal
           constants (‘0x001’, ‘0x002’, ‘0x004’, and so on) instead 
of
@@ -33348,7 +33313,7 @@ possible to include them:
 
    Although this sounds like a lot of work, please remember that while
 you may write the new code, I have to maintain it and support it.  If it
-isn’t possible for me to do that with a minimum of extra work, then I
+isn't possible for me to do that with a minimum of extra work, then I
 probably will not.
 
 
@@ -33408,11 +33373,11 @@ steps:
      includes the appropriate ‘gawkmisc.???’ file from each
      subdirectory.  Be sure to update it as well.
 
-     Each port’s ‘gawkmisc.???’ file has a suffix reminiscent of the
-     machine or operating system for the port—for example,
+     Each port's ‘gawkmisc.???’ file has a suffix reminiscent of the
+     machine or operating system for the port--for example,
      ‘pc/gawkmisc.pc’ and ‘vms/gawkmisc.vms’.  The use of separate
      suffixes, instead of plain ‘gawkmisc.c’, makes it possible to move
-     files from a port’s subdirectory into the main subdirectory,
+     files from a port's subdirectory into the main subdirectory,
      without accidentally destroying the real ‘gawkmisc.c’ file.
      (Currently, this is only an issue for the PC operating system
      ports.)
@@ -33432,7 +33397,7 @@ steps:
      needed to compile and/or install ‘gawk’ for your system.
 
    Following these steps makes it much easier to integrate your changes
-into ‘gawk’ and have them coexist happily with other operating systems’
+into ‘gawk’ and have them coexist happily with other operating systems'
 code that is already there.
 
    In the code that you supply and maintain, feel free to use a coding
@@ -33467,18 +33432,18 @@ have to bootstrap the V7 ‘yacc’ to do so, but you 
also need the V7
 ‘lex’.  And the latter is pretty much impossible to bring up on a modern
 GNU/Linux system.(1)
 
-   (Or, let’s say ‘gawk’ 1.2 required ‘bison’ whatever-it-was in 1989
+   (Or, let's say ‘gawk’ 1.2 required ‘bison’ whatever-it-was in 1989
 and that there was no ‘awkgram.c’ file in the repository.  Is there a
 guarantee that we could find that ‘bison’ version?  Or that _it_ would
 build?)
 
-   If the repository has all the generated files, then it’s easy to just
+   If the repository has all the generated files, then it's easy to just
 check them out and build.  (Or _easier_, depending upon how far back we
 go.)
 
    And that brings us to the second (and stronger) reason why all the
 files really need to be in Git.  It boils down to who do you cater
-to—the ‘gawk’ developer(s), or the user who just wants to check out a
+to--the ‘gawk’ developer(s), or the user who just wants to check out a
 version and try it out?
 
    The ‘gawk’ maintainer wants it to be possible for any interested
@@ -33496,16 +33461,16 @@ will _just work_.
    This is extremely important for the ‘master’ and ‘gawk-X.Y-stable’
 branches.
 
-   Further, the ‘gawk’ maintainer would argue that it’s also important
+   Further, the ‘gawk’ maintainer would argue that it's also important
 for the ‘gawk’ developers.  When he tried to check out the ‘xgawk’
-branch(3) to build it, he couldn’t.  (No ‘ltmain.sh’ file, and he had no
+branch(3) to build it, he couldn't.  (No ‘ltmain.sh’ file, and he had no
 idea how to create it, and that was not the only problem.)
 
    He felt _extremely_ frustrated.  With respect to that branch, the
 maintainer is no different than Jane User who wants to try to build
 ‘gawk-4.1-stable’ or ‘master’ from the repository.
 
-   Thus, the maintainer thinks that it’s not just important, but
+   Thus, the maintainer thinks that it's not just important, but
 critical, that for any given branch, the above incantation _just works_.
 
    A third reason to have all the files is that without them, using ‘git
@@ -33517,14 +33482,14 @@ on; it was really painful.  When the repository is 
self-contained, using
 
    What are some of the consequences and/or actions to take?
 
-  1. We don’t mind that there are differing files in the different
+  1. We don't mind that there are differing files in the different
      branches as a result of different versions of the autotools.
 
-       A. It’s the maintainer’s job to merge them and he will deal with
+       A. It's the maintainer's job to merge them and he will deal with
           it.
 
        B. He is really good at ‘git diff x y > /tmp/diff1 ; gvim
-          /tmp/diff1’ to remove the diffs that aren’t of interest in
+          /tmp/diff1’ to remove the diffs that aren't of interest in
           order to review code.
 
   2. It would certainly help if everyone used the same versions of the
@@ -33532,7 +33497,7 @@ on; it was really painful.  When the repository is 
self-contained, using
      versions of Automake, Autoconf, ‘bison’, GNU ‘gettext’, and
      Libtool.
 
-     Installing from source is quite easy.  It’s how the maintainer
+     Installing from source is quite easy.  It's how the maintainer
      worked for years (and still works).  He had ‘/usr/local/bin’ at the
      front of his ‘PATH’ and just did:
 
@@ -33548,17 +33513,17 @@ on; it was really painful.  When the repository is 
self-contained, using
 
    Most of the above was originally written by the maintainer to other
 ‘gawk’ developers.  It raised the objection from one of the developers
-“... that anybody pulling down the source from Git is not an end user.”
+"... that anybody pulling down the source from Git is not an end user."
 
-   However, this is not true.  There are “power ‘awk’ users” who can
+   However, this is not true.  There are "power ‘awk’ users" who can
 build ‘gawk’ (using the magic incantation shown previously) but who
-can’t program in C. Thus, the major branches should be kept buildable
+can't program in C. Thus, the major branches should be kept buildable
 all the time.
 
    It was then suggested that there be a ‘cron’ job to create nightly
-tarballs of “the source.” Here, the problem is that there are source
+tarballs of "the source."  Here, the problem is that there are source
 trees, corresponding to the various branches!  So, nightly tarballs
-aren’t the answer, especially as the repository can go for weeks without
+aren't the answer, especially as the repository can go for weeks without
 significant change being introduced.
 
    Fortunately, the Git server can meet this need.  For any given branch
@@ -33574,10 +33539,10 @@ to retrieve a snapshot of the given branch.
 
    (2) There is one GNU program that is (in our opinion) severely
 difficult to bootstrap from the Git repository.  For example, on the
-author’s old (but still working) PowerPC Macintosh with macOS 10.5, it
+author's old (but still working) PowerPC Macintosh with macOS 10.5, it
 was necessary to bootstrap a ton of software, starting with Git itself,
-in order to try to work with the latest code.  It’s not pleasant, and
-especially on older systems, it’s a big waste of time.
+in order to try to work with the latest code.  It's not pleasant, and
+especially on older systems, it's a big waste of time.
 
    Starting with the latest tarball was no picnic either.  The
 maintainers had dropped ‘.gz’ and ‘.bz2’ files and only distribute
@@ -33593,10 +33558,10 @@ C.3 Probable Future Extensions
 ==============================
 
      AWK is a language similar to PERL, only considerably more elegant.
-                          — _Arnold Robbins_
+                          -- _Arnold Robbins_
 
      Hey!
-                            — _Larry Wall_
+                            -- _Larry Wall_
 
    The ‘TODO’ file in the ‘master’ branch of the ‘gawk’ Git 
repository
 lists possible future enhancements.  Some of these relate to the source
@@ -33654,7 +33619,7 @@ mechanisms and design remained unchanged for close to 
15 years, until
 2012.
 
    The old extension mechanism used data types and functions from ‘gawk’
-itself, with a “clever hack” to install extension functions.
+itself, with a "clever hack" to install extension functions.
 
    ‘gawk’ included some sample extensions, of which a few were really
 useful.  However, it was clear from the outset that the extension
@@ -33678,7 +33643,7 @@ The old extension mechanism had several problems:
    • It depended heavily upon ‘gawk’ internals.  Any time the ‘NODE’
      structure(1) changed, an extension would have to be recompiled.
      Furthermore, to really write extensions required understanding
-     something about ‘gawk’’s internal functions.  There was some
+     something about ‘gawk’'s internal functions.  There was some
      documentation in this Info file, but it was quite minimal.
 
    • Being able to call into ‘gawk’ from an extension required linker
@@ -33692,7 +33657,7 @@ The old extension mechanism had several problems:
 
    Despite the drawbacks, the ‘xgawk’ project developers forked ‘gawk’
 and developed several significant extensions.  They also enhanced
-‘gawk’’s facilities relating to file inclusion and shared object access.
+‘gawk’'s facilities relating to file inclusion and shared object access.
 
    A new API was desired for a long time, but only in 2012 did the
 ‘gawk’ maintainer and the ‘xgawk’ developers finally start working on 
it
@@ -33719,7 +33684,7 @@ Some goals for the new API were:
      releases as long as the API itself does not change.
 
    • The API should enable extensions written in C or C++ to have
-     roughly the same “appearance” to ‘awk’-level code as ‘awk’
+     roughly the same "appearance" to ‘awk’-level code as ‘awk’
      functions do.  This means that extensions should have:
 
         − The ability to access function parameters.
@@ -33729,11 +33694,11 @@ Some goals for the new API were:
 
         − The ability to create, access and update global variables.
 
-        − Easy access to all the elements of an array at once (“array
-          flattening”) in order to loop over all the element in an easy
+        − Easy access to all the elements of an array at once ("array
+          flattening") in order to loop over all the element in an easy
           fashion for C code.
 
-        − The ability to create arrays (including ‘gawk’’s true arrays
+        − The ability to create arrays (including ‘gawk’'s true arrays
           of arrays).
 
    Some additional important goals were:
@@ -33746,7 +33711,7 @@ Some goals for the new API were:
      constructors and destructors, as ‘gawk’ is a C program.  As of this
      writing, this has not been tested.)
 
-   • The API mechanism should not require access to ‘gawk’’s symbols(1)
+   • The API mechanism should not require access to ‘gawk’'s symbols(1)
      by the compile-time or dynamic linker, in order to enable creation
      of extensions that also work on MS-Windows.
 
@@ -33754,20 +33719,20 @@ Some goals for the new API were:
 that should be available to extensions, which were also subsequently
 provided:
 
-   • Extensions should have the ability to hook into ‘gawk’’s I/O
+   • Extensions should have the ability to hook into ‘gawk’'s I/O
      redirection mechanism.  In particular, the ‘xgawk’ developers
-     provided a so-called “open hook” to take over reading records.
+     provided a so-called "open hook" to take over reading records.
      During development, this was generalized to allow extensions to
      hook into input processing, output processing, and two-way I/O.
 
-   • An extension should be able to provide a “call back” function to
+   • An extension should be able to provide a "call back" function to
      perform cleanup actions when ‘gawk’ exits.
 
    • An extension should be able to provide a version string so that
-     ‘gawk’’s ‘--version’ option can provide information about
+     ‘gawk’'s ‘--version’ option can provide information about
      extensions as well.
 
-   The requirement to avoid access to ‘gawk’’s symbols is, at first
+   The requirement to avoid access to ‘gawk’'s symbols is, at first
 glance, a difficult one to meet.
 
    One design, apparently used by Perl and Ruby and maybe others, would
@@ -33818,7 +33783,7 @@ with the simplest, most basic features that are still 
truly useful.
 MPFR, and arrays indexed internally by integers, these features are not
 being brought out to the API in order to keep things simple and close to
 traditional ‘awk’ semantics.  (In fact, arrays indexed internally by
-integers are so transparent that they aren’t even documented!)
+integers are so transparent that they aren't even documented!)
 
    Additionally, all functions in the API check that their pointer input
 parameters are not ‘NULL’.  If they are, they return an error.  (It is a
@@ -33840,7 +33805,7 @@ C.5.4 Room For Future Growth
 
 The API can later be expanded, in at least the following way:
 
-   • ‘gawk’ passes an “extension id” into the extension when it first
+   • ‘gawk’ passes an "extension id" into the extension when it first
      loads the extension.  The extension then passes this id back to
      ‘gawk’ with each function call.  This mechanism allows ‘gawk’ to
      identify the extension calling into it, should it need to know.
@@ -33854,7 +33819,7 @@ File: gawk.info,  Node: Notes summary,  Prev: Extension 
Design,  Up: Notes
 C.6 Summary
 ===========
 
-   • ‘gawk’’s extensions can be disabled with either the 
‘--traditional’
+   • ‘gawk’'s extensions can be disabled with either the 
‘--traditional’
      option or with the ‘--posix’ option.  The ‘--parsedebug’ option is
      available if ‘gawk’ is compiled with ‘-DDEBUG’.
 
@@ -33866,7 +33831,7 @@ C.6 Summary
      contributions into the code base.  This applies both to new feature
      contributions and to ports to additional operating systems.
 
-   • ‘gawk’ has some limits—generally those that are imposed by the
+   • ‘gawk’ has some limits--generally those that are imposed by the
      machine architecture.
 
    • The extension API design was intended to solve a number of problems
@@ -33904,7 +33869,6 @@ D.1 What a Program Does
 At the most basic level, the job of a program is to process some input
 data and produce results.  See *note Figure D.1: figure-general-flow.
 
-
 [image src="gawk_general-program.png" alt="General program flow" text="      
            _______
 +------+         /       \\         +---------+
 | Data | -----> < Program > -----> | Results |
@@ -33912,7 +33876,7 @@ data and produce results.  See *note Figure D.1: 
figure-general-flow.
 
 Figure D.1: General Program Flow
 
-   The “program” in the figure can be either a compiled program(1) (such
+   The "program" in the figure can be either a compiled program(1) (such
 as ‘ls’), or it may be “interpreted”.  In the latter case, a
 machine-executable program such as ‘awk’ reads your program, and then
 uses the instructions in your program to process the data.
@@ -33920,7 +33884,6 @@ uses the instructions in your program to process the 
data.
    When you write a program, it usually consists of the following, very
 basic set of steps, as shown in *note Figure D.2: figure-process-flow.:
 
-
 [image src="gawk_process-flow.png" alt="Basic Program Stages" text="         
                     ______
 +----------------+           / More \\  No       +----------+
 | Initialization | -------> <  Data  > -------> | Clean Up |
@@ -33938,7 +33901,7 @@ Figure D.2: Basic Program Steps
 Initialization
      These are the things you do before actually starting to process
      data, such as checking arguments, initializing any data you need to
-     work with, and so on.  This step corresponds to ‘awk’’s ‘BEGIN’
+     work with, and so on.  This step corresponds to ‘awk’'s ‘BEGIN’
      rule (*note BEGIN/END::).
 
      If you were baking a cake, this might consist of laying out all the
@@ -33951,7 +33914,7 @@ Processing
 
      In most programming languages, you have to manually manage the
      reading of data, checking to see if there is more each time you
-     read a chunk.  ‘awk’’s pattern-action paradigm (*note Getting
+     read a chunk.  ‘awk’'s pattern-action paradigm (*note Getting
      Started::) handles the mechanics of this for you.
 
      In baking a cake, the processing corresponds to the actual labor:
@@ -33959,8 +33922,8 @@ Processing
      then putting the cake into the oven.
 
 Clean Up
-     Once you’ve processed all the data, you may have things you need to
-     do before exiting.  This step corresponds to ‘awk’’s ‘END’ rule
+     Once you've processed all the data, you may have things you need to
+     do before exiting.  This step corresponds to ‘awk’'s ‘END’ rule
      (*note BEGIN/END::).
 
      After the cake comes out of the oven, you still have to wrap it in
@@ -33972,7 +33935,7 @@ accomplish a task, or process data.  It is much the 
same as a recipe for
 baking a cake.  Programs implement algorithms.  Often, it is up to you
 to design the algorithm and implement it, simultaneously.
 
-   The “logical chunks” we talked about previously are called 
“records”,
+   The "logical chunks" we talked about previously are called “records”,
 similar to the records a company keeps on employees, a school keeps for
 students, or a doctor keeps for patients.  Each record has many
 component parts, such as first and last names, date of birth, address,
@@ -33981,11 +33944,11 @@ record.
 
    The act of reading data is termed “input”, and that of generating
 results, not too surprisingly, is termed “output”.  They are often
-referred to together as “input/output,” and even more often, as “I/O”
-for short.  (You will also see “input” and “output” used as verbs.)
+referred to together as "input/output," and even more often, as "I/O"
+for short.  (You will also see "input" and "output" used as verbs.)
 
    ‘awk’ manages the reading of data for you, as well as the breaking it
-up into records and fields.  Your program’s job is to tell ‘awk’ what to
+up into records and fields.  Your program's job is to tell ‘awk’ what to
 do with the data.  You do this by describing “patterns” in the data to
 look for, and “actions” to execute when those patterns are seen.  This
 “data-driven” nature of ‘awk’ programs usually makes them both easier 
to
@@ -34012,7 +33975,7 @@ associated values under one name, as an array.
 
    Data, particularly in ‘awk’, consists of either numeric values, such
 as 42 or 3.1415927, or string values.  String values are essentially
-anything that’s not a number, such as a name.  Strings are sometimes
+anything that's not a number, such as a name.  Strings are sometimes
 referred to as “character data”, since they store the individual
 characters that comprise them.  Individual variables, as well as numeric
 and string variables, are referred to as “scalar” values.  Groups of
@@ -34031,7 +33994,7 @@ value.  In other words, it is empty.  It is written in 
‘awk’ programs
 like this: ‘""’.
 
    Humans are used to working in decimal; i.e., base 10.  In base 10,
-numbers go from 0 to 9, and then “roll over” into the next column.
+numbers go from 0 to 9, and then "roll over" into the next column.
 (Remember grade school?  42 = 4 x 10 + 2.)
 
    There are other number bases though.  Computers commonly use base 2
@@ -34052,7 +34015,7 @@ the C programming language.  The C language had a very 
strong influence
 on the design of the ‘awk’ language.
 
    There have been several versions of C. The first is often referred to
-as “K&R” C, after the initials of Brian Kernighan and Dennis Ritchie,
+as "K&R" C, after the initials of Brian Kernighan and Dennis Ritchie,
 the authors of the first book on C. (Dennis Ritchie created the
 language, and Brian Kernighan was one of the creators of ‘awk’.)
 
@@ -34069,8 +34032,8 @@ Glossary
 ********
 
 Action
-     A series of ‘awk’ statements attached to a rule.  If the rule’s
-     pattern matches an input record, ‘awk’ executes the rule’s action.
+     A series of ‘awk’ statements attached to a rule.  If the rule's
+     pattern matches an input record, ‘awk’ executes the rule's action.
      Actions are always enclosed in braces.  (*Note Action Overview::.)
 
 Ada
@@ -34098,7 +34061,7 @@ ANSI
      The American National Standards Institute.  This organization
      produces many standards, among them the standards for the C and C++
      programming languages.  These standards often become international
-     standards as well.  See also “ISO.”
+     standards as well.  See also "ISO."
 
 Argument
      An argument can be two different things.  It can be an option or a
@@ -34113,7 +34076,7 @@ Argument
      function itself; or it is given by reference, i.e., a pointer to
      the interested variable is passed to the function, which can then
      directly modify it.  In ‘awk’ scalars are passed by value, and
-     arrays are passed by reference.  See “Pass By Value/Reference.”
+     arrays are passed by reference.  See "Pass By Value/Reference."
 
 Array
      A grouping of multiple values under the same name.  Most languages
@@ -34140,7 +34103,7 @@ Associative Array
 ‘awk’ Program
      An ‘awk’ program consists of a series of “patterns” and 
“actions”,
      collectively known as “rules”.  For each input record given to the
-     program, the program’s rules are all processed in turn.  ‘awk’
+     program, the program's rules are all processed in turn.  ‘awk’
      programs may also contain function definitions.
 
 ‘awk’ Script
@@ -34148,11 +34111,11 @@ Associative Array
 
 Bash
      The GNU version of the standard shell (the Bourne-Again SHell).
-     See also “Bourne Shell.”
+     See also "Bourne Shell."
 
 Binary
-     Base-two notation, where the digits are ‘0’–‘1’.  Since 
electronic
-     circuitry works “naturally” in base 2 (just think of Off/On),
+     Base-two notation, where the digits are ‘0’-‘1’.  Since electronic
+     circuitry works "naturally" in base 2 (just think of Off/On),
      everything inside a computer is calculated using base 2.  Each
      digit represents the presence (or absence) of a power of 2 and is
      called a “bit”.  So, for example, the base-two number ‘10101’ is
@@ -34170,9 +34133,9 @@ Binary
      numbers in their registers, but 32-bit, 16-bit and 8-bit registers
      have been widely used in the past.  *Note Nondecimal-numbers::.
 Bit
-     Short for “Binary Digit.” All values in computer memory ultimately
+     Short for "Binary Digit."  All values in computer memory ultimately
      reduce to binary digits: values that are either zero or one.
-     Groups of bits may be interpreted differently—as integers,
+     Groups of bits may be interpreted differently--as integers,
      floating-point numbers, character data, addresses of other memory
      objects, or other data.  ‘awk’ lets you work with floating-point
      numbers and strings.  ‘gawk’ lets you manipulate bit values with
@@ -34184,8 +34147,8 @@ Bit
      essentially disappeared.
 
 Boolean Expression
-     Named after the English mathematician Boole.  See also “Logical
-     Expression.”
+     Named after the English mathematician Boole.  See also "Logical
+     Expression."
 
 Bourne Shell
      The standard shell (‘/bin/sh’) on Unix and Unix-like systems,
@@ -34207,8 +34170,8 @@ Bracket Expression
      expression enclosed between ‘:’ is independent of the underlying
      representation of the character themselves, which could utilize the
      ASCII, EBCDIC, or Unicode codesets, depending on the architecture
-     of the computer system, and on localization.  See also “Regular
-     Expression.”
+     of the computer system, and on localization.  See also "Regular
+     Expression."
 
 Built-in Function
      The ‘awk’ language provides built-in functions that perform various
@@ -34225,7 +34188,7 @@ Built-in Variable
      addition, ‘ARGIND’, ‘BINMODE’, ‘ERRNO’, ‘FIELDWIDTHS’, 
‘FPAT’,
      ‘IGNORECASE’, ‘LINT’, ‘PROCINFO’, ‘RT’, and 
‘TEXTDOMAIN’ are the
      variables that have special meaning to ‘gawk’.  Changing some of
-     them affects ‘awk’’s running environment.  (*Note Built-in
+     them affects ‘awk’'s running environment.  (*Note Built-in
      Variables::.)
 
 C
@@ -34245,16 +34208,16 @@ C Shell
      compatible with the Bourne Shell, so special attention is required
      when converting scripts written for other Unix shells to the C
      shell, especially with regard to the management of shell variables.
-     See also “Bourne Shell.”
+     See also "Bourne Shell."
 
 C++
      A popular object-oriented programming language derived from C.
 
 Character Class
-     See “Bracket Expression.”
+     See "Bracket Expression."
 
 Character List
-     See “Bracket Expression.”
+     See "Bracket Expression."
 
 Character Set
      The set of numeric codes used by a computer system to represent the
@@ -34281,22 +34244,22 @@ Comparison Expression
 Compiler
      A program that translates human-readable source code into
      machine-executable object code.  The object code is then executed
-     directly by the computer.  See also “Interpreter.”
+     directly by the computer.  See also "Interpreter."
 
 Complemented Bracket Expression
      The negation of a “bracket expression”.  All that is _not_
      described by a given bracket expression.  The symbol ‘^’ precedes
      the negated bracket expression.  E.g.: ‘[^[:digit:]]’ designates
      whatever character is not a digit.  ‘[^bad]’ designates whatever
-     character is not one of the letters ‘b’, ‘a’, or ‘d’.  See 
“Bracket
-     Expression.”
+     character is not one of the letters ‘b’, ‘a’, or ‘d’.  See 
"Bracket
+     Expression."
 
 Compound Statement
      A series of ‘awk’ statements, enclosed in curly braces.  Compound
      statements may be nested.  (*Note Statements::.)
 
 Computed Regexps
-     See “Dynamic Regular Expressions.”
+     See "Dynamic Regular Expressions."
 
 Concatenation
      Concatenating two strings means sticking them together, one after
@@ -34326,13 +34289,13 @@ Coprocess
      possible.
 
 Curly Braces
-     See “Braces.”
+     See "Braces."
 
 Dark Corner
      An area in the language where specifications often were (or still
      are) not clear, leading to unexpected or undesirable behavior.
-     Such areas are marked in this Info file with “(d.c.)” in the text
-     and are indexed under the heading “dark corner.”
+     Such areas are marked in this Info file with "(d.c.)"  in the text
+     and are indexed under the heading "dark corner."
 
 Data Driven
      A description of ‘awk’ programs, where you specify the data you are
@@ -34347,7 +34310,7 @@ Deadlock
      for the other to perform an action.
 
 Debugger
-     A program used to help developers remove “bugs” from (de-bug) their
+     A program used to help developers remove "bugs" from (de-bug) their
      programs.
 
 Double Precision
@@ -34364,7 +34327,7 @@ Dynamic Regular Expression
      (*Note Computed Regexps::.)
 
 Empty String
-     See “Null String.”
+     See "Null String."
 
 Environment
      A collection of strings, of the form ‘NAME=VAL’, that each program
@@ -34373,13 +34336,13 @@ Environment
      Typical examples are the environment variables ‘HOME’ and ‘PATH’.
 
 Epoch
-     The date used as the “beginning of time” for timestamps.  Time
+     The date used as the "beginning of time" for timestamps.  Time
      values in most systems are represented as seconds since the epoch,
      with library functions available for converting these values into
      standard date and time formats.
 
      The epoch on Unix and POSIX systems is 1970-01-01 00:00:00 UTC. See
-     also “GMT” and “UTC.”
+     also "GMT" and "UTC."
 
 Escape Sequences
      A special sequence of characters used for describing nonprinting
@@ -34388,11 +34351,11 @@ Escape Sequences
 
 Extension
      An additional feature or change to a programming language or
-     utility not defined by that language’s or utility’s standard.
+     utility not defined by that language's or utility's standard.
      ‘gawk’ has (too) many extensions over POSIX ‘awk’.
 
 FDL
-     See “Free Documentation License.”
+     See "Free Documentation License."
 
 Field
      When ‘awk’ reads an input record, it splits the record into pieces
@@ -34410,9 +34373,9 @@ Flag
      nonexistence of some condition.
 
 Floating-Point Number
-     Often referred to in mathematical terms as a “rational” or real
+     Often referred to in mathematical terms as a "rational" or real
      number, this is just a number that can have a fractional part.  See
-     also “Double Precision” and “Single Precision.”
+     also "Double Precision" and "Single Precision."
 
 Format
      Format strings control the appearance of output in the ‘strftime()’
@@ -34439,7 +34402,7 @@ Free Software Foundation
      Emacs is the most widely used version of Emacs today.
 
 FSF
-     See “Free Software Foundation.”
+     See "Free Software Foundation."
 
 Function
      A part of an ‘awk’ program that can be invoked from every point of
@@ -34461,18 +34424,18 @@ General Public License
      code may be distributed.  (*Note Copying::.)
 
 GMT
-     “Greenwich Mean Time.” This is the old term for UTC. It is the time
-     of day used internally for Unix and POSIX systems.  See also
-     “Epoch” and “UTC.”
+     "Greenwich Mean Time."  This is the old term for UTC. It is the
+     time of day used internally for Unix and POSIX systems.  See also
+     "Epoch" and "UTC."
 
 GNU
-     “GNU’s not Unix”.  An on-going project of the Free Software
+     "GNU's not Unix".  An on-going project of the Free Software
      Foundation to create a complete, freely distributable,
      POSIX-compliant computing environment.
 
 GNU/Linux
      A variant of the GNU system using the Linux kernel, instead of the
-     Free Software Foundation’s Hurd kernel.  The Linux kernel is a
+     Free Software Foundation's Hurd kernel.  The Linux kernel is a
      stable, efficient, full-featured clone of Unix that has been ported
      to a variety of architectures.  It is most popular on PC-class
      systems, but runs well on a variety of other systems too.  The
@@ -34480,17 +34443,17 @@ GNU/Linux
      General Public License, which is perhaps its most important aspect.
 
 GPL
-     See “General Public License.”
+     See "General Public License."
 
 Hexadecimal
-     Base 16 notation, where the digits are ‘0’–‘9’ and 
‘A’–‘F’, with
+     Base 16 notation, where the digits are ‘0’-‘9’ and 
‘A’-‘F’, with
      ‘A’ representing 10, ‘B’ representing 11, and so on, up to 
‘F’ for
      15.  Hexadecimal numbers are written in C using a leading ‘0x’, to
      indicate their base.  Thus, ‘0x12’ is 18 ((1 x 16) + 2).  *Note
      Nondecimal-numbers::.
 
 I/O
-     Abbreviation for “Input/Output,” the act of moving data into and/or
+     Abbreviation for "Input/Output," the act of moving data into and/or
      out of a running program.
 
 Input Record
@@ -34509,7 +34472,7 @@ Interpreter
      A program that reads human-readable source code directly, and uses
      the instructions in it to process data and produce results.  ‘awk’
      is typically (but not always) implemented as an interpreter.  See
-     also “Compiler.”
+     also "Compiler."
 
 Interval Expression
      A component of a regular expression that lets you specify repeated
@@ -34522,7 +34485,7 @@ ISO
      including programming languages, such as C and C++.  In the
      computer arena, important standards like those for C, C++, and
      POSIX become both American national and ISO international standards
-     simultaneously.  This Info file refers to Standard C as “ISO C”
+     simultaneously.  This Info file refers to Standard C as "ISO C"
      throughout.  See the ISO website
      (https://www.iso.org/iso/home/about.htm) for more information about
      the name of the organization and its language-independent
@@ -34540,7 +34503,7 @@ Keyword
      meaning.  Keywords are reserved and may not be used as variable
      names.
 
-     ‘gawk’’s keywords are: ‘BEGIN’, ‘BEGINFILE’, ‘END’, 
‘ENDFILE’,
+     ‘gawk’'s keywords are: ‘BEGIN’, ‘BEGINFILE’, ‘END’, 
‘ENDFILE’,
      ‘break’, ‘case’, ‘continue’, ‘default’, ‘delete’, 
‘do...while’,
      ‘else’, ‘exit’, ‘for...in’, ‘for’, ‘function’, 
‘func’, ‘if’,
      ‘next’, ‘nextfile’, ‘switch’, and ‘while’.
@@ -34549,7 +34512,7 @@ Korn Shell
      The Korn Shell (‘ksh’) is a Unix shell which was developed by David
      Korn at Bell Laboratories in the early 1980s.  The Korn Shell is
      backward-compatible with the Bourne shell and includes many
-     features of the C shell.  See also “Bourne Shell.”
+     features of the C shell.  See also "Bourne Shell."
 
 Lesser General Public License
      This document describes the terms under which binary library
@@ -34557,10 +34520,10 @@ Lesser General Public License
      distributed.
 
 LGPL
-     See “Lesser General Public License.”
+     See "Lesser General Public License."
 
 Linux
-     See “GNU/Linux.”
+     See "GNU/Linux."
 
 Localization
      The process of providing the data necessary for an
@@ -34591,7 +34554,7 @@ Metacharacters
 Nesting
      Nesting is where information is organized in layers, or where
      objects contain other similar objects.  In ‘gawk’ the ‘@include’
-     directive can be nested.  The “natural” nesting of arithmetic and
+     directive can be nested.  The "natural" nesting of arithmetic and
      logical operations can be changed using parentheses (*note
      Precedence::).
 
@@ -34610,7 +34573,7 @@ Number
      ‘awk’ implementations used single precision floating-point.
 
 Octal
-     Base-eight notation, where the digits are ‘0’–‘7’.  Octal 
numbers
+     Base-eight notation, where the digits are ‘0’-‘7’.  Octal numbers
      are written in C using a leading ‘0’, to indicate their base.
      Thus, ‘013’ is 11 ((1 x 8) + 3).  *Note Nondecimal-numbers::.
 
@@ -34635,11 +34598,11 @@ PEBKAC
      Chair.)
 
 Plug-in
-     See “Extensions.”
+     See "Extensions."
 
 POSIX
      The name for a series of standards that specify a Portable
-     Operating System interface.  The “IX” denotes the Unix heritage of
+     Operating System interface.  The "IX" denotes the Unix heritage of
      these standards.  The main standard of interest for ‘awk’ users is
      ‘IEEE Standard for Information Technology, Standard
      1003.1^{TM}-2017 (Revision of IEEE Std 1003.1-2008)’.  The 2018
@@ -34662,12 +34625,12 @@ Range (of input lines)
      specify single lines.  (*Note Pattern Overview::.)
 
 Record
-     See “Input record” and “Output record.”
+     See "Input record" and "Output record."
 
 Recursion
      When a function calls itself, either directly or indirectly.  If
      this is clear, stop, and proceed to the next entry.  Otherwise,
-     refer to the entry for “recursion.”
+     refer to the entry for "recursion."
 
 Redirection
      Redirection means performing input from something other than the
@@ -34691,10 +34654,10 @@ Reference Counts
      the value of the variable is freed.
 
 Regexp
-     See “Regular Expression.”
+     See "Regular Expression."
 
 Regular Expression
-     A regular expression (“regexp” for short) is a pattern that denotes
+     A regular expression ("regexp" for short) is a pattern that denotes
      a set of strings, possibly an infinite set.  For example, the
      regular expression ‘R.*xp’ matches any string starting with the
      letter ‘R’ and ending with the letters ‘xp’.  In ‘awk’, 
regular
@@ -34709,7 +34672,7 @@ Regular Expression Constant
      execution.  (*Note Regexp Usage::.)
 
 Regular Expression Operators
-     See “Metacharacters.”
+     See "Metacharacters."
 
 Rounding
      Rounding the result of an arithmetic operation can be tricky.  More
@@ -34721,7 +34684,7 @@ Rule
      A segment of an ‘awk’ program that specifies how to process single
      input records.  A rule consists of a “pattern” and an “action”.
      ‘awk’ reads an input record; then, for each rule, if the input
-     record satisfies the rule’s pattern, ‘awk’ executes the rule’s
+     record satisfies the rule's pattern, ‘awk’ executes the rule's
      action.  Otherwise, the rule does nothing for that input record.
 
 Rvalue
@@ -34739,7 +34702,7 @@ Search Path
      executable programs.
 
 ‘sed’
-     See “Stream Editor.”
+     See "Stream Editor."
 
 Seed
      The initial value, or starting point, for a sequence of random
@@ -34775,12 +34738,12 @@ Space
 
 Special File
      A file name interpreted internally by ‘gawk’, instead of being
-     handed directly to the underlying operating system—for example,
+     handed directly to the underlying operating system--for example,
      ‘/dev/stderr’.  (*Note Special Files::.)
 
 Statement
      An expression inside an ‘awk’ program in the action part of a
-     pattern–action rule, or inside an ‘awk’ function.  A statement can
+     pattern-action rule, or inside an ‘awk’ function.  A statement can
      be a variable assignment, an array operation, a loop, etc.
 
 Stream Editor
@@ -34805,13 +34768,13 @@ Text Domain
      messages that are translated at runtime into the local language.
 
 Timestamp
-     A value in the “seconds since the epoch” format used by Unix and
+     A value in the "seconds since the epoch" format used by Unix and
      POSIX systems.  Used for the ‘gawk’ functions ‘mktime()’,
-     ‘strftime()’, and ‘systime()’.  See also “Epoch,” “GMT,” 
and “UTC.”
+     ‘strftime()’, and ‘systime()’.  See also "Epoch," "GMT," and 
"UTC."
 
 Unix
      A computer operating system originally developed in the early
-     1970’s at AT&T Bell Laboratories.  It initially became popular in
+     1970's at AT&T Bell Laboratories.  It initially became popular in
      universities around the world and later moved into commercial
      environments as a software development system and network server
      system.  There are many commercial versions of Unix, as well as
@@ -34820,9 +34783,10 @@ Unix
      (https://www.freebsd.org), and OpenBSD (http://www.openbsd.org)).
 
 UTC
-     The accepted abbreviation for “Universal Coordinated Time.” This is
-     standard time in Greenwich, England, which is used as a reference
-     time for day and date calculations.  See also “Epoch” and “GMT.”
+     The accepted abbreviation for "Universal Coordinated Time."  This
+     is standard time in Greenwich, England, which is used as a
+     reference time for day and date calculations.  See also "Epoch" and
+     "GMT."
 
 Variable
      A name for a value.  In ‘awk’, variables may be either scalars or
@@ -34854,7 +34818,7 @@ and other kinds of works.
    The licenses for most software and other practical works are designed
 to take away your freedom to share and change the works.  By contrast,
 the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program—to make sure it remains free
+share and change all versions of a program--to make sure it remains free
 software for all its users.  We, the Free Software Foundation, use the
 GNU General Public License for most of our software; it applies also to
 any other work released this way by its authors.  You can apply it to
@@ -34882,16 +34846,16 @@ know their rights.
 (1) assert copyright on the software, and (2) offer you this License
 giving you legal permission to copy, distribute and/or modify it.
 
-   For the developers’ and authors’ protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users’ and
-authors’ sake, the GPL requires that modified versions be marked as
+   For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
 changed, so that their problems will not be attributed erroneously to
 authors of previous versions.
 
    Some devices are designed to deny users access to install or run
 modified versions of the software inside them, although the manufacturer
 can do so.  This is fundamentally incompatible with the aim of
-protecting users’ freedom to change the software.  The systematic
+protecting users' freedom to change the software.  The systematic
 pattern of such abuse occurs in the area of products for individuals to
 use, which is precisely where it is most unacceptable.  Therefore, we
 have designed this version of the GPL to prohibit the practice for those
@@ -34914,25 +34878,25 @@ TERMS AND CONDITIONS
 
   0. Definitions.
 
-     “This License” refers to version 3 of the GNU General Public
+     "This License" refers to version 3 of the GNU General Public
      License.
 
-     “Copyright” also means copyright-like laws that apply to other
+     "Copyright" also means copyright-like laws that apply to other
      kinds of works, such as semiconductor masks.
 
-     “The Program” refers to any copyrightable work licensed under this
-     License.  Each licensee is addressed as “you”.  “Licensees” and
-     “recipients” may be individuals or organizations.
+     "The Program" refers to any copyrightable work licensed under this
+     License.  Each licensee is addressed as "you".  "Licensees" and
+     "recipients" may be individuals or organizations.
 
-     To “modify” a work means to copy from or adapt all or part of the
+     To "modify" a work means to copy from or adapt all or part of the
      work in a fashion requiring copyright permission, other than the
-     making of an exact copy.  The resulting work is called a “modified
-     version” of the earlier work or a work “based on” the earlier work.
+     making of an exact copy.  The resulting work is called a "modified
+     version" of the earlier work or a work "based on" the earlier work.
 
-     A “covered work” means either the unmodified Program or a work
+     A "covered work" means either the unmodified Program or a work
      based on the Program.
 
-     To “propagate” a work means to do anything with it that, without
+     To "propagate" a work means to do anything with it that, without
      permission, would make you directly or secondarily liable for
      infringement under applicable copyright law, except executing it on
      a computer or modifying a private copy.  Propagation includes
@@ -34940,12 +34904,12 @@ TERMS AND CONDITIONS
      available to the public, and in some countries other activities as
      well.
 
-     To “convey” a work means any kind of propagation that enables other
+     To "convey" a work means any kind of propagation that enables other
      parties to make or receive copies.  Mere interaction with a user
      through a computer network, with no transfer of a copy, is not
      conveying.
 
-     An interactive user interface displays “Appropriate Legal Notices”
+     An interactive user interface displays "Appropriate Legal Notices"
      to the extent that it includes a convenient and prominently visible
      feature that (1) displays an appropriate copyright notice, and (2)
      tells the user that there is no warranty for the work (except to
@@ -34957,33 +34921,33 @@ TERMS AND CONDITIONS
 
   1. Source Code.
 
-     The “source code” for a work means the preferred form of the work
-     for making modifications to it.  “Object code” means any non-source
+     The "source code" for a work means the preferred form of the work
+     for making modifications to it.  "Object code" means any non-source
      form of a work.
 
-     A “Standard Interface” means an interface that either is an
+     A "Standard Interface" means an interface that either is an
      official standard defined by a recognized standards body, or, in
      the case of interfaces specified for a particular programming
      language, one that is widely used among developers working in that
      language.
 
-     The “System Libraries” of an executable work include anything,
+     The "System Libraries" of an executable work include anything,
      other than the work as a whole, that (a) is included in the normal
      form of packaging a Major Component, but which is not part of that
      Major Component, and (b) serves only to enable use of the work with
      that Major Component, or to implement a Standard Interface for
      which an implementation is available to the public in source code
-     form.  A “Major Component”, in this context, means a major
+     form.  A "Major Component", in this context, means a major
      essential component (kernel, window system, and so on) of the
      specific operating system (if any) on which the executable work
      runs, or a compiler used to produce the work, or an object code
      interpreter used to run it.
 
-     The “Corresponding Source” for a work in object code form means all
+     The "Corresponding Source" for a work in object code form means all
      the source code needed to generate, install, and (for an executable
      work) run the object code and to modify the work, including scripts
      to control those activities.  However, it does not include the
-     work’s System Libraries, or general-purpose tools or generally
+     work's System Libraries, or general-purpose tools or generally
      available free programs which are used unmodified in performing
      those activities but which are not part of the work.  For example,
      Corresponding Source includes interface definition files associated
@@ -35027,7 +34991,7 @@ TERMS AND CONDITIONS
      the conditions stated below.  Sublicensing is not allowed; section
      10 makes it unnecessary.
 
-  3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 
      No covered work shall be deemed part of an effective technological
      measure under any applicable law fulfilling obligations under
@@ -35040,12 +35004,12 @@ TERMS AND CONDITIONS
      circumvention is effected by exercising rights under this License
      with respect to the covered work, and you disclaim any intention to
      limit operation or modification of the work as a means of
-     enforcing, against the work’s users, your or third parties’ legal
+     enforcing, against the work's users, your or third parties' legal
      rights to forbid circumvention of technological measures.
 
   4. Conveying Verbatim Copies.
 
-     You may convey verbatim copies of the Program’s source code as you
+     You may convey verbatim copies of the Program's source code as you
      receive it, in any medium, provided that you conspicuously and
      appropriately publish on each copy an appropriate copyright notice;
      keep intact all notices stating that this License and any
@@ -35069,7 +35033,7 @@ TERMS AND CONDITIONS
        b. The work must carry prominent notices stating that it is
           released under this License and any conditions added under
           section 7.  This requirement modifies the requirement in
-          section 4 to “keep intact all notices”.
+          section 4 to "keep intact all notices".
 
        c. You must license the entire work, as a whole, under this
           License to anyone who comes into possession of a copy.  This
@@ -35089,9 +35053,9 @@ TERMS AND CONDITIONS
      works, which are not by their nature extensions of the covered
      work, and which are not combined with it such as to form a larger
      program, in or on a volume of a storage or distribution medium, is
-     called an “aggregate” if the compilation and its resulting
+     called an "aggregate" if the compilation and its resulting
      copyright are not used to limit the access or legal rights of the
-     compilation’s users beyond what the individual works permit.
+     compilation's users beyond what the individual works permit.
      Inclusion of a covered work in an aggregate does not cause this
      License to apply to the other parts of the aggregate.
 
@@ -35149,13 +35113,13 @@ TERMS AND CONDITIONS
      excluded from the Corresponding Source as a System Library, need
      not be included in conveying the object code work.
 
-     A “User Product” is either (1) a “consumer product”, which means
+     A "User Product" is either (1) a "consumer product", which means
      any tangible personal property which is normally used for personal,
      family, or household purposes, or (2) anything designed or sold for
      incorporation into a dwelling.  In determining whether a product is
      a consumer product, doubtful cases shall be resolved in favor of
      coverage.  For a particular product received by a particular user,
-     “normally used” refers to a typical or common use of that class of
+     "normally used" refers to a typical or common use of that class of
      product, regardless of the status of the particular user or of the
      way in which the particular user actually uses, or expects or is
      expected to use, the product.  A product is a consumer product
@@ -35163,7 +35127,7 @@ TERMS AND CONDITIONS
      industrial or non-consumer uses, unless such uses represent the
      only significant mode of use of the product.
 
-     “Installation Information” for a User Product means any methods,
+     "Installation Information" for a User Product means any methods,
      procedures, authorization keys, or other information required to
      install and execute modified versions of a covered work in that
      User Product from a modified version of its Corresponding Source.
@@ -35199,7 +35163,7 @@ TERMS AND CONDITIONS
 
   7. Additional Terms.
 
-     “Additional permissions” are terms that supplement the terms of
+     "Additional permissions" are terms that supplement the terms of
      this License by making exceptions from one or more of its
      conditions.  Additional permissions that are applicable to the
      entire Program shall be treated as though they were included in
@@ -35244,8 +35208,8 @@ TERMS AND CONDITIONS
           the recipient, for any liability that these contractual
           assumptions directly impose on those licensors and authors.
 
-     All other non-permissive additional terms are considered “further
-     restrictions” within the meaning of section 10.  If the Program as
+     All other non-permissive additional terms are considered "further
+     restrictions" within the meaning of section 10.  If the Program as
      you received it, or any part of it, contains a notice stating that
      it is governed by this License along with a term that is a further
      restriction, you may remove that term.  If a license document
@@ -35311,12 +35275,12 @@ TERMS AND CONDITIONS
      responsible for enforcing compliance by third parties with this
      License.
 
-     An “entity transaction” is a transaction transferring control of an
+     An "entity transaction" is a transaction transferring control of an
      organization, or substantially all assets of one, or subdividing an
      organization, or merging organizations.  If propagation of a
      covered work results from an entity transaction, each party to that
      transaction who receives a copy of the work also receives whatever
-     licenses to the work the party’s predecessor in interest had or
+     licenses to the work the party's predecessor in interest had or
      could give under the previous paragraph, plus a right to possession
      of the Corresponding Source of the work from the predecessor in
      interest, if the predecessor has it or can get it with reasonable
@@ -35333,31 +35297,31 @@ TERMS AND CONDITIONS
 
   11. Patents.
 
-     A “contributor” is a copyright holder who authorizes use under this
+     A "contributor" is a copyright holder who authorizes use under this
      License of the Program or a work on which the Program is based.
-     The work thus licensed is called the contributor’s “contributor
-     version”.
+     The work thus licensed is called the contributor's "contributor
+     version".
 
-     A contributor’s “essential patent claims” are all patent claims
+     A contributor's "essential patent claims" are all patent claims
      owned or controlled by the contributor, whether already acquired or
      hereafter acquired, that would be infringed by some manner,
      permitted by this License, of making, using, or selling its
      contributor version, but do not include claims that would be
      infringed only as a consequence of further modification of the
-     contributor version.  For purposes of this definition, “control”
+     contributor version.  For purposes of this definition, "control"
      includes the right to grant patent sublicenses in a manner
      consistent with the requirements of this License.
 
      Each contributor grants you a non-exclusive, worldwide,
-     royalty-free patent license under the contributor’s essential
+     royalty-free patent license under the contributor's essential
      patent claims, to make, use, sell, offer for sale, import and
      otherwise run, modify and propagate the contents of its contributor
      version.
 
-     In the following three paragraphs, a “patent license” is any
+     In the following three paragraphs, a "patent license" is any
      express agreement or commitment, however denominated, not to
      enforce a patent (such as an express permission to practice a
-     patent or covenant not to sue for patent infringement).  To “grant”
+     patent or covenant not to sue for patent infringement).  To "grant"
      such a patent license to a party means to make such an agreement or
      commitment not to enforce a patent against the party.
 
@@ -35370,9 +35334,9 @@ TERMS AND CONDITIONS
      yourself of the benefit of the patent license for this particular
      work, or (3) arrange, in a manner consistent with the requirements
      of this License, to extend the patent license to downstream
-     recipients.  “Knowingly relying” means you have actual knowledge
+     recipients.  "Knowingly relying" means you have actual knowledge
      that, but for the patent license, your conveying the covered work
-     in a country, or your recipient’s use of the covered work in a
+     in a country, or your recipient's use of the covered work in a
      country, would infringe one or more identifiable patents in that
      country that you have reason to believe are valid.
 
@@ -35384,7 +35348,7 @@ TERMS AND CONDITIONS
      patent license you grant is automatically extended to all
      recipients of the covered work and works based on it.
 
-     A patent license is “discriminatory” if it does not include within
+     A patent license is "discriminatory" if it does not include within
      the scope of its coverage, prohibits the exercise of, or is
      conditioned on the non-exercise of one or more of the rights that
      are specifically granted under this License.  You may not convey a
@@ -35404,7 +35368,7 @@ TERMS AND CONDITIONS
      any implied license or other defenses to infringement that may
      otherwise be available to you under applicable patent law.
 
-  12. No Surrender of Others’ Freedom.
+  12. No Surrender of Others' Freedom.
 
      If conditions are imposed on you (whether by court order, agreement
      or otherwise) that contradict the conditions of this License, they
@@ -35437,7 +35401,7 @@ TERMS AND CONDITIONS
 
      Each version is given a distinguishing version number.  If the
      Program specifies that a certain numbered version of the GNU
-     General Public License “or any later version” applies to it, you
+     General Public License "or any later version" applies to it, you
      have the option of following the terms and conditions either of
      that numbered version or of any later version published by the Free
      Software Foundation.  If the Program does not specify a version
@@ -35446,7 +35410,7 @@ TERMS AND CONDITIONS
 
      If the Program specifies that a proxy can decide which future
      versions of the GNU General Public License can be used, that
-     proxy’s public statement of acceptance of a version permanently
+     proxy's public statement of acceptance of a version permanently
      authorizes you to choose that version for the Program.
 
      Later license versions may give you additional or different
@@ -35458,7 +35422,7 @@ TERMS AND CONDITIONS
 
      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
      APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
-     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS”
+     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
@@ -35502,7 +35466,7 @@ terms.
    To do so, attach the following notices to the program.  It is safest
 to attach them to the start of each source file to most effectively
 state the exclusion of warranty; and each file should have at least the
-“copyright” line and a pointer to where the full notice is found.
+"copyright" line and a pointer to where the full notice is found.
 
      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
      Copyright (C) YEAR NAME OF AUTHOR
@@ -35533,11 +35497,11 @@ notice like this when it starts in an interactive 
mode:
 
    The hypothetical commands ‘show w’ and ‘show c’ should show the
 appropriate parts of the General Public License.  Of course, your
-program’s commands might be different; for a GUI interface, you would
-use an “about box”.
+program's commands might be different; for a GUI interface, you would
+use an "about box".
 
    You should also get your employer (if you work as a programmer) or
-school, if any, to sign a “copyright disclaimer” for the program, if
+school, if any, to sign a "copyright disclaimer" for the program, if
 necessary.  For more information on this, and how to apply and follow
 the GNU GPL, see <https://www.gnu.org/licenses/>.
 
@@ -35572,7 +35536,7 @@ GNU Free Documentation License
      author and publisher a way to get credit for their work, while not
      being considered responsible for modifications made by others.
 
-     This License is a kind of “copyleft”, which means that derivative
+     This License is a kind of "copyleft", which means that derivative
      works of the document must themselves be free in the same sense.
      It complements the GNU General Public License, which is a copyleft
      license designed for free software.
@@ -35593,18 +35557,18 @@ GNU Free Documentation License
      be distributed under the terms of this License.  Such a notice
      grants a world-wide, royalty-free license, unlimited in duration,
      to use that work under the conditions stated herein.  The
-     “Document”, below, refers to any such manual or work.  Any member
-     of the public is a licensee, and is addressed as “you”.  You accept
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You accept
      the license if you copy, modify or distribute the work in a way
      requiring permission under copyright law.
 
-     A “Modified Version” of the Document means any work containing the
+     A "Modified Version" of the Document means any work containing the
      Document or a portion of it, either copied verbatim, or with
      modifications and/or translated into another language.
 
-     A “Secondary Section” is a named appendix or a front-matter section
+     A "Secondary Section" is a named appendix or a front-matter section
      of the Document that deals exclusively with the relationship of the
-     publishers or authors of the Document to the Document’s overall
+     publishers or authors of the Document to the Document's overall
      subject (or to related matters) and contains nothing that could
      fall directly within that overall subject.  (Thus, if the Document
      is in part a textbook of mathematics, a Secondary Section may not
@@ -35613,7 +35577,7 @@ GNU Free Documentation License
      of legal, commercial, philosophical, ethical or political position
      regarding them.
 
-     The “Invariant Sections” are certain Secondary Sections whose
+     The "Invariant Sections" are certain Secondary Sections whose
      titles are designated, as being those of Invariant Sections, in the
      notice that says that the Document is released under this License.
      If a section does not fit the above definition of Secondary then it
@@ -35621,13 +35585,13 @@ GNU Free Documentation License
      contain zero Invariant Sections.  If the Document does not identify
      any Invariant Sections then there are none.
 
-     The “Cover Texts” are certain short passages of text that are
+     The "Cover Texts" are certain short passages of text that are
      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
      that says that the Document is released under this License.  A
      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
      be at most 25 words.
 
-     A “Transparent” copy of the Document means a machine-readable copy,
+     A "Transparent" copy of the Document means a machine-readable copy,
      represented in a format whose specification is available to the
      general public, that is suitable for revising the document
      straightforwardly with generic text editors or (for images composed
@@ -35639,7 +35603,7 @@ GNU Free Documentation License
      been arranged to thwart or discourage subsequent modification by
      readers is not Transparent.  An image format is not Transparent if
      used for any substantial amount of text.  A copy that is not
-     “Transparent” is called “Opaque”.
+     "Transparent" is called "Opaque".
 
      Examples of suitable formats for Transparent copies include plain
      ASCII without markup, Texinfo input format, LaTeX input format,
@@ -35652,23 +35616,23 @@ GNU Free Documentation License
      the machine-generated HTML, PostScript or PDF produced by some word
      processors for output purposes only.
 
-     The “Title Page” means, for a printed book, the title page itself,
+     The "Title Page" means, for a printed book, the title page itself,
      plus such following pages as are needed to hold, legibly, the
      material this License requires to appear in the title page.  For
-     works in formats which do not have any title page as such, “Title
-     Page” means the text near the most prominent appearance of the
-     work’s title, preceding the beginning of the body of the text.
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
 
-     The “publisher” means any person or entity that distributes copies
+     The "publisher" means any person or entity that distributes copies
      of the Document to the public.
 
-     A section “Entitled XYZ” means a named subunit of the Document
+     A section "Entitled XYZ" means a named subunit of the Document
      whose title either is precisely XYZ or contains XYZ in parentheses
      following text that translates XYZ in another language.  (Here XYZ
      stands for a specific section name mentioned below, such as
-     “Acknowledgements”, “Dedications”, “Endorsements”, or 
“History”.)
-     To “Preserve the Title” of such a section when you modify the
-     Document means that it remains a section “Entitled XYZ” according
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
      to this definition.
 
      The Document may include Warranty Disclaimers next to the notice
@@ -35698,7 +35662,7 @@ GNU Free Documentation License
 
      If you publish printed copies (or copies in media that commonly
      have printed covers) of the Document, numbering more than 100, and
-     the Document’s license notice requires Cover Texts, you must
+     the Document's license notice requires Cover Texts, you must
      enclose the copies in covers that carry, clearly and legibly, all
      these Cover Texts: Front-Cover Texts on the front cover, and
      Back-Cover Texts on the back cover.  Both covers must also clearly
@@ -35770,15 +35734,15 @@ GNU Free Documentation License
           the Addendum below.
 
        G. Preserve in that license notice the full lists of Invariant
-          Sections and required Cover Texts given in the Document’s
+          Sections and required Cover Texts given in the Document's
           license notice.
 
        H. Include an unaltered copy of this License.
 
-       I. Preserve the section Entitled “History”, Preserve its Title,
+       I. Preserve the section Entitled "History", Preserve its Title,
           and add to it an item stating at least the title, year, new
           authors, and publisher of the Modified Version as given on the
-          Title Page.  If there is no section Entitled “History” in the
+          Title Page.  If there is no section Entitled "History" in the
           Document, create one stating the title, year, authors, and
           publisher of the Document as given on its Title Page, then add
           an item describing the Modified Version as stated in the
@@ -35788,12 +35752,12 @@ GNU Free Documentation License
           for public access to a Transparent copy of the Document, and
           likewise the network locations given in the Document for
           previous versions it was based on.  These may be placed in the
-          “History” section.  You may omit a network location for a work
+          "History" section.  You may omit a network location for a work
           that was published at least four years before the Document
           itself, or if the original publisher of the version it refers
           to gives permission.
 
-       K. For any section Entitled “Acknowledgements” or “Dedications”,
+       K. For any section Entitled "Acknowledgements" or "Dedications",
           Preserve the Title of the section, and preserve in the section
           all the substance and tone of each of the contributor
           acknowledgements and/or dedications given therein.
@@ -35802,11 +35766,11 @@ GNU Free Documentation License
           in their text and in their titles.  Section numbers or the
           equivalent are not considered part of the section titles.
 
-       M. Delete any section Entitled “Endorsements”.  Such a section
+       M. Delete any section Entitled "Endorsements".  Such a section
           may not be included in the Modified Version.
 
        N. Do not retitle any existing section to be Entitled
-          “Endorsements” or to conflict in title with any Invariant
+          "Endorsements" or to conflict in title with any Invariant
           Section.
 
        O. Preserve any Warranty Disclaimers.
@@ -35815,15 +35779,15 @@ GNU Free Documentation License
      appendices that qualify as Secondary Sections and contain no
      material copied from the Document, you may at your option designate
      some or all of these sections as invariant.  To do this, add their
-     titles to the list of Invariant Sections in the Modified Version’s
+     titles to the list of Invariant Sections in the Modified Version's
      license notice.  These titles must be distinct from any other
      section titles.
 
-     You may add a section Entitled “Endorsements”, provided it contains
+     You may add a section Entitled "Endorsements", provided it contains
      nothing but endorsements of your Modified Version by various
-     parties—for example, statements of peer review or that the text has
-     been approved by an organization as the authoritative definition of
-     a standard.
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
 
      You may add a passage of up to five words as a Front-Cover Text,
      and a passage of up to 25 words as a Back-Cover Text, to the end of
@@ -35861,10 +35825,10 @@ GNU Free Documentation License
      combined work.
 
      In the combination, you must combine any sections Entitled
-     “History” in the various original documents, forming one section
-     Entitled “History”; likewise combine any sections Entitled
-     “Acknowledgements”, and any sections Entitled “Dedications”.  You
-     must delete all sections Entitled “Endorsements.”
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
 
   6. COLLECTIONS OF DOCUMENTS
 
@@ -35885,16 +35849,16 @@ GNU Free Documentation License
 
      A compilation of the Document or its derivatives with other
      separate and independent documents or works, in or on a volume of a
-     storage or distribution medium, is called an “aggregate” if the
+     storage or distribution medium, is called an "aggregate" if the
      copyright resulting from the compilation is not used to limit the
-     legal rights of the compilation’s users beyond what the individual
+     legal rights of the compilation's users beyond what the individual
      works permit.  When the Document is included in an aggregate, this
      License does not apply to the other works in the aggregate which
      are not themselves derivative works of the Document.
 
      If the Cover Text requirement of section 3 is applicable to these
      copies of the Document, then if the Document is less than one half
-     of the entire aggregate, the Document’s Cover Texts may be placed
+     of the entire aggregate, the Document's Cover Texts may be placed
      on covers that bracket the Document within the aggregate, or the
      electronic equivalent of covers if the Document is in electronic
      form.  Otherwise they must appear on printed covers that bracket
@@ -35916,8 +35880,8 @@ GNU Free Documentation License
      this License or a notice or disclaimer, the original version will
      prevail.
 
-     If a section in the Document is Entitled “Acknowledgements”,
-     “Dedications”, or “History”, the requirement (section 4) to
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
      Preserve its Title (section 1) will typically require changing the
      actual title.
 
@@ -35958,7 +35922,7 @@ GNU Free Documentation License
 
      Each version of the License is given a distinguishing version
      number.  If the Document specifies that a particular numbered
-     version of this License “or any later version” applies to it, you
+     version of this License "or any later version" applies to it, you
      have the option of following the terms and conditions either of
      that specified version or of any later version that has been
      published (not as a draft) by the Free Software Foundation.  If the
@@ -35966,29 +35930,29 @@ GNU Free Documentation License
      choose any version ever published (not as a draft) by the Free
      Software Foundation.  If the Document specifies that a proxy can
      decide which future versions of this License can be used, that
-     proxy’s public statement of acceptance of a version permanently
+     proxy's public statement of acceptance of a version permanently
      authorizes you to choose that version for the Document.
 
   11. RELICENSING
 
-     “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
      World Wide Web server that publishes copyrightable works and also
      provides prominent facilities for anybody to edit those works.  A
      public wiki that anybody can edit is an example of such a server.
-     A “Massive Multiauthor Collaboration” (or “MMC”) contained in the
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
      site means any set of copyrightable works thus published on the MMC
      site.
 
-     “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
      license published by Creative Commons Corporation, a not-for-profit
      corporation with a principal place of business in San Francisco,
      California, as well as future copyleft versions of that license
      published by that same organization.
 
-     “Incorporate” means to publish or republish a Document, in whole or
+     "Incorporate" means to publish or republish a Document, in whole or
      in part, as part of another Document.
 
-     An MMC is “eligible for relicensing” if it is licensed under this
+     An MMC is "eligible for relicensing" if it is licensed under this
      License, and if all works that were first published under this
      License somewhere other than this MMC, and subsequently
      incorporated in whole or in part into the MMC, (1) had no cover
@@ -36015,7 +35979,7 @@ notices just after the title page:
        Free Documentation License''.
 
    If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the “with...Texts.” line with this:
+Texts, replace the "with...Texts."  line with this:
 
          with the Invariant Sections being LIST THEIR TITLES, with
          the Front-Cover Texts being LIST, and with the Back-Cover Texts
@@ -36039,81 +36003,22 @@ Index
 [index]
 * Menu:
 
-* ! (exclamation point), !~ operator:    Regexp Usage.        (line  19)
-* ! (exclamation point), !~ operator <1>: Computed Regexps.   (line   6)
-* ! (exclamation point), !~ operator <2>: Case-sensitivity.   (line  26)
-* ! (exclamation point), !~ operator <3>: Regexp Constants.   (line   6)
-* ! (exclamation point), != operator:    Comparison Operators.
-                                                              (line  11)
-* ! (exclamation point), !~ operator <4>: Comparison Operators.
-                                                              (line  11)
-* ! (exclamation point), !~ operator <5>: Comparison Operators.
-                                                              (line  99)
-* ! (exclamation point), ! operator:     Boolean Ops.         (line  69)
-* ! (exclamation point), ! operator <1>: Precedence.          (line  51)
-* ! (exclamation point), != operator <1>: Precedence.         (line  64)
-* ! (exclamation point), !~ operator <6>: Precedence.         (line  79)
-* ! (exclamation point), !~ operator <7>: Expression Patterns.
-                                                              (line  24)
-* ! (exclamation point), ! operator <2>: Ranges.              (line  47)
-* ! (exclamation point), ! operator <3>: Egrep Program.       (line 204)
-* " (double quote), in shell commands:   Quoting.             (line  54)
-* " (double quote), in regexp constants: Computed Regexps.    (line  30)
-* # (number sign), #! (executable scripts): Executable Scripts.
-                                                              (line   6)
-* # (number sign), commenting:           Comments.            (line   6)
-* $ (dollar sign), regexp operator:      Regexp Operator Details.
-                                                              (line  31)
-* $ (dollar sign), $ field operator:     Fields.              (line  19)
-* $ (dollar sign), incrementing fields and arrays: Increment Ops.
-                                                              (line  30)
-* $ (dollar sign), $ field operator <1>: Precedence.          (line  42)
-* % (percent sign), %= operator:         Assignment Ops.      (line 129)
-* % (percent sign), % operator:          Precedence.          (line  54)
-* % (percent sign), %= operator <1>:     Precedence.          (line  94)
-* & (ampersand), && operator:            Boolean Ops.         (line  59)
-* & (ampersand), && operator <1>:        Precedence.          (line  85)
-* & (ampersand), gsub()/gensub()/sub() functions and: Gory Details.
-                                                              (line   6)
-* ' (single quote):                      One-shot.            (line  15)
-* ' (single quote), in gawk command lines: Long.              (line  35)
-* ' (single quote), vs. apostrophe:      Comments.            (line  27)
-* ' (single quote), in shell commands:   Quoting.             (line  48)
-* ' (single quote), with double quotes:  Quoting.             (line  73)
-* () (parentheses), regexp operator:     Regexp Operator Details.
-                                                              (line  77)
-* () (parentheses), in a profile:        Profiling.           (line 146)
-* * (asterisk), * operator, as regexp operator: Regexp Operator Details.
-                                                              (line  91)
-* * (asterisk), ** operator:             Arithmetic Ops.      (line  85)
-* * (asterisk), *= operator:             Assignment Ops.      (line 129)
-* * (asterisk), **= operator:            Assignment Ops.      (line 129)
-* * (asterisk), ** operator <1>:         Precedence.          (line  48)
-* * (asterisk), * operator, as multiplication operator: Precedence.
-                                                              (line  54)
-* * (asterisk), *= operator <1>:         Precedence.          (line  94)
-* * (asterisk), **= operator <1>:        Precedence.          (line  94)
-* * (asterisk), * operator, null strings, matching: String Functions.
-                                                              (line 575)
-* + (plus sign), regexp operator:        Regexp Operator Details.
-                                                              (line 107)
-* + (plus sign), += operator:            Assignment Ops.      (line  81)
-* + (plus sign), ++ operator:            Increment Ops.       (line  11)
-* + (plus sign), ++ operator <1>:        Increment Ops.       (line  40)
-* + (plus sign), ++ operator <2>:        Precedence.          (line  45)
-* + (plus sign), + operator:             Precedence.          (line  51)
-* + (plus sign), + operator <1>:         Precedence.          (line  57)
-* + (plus sign), += operator <1>:        Precedence.          (line  94)
-* , (comma), in range patterns:          Ranges.              (line   6)
-* - (hyphen), file names beginning with: Options.             (line  63)
+* _ (underscore), C macro:               Explaining gettext.  (line  71)
+* _ (underscore), in names of private variables: Library Names.
+                                                              (line  29)
+* _ (underscore), translatable strings:  Programmer i18n.     (line  69)
+* _gr_init() user-defined function:      Group Functions.     (line  83)
+* _ord_init() user-defined function:     Ordinal Functions.   (line  16)
+* _pw_init() user-defined function:      Passwd Functions.    (line 105)
+* - (hyphen), - operator:                Precedence.          (line  51)
+* - (hyphen), - operator <1>:            Precedence.          (line  57)
 * - (hyphen), -- end of options marker:  Options.             (line 360)
-* - (hyphen), in bracket expressions:    Bracket Expressions. (line  25)
-* - (hyphen), -= operator:               Assignment Ops.      (line 129)
 * - (hyphen), -- operator:               Increment Ops.       (line  48)
 * - (hyphen), -- operator <1>:           Precedence.          (line  45)
-* - (hyphen), - operator:                Precedence.          (line  51)
-* - (hyphen), - operator <1>:            Precedence.          (line  57)
+* - (hyphen), -= operator:               Assignment Ops.      (line 129)
 * - (hyphen), -= operator <1>:           Precedence.          (line  94)
+* - (hyphen), file names beginning with: Options.             (line  63)
+* - (hyphen), in bracket expressions:    Bracket Expressions. (line  25)
 * --assign option:                       Options.             (line  36)
 * --bignum option:                       Options.             (line 248)
 * --characters-as-bytes option:          Options.             (line  72)
@@ -36158,11 +36063,11 @@ Index
 * --profile option <1>:                  Profiling.           (line  12)
 * --re-interval option:                  Options.             (line 329)
 * --sandbox option:                      Options.             (line 340)
+* --sandbox option, disabling system() function: I/O Functions.
+                                                              (line 127)
 * --sandbox option, input redirection with getline: Getline.  (line  19)
 * --sandbox option, output redirection with print, printf: Redirection.
                                                               (line   6)
-* --sandbox option, disabling system() function: I/O Functions.
-                                                              (line 127)
 * --source option:                       Options.             (line 120)
 * --trace option:                        Options.             (line 197)
 * --traditional option:                  Options.             (line  85)
@@ -36181,9 +36086,9 @@ Index
 * -F option:                             Options.             (line  21)
 * -f option <1>:                         Options.             (line  25)
 * -F option, -Ft sets FS to TAB:         Options.             (line 368)
-* -f option, multiple uses:              Options.             (line 373)
 * -F option, command-line:               Command Line Field Separator.
                                                               (line   6)
+* -f option, multiple uses:              Options.             (line 373)
 * -g option:                             Options.             (line 168)
 * -h option:                             Options.             (line 175)
 * -i option:                             Options.             (line 180)
@@ -36206,161 +36111,214 @@ Index
 * -V option:                             Options.             (line 355)
 * -v option <1>:                         Assignment Options.  (line  12)
 * -W option:                             Options.             (line  50)
-* . (period), regexp operator:           Regexp Operator Details.
-                                                              (line  40)
-* .gmo files:                            Explaining gettext.  (line  42)
-* .gmo files, specifying directory of:   Explaining gettext.  (line  54)
-* .gmo files, specifying directory of <1>: Programmer i18n.   (line  48)
-* .mo files, converting from .po:        I18N Example.        (line  80)
-* .po files:                             Explaining gettext.  (line  37)
-* .po files <1>:                         Translator i18n.     (line   6)
-* .po files, converting to .mo:          I18N Example.        (line  80)
-* .pot files:                            Explaining gettext.  (line  31)
-* / (forward slash), to enclose regular expressions: Regexp.  (line  10)
-* / (forward slash), /= operator:        Assignment Ops.      (line 129)
-* / (forward slash), /= operator, vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 150)
-* / (forward slash), / operator:         Precedence.          (line  54)
-* / (forward slash), /= operator <1>:    Precedence.          (line  94)
-* / (forward slash), patterns and:       Expression Patterns. (line  24)
-* /= operator vs. /=.../ regexp constant: Assignment Ops.     (line 150)
-* /dev/... special files:                Special FD.          (line  48)
-* /dev/fd/N special files (gawk):        Special FD.          (line  48)
-* /inet/... special files (gawk):        TCP/IP Networking.   (line   6)
-* /inet4/... special files (gawk):       TCP/IP Networking.   (line   6)
-* /inet6/... special files (gawk):       TCP/IP Networking.   (line   6)
-* : (colon), ?: operator:                Precedence.          (line  91)
-* : (colon), :: namespace separator:     Qualified Names.     (line   6)
+* , (comma), in range patterns:          Ranges.              (line   6)
+* ; (semicolon), AWKPATH variable and:   PC Using.            (line  12)
+* ; (semicolon), separating rules:       Statements/Lines.    (line 118)
 * ; (semicolon), separating statements in actions: Statements/Lines.
                                                               (line 118)
-* ; (semicolon), separating rules:       Statements/Lines.    (line 118)
 * ; (semicolon), separating statements in actions <1>: Action Overview.
                                                               (line  19)
 * ; (semicolon), separating statements in actions <2>: Statements.
                                                               (line  10)
-* ; (semicolon), AWKPATH variable and:   PC Using.            (line  12)
-* < (left angle bracket), < operator (I/O): Getline/File.     (line   6)
-* < (left angle bracket), < operator:    Comparison Operators.
-                                                              (line  11)
-* < (left angle bracket), <= operator:   Comparison Operators.
-                                                              (line  11)
-* < (left angle bracket), < operator <1>: Precedence.         (line  64)
-* < (left angle bracket), <= operator <1>: Precedence.        (line  64)
-* = (equals sign), = operator:           Assignment Ops.      (line   6)
-* = (equals sign), == operator:          Comparison Operators.
-                                                              (line  11)
-* = (equals sign), == operator <1>:      Precedence.          (line  64)
-* > (right angle bracket), > operator (I/O): Redirection.     (line  22)
-* > (right angle bracket), >> operator (I/O): Redirection.    (line  50)
-* > (right angle bracket), >= operator:  Comparison Operators.
+* : (colon), :: namespace separator:     Qualified Names.     (line   6)
+* : (colon), ?: operator:                Precedence.          (line  91)
+* ! (exclamation point), ! operator:     Boolean Ops.         (line  69)
+* ! (exclamation point), ! operator <1>: Precedence.          (line  51)
+* ! (exclamation point), ! operator <2>: Ranges.              (line  47)
+* ! (exclamation point), ! operator <3>: Egrep Program.       (line 204)
+* ! (exclamation point), != operator:    Comparison Operators.
                                                               (line  11)
-* > (right angle bracket), > operator:   Comparison Operators.
+* ! (exclamation point), != operator <1>: Precedence.         (line  64)
+* ! (exclamation point), !~ operator:    Regexp Usage.        (line  19)
+* ! (exclamation point), !~ operator <1>: Computed Regexps.   (line   6)
+* ! (exclamation point), !~ operator <2>: Case-sensitivity.   (line  26)
+* ! (exclamation point), !~ operator <3>: Regexp Constants.   (line   6)
+* ! (exclamation point), !~ operator <4>: Comparison Operators.
                                                               (line  11)
-* > (right angle bracket), >= operator <1>: Precedence.       (line  64)
-* > (right angle bracket), > operator <1>: Precedence.        (line  64)
-* > (right angle bracket), >> operator (I/O) <1>: Precedence. (line  64)
+* ! (exclamation point), !~ operator <5>: Comparison Operators.
+                                                              (line  98)
+* ! (exclamation point), !~ operator <6>: Precedence.         (line  79)
+* ! (exclamation point), !~ operator <7>: Expression Patterns.
+                                                              (line  24)
+* ? (question mark), ?: operator:        Precedence.          (line  91)
 * ? (question mark), regexp operator:    Regexp Operator Details.
                                                               (line 113)
 * ? (question mark), regexp operator <1>: GNU Regexp Operators.
                                                               (line  61)
-* ? (question mark), ?: operator:        Precedence.          (line  91)
+* . (period), regexp operator:           Regexp Operator Details.
+                                                              (line  40)
+* .gmo files:                            Explaining gettext.  (line  42)
+* .gmo files, specifying directory of:   Explaining gettext.  (line  54)
+* .gmo files, specifying directory of <1>: Programmer i18n.   (line  48)
+* .mo files, converting from .po:        I18N Example.        (line  80)
+* .po files:                             Explaining gettext.  (line  37)
+* .po files <1>:                         Translator i18n.     (line   6)
+* .po files, converting to .mo:          I18N Example.        (line  80)
+* .pot files:                            Explaining gettext.  (line  31)
+* ' (single quote):                      One-shot.            (line  15)
+* ' (single quote), in gawk command lines: Long.              (line  35)
+* ' (single quote), in shell commands:   Quoting.             (line  48)
+* ' (single quote), vs. apostrophe:      Comments.            (line  27)
+* ' (single quote), with double quotes:  Quoting.             (line  73)
+* " (double quote), in regexp constants: Computed Regexps.    (line  30)
+* " (double quote), in shell commands:   Quoting.             (line  54)
+* () (parentheses), in a profile:        Profiling.           (line 146)
+* () (parentheses), regexp operator:     Regexp Operator Details.
+                                                              (line  77)
+* [] (square brackets), regexp operator: Regexp Operator Details.
+                                                              (line  52)
+* {} (braces):                           Profiling.           (line 142)
+* {} (braces), actions and:              Action Overview.     (line  19)
+* {} (braces), regexp operator:          Regexp Operator Details.
+                                                              (line 118)
+* {} (braces), statements, grouping:     Statements.          (line  10)
+* @ (at-sign), @-notation for indirect function calls: Indirect Calls.
+                                                              (line  47)
 * @ (at-sign), @include directive:       Include Files.       (line   8)
 * @ (at-sign), @load directive:          Loading Shared Libraries.
                                                               (line   8)
-* @ (at-sign), @-notation for indirect function calls: Indirect Calls.
-                                                              (line  47)
 * @ (at-sign), @namespace directive:     Changing The Namespace.
                                                               (line   6)
 * @ (at-sign), @namespace directive, BEGIN, BEGINFILE, END, ENDFILE and: 
Changing The Namespace.
                                                               (line  37)
-* [] (square brackets), regexp operator: Regexp Operator Details.
-                                                              (line  52)
+* * (asterisk), * operator, as multiplication operator: Precedence.
+                                                              (line  54)
+* * (asterisk), * operator, as regexp operator: Regexp Operator Details.
+                                                              (line  91)
+* * (asterisk), * operator, null strings, matching: String Functions.
+                                                              (line 574)
+* * (asterisk), ** operator:             Arithmetic Ops.      (line  85)
+* * (asterisk), ** operator <1>:         Precedence.          (line  48)
+* * (asterisk), **= operator:            Assignment Ops.      (line 129)
+* * (asterisk), **= operator <1>:        Precedence.          (line  94)
+* * (asterisk), *= operator:             Assignment Ops.      (line 129)
+* * (asterisk), *= operator <1>:         Precedence.          (line  94)
+* / (forward slash), / operator:         Precedence.          (line  54)
+* / (forward slash), /= operator:        Assignment Ops.      (line 129)
+* / (forward slash), /= operator <1>:    Precedence.          (line  94)
+* / (forward slash), /= operator, vs. /=.../ regexp constant: Assignment Ops.
+                                                              (line 148)
+* / (forward slash), patterns and:       Expression Patterns. (line  24)
+* / (forward slash), to enclose regular expressions: Regexp.  (line  10)
+* /= operator vs. /=.../ regexp constant: Assignment Ops.     (line 149)
+* /dev/... special files:                Special FD.          (line  48)
+* /dev/fd/N special files (gawk):        Special FD.          (line  48)
+* /inet/... special files (gawk):        TCP/IP Networking.   (line   6)
+* /inet4/... special files (gawk):       TCP/IP Networking.   (line   6)
+* /inet6/... special files (gawk):       TCP/IP Networking.   (line   6)
 * \ (backslash):                         Comments.            (line  50)
-* \ (backslash), in shell commands:      Quoting.             (line  48)
-* \ (backslash), continuing lines and:   Statements/Lines.    (line  19)
-* \ (backslash), continuing lines and, in csh: Statements/Lines.
-                                                              (line  45)
-* \ (backslash), continuing lines and, comments and: Statements/Lines.
-                                                              (line  77)
-* \ (backslash), in escape sequences:    Escape Sequences.    (line   6)
+* \ (backslash), \' operator (gawk):     GNU Regexp Operators.
+                                                              (line  58)
+* \ (backslash), \" escape sequence:     Escape Sequences.    (line 101)
+* \ (backslash), \/ escape sequence:     Escape Sequences.    (line  92)
+* \ (backslash), \` operator (gawk):     GNU Regexp Operators.
+                                                              (line  56)
+* \ (backslash), \< operator (gawk):     GNU Regexp Operators.
+                                                              (line  30)
+* \ (backslash), \> operator (gawk):     GNU Regexp Operators.
+                                                              (line  34)
 * \ (backslash), \a escape sequence:     Escape Sequences.    (line  34)
 * \ (backslash), \b escape sequence:     Escape Sequences.    (line  38)
+* \ (backslash), \B operator (gawk):     GNU Regexp Operators.
+                                                              (line  43)
 * \ (backslash), \f escape sequence:     Escape Sequences.    (line  41)
 * \ (backslash), \n escape sequence:     Escape Sequences.    (line  44)
-* \ (backslash), \r escape sequence:     Escape Sequences.    (line  47)
-* \ (backslash), \t escape sequence:     Escape Sequences.    (line  50)
-* \ (backslash), \v escape sequence:     Escape Sequences.    (line  53)
 * \ (backslash), \NNN escape sequence:   Escape Sequences.    (line  56)
-* \ (backslash), \x escape sequence:     Escape Sequences.    (line  61)
-* \ (backslash), \u escape sequence:     Escape Sequences.    (line  76)
-* \ (backslash), \/ escape sequence:     Escape Sequences.    (line  92)
-* \ (backslash), \" escape sequence:     Escape Sequences.    (line 101)
-* \ (backslash), in escape sequences <1>: Escape Sequences.   (line 119)
-* \ (backslash), in escape sequences, POSIX and: Escape Sequences.
-                                                              (line 124)
-* \ (backslash), regexp operator:        Regexp Operator Details.
-                                                              (line  14)
-* \ (backslash), in bracket expressions: Bracket Expressions. (line  25)
-* \ (backslash), in regexp constants:    Computed Regexps.    (line  30)
+* \ (backslash), \r escape sequence:     Escape Sequences.    (line  47)
 * \ (backslash), \s operator (gawk):     GNU Regexp Operators.
                                                               (line  13)
 * \ (backslash), \S operator (gawk):     GNU Regexp Operators.
                                                               (line  17)
+* \ (backslash), \t escape sequence:     Escape Sequences.    (line  50)
+* \ (backslash), \u escape sequence:     Escape Sequences.    (line  76)
+* \ (backslash), \v escape sequence:     Escape Sequences.    (line  53)
 * \ (backslash), \w operator (gawk):     GNU Regexp Operators.
                                                               (line  21)
 * \ (backslash), \W operator (gawk):     GNU Regexp Operators.
                                                               (line  26)
-* \ (backslash), \< operator (gawk):     GNU Regexp Operators.
-                                                              (line  30)
-* \ (backslash), \> operator (gawk):     GNU Regexp Operators.
-                                                              (line  34)
+* \ (backslash), \x escape sequence:     Escape Sequences.    (line  61)
 * \ (backslash), \y operator (gawk):     GNU Regexp Operators.
                                                               (line  38)
-* \ (backslash), \B operator (gawk):     GNU Regexp Operators.
-                                                              (line  43)
-* \ (backslash), \` operator (gawk):     GNU Regexp Operators.
-                                                              (line  56)
-* \ (backslash), \' operator (gawk):     GNU Regexp Operators.
-                                                              (line  58)
 * \ (backslash), as field separator:     Command Line Field Separator.
                                                               (line  24)
+* \ (backslash), continuing lines and:   Statements/Lines.    (line  19)
+* \ (backslash), continuing lines and, comments and: Statements/Lines.
+                                                              (line  77)
+* \ (backslash), continuing lines and, in csh: Statements/Lines.
+                                                              (line  45)
 * \ (backslash), gsub()/gensub()/sub() functions and: Gory Details.
                                                               (line   6)
+* \ (backslash), in bracket expressions: Bracket Expressions. (line  25)
+* \ (backslash), in escape sequences:    Escape Sequences.    (line   6)
+* \ (backslash), in escape sequences <1>: Escape Sequences.   (line 119)
+* \ (backslash), in escape sequences, POSIX and: Escape Sequences.
+                                                              (line 123)
+* \ (backslash), in regexp constants:    Computed Regexps.    (line  30)
+* \ (backslash), in shell commands:      Quoting.             (line  48)
+* \ (backslash), regexp operator:        Regexp Operator Details.
+                                                              (line  14)
+* & (ampersand), && operator:            Boolean Ops.         (line  59)
+* & (ampersand), && operator <1>:        Precedence.          (line  85)
+* & (ampersand), gsub()/gensub()/sub() functions and: Gory Details.
+                                                              (line   6)
+* # (number sign), #! (executable scripts): Executable Scripts.
+                                                              (line   6)
+* # (number sign), commenting:           Comments.            (line   6)
+* % (percent sign), % operator:          Precedence.          (line  54)
+* % (percent sign), %= operator:         Assignment Ops.      (line 129)
+* % (percent sign), %= operator <1>:     Precedence.          (line  94)
+* ^ (caret), ^ operator:                 Precedence.          (line  48)
+* ^ (caret), ^= operator:                Assignment Ops.      (line 129)
+* ^ (caret), ^= operator <1>:            Precedence.          (line  94)
+* ^ (caret), in bracket expressions:     Bracket Expressions. (line  25)
+* ^ (caret), in FS:                      Regexp Field Splitting.
+                                                              (line  58)
 * ^ (caret), regexp operator:            Regexp Operator Details.
                                                               (line  18)
-* ^ (caret), in bracket expressions:     Bracket Expressions. (line  25)
 * ^ (caret), regexp operator <1>:        GNU Regexp Operators.
                                                               (line  61)
-* ^ (caret), in FS:                      Regexp Field Splitting.
-                                                              (line  58)
-* ^ (caret), ^= operator:                Assignment Ops.      (line 129)
-* ^ (caret), ^ operator:                 Precedence.          (line  48)
-* ^ (caret), ^= operator <1>:            Precedence.          (line  94)
-* _ (underscore), in names of private variables: Library Names.
-                                                              (line  29)
-* _ (underscore), C macro:               Explaining gettext.  (line  71)
-* _ (underscore), translatable strings:  Programmer i18n.     (line  69)
-* _gr_init() user-defined function:      Group Functions.     (line  83)
-* _ord_init() user-defined function:     Ordinal Functions.   (line  16)
-* _pw_init() user-defined function:      Passwd Functions.    (line 105)
-* {} (braces), regexp operator:          Regexp Operator Details.
-                                                              (line 118)
-* {} (braces), actions and:              Action Overview.     (line  19)
-* {} (braces), statements, grouping:     Statements.          (line  10)
-* {} (braces):                           Profiling.           (line 142)
+* + (plus sign), + operator:             Precedence.          (line  51)
+* + (plus sign), + operator <1>:         Precedence.          (line  57)
+* + (plus sign), ++ operator:            Increment Ops.       (line  11)
+* + (plus sign), ++ operator <1>:        Increment Ops.       (line  40)
+* + (plus sign), ++ operator <2>:        Precedence.          (line  45)
+* + (plus sign), += operator:            Assignment Ops.      (line  81)
+* + (plus sign), += operator <1>:        Precedence.          (line  94)
+* + (plus sign), regexp operator:        Regexp Operator Details.
+                                                              (line 107)
+* < (left angle bracket), < operator:    Comparison Operators.
+                                                              (line  11)
+* < (left angle bracket), < operator <1>: Precedence.         (line  64)
+* < (left angle bracket), < operator (I/O): Getline/File.     (line   6)
+* < (left angle bracket), <= operator:   Comparison Operators.
+                                                              (line  11)
+* < (left angle bracket), <= operator <1>: Precedence.        (line  64)
+* = (equals sign), = operator:           Assignment Ops.      (line   6)
+* = (equals sign), == operator:          Comparison Operators.
+                                                              (line  11)
+* = (equals sign), == operator <1>:      Precedence.          (line  64)
+* > (right angle bracket), > operator:   Comparison Operators.
+                                                              (line  11)
+* > (right angle bracket), > operator <1>: Precedence.        (line  64)
+* > (right angle bracket), > operator (I/O): Redirection.     (line  22)
+* > (right angle bracket), >= operator:  Comparison Operators.
+                                                              (line  11)
+* > (right angle bracket), >= operator <1>: Precedence.       (line  64)
+* > (right angle bracket), >> operator (I/O): Redirection.    (line  50)
+* > (right angle bracket), >> operator (I/O) <1>: Precedence. (line  64)
 * | (vertical bar):                      Regexp Operator Details.
                                                               (line  66)
 * | (vertical bar), | operator (I/O):    Getline/Pipe.        (line  10)
-* | (vertical bar), |& operator (I/O):   Getline/Coprocess.   (line   6)
 * | (vertical bar), | operator (I/O) <1>: Redirection.        (line  57)
+* | (vertical bar), | operator (I/O) <2>: Precedence.         (line  64)
+* | (vertical bar), |& operator (I/O):   Getline/Coprocess.   (line   6)
 * | (vertical bar), |& operator (I/O) <1>: Redirection.       (line  96)
+* | (vertical bar), |& operator (I/O) <2>: Precedence.        (line  64)
+* | (vertical bar), |& operator (I/O) <3>: Two-way I/O.       (line  27)
 * | (vertical bar), |& operator (I/O), pipes, closing: Close Files And Pipes.
                                                               (line 124)
 * | (vertical bar), || operator:         Boolean Ops.         (line  59)
-* | (vertical bar), | operator (I/O) <2>: Precedence.         (line  64)
-* | (vertical bar), |& operator (I/O) <2>: Precedence.        (line  64)
 * | (vertical bar), || operator <1>:     Precedence.          (line  88)
-* | (vertical bar), |& operator (I/O) <3>: Two-way I/O.       (line  27)
 * ~ (tilde), ~ operator:                 Regexp Usage.        (line  19)
 * ~ (tilde), ~ operator <1>:             Computed Regexps.    (line   6)
 * ~ (tilde), ~ operator <2>:             Case-sensitivity.    (line  26)
@@ -36368,56 +36326,62 @@ Index
 * ~ (tilde), ~ operator <4>:             Comparison Operators.
                                                               (line  11)
 * ~ (tilde), ~ operator <5>:             Comparison Operators.
-                                                              (line  99)
+                                                              (line  98)
 * ~ (tilde), ~ operator <6>:             Precedence.          (line  79)
 * ~ (tilde), ~ operator <7>:             Expression Patterns. (line  24)
+* $ (dollar sign), $ field operator:     Fields.              (line  19)
+* $ (dollar sign), $ field operator <1>: Precedence.          (line  42)
+* $ (dollar sign), incrementing fields and arrays: Increment Ops.
+                                                              (line  30)
+* $ (dollar sign), regexp operator:      Regexp Operator Details.
+                                                              (line  31)
 * aaa (amazing awk assembler) program:   Glossary.            (line  16)
 * accessing fields:                      Fields.              (line   6)
 * accessing global variables from extensions: Symbol Table Access.
                                                               (line   6)
 * account information:                   Passwd Functions.    (line  16)
 * account information <1>:               Group Functions.     (line   6)
-* actions, default:                      Very Simple.         (line  34)
-* actions, empty:                        Very Simple.         (line  39)
 * actions:                               Action Overview.     (line   6)
 * actions, control statements in:        Statements.          (line   6)
+* actions, default:                      Very Simple.         (line  34)
+* actions, empty:                        Very Simple.         (line  39)
 * Ada programming language:              Glossary.            (line  11)
-* adding, fields:                        Changing Fields.     (line  53)
 * adding, features to gawk:              Adding Code.         (line   6)
+* adding, fields:                        Changing Fields.     (line  53)
 * advanced features, fixed-width data:   Constant Size.       (line   6)
-* advanced features, specifying field content: Splitting By Content.
-                                                              (line  17)
 * advanced features, gawk:               Advanced Features.   (line   6)
+* advanced features, network programming: TCP/IP Networking.  (line   6)
 * advanced features, nondecimal input data: Nondecimal Data.  (line   6)
 * advanced features, processes, communicating with: Two-way I/O.
                                                               (line   6)
-* advanced features, network programming: TCP/IP Networking.  (line   6)
+* advanced features, specifying field content: Splitting By Content.
+                                                              (line  17)
 * Aho, Alfred:                           History.             (line  21)
 * Aho, Alfred <1>:                       Contributors.        (line  12)
 * alarm clock example program:           Alarm Program.       (line  11)
 * alarm.awk program:                     Alarm Program.       (line  31)
-* algorithms:                            Basic High Level.    (line  59)
+* algorithms:                            Basic High Level.    (line  70)
 * all source files, show in debugger:    Debugger Info.       (line  45)
 * allocating memory for extensions:      Memory Allocation Functions.
                                                               (line   6)
 * amazing awk assembler (aaa):           Glossary.            (line  16)
 * amazingly workable formatter (awf):    Glossary.            (line  23)
 * ambiguity, syntactic: /= operator vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 150)
+                                                              (line 149)
 * ampersand (&), && operator:            Boolean Ops.         (line  59)
 * ampersand (&), && operator <1>:        Precedence.          (line  85)
 * ampersand (&), gsub()/gensub()/sub() functions and: Gory Details.
                                                               (line   6)
 * anagram.awk program:                   Anagram Program.     (line  21)
 * anagrams, finding:                     Anagram Program.     (line   6)
-* and:                                   Bitwise Functions.   (line  41)
+* and:                                   Bitwise Functions.   (line  40)
 * AND bitwise operation:                 Bitwise Functions.   (line   6)
 * and Boolean-logic operator:            Boolean Ops.         (line   6)
 * ANSI:                                  Glossary.            (line  32)
-* API, version:                          Extension Versioning.
-                                                              (line   6)
 * API, informational variables:          Extension API Informational Variables.
                                                               (line   6)
+* API, version:                          Extension Versioning.
+                                                              (line   6)
 * API, ownership of MPFR and GMP values: API Ownership of MPFR and GMP Values.
                                                               (line   6)
 * arbitrary precision:                   Arbitrary Precision Arithmetic.
@@ -36427,18 +36391,18 @@ Index
                                                               (line   6)
 * archaeologists:                        Bugs.                (line   6)
 * arctangent:                            Numeric Functions.   (line  11)
-* ARGC/ARGV variables, portability and:  Executable Scripts.  (line  55)
+* ARGC/ARGV variables:                   Auto-set.            (line  15)
 * ARGC/ARGV variables, command-line arguments: Other Arguments.
                                                               (line  21)
-* ARGC/ARGV variables:                   Auto-set.            (line  15)
 * ARGC/ARGV variables, how to use:       ARGC and ARGV.       (line   6)
-* ARGIND variable, command-line arguments: Other Arguments.   (line  21)
+* ARGC/ARGV variables, portability and:  Executable Scripts.  (line  55)
 * ARGIND variable:                       Auto-set.            (line  44)
-* arguments, command-line, invoking awk: Command Line.        (line   6)
+* ARGIND variable, command-line arguments: Other Arguments.   (line  21)
 * arguments, command-line:               Other Arguments.     (line   6)
-* arguments, in function calls:          Function Calls.      (line  18)
 * arguments, command-line <1>:           Auto-set.            (line  15)
 * arguments, command-line <2>:           ARGC and ARGV.       (line   6)
+* arguments, command-line, invoking awk: Command Line.        (line   6)
+* arguments, in function calls:          Function Calls.      (line  18)
 * arguments, processing:                 Getopt Function.     (line   6)
 * ARGV array:                            Options.             (line 340)
 * ARGV array, indexing into:             Other Arguments.     (line  21)
@@ -36448,52 +36412,52 @@ Index
                                                               (line   6)
 * array scanning order, controlling:     Controlling Scanning.
                                                               (line  14)
-* array subscripts, numbers as:          Numeric Array Subscripts.
-                                                              (line   6)
 * array subscripts, null string as:      Uninitialized Subscripts.
                                                               (line  43)
-* arrays:                                Arrays.              (line   6)
-* arrays, indexing:                      Array Intro.         (line  49)
-* arrays, associative:                   Array Intro.         (line  49)
-* arrays, sparse:                        Array Intro.         (line  76)
-* arrays, IGNORECASE variable and:       Array Intro.         (line 100)
-* arrays, referencing elements:          Reference to Elements.
+* array subscripts, numbers as:          Numeric Array Subscripts.
                                                               (line   6)
-* arrays, unassigned elements:           Reference to Elements.
-                                                              (line  18)
-* arrays, elements, that don’t exist:    Reference to Elements.
-                                                              (line  23)
+* arrays:                                Arrays.              (line   6)
+* arrays, arrays of arrays:              Arrays of Arrays.    (line   6)
+* arrays, as parameters to functions:    Pass By Value/Reference.
+                                                              (line  44)
+* arrays, associative:                   Array Intro.         (line  51)
+* arrays, associative, library functions and: Library Names.  (line  58)
+* arrays, deleting entire contents:      Delete.              (line  39)
 * arrays, elements, assigning values:    Assigning Elements.  (line   6)
-* arrays, example of using:              Array Example.       (line   6)
-* arrays, scanning:                      Scanning an Array.   (line   6)
-* arrays, for statement and:             Scanning an Array.   (line  20)
+* arrays, elements, deleting:            Delete.              (line   6)
 * arrays, elements, order of access by in operator: Scanning an Array.
                                                               (line  48)
-* arrays, numeric subscripts:            Numeric Array Subscripts.
-                                                              (line   6)
-* arrays, subscripts, uninitialized variables as: Uninitialized Subscripts.
-                                                              (line   6)
-* arrays, elements, deleting:            Delete.              (line   6)
-* arrays, deleting entire contents:      Delete.              (line  39)
+* arrays, elements, retrieving number of: String Functions.   (line  41)
+* arrays, elements, that don't exist:    Reference to Elements.
+                                                              (line  23)
+* arrays, example of using:              Array Example.       (line   6)
+* arrays, for statement and:             Scanning an Array.   (line  20)
+* arrays, IGNORECASE variable and:       Array Intro.         (line 102)
+* arrays, indexing:                      Array Intro.         (line  51)
+* arrays, merging into strings:          Join Function.       (line   6)
 * arrays, multidimensional:              Multidimensional.    (line  10)
 * arrays, multidimensional, scanning:    Multiscanning.       (line  11)
-* arrays, arrays of arrays:              Arrays of Arrays.    (line   6)
-* arrays, elements, retrieving number of: String Functions.   (line  41)
 * arrays, number of elements:            String Functions.    (line 219)
-* arrays, as parameters to functions:    Pass By Value/Reference.
-                                                              (line  44)
-* arrays, associative, library functions and: Library Names.  (line  58)
-* arrays, merging into strings:          Join Function.       (line   6)
+* arrays, numeric subscripts:            Numeric Array Subscripts.
+                                                              (line   6)
+* arrays, referencing elements:          Reference to Elements.
+                                                              (line   6)
+* arrays, scanning:                      Scanning an Array.   (line   6)
 * arrays, sorting, asort() function (gawk): Array Sorting Functions.
                                                               (line   6)
 * arrays, sorting, asorti() function (gawk): Array Sorting Functions.
                                                               (line   6)
 * arrays, sorting, IGNORECASE variable and: Array Sorting Functions.
                                                               (line  88)
+* arrays, sparse:                        Array Intro.         (line  78)
+* arrays, subscripts, uninitialized variables as: Uninitialized Subscripts.
+                                                              (line   6)
+* arrays, unassigned elements:           Reference to Elements.
+                                                              (line  18)
 * artificial intelligence, gawk and:     Distribution contents.
                                                               (line  64)
 * ASCII:                                 Escape Sequences.    (line  31)
-* ASCII <1>:                             Bracket Expressions. (line  80)
+* ASCII <1>:                             Bracket Expressions. (line  79)
 * ASCII <2>:                             Scalar Constants.    (line  20)
 * ASCII <3>:                             Ordinal Functions.   (line  45)
 * ASCII <4>:                             Alarm Program.       (line  20)
@@ -36523,27 +36487,27 @@ Index
 * assign values to variables, in debugger: Viewing And Changing Data.
                                                               (line  62)
 * assignment operators:                  Assignment Ops.      (line   6)
-* assignment operators, lvalues/rvalues: Assignment Ops.      (line  31)
 * assignment operators, evaluation order: Assignment Ops.     (line 110)
+* assignment operators, lvalues/rvalues: Assignment Ops.      (line  31)
 * assignments as file names:             Ignoring Assigns.    (line   6)
-* associative arrays:                    Array Intro.         (line  49)
+* associative arrays:                    Array Intro.         (line  51)
+* asterisk (*), * operator, as multiplication operator: Precedence.
+                                                              (line  54)
 * asterisk (*), * operator, as regexp operator: Regexp Operator Details.
                                                               (line  91)
+* asterisk (*), * operator, null strings, matching: String Functions.
+                                                              (line 574)
 * asterisk (*), ** operator:             Arithmetic Ops.      (line  85)
-* asterisk (*), *= operator:             Assignment Ops.      (line 129)
-* asterisk (*), **= operator:            Assignment Ops.      (line 129)
 * asterisk (*), ** operator <1>:         Precedence.          (line  48)
-* asterisk (*), * operator, as multiplication operator: Precedence.
-                                                              (line  54)
-* asterisk (*), *= operator <1>:         Precedence.          (line  94)
+* asterisk (*), **= operator:            Assignment Ops.      (line 129)
 * asterisk (*), **= operator <1>:        Precedence.          (line  94)
-* asterisk (*), * operator, null strings, matching: String Functions.
-                                                              (line 575)
+* asterisk (*), *= operator:             Assignment Ops.      (line 129)
+* asterisk (*), *= operator <1>:         Precedence.          (line  94)
+* at-sign (@), @-notation for indirect function calls: Indirect Calls.
+                                                              (line  47)
 * at-sign (@), @include directive:       Include Files.       (line   8)
 * at-sign (@), @load directive:          Loading Shared Libraries.
                                                               (line   8)
-* at-sign (@), @-notation for indirect function calls: Indirect Calls.
-                                                              (line  47)
 * at-sign (@), @namespace directive:     Changing The Namespace.
                                                               (line   6)
 * at-sign (@), @namespace directive, BEGIN, BEGINFILE, END, ENDFILE and: 
Changing The Namespace.
@@ -36552,25 +36516,15 @@ Index
 * automatic displays, in debugger:       Debugger Info.       (line  24)
 * awf (amazingly workable formatter) program: Glossary.       (line  23)
 * awk:                                   Preface.             (line   6)
-* awk, POSIX and:                        Preface.             (line  21)
-* awk, POSIX and <1>:                    Preface.             (line  21)
+* awk, function of:                      Getting Started.     (line   6)
 * awk, gawk and:                         Preface.             (line  21)
-* awk, uses for:                         Preface.             (line  21)
-* awk, history of:                       History.             (line  21)
-* awk, new vs. old:                      Names.               (line   6)
-* awk, terms describing:                 This Manual.         (line   6)
 * awk, gawk and <1>:                     This Manual.         (line  14)
-* awk, function of:                      Getting Started.     (line   6)
-* awk, uses for <1>:                     Getting Started.     (line  12)
-* awk, uses for <2>:                     When.                (line   6)
-* awk, invoking:                         Command Line.        (line   6)
-* awk, profiling, enabling:              Options.             (line 296)
-* awk, implementations, limits:          Getline Notes.       (line  14)
+* awk, history of:                       History.             (line  21)
 * awk, implementation issues, pipes:     Redirection.         (line 129)
-* awk, new vs. old, OFMT variable:       Strings And Numbers. (line  56)
-* awk, language, POSIX version:          Assignment Ops.      (line 139)
-* awk, regexp constants and:             Comparison Operators.
-                                                              (line 104)
+* awk, implementations:                  Other Versions.      (line   6)
+* awk, implementations, limits:          Getline Notes.       (line  14)
+* awk, invoking:                         Command Line.        (line   6)
+* awk, language, POSIX version:          Assignment Ops.      (line 138)
 * awk, language, POSIX version <1>:      Next Statement.      (line  44)
 * awk, language, POSIX version <2>:      Definition Syntax.   (line  99)
 * awk, namespace:                        Default Namespace.   (line   6)
@@ -36578,39 +36532,51 @@ Index
                                                               (line   6)
 * awk, namespace, use for indirect function calls: Internal Name Management.
                                                               (line   6)
+* awk, new vs. old:                      Names.               (line   6)
+* awk, new vs. old, OFMT variable:       Strings And Numbers. (line  55)
+* awk, POSIX and:                        Preface.             (line  21)
+* awk, POSIX and <1>:                    Preface.             (line  21)
+* awk, profiling, enabling:              Options.             (line 296)
+* awk, regexp constants and:             Comparison Operators.
+                                                              (line 103)
+* awk, terms describing:                 This Manual.         (line   6)
+* awk, uses for:                         Preface.             (line  21)
+* awk, uses for <1>:                     Getting Started.     (line  12)
+* awk, uses for <2>:                     When.                (line   6)
 * awk, versions of:                      V7/SVR3.1.           (line   6)
-* awk, versions of, changes between V7 and SVR3.1: V7/SVR3.1. (line   6)
+* awk, versions of <1>:                  BTL.                 (line   6)
+* awk, versions of <2>:                  Other Versions.      (line  13)
 * awk, versions of, changes between SVR3.1 and SVR4: SVR4.    (line   6)
 * awk, versions of, changes between SVR4 and POSIX awk: POSIX.
                                                               (line   6)
-* awk, versions of <1>:                  BTL.                 (line   6)
-* awk, implementations:                  Other Versions.      (line   6)
-* awk, versions of <2>:                  Other Versions.      (line  13)
+* awk, versions of, changes between V7 and SVR3.1: V7/SVR3.1. (line   6)
 * awk programs:                          Getting Started.     (line  12)
-* awk programs, running:                 Running gawk.        (line   6)
-* awk programs, running, from shell scripts: One-shot.        (line  22)
-* awk programs, running, without input files: Read Terminal.  (line  16)
-* awk programs, running <1>:             Long.                (line   6)
-* awk programs, lengthy:                 Long.                (line   6)
 * awk programs <1>:                      Executable Scripts.  (line   6)
-* awk programs, documenting:             Comments.            (line   6)
-* awk programs, one-line examples:       Very Simple.         (line  45)
 * awk programs <2>:                      Two Rules.           (line   6)
 * awk programs, complex:                 When.                (line  27)
-* awk programs, location of:             Options.             (line  25)
 * awk programs, debugging, enabling:     Options.             (line 111)
-* awk programs, location of <1>:         Options.             (line 146)
-* awk programs, location of <2>:         Options.             (line 180)
-* awk programs, shell variables in:      Using Shell Variables.
-                                                              (line   6)
+* awk programs, documenting:             Comments.            (line   6)
+* awk programs, documenting <1>:         Library Names.       (line   6)
+* awk programs, examples of:             Sample Programs.     (line   6)
 * awk programs, execution of:            Next Statement.      (line  16)
 * awk programs, internationalizing:      I18N Functions.      (line   6)
-* awk programs, documenting <1>:         Library Names.       (line   6)
+* awk programs, internationalizing <1>:  Programmer i18n.     (line   6)
+* awk programs, lengthy:                 Long.                (line   6)
 * awk programs, lengthy, assertions:     Assert Function.     (line   6)
-* awk programs, examples of:             Sample Programs.     (line   6)
+* awk programs, location of:             Options.             (line  25)
+* awk programs, location of <1>:         Options.             (line 146)
+* awk programs, location of <2>:         Options.             (line 180)
+* awk programs, one-line examples:       Very Simple.         (line  45)
 * awk programs, profiling:               Profiling.           (line   6)
-* awk programs, internationalizing <1>:  Programmer i18n.     (line   6)
+* awk programs, running:                 Running gawk.        (line   6)
+* awk programs, running <1>:             Long.                (line   6)
+* awk programs, running, from shell scripts: One-shot.        (line  22)
+* awk programs, running, without input files: Read Terminal.  (line  16)
+* awk programs, shell variables in:      Using Shell Variables.
+                                                              (line   6)
 * awk to Go translator:                  Other Versions.      (line 133)
+* AWK_HASH environment variable:         Other Environment Variables.
+                                                              (line  50)
 * awka compiler for awk:                 Other Versions.      (line  64)
 * AWKBUFSIZE environment variable:       Other Environment Variables.
                                                               (line  41)
@@ -36646,92 +36612,90 @@ Index
                                                               (line  57)
 * awksed.awk program:                    Simple Sed.          (line  25)
 * awkvars.out file:                      Options.             (line  97)
-* AWK_HASH environment variable:         Other Environment Variables.
-                                                              (line  50)
 * b debugger command (alias for break):  Breakpoint Control.  (line  11)
 * backslash (\):                         Comments.            (line  50)
-* backslash (\), in shell commands:      Quoting.             (line  48)
-* backslash (\), continuing lines and:   Statements/Lines.    (line  19)
-* backslash (\), continuing lines and, in csh: Statements/Lines.
-                                                              (line  45)
-* backslash (\), continuing lines and, comments and: Statements/Lines.
-                                                              (line  77)
-* backslash (\), in escape sequences:    Escape Sequences.    (line   6)
+* backslash (\), \' operator (gawk):     GNU Regexp Operators.
+                                                              (line  58)
+* backslash (\), \" escape sequence:     Escape Sequences.    (line 101)
+* backslash (\), \/ escape sequence:     Escape Sequences.    (line  92)
+* backslash (\), \` operator (gawk):     GNU Regexp Operators.
+                                                              (line  56)
+* backslash (\), \< operator (gawk):     GNU Regexp Operators.
+                                                              (line  30)
+* backslash (\), \> operator (gawk):     GNU Regexp Operators.
+                                                              (line  34)
 * backslash (\), \a escape sequence:     Escape Sequences.    (line  34)
 * backslash (\), \b escape sequence:     Escape Sequences.    (line  38)
+* backslash (\), \B operator (gawk):     GNU Regexp Operators.
+                                                              (line  43)
 * backslash (\), \f escape sequence:     Escape Sequences.    (line  41)
 * backslash (\), \n escape sequence:     Escape Sequences.    (line  44)
-* backslash (\), \r escape sequence:     Escape Sequences.    (line  47)
-* backslash (\), \t escape sequence:     Escape Sequences.    (line  50)
-* backslash (\), \v escape sequence:     Escape Sequences.    (line  53)
 * backslash (\), \NNN escape sequence:   Escape Sequences.    (line  56)
-* backslash (\), \x escape sequence:     Escape Sequences.    (line  61)
-* backslash (\), \u escape sequence:     Escape Sequences.    (line  76)
-* backslash (\), \/ escape sequence:     Escape Sequences.    (line  92)
-* backslash (\), \" escape sequence:     Escape Sequences.    (line 101)
-* backslash (\), in escape sequences <1>: Escape Sequences.   (line 119)
-* backslash (\), in escape sequences, POSIX and: Escape Sequences.
-                                                              (line 124)
-* backslash (\), regexp operator:        Regexp Operator Details.
-                                                              (line  14)
-* backslash (\), in bracket expressions: Bracket Expressions. (line  25)
-* backslash (\), in regexp constants:    Computed Regexps.    (line  30)
+* backslash (\), \r escape sequence:     Escape Sequences.    (line  47)
 * backslash (\), \s operator (gawk):     GNU Regexp Operators.
                                                               (line  13)
 * backslash (\), \S operator (gawk):     GNU Regexp Operators.
                                                               (line  17)
+* backslash (\), \t escape sequence:     Escape Sequences.    (line  50)
+* backslash (\), \u escape sequence:     Escape Sequences.    (line  76)
+* backslash (\), \v escape sequence:     Escape Sequences.    (line  53)
 * backslash (\), \w operator (gawk):     GNU Regexp Operators.
                                                               (line  21)
 * backslash (\), \W operator (gawk):     GNU Regexp Operators.
                                                               (line  26)
-* backslash (\), \< operator (gawk):     GNU Regexp Operators.
-                                                              (line  30)
-* backslash (\), \> operator (gawk):     GNU Regexp Operators.
-                                                              (line  34)
+* backslash (\), \x escape sequence:     Escape Sequences.    (line  61)
 * backslash (\), \y operator (gawk):     GNU Regexp Operators.
                                                               (line  38)
-* backslash (\), \B operator (gawk):     GNU Regexp Operators.
-                                                              (line  43)
-* backslash (\), \` operator (gawk):     GNU Regexp Operators.
-                                                              (line  56)
-* backslash (\), \' operator (gawk):     GNU Regexp Operators.
-                                                              (line  58)
 * backslash (\), as field separator:     Command Line Field Separator.
                                                               (line  24)
+* backslash (\), continuing lines and:   Statements/Lines.    (line  19)
+* backslash (\), continuing lines and, comments and: Statements/Lines.
+                                                              (line  77)
+* backslash (\), continuing lines and, in csh: Statements/Lines.
+                                                              (line  45)
 * backslash (\), gsub()/gensub()/sub() functions and: Gory Details.
                                                               (line   6)
+* backslash (\), in bracket expressions: Bracket Expressions. (line  25)
+* backslash (\), in escape sequences:    Escape Sequences.    (line   6)
+* backslash (\), in escape sequences <1>: Escape Sequences.   (line 119)
+* backslash (\), in escape sequences, POSIX and: Escape Sequences.
+                                                              (line 123)
+* backslash (\), in regexp constants:    Computed Regexps.    (line  30)
+* backslash (\), in shell commands:      Quoting.             (line  48)
+* backslash (\), regexp operator:        Regexp Operator Details.
+                                                              (line  14)
 * backtrace debugger command:            Execution Stack.     (line  13)
 * Beebe, Nelson H.F.:                    Acknowledgments.     (line  60)
 * Beebe, Nelson H.F. <1>:                Numeric Functions.   (line  32)
 * Beebe, Nelson H.F. <2>:                Other Versions.      (line  82)
 * BEGIN pattern:                         Field Separators.    (line  45)
-* BEGIN pattern, getline and:            Getline Notes.       (line  19)
-* BEGIN pattern, headings, adding:       Print Examples.      (line  42)
-* BEGIN pattern, OFS/ORS variables, assigning values to: Output Separators.
-                                                              (line  20)
-* BEGIN pattern, Boolean patterns and:   Expression Patterns. (line  70)
 * BEGIN pattern <1>:                     BEGIN/END.           (line   6)
 * BEGIN pattern <2>:                     Using BEGIN/END.     (line   6)
-* BEGIN pattern, operators and:          Using BEGIN/END.     (line  17)
-* BEGIN pattern, print statement and:    I/O And BEGIN/END.   (line  15)
+* BEGIN pattern, @namespace directive and: Changing The Namespace.
+                                                              (line  37)
+* BEGIN pattern, assert() user-defined function and: Assert Function.
+                                                              (line  83)
+* BEGIN pattern, Boolean patterns and:   Expression Patterns. (line  70)
+* BEGIN pattern, exit statement and:     Exit Statement.      (line  12)
+* BEGIN pattern, getline and:            Getline Notes.       (line  19)
+* BEGIN pattern, headings, adding:       Print Examples.      (line  42)
 * BEGIN pattern, next/nextfile statements and: I/O And BEGIN/END.
                                                               (line  36)
 * BEGIN pattern, next/nextfile statements and <1>: Next Statement.
                                                               (line  44)
-* BEGIN pattern, exit statement and:     Exit Statement.      (line  12)
-* BEGIN pattern, assert() user-defined function and: Assert Function.
-                                                              (line  83)
+* BEGIN pattern, OFS/ORS variables, assigning values to: Output Separators.
+                                                              (line  20)
+* BEGIN pattern, operators and:          Using BEGIN/END.     (line  17)
+* BEGIN pattern, print statement and:    I/O And BEGIN/END.   (line  15)
+* BEGIN pattern, profiling and:          Profiling.           (line  62)
 * BEGIN pattern, pwcat program:          Passwd Functions.    (line 143)
 * BEGIN pattern, running awk programs and: Cut Program.       (line  67)
-* BEGIN pattern, profiling and:          Profiling.           (line  62)
 * BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n.    (line  60)
-* BEGIN pattern, @namespace directive and: Changing The Namespace.
-                                                              (line  37)
-* BEGINFILE pattern, Boolean patterns and: Expression Patterns.
-                                                              (line  70)
 * BEGINFILE pattern:                     BEGINFILE/ENDFILE.   (line   6)
 * BEGINFILE pattern, @namespace directive and: Changing The Namespace.
                                                               (line  37)
+* BEGINFILE pattern, Boolean patterns and: Expression Patterns.
+                                                              (line  70)
 * beginfile() user-defined function:     Filetrans Function.  (line  62)
 * Bentley, Jon:                          Glossary.            (line 204)
 * Benzinger, Michael:                    Contributors.        (line 100)
@@ -36747,52 +36711,52 @@ Index
 * BINMODE variable:                      User-modified.       (line  15)
 * BINMODE variable <1>:                  PC Using.            (line  18)
 * bit-manipulation functions:            Bitwise Functions.   (line   6)
-* bits2str() user-defined function:      Bitwise Functions.   (line  70)
+* bits2str() user-defined function:      Bitwise Functions.   (line  69)
+* bitwise, AND:                          Bitwise Functions.   (line  40)
+* bitwise, complement:                   Bitwise Functions.   (line  25)
+* bitwise, complement <1>:               Bitwise Functions.   (line  44)
 * bitwise, operations:                   Bitwise Functions.   (line   6)
-* bitwise, complement:                   Bitwise Functions.   (line  26)
-* bitwise, shift:                        Bitwise Functions.   (line  33)
-* bitwise, AND:                          Bitwise Functions.   (line  41)
-* bitwise, complement <1>:               Bitwise Functions.   (line  45)
-* bitwise, OR:                           Bitwise Functions.   (line  51)
-* bitwise, XOR:                          Bitwise Functions.   (line  58)
+* bitwise, OR:                           Bitwise Functions.   (line  50)
+* bitwise, shift:                        Bitwise Functions.   (line  32)
+* bitwise, XOR:                          Bitwise Functions.   (line  57)
 * body, in actions:                      Statements.          (line  10)
 * body, in loops:                        While Statement.     (line  14)
 * Boolean expressions:                   Boolean Ops.         (line   6)
 * Boolean expressions, as patterns:      Expression Patterns. (line  39)
 * boolean function:                      Boolean Functions.   (line   6)
 * Bourne shell, quoting rules for:       Quoting.             (line  18)
+* braces ({}):                           Profiling.           (line 142)
+* braces ({}), actions and:              Action Overview.     (line  19)
 * braces ({}), regexp operator:          Regexp Operator Details.
                                                               (line 118)
-* braces ({}), actions and:              Action Overview.     (line  19)
 * braces ({}), statements, grouping:     Statements.          (line  10)
-* braces ({}):                           Profiling.           (line 142)
 * bracket expressions:                   Regexp Operator Details.
                                                               (line  52)
-* bracket expressions, complemented:     Regexp Operator Details.
-                                                              (line  60)
 * bracket expressions <1>:               Bracket Expressions. (line   6)
-* bracket expressions, range expressions: Bracket Expressions.
-                                                              (line   6)
-* bracket expressions, character lists:  Bracket Expressions. (line   6)
 * bracket expressions, character classes: Bracket Expressions.
                                                               (line  40)
+* bracket expressions, character lists:  Bracket Expressions. (line   6)
 * bracket expressions, collating elements: Bracket Expressions.
-                                                              (line  91)
-* bracket expressions, non-ASCII:        Bracket Expressions. (line  91)
+                                                              (line  90)
 * bracket expressions, collating symbols: Bracket Expressions.
-                                                              (line  98)
+                                                              (line  97)
+* bracket expressions, complemented:     Regexp Operator Details.
+                                                              (line  60)
 * bracket expressions, equivalence classes: Bracket Expressions.
-                                                              (line 104)
+                                                              (line 103)
+* bracket expressions, non-ASCII:        Bracket Expressions. (line  90)
+* bracket expressions, range expressions: Bracket Expressions.
+                                                              (line   6)
 * break debugger command:                Breakpoint Control.  (line  11)
 * break statement:                       Break Statement.     (line   6)
 * breakpoint:                            Debugging Terms.     (line  33)
-* breakpoint, setting:                   Breakpoint Control.  (line  11)
 * breakpoint, at location, how to delete: Breakpoint Control. (line  36)
+* breakpoint, commands to execute at:    Debugger Execution Control.
+                                                              (line  10)
 * breakpoint, condition:                 Breakpoint Control.  (line  54)
 * breakpoint, delete by number:          Breakpoint Control.  (line  64)
 * breakpoint, how to disable or enable:  Breakpoint Control.  (line  69)
-* breakpoint, commands to execute at:    Debugger Execution Control.
-                                                              (line  10)
+* breakpoint, setting:                   Breakpoint Control.  (line  11)
 * breakpoint, show all in debugger:      Debugger Info.       (line  21)
 * Brennan, Michael:                      Foreword3.           (line  84)
 * Brennan, Michael <1>:                  Foreword4.           (line  33)
@@ -36801,25 +36765,25 @@ Index
 * Brennan, Michael <4>:                  Simple Sed.          (line  25)
 * Brennan, Michael <5>:                  Other Versions.      (line   6)
 * Brennan, Michael <6>:                  Other Versions.      (line  39)
-* Brian Kernighan’s awk:                 When.                (line  21)
-* Brian Kernighan’s awk <1>:             Escape Sequences.    (line 128)
-* Brian Kernighan’s awk <2>:             GNU Regexp Operators.
+* Brian Kernighan's awk:                 When.                (line  21)
+* Brian Kernighan's awk <1>:             Escape Sequences.    (line 128)
+* Brian Kernighan's awk <2>:             GNU Regexp Operators.
                                                               (line  84)
-* Brian Kernighan’s awk <3>:             gawk split records.  (line  71)
-* Brian Kernighan’s awk <4>:             Regexp Field Splitting.
+* Brian Kernighan's awk <3>:             gawk split records.  (line  70)
+* Brian Kernighan's awk <4>:             Regexp Field Splitting.
                                                               (line  66)
-* Brian Kernighan’s awk <5>:             Getline/Pipe.        (line  62)
-* Brian Kernighan’s awk <6>:             Concatenation.       (line  36)
-* Brian Kernighan’s awk <7>:             I/O And BEGIN/END.   (line  15)
-* Brian Kernighan’s awk <8>:             Break Statement.     (line  51)
-* Brian Kernighan’s awk <9>:             Continue Statement.  (line  44)
-* Brian Kernighan’s awk <10>:            Nextfile Statement.  (line  47)
-* Brian Kernighan’s awk <11>:            Delete.              (line  51)
-* Brian Kernighan’s awk <12>:            String Functions.    (line 522)
-* Brian Kernighan’s awk <13>:            Gory Details.        (line  22)
-* Brian Kernighan’s awk <14>:            I/O Functions.       (line  43)
-* Brian Kernighan’s awk, extensions:     BTL.                 (line   6)
-* Brian Kernighan’s awk, source code:    Other Versions.      (line  13)
+* Brian Kernighan's awk <5>:             Getline/Pipe.        (line  62)
+* Brian Kernighan's awk <6>:             Concatenation.       (line  36)
+* Brian Kernighan's awk <7>:             I/O And BEGIN/END.   (line  15)
+* Brian Kernighan's awk <8>:             Break Statement.     (line  51)
+* Brian Kernighan's awk <9>:             Continue Statement.  (line  44)
+* Brian Kernighan's awk <10>:            Nextfile Statement.  (line  47)
+* Brian Kernighan's awk <11>:            Delete.              (line  51)
+* Brian Kernighan's awk <12>:            String Functions.    (line 522)
+* Brian Kernighan's awk <13>:            Gory Details.        (line  22)
+* Brian Kernighan's awk <14>:            I/O Functions.       (line  43)
+* Brian Kernighan's awk, extensions:     BTL.                 (line   6)
+* Brian Kernighan's awk, source code:    Other Versions.      (line  13)
 * Brini, Davide:                         Signature Program.   (line   6)
 * Brink, Jeroen:                         DOS Quoting.         (line  10)
 * Broder, Alan J.:                       Contributors.        (line  91)
@@ -36829,13 +36793,13 @@ Index
 * Buening, Andreas:                      Acknowledgments.     (line  60)
 * Buening, Andreas <1>:                  Contributors.        (line  95)
 * Buening, Andreas <2>:                  Maintainers.         (line  14)
-* buffering, interactive vs. noninteractive: I/O Functions.   (line  75)
-* buffering, input/output:               I/O Functions.       (line 168)
+* buffering, input/output:               I/O Functions.       (line 166)
 * buffering, input/output <1>:           Two-way I/O.         (line  53)
+* buffering, interactive vs. noninteractive: I/O Functions.   (line  74)
+* buffers, flushing:                     I/O Functions.       (line  32)
+* buffers, flushing <1>:                 I/O Functions.       (line 166)
 * buffers, operators for:                GNU Regexp Operators.
                                                               (line  50)
-* buffers, flushing:                     I/O Functions.       (line  32)
-* buffers, flushing <1>:                 I/O Functions.       (line 168)
 * bug reports, email address, <bug-gawk@gnu.org>: Bug address.
                                                               (line  52)
 * <bug-gawk@gnu.org> bug reporting address: Bug address.      (line  52)
@@ -36846,51 +36810,51 @@ Index
                                                               (line  27)
 * bytes, counting:                       Wc Program.          (line   6)
 * C library functions, assert():         Assert Function.     (line   6)
-* C library functions, getopt():         Getopt Function.     (line  15)
-* C library functions, getpwent():       Passwd Functions.    (line  16)
-* C library functions, getpwnam():       Passwd Functions.    (line 174)
-* C library functions, getpwuid():       Passwd Functions.    (line 185)
-* C library functions, getpwent() <1>:   Passwd Functions.    (line 195)
+* C library functions, bindtextdomain(): Explaining gettext.  (line  50)
+* C library functions, endgrent():       Group Functions.     (line 211)
 * C library functions, endpwent():       Passwd Functions.    (line 207)
+* C library functions, getaddrinfo():    TCP/IP Networking.   (line  39)
 * C library functions, getgrent():       Group Functions.     (line   6)
-* C library functions, getgrnam():       Group Functions.     (line 171)
+* C library functions, getgrent() <1>:   Group Functions.     (line 200)
 * C library functions, getgrgid():       Group Functions.     (line 182)
+* C library functions, getgrnam():       Group Functions.     (line 171)
 * C library functions, getgruser():      Group Functions.     (line 191)
-* C library functions, getgrent() <1>:   Group Functions.     (line 200)
-* C library functions, endgrent():       Group Functions.     (line 211)
-* C library functions, getaddrinfo():    TCP/IP Networking.   (line  39)
-* C library functions, textdomain():     Explaining gettext.  (line  28)
-* C library functions, bindtextdomain(): Explaining gettext.  (line  50)
+* C library functions, getopt():         Getopt Function.     (line  15)
+* C library functions, getpwent():       Passwd Functions.    (line  16)
+* C library functions, getpwent() <1>:   Passwd Functions.    (line 195)
+* C library functions, getpwnam():       Passwd Functions.    (line 174)
+* C library functions, getpwuid():       Passwd Functions.    (line 185)
 * C library functions, gettext():        Explaining gettext.  (line  63)
+* C library functions, textdomain():     Explaining gettext.  (line  28)
 * call by reference:                     Pass By Value/Reference.
                                                               (line  44)
 * call by value:                         Pass By Value/Reference.
                                                               (line  15)
-* call stack, explanation of:            Debugging Terms.     (line  10)
 * call stack, display in debugger:       Execution Stack.     (line  13)
+* call stack, explanation of:            Debugging Terms.     (line  10)
+* caret (^), ^ operator:                 Precedence.          (line  48)
+* caret (^), ^= operator:                Assignment Ops.      (line 129)
+* caret (^), ^= operator <1>:            Precedence.          (line  94)
+* caret (^), in bracket expressions:     Bracket Expressions. (line  25)
 * caret (^), regexp operator:            Regexp Operator Details.
                                                               (line  18)
-* caret (^), in bracket expressions:     Bracket Expressions. (line  25)
 * caret (^), regexp operator <1>:        GNU Regexp Operators.
                                                               (line  61)
-* caret (^), ^= operator:                Assignment Ops.      (line 129)
-* caret (^), ^ operator:                 Precedence.          (line  48)
-* caret (^), ^= operator <1>:            Precedence.          (line  94)
 * case keyword:                          Switch Statement.    (line   6)
-* case sensitivity, regexps and:         Case-sensitivity.    (line   6)
-* case sensitivity, gawk:                Case-sensitivity.    (line  26)
-* case sensitivity, string comparisons and: User-modified.    (line  79)
-* case sensitivity, regexps and <1>:     User-modified.       (line  79)
-* case sensitivity, array indices and:   Array Intro.         (line 100)
+* case sensitivity, array indices and:   Array Intro.         (line 102)
 * case sensitivity, converting case:     String Functions.    (line 552)
 * case sensitivity, example programs:    Library Functions.   (line  50)
+* case sensitivity, gawk:                Case-sensitivity.    (line  26)
+* case sensitivity, regexps and:         Case-sensitivity.    (line   6)
+* case sensitivity, regexps and <1>:     User-modified.       (line  79)
+* case sensitivity, string comparisons and: User-modified.    (line  79)
 * CGI, awk scripts for:                  Options.             (line 146)
 * character sets (machine character encodings): Ordinal Functions.
                                                               (line  45)
 * character sets (machine character encodings) <1>: Glossary. (line 194)
-* characters, values of as numbers:      Ordinal Functions.   (line   6)
 * characters, counting:                  Wc Program.          (line   6)
 * characters, transliterating:           Translate Program.   (line   6)
+* characters, values of as numbers:      Ordinal Functions.   (line   6)
 * Chassell, Robert J.:                   Acknowledgments.     (line  33)
 * chdir() extension function:            Extension Sample File Functions.
                                                               (line  12)
@@ -36908,93 +36872,93 @@ Index
                                                               (line  22)
 * close <1>:                             I/O Functions.       (line  10)
 * close file or coprocess:               I/O Functions.       (line  10)
+* Close, Diane:                          Manual History.      (line  34)
+* Close, Diane <1>:                      Contributors.        (line  21)
 * close() function, portability:         Close Files And Pipes.
                                                               (line  85)
 * close() function, return value:        Close Return Value.  (line   6)
 * close() function, two-way pipes and:   Two-way I/O.         (line  60)
-* Close, Diane:                          Manual History.      (line  34)
-* Close, Diane <1>:                      Contributors.        (line  21)
 * Collado, Manuel:                       Acknowledgments.     (line  60)
 * Collado, Manuel <1>:                   More CSV.            (line   6)
 * Collado, Manuel <2>:                   More CSV.            (line  52)
-* collating elements:                    Bracket Expressions. (line  91)
-* collating symbols:                     Bracket Expressions. (line  98)
+* collating elements:                    Bracket Expressions. (line  90)
+* collating symbols:                     Bracket Expressions. (line  97)
 * Colombo, Antonio:                      Acknowledgments.     (line  60)
 * Colombo, Antonio <1>:                  Contributors.        (line 143)
-* colon (:), ?: operator:                Precedence.          (line  91)
 * colon (:), :: namespace separator:     Qualified Names.     (line   6)
+* colon (:), ?: operator:                Precedence.          (line  91)
 * columns, aligning:                     Print Examples.      (line  69)
 * columns, cutting:                      Cut Program.         (line   6)
 * comma (,), in range patterns:          Ranges.              (line   6)
-* comma separated values (CSV) data, -k option: Options.      (line 203)
 * comma separated values (CSV) data, --csv option: Options.   (line 203)
-* comma separated values (CSV) data, records and fields: Comma Separated 
Fields.
+* comma separated values (CSV) data, -k option: Options.      (line 203)
+* comma separated values (CSV) data, generating CSV data: To CSV Function.
                                                               (line   6)
 * Comma separated values (CSV) data, parsing with FPAT: Splitting By Content.
                                                               (line  23)
 * Comma separated values (CSV) data, parsing with FPAT library: More CSV.
                                                               (line  52)
-* comma separated values (CSV) data, generating CSV data: To CSV Function.
+* comma separated values (CSV) data, records and fields: Comma Separated 
Fields.
                                                               (line   6)
 * command completion, in debugger:       Readline Support.    (line   6)
-* command line, formats:                 Running gawk.        (line  12)
-* command line, option -f:               Long.                (line  12)
-* command line, invoking awk from:       Command Line.        (line   6)
-* command line, options:                 Options.             (line   6)
-* command line, options, end of:         Options.             (line  58)
 * command line, arguments:               Other Arguments.     (line   6)
-* command line, FS on, setting:          Command Line Field Separator.
-                                                              (line   6)
-* command line, directories on:          Command-line directories.
-                                                              (line   6)
-* command line, variables, assigning on: Assignment Options.  (line   6)
 * command line, arguments <1>:           Auto-set.            (line  15)
 * command line, arguments <2>:           Auto-set.            (line 154)
 * command line, arguments <3>:           ARGC and ARGV.       (line   6)
+* command line, directories on:          Command-line directories.
+                                                              (line   6)
+* command line, formats:                 Running gawk.        (line  12)
+* command line, FS on, setting:          Command Line Field Separator.
+                                                              (line   6)
+* command line, invoking awk from:       Command Line.        (line   6)
+* command line, option -f:               Long.                (line  12)
+* command line, options:                 Options.             (line   6)
+* command line, options, end of:         Options.             (line  58)
 * command line, options, processing:     Getopt Function.     (line   6)
 * command line, options, string extraction: String Extraction.
                                                               (line   6)
+* command line, variables, assigning on: Assignment Options.  (line   6)
 * commands debugger command:             Debugger Execution Control.
                                                               (line  10)
 * commands to execute at breakpoint:     Debugger Execution Control.
                                                               (line  10)
 * commenting:                            Comments.            (line   6)
 * commenting, backslash continuation and: Statements/Lines.   (line  77)
-* common extensions, \x escape sequence: Escape Sequences.    (line  61)
-* common extensions, \u escape sequence: Escape Sequences.    (line  76)
-* common extensions, RS as a regexp:     gawk split records.  (line   6)
-* common extensions, single character fields: Single Character Fields.
-                                                              (line   6)
+* common extensions, ** operator:        Arithmetic Ops.      (line  30)
+* common extensions, **= operator:       Assignment Ops.      (line 138)
+* common extensions, /dev/stderr special file: Special FD.    (line  48)
 * common extensions, /dev/stdin special file: Special FD.     (line  48)
 * common extensions, /dev/stdout special file: Special FD.    (line  48)
-* common extensions, /dev/stderr special file: Special FD.    (line  48)
-* common extensions, ** operator:        Arithmetic Ops.      (line  30)
-* common extensions, **= operator:       Assignment Ops.      (line 139)
+* common extensions, \u escape sequence: Escape Sequences.    (line  76)
+* common extensions, \x escape sequence: Escape Sequences.    (line  61)
+* common extensions, BINMODE variable:   PC Using.            (line  18)
 * common extensions, delete to delete entire arrays: Delete.  (line  39)
+* common extensions, func keyword:       Definition Syntax.   (line  99)
 * common extensions, length() applied to an array: String Functions.
                                                               (line 219)
-* common extensions, func keyword:       Definition Syntax.   (line  99)
-* common extensions, BINMODE variable:   PC Using.            (line  18)
+* common extensions, RS as a regexp:     gawk split records.  (line   6)
+* common extensions, single character fields: Single Character Fields.
+                                                              (line   6)
 * comp.lang.awk newsgroup:               Usenet.              (line  11)
 * comparison expressions:                Typing and Comparison.
                                                               (line   9)
-* comparison expressions, string vs. regexp: Comparison Operators.
-                                                              (line  80)
 * comparison expressions, as patterns:   Expression Patterns. (line  14)
-* compatibility mode (gawk), specifying: Options.             (line  85)
+* comparison expressions, string vs. regexp: Comparison Operators.
+                                                              (line  79)
+* compatibility mode (gawk), extensions: POSIX/GNU.           (line   6)
 * compatibility mode (gawk), file names: Special Caveats.     (line   9)
-* compatibility mode (gawk), octal numbers: Nondecimal-numbers.
-                                                              (line  59)
 * compatibility mode (gawk), hexadecimal numbers: Nondecimal-numbers.
                                                               (line  59)
-* compatibility mode (gawk), extensions: POSIX/GNU.           (line   6)
-* compiled programs:                     Basic High Level.    (line  14)
+* compatibility mode (gawk), octal numbers: Nondecimal-numbers.
+                                                              (line  59)
+* compatibility mode (gawk), specifying: Options.             (line  85)
+* compiled programs:                     Basic High Level.    (line  16)
 * compiled programs <1>:                 Glossary.            (line 216)
-* compiling gawk, for MS-Windows:        PC Compiling.        (line  11)
 * compiling gawk, for Cygwin:            Cygwin.              (line   6)
+* compiling gawk, for MS-Windows:        PC Compiling.        (line  11)
 * compiling gawk, for OpenVMS:           OpenVMS Compilation. (line   6)
-* compl:                                 Bitwise Functions.   (line  45)
-* complement, bitwise:                   Bitwise Functions.   (line  26)
+* compl:                                 Bitwise Functions.   (line  44)
+* complement, bitwise:                   Bitwise Functions.   (line  25)
 * component name:                        Qualified Names.     (line   6)
 * component name, naming rules:          Naming Rules.        (line   6)
 * compound statements, control statements and: Statements.    (line  10)
@@ -37013,11 +36977,11 @@ Index
                                                               (line  46)
 * configuration options, gawk:           Additional Configuration Options.
                                                               (line   6)
-* constants, regexp:                     Regexp Usage.        (line  57)
-* constants, types of:                   Constants.           (line   6)
+* constants, nondecimal:                 Nondecimal Data.     (line   6)
 * constants, numeric:                    Scalar Constants.    (line   6)
+* constants, regexp:                     Regexp Usage.        (line  57)
 * constants, string:                     Scalar Constants.    (line  15)
-* constants, nondecimal:                 Nondecimal Data.     (line   6)
+* constants, types of:                   Constants.           (line   6)
 * continue debugger command:             Debugger Execution Control.
                                                               (line  33)
 * continue program, in debugger:         Debugger Execution Control.
@@ -37026,42 +36990,42 @@ Index
 * control statements:                    Statements.          (line   6)
 * controlling array scanning order:      Controlling Scanning.
                                                               (line  14)
-* converting, string to numbers:         Strings And Numbers. (line   6)
-* converting, numbers to strings:        Strings And Numbers. (line   6)
+* converting, dates to timestamps:       Time Functions.      (line  77)
 * converting, integer array subscripts to strings: Numeric Array Subscripts.
                                                               (line  31)
-* converting, string to numbers <1>:     String Functions.    (line 420)
+* converting, numbers to strings:        Strings And Numbers. (line   6)
+* converting, numbers to strings <1>:    Bitwise Functions.   (line 109)
 * converting, string to lower case:      String Functions.    (line 553)
+* converting, string to numbers:         Strings And Numbers. (line   6)
+* converting, string to numbers <1>:     String Functions.    (line 420)
+* converting, string to numbers <2>:     Bitwise Functions.   (line 109)
 * converting, string to upper case:      String Functions.    (line 559)
-* converting, dates to timestamps:       Time Functions.      (line  77)
-* converting, string to numbers <2>:     Bitwise Functions.   (line 110)
-* converting, numbers to strings <1>:    Bitwise Functions.   (line 110)
 * CONVFMT variable:                      Strings And Numbers. (line  29)
 * CONVFMT variable <1>:                  User-modified.       (line  30)
 * CONVFMT variable, array subscripts and: Numeric Array Subscripts.
                                                               (line   6)
 * cookie:                                Glossary.            (line 255)
-* coprocesses, getline from:             Getline/Coprocess.   (line   6)
 * coprocesses:                           Redirection.         (line  96)
+* coprocesses <1>:                       Two-way I/O.         (line  27)
 * coprocesses, closing:                  Close Files And Pipes.
                                                               (line   6)
-* coprocesses <1>:                       Two-way I/O.         (line  27)
+* coprocesses, getline from:             Getline/Coprocess.   (line   6)
 * cos:                                   Numeric Functions.   (line  15)
 * cosine:                                Numeric Functions.   (line  15)
 * counting words, lines, characters, and bytes: Wc Program.   (line   6)
 * cppawk:                                Other Versions.      (line 190)
 * csh utility:                           Statements/Lines.    (line  45)
-* csh utility, POSIXLY_CORRECT environment variable: Options. (line 417)
 * csh utility, |& operator, comparison with: Two-way I/O.     (line  27)
-* CSV (comma separated values) data, -k option: Options.      (line 203)
+* csh utility, POSIXLY_CORRECT environment variable: Options. (line 417)
 * CSV (comma separated values) data, --csv option: Options.   (line 203)
-* CSV (comma separated values) data, records and fields: Comma Separated 
Fields.
+* CSV (comma separated values) data, -k option: Options.      (line 203)
+* CSV (comma separated values) data, generating CSV data: To CSV Function.
                                                               (line   6)
-* CSV (comma separated values) data, parsing with FPAT: Splitting By Content.
-                                                              (line  23)
 * CSV (comma separated values) data, parsing with CSVMODE library: More CSV.
                                                               (line  52)
-* CSV (comma separated values) data, generating CSV data: To CSV Function.
+* CSV (comma separated values) data, parsing with FPAT: Splitting By Content.
+                                                              (line  23)
+* CSV (comma separated values) data, records and fields: Comma Separated 
Fields.
                                                               (line   6)
 * CSVMODE library for gawk:              More CSV.            (line  52)
 * ctime() user-defined function:         Function Example.    (line  74)
@@ -37081,65 +37045,65 @@ Index
 * cut.awk program:                       Cut Program.         (line  49)
 * d debugger command (alias for delete): Breakpoint Control.  (line  64)
 * dark corner:                           Conventions.         (line  42)
+* dark corner <1>:                       Glossary.            (line 266)
+* dark corner, "0" is actually true:     Truth Values.        (line  24)
+* dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops.
+                                                              (line 149)
+* dark corner, ^, in FS:                 Regexp Field Splitting.
+                                                              (line  58)
 * dark corner, ARGV variable, value of:  Executable Scripts.  (line  55)
+* dark corner, array subscripts:         Uninitialized Subscripts.
+                                                              (line  43)
 * dark corner, backslash continuation on command line: Statements/Lines.
                                                               (line  92)
+* dark corner, break statement:          Break Statement.     (line  51)
+* dark corner, close() function:         Close Return Value.  (line   6)
 * dark corner, command line, backslash continuation on: Statements/Lines.
                                                               (line  92)
-* dark corner, invoking awk:             Command Line.        (line  16)
+* dark corner, command-line arguments:   Assignment Options.  (line  43)
+* dark corner, continue statement:       Continue Statement.  (line  44)
+* dark corner, CONVFMT variable:         Strings And Numbers. (line  39)
 * dark corner, empty programs:           Command Line.        (line  20)
 * dark corner, escape sequences:         Other Arguments.     (line  46)
 * dark corner, escape sequences, for metacharacters: Escape Sequences.
                                                               (line 159)
-* dark corner, input files:              awk split records.   (line 104)
-* dark corner, strings, storing:         gawk split records.  (line  94)
-* dark corner, NF variable, decrementing: Changing Fields.    (line 107)
-* dark corner, ^, in FS:                 Regexp Field Splitting.
-                                                              (line  58)
-* dark corner, FS as null string:        Single Character Fields.
-                                                              (line  20)
+* dark corner, exit statement:           Exit Statement.      (line  30)
 * dark corner, field separators:         Full Line Fields.    (line  22)
-* dark corner, multiline records:        Multiple Line.       (line  35)
 * dark corner, FILENAME variable:        Getline Notes.       (line  19)
-* dark corner, OFMT variable:            OFMT.                (line  32)
+* dark corner, FILENAME variable <1>:    Auto-set.            (line 108)
+* dark corner, FNR/NR variables:         Auto-set.            (line 415)
 * dark corner, format-control characters: Control Letters.    (line  33)
 * dark corner, format-control characters <1>: Control Letters.
                                                               (line 108)
-* dark corner, close() function:         Close Return Value.  (line   6)
-* dark corner, string continuation:      Scalar Constants.    (line  53)
-* dark corner, regexp constants:         Standard Regexp Constants.
-                                                              (line   6)
-* dark corner, regexp constants, as arguments to user-defined functions: 
Standard Regexp Constants.
-                                                              (line  43)
-* dark corner, command-line arguments:   Assignment Options.  (line  43)
-* dark corner, CONVFMT variable:         Strings And Numbers. (line  39)
-* dark corner, locale’s decimal point character: Locale influences 
conversions.
+* dark corner, FS as null string:        Single Character Fields.
+                                                              (line  20)
+* dark corner, input files:              awk split records.   (line 104)
+* dark corner, invoking awk:             Command Line.        (line  16)
+* dark corner, length() function:        String Functions.    (line 205)
+* dark corner, locale's decimal point character: Locale influences conversions.
                                                               (line  17)
-* dark corner, regexp constants, /= operator and: Assignment Ops.
-                                                              (line 150)
-* dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 150)
-* dark corner, "0" is actually true:     Truth Values.        (line  24)
+* dark corner, multiline records:        Multiple Line.       (line  35)
+* dark corner, NF variable, decrementing: Changing Fields.    (line 107)
+* dark corner, OFMT variable:            OFMT.                (line  32)
+* dark corner, parameter name restrictions: Definition Syntax.
+                                                              (line  44)
 * dark corner, range patterns, line continuation and: Ranges. (line  64)
-* dark corner, break statement:          Break Statement.     (line  51)
-* dark corner, continue statement:       Continue Statement.  (line  44)
-* dark corner, exit statement:           Exit Statement.      (line  30)
-* dark corner, value of ARGV[0]:         Auto-set.            (line  39)
-* dark corner, FILENAME variable <1>:    Auto-set.            (line 108)
-* dark corner, FNR/NR variables:         Auto-set.            (line 416)
-* dark corner, array subscripts:         Uninitialized Subscripts.
-                                                              (line  43)
 * dark corner, regexp as second argument to index(): String Functions.
                                                               (line 183)
-* dark corner, length() function:        String Functions.    (line 205)
+* dark corner, regexp constants:         Standard Regexp Constants.
+                                                              (line   6)
+* dark corner, regexp constants, /= operator and: Assignment Ops.
+                                                              (line 148)
+* dark corner, regexp constants, as arguments to user-defined functions: 
Standard Regexp Constants.
+                                                              (line  43)
 * dark corner, split() function:         String Functions.    (line 391)
-* dark corner, parameter name restrictions: Definition Syntax.
-                                                              (line  44)
-* dark corner <1>:                       Glossary.            (line 266)
+* dark corner, string continuation:      Scalar Constants.    (line  53)
+* dark corner, strings, storing:         gawk split records.  (line  92)
+* dark corner, value of ARGV[0]:         Auto-set.            (line  39)
+* data-driven languages:                 Basic High Level.    (line  87)
 * data, fixed-width:                     Constant Size.       (line   6)
-* data-driven languages:                 Basic High Level.    (line  76)
-* database, users, reading:              Passwd Functions.    (line   6)
 * database, group, reading:              Group Functions.     (line   6)
+* database, users, reading:              Passwd Functions.    (line   6)
 * date utility, GNU:                     Time Functions.      (line  17)
 * date utility, POSIX:                   Time Functions.      (line 254)
 * dates, converting to timestamps:       Time Functions.      (line  77)
@@ -37158,136 +37122,136 @@ Index
                                                               (line  33)
 * deadlocks:                             Two-way I/O.         (line  53)
 * debugger, capabilities:                Debugging Concepts.  (line  16)
-* debugger, concepts:                    Debugging Terms.     (line   6)
-* debugger, how to start:                Debugger Invocation. (line   6)
-* debugger, prompt:                      Debugger Invocation. (line  26)
-* debugger, setting a breakpoint:        Finding The Bug.     (line  32)
-* debugger, commands, breakpoint:        Finding The Bug.     (line  32)
-* debugger, commands, break:             Finding The Bug.     (line  32)
+* debugger, command completion:          Readline Support.    (line   6)
 * debugger, commands, b (break):         Finding The Bug.     (line  32)
-* debugger, running the program:         Finding The Bug.     (line  39)
-* debugger, commands, run:               Finding The Bug.     (line  39)
-* debugger, stack frames, showing:       Finding The Bug.     (line  52)
-* debugger, commands, bt (backtrace):    Finding The Bug.     (line  52)
-* debugger, commands, backtrace:         Finding The Bug.     (line  52)
-* debugger, commands, print:             Finding The Bug.     (line  68)
-* debugger, commands, p (print):         Finding The Bug.     (line  68)
-* debugger, commands, n (next):          Finding The Bug.     (line 105)
-* debugger, commands, next:              Finding The Bug.     (line 105)
-* debugger, printing single array elements: Finding The Bug.  (line 140)
-* debugger, printing all array elements: Finding The Bug.     (line 154)
-* debugger, repeating commands:          List of Debugger Commands.
-                                                              (line  21)
 * debugger, commands, b (break) <1>:     Breakpoint Control.  (line  11)
+* debugger, commands, backtrace:         Finding The Bug.     (line  52)
+* debugger, commands, backtrace <1>:     Execution Stack.     (line  13)
+* debugger, commands, break:             Finding The Bug.     (line  32)
 * debugger, commands, break <1>:         Breakpoint Control.  (line  11)
+* debugger, commands, breakpoint:        Finding The Bug.     (line  32)
+* debugger, commands, bt (backtrace):    Finding The Bug.     (line  52)
+* debugger, commands, bt (backtrace) <1>: Execution Stack.    (line  13)
+* debugger, commands, c (continue):      Debugger Execution Control.
+                                                              (line  33)
 * debugger, commands, clear:             Breakpoint Control.  (line  36)
+* debugger, commands, commands:          Debugger Execution Control.
+                                                              (line  10)
 * debugger, commands, condition:         Breakpoint Control.  (line  54)
+* debugger, commands, continue:          Debugger Execution Control.
+                                                              (line  33)
 * debugger, commands, d (delete):        Breakpoint Control.  (line  64)
 * debugger, commands, delete:            Breakpoint Control.  (line  64)
 * debugger, commands, disable:           Breakpoint Control.  (line  69)
+* debugger, commands, display:           Viewing And Changing Data.
+                                                              (line   8)
+* debugger, commands, down:              Execution Stack.     (line  23)
+* debugger, commands, dump:              Miscellaneous Debugger Commands.
+                                                              (line   9)
 * debugger, commands, e (enable):        Breakpoint Control.  (line  73)
 * debugger, commands, enable:            Breakpoint Control.  (line  73)
-* debugger, commands, ignore:            Breakpoint Control.  (line  87)
-* debugger, commands, t (tbreak):        Breakpoint Control.  (line  90)
-* debugger, commands, tbreak:            Breakpoint Control.  (line  90)
-* debugger, commands, commands:          Debugger Execution Control.
-                                                              (line  10)
-* debugger, commands, silent:            Debugger Execution Control.
-                                                              (line  10)
 * debugger, commands, end:               Debugger Execution Control.
                                                               (line  10)
-* debugger, commands, c (continue):      Debugger Execution Control.
-                                                              (line  33)
-* debugger, commands, continue:          Debugger Execution Control.
-                                                              (line  33)
+* debugger, commands, eval:              Viewing And Changing Data.
+                                                              (line  23)
+* debugger, commands, f (frame):         Execution Stack.     (line  27)
 * debugger, commands, finish:            Debugger Execution Control.
                                                               (line  39)
+* debugger, commands, frame:             Execution Stack.     (line  27)
+* debugger, commands, h (help):          Miscellaneous Debugger Commands.
+                                                              (line  67)
+* debugger, commands, help:              Miscellaneous Debugger Commands.
+                                                              (line  67)
+* debugger, commands, i (info):          Debugger Info.       (line  13)
+* debugger, commands, ignore:            Breakpoint Control.  (line  87)
+* debugger, commands, info:              Debugger Info.       (line  13)
+* debugger, commands, l (list):          Miscellaneous Debugger Commands.
+                                                              (line  73)
+* debugger, commands, list:              Miscellaneous Debugger Commands.
+                                                              (line  73)
+* debugger, commands, n (next):          Finding The Bug.     (line 105)
 * debugger, commands, n (next) <1>:      Debugger Execution Control.
                                                               (line  43)
+* debugger, commands, next:              Finding The Bug.     (line 105)
 * debugger, commands, next <1>:          Debugger Execution Control.
                                                               (line  43)
-* debugger, commands, ni (nexti):        Debugger Execution Control.
-                                                              (line  49)
 * debugger, commands, nexti:             Debugger Execution Control.
                                                               (line  49)
-* debugger, commands, return:            Debugger Execution Control.
-                                                              (line  54)
+* debugger, commands, ni (nexti):        Debugger Execution Control.
+                                                              (line  49)
+* debugger, commands, o (option):        Debugger Info.       (line  57)
+* debugger, commands, option:            Debugger Info.       (line  57)
+* debugger, commands, p (print):         Finding The Bug.     (line  68)
+* debugger, commands, p (print) <1>:     Viewing And Changing Data.
+                                                              (line  39)
+* debugger, commands, print:             Finding The Bug.     (line  68)
+* debugger, commands, print <1>:         Viewing And Changing Data.
+                                                              (line  39)
+* debugger, commands, printf:            Viewing And Changing Data.
+                                                              (line  57)
+* debugger, commands, q (quit):          Miscellaneous Debugger Commands.
+                                                              (line 100)
+* debugger, commands, quit:              Miscellaneous Debugger Commands.
+                                                              (line 100)
 * debugger, commands, r (run):           Debugger Execution Control.
                                                               (line  62)
+* debugger, commands, return:            Debugger Execution Control.
+                                                              (line  54)
+* debugger, commands, run:               Finding The Bug.     (line  39)
 * debugger, commands, run <1>:           Debugger Execution Control.
                                                               (line  62)
 * debugger, commands, s (step):          Debugger Execution Control.
                                                               (line  68)
-* debugger, commands, step:              Debugger Execution Control.
-                                                              (line  68)
+* debugger, commands, set:               Viewing And Changing Data.
+                                                              (line  62)
 * debugger, commands, si (stepi):        Debugger Execution Control.
                                                               (line  75)
+* debugger, commands, silent:            Debugger Execution Control.
+                                                              (line  10)
+* debugger, commands, step:              Debugger Execution Control.
+                                                              (line  68)
 * debugger, commands, stepi:             Debugger Execution Control.
                                                               (line  75)
+* debugger, commands, t (tbreak):        Breakpoint Control.  (line  90)
+* debugger, commands, tbreak:            Breakpoint Control.  (line  90)
+* debugger, commands, trace:             Miscellaneous Debugger Commands.
+                                                              (line 108)
 * debugger, commands, u (until):         Debugger Execution Control.
                                                               (line  82)
+* debugger, commands, undisplay:         Viewing And Changing Data.
+                                                              (line  83)
 * debugger, commands, until:             Debugger Execution Control.
                                                               (line  82)
-* debugger, commands, display:           Viewing And Changing Data.
-                                                              (line   8)
-* debugger, commands, eval:              Viewing And Changing Data.
-                                                              (line  23)
-* debugger, commands, p (print) <1>:     Viewing And Changing Data.
-                                                              (line  39)
-* debugger, commands, print <1>:         Viewing And Changing Data.
-                                                              (line  39)
-* debugger, commands, printf:            Viewing And Changing Data.
-                                                              (line  57)
-* debugger, commands, set:               Viewing And Changing Data.
-                                                              (line  62)
+* debugger, commands, unwatch:           Viewing And Changing Data.
+                                                              (line  87)
+* debugger, commands, up:                Execution Stack.     (line  36)
 * debugger, commands, w (watch):         Viewing And Changing Data.
                                                               (line  70)
 * debugger, commands, watch:             Viewing And Changing Data.
                                                               (line  70)
-* debugger, commands, undisplay:         Viewing And Changing Data.
-                                                              (line  83)
-* debugger, commands, unwatch:           Viewing And Changing Data.
-                                                              (line  87)
-* debugger, commands, bt (backtrace) <1>: Execution Stack.    (line  13)
-* debugger, commands, backtrace <1>:     Execution Stack.     (line  13)
 * debugger, commands, where (backtrace): Execution Stack.     (line  13)
-* debugger, commands, down:              Execution Stack.     (line  23)
-* debugger, commands, f (frame):         Execution Stack.     (line  27)
-* debugger, commands, frame:             Execution Stack.     (line  27)
-* debugger, commands, up:                Execution Stack.     (line  36)
-* debugger, commands, i (info):          Debugger Info.       (line  13)
-* debugger, commands, info:              Debugger Info.       (line  13)
-* debugger, commands, o (option):        Debugger Info.       (line  57)
-* debugger, commands, option:            Debugger Info.       (line  57)
-* debugger, options:                     Debugger Info.       (line  57)
-* debugger, history size:                Debugger Info.       (line  65)
+* debugger, concepts:                    Debugging Terms.     (line   6)
 * debugger, default list amount:         Debugger Info.       (line  69)
-* debugger, prompt <1>:                  Debugger Info.       (line  78)
+* debugger, history expansion:           Readline Support.    (line   6)
 * debugger, history file:                Debugger Info.       (line  81)
+* debugger, history size:                Debugger Info.       (line  65)
+* debugger, how to start:                Debugger Invocation. (line   6)
 * debugger, instruction tracing:         Debugger Info.       (line  90)
-* debugger, save commands to a file:     Debugger Info.       (line  92)
-* debugger, read commands from a file:   Debugger Info.       (line  97)
-* debugger, commands, dump:              Miscellaneous Debugger Commands.
-                                                              (line   9)
-* debugger, commands, h (help):          Miscellaneous Debugger Commands.
-                                                              (line  67)
-* debugger, commands, help:              Miscellaneous Debugger Commands.
-                                                              (line  67)
-* debugger, commands, l (list):          Miscellaneous Debugger Commands.
-                                                              (line  73)
-* debugger, commands, list:              Miscellaneous Debugger Commands.
-                                                              (line  73)
-* debugger, commands, q (quit):          Miscellaneous Debugger Commands.
-                                                              (line 100)
-* debugger, commands, quit:              Miscellaneous Debugger Commands.
-                                                              (line 100)
-* debugger, commands, trace:             Miscellaneous Debugger Commands.
-                                                              (line 108)
-* debugger, command completion:          Readline Support.    (line   6)
-* debugger, history expansion:           Readline Support.    (line   6)
-* debugger, limitations:                 Limitations.         (line   6)
 * debugger, interaction with namespaces: Namespace And Features.
                                                               (line  17)
+* debugger, limitations:                 Limitations.         (line   6)
+* debugger, options:                     Debugger Info.       (line  57)
+* debugger, printing all array elements: Finding The Bug.     (line 154)
+* debugger, printing single array elements: Finding The Bug.  (line 140)
+* debugger, prompt:                      Debugger Invocation. (line  26)
+* debugger, prompt <1>:                  Debugger Info.       (line  78)
+* debugger, read commands from a file:   Debugger Info.       (line  97)
+* debugger, repeating commands:          List of Debugger Commands.
+                                                              (line  21)
+* debugger, running the program:         Finding The Bug.     (line  39)
+* debugger, save commands to a file:     Debugger Info.       (line  92)
+* debugger, setting a breakpoint:        Finding The Bug.     (line  32)
+* debugger, stack frames, showing:       Finding The Bug.     (line  52)
 * debugging, awk programs:               Debugger.            (line   6)
 * debugging, example session:            Sample Debugging Session.
                                                               (line   6)
@@ -37308,94 +37272,94 @@ Index
 * deleting, entire arrays:               Delete.              (line  39)
 * Demaille, Akim:                        Acknowledgments.     (line  60)
 * describe call stack frame, in debugger: Debugger Info.      (line  27)
-* differences in awk and gawk, AWKPATH environment variable: AWKPATH Variable.
-                                                              (line   6)
+* differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
+                                                              (line  89)
+* differences in awk and gawk, ARGIND variable: Auto-set.     (line  44)
+* differences in awk and gawk, array elements, deleting: Delete.
+                                                              (line  39)
 * differences in awk and gawk, AWKLIBPATH environment variable: AWKLIBPATH 
Variable.
                                                               (line   6)
-* differences in awk and gawk, regular expressions: Case-sensitivity.
-                                                              (line  26)
-* differences in awk and gawk, record separators: awk split records.
-                                                              (line 118)
-* differences in awk and gawk, RS/RT variables: awk split records.
-                                                              (line 118)
-* differences in awk and gawk, RS/RT variables <1>: gawk split records.
-                                                              (line  66)
-* differences in awk and gawk, strings, storing: gawk split records.
-                                                              (line  88)
-* differences in awk and gawk, single-character fields: Single Character 
Fields.
-                                                              (line   6)
-* differences in awk and gawk, RS/RT variables <2>: Multiple Line.
-                                                              (line 138)
-* differences in awk and gawk, getline command: Getline.      (line  19)
-* differences in awk and gawk, input/output operators: Getline/Coprocess.
-                                                              (line   6)
-* differences in awk and gawk, implementation limitations: Getline Notes.
-                                                              (line  14)
-* differences in awk and gawk, read timeouts: Read Timeout.   (line   6)
-* differences in awk and gawk, retrying input: Retrying Input.
-                                                              (line   6)
-* differences in awk and gawk, command-line directories: Command-line 
directories.
-                                                              (line   6)
-* differences in awk and gawk, print/printf statements: Format Modifiers.
-                                                              (line  13)
-* differences in awk and gawk, input/output operators <1>: Redirection.
-                                                              (line  96)
-* differences in awk and gawk, implementation limitations <1>: Redirection.
-                                                              (line 129)
-* differences in awk and gawk, error messages: Special FD.    (line  19)
-* differences in awk and gawk, close() function: Close Files And Pipes.
-                                                              (line  85)
-* differences in awk and gawk, close() function <1>: Close Return Value.
+* differences in awk and gawk, AWKPATH environment variable: AWKPATH Variable.
                                                               (line   6)
-* differences in awk and gawk, strings:  Scalar Constants.    (line  20)
-* differences in awk and gawk, strings <1>: Scalar Constants. (line  53)
-* differences in awk and gawk, regexp constants: Standard Regexp Constants.
-                                                              (line  43)
-* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
-                                                              (line  66)
-* differences in awk and gawk, line continuations: Conditional Exp.
-                                                              (line  34)
 * differences in awk and gawk, BEGIN/END patterns: I/O And BEGIN/END.
                                                               (line  15)
 * differences in awk and gawk, BEGINFILE/ENDFILE patterns: BEGINFILE/ENDFILE.
                                                               (line   6)
 * differences in awk and gawk, BINMODE variable: User-modified.
                                                               (line  15)
+* differences in awk and gawk, BINMODE variable <1>: PC Using.
+                                                              (line  18)
+* differences in awk and gawk, close() function: Close Files And Pipes.
+                                                              (line  85)
+* differences in awk and gawk, close() function <1>: Close Return Value.
+                                                              (line   6)
+* differences in awk and gawk, command-line directories: Command-line 
directories.
+                                                              (line   6)
+* differences in awk and gawk, ERRNO variable: Auto-set.      (line  87)
+* differences in awk and gawk, error messages: Special FD.    (line  19)
 * differences in awk and gawk, FIELDWIDTHS variable: User-modified.
                                                               (line  37)
 * differences in awk and gawk, FPAT variable: User-modified.  (line  46)
-* differences in awk and gawk, IGNORECASE variable: User-modified.
-                                                              (line  79)
-* differences in awk and gawk, LINT variable: User-modified.  (line  90)
-* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
-                                                              (line 154)
-* differences in awk and gawk, ARGIND variable: Auto-set.     (line  44)
-* differences in awk and gawk, ERRNO variable: Auto-set.      (line  87)
 * differences in awk and gawk, FUNCTAB variable: Auto-set.    (line 134)
-* differences in awk and gawk, PROCINFO array: Auto-set.      (line 148)
-* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 355)
-* differences in awk and gawk, SYMTAB variable: Auto-set.     (line 359)
-* differences in awk and gawk, ARGC/ARGV variables: ARGC and ARGV.
-                                                              (line  89)
-* differences in awk and gawk, array elements, deleting: Delete.
-                                                              (line  39)
 * differences in awk and gawk, function arguments: Calling Built-in.
                                                               (line  16)
+* differences in awk and gawk, getline command: Getline.      (line  19)
+* differences in awk and gawk, IGNORECASE variable: User-modified.
+                                                              (line  79)
+* differences in awk and gawk, implementation limitations: Getline Notes.
+                                                              (line  14)
+* differences in awk and gawk, implementation limitations <1>: Redirection.
+                                                              (line 129)
+* differences in awk and gawk, indirect function calls: Indirect Calls.
+                                                              (line   6)
+* differences in awk and gawk, input/output operators: Getline/Coprocess.
+                                                              (line   6)
+* differences in awk and gawk, input/output operators <1>: Redirection.
+                                                              (line  96)
 * differences in awk and gawk, length() function: String Functions.
                                                               (line 219)
+* differences in awk and gawk, line continuations: Conditional Exp.
+                                                              (line  34)
+* differences in awk and gawk, LINT variable: User-modified.  (line  90)
 * differences in awk and gawk, match() function: String Functions.
                                                               (line 281)
+* differences in awk and gawk, print/printf statements: Format Modifiers.
+                                                              (line  13)
+* differences in awk and gawk, PROCINFO array: Auto-set.      (line 148)
+* differences in awk and gawk, read timeouts: Read Timeout.   (line   6)
+* differences in awk and gawk, record separators: awk split records.
+                                                              (line 118)
+* differences in awk and gawk, regexp constants: Standard Regexp Constants.
+                                                              (line  43)
+* differences in awk and gawk, regular expressions: Case-sensitivity.
+                                                              (line  26)
+* differences in awk and gawk, retrying input: Retrying Input.
+                                                              (line   6)
+* differences in awk and gawk, RS/RT variables: awk split records.
+                                                              (line 118)
+* differences in awk and gawk, RS/RT variables <1>: gawk split records.
+                                                              (line  65)
+* differences in awk and gawk, RS/RT variables <2>: Multiple Line.
+                                                              (line 138)
+* differences in awk and gawk, RS/RT variables <3>: Auto-set. (line 355)
+* differences in awk and gawk, single-character fields: Single Character 
Fields.
+                                                              (line   6)
 * differences in awk and gawk, split() function: String Functions.
                                                               (line 376)
-* differences in awk and gawk, indirect function calls: Indirect Calls.
+* differences in awk and gawk, strings:  Scalar Constants.    (line  20)
+* differences in awk and gawk, strings <1>: Scalar Constants. (line  53)
+* differences in awk and gawk, strings, storing: gawk split records.
+                                                              (line  86)
+* differences in awk and gawk, SYMTAB variable: Auto-set.     (line 359)
+* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
+                                                              (line 154)
+* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
+                                                              (line  66)
+* directories, command-line:             Command-line directories.
                                                               (line   6)
-* differences in awk and gawk, BINMODE variable <1>: PC Using.
-                                                              (line  18)
-* directories, searching, for source files: AWKPATH Variable. (line   6)
 * directories, searching, for loadable extensions: AWKLIBPATH Variable.
                                                               (line   6)
-* directories, command-line:             Command-line directories.
-                                                              (line   6)
+* directories, searching, for source files: AWKPATH Variable. (line   6)
 * directories, searching, for source files <1>: Programs Exercises.
                                                               (line  70)
 * disable breakpoint:                    Breakpoint Control.  (line  69)
@@ -37404,25 +37368,25 @@ Index
                                                               (line   8)
 * display debugger options:              Debugger Info.       (line  57)
 * division:                              Arithmetic Ops.      (line  44)
-* do-while statement, use of regexps in: Regexp Usage.        (line  19)
 * do-while statement:                    Do Statement.        (line   6)
-* documentation, online:                 Manual History.      (line  11)
-* documentation, of awk programs:        Library Names.       (line   6)
+* do-while statement, use of regexps in: Regexp Usage.        (line  19)
+* documentation, building, HTML:         Building the Documentation.
+                                                              (line  28)
 * documentation, building, Info files:   Building the Documentation.
                                                               (line   6)
 * documentation, building, PDF:          Building the Documentation.
                                                               (line  12)
-* documentation, building, HTML:         Building the Documentation.
-                                                              (line  28)
+* documentation, of awk programs:        Library Names.       (line   6)
+* documentation, online:                 Manual History.      (line  11)
 * documents, searching:                  Dupword Program.     (line   6)
-* dollar sign ($), regexp operator:      Regexp Operator Details.
-                                                              (line  31)
 * dollar sign ($), $ field operator:     Fields.              (line  19)
+* dollar sign ($), $ field operator <1>: Precedence.          (line  42)
 * dollar sign ($), incrementing fields and arrays: Increment Ops.
                                                               (line  30)
-* dollar sign ($), $ field operator <1>: Precedence.          (line  42)
-* double quote ("), in shell commands:   Quoting.             (line  54)
+* dollar sign ($), regexp operator:      Regexp Operator Details.
+                                                              (line  31)
 * double quote ("), in regexp constants: Computed Regexps.    (line  30)
+* double quote ("), in shell commands:   Quoting.             (line  54)
 * double-precision:                      Computer Arithmetic. (line  61)
 * down debugger command:                 Execution Stack.     (line  23)
 * Drepper, Ulrich:                       Acknowledgments.     (line  52)
@@ -37447,41 +37411,41 @@ Index
 * elements in arrays:                    Reference to Elements.
                                                               (line   6)
 * elements in arrays, assigning values:  Assigning Elements.  (line   6)
-* elements in arrays, scanning:          Scanning an Array.   (line   6)
+* elements in arrays, deleting:          Delete.              (line   6)
 * elements in arrays, order of access by in operator: Scanning an Array.
                                                               (line  48)
-* elements in arrays, deleting:          Delete.              (line   6)
+* elements in arrays, scanning:          Scanning an Array.   (line   6)
 * email address for bug reports, <bug-gawk@gnu.org>: Bug address.
                                                               (line  52)
 * empty array elements:                  Reference to Elements.
                                                               (line  18)
 * empty pattern:                         Empty.               (line   6)
 * empty regexps:                         Regexp Operator Details.
-                                                              (line 151)
+                                                              (line 150)
 * EMRED:                                 TCP/IP Networking.   (line   6)
 * enable breakpoint:                     Breakpoint Control.  (line  73)
 * enable debugger command:               Breakpoint Control.  (line  73)
 * end debugger command:                  Debugger Execution Control.
                                                               (line  10)
-* END pattern, Boolean patterns and:     Expression Patterns. (line  70)
 * END pattern:                           BEGIN/END.           (line   6)
 * END pattern <1>:                       Using BEGIN/END.     (line   6)
-* END pattern, operators and:            Using BEGIN/END.     (line  17)
-* END pattern, print statement and:      I/O And BEGIN/END.   (line  15)
+* END pattern, @namespace directive and: Changing The Namespace.
+                                                              (line  37)
+* END pattern, assert() user-defined function and: Assert Function.
+                                                              (line  75)
+* END pattern, Boolean patterns and:     Expression Patterns. (line  70)
+* END pattern, exit statement and:       Exit Statement.      (line  12)
 * END pattern, next/nextfile statements and: I/O And BEGIN/END.
                                                               (line  36)
 * END pattern, next/nextfile statements and <1>: Next Statement.
                                                               (line  44)
-* END pattern, exit statement and:       Exit Statement.      (line  12)
-* END pattern, assert() user-defined function and: Assert Function.
-                                                              (line  75)
+* END pattern, operators and:            Using BEGIN/END.     (line  17)
+* END pattern, print statement and:      I/O And BEGIN/END.   (line  15)
 * END pattern, profiling and:            Profiling.           (line  62)
-* END pattern, @namespace directive and: Changing The Namespace.
-                                                              (line  37)
-* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line  70)
 * ENDFILE pattern:                       BEGINFILE/ENDFILE.   (line   6)
 * ENDFILE pattern, @namespace directive and: Changing The Namespace.
                                                               (line  37)
+* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line  70)
 * endfile() user-defined function:       Filetrans Function.  (line  62)
 * endgrent() function (C library):       Group Functions.     (line 211)
 * endgrent() user-defined function:      Group Functions.     (line 214)
@@ -37489,92 +37453,92 @@ Index
 * endpwent() user-defined function:      Passwd Functions.    (line 210)
 * English, Steve:                        Advanced Features.   (line   6)
 * ENVIRON array:                         Auto-set.            (line  59)
+* environment variables, AWK_HASH:       Other Environment Variables.
+                                                              (line  50)
+* environment variables, AWKBUFSIZE:     Other Environment Variables.
+                                                              (line  41)
 * environment variables, AWKLIBPATH:     Options.             (line 209)
-* environment variables, POSIXLY_CORRECT: Options.            (line 402)
-* environment variables, used by gawk:   Environment Variables.
-                                                              (line   6)
-* environment variables, AWKPATH:        AWKPATH Variable.    (line   6)
 * environment variables, AWKLIBPATH <1>: AWKLIBPATH Variable. (line   6)
+* environment variables, AWKLIBPATH <2>: Loading Shared Libraries.
+                                                              (line   8)
+* environment variables, AWKLIBPATH <3>: Invoking Summary.    (line  49)
+* environment variables, AWKLIBPATH <4>: Creating Arrays.     (line 129)
+* environment variables, AWKLIBPATH <5>: Using Internal File Ops.
+                                                              (line  44)
+* environment variables, AWKLIBPATH <6>: POSIX/GNU.           (line 108)
+* environment variables, AWKLIBPATH <7>: Distribution contents.
+                                                              (line 192)
+* environment variables, AWKLIBPATH <8>: Shell Startup Files. (line   6)
+* environment variables, AWKPATH:        AWKPATH Variable.    (line   6)
+* environment variables, AWKPATH <1>:    Include Files.       (line   8)
+* environment variables, AWKPATH <2>:    Invoking Summary.    (line  49)
+* environment variables, AWKPATH <3>:    Igawk Program.       (line  12)
+* environment variables, AWKPATH <4>:    Igawk Program.       (line 211)
+* environment variables, AWKPATH <5>:    Debugger Invocation. (line  16)
+* environment variables, AWKPATH <6>:    POSIX/GNU.           (line 105)
+* environment variables, AWKPATH <7>:    Feature History.     (line  11)
+* environment variables, AWKPATH <8>:    Distribution contents.
+                                                              (line 192)
+* environment variables, AWKPATH <9>:    Shell Startup Files. (line   6)
+* environment variables, AWKPATH <10>:   PC Using.            (line  12)
+* environment variables, AWKPATH <11>:   OpenVMS Running.     (line  50)
+* environment variables, AWKREADFUNC:    Other Environment Variables.
+                                                              (line  57)
+* environment variables, GAWK_LOCALE_DIR: Other Environment Variables.
+                                                              (line  70)
+* environment variables, GAWK_LOCALE_DIR <1>: Explaining gettext.
+                                                              (line 132)
 * environment variables, GAWK_MSEC_SLEEP: Other Environment Variables.
                                                               (line  10)
+* environment variables, GAWK_MSG_SRC:   Other Environment Variables.
+                                                              (line  63)
+* environment variables, GAWK_NO_DFA:    Other Environment Variables.
+                                                              (line  75)
 * environment variables, GAWK_PERSIST_FILE: Other Environment Variables.
                                                               (line  15)
+* environment variables, GAWK_PERSIST_FILE <1>: Persistent Memory.
+                                                              (line  50)
 * environment variables, GAWK_READ_TIMEOUT: Other Environment Variables.
                                                               (line  19)
+* environment variables, GAWK_READ_TIMEOUT <1>: Read Timeout. (line  71)
 * environment variables, GAWK_SOCK_RETRIES: Other Environment Variables.
                                                               (line  23)
-* environment variables, PMA_VERBOSITY:  Other Environment Variables.
-                                                              (line  29)
-* environment variables, POSIXLY_CORRECT <1>: Other Environment Variables.
-                                                              (line  33)
-* environment variables, AWKBUFSIZE:     Other Environment Variables.
-                                                              (line  41)
-* environment variables, AWK_HASH:       Other Environment Variables.
-                                                              (line  50)
-* environment variables, AWKREADFUNC:    Other Environment Variables.
-                                                              (line  57)
-* environment variables, GAWK_MSG_SRC:   Other Environment Variables.
-                                                              (line  63)
-* environment variables, GAWK_LOCALE_DIR: Other Environment Variables.
-                                                              (line  70)
-* environment variables, GAWK_NO_DFA:    Other Environment Variables.
-                                                              (line  75)
+* environment variables, GAWK_SOCK_RETRIES <1>: Nonfatal.     (line  53)
 * environment variables, GAWK_STACKSIZE: Other Environment Variables.
                                                               (line  83)
+* environment variables, in ENVIRON array: Auto-set.          (line  59)
 * environment variables, INT_CHAIN_MAX:  Other Environment Variables.
                                                               (line  87)
-* environment variables, STR_CHAIN_MAX:  Other Environment Variables.
-                                                              (line  91)
-* environment variables, TIDYMEM:        Other Environment Variables.
-                                                              (line  95)
-* environment variables, AWKPATH <1>:    Include Files.       (line   8)
-* environment variables, AWKLIBPATH <2>: Loading Shared Libraries.
-                                                              (line   8)
-* environment variables, AWKPATH <2>:    Invoking Summary.    (line  49)
-* environment variables, AWKLIBPATH <3>: Invoking Summary.    (line  49)
-* environment variables, POSIXLY_CORRECT <2>: Invoking Summary.
-                                                              (line  49)
-* environment variables, GAWK_READ_TIMEOUT <1>: Read Timeout. (line  71)
-* environment variables, GAWK_SOCK_RETRIES <1>: Nonfatal.     (line  53)
-* environment variables, POSIXLY_CORRECT <3>: Locale influences conversions.
-                                                              (line  41)
-* environment variables, in ENVIRON array: Auto-set.          (line  59)
-* environment variables, TZ:             Auto-set.            (line  76)
-* environment variables, LC_ALL:         Split Program.       (line  39)
-* environment variables, AWKPATH <3>:    Igawk Program.       (line  12)
-* environment variables, AWKPATH <4>:    Igawk Program.       (line 211)
-* environment variables, REALLY_USE_PERSIST_MALLOC: Persistent Memory.
-                                                              (line  29)
-* environment variables, GAWK_PERSIST_FILE <1>: Persistent Memory.
-                                                              (line  50)
-* environment variables, PMA_VERBOSITY <1>: Persistent Memory.
-                                                              (line  94)
+* environment variables, LANG:           I18N Example.        (line  68)
 * environment variables, LANGUAGE:       Explaining gettext.  (line 120)
-* environment variables, GAWK_LOCALE_DIR <1>: Explaining gettext.
-                                                              (line 132)
 * environment variables, LANGUAGE <1>:   I18N Example.        (line  68)
+* environment variables, LC_ALL:         Split Program.       (line  39)
 * environment variables, LC_ALL <1>:     I18N Example.        (line  68)
-* environment variables, LANG:           I18N Example.        (line  68)
+* environment variables, LC_ALL <2>:     Bug address.         (line  18)
 * environment variables, LC_MESSAGES:    I18N Example.        (line  68)
-* environment variables, AWKPATH <5>:    Debugger Invocation. (line  16)
-* environment variables, AWKLIBPATH <4>: Creating Arrays.     (line 129)
-* environment variables, AWKLIBPATH <5>: Using Internal File Ops.
-                                                              (line  44)
-* environment variables, AWKPATH <6>:    POSIX/GNU.           (line 105)
-* environment variables, AWKLIBPATH <6>: POSIX/GNU.           (line 108)
-* environment variables, AWKPATH <7>:    Feature History.     (line  11)
-* environment variables, AWKPATH <8>:    Distribution contents.
-                                                              (line 192)
-* environment variables, AWKLIBPATH <7>: Distribution contents.
-                                                              (line 192)
-* environment variables, AWKPATH <9>:    Shell Startup Files. (line   6)
-* environment variables, AWKLIBPATH <8>: Shell Startup Files. (line   6)
 * environment variables, Path:           PC Binary Installation.
                                                               (line   6)
-* environment variables, AWKPATH <10>:   PC Using.            (line  12)
-* environment variables, AWKPATH <11>:   OpenVMS Running.     (line  50)
-* environment variables, LC_ALL <2>:     Bug address.         (line  18)
 * environment variables, PATH:           Derived Files.       (line  94)
+* environment variables, PMA_VERBOSITY:  Other Environment Variables.
+                                                              (line  29)
+* environment variables, PMA_VERBOSITY <1>: Persistent Memory.
+                                                              (line  94)
+* environment variables, POSIXLY_CORRECT: Options.            (line 402)
+* environment variables, POSIXLY_CORRECT <1>: Other Environment Variables.
+                                                              (line  33)
+* environment variables, POSIXLY_CORRECT <2>: Invoking Summary.
+                                                              (line  49)
+* environment variables, POSIXLY_CORRECT <3>: Locale influences conversions.
+                                                              (line  41)
+* environment variables, REALLY_USE_PERSIST_MALLOC: Persistent Memory.
+                                                              (line  29)
+* environment variables, STR_CHAIN_MAX:  Other Environment Variables.
+                                                              (line  91)
+* environment variables, TIDYMEM:        Other Environment Variables.
+                                                              (line  95)
+* environment variables, TZ:             Auto-set.            (line  76)
+* environment variables, used by gawk:   Environment Variables.
+                                                              (line   6)
 * environment, definition of:            Glossary.            (line 304)
 * epoch, definition of:                  Glossary.            (line 310)
 * equals sign (=), = operator:           Assignment Ops.      (line   6)
@@ -37582,11 +37546,11 @@ Index
                                                               (line  11)
 * equals sign (=), == operator <1>:      Precedence.          (line  64)
 * EREs (Extended Regular Expressions):   Bracket Expressions. (line  34)
-* ERRNO variable, with getline command:  Getline.             (line  19)
-* ERRNO variable, with close() function: Close Return Value.  (line  14)
-* ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE.  (line  32)
 * ERRNO variable:                        Auto-set.            (line  87)
 * ERRNO variable <1>:                    TCP/IP Networking.   (line  54)
+* ERRNO variable, with BEGINFILE pattern: BEGINFILE/ENDFILE.  (line  32)
+* ERRNO variable, with close() function: Close Return Value.  (line  14)
+* ERRNO variable, with getline command:  Getline.             (line  19)
 * error handling:                        Special FD.          (line  19)
 * error handling, ERRNO variable and:    Auto-set.            (line  87)
 * error output:                          Special FD.          (line   6)
@@ -37597,29 +37561,29 @@ Index
                                                               (line  23)
 * evaluate expressions, in debugger:     Viewing And Changing Data.
                                                               (line  23)
+* evaluation order:                      Increment Ops.       (line  59)
 * evaluation order, concatenation:       Concatenation.       (line  41)
-* evaluation order:                      Increment Ops.       (line  60)
 * evaluation order, functions:           Calling Built-in.    (line  30)
 * examining fields:                      Fields.              (line   6)
 * example debugging session:             Sample Debugging Session.
                                                               (line   6)
+* exclamation point (!), ! operator:     Boolean Ops.         (line  69)
+* exclamation point (!), ! operator <1>: Precedence.          (line  51)
+* exclamation point (!), ! operator <2>: Egrep Program.       (line 204)
+* exclamation point (!), != operator:    Comparison Operators.
+                                                              (line  11)
+* exclamation point (!), != operator <1>: Precedence.         (line  64)
 * exclamation point (!), !~ operator:    Regexp Usage.        (line  19)
 * exclamation point (!), !~ operator <1>: Computed Regexps.   (line   6)
 * exclamation point (!), !~ operator <2>: Case-sensitivity.   (line  26)
 * exclamation point (!), !~ operator <3>: Regexp Constants.   (line   6)
-* exclamation point (!), != operator:    Comparison Operators.
-                                                              (line  11)
 * exclamation point (!), !~ operator <4>: Comparison Operators.
                                                               (line  11)
 * exclamation point (!), !~ operator <5>: Comparison Operators.
-                                                              (line  99)
-* exclamation point (!), ! operator:     Boolean Ops.         (line  69)
-* exclamation point (!), ! operator <1>: Precedence.          (line  51)
-* exclamation point (!), != operator <1>: Precedence.         (line  64)
+                                                              (line  98)
 * exclamation point (!), !~ operator <6>: Precedence.         (line  79)
 * exclamation point (!), !~ operator <7>: Expression Patterns.
                                                               (line  24)
-* exclamation point (!), ! operator <2>: Egrep Program.       (line 204)
 * exit debugger command:                 Miscellaneous Debugger Commands.
                                                               (line  64)
 * exit statement:                        Exit Statement.      (line   6)
@@ -37634,56 +37598,56 @@ Index
 * Expat XML parser library:              gawkextlib.          (line  40)
 * exponent:                              Numeric Functions.   (line  18)
 * expressions:                           Expressions.         (line   6)
+* expressions, as patterns:              Expression Patterns. (line   6)
 * expressions, assignment:               Assignment Ops.      (line   6)
+* expressions, Boolean:                  Boolean Ops.         (line   6)
 * expressions, comparison:               Typing and Comparison.
                                                               (line   9)
-* expressions, Boolean:                  Boolean Ops.         (line   6)
 * expressions, conditional:              Conditional Exp.     (line   6)
 * expressions, selecting:                Conditional Exp.     (line   6)
-* expressions, as patterns:              Expression Patterns. (line   6)
 * Extended Regular Expressions (EREs):   Bracket Expressions. (line  34)
-* extension API, version number:         Auto-set.            (line 287)
-* extension API, interaction with namespaces: Namespace And Features.
-                                                              (line  22)
 * extension API:                         Extension API Description.
                                                               (line   6)
-* extension API, version number <1>:     Extension Versioning.
-                                                              (line   6)
 * extension API, informational variables: Extension API Informational 
Variables.
                                                               (line   6)
-* extensions, loadable, loading, @load directive: Loading Shared Libraries.
-                                                              (line   8)
-* extensions, common, \x escape sequence: Escape Sequences.   (line  61)
-* extensions, common, \u escape sequence: Escape Sequences.   (line  76)
-* extensions, common, RS as a regexp:    gawk split records.  (line   6)
-* extensions, common, single character fields: Single Character Fields.
+* extension API, interaction with namespaces: Namespace And Features.
+                                                              (line  22)
+* extension API, version number:         Auto-set.            (line 287)
+* extension API, version number <1>:     Extension Versioning.
                                                               (line   6)
+* extensions, Brian Kernighan's awk:     BTL.                 (line   6)
+* extensions, Brian Kernighan's awk <1>: Common Extensions.   (line   6)
+* extensions, common, ** operator:       Arithmetic Ops.      (line  30)
+* extensions, common, **= operator:      Assignment Ops.      (line 138)
+* extensions, common, /dev/stderr special file: Special FD.   (line  48)
 * extensions, common, /dev/stdin special file: Special FD.    (line  48)
 * extensions, common, /dev/stdout special file: Special FD.   (line  48)
-* extensions, common, /dev/stderr special file: Special FD.   (line  48)
-* extensions, common, ** operator:       Arithmetic Ops.      (line  30)
-* extensions, common, **= operator:      Assignment Ops.      (line 139)
+* extensions, common, \u escape sequence: Escape Sequences.   (line  76)
+* extensions, common, \x escape sequence: Escape Sequences.   (line  61)
+* extensions, common, BINMODE variable:  PC Using.            (line  18)
 * extensions, common, delete to delete entire arrays: Delete. (line  39)
-* extensions, common, length() applied to an array: String Functions.
-                                                              (line 219)
 * extensions, common, fflush() function: I/O Functions.       (line  43)
 * extensions, common, func keyword:      Definition Syntax.   (line  99)
-* extensions, loadable, allocating memory: Memory Allocation Functions.
+* extensions, common, length() applied to an array: String Functions.
+                                                              (line 219)
+* extensions, common, RS as a regexp:    gawk split records.  (line   6)
+* extensions, common, single character fields: Single Character Fields.
                                                               (line   6)
-* extensions, loadable, registration:    Registration Functions.
+* extensions, in gawk, not in POSIX awk: POSIX/GNU.           (line   6)
+* extensions, loadable, allocating memory: Memory Allocation Functions.
                                                               (line   6)
 * extensions, loadable, array manipulation in: Array Manipulation.
                                                               (line   6)
-* extensions, loadable, search path:     Finding Extensions.  (line   6)
-* extensions, loadable, example:         Extension Example.   (line   6)
 * extensions, loadable, distributed with gawk: Extension Samples.
                                                               (line   6)
+* extensions, loadable, example:         Extension Example.   (line   6)
 * extensions, loadable, gawkextlib project: gawkextlib.       (line   6)
-* extensions, Brian Kernighan’s awk:     BTL.                 (line   6)
-* extensions, in gawk, not in POSIX awk: POSIX/GNU.           (line   6)
-* extensions, Brian Kernighan’s awk <1>: Common Extensions.   (line   6)
+* extensions, loadable, loading, @load directive: Loading Shared Libraries.
+                                                              (line   8)
+* extensions, loadable, registration:    Registration Functions.
+                                                              (line   6)
+* extensions, loadable, search path:     Finding Extensions.  (line   6)
 * extensions, mawk:                      Common Extensions.   (line   6)
-* extensions, common, BINMODE variable:  PC Using.            (line  18)
 * extract.awk program:                   Extract Program.     (line  79)
 * extraction, of marked strings (internationalization): String Extraction.
                                                               (line   6)
@@ -37691,9 +37655,9 @@ Index
 * false, logical:                        Truth Values.        (line   6)
 * FDL (Free Documentation License):      GNU Free Documentation License.
                                                               (line   8)
+* features, adding to gawk:              Adding Code.         (line   6)
 * features, deprecated:                  Obsolete.            (line   6)
 * features, undocumented:                Undocumented.        (line   6)
-* features, adding to gawk:              Adding Code.         (line   6)
 * Fenlason, Jay:                         History.             (line  34)
 * Fenlason, Jay <1>:                     Contributors.        (line  19)
 * fflush:                                I/O Functions.       (line  28)
@@ -37701,101 +37665,101 @@ Index
 * field operator $:                      Fields.              (line  19)
 * field operators, dollar sign as:       Fields.              (line  19)
 * field separator:                       Field Separators.    (line  16)
+* field separator <1>:                   User-modified.       (line  53)
+* field separator <2>:                   User-modified.       (line 116)
+* field separator, backslash (\) as:     Command Line Field Separator.
+                                                              (line  24)
 * field separator, choice of:            Field Separators.    (line  51)
-* field separator, regular expression as: Field Separators.   (line  51)
-* field separator, whitespace as:        Default Field Splitting.
-                                                              (line   6)
+* field separator, FIELDWIDTHS variable and: User-modified.   (line  37)
+* field separator, FPAT variable and:    User-modified.       (line  46)
 * field separator, FS variable and:      Default Field Splitting.
                                                               (line   6)
-* field separator, regular expression as <1>: Regexp Field Splitting.
-                                                              (line   6)
+* field separator, in multiline records: Multiple Line.       (line  41)
 * field separator, on command line:      Command Line Field Separator.
                                                               (line   6)
-* field separator, backslash (\) as:     Command Line Field Separator.
-                                                              (line  24)
 * field separator, POSIX and:            Full Line Fields.    (line  16)
-* field separator, in multiline records: Multiple Line.       (line  41)
-* field separator, FIELDWIDTHS variable and: User-modified.   (line  37)
-* field separator, FPAT variable and:    User-modified.       (line  46)
-* field separator <1>:                   User-modified.       (line  53)
-* field separator <2>:                   User-modified.       (line 116)
+* field separator, regular expression as: Field Separators.   (line  51)
+* field separator, regular expression as <1>: Regexp Field Splitting.
+                                                              (line   6)
 * field separator, spaces as:            Cut Program.         (line 107)
+* field separator, whitespace as:        Default Field Splitting.
+                                                              (line   6)
 * fields:                                Reading Files.       (line  14)
 * fields <1>:                            Fields.              (line   6)
+* fields <2>:                            Basic High Level.    (line  75)
+* fields, adding:                        Changing Fields.     (line  53)
+* fields, changing contents of:          Changing Fields.     (line   6)
+* fields, cutting:                       Cut Program.         (line   6)
 * fields, examining:                     Fields.              (line   6)
 * fields, number of:                     Fields.              (line  33)
 * fields, numbers:                       Nonconstant Fields.  (line   6)
-* fields, changing contents of:          Changing Fields.     (line   6)
-* fields, adding:                        Changing Fields.     (line  53)
+* fields, printing:                      Print Examples.      (line  20)
 * fields, separating:                    Field Separators.    (line  16)
 * fields, separating <1>:                Field Separators.    (line  16)
 * fields, single-character:              Single Character Fields.
                                                               (line   6)
-* fields, printing:                      Print Examples.      (line  20)
-* fields, cutting:                       Cut Program.         (line   6)
-* fields <2>:                            Basic High Level.    (line  64)
 * FIELDWIDTHS variable:                  Fixed width data.    (line  17)
 * FIELDWIDTHS variable <1>:              User-modified.       (line  37)
 * file descriptors:                      Special FD.          (line   6)
 * file inclusion, @include directive:    Include Files.       (line   8)
-* file names, standard streams in gawk:  Special FD.          (line  48)
-* file names, in compatibility mode:     Special Caveats.     (line   9)
-* file names, distinguishing:            Auto-set.            (line  55)
 * file names, assignments as:            Ignoring Assigns.    (line   6)
+* file names, distinguishing:            Auto-set.            (line  55)
+* file names, in compatibility mode:     Special Caveats.     (line   9)
+* file names, standard streams in gawk:  Special FD.          (line  48)
 * FILENAME variable:                     Reading Files.       (line   6)
-* FILENAME variable, getline, setting with: Getline Notes.    (line  19)
 * FILENAME variable <1>:                 Auto-set.            (line 108)
-* files, input:                          Read Terminal.       (line  16)
+* FILENAME variable, getline, setting with: Getline Notes.    (line  19)
+* files, .gmo:                           Explaining gettext.  (line  42)
+* files, .gmo, specifying directory of:  Explaining gettext.  (line  54)
+* files, .gmo, specifying directory of <1>: Programmer i18n.  (line  48)
+* files, .mo, converting from .po:       I18N Example.        (line  80)
+* files, .po:                            Explaining gettext.  (line  37)
+* files, .po <1>:                        Translator i18n.     (line   6)
+* files, .po, converting to .mo:         I18N Example.        (line  80)
+* files, .pot:                           Explaining gettext.  (line  31)
+* files, /dev/... special files:         Special FD.          (line  48)
+* 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, awk programs in:                Long.                (line   6)
+* files, awkprof.out:                    Profiling.           (line   6)
 * files, awkvars.out:                    Options.             (line  97)
-* files, portable object, generating:    Options.             (line 168)
-* files, multiple passes over:           Other Arguments.     (line  64)
-* files, reading, multiline records:     Multiple Line.       (line   6)
-* files, descriptors:                    Special FD.          (line   6)
-* files, /dev/... special files:         Special FD.          (line  48)
-* files, output:                         Close Files And Pipes.
-                                                              (line   6)
-* files, processing, ARGIND variable and: Auto-set.           (line  50)
 * files, closing:                        I/O Functions.       (line  10)
+* files, descriptors:                    Special FD.          (line   6)
+* files, group:                          Group Functions.     (line   6)
+* files, initialization and cleanup:     Filetrans Function.  (line   6)
+* files, input:                          Read Terminal.       (line  16)
 * files, log, timestamps in:             Time Functions.      (line   6)
 * files, managing:                       Data File Management.
                                                               (line   6)
 * files, managing, data file boundaries: Filetrans Function.  (line   6)
-* files, initialization and cleanup:     Filetrans Function.  (line   6)
-* files, reading:                        Rewind Function.     (line   6)
-* files, skipping:                       File Checking.       (line   6)
-* files, password:                       Passwd Functions.    (line  16)
-* files, group:                          Group Functions.     (line   6)
-* files, searching for regular expressions: Egrep Program.    (line   6)
-* files, splitting:                      Split Program.       (line   6)
-* files, multiple, duplicating output into: Tee Program.      (line   6)
-* files, Texinfo, extracting programs from: Extract Program.  (line   6)
-* files, source, search path for:        Programs Exercises.  (line  70)
-* 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, awkprof.out:                    Profiling.           (line   6)
-* files, .pot:                           Explaining gettext.  (line  31)
-* files, portable object, template file (.pot): Explaining gettext.
-                                                              (line  31)
-* files, .po:                            Explaining gettext.  (line  37)
-* files, portable object:                Explaining gettext.  (line  37)
-* files, .gmo:                           Explaining gettext.  (line  42)
 * files, message object:                 Explaining gettext.  (line  42)
-* files, .gmo, specifying directory of:  Explaining gettext.  (line  54)
+* files, message object, converting from portable object files: I18N Example.
+                                                              (line  80)
 * files, message object, specifying directory of: Explaining gettext.
                                                               (line  54)
-* files, .gmo, specifying directory of <1>: Programmer i18n.  (line  48)
 * files, message object, specifying directory of <1>: Programmer i18n.
                                                               (line  48)
-* files, .po <1>:                        Translator i18n.     (line   6)
+* files, multiple passes over:           Other Arguments.     (line  64)
+* files, multiple, duplicating output into: Tee Program.      (line   6)
+* files, output:                         Close Files And Pipes.
+                                                              (line   6)
+* files, password:                       Passwd Functions.    (line  16)
+* files, portable object:                Explaining gettext.  (line  37)
 * files, portable object <1>:            Translator i18n.     (line   6)
-* files, .po, converting to .mo:         I18N Example.        (line  80)
-* files, .mo, converting from .po:       I18N Example.        (line  80)
 * files, portable object, converting to message object files: I18N Example.
                                                               (line  80)
-* files, message object, converting from portable object files: I18N Example.
-                                                              (line  80)
+* files, portable object, generating:    Options.             (line 168)
+* files, portable object, template file (.pot): Explaining gettext.
+                                                              (line  31)
+* files, processing, ARGIND variable and: Auto-set.           (line  50)
+* files, reading:                        Rewind Function.     (line   6)
+* files, reading, multiline records:     Multiple Line.       (line   6)
+* files, searching for regular expressions: Egrep Program.    (line   6)
+* files, skipping:                       File Checking.       (line   6)
+* files, source, search path for:        Programs Exercises.  (line  70)
+* files, splitting:                      Split Program.       (line   6)
+* files, Texinfo, extracting programs from: Extract Program.  (line   6)
 * find substring in string:              String Functions.    (line 174)
 * finding extensions:                    Finding Extensions.  (line   6)
 * finish debugger command:               Debugger Execution Control.
@@ -37804,42 +37768,42 @@ Index
 * fixed-width data:                      Constant Size.       (line   6)
 * flag variables:                        Boolean Ops.         (line  69)
 * flag variables <1>:                    Tee Program.         (line  20)
+* floating-point, numbers:               Computer Arithmetic. (line  49)
 * floating-point, numbers, arbitrary-precision: Arbitrary Precision Arithmetic.
                                                               (line   6)
-* floating-point, numbers:               Computer Arithmetic. (line  49)
-* floating-point, numbers, single-precision: Computer Arithmetic.
+* floating-point, numbers, arbitrary-precision <1>: Computer Arithmetic.
                                                               (line  61)
 * floating-point, numbers, double-precision: Computer Arithmetic.
                                                               (line  61)
-* floating-point, numbers, arbitrary-precision <1>: Computer Arithmetic.
+* floating-point, numbers, single-precision: Computer Arithmetic.
                                                               (line  61)
 * flush buffered output:                 I/O Functions.       (line  28)
 * fnmatch() extension function:          Extension Sample Fnmatch.
                                                               (line  12)
 * FNR variable:                          Records.             (line   6)
 * FNR variable <1>:                      Auto-set.            (line 118)
-* FNR variable, changing:                Auto-set.            (line 416)
+* FNR variable, changing:                Auto-set.            (line 415)
 * for statement:                         For Statement.       (line   6)
 * for statement, looping over arrays:    Scanning an Array.   (line  20)
 * fork() extension function:             Extension Sample Fork.
                                                               (line  11)
 * format specifiers:                     Basic Printf.        (line  15)
+* format specifiers, mixing regular with positional specifiers: Printf 
Ordering.
+                                                              (line  57)
 * format specifiers, printf statement:   Control Letters.     (line   6)
 * format specifiers, strftime() function (gawk): Time Functions.
                                                               (line  90)
-* format specifiers, mixing regular with positional specifiers: Printf 
Ordering.
-                                                              (line  57)
 * format time string:                    Time Functions.      (line  50)
 * formats, numeric output:               OFMT.                (line   6)
 * formatting, output:                    Printf.              (line   6)
 * formatting, strings:                   String Functions.    (line 413)
-* forward slash (/), to enclose regular expressions: Regexp.  (line  10)
-* forward slash (/), /= operator:        Assignment Ops.      (line 129)
-* forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 150)
 * forward slash (/), / operator:         Precedence.          (line  54)
+* forward slash (/), /= operator:        Assignment Ops.      (line 129)
 * forward slash (/), /= operator <1>:    Precedence.          (line  94)
+* forward slash (/), /= operator, vs. /=.../ regexp constant: Assignment Ops.
+                                                              (line 148)
 * forward slash (/), patterns and:       Expression Patterns. (line  24)
+* forward slash (/), to enclose regular expressions: Regexp.  (line  10)
 * FPAT variable:                         Splitting By Content.
                                                               (line  33)
 * FPAT variable <1>:                     User-modified.       (line  46)
@@ -37852,19 +37816,19 @@ Index
 * Free Software Foundation (FSF) <2>:    Glossary.            (line 370)
 * Free Software Foundation (FSF) <3>:    Glossary.            (line 403)
 * FreeBSD:                               Glossary.            (line 747)
-* FS variable, --field-separator option and: Options.         (line  21)
-* FS variable, TAB character as:         Options.             (line 317)
 * FS variable:                           Field Separators.    (line  16)
+* FS variable <1>:                       User-modified.       (line  53)
+* FS variable, --field-separator option and: Options.         (line  21)
 * FS variable, changing value of:        Field Separators.    (line  35)
 * FS variable, containing ^:             Regexp Field Splitting.
                                                               (line  58)
+* FS variable, in multiline records:     Multiple Line.       (line  41)
 * FS variable, null string as:           Single Character Fields.
                                                               (line  20)
+* FS variable, running awk programs and: Cut Program.         (line  67)
 * FS variable, setting from command line: Command Line Field Separator.
                                                               (line   6)
-* FS variable, in multiline records:     Multiple Line.       (line  41)
-* FS variable <1>:                       User-modified.       (line  53)
-* FS variable, running awk programs and: Cut Program.         (line  67)
+* FS variable, TAB character as:         Options.             (line 317)
 * FSF (Free Software Foundation):        Manual History.      (line   6)
 * FSF (Free Software Foundation) <1>:    Getting.             (line  10)
 * FSF (Free Software Foundation) <2>:    Glossary.            (line 370)
@@ -37879,155 +37843,147 @@ Index
 * function definition example:           Function Example.    (line   6)
 * function definitions, list in debugger: Debugger Info.      (line  30)
 * function pointers:                     Indirect Calls.      (line   6)
-* functions, built-in:                   Function Calls.      (line  10)
-* functions, user-defined, next/nextfile statements and: Next Statement.
+* functions, arrays as parameters to:    Pass By Value/Reference.
                                                               (line  44)
-* functions, user-defined, next/nextfile statements and <1>: Nextfile 
Statement.
-                                                              (line  47)
+* functions, built-in:                   Function Calls.      (line  10)
 * functions, built-in <1>:               Functions.           (line   6)
 * functions, built-in, evaluation order: Calling Built-in.    (line  30)
-* functions, string-translation:         I18N Functions.      (line   6)
-* functions, user-defined:               User-defined.        (line   6)
 * functions, defining:                   Definition Syntax.   (line  10)
-* functions, names of:                   Definition Syntax.   (line  24)
-* functions, recursive:                  Definition Syntax.   (line  89)
-* functions, user-defined, calling:      Function Calling.    (line   6)
-* functions, arrays as parameters to:    Pass By Value/Reference.
-                                                              (line  44)
-* functions, undefined:                  Function Caveats.    (line   6)
 * functions, library:                    Library Functions.   (line   6)
-* functions, user-defined, library of:   Library Functions.   (line   6)
-* functions, library, associative arrays and: Library Names.  (line  58)
 * functions, library, assertions:        Assert Function.     (line   6)
-* functions, library, rounding numbers:  Round Function.      (line   6)
-* functions, library, Cliff random numbers: Cliff Random Function.
-                                                              (line   6)
+* functions, library, associative arrays and: Library Names.  (line  58)
+* functions, library, C library:         Getopt Function.     (line   6)
 * functions, library, character values as numbers: Ordinal Functions.
                                                               (line   6)
-* functions, library, merging arrays into strings: Join Function.
+* functions, library, Cliff random numbers: Cliff Random Function.
                                                               (line   6)
-* functions, library, managing time:     Getlocaltime Function.
+* functions, library, command-line options: Getopt Function.  (line   6)
+* functions, library, example program for using: Igawk Program.
+                                                              (line   6)
+* functions, library, group database, reading: Group Functions.
                                                               (line   6)
 * functions, library, managing data files: Data File Management.
                                                               (line   6)
-* functions, library, command-line options: Getopt Function.  (line   6)
-* functions, library, C library:         Getopt Function.     (line   6)
-* functions, library, user database, reading: Passwd Functions.
+* functions, library, managing time:     Getlocaltime Function.
                                                               (line   6)
-* functions, library, group database, reading: Group Functions.
+* functions, library, merging arrays into strings: Join Function.
                                                               (line   6)
-* functions, library, example program for using: Igawk Program.
+* functions, library, rounding numbers:  Round Function.      (line   6)
+* functions, library, user database, reading: Passwd Functions.
                                                               (line   6)
+* functions, names of:                   Definition Syntax.   (line  24)
+* functions, recursive:                  Definition Syntax.   (line  89)
+* functions, string-translation:         I18N Functions.      (line   6)
+* functions, undefined:                  Function Caveats.    (line   6)
+* functions, user-defined:               User-defined.        (line   6)
+* functions, user-defined, calling:      Function Calling.    (line   6)
 * functions, user-defined, counts, in a profile: Profiling.   (line 137)
+* functions, user-defined, library of:   Library Functions.   (line   6)
+* functions, user-defined, next/nextfile statements and: Next Statement.
+                                                              (line  44)
+* functions, user-defined, next/nextfile statements and <1>: Nextfile 
Statement.
+                                                              (line  47)
 * G-d:                                   Acknowledgments.     (line  94)
 * G., Daniel Richard:                    Acknowledgments.     (line  60)
 * G., Daniel Richard <1>:                Maintainers.         (line  14)
 * Garfinkle, Scott:                      Contributors.        (line  35)
 * gawk:                                  Preface.             (line  13)
+* gawk, ARGIND variable in:              Other Arguments.     (line  21)
 * gawk, awk and:                         Preface.             (line  21)
-* gawk, uses for:                        Preface.             (line  34)
 * gawk, awk and <1>:                     This Manual.         (line  14)
-* gawk, newlines in:                     Statements/Lines.    (line  12)
-* gawk, extensions, disabling:           Options.             (line 308)
-* gawk, version of, printing information about: Options.      (line 355)
-* gawk, ARGIND variable in:              Other Arguments.     (line  21)
-* gawk, PROCINFO array in:               Other Arguments.     (line  21)
-* gawk, escape sequences:                Escape Sequences.    (line 136)
-* gawk, escape sequences <1>:            Escape Sequences.    (line 136)
-* gawk, regular expressions, precedence: Regexp Operator Details.
-                                                              (line 142)
-* gawk, interval expressions and:        Interval Expressions.
-                                                              (line  10)
-* gawk, character classes and:           Bracket Expressions. (line 113)
-* gawk, regular expressions, operators:  GNU Regexp Operators.
-                                                              (line   6)
-* gawk, word-boundary operator:          GNU Regexp Operators.
-                                                              (line  65)
+* gawk, bitwise operations in:           Bitwise Functions.   (line  40)
+* gawk, break statement in:              Break Statement.     (line  51)
+* gawk, character classes and:           Bracket Expressions. (line 112)
+* gawk, coding style in:                 Adding Code.         (line  42)
 * gawk, command-line options, regular expressions and: GNU Regexp Operators.
                                                               (line  72)
-* gawk, regular expressions, case sensitivity: Case-sensitivity.
-                                                              (line  26)
-* gawk, IGNORECASE variable in:          Case-sensitivity.    (line  26)
-* gawk, RT variable in:                  awk split records.   (line 118)
-* gawk, RT variable in <1>:              gawk split records.  (line  66)
-* gawk, FIELDWIDTHS variable in:         Fixed width data.    (line  17)
-* gawk, FPAT variable in:                Splitting By Content.
-                                                              (line  33)
-* gawk, splitting fields and:            Testing field creation.
+* gawk, configuring:                     Configuration Philosophy.
                                                               (line   6)
-* gawk, RT variable in <2>:              Multiple Line.       (line 138)
+* gawk, configuring, options:            Additional Configuration Options.
+                                                              (line   6)
+* gawk, continue statement in:           Continue Statement.  (line  44)
+* gawk, distribution:                    Distribution contents.
+                                                              (line   6)
+* gawk, dynamic profiling:               Profiling.           (line 185)
 * gawk, ERRNO variable in:               Getline.             (line  19)
-* gawk, implementation issues, limits:   Getline Notes.       (line  14)
-* gawk, format-control characters:       Control Letters.     (line  33)
-* gawk, format-control characters <1>:   Control Letters.     (line 108)
-* gawk, implementation issues, pipes:    Redirection.         (line 129)
-* gawk, file names in:                   Special Files.       (line   6)
 * gawk, ERRNO variable in <1>:           Close Return Value.  (line  14)
-* gawk, octal numbers and:               Nondecimal-numbers.  (line  41)
-* gawk, hexadecimal numbers and:         Nondecimal-numbers.  (line  41)
-* gawk, regexp constants and:            Standard Regexp Constants.
-                                                              (line  28)
-* gawk, line continuation in:            Conditional Exp.     (line  34)
 * gawk, ERRNO variable in <2>:           BEGINFILE/ENDFILE.   (line  32)
-* gawk, break statement in:              Break Statement.     (line  51)
-* gawk, continue statement in:           Continue Statement.  (line  44)
-* gawk, predefined variables and:        Built-in Variables.  (line  14)
+* gawk, ERRNO variable in <3>:           Auto-set.            (line  87)
+* gawk, ERRNO variable in <4>:           TCP/IP Networking.   (line  54)
+* gawk, escape sequences:                Escape Sequences.    (line 136)
+* gawk, escape sequences <1>:            Escape Sequences.    (line 136)
+* gawk, extensions, disabling:           Options.             (line 308)
+* gawk, features, adding:                Adding Code.         (line   6)
+* gawk, features, advanced:              Advanced Features.   (line   6)
+* gawk, field separators and:            User-modified.       (line  74)
+* gawk, FIELDWIDTHS variable in:         Fixed width data.    (line  17)
 * gawk, FIELDWIDTHS variable in <1>:     User-modified.       (line  37)
+* gawk, file names in:                   Special Files.       (line   6)
+* gawk, format-control characters:       Control Letters.     (line  33)
+* gawk, format-control characters <1>:   Control Letters.     (line 108)
+* gawk, FPAT variable in:                Splitting By Content.
+                                                              (line  33)
 * gawk, FPAT variable in <1>:            User-modified.       (line  46)
-* gawk, field separators and:            User-modified.       (line  74)
-* gawk, IGNORECASE variable in <1>:      User-modified.       (line  79)
-* gawk, LINT variable in:                User-modified.       (line  90)
-* gawk, TEXTDOMAIN variable in:          User-modified.       (line 154)
-* gawk, ERRNO variable in <3>:           Auto-set.            (line  87)
 * gawk, FUNCTAB array in:                Auto-set.            (line 134)
-* gawk, PROCINFO array in <1>:           Auto-set.            (line 148)
-* gawk, version of:                      Auto-set.            (line 262)
-* gawk, RT variable in <3>:              Auto-set.            (line 355)
-* gawk, SYMTAB array in:                 Auto-set.            (line 359)
-* gawk, IGNORECASE variable in <2>:      Array Intro.         (line 100)
 * gawk, function arguments and:          Calling Built-in.    (line  16)
+* gawk, hexadecimal numbers and:         Nondecimal-numbers.  (line  41)
+* gawk, IGNORECASE variable in:          Case-sensitivity.    (line  26)
+* gawk, IGNORECASE variable in <1>:      User-modified.       (line  79)
+* gawk, IGNORECASE variable in <2>:      Array Intro.         (line 102)
 * gawk, IGNORECASE variable in <3>:      String Functions.    (line  57)
-* gawk, timestamps:                      Time Functions.      (line   6)
-* gawk, PROCINFO array in <2>:           Time Functions.      (line  49)
-* gawk, bitwise operations in:           Bitwise Functions.   (line  41)
-* gawk, string-translation functions:    I18N Functions.      (line   6)
-* gawk, features, advanced:              Advanced Features.   (line   6)
 * gawk, IGNORECASE variable in <4>:      Array Sorting Functions.
                                                               (line  88)
-* gawk, PROCINFO array in <3>:           Two-way I/O.         (line 114)
-* gawk, ERRNO variable in <4>:           TCP/IP Networking.   (line  54)
-* gawk, dynamic profiling:               Profiling.           (line 185)
-* gawk, profiling programs:              Profiling.           (line 185)
+* gawk, implementation issues:           Notes.               (line   6)
+* gawk, implementation issues, debugging: Compatibility Mode. (line   6)
+* gawk, implementation issues, downward compatibility: Compatibility Mode.
+                                                              (line   6)
+* gawk, implementation issues, limits:   Getline Notes.       (line  14)
+* gawk, implementation issues, pipes:    Redirection.         (line 129)
+* gawk, installing:                      Installation.        (line   6)
 * gawk, internationalization:            Internationalization.
                                                               (line  19)
 * gawk, interpreter, adding code to:     Using Internal File Ops.
                                                               (line   6)
+* gawk, interval expressions and:        Interval Expressions.
+                                                              (line  10)
+* gawk, line continuation in:            Conditional Exp.     (line  34)
+* gawk, LINT variable in:                User-modified.       (line  90)
 * gawk, list of contributors to:         Contributors.        (line   6)
-* gawk, installing:                      Installation.        (line   6)
-* gawk, source code, obtaining:          Getting.             (line   6)
-* gawk, distribution:                    Distribution contents.
-                                                              (line   6)
-* gawk, configuring, options:            Additional Configuration Options.
-                                                              (line   6)
-* gawk, configuring:                     Configuration Philosophy.
-                                                              (line   6)
 * gawk, MS-Windows version of:           PC Using.            (line  12)
+* gawk, newlines in:                     Statements/Lines.    (line  12)
+* gawk, octal numbers and:               Nondecimal-numbers.  (line  41)
 * gawk, OpenVMS version of:              OpenVMS Installation.
                                                               (line   6)
-* gawk, implementation issues:           Notes.               (line   6)
-* gawk, implementation issues, downward compatibility: Compatibility Mode.
+* gawk, predefined variables and:        Built-in Variables.  (line  14)
+* gawk, PROCINFO array in:               Other Arguments.     (line  21)
+* gawk, PROCINFO array in <1>:           Auto-set.            (line 148)
+* gawk, PROCINFO array in <2>:           Time Functions.      (line  49)
+* gawk, PROCINFO array in <3>:           Two-way I/O.         (line 114)
+* gawk, profiling programs:              Profiling.           (line 185)
+* gawk, regexp constants and:            Standard Regexp Constants.
+                                                              (line  28)
+* gawk, regular expressions, case sensitivity: Case-sensitivity.
+                                                              (line  26)
+* gawk, regular expressions, operators:  GNU Regexp Operators.
                                                               (line   6)
-* gawk, implementation issues, debugging: Compatibility Mode. (line   6)
-* gawk, features, adding:                Adding Code.         (line   6)
-* gawk, coding style in:                 Adding Code.         (line  42)
-* gawkbug utility:                       Bug address.         (line  31)
-* gawkextlib project:                    gawkextlib.          (line   6)
-* gawklibpath_append shell function:     Shell Startup Files. (line  29)
-* gawklibpath_default shell function:    Shell Startup Files. (line  22)
-* gawklibpath_prepend shell function:    Shell Startup Files. (line  25)
-* gawkpath_append shell function:        Shell Startup Files. (line  19)
-* gawkpath_default shell function:       Shell Startup Files. (line  12)
-* gawkpath_prepend shell function:       Shell Startup Files. (line  15)
+* gawk, regular expressions, precedence: Regexp Operator Details.
+                                                              (line 142)
+* gawk, RT variable in:                  awk split records.   (line 118)
+* gawk, RT variable in <1>:              gawk split records.  (line  65)
+* gawk, RT variable in <2>:              Multiple Line.       (line 138)
+* gawk, RT variable in <3>:              Auto-set.            (line 355)
+* gawk, source code, obtaining:          Getting.             (line   6)
+* gawk, splitting fields and:            Testing field creation.
+                                                              (line   6)
+* gawk, string-translation functions:    I18N Functions.      (line   6)
+* gawk, SYMTAB array in:                 Auto-set.            (line 359)
+* gawk, TEXTDOMAIN variable in:          User-modified.       (line 154)
+* gawk, timestamps:                      Time Functions.      (line   6)
+* gawk, uses for:                        Preface.             (line  34)
+* gawk, version of:                      Auto-set.            (line 262)
+* gawk, version of, printing information about: Options.      (line 355)
+* gawk, word-boundary operator:          GNU Regexp Operators.
+                                                              (line  65)
 * GAWK_LOCALE_DIR environment variable:  Other Environment Variables.
                                                               (line  70)
 * GAWK_LOCALE_DIR environment variable <1>: Explaining gettext.
@@ -38050,6 +38006,14 @@ Index
 * GAWK_SOCK_RETRIES environment variable <1>: Nonfatal.       (line  53)
 * GAWK_STACKSIZE environment variable:   Other Environment Variables.
                                                               (line  83)
+* gawkbug utility:                       Bug address.         (line  31)
+* gawkextlib project:                    gawkextlib.          (line   6)
+* gawklibpath_append shell function:     Shell Startup Files. (line  29)
+* gawklibpath_default shell function:    Shell Startup Files. (line  22)
+* gawklibpath_prepend shell function:    Shell Startup Files. (line  25)
+* gawkpath_append shell function:        Shell Startup Files. (line  19)
+* gawkpath_default shell function:       Shell Startup Files. (line  12)
+* gawkpath_prepend shell function:       Shell Startup Files. (line  15)
 * generate time values:                  Time Functions.      (line  25)
 * gensub:                                Standard Regexp Constants.
                                                               (line  43)
@@ -38067,22 +38031,22 @@ Index
 * getgruser() function (C library):      Group Functions.     (line 191)
 * getgruser() user-defined function:     Group Functions.     (line 194)
 * getline command:                       Reading Files.       (line  20)
-* getline command, explicit input with:  Getline.             (line   6)
-* getline command, return values:        Getline.             (line  19)
-* getline command, into a variable:      Getline/Variable.    (line   6)
-* getline command, from a file:          Getline/File.        (line   6)
+* getline command, _gr_init() user-defined function: Group Functions.
+                                                              (line  83)
+* getline command, _pw_init() function:  Passwd Functions.    (line 154)
+* getline command, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
+                                                              (line  60)
 * getline command, coprocesses, using from: Getline/Coprocess.
                                                               (line   6)
-* getline command, FILENAME variable and: Getline Notes.      (line  19)
-* getline command, variants:             Getline Summary.     (line   6)
 * getline command, coprocesses, using from <1>: Close Files And Pipes.
                                                               (line   6)
-* getline command, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
-                                                              (line  60)
-* getline command, _pw_init() function:  Passwd Functions.    (line 154)
-* getline command, _gr_init() user-defined function: Group Functions.
-                                                              (line  83)
 * getline command, deadlock and:         Two-way I/O.         (line  53)
+* getline command, explicit input with:  Getline.             (line   6)
+* getline command, FILENAME variable and: Getline Notes.      (line  19)
+* getline command, from a file:          Getline/File.        (line   6)
+* getline command, into a variable:      Getline/Variable.    (line   6)
+* getline command, return values:        Getline.             (line  19)
+* getline command, variants:             Getline Summary.     (line   6)
 * getlocaltime() user-defined function:  Getlocaltime Function.
                                                               (line  16)
 * getopt() function (C library):         Getopt Function.     (line  15)
@@ -38127,8 +38091,8 @@ Index
 * goawk:                                 Other Versions.      (line 125)
 * Gordon, Assaf:                         Contributors.        (line 108)
 * GPL (General Public License):          Manual History.      (line  11)
-* GPL (General Public License), printing: Options.            (line  92)
 * GPL (General Public License) <1>:      Glossary.            (line 394)
+* GPL (General Public License), printing: Options.            (line  92)
 * grcat program:                         Group Functions.     (line  16)
 * Grigera, Juan:                         Contributors.        (line  58)
 * group database, reading:               Group Functions.     (line   6)
@@ -38147,8 +38111,8 @@ Index
 * Hankerson, Darrel:                     Acknowledgments.     (line  60)
 * Hankerson, Darrel <1>:                 Contributors.        (line  61)
 * Haque, John:                           Contributors.        (line 111)
-* Hartholz, Marshall:                    Acknowledgments.     (line  38)
 * Hartholz, Elaine:                      Acknowledgments.     (line  38)
+* Hartholz, Marshall:                    Acknowledgments.     (line  38)
 * Hasegawa, Isamu:                       Contributors.        (line  97)
 * help debugger command:                 Miscellaneous Debugger Commands.
                                                               (line  67)
@@ -38158,54 +38122,54 @@ Index
 * histsort.awk program:                  History Sorting.     (line  25)
 * Hughes, Phil:                          Acknowledgments.     (line  43)
 * HUP signal, for dynamic profiling:     Profiling.           (line 217)
-* hyphen (-), file names beginning with: Options.             (line  63)
+* hyphen (-), - operator:                Precedence.          (line  51)
+* hyphen (-), - operator <1>:            Precedence.          (line  57)
 * hyphen (-), -- end of options marker:  Options.             (line 360)
-* hyphen (-), in bracket expressions:    Bracket Expressions. (line  25)
-* hyphen (-), -= operator:               Assignment Ops.      (line 129)
 * hyphen (-), -- operator:               Increment Ops.       (line  48)
 * hyphen (-), -- operator <1>:           Precedence.          (line  45)
-* hyphen (-), - operator:                Precedence.          (line  51)
-* hyphen (-), - operator <1>:            Precedence.          (line  57)
+* hyphen (-), -= operator:               Assignment Ops.      (line 129)
 * hyphen (-), -= operator <1>:           Precedence.          (line  94)
+* hyphen (-), file names beginning with: Options.             (line  63)
+* hyphen (-), in bracket expressions:    Bracket Expressions. (line  25)
 * i debugger command (alias for info):   Debugger Info.       (line  13)
 * id utility:                            Id Program.          (line   6)
 * id.awk program:                        Id Program.          (line  34)
-* if statement, use of regexps in:       Regexp Usage.        (line  19)
-* if statement, actions, changing:       Ranges.              (line  25)
 * if statement:                          If Statement.        (line   6)
+* if statement, actions, changing:       Ranges.              (line  25)
+* if statement, use of regexps in:       Regexp Usage.        (line  19)
 * igawk.sh program:                      Igawk Program.       (line 124)
 * ignore breakpoint:                     Breakpoint Control.  (line  87)
 * ignore debugger command:               Breakpoint Control.  (line  87)
-* IGNORECASE variable, with ~ and !~ operators: Case-sensitivity.
-                                                              (line  26)
 * IGNORECASE variable:                   User-modified.       (line  79)
-* IGNORECASE variable, array indices and: Array Intro.        (line 100)
-* IGNORECASE variable, in example programs: Library Functions.
-                                                              (line  50)
+* IGNORECASE variable, array indices and: Array Intro.        (line 102)
 * IGNORECASE variable, array sorting functions and: Array Sorting Functions.
                                                               (line  88)
+* IGNORECASE variable, in example programs: Library Functions.
+                                                              (line  50)
+* IGNORECASE variable, with ~ and !~ operators: Case-sensitivity.
+                                                              (line  26)
 * Illumos, POSIX-compliant awk:          Other Versions.      (line 109)
-* implementation issues, gawk, limits:   Getline Notes.       (line  14)
-* implementation issues, gawk, limits <1>: Redirection.       (line 129)
 * implementation issues, gawk:           Notes.               (line   6)
 * implementation issues, gawk, debugging: Compatibility Mode. (line   6)
+* implementation issues, gawk, limits:   Getline Notes.       (line  14)
+* implementation issues, gawk, limits <1>: Redirection.       (line 129)
 * implicit namespace:                    Changing The Namespace.
                                                               (line  25)
 * in operator:                           Comparison Operators.
                                                               (line  11)
 * in operator <1>:                       Precedence.          (line  82)
 * in operator <2>:                       For Statement.       (line  78)
+* in operator, index existence in multidimensional arrays: Multidimensional.
+                                                              (line  41)
+* in operator, order of array access:    Scanning an Array.   (line  48)
 * in operator, testing if array element exists: Reference to Elements.
                                                               (line  38)
 * in operator, use in loops:             Scanning an Array.   (line  17)
-* in operator, order of array access:    Scanning an Array.   (line  48)
-* in operator, index existence in multidimensional arrays: Multidimensional.
-                                                              (line  41)
 * @include directive:                    Include Files.       (line   8)
 * including files, @include directive:   Include Files.       (line   8)
 * increment operators:                   Increment Ops.       (line   6)
 * index:                                 String Functions.    (line 174)
-* indexing arrays:                       Array Intro.         (line  49)
+* indexing arrays:                       Array Intro.         (line  51)
 * indirect function calls:               Indirect Calls.      (line   6)
 * indirect function calls, @-notation:   Indirect Calls.      (line  47)
 * infinite precision:                    Arbitrary Precision Arithmetic.
@@ -38214,80 +38178,80 @@ Index
 * initialization, automatic:             More Complex.        (line  28)
 * inplace extension:                     Extension Sample Inplace.
                                                               (line   6)
-* input, standard:                       Read Terminal.       (line   6)
-* input, splitting into records:         Records.             (line   6)
-* input, multiline records:              Multiple Line.       (line   6)
+* input, data, nondecimal:               Nondecimal Data.     (line   6)
 * input, explicit:                       Getline.             (line   6)
+* input, multiline records:              Multiple Line.       (line   6)
+* input, splitting into records:         Records.             (line   6)
+* input, standard:                       Read Terminal.       (line   6)
 * input, standard <1>:                   Special FD.          (line   6)
-* input, data, nondecimal:               Nondecimal Data.     (line   6)
-* input files, running awk without:      Read Terminal.       (line   6)
-* input files, running awk without <1>:  Read Terminal.       (line  16)
-* input files, examples:                 Sample Data Files.   (line   6)
-* input files, variable assignments and: Other Arguments.     (line  34)
-* input files, reading:                  Reading Files.       (line   6)
 * input files:                           Reading Files.       (line   6)
 * input files, closing:                  Close Files And Pipes.
                                                               (line   6)
 * input files, counting elements in:     Wc Program.          (line   6)
+* input files, examples:                 Sample Data Files.   (line   6)
+* input files, reading:                  Reading Files.       (line   6)
+* input files, running awk without:      Read Terminal.       (line   6)
+* input files, running awk without <1>:  Read Terminal.       (line  16)
+* input files, variable assignments and: Other Arguments.     (line  34)
 * input pipeline:                        Getline/Pipe.        (line  10)
 * input record, length of:               String Functions.    (line 196)
 * input redirection:                     Getline/File.        (line   6)
-* input/output, from BEGIN and END:      I/O And BEGIN/END.   (line   6)
 * input/output, binary:                  User-modified.       (line  15)
+* input/output, from BEGIN and END:      I/O And BEGIN/END.   (line   6)
 * input/output, functions:               I/O Functions.       (line   6)
 * input/output, two-way:                 Two-way I/O.         (line  27)
 * insomnia, cure for:                    Alarm Program.       (line   6)
 * installing gawk:                       Installation.        (line   6)
+* installing gawk, Cygwin:               Cygwin.              (line  21)
 * installing gawk, MS-Windows:           PC Binary Installation.
                                                               (line   6)
-* installing gawk, Cygwin:               Cygwin.              (line  21)
 * installing gawk, OpenVMS:              OpenVMS Installation.
                                                               (line   6)
 * instruction tracing, in debugger:      Debugger Info.       (line  90)
 * instructions, trace of internal:       Options.             (line 197)
 * int:                                   Numeric Functions.   (line  23)
 * INT signal (MS-Windows):               Profiling.           (line 220)
+* INT_CHAIN_MAX environment variable:    Other Environment Variables.
+                                                              (line  87)
 * integer array indices:                 Numeric Array Subscripts.
                                                               (line  31)
-* integers, unsigned:                    Computer Arithmetic. (line  41)
 * integers, arbitrary precision:         Arbitrary Precision Integers.
                                                               (line   6)
+* integers, unsigned:                    Computer Arithmetic. (line  41)
 * interacting with other programs:       I/O Functions.       (line 105)
-* internationalization, localization, character classes: Bracket Expressions.
-                                                              (line 113)
-* internationalization, localization:    User-modified.       (line 154)
 * internationalization:                  I18N Functions.      (line   6)
+* internationalization <1>:              I18N and L10N.       (line   6)
+* internationalization, localization:    User-modified.       (line 154)
 * internationalization, localization <1>: Internationalization.
                                                               (line  19)
+* internationalization, localization <2>: I18N and L10N.      (line   6)
+* internationalization, localization, character classes: Bracket Expressions.
+                                                              (line 112)
+* internationalization, localization, currency symbols: Explaining gettext.
+                                                              (line 104)
 * internationalization, localization, gawk and: Internationalization.
                                                               (line  19)
-* internationalization <1>:              I18N and L10N.       (line   6)
-* internationalization, localization <2>: I18N and L10N.      (line   6)
 * internationalization, localization, locale categories: Explaining gettext.
                                                               (line  81)
-* internationalization, localization, monetary information: Explaining gettext.
-                                                              (line 104)
-* internationalization, localization, currency symbols: Explaining gettext.
-                                                              (line 104)
 * internationalization, localization, marked strings: Programmer i18n.
                                                               (line  13)
+* internationalization, localization, monetary information: Explaining gettext.
+                                                              (line 104)
 * internationalization, localization, portability and: I18N Portability.
                                                               (line   6)
 * internationalizing a program:          Explaining gettext.  (line   6)
-* interpreted programs:                  Basic High Level.    (line  14)
+* interpreted programs:                  Basic High Level.    (line  16)
 * interpreted programs <1>:              Glossary.            (line 443)
 * interval expressions, regexp operator: Regexp Operator Details.
                                                               (line 118)
-* INT_CHAIN_MAX environment variable:    Other Environment Variables.
-                                                              (line  87)
 * inventory-shipped file:                Sample Data Files.   (line  32)
 * invoke shell command:                  I/O Functions.       (line 105)
 * isarray:                               Type Functions.      (line  11)
 * isnumeric() user-defined function:     Isnumeric Function.  (line  11)
+* ISO:                                   Glossary.            (line 454)
 * ISO, ISO 8601 date and time standard:  Time Functions.      (line 185)
 * ISO, ISO 8859-1 character set:         Glossary.            (line 194)
 * ISO, ISO Latin-1 character set:        Glossary.            (line 194)
-* ISO:                                   Glossary.            (line 454)
 * Jacobs, Andrew:                        Passwd Functions.    (line  90)
 * Jaegermann, Michal:                    Acknowledgments.     (line  60)
 * Jaegermann, Michal <1>:                Contributors.        (line  46)
@@ -38306,19 +38270,19 @@ Index
 * Kelly, Terence <2>:                    Feature History.     (line 510)
 * Kenobi, Obi-Wan:                       Undocumented.        (line   6)
 * Kernighan, Brian:                      History.             (line  21)
-* Kernighan, Brian, quotes:              Conventions.         (line  38)
 * Kernighan, Brian <1>:                  Acknowledgments.     (line  79)
-* Kernighan, Brian, quotes <1>:          Comma Separated Fields.
-                                                              (line  46)
-* Kernighan, Brian, quotes <2>:          Getline/Pipe.        (line   6)
-* Kernighan, Brian, quotes <3>:          Concatenation.       (line   6)
-* Kernighan, Brian, quotes <4>:          Library Functions.   (line  12)
-* Kernighan, Brian, quotes <5>:          Programs Exercises.  (line  26)
 * Kernighan, Brian <2>:                  BTL.                 (line   6)
 * Kernighan, Brian <3>:                  Contributors.        (line  12)
 * Kernighan, Brian <4>:                  Other Versions.      (line  13)
 * Kernighan, Brian <5>:                  Basic Data Typing.   (line  54)
 * Kernighan, Brian <6>:                  Glossary.            (line 204)
+* Kernighan, Brian, quotes:              Conventions.         (line  38)
+* Kernighan, Brian, quotes <1>:          Comma Separated Fields.
+                                                              (line  45)
+* Kernighan, Brian, quotes <2>:          Getline/Pipe.        (line   6)
+* Kernighan, Brian, quotes <3>:          Concatenation.       (line   6)
+* Kernighan, Brian, quotes <4>:          Library Functions.   (line  12)
+* Kernighan, Brian, quotes <5>:          Programs Exercises.  (line  26)
 * kill command, dynamic profiling:       Profiling.           (line 194)
 * knights, jedi:                         Undocumented.        (line   6)
 * Kwok, Conrad:                          Contributors.        (line  35)
@@ -38329,7 +38293,7 @@ Index
 * Langston, Peter:                       Advanced Features.   (line   6)
 * LANGUAGE environment variable:         Explaining gettext.  (line 120)
 * LANGUAGE environment variable <1>:     I18N Example.        (line  68)
-* languages, data-driven:                Basic High Level.    (line  76)
+* languages, data-driven:                Basic High Level.    (line  87)
 * LC_ALL environment variable:           Split Program.       (line  39)
 * LC_ALL environment variable <1>:       I18N Example.        (line  68)
 * LC_ALL environment variable <2>:       Bug address.         (line  18)
@@ -38343,14 +38307,14 @@ Index
 * LC_MONETARY locale category:           Explaining gettext.  (line 104)
 * LC_NUMERIC locale category:            Explaining gettext.  (line 108)
 * LC_TIME locale category:               Explaining gettext.  (line 112)
-* left angle bracket (<), < operator (I/O): Getline/File.     (line   6)
 * left angle bracket (<), < operator:    Comparison Operators.
                                                               (line  11)
+* left angle bracket (<), < operator <1>: Precedence.         (line  64)
+* left angle bracket (<), < operator (I/O): Getline/File.     (line   6)
 * left angle bracket (<), <= operator:   Comparison Operators.
                                                               (line  11)
-* left angle bracket (<), < operator <1>: Precedence.         (line  64)
 * left angle bracket (<), <= operator <1>: Precedence.        (line  64)
-* left shift, bitwise:                   Bitwise Functions.   (line  33)
+* left shift, bitwise:                   Bitwise Functions.   (line  32)
 * leftmost longest match:                Multiple Line.       (line  26)
 * length:                                String Functions.    (line 189)
 * length of input record:                String Functions.    (line 196)
@@ -38359,45 +38323,45 @@ Index
 * LGPL (Lesser General Public License):  Glossary.            (line 489)
 * libmawk:                               Other Versions.      (line 153)
 * libraries of awk functions:            Library Functions.   (line   6)
+* libraries of awk functions, assertions: Assert Function.    (line   6)
 * libraries of awk functions, associative arrays and: Library Names.
                                                               (line  58)
-* libraries of awk functions, assertions: Assert Function.    (line   6)
-* libraries of awk functions, rounding numbers: Round Function.
-                                                              (line   6)
 * libraries of awk functions, character values as numbers: Ordinal Functions.
                                                               (line   6)
-* libraries of awk functions, merging arrays into strings: Join Function.
+* libraries of awk functions, command-line options: Getopt Function.
                                                               (line   6)
-* libraries of awk functions, managing, time: Getlocaltime Function.
+* libraries of awk functions, example program for using: Igawk Program.
+                                                              (line   6)
+* libraries of awk functions, group database, reading: Group Functions.
                                                               (line   6)
 * libraries of awk functions, managing, data files: Data File Management.
                                                               (line   6)
-* libraries of awk functions, command-line options: Getopt Function.
+* libraries of awk functions, managing, time: Getlocaltime Function.
                                                               (line   6)
-* libraries of awk functions, user database, reading: Passwd Functions.
+* libraries of awk functions, merging arrays into strings: Join Function.
                                                               (line   6)
-* libraries of awk functions, group database, reading: Group Functions.
+* libraries of awk functions, rounding numbers: Round Function.
                                                               (line   6)
-* libraries of awk functions, example program for using: Igawk Program.
+* libraries of awk functions, user database, reading: Passwd Functions.
                                                               (line   6)
 * line breaks:                           Statements/Lines.    (line   6)
-* line continuations, with C shell:      Statements/Lines.    (line  45)
-* line continuations, in print statement: Print Examples.     (line  75)
 * line continuations:                    Boolean Ops.         (line  64)
 * line continuations, gawk:              Conditional Exp.     (line  34)
+* line continuations, in print statement: Print Examples.     (line  75)
+* line continuations, with C shell:      Statements/Lines.    (line  45)
 * lines, blank, printing:                Print.               (line  22)
-* lines, matching ranges of:             Ranges.              (line   6)
-* lines, skipping between markers:       Ranges.              (line  43)
 * lines, counting:                       Wc Program.          (line   6)
 * lines, duplicate, removing:            History Sorting.     (line   6)
-* lint checking, empty programs:         Command Line.        (line  16)
-* lint checking, issuing warnings:       Options.             (line 221)
-* lint checking, POSIXLY_CORRECT environment variable: Options.
-                                                              (line 402)
+* lines, matching ranges of:             Ranges.              (line   6)
+* lines, skipping between markers:       Ranges.              (line  43)
 * lint checking:                         User-modified.       (line  90)
 * lint checking, array subscripts:       Uninitialized Subscripts.
                                                               (line  43)
 * lint checking, array subscripts <1>:   Delete.              (line  34)
+* lint checking, empty programs:         Command Line.        (line  16)
+* lint checking, issuing warnings:       Options.             (line 221)
+* lint checking, POSIXLY_CORRECT environment variable: Options.
+                                                              (line 402)
 * lint checking, undefined functions:    Function Caveats.    (line  23)
 * LINT variable:                         User-modified.       (line  90)
 * list all global variables, in debugger: Debugger Info.      (line  48)
@@ -38421,17 +38385,17 @@ Index
 * login information:                     Passwd Functions.    (line  16)
 * long options:                          Command Line.        (line  13)
 * loops:                                 While Statement.     (line   6)
-* loops, while:                          While Statement.     (line   6)
-* loops, do-while:                       Do Statement.        (line   6)
-* loops, for, iterative:                 For Statement.       (line   6)
+* loops, break statement and:            Break Statement.     (line   6)
 * loops, continue statement and:         For Statement.       (line  67)
+* loops, count for header, in a profile: Profiling.           (line 131)
+* loops, do-while:                       Do Statement.        (line   6)
 * loops, exiting:                        Break Statement.     (line   6)
-* loops, break statement and:            Break Statement.     (line   6)
 * loops, for, array scanning:            Scanning an Array.   (line   6)
-* loops, count for header, in a profile: Profiling.           (line 131)
+* loops, for, iterative:                 For Statement.       (line   6)
+* loops, while:                          While Statement.     (line   6)
 * ls utility:                            Very Simple.         (line  54)
 * ls utility <1>:                        More Complex.        (line  15)
-* lshift:                                Bitwise Functions.   (line  48)
+* lshift:                                Bitwise Functions.   (line  47)
 * lvalues/rvalues:                       Assignment Ops.      (line  31)
 * mail-list file:                        Sample Data Files.   (line   6)
 * mailing labels, printing:              Labels Program.      (line   6)
@@ -38442,16 +38406,16 @@ Index
 * mark parity:                           Ordinal Functions.   (line  45)
 * marked string extraction (internationalization): String Extraction.
                                                               (line   6)
-* Marx, Groucho:                         Increment Ops.       (line  60)
+* Marx, Groucho:                         Increment Ops.       (line  59)
 * match:                                 String Functions.    (line 229)
 * match regexp in string:                String Functions.    (line 229)
 * match() function, RSTART/RLENGTH variables: String Functions.
                                                               (line 246)
 * match() function, side effects:        String Functions.    (line 246)
-* matching, leftmost longest:            Multiple Line.       (line  26)
 * matching, expressions:                 Typing and Comparison.
                                                               (line   9)
-* matching, null strings:                String Functions.    (line 575)
+* matching, leftmost longest:            Multiple Line.       (line  26)
+* matching, null strings:                String Functions.    (line 574)
 * mawk utility:                          Escape Sequences.    (line 136)
 * mawk utility <1>:                      Getline/Pipe.        (line  62)
 * mawk utility <2>:                      Concatenation.       (line  36)
@@ -38463,14 +38427,14 @@ Index
 * memory, allocating for extensions:     Memory Allocation Functions.
                                                               (line   6)
 * message object files:                  Explaining gettext.  (line  42)
+* message object files, converting from portable object files: I18N Example.
+                                                              (line  80)
 * message object files, specifying directory of: Explaining gettext.
                                                               (line  54)
 * message object files, specifying directory of <1>: Programmer i18n.
                                                               (line  48)
-* message object files, converting from portable object files: I18N Example.
-                                                              (line  80)
 * messages from extensions:              Printing Messages.   (line   6)
-* metacharacters, escape sequences for:  Escape Sequences.    (line 155)
+* metacharacters, escape sequences for:  Escape Sequences.    (line 154)
 * metacharacters, in regular expressions: Regexp Operators.   (line   6)
 * minimum precision required by MPFR library: Auto-set.       (line 279)
 * Minshall, Greg:                        Getopt Function.     (line 105)
@@ -38494,49 +38458,49 @@ Index
                                                               (line  43)
 * name management:                       Internal Name Management.
                                                               (line   6)
-* names, functions:                      Definition Syntax.   (line  24)
 * names, arrays/variables:               Library Names.       (line   6)
+* names, functions:                      Definition Syntax.   (line  24)
 * names, functions <1>:                  Library Names.       (line   6)
-* namespace, definition of:              Global Namespace.    (line   6)
-* namespace, standard awk, global:       Global Namespace.    (line   6)
-* namespace, default:                    Default Namespace.   (line   6)
 * namespace, awk:                        Default Namespace.   (line   6)
+* namespace, default:                    Default Namespace.   (line   6)
+* namespace, definition of:              Global Namespace.    (line   6)
+* namespace, example code:               Namespace Example.   (line   6)
 * namespace, implicit:                   Changing The Namespace.
                                                               (line  25)
 * namespace, pushing and popping:        Changing The Namespace.
                                                               (line  29)
-* namespace, example code:               Namespace Example.   (line   6)
+* namespace, standard awk, global:       Global Namespace.    (line   6)
 * @namespace directive:                  Changing The Namespace.
                                                               (line   6)
 * @namespace directive <1>:              Changing The Namespace.
                                                               (line  37)
-* namespaces, qualified names:           Qualified Names.     (line   6)
+* namespaces, backwards compatibility:   Namespace Summary.   (line  28)
 * namespaces, changing:                  Changing The Namespace.
                                                               (line   6)
-* namespaces, naming rules:              Naming Rules.        (line   6)
-* namespaces, interaction with, profiler: Namespace And Features.
-                                                              (line   9)
-* namespaces, interaction with, pretty printer: Namespace And Features.
-                                                              (line   9)
 * namespaces, interaction with, debugger: Namespace And Features.
                                                               (line  17)
 * namespaces, interaction with, extension API: Namespace And Features.
                                                               (line  22)
-* namespaces, backwards compatibility:   Namespace Summary.   (line  28)
-* naming issues, functions:              Definition Syntax.   (line  24)
+* namespaces, interaction with, pretty printer: Namespace And Features.
+                                                              (line   9)
+* namespaces, interaction with, profiler: Namespace And Features.
+                                                              (line   9)
+* namespaces, naming rules:              Naming Rules.        (line   6)
+* namespaces, qualified names:           Qualified Names.     (line   6)
 * naming issues:                         Library Names.       (line   6)
+* naming issues, functions:              Definition Syntax.   (line  24)
 * naming rules, namespace and component names: Naming Rules.  (line   6)
 * Neacsu, Mircea:                        Other Versions.      (line 156)
 * NetBSD:                                Glossary.            (line 747)
-* networks, support for:                 Special Network.     (line   6)
 * networks, programming:                 TCP/IP Networking.   (line   6)
+* networks, support for:                 Special Network.     (line   6)
 * newlines:                              Statements/Lines.    (line   6)
 * newlines <1>:                          Options.             (line 314)
-* newlines, in dynamic regexps:          Computed Regexps.    (line  60)
-* newlines, in regexp constants:         Computed Regexps.    (line  70)
+* newlines <2>:                          Boolean Ops.         (line  69)
 * newlines, as record separators:        awk split records.   (line  12)
+* newlines, in dynamic regexps:          Computed Regexps.    (line  59)
+* newlines, in regexp constants:         Computed Regexps.    (line  70)
 * newlines, printing:                    Print Examples.      (line  11)
-* newlines <2>:                          Boolean Ops.         (line  69)
 * newlines, separating statements in actions: Action Overview.
                                                               (line  19)
 * newlines, separating statements in actions <1>: Statements. (line  10)
@@ -38544,23 +38508,23 @@ Index
                                                               (line  43)
 * next file statement:                   Feature History.     (line 170)
 * next statement:                        Boolean Ops.         (line  95)
+* next statement <1>:                    Next Statement.      (line   6)
 * next statement, BEGIN/END patterns and: I/O And BEGIN/END.  (line  36)
 * next statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
                                                               (line  56)
-* next statement <1>:                    Next Statement.      (line   6)
 * next statement, user-defined functions and: Next Statement. (line  44)
+* nextfile statement:                    Nextfile Statement.  (line   6)
 * nextfile statement, BEGIN/END patterns and: I/O And BEGIN/END.
                                                               (line  36)
 * nextfile statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
                                                               (line  32)
-* nextfile statement:                    Nextfile Statement.  (line   6)
 * nextfile statement, user-defined functions and: Nextfile Statement.
                                                               (line  47)
 * nexti debugger command:                Debugger Execution Control.
                                                               (line  49)
 * NF variable:                           Fields.              (line  33)
-* NF variable, decrementing:             Changing Fields.     (line 107)
 * NF variable <1>:                       Auto-set.            (line 123)
+* NF variable, decrementing:             Changing Fields.     (line 107)
 * ni debugger command (alias for nexti): Debugger Execution Control.
                                                               (line  49)
 * noassign.awk program:                  Ignoring Assigns.    (line  15)
@@ -38570,99 +38534,99 @@ Index
 * not Boolean-logic operator:            Boolean Ops.         (line   6)
 * NR variable:                           Records.             (line   6)
 * NR variable <1>:                       Auto-set.            (line 143)
-* NR variable, changing:                 Auto-set.            (line 416)
-* null strings, in gawk arguments, quoting and: Quoting.      (line  82)
-* null strings, in gawk arguments, quoting and <1>: Other Arguments.
-                                                              (line  73)
+* NR variable, changing:                 Auto-set.            (line 415)
 * null strings:                          awk split records.   (line 108)
 * null strings <1>:                      Regexp Field Splitting.
                                                               (line  42)
-* null strings, converting numbers to strings: Strings And Numbers.
-                                                              (line  21)
 * null strings <2>:                      Truth Values.        (line   6)
+* null strings <3>:                      Basic Data Typing.   (line  26)
 * null strings, as array subscripts:     Uninitialized Subscripts.
                                                               (line  43)
+* null strings, converting numbers to strings: Strings And Numbers.
+                                                              (line  21)
 * null strings, deleting array elements and: Delete.          (line  27)
-* null strings, matching:                String Functions.    (line 575)
-* null strings <3>:                      Basic Data Typing.   (line  26)
+* null strings, in gawk arguments, quoting and: Quoting.      (line  82)
+* null strings, in gawk arguments, quoting and <1>: Other Arguments.
+                                                              (line  72)
+* null strings, matching:                String Functions.    (line 574)
 * number of array elements:              String Functions.    (line 219)
 * number sign (#), #! (executable scripts): Executable Scripts.
                                                               (line   6)
 * number sign (#), commenting:           Comments.            (line   6)
-* numbers, octal:                        Nondecimal-numbers.  (line   6)
-* numbers, hexadecimal:                  Nondecimal-numbers.  (line   6)
-* numbers, converting:                   Strings And Numbers. (line   6)
-* numbers, converting, to strings:       User-modified.       (line  30)
-* numbers, converting, to strings <1>:   User-modified.       (line 107)
 * numbers, as array subscripts:          Numeric Array Subscripts.
                                                               (line   6)
-* numbers, converting <1>:               Bitwise Functions.   (line 110)
-* numbers, as string of bits:            Bitwise Functions.   (line 110)
-* numbers, rounding:                     Round Function.      (line   6)
+* numbers, as string of bits:            Bitwise Functions.   (line 109)
+* numbers, as values of characters:      Ordinal Functions.   (line   6)
 * numbers, Cliff random:                 Cliff Random Function.
                                                               (line   6)
-* numbers, as values of characters:      Ordinal Functions.   (line   6)
-* numeric, output format:                OFMT.                (line   6)
+* numbers, converting:                   Strings And Numbers. (line   6)
+* numbers, converting <1>:               Bitwise Functions.   (line 109)
+* numbers, converting, to strings:       User-modified.       (line  30)
+* numbers, converting, to strings <1>:   User-modified.       (line 107)
+* numbers, hexadecimal:                  Nondecimal-numbers.  (line   6)
+* numbers, octal:                        Nondecimal-numbers.  (line   6)
+* numbers, rounding:                     Round Function.      (line   6)
 * numeric, constants:                    Scalar Constants.    (line   6)
-* numeric, strings:                      Variable Typing.     (line  67)
 * numeric, functions:                    Numeric Functions.   (line   6)
+* numeric, output format:                OFMT.                (line   6)
+* numeric, strings:                      Variable Typing.     (line  67)
 * o debugger command (alias for option): Debugger Info.       (line  57)
 * obsolete features:                     Obsolete.            (line   6)
 * octal numbers:                         Nondecimal-numbers.  (line   6)
 * octal values, enabling interpretation of: Options.          (line 261)
 * OFMT variable:                         OFMT.                (line  15)
-* OFMT variable, POSIX awk and:          OFMT.                (line  32)
-* OFMT variable <1>:                     Strings And Numbers. (line  56)
+* OFMT variable <1>:                     Strings And Numbers. (line  55)
 * OFMT variable <2>:                     User-modified.       (line 107)
+* OFMT variable, POSIX awk and:          OFMT.                (line  32)
 * OFS variable:                          Changing Fields.     (line  64)
 * OFS variable <1>:                      Output Separators.   (line   6)
 * OFS variable <2>:                      User-modified.       (line 116)
 * op-codes, trace of internal:           Options.             (line 197)
 * OpenBSD:                               Glossary.            (line 747)
 * OpenSolaris:                           Other Versions.      (line 100)
-* operating systems, BSD-based:          Manual History.      (line  28)
 * operating systems:                     Installation.        (line   6)
+* operating systems, BSD-based:          Manual History.      (line  28)
+* operating systems, PC, gawk on:        PC Using.            (line   6)
 * operating systems, PC, gawk on, installing: PC Installation.
                                                               (line   6)
-* operating systems, PC, gawk on:        PC Using.            (line   6)
 * operating systems, porting gawk to:    New Ports.           (line   6)
 * operations, bitwise:                   Bitwise Functions.   (line   6)
-* operators, string-matching:            Regexp Usage.        (line  19)
+* operators, arithmetic:                 Arithmetic Ops.      (line   6)
+* operators, assignment:                 Assignment Ops.      (line   6)
+* operators, assignment <1>:             Assignment Ops.      (line  31)
+* operators, assignment, evaluation order: Assignment Ops.    (line 110)
+* operators, comparison:                 Comparison Operators.
+                                                              (line   6)
+* operators, decrement/increment:        Increment Ops.       (line   6)
 * operators, GNU-specific:               GNU Regexp Operators.
                                                               (line   6)
-* operators, string-matching, for buffers: GNU Regexp Operators.
-                                                              (line  50)
-* operators, word-boundary (gawk):       GNU Regexp Operators.
-                                                              (line  65)
 * operators, input/output:               Getline/File.        (line   6)
 * operators, input/output <1>:           Getline/Pipe.        (line  10)
 * operators, input/output <2>:           Getline/Coprocess.   (line   6)
 * operators, input/output <3>:           Redirection.         (line  22)
 * operators, input/output <4>:           Redirection.         (line  96)
-* operators, arithmetic:                 Arithmetic Ops.      (line   6)
-* operators, string:                     Concatenation.       (line   9)
-* operators, assignment:                 Assignment Ops.      (line   6)
-* operators, assignment <1>:             Assignment Ops.      (line  31)
-* operators, assignment, evaluation order: Assignment Ops.    (line 110)
-* operators, decrement/increment:        Increment Ops.       (line   6)
-* operators, precedence of:              Increment Ops.       (line  60)
-* operators, comparison:                 Comparison Operators.
-                                                              (line   6)
-* operators, short-circuit:              Boolean Ops.         (line  59)
-* operators, precedence of <1>:          Precedence.          (line   6)
 * operators, input/output <5>:           Precedence.          (line  64)
 * operators, input/output <6>:           Precedence.          (line  64)
 * operators, input/output <7>:           Precedence.          (line  64)
+* operators, precedence of:              Increment Ops.       (line  59)
+* operators, precedence of <1>:          Precedence.          (line   6)
+* operators, short-circuit:              Boolean Ops.         (line  59)
+* operators, string:                     Concatenation.       (line   9)
+* operators, string-matching:            Regexp Usage.        (line  19)
+* operators, string-matching, for buffers: GNU Regexp Operators.
+                                                              (line  50)
+* operators, word-boundary (gawk):       GNU Regexp Operators.
+                                                              (line  65)
 * option debugger command:               Debugger Info.       (line  57)
+* options, command-line:                 Options.             (line   6)
+* options, command-line, end of:         Options.             (line  58)
 * options, command-line, invoking awk:   Command Line.        (line   6)
+* options, command-line, processing:     Getopt Function.     (line   6)
+* options, deprecated:                   Obsolete.            (line   6)
 * options, long:                         Command Line.        (line  13)
-* options, command-line:                 Options.             (line   6)
 * options, long <1>:                     Options.             (line   6)
-* options, command-line, end of:         Options.             (line  58)
 * options, printing list of:             Options.             (line 175)
-* options, deprecated:                   Obsolete.            (line   6)
-* options, command-line, processing:     Getopt Function.     (line   6)
-* or:                                    Bitwise Functions.   (line  51)
+* or:                                    Bitwise Functions.   (line  50)
 * OR bitwise operation:                  Bitwise Functions.   (line   6)
 * or Boolean-logic operator:             Boolean Ops.         (line   6)
 * ord() extension function:              Extension Sample Ord.
@@ -38671,16 +38635,16 @@ Index
 * order of evaluation, concatenation:    Concatenation.       (line  41)
 * ORS variable:                          Output Separators.   (line  20)
 * ORS variable <1>:                      User-modified.       (line 121)
-* output, records:                       Output Separators.   (line  20)
+* output, buffering:                     I/O Functions.       (line  32)
+* output, buffering <1>:                 I/O Functions.       (line 166)
+* output, duplicating into files:        Tee Program.         (line   6)
+* output, files, closing:                Close Files And Pipes.
+                                                              (line   6)
 * output, format specifier, OFMT:        OFMT.                (line  15)
 * output, formatted:                     Printf.              (line   6)
 * output, pipes:                         Redirection.         (line  57)
+* output, records:                       Output Separators.   (line  20)
 * output, standard:                      Special FD.          (line   6)
-* output, files, closing:                Close Files And Pipes.
-                                                              (line   6)
-* output, buffering:                     I/O Functions.       (line  32)
-* output, buffering <1>:                 I/O Functions.       (line 168)
-* output, duplicating into files:        Tee Program.         (line   6)
 * output redirection:                    Redirection.         (line   6)
 * output wrapper:                        Output Wrappers.     (line   6)
 * output, nonfatal:                      Nonfatal.            (line   6)
@@ -38689,99 +38653,99 @@ Index
 * package, definition of:                Global Namespace.    (line  18)
 * Papadopoulos, Panos:                   Contributors.        (line 131)
 * parent process ID of gawk process:     Auto-set.            (line 251)
+* parentheses (), in a profile:          Profiling.           (line 146)
 * parentheses (), regexp operator:       Regexp Operator Details.
                                                               (line  77)
-* parentheses (), in a profile:          Profiling.           (line 146)
 * password file:                         Passwd Functions.    (line  16)
 * Path environment variable:             PC Binary Installation.
                                                               (line   6)
 * PATH environment variable:             Derived Files.       (line  94)
 * patsplit:                              String Functions.    (line 315)
-* patterns, default:                     Very Simple.         (line  34)
-* patterns, regexp constants as:         Regexp Usage.        (line   6)
 * patterns:                              Patterns and Actions.
                                                               (line   6)
-* patterns, types of:                    Pattern Overview.    (line  15)
-* patterns, regexp constants as <1>:     Regexp Patterns.     (line   6)
-* patterns, expressions as:              Expression Patterns. (line   6)
-* patterns, comparison expressions as:   Expression Patterns. (line  14)
-* patterns, regexp constants as <2>:     Expression Patterns. (line  34)
 * patterns, Boolean expressions as:      Expression Patterns. (line  39)
-* patterns, ranges in:                   Ranges.              (line   6)
-* patterns, empty:                       Empty.               (line   6)
+* patterns, comparison expressions as:   Expression Patterns. (line  14)
 * patterns, counts, in a profile:        Profiling.           (line 118)
-* pawk (profiling version of Brian Kernighan’s awk): Other Versions.
+* patterns, default:                     Very Simple.         (line  34)
+* patterns, empty:                       Empty.               (line   6)
+* patterns, expressions as:              Expression Patterns. (line   6)
+* patterns, ranges in:                   Ranges.              (line   6)
+* patterns, regexp constants as:         Regexp Usage.        (line   6)
+* patterns, regexp constants as <1>:     Regexp Patterns.     (line   6)
+* patterns, regexp constants as <2>:     Expression Patterns. (line  34)
+* patterns, types of:                    Pattern Overview.    (line  15)
+* pawk (profiling version of Brian Kernighan's awk): Other Versions.
                                                               (line  82)
 * pawk, awk-like facilities for Python:  Other Versions.      (line 161)
-* PC operating systems, gawk on, installing: PC Installation. (line   6)
 * PC operating systems, gawk on:         PC Using.            (line   6)
-* percent sign (%), %= operator:         Assignment Ops.      (line 129)
+* PC operating systems, gawk on, installing: PC Installation. (line   6)
 * percent sign (%), % operator:          Precedence.          (line  54)
+* percent sign (%), %= operator:         Assignment Ops.      (line 129)
 * percent sign (%), %= operator <1>:     Precedence.          (line  94)
 * performance, checking issues:          Performance bugs.    (line   6)
 * period (.), regexp operator:           Regexp Operator Details.
                                                               (line  40)
 * Perl:                                  Future Extensions.   (line   6)
-* persistent memory, compiled into gawk: Auto-set.            (line 246)
 * persistent memory:                     Persistent Memory.   (line   6)
+* persistent memory, compiled into gawk: Auto-set.            (line 246)
 * Peters, Arno:                          Contributors.        (line  88)
 * Peterson, Hal:                         Contributors.        (line  40)
-* pipe, input:                           Getline/Pipe.        (line  10)
-* pipe, output:                          Redirection.         (line  57)
 * pipe, closing:                         Close Files And Pipes.
                                                               (line   6)
+* pipe, input:                           Getline/Pipe.        (line  10)
+* pipe, output:                          Redirection.         (line  57)
 * pipe output, speeding up:              Noflush.             (line   6)
 * platform running on:                   Auto-set.            (line 224)
 * Plauger, P.J.:                         Library Functions.   (line  12)
 * plug-in:                               Extension Intro.     (line   6)
-* plus sign (+), regexp operator:        Regexp Operator Details.
-                                                              (line 107)
-* plus sign (+), += operator:            Assignment Ops.      (line  81)
+* plus sign (+), + operator:             Precedence.          (line  51)
+* plus sign (+), + operator <1>:         Precedence.          (line  57)
 * plus sign (+), ++ operator:            Increment Ops.       (line  11)
 * plus sign (+), ++ operator <1>:        Increment Ops.       (line  40)
 * plus sign (+), ++ operator <2>:        Precedence.          (line  45)
-* plus sign (+), + operator:             Precedence.          (line  51)
-* plus sign (+), + operator <1>:         Precedence.          (line  57)
+* plus sign (+), += operator:            Assignment Ops.      (line  81)
 * plus sign (+), += operator <1>:        Precedence.          (line  94)
+* plus sign (+), regexp operator:        Regexp Operator Details.
+                                                              (line 107)
 * PMA memory allocator:                  Auto-set.            (line 246)
 * PMA memory allocator <1>:              Persistent Memory.   (line   6)
 * PMA_VERBOSITY environment variable:    Other Environment Variables.
                                                               (line  29)
 * PMA_VERBOSITY environment variable <1>: Persistent Memory.  (line  94)
 * pointers to functions:                 Indirect Calls.      (line   6)
-* portability, #! (executable scripts):  Executable Scripts.  (line  29)
+* portability:                           Escape Sequences.    (line 119)
+* portability, ** operator and:          Arithmetic Ops.      (line  85)
+* portability, **= operator and:         Assignment Ops.      (line 144)
+* portability, #! (executable scripts):  Executable Scripts.  (line  28)
 * portability, ARGV variable:            Executable Scripts.  (line  55)
 * portability, backslash continuation and: Statements/Lines.  (line  30)
-* portability, POSIXLY_CORRECT environment variable: Options. (line 422)
-* portability:                           Escape Sequences.    (line 119)
 * portability, backslash in escape sequences: Escape Sequences.
-                                                              (line 124)
-* portability, data files as single record: gawk split records.
-                                                              (line  77)
-* portability, NF variable, decrementing: Changing Fields.    (line 115)
+                                                              (line 123)
 * portability, close() function and:     Close Files And Pipes.
                                                               (line  85)
-* portability, new awk vs. old awk:      Strings And Numbers. (line  56)
-* portability, ** operator and:          Arithmetic Ops.      (line  85)
-* portability, **= operator and:         Assignment Ops.      (line 145)
-* portability, operators:                Increment Ops.       (line  60)
-* portability, operators, not in POSIX awk: Precedence.       (line  97)
+* portability, data files as single record: gawk split records.
+                                                              (line  75)
 * portability, deleting array elements:  Delete.              (line  56)
-* portability, length() function:        String Functions.    (line 198)
-* portability, substr() function:        String Functions.    (line 542)
-* portability, functions, defining:      Definition Syntax.   (line 114)
-* portability, next statement in user-defined functions: Function Caveats.
-                                                              (line  26)
 * portability, example programs:         Library Functions.   (line  42)
+* portability, functions, defining:      Definition Syntax.   (line 114)
+* portability, gawk:                     New Ports.           (line   6)
 * portability, gettext library and:      Explaining gettext.  (line  11)
 * portability, internationalization and: I18N Portability.    (line   6)
-* portability, gawk:                     New Ports.           (line   6)
-* portable object, files, generating:    Options.             (line 168)
-* portable object, template files:       Explaining gettext.  (line  31)
+* portability, length() function:        String Functions.    (line 198)
+* portability, new awk vs. old awk:      Strings And Numbers. (line  55)
+* portability, next statement in user-defined functions: Function Caveats.
+                                                              (line  26)
+* portability, NF variable, decrementing: Changing Fields.    (line 115)
+* portability, operators:                Increment Ops.       (line  59)
+* portability, operators, not in POSIX awk: Precedence.       (line  97)
+* portability, POSIXLY_CORRECT environment variable: Options. (line 422)
+* portability, substr() function:        String Functions.    (line 542)
 * portable object, files:                Explaining gettext.  (line  37)
 * portable object, files <1>:            Translator i18n.     (line   6)
 * portable object, files, converting to message object files: I18N Example.
                                                               (line  80)
+* portable object, files, generating:    Options.             (line 168)
+* portable object, template files:       Explaining gettext.  (line  31)
 * porting gawk:                          New Ports.           (line   6)
 * positional specifiers, printf statement: Format Modifiers.  (line  13)
 * positional specifiers, printf statement <1>: Printf Ordering.
@@ -38789,52 +38753,52 @@ Index
 * positional specifiers, printf statement, mixing with regular formats: Printf 
Ordering.
                                                               (line  57)
 * POSIX, awk and:                        Preface.             (line  21)
-* POSIX, programs, implementing in awk:  Clones.              (line   6)
 * POSIX, gawk extensions not included in: POSIX/GNU.          (line   6)
+* POSIX, programs, implementing in awk:  Clones.              (line   6)
 * POSIX awk:                             This Manual.         (line  14)
-* POSIX awk, GNU long options and:       Options.             (line  15)
-* POSIX awk, backslashes in string constants: Escape Sequences.
-                                                              (line 124)
-* POSIX awk, period (.), using:          Regexp Operator Details.
-                                                              (line  47)
-* POSIX awk, regular expressions and:    Regexp Operator Details.
-                                                              (line 142)
-* POSIX awk, interval expressions in:    Interval Expressions.
-                                                              (line   6)
-* POSIX awk, bracket expressions and:    Bracket Expressions. (line  34)
-* POSIX awk, bracket expressions and, character classes: Bracket Expressions.
-                                                              (line  40)
-* POSIX awk, bracket expressions and, character classes <1>: Bracket 
Expressions.
-                                                              (line 113)
-* POSIX awk, field separators and:       Full Line Fields.    (line  16)
+* POSIX awk <1>:                         Assignment Ops.      (line 138)
+* POSIX awk, ** operator and:            Precedence.          (line  97)
+* POSIX awk, **= operator and:           Assignment Ops.      (line 144)
 * POSIX awk, < operator and:             Getline/File.        (line  26)
 * POSIX awk, | I/O operator and:         Getline/Pipe.        (line  56)
-* POSIX awk, OFMT variable and:          OFMT.                (line  32)
-* POSIX awk, printf format strings and:  Format Modifiers.    (line 157)
-* POSIX awk, OFMT variable and <1>:      Strings And Numbers. (line  56)
 * POSIX awk, arithmetic operators and:   Arithmetic Ops.      (line  30)
-* POSIX awk <1>:                         Assignment Ops.      (line 139)
-* POSIX awk, **= operator and:           Assignment Ops.      (line 145)
-* POSIX awk, numeric strings and:        Variable Typing.     (line  67)
-* POSIX awk, ** operator and:            Precedence.          (line  97)
+* POSIX awk, backslashes in string constants: Escape Sequences.
+                                                              (line 123)
 * POSIX awk, BEGIN/END patterns:         I/O And BEGIN/END.   (line  15)
+* POSIX awk, bracket expressions and:    Bracket Expressions. (line  34)
+* POSIX awk, bracket expressions and, character classes: Bracket Expressions.
+                                                              (line  40)
+* POSIX awk, bracket expressions and, character classes <1>: Bracket 
Expressions.
+                                                              (line 112)
 * POSIX awk, break statement and:        Break Statement.     (line  51)
+* POSIX awk, changes in awk versions:    POSIX.               (line   6)
 * POSIX awk, continue statement and:     Continue Statement.  (line  44)
-* POSIX awk, next/nextfile statements and: Next Statement.    (line  44)
 * POSIX awk, CONVFMT variable and:       User-modified.       (line  30)
-* POSIX awk, functions and, length():    String Functions.    (line 198)
-* POSIX awk, functions and, gsub()/sub(): Gory Details.       (line  95)
-* POSIX awk, timestamps and:             Time Functions.      (line   6)
 * POSIX awk, date utility and:           Time Functions.      (line 254)
+* POSIX awk, field separators and:       Full Line Fields.    (line  16)
 * POSIX awk, function keyword in:        Definition Syntax.   (line  99)
-* POSIX awk, changes in awk versions:    POSIX.               (line   6)
+* POSIX awk, functions and, gsub()/sub(): Gory Details.       (line  93)
+* POSIX awk, functions and, length():    String Functions.    (line 198)
+* POSIX awk, GNU long options and:       Options.             (line  15)
+* POSIX awk, interval expressions in:    Interval Expressions.
+                                                              (line   6)
+* POSIX awk, next/nextfile statements and: Next Statement.    (line  44)
+* POSIX awk, numeric strings and:        Variable Typing.     (line  67)
+* POSIX awk, OFMT variable and:          OFMT.                (line  32)
+* POSIX awk, OFMT variable and <1>:      Strings And Numbers. (line  55)
+* POSIX awk, period (.), using:          Regexp Operator Details.
+                                                              (line  47)
+* POSIX awk, printf format strings and:  Format Modifiers.    (line 157)
+* POSIX awk, regular expressions and:    Regexp Operator Details.
+                                                              (line 142)
+* POSIX awk, timestamps and:             Time Functions.      (line   6)
 * POSIX mode:                            Options.             (line 308)
 * POSIX mode <1>:                        Options.             (line 402)
 * POSIX mode <2>:                        Regexp Operator Details.
                                                               (line  47)
 * POSIX mode <3>:                        Input Summary.       (line  69)
 * POSIX mode <4>:                        Special Caveats.     (line   9)
-* POSIX mode <5>:                        Close Return Value.  (line  40)
+* POSIX mode <5>:                        Close Return Value.  (line  39)
 * POSIX mode <6>:                        Scalar Constants.    (line  63)
 * POSIX mode <7>:                        Locale influences conversions.
                                                               (line  41)
@@ -38855,14 +38819,14 @@ Index
 * POSIXLY_CORRECT environment variable <3>: Locale influences conversions.
                                                               (line  41)
 * PREC variable:                         User-modified.       (line 126)
+* precedence:                            Increment Ops.       (line  59)
+* precedence <1>:                        Precedence.          (line   6)
 * precedence, regexp operators:          Regexp Operator Details.
                                                               (line 137)
-* precedence:                            Increment Ops.       (line  60)
-* precedence <1>:                        Precedence.          (line   6)
-* predefined variables, -v option, setting with: Options.     (line  44)
 * predefined variables:                  Built-in Variables.  (line   6)
-* predefined variables, user-modifiable: User-modified.       (line   6)
+* predefined variables, -v option, setting with: Options.     (line  44)
 * predefined variables, conveying information: Auto-set.      (line   6)
+* predefined variables, user-modifiable: User-modified.       (line   6)
 * pretty printer, interaction with namespaces: Namespace And Features.
                                                               (line   9)
 * pretty printing:                       Options.             (line 273)
@@ -38871,10 +38835,10 @@ Index
 * print debugger command:                Viewing And Changing Data.
                                                               (line  39)
 * print statement:                       Printing.            (line  16)
+* print statement, BEGIN/END patterns and: I/O And BEGIN/END. (line  15)
 * print statement, commas, omitting:     Print Examples.      (line  30)
-* print statement, line continuations and: Print Examples.    (line  75)
 * print statement, I/O operators in:     Precedence.          (line  70)
-* print statement, BEGIN/END patterns and: I/O And BEGIN/END. (line  15)
+* print statement, line continuations and: Print Examples.    (line  75)
 * print statement, OFMT variable and:    User-modified.       (line 116)
 * print statement, sprintf() function and: Round Function.    (line   6)
 * print variables, in debugger:          Viewing And Changing Data.
@@ -38882,43 +38846,43 @@ Index
 * printf debugger command:               Viewing And Changing Data.
                                                               (line  57)
 * printf statement:                      Printing.            (line  16)
-* printf statement, columns, aligning:   Print Examples.      (line  69)
 * printf statement <1>:                  Printf.              (line   6)
-* printf statement, syntax of:           Basic Printf.        (line   6)
+* printf statement, columns, aligning:   Print Examples.      (line  69)
 * printf statement, format-control characters: Control Letters.
                                                               (line   6)
+* printf statement, I/O operators in:    Precedence.          (line  70)
 * printf statement, modifiers:           Format Modifiers.    (line   6)
 * printf statement, positional specifiers: Format Modifiers.  (line  13)
-* printf statement, I/O operators in:    Precedence.          (line  70)
-* printf statement, sprintf() function and: Round Function.   (line   6)
 * printf statement, positional specifiers <1>: Printf Ordering.
                                                               (line   6)
 * printf statement, positional specifiers, mixing with regular formats: Printf 
Ordering.
                                                               (line  57)
-* printing, list of options:             Options.             (line 175)
+* printf statement, sprintf() function and: Round Function.   (line   6)
+* printf statement, syntax of:           Basic Printf.        (line   6)
 * printing:                              Printing.            (line   6)
-* printing, user information:            Id Program.          (line   6)
-* printing, unduplicated lines of text:  Uniq Program.        (line   6)
+* printing, list of options:             Options.             (line 175)
 * printing, mailing labels:              Labels Program.      (line   6)
 * printing, messages from extensions:    Printing Messages.   (line   6)
+* printing, unduplicated lines of text:  Uniq Program.        (line   6)
+* printing, user information:            Id Program.          (line   6)
 * private variables:                     Library Names.       (line  11)
 * process group ID of gawk process:      Auto-set.            (line 240)
 * process ID of gawk process:            Auto-set.            (line 243)
 * processes, two-way communications with: Two-way I/O.        (line   6)
 * processing data:                       Basic High Level.    (line   6)
-* PROCINFO array, not flushing pipe buffers: Noflush.         (line   6)
-* PROCINFO array, nonfatal output:       Nonfatal.            (line   6)
 * PROCINFO array:                        Auto-set.            (line 148)
-* PROCINFO array, platform running on:   Auto-set.            (line 224)
-* PROCINFO array, values of sorted_in:   Controlling Scanning.
-                                                              (line  26)
 * PROCINFO array <1>:                    Time Functions.      (line  49)
 * PROCINFO array <2>:                    Passwd Functions.    (line   6)
+* PROCINFO array, communications via ptys and: Two-way I/O.   (line 114)
+* PROCINFO array, group membership and:  Group Functions.     (line   6)
+* PROCINFO array, nonfatal output:       Nonfatal.            (line   6)
+* PROCINFO array, not flushing pipe buffers: Noflush.         (line   6)
+* PROCINFO array, platform running on:   Auto-set.            (line 224)
 * PROCINFO array, testing the field splitting: Passwd Functions.
                                                               (line 154)
-* PROCINFO array, group membership and:  Group Functions.     (line   6)
 * PROCINFO array, user and group ID numbers and: Id Program.  (line  15)
-* PROCINFO array, communications via ptys and: Two-way I/O.   (line 114)
+* PROCINFO array, values of sorted_in:   Controlling Scanning.
+                                                              (line  26)
 * profiler, interaction with namespaces: Namespace And Features.
                                                               (line   9)
 * profiling awk programs:                Profiling.           (line   6)
@@ -38927,29 +38891,29 @@ Index
 * profiling, pretty printing, difference with: Profiling.     (line 235)
 * program identifiers:                   Auto-set.            (line 193)
 * program, definition of:                Getting Started.     (line  21)
+* programming, basic steps:              Basic High Level.    (line  21)
 * programming, concepts:                 Basic Concepts.      (line   6)
 * programming, concepts <1>:             Basic Concepts.      (line   6)
-* programming, basic steps:              Basic High Level.    (line  19)
-* programming conventions, exit statement: Exit Statement.    (line  38)
+* programming conventions, --non-decimal-data option: Nondecimal Data.
+                                                              (line  35)
 * programming conventions, ARGC/ARGV variables: Auto-set.     (line  35)
+* programming conventions, exit statement: Exit Statement.    (line  38)
+* programming conventions, function parameters: Return Statement.
+                                                              (line  44)
 * programming conventions, functions, calling: Calling Built-in.
                                                               (line  10)
 * programming conventions, functions, writing: Definition Syntax.
                                                               (line  71)
-* programming conventions, function parameters: Return Statement.
-                                                              (line  44)
-* programming conventions, private variable names: Library Names.
-                                                              (line  23)
-* programming conventions, --non-decimal-data option: Nondecimal Data.
-                                                              (line  35)
 * programming conventions, gawk extensions: Internal File Ops.
                                                               (line  45)
+* programming conventions, private variable names: Library Names.
+                                                              (line  23)
 * programming language, recipe for:      History.             (line   6)
+* programming languages, Ada:            Glossary.            (line  11)
 * programming languages, data-driven vs. procedural: Getting Started.
                                                               (line  12)
 * programming languages, Go:             Other Versions.      (line 125)
 * programming languages, Go <1>:         Other Versions.      (line 133)
-* programming languages, Ada:            Glossary.            (line  11)
 * programming languages, Java:           Glossary.            (line 466)
 * Proulx, Bob:                           Asking for help.     (line  23)
 * pwcat program:                         Passwd Functions.    (line  23)
@@ -38959,19 +38923,19 @@ Index
 * qualified name, definition of:         Qualified Names.     (line   6)
 * qualified name, use of:                Qualified Names.     (line  17)
 * Quanstrom, Erik:                       Alarm Program.       (line   8)
+* question mark (?), ?: operator:        Precedence.          (line  91)
 * question mark (?), regexp operator:    Regexp Operator Details.
                                                               (line 113)
 * question mark (?), regexp operator <1>: GNU Regexp Operators.
                                                               (line  61)
-* question mark (?), ?: operator:        Precedence.          (line  91)
 * QuikTrim Awk:                          Other Versions.      (line 178)
 * quit debugger command:                 Miscellaneous Debugger Commands.
                                                               (line 100)
 * QUIT signal (MS-Windows):              Profiling.           (line 220)
-* quoting, in gawk command lines:        Long.                (line  26)
 * quoting, for small awk programs:       Comments.            (line  27)
+* quoting, in gawk command lines:        Long.                (line  26)
+* quoting, in gawk command lines <1>:    Other Arguments.     (line  72)
 * quoting, in gawk command lines, tricks for: Quoting.        (line  91)
-* quoting, in gawk command lines <1>:    Other Arguments.     (line  73)
 * r debugger command (alias for run):    Debugger Execution Control.
                                                               (line  62)
 * Rakitzis, Byron:                       History Sorting.     (line  25)
@@ -38979,11 +38943,11 @@ Index
 * Ramey, Chet <1>:                       General Data Types.  (line   6)
 * Ramming, J. Christopher:               Other Versions.      (line 167)
 * rand:                                  Numeric Functions.   (line  33)
+* random numbers, Cliff:                 Cliff Random Function.
+                                                              (line   6)
 * random numbers, rand()/srand() functions: Numeric Functions.
                                                               (line  33)
 * random numbers, seed of:               Numeric Functions.   (line  63)
-* random numbers, Cliff:                 Cliff Random Function.
-                                                              (line   6)
 * range expressions (regexps):           Bracket Expressions. (line   6)
 * range patterns:                        Ranges.              (line   6)
 * range patterns, line continuation and: Ranges.              (line  64)
@@ -39007,19 +38971,19 @@ Index
                                                               (line  29)
 * recipe for a programming language:     History.             (line   6)
 * record separators:                     awk split records.   (line   6)
-* record separators, newlines as:        awk split records.   (line  12)
+* record separators <1>:                 User-modified.       (line 135)
 * record separators, changing:           awk split records.   (line  85)
+* record separators, newlines as:        awk split records.   (line  12)
 * record separators, regular expressions as: awk split records.
                                                               (line 118)
 * record separators, with multiline records: Multiple Line.   (line  10)
-* record separators <1>:                 User-modified.       (line 135)
 * records:                               Reading Files.       (line  14)
-* records, splitting input into:         Records.             (line   6)
-* records, terminating:                  awk split records.   (line 118)
-* records, treating files as:            gawk split records.  (line 104)
+* records <1>:                           Basic High Level.    (line  75)
 * records, multiline:                    Multiple Line.       (line   6)
 * records, printing:                     Print.               (line  22)
-* records <1>:                           Basic High Level.    (line  64)
+* records, splitting input into:         Records.             (line   6)
+* records, terminating:                  awk split records.   (line 118)
+* records, treating files as:            gawk split records.  (line 102)
 * recursive functions:                   Definition Syntax.   (line  89)
 * redirect gawk output, in debugger:     Debugger Info.       (line  73)
 * redirection, of input:                 Getline/File.        (line   6)
@@ -39029,50 +38993,50 @@ Index
                                                               (line  77)
 * regexp:                                Regexp.              (line   6)
 * regexp constants:                      Regexp Usage.        (line  57)
-* regexp constants, slashes vs. quotes:  Computed Regexps.    (line  30)
-* regexp constants, vs. string constants: Computed Regexps.   (line  40)
 * regexp constants <1>:                  Regexp Constants.    (line   6)
-* regexp constants, in gawk:             Standard Regexp Constants.
-                                                              (line  28)
-* regexp constants, /=.../, /= operator and: Assignment Ops.  (line 150)
 * regexp constants <2>:                  Comparison Operators.
-                                                              (line 104)
+                                                              (line 103)
+* regexp constants, /=.../, /= operator and: Assignment Ops.  (line 148)
 * regexp constants, as patterns:         Expression Patterns. (line  34)
+* regexp constants, in gawk:             Standard Regexp Constants.
+                                                              (line  28)
+* regexp constants, slashes vs. quotes:  Computed Regexps.    (line  30)
+* regexp constants, vs. string constants: Computed Regexps.   (line  40)
 * regexps, empty:                        Regexp Operator Details.
-                                                              (line 151)
+                                                              (line 150)
 * register loadable extension:           Registration Functions.
                                                               (line   6)
-* regular expressions, interval expressions and: Options.     (line 329)
 * regular expressions:                   Regexp.              (line   6)
-* regular expressions, as patterns:      Regexp Usage.        (line   6)
-* regular expressions, operators:        Regexp Usage.        (line  19)
-* regular expressions, operators <1>:    Regexp Operators.    (line   6)
 * regular expressions, anchors in:       Regexp Operator Details.
                                                               (line  18)
-* regular expressions, operators, precedence of: Regexp Operator Details.
-                                                              (line 137)
-* regular expressions, leftmost longest match: Leftmost Longest.
+* regular expressions, as field separators: Field Separators. (line  51)
+* regular expressions, as field separators <1>: Regexp Field Splitting.
                                                               (line   6)
+* regular expressions, as patterns:      Regexp Usage.        (line   6)
+* regular expressions, as patterns <1>:  Regexp Patterns.     (line   6)
+* regular expressions, as record separators: awk split records.
+                                                              (line 118)
+* regular expressions, case sensitivity: Case-sensitivity.    (line   6)
+* regular expressions, case sensitivity <1>: User-modified.   (line  79)
 * regular expressions, computed:         Computed Regexps.    (line   6)
 * regular expressions, dynamic:          Computed Regexps.    (line   6)
 * regular expressions, dynamic, with embedded newlines: Computed Regexps.
-                                                              (line  60)
-* regular expressions, operators, gawk:  GNU Regexp Operators.
-                                                              (line   6)
-* regular expressions, operators, for words: GNU Regexp Operators.
+                                                              (line  59)
+* regular expressions, gawk, command-line options: GNU Regexp Operators.
+                                                              (line  72)
+* regular expressions, interval expressions and: Options.     (line 329)
+* regular expressions, leftmost longest match: Leftmost Longest.
                                                               (line   6)
+* regular expressions, operators:        Regexp Usage.        (line  19)
+* regular expressions, operators <1>:    Regexp Operators.    (line   6)
 * regular expressions, operators, for buffers: GNU Regexp Operators.
                                                               (line  50)
-* regular expressions, gawk, command-line options: GNU Regexp Operators.
-                                                              (line  72)
-* regular expressions, case sensitivity: Case-sensitivity.    (line   6)
-* regular expressions, as record separators: awk split records.
-                                                              (line 118)
-* regular expressions, as field separators: Field Separators. (line  51)
-* regular expressions, as field separators <1>: Regexp Field Splitting.
+* regular expressions, operators, for words: GNU Regexp Operators.
                                                               (line   6)
-* regular expressions, as patterns <1>:  Regexp Patterns.     (line   6)
-* regular expressions, case sensitivity <1>: User-modified.   (line  79)
+* regular expressions, operators, gawk:  GNU Regexp Operators.
+                                                              (line   6)
+* regular expressions, operators, precedence of: Regexp Operator Details.
+                                                              (line 137)
 * regular expressions, searching for:    Egrep Program.       (line   6)
 * replace in string:                     String Functions.    (line 438)
 * retrying input:                        Retrying Input.      (line   6)
@@ -39086,36 +39050,36 @@ Index
 * revtwoway extension:                   Extension Sample Rev2way.
                                                               (line  12)
 * rewind() user-defined function:        Rewind Function.     (line  15)
+* right angle bracket (>), > operator:   Comparison Operators.
+                                                              (line  11)
+* right angle bracket (>), > operator <1>: Precedence.        (line  64)
 * right angle bracket (>), > operator (I/O): Redirection.     (line  22)
-* right angle bracket (>), >> operator (I/O): Redirection.    (line  50)
 * right angle bracket (>), >= operator:  Comparison Operators.
                                                               (line  11)
-* right angle bracket (>), > operator:   Comparison Operators.
-                                                              (line  11)
 * right angle bracket (>), >= operator <1>: Precedence.       (line  64)
-* right angle bracket (>), > operator <1>: Precedence.        (line  64)
+* right angle bracket (>), >> operator (I/O): Redirection.    (line  50)
 * right angle bracket (>), >> operator (I/O) <1>: Precedence. (line  64)
-* right shift, bitwise:                  Bitwise Functions.   (line  33)
+* right shift, bitwise:                  Bitwise Functions.   (line  32)
 * Ritchie, Dennis:                       Basic Data Typing.   (line  54)
 * RLENGTH variable:                      Auto-set.            (line 342)
 * RLENGTH variable, match() function and: String Functions.   (line 246)
-* Robbins, Miriam:                       Acknowledgments.     (line  94)
-* Robbins, Jean:                         Acknowledgments.     (line  94)
-* Robbins, Harry:                        Acknowledgments.     (line  94)
 * Robbins, Arnold:                       Command Line Field Separator.
                                                               (line  71)
-* Robbins, Bill:                         Getline/Pipe.        (line  40)
-* Robbins, Miriam <1>:                   Getline/Pipe.        (line  40)
 * Robbins, Arnold <1>:                   Getline/Pipe.        (line  40)
 * Robbins, Arnold <2>:                   Passwd Functions.    (line  90)
-* Robbins, Miriam <2>:                   Passwd Functions.    (line  90)
 * Robbins, Arnold <3>:                   Alarm Program.       (line   6)
-* Robbins, Malka:                        Internationalization.
-                                                              (line   6)
 * Robbins, Arnold <4>:                   General Data Types.  (line   6)
 * Robbins, Arnold <5>:                   Contributors.        (line 154)
 * Robbins, Arnold <6>:                   Maintainers.         (line  14)
 * Robbins, Arnold <7>:                   Future Extensions.   (line   6)
+* Robbins, Bill:                         Getline/Pipe.        (line  40)
+* Robbins, Harry:                        Acknowledgments.     (line  94)
+* Robbins, Jean:                         Acknowledgments.     (line  94)
+* Robbins, Malka:                        Internationalization.
+                                                              (line   6)
+* Robbins, Miriam:                       Acknowledgments.     (line  94)
+* Robbins, Miriam <1>:                   Getline/Pipe.        (line  40)
+* Robbins, Miriam <2>:                   Passwd Functions.    (line  90)
 * Rommel, Kai Uwe:                       Contributors.        (line  43)
 * round to nearest integer:              Numeric Functions.   (line  23)
 * round() user-defined function:         Round Function.      (line  16)
@@ -39124,13 +39088,13 @@ Index
 * ROUNDMODE variable <1>:                Setting the rounding mode.
                                                               (line   6)
 * RS variable:                           awk split records.   (line  12)
-* RS variable, multiline records and:    Multiple Line.       (line  17)
 * RS variable <1>:                       User-modified.       (line 135)
-* rshift:                                Bitwise Functions.   (line  55)
+* RS variable, multiline records and:    Multiple Line.       (line  17)
+* rshift:                                Bitwise Functions.   (line  54)
 * RSTART variable:                       Auto-set.            (line 348)
 * RSTART variable, match() function and: String Functions.    (line 246)
 * RT variable:                           awk split records.   (line 118)
-* RT variable <1>:                       gawk split records.  (line  66)
+* RT variable <1>:                       gawk split records.  (line  65)
 * RT variable <2>:                       Multiple Line.       (line 138)
 * RT variable <3>:                       Auto-set.            (line 355)
 * Rubin, Paul:                           History.             (line  34)
@@ -39157,13 +39121,13 @@ Index
 * Schreiber, Rita:                       Acknowledgments.     (line  38)
 * search and replace in strings:         String Functions.    (line  98)
 * search for substring:                  String Functions.    (line 174)
-* search paths, for source files:        AWKPATH Variable.    (line   6)
-* search paths, for loadable extensions: AWKLIBPATH Variable. (line   6)
 * search paths:                          Programs Exercises.  (line  70)
-* search paths, for source files <1>:    Programs Exercises.  (line  70)
 * search paths <1>:                      PC Using.            (line  12)
-* search paths, for source files <2>:    PC Using.            (line  12)
 * search paths <2>:                      OpenVMS Running.     (line  50)
+* search paths, for loadable extensions: AWKLIBPATH Variable. (line   6)
+* search paths, for source files:        AWKPATH Variable.    (line   6)
+* search paths, for source files <1>:    Programs Exercises.  (line  70)
+* search paths, for source files <2>:    PC Using.            (line  12)
 * search paths, for source files <3>:    OpenVMS Running.     (line  50)
 * searching, files for regular expressions: Egrep Program.    (line   6)
 * searching, for words:                  Dupword Program.     (line   6)
@@ -39171,26 +39135,26 @@ Index
 * sed utility <1>:                       Simple Sed.          (line   6)
 * sed utility <2>:                       Glossary.            (line  16)
 * seeding random number generator:       Numeric Functions.   (line  63)
+* semicolon (;), AWKPATH variable and:   PC Using.            (line  12)
+* semicolon (;), separating rules:       Statements/Lines.    (line 118)
 * semicolon (;), separating statements in actions: Statements/Lines.
                                                               (line 118)
-* semicolon (;), separating rules:       Statements/Lines.    (line 118)
 * semicolon (;), separating statements in actions <1>: Action Overview.
                                                               (line  19)
 * semicolon (;), separating statements in actions <2>: Statements.
                                                               (line  10)
-* semicolon (;), AWKPATH variable and:   PC Using.            (line  12)
+* separators, field:                     User-modified.       (line  53)
+* separators, field <1>:                 User-modified.       (line 116)
+* separators, field, FIELDWIDTHS variable and: User-modified. (line  37)
+* separators, field, FPAT variable and:  User-modified.       (line  46)
+* separators, field, FS variable and:    Default Field Splitting.
+                                                              (line   6)
 * separators, for records:               awk split records.   (line   6)
 * separators, for records <1>:           awk split records.   (line  85)
+* separators, for records <2>:           User-modified.       (line 135)
 * separators, for records, regular expressions as: awk split records.
                                                               (line 118)
-* separators, field, FS variable and:    Default Field Splitting.
-                                                              (line   6)
 * separators, for statements in actions: Action Overview.     (line  19)
-* separators, field, FIELDWIDTHS variable and: User-modified. (line  37)
-* separators, field, FPAT variable and:  User-modified.       (line  46)
-* separators, field:                     User-modified.       (line  53)
-* separators, field <1>:                 User-modified.       (line 116)
-* separators, for records <2>:           User-modified.       (line 135)
 * separators, subscript:                 User-modified.       (line 148)
 * set breakpoint:                        Breakpoint Control.  (line  11)
 * set debugger command:                  Viewing And Changing Data.
@@ -39199,100 +39163,100 @@ Index
 * set watchpoint:                        Viewing And Changing Data.
                                                               (line  70)
 * shadowing of variable values:          Definition Syntax.   (line  77)
-* shell function, gawkpath_default:      Shell Startup Files. (line  12)
-* shell function, gawkpath_prepend:      Shell Startup Files. (line  15)
-* shell function, gawkpath_append:       Shell Startup Files. (line  19)
+* shell function, gawklibpath_append:    Shell Startup Files. (line  29)
 * shell function, gawklibpath_default:   Shell Startup Files. (line  22)
 * shell function, gawklibpath_prepend:   Shell Startup Files. (line  25)
-* shell function, gawklibpath_append:    Shell Startup Files. (line  29)
+* shell function, gawkpath_append:       Shell Startup Files. (line  19)
+* shell function, gawkpath_default:      Shell Startup Files. (line  12)
+* shell function, gawkpath_prepend:      Shell Startup Files. (line  15)
 * shell quoting, rules for:              Quoting.             (line   6)
-* shell quoting, rules for <1>:          Other Arguments.     (line  73)
-* shells, scripts:                       One-shot.            (line  22)
+* shell quoting, rules for <1>:          Other Arguments.     (line  72)
+* shells, piping commands into:          Redirection.         (line 135)
+* shells, quoting:                       Using Shell Variables.
+                                                              (line  12)
 * shells, quoting, rules for:            Quoting.             (line  18)
+* shells, scripts:                       One-shot.            (line  22)
 * shells, sea:                           Undocumented.        (line   9)
-* shells, piping commands into:          Redirection.         (line 136)
 * shells, variables:                     Using Shell Variables.
                                                               (line   6)
-* shells, quoting:                       Using Shell Variables.
-                                                              (line  12)
-* shift, bitwise:                        Bitwise Functions.   (line  33)
+* shift, bitwise:                        Bitwise Functions.   (line  32)
 * short-circuit operators:               Boolean Ops.         (line  59)
-* show in debugger, function arguments:  Debugger Info.       (line  18)
+* show in debugger, all source files:    Debugger Info.       (line  45)
 * show in debugger, breakpoints:         Debugger Info.       (line  21)
+* show in debugger, function arguments:  Debugger Info.       (line  18)
 * show in debugger, local variables:     Debugger Info.       (line  34)
 * show in debugger, name of current source file: Debugger Info.
                                                               (line  37)
-* show in debugger, all source files:    Debugger Info.       (line  45)
 * show in debugger, watchpoints:         Debugger Info.       (line  51)
 * si debugger command (alias for stepi): Debugger Execution Control.
                                                               (line  75)
-* side effects, FILENAME variable:       Getline Notes.       (line  19)
 * side effects:                          Concatenation.       (line  41)
-* side effects, assignment expressions:  Assignment Ops.      (line  22)
 * side effects <1>:                      Increment Ops.       (line  11)
-* side effects, decrement/increment operators: Increment Ops. (line  11)
-* side effects <2>:                      Increment Ops.       (line  75)
-* side effects, Boolean operators:       Boolean Ops.         (line  30)
-* side effects, conditional expressions: Conditional Exp.     (line  22)
-* side effects, function calls:          Function Calls.      (line  57)
-* side effects, statements:              Action Overview.     (line  32)
+* side effects <2>:                      Increment Ops.       (line  74)
 * side effects, array indexing:          Reference to Elements.
                                                               (line  43)
-* side effects, match() function:        String Functions.    (line 246)
-* side effects, sub() function:          String Functions.    (line 492)
-* side effects, gsub() function:         String Functions.    (line 492)
 * side effects, asort() function:        Array Sorting Functions.
                                                               (line  24)
 * side effects, asorti() function:       Array Sorting Functions.
                                                               (line  24)
-* sidebar, Recipe for a Programming Language: History.        (line   6)
-* sidebar, Understanding #!:             Executable Scripts.  (line  27)
-* sidebar, Quoting Shell Variables On The awk Command Line: Other Arguments.
-                                                              (line  71)
+* side effects, assignment expressions:  Assignment Ops.      (line  22)
+* side effects, Boolean operators:       Boolean Ops.         (line  30)
+* side effects, conditional expressions: Conditional Exp.     (line  22)
+* side effects, decrement/increment operators: Increment Ops. (line  11)
+* side effects, FILENAME variable:       Getline Notes.       (line  19)
+* side effects, function calls:          Function Calls.      (line  57)
+* side effects, gsub() function:         String Functions.    (line 492)
+* side effects, match() function:        String Functions.    (line 246)
+* side effects, statements:              Action Overview.     (line  32)
+* side effects, sub() function:          String Functions.    (line 492)
+* sidebar, A Constant's Base Does Not Affect Its Value: Nondecimal-numbers.
+                                                              (line  63)
+* sidebar, A Note About Fuzzers:         Bug definition.      (line  70)
 * sidebar, Backslash Before Regular Characters: Escape Sequences.
                                                               (line 122)
-* sidebar, Escape Sequences for Metacharacters: Escape Sequences.
-                                                              (line 153)
-* sidebar, What About The Empty Regexp?: Regexp Operator Details.
-                                                              (line 149)
-* sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed 
Regexps.
-                                                              (line  58)
+* sidebar, Beware The Smoke and Mirrors!: Bitwise Functions.  (line 127)
+* sidebar, Carriage-Return-Line-Feed Line Endings In CSV Files: Comma 
Separated Fields.
+                                                              (line  45)
 * sidebar, Caveats When Using Regular Expressions for RS: gawk split records.
                                                               (line  50)
-* sidebar, RS = "\0" Is Not Portable:    gawk split records.  (line  75)
-* sidebar, Understanding $0:             Changing Fields.     (line 135)
-* sidebar, Carriage-Return–Line-Feed Line Endings In CSV Files: Comma 
Separated Fields.
-                                                              (line  46)
 * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
                                                               (line  14)
+* sidebar, Changing NR and FNR:          Auto-set.            (line 414)
+* sidebar, Controlling Output Buffering with system(): I/O Functions.
+                                                              (line 165)
+* sidebar, Escape Sequences for Metacharacters: Escape Sequences.
+                                                              (line 153)
 * sidebar, FS and IGNORECASE:            Field Splitting Summary.
                                                               (line  41)
+* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
+                                                              (line  73)
+* sidebar, Matching the Null String:     String Functions.    (line 573)
+* sidebar, Operator Evaluation Order:    Increment Ops.       (line  58)
 * sidebar, Piping into sh:               Redirection.         (line 134)
-* sidebar, A Constant’s Base Does Not Affect Its Value: Nondecimal-numbers.
-                                                              (line  63)
 * sidebar, Pre-POSIX awk Used OFMT for String Conversion: Strings And Numbers.
                                                               (line  54)
-* sidebar, Syntactic Ambiguities Between /= and Regular Expressions: 
Assignment Ops.
-                                                              (line 148)
-* sidebar, Operator Evaluation Order:    Increment Ops.       (line  58)
-* sidebar, Changing NR and FNR:          Auto-set.            (line 414)
-* sidebar, Matching the Null String:     String Functions.    (line 573)
-* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
-                                                              (line  73)
-* sidebar, Controlling Output Buffering with system(): I/O Functions.
-                                                              (line 166)
-* sidebar, Beware The Smoke and Mirrors!: Bitwise Functions.  (line 128)
+* sidebar, Quoting Shell Variables On The awk Command Line: Other Arguments.
+                                                              (line  71)
+* sidebar, Recipe for a Programming Language: History.        (line   6)
+* sidebar, Rounding Modes and Conversion: Setting the rounding mode.
+                                                              (line  65)
+* sidebar, RS = "\0" Is Not Portable:    gawk split records.  (line  74)
 * sidebar, So Why Does gawk Have BEGINFILE and ENDFILE?: Filetrans Function.
                                                               (line  83)
-* sidebar, Rounding Modes and Conversion: Setting the rounding mode.
-                                                              (line  66)
-* sidebar, A Note About Fuzzers:         Bug definition.      (line  70)
+* sidebar, Syntactic Ambiguities Between /= and Regular Expressions: 
Assignment Ops.
+                                                              (line 147)
+* sidebar, Understanding #!:             Executable Scripts.  (line  27)
+* sidebar, Understanding $0:             Changing Fields.     (line 135)
+* sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed 
Regexps.
+                                                              (line  58)
+* sidebar, What About The Empty Regexp?: Regexp Operator Details.
+                                                              (line 149)
 * SIGHUP signal, for dynamic profiling:  Profiling.           (line 217)
 * SIGINT signal (MS-Windows):            Profiling.           (line 220)
-* signals, USR1/SIGUSR1, for profiling:  Profiling.           (line 194)
 * signals, HUP/SIGHUP, for profiling:    Profiling.           (line 217)
 * signals, INT/SIGINT (MS-Windows):      Profiling.           (line 220)
 * signals, QUIT/SIGQUIT (MS-Windows):    Profiling.           (line 220)
+* signals, USR1/SIGUSR1, for profiling:  Profiling.           (line 194)
 * signature program:                     Signature Program.   (line   6)
 * SIGQUIT signal (MS-Windows):           Profiling.           (line 220)
 * SIGUSR1 signal, for dynamic profiling: Profiling.           (line 194)
@@ -39302,10 +39266,10 @@ Index
 * sine:                                  Numeric Functions.   (line  74)
 * single quote ('):                      One-shot.            (line  15)
 * single quote ('), in gawk command lines: Long.              (line  35)
-* single quote ('), vs. apostrophe:      Comments.            (line  27)
 * single quote ('), in shell commands:   Quoting.             (line  48)
+* single quote ('), vs. apostrophe:      Comments.            (line  27)
 * single quote ('), with double quotes:  Quoting.             (line  73)
-* single records, treating files as:     gawk split records.  (line 104)
+* single records, treating files as:     gawk split records.  (line 102)
 * single-character fields:               Single Character Fields.
                                                               (line   6)
 * single-precision:                      Computer Arithmetic. (line  61)
@@ -39325,37 +39289,37 @@ Index
 * sort utility, coprocesses and:         Two-way I/O.         (line  66)
 * sorting characters in different languages: Explaining gettext.
                                                               (line  94)
-* source code, mixing:                   Options.             (line 120)
-* source code, gawk:                     Gawk Distribution.   (line   6)
-* source code, Brian Kernighan’s awk:    Other Versions.      (line  13)
-* source code, mawk:                     Other Versions.      (line  39)
 * source code, awka:                     Other Versions.      (line  64)
-* source code, pawk (profiling version of Brian Kernighan’s awk): Other 
Versions.
-                                                              (line  82)
+* source code, awkcc:                    Other Versions.      (line 167)
+* source code, AWKgo:                    Other Versions.      (line 133)
+* source code, Brian Kernighan's awk:    Other Versions.      (line  13)
 * source code, BusyBox Awk:              Other Versions.      (line  92)
-* source code, Solaris awk:              Other Versions.      (line 100)
-* source code, Illumos awk:              Other Versions.      (line 109)
+* source code, cppawk:                   Other Versions.      (line 190)
+* source code, embeddable awk interpreter: Other Versions.    (line 156)
 * source code, frawk:                    Other Versions.      (line 117)
+* source code, gawk:                     Gawk Distribution.   (line   6)
 * source code, goawk:                    Other Versions.      (line 125)
-* source code, AWKgo:                    Other Versions.      (line 133)
+* source code, Illumos awk:              Other Versions.      (line 109)
 * source code, jawk:                     Other Versions.      (line 140)
 * source code, libmawk:                  Other Versions.      (line 153)
-* source code, embeddable awk interpreter: Other Versions.    (line 156)
+* source code, mawk:                     Other Versions.      (line  39)
+* source code, mixing:                   Options.             (line 120)
+* source code, pawk (profiling version of Brian Kernighan's awk): Other 
Versions.
+                                                              (line  82)
 * source code, pawk (Python version):    Other Versions.      (line 161)
-* source code, awkcc:                    Other Versions.      (line 167)
 * source code, QSE awk:                  Other Versions.      (line 174)
 * source code, QuikTrim Awk:             Other Versions.      (line 178)
-* source code, cppawk:                   Other Versions.      (line 190)
+* source code, Solaris awk:              Other Versions.      (line 100)
 * source file, show in debugger:         Debugger Info.       (line  37)
 * source files, search path for:         Programs Exercises.  (line  70)
-* sparse arrays:                         Array Intro.         (line  76)
+* sparse arrays:                         Array Intro.         (line  78)
 * Spencer, Henry:                        Glossary.            (line  16)
 * Spengler, Egon:                        Gory Details.        (line   6)
 * split:                                 String Functions.    (line 336)
 * split string into array:               String Functions.    (line 315)
 * split utility:                         Split Program.       (line   6)
-* split() function, array elements, deleting: Delete.         (line  61)
 * split.awk program:                     Split Program.       (line  51)
+* split() function, array elements, deleting: Delete.         (line  61)
 * sprintf:                               OFMT.                (line  15)
 * sprintf <1>:                           String Functions.    (line 413)
 * sprintf() function, print/printf statements and: Round Function.
@@ -39377,63 +39341,63 @@ Index
 * starting the debugger:                 Debugger Invocation. (line   6)
 * stat() extension function:             Extension Sample File Functions.
                                                               (line  18)
-* statements, multiple:                  Statements/Lines.    (line 118)
-* statements, control, in actions:       Statements.          (line   6)
 * statements, compound, control statements and: Statements.   (line  10)
+* statements, control, in actions:       Statements.          (line   6)
+* statements, multiple:                  Statements/Lines.    (line 118)
 * step debugger command:                 Debugger Execution Control.
                                                               (line  68)
 * stepi debugger command:                Debugger Execution Control.
                                                               (line  75)
 * stop automatic display, in debugger:   Viewing And Changing Data.
                                                               (line  83)
+* STR_CHAIN_MAX environment variable:    Other Environment Variables.
+                                                              (line  91)
 * stream editors:                        Full Line Fields.    (line  22)
 * stream editors <1>:                    Simple Sed.          (line   6)
 * strftime:                              Time Functions.      (line  50)
-* string, constants, vs. regexp constants: Computed Regexps.  (line  40)
 * string, constants:                     Scalar Constants.    (line  15)
-* string, operators:                     Concatenation.       (line   9)
-* string, length:                        String Functions.    (line 189)
-* string, regular expression match of:   String Functions.    (line 229)
+* string, constants, vs. regexp constants: Computed Regexps.  (line  40)
 * string, extraction (internationalization): String Extraction.
                                                               (line   6)
+* string, length:                        String Functions.    (line 189)
+* string, operators:                     Concatenation.       (line   9)
+* string, regular expression match of:   String Functions.    (line 229)
 * string-manipulation functions:         String Functions.    (line   6)
 * string-matching operators:             Regexp Usage.        (line  19)
 * string-translation functions:          I18N Functions.      (line   6)
-* strings, empty:                        awk split records.   (line 108)
-* strings, null:                         Regexp Field Splitting.
-                                                              (line  42)
-* strings, length limitations:           Scalar Constants.    (line  20)
 * strings, continuation across lines:    Scalar Constants.    (line  53)
 * strings, converting:                   Strings And Numbers. (line   6)
-* strings, numeric:                      Variable Typing.     (line  67)
+* strings, converting <1>:               Bitwise Functions.   (line 109)
 * strings, converting, numbers to:       User-modified.       (line  30)
 * strings, converting, numbers to <1>:   User-modified.       (line 107)
-* strings, splitting, example:           String Functions.    (line 355)
 * strings, converting letter case:       String Functions.    (line 552)
-* strings, converting <1>:               Bitwise Functions.   (line 110)
-* strings, merging arrays into:          Join Function.       (line   6)
-* strings, for localization:             Programmer i18n.     (line  13)
+* strings, empty:                        awk split records.   (line 108)
 * strings, extracting:                   String Extraction.   (line   6)
+* strings, for localization:             Programmer i18n.     (line  13)
+* strings, length limitations:           Scalar Constants.    (line  20)
+* strings, merging arrays into:          Join Function.       (line   6)
+* strings, null:                         Regexp Field Splitting.
+                                                              (line  42)
+* strings, numeric:                      Variable Typing.     (line  67)
+* strings, splitting, example:           String Functions.    (line 355)
 * strptime() extension function:         Extension Sample Time.
                                                               (line  31)
 * strtonum:                              String Functions.    (line 420)
 * strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
                                                               (line  35)
-* STR_CHAIN_MAX environment variable:    Other Environment Variables.
-                                                              (line  91)
 * sub:                                   Standard Regexp Constants.
                                                               (line  43)
 * sub <1>:                               String Functions.    (line 438)
 * sub() function, arguments of:          String Functions.    (line 492)
 * sub() function, escape processing:     Gory Details.        (line   6)
 * subscript separators:                  User-modified.       (line 148)
+* subscripts in arrays, multidimensional: Multidimensional.   (line  10)
+* subscripts in arrays, multidimensional, scanning: Multiscanning.
+                                                              (line  11)
 * subscripts in arrays, numbers as:      Numeric Array Subscripts.
                                                               (line   6)
 * subscripts in arrays, uninitialized variables as: Uninitialized Subscripts.
                                                               (line   6)
-* subscripts in arrays, multidimensional: Multidimensional.   (line  10)
-* subscripts in arrays, multidimensional, scanning: Multiscanning.
-                                                              (line  11)
 * SUBSEP variable:                       User-modified.       (line 148)
 * SUBSEP variable, multidimensional arrays and: Multidimensional.
                                                               (line  16)
@@ -39445,32 +39409,32 @@ Index
 * switch statement:                      Switch Statement.    (line   6)
 * SYMTAB array:                          Auto-set.            (line 359)
 * syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
-                                                              (line 150)
+                                                              (line 149)
 * system:                                I/O Functions.       (line 105)
 * systime:                               Time Functions.      (line  67)
 * t debugger command (alias for tbreak): Breakpoint Control.  (line  90)
 * tbreak debugger command:               Breakpoint Control.  (line  90)
 * Tcl:                                   Library Names.       (line  58)
-* TCP/IP, support for:                   Special Network.     (line   6)
 * TCP/IP:                                TCP/IP Networking.   (line   6)
+* TCP/IP, support for:                   Special Network.     (line   6)
 * tee utility:                           Tee Program.         (line   6)
 * tee.awk program:                       Tee Program.         (line  26)
 * temporary breakpoint:                  Breakpoint Control.  (line  90)
 * terminating records:                   awk split records.   (line 118)
-* testbits.awk program:                  Bitwise Functions.   (line  70)
+* testbits.awk program:                  Bitwise Functions.   (line  69)
 * testext extension:                     Extension Sample API Tests.
                                                               (line   6)
 * Texinfo:                               Conventions.         (line   6)
-* Texinfo, chapter beginnings in files:  Regexp Operator Details.
-                                                              (line  18)
 * Texinfo <1>:                           Library Functions.   (line  33)
 * Texinfo <2>:                           Dupword Program.     (line  17)
-* Texinfo, extracting programs from source files: Extract Program.
-                                                              (line   6)
 * Texinfo <3>:                           Extract Program.     (line  12)
 * Texinfo <4>:                           Distribution contents.
                                                               (line  89)
 * Texinfo <5>:                           Adding Code.         (line 113)
+* Texinfo, chapter beginnings in files:  Regexp Operator Details.
+                                                              (line  18)
+* Texinfo, extracting programs from source files: Extract Program.
+                                                              (line   6)
 * text, printing:                        Print.               (line  22)
 * text, printing, unduplicated lines of: Uniq Program.        (line   6)
 * TEXTDOMAIN variable:                   User-modified.       (line 154)
@@ -39487,14 +39451,14 @@ Index
 * tilde (~), ~ operator <4>:             Comparison Operators.
                                                               (line  11)
 * tilde (~), ~ operator <5>:             Comparison Operators.
-                                                              (line  99)
+                                                              (line  98)
 * tilde (~), ~ operator <6>:             Precedence.          (line  79)
 * tilde (~), ~ operator <7>:             Expression Patterns. (line  24)
-* time, retrieving:                      Time Functions.      (line  17)
-* time, managing:                        Getlocaltime Function.
-                                                              (line   6)
 * time, alarm clock example program:     Alarm Program.       (line  11)
 * time, localization and:                Explaining gettext.  (line 112)
+* time, managing:                        Getlocaltime Function.
+                                                              (line   6)
+* time, retrieving:                      Time Functions.      (line  17)
 * time functions:                        Time Functions.      (line   6)
 * timeout, reading input:                Read Timeout.        (line   6)
 * timestamps:                            Time Functions.      (line   6)
@@ -39502,8 +39466,8 @@ Index
 * timestamps, converting dates to:       Time Functions.      (line  77)
 * timestamps, formatted:                 Getlocaltime Function.
                                                               (line   6)
-* tocsv() user-defined function:         To CSV Function.     (line  21)
 * tocsv_rec() user-defined function:     To CSV Function.     (line  54)
+* tocsv() user-defined function:         To CSV Function.     (line  21)
 * tolower:                               String Functions.    (line 553)
 * toupper:                               String Functions.    (line 559)
 * tr utility:                            Translate Program.   (line   6)
@@ -39513,39 +39477,39 @@ Index
 * traceback, display in debugger:        Execution Stack.     (line  13)
 * translate string:                      I18N Functions.      (line  21)
 * translate.awk program:                 Translate Program.   (line  55)
-* treating files, as single records:     gawk split records.  (line 104)
-* troubleshooting, typographical errors, global variables: Options.
-                                                              (line 102)
+* treating files, as single records:     gawk split records.  (line 102)
 * troubleshooting, --non-decimal-data option: Options.        (line 261)
+* troubleshooting, == operator:          Comparison Operators.
+                                                              (line  37)
+* troubleshooting, awk uses FS not IFS:  Field Separators.    (line  30)
 * troubleshooting, backslash before nonspecial character: Escape Sequences.
                                                               (line 124)
-* troubleshooting, regexp constants vs. string constants: Computed Regexps.
-                                                              (line  40)
-* troubleshooting, awk uses FS not IFS:  Field Separators.    (line  30)
+* troubleshooting, division:             Arithmetic Ops.      (line  44)
 * troubleshooting, fatal errors, field widths, specifying: Fixed width data.
                                                               (line  17)
-* troubleshooting, print statement, omitting commas: Print Examples.
-                                                              (line  30)
 * troubleshooting, fatal errors, printf format strings: Format Modifiers.
                                                               (line 157)
-* troubleshooting, printing:             Redirection.         (line 112)
-* troubleshooting, quotes with file names: Special FD.        (line  62)
-* troubleshooting, division:             Arithmetic Ops.      (line  44)
-* troubleshooting, string concatenation: Concatenation.       (line  27)
-* troubleshooting, == operator:          Comparison Operators.
-                                                              (line  38)
+* troubleshooting, fflush() function:    I/O Functions.       (line  62)
 * troubleshooting, function call syntax: Function Calls.      (line  30)
+* troubleshooting, gawk:                 Compatibility Mode.  (line   6)
+* troubleshooting, gawk, bug reports:    Bugs.                (line   9)
 * troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
                                                               (line  16)
-* troubleshooting, match() function:     String Functions.    (line 310)
+* troubleshooting, getline command:      File Checking.       (line  25)
 * troubleshooting, gsub()/sub() functions: String Functions.  (line 502)
+* troubleshooting, match() function:     String Functions.    (line 310)
+* troubleshooting, print statement, omitting commas: Print Examples.
+                                                              (line  30)
+* troubleshooting, printing:             Redirection.         (line 112)
+* troubleshooting, quotes with file names: Special FD.        (line  62)
+* troubleshooting, readable data files:  File Checking.       (line   6)
+* troubleshooting, regexp constants vs. string constants: Computed Regexps.
+                                                              (line  40)
+* troubleshooting, string concatenation: Concatenation.       (line  27)
 * troubleshooting, substr() function:    String Functions.    (line 529)
-* troubleshooting, fflush() function:    I/O Functions.       (line  62)
 * troubleshooting, system() function:    I/O Functions.       (line 127)
-* troubleshooting, readable data files:  File Checking.       (line   6)
-* troubleshooting, getline command:      File Checking.       (line  25)
-* troubleshooting, gawk, bug reports:    Bugs.                (line   9)
-* troubleshooting, gawk:                 Compatibility Mode.  (line   6)
+* troubleshooting, typographical errors, global variables: Options.
+                                                              (line 102)
 * true, logical:                         Truth Values.        (line   6)
 * Trueman, David:                        History.             (line  34)
 * Trueman, David <1>:                    Acknowledgments.     (line  47)
@@ -39562,9 +39526,9 @@ Index
 * unassigned array elements:             Reference to Elements.
                                                               (line  18)
 * undefined functions:                   Function Caveats.    (line   6)
+* underscore (_), C macro:               Explaining gettext.  (line  71)
 * underscore (_), in names of private variables: Library Names.
                                                               (line  29)
-* underscore (_), C macro:               Explaining gettext.  (line  71)
 * underscore (_), translatable strings:  Programmer i18n.     (line  69)
 * undisplay debugger command:            Viewing And Changing Data.
                                                               (line  83)
@@ -39576,13 +39540,13 @@ Index
                                                               (line   6)
 * uniq utility:                          Uniq Program.        (line   6)
 * uniq.awk program:                      Uniq Program.        (line  51)
-* Unix, awk scripts and:                 Executable Scripts.  (line   6)
 * Unix:                                  Glossary.            (line 747)
+* Unix, awk scripts and:                 Executable Scripts.  (line   6)
 * Unix awk, backslashes in escape sequences: Escape Sequences.
                                                               (line 136)
+* Unix awk, close() function and:        Close Return Value.  (line   6)
 * Unix awk, password files, field separators and: Command Line Field Separator.
                                                               (line  62)
-* Unix awk, close() function and:        Close Return Value.  (line   6)
 * unsigned integers:                     Computer Arithmetic. (line  41)
 * until debugger command:                Debugger Execution Control.
                                                               (line  82)
@@ -39591,57 +39555,58 @@ Index
 * up debugger command:                   Execution Stack.     (line  36)
 * uppercase names, namespace for:        Default Namespace.   (line  10)
 * user database, reading:                Passwd Functions.    (line   6)
-* user-defined, variables:               Variables.           (line   6)
-* user-defined, function, bits2str():    Bitwise Functions.   (line  70)
-* user-defined, functions:               User-defined.        (line   6)
-* user-defined, function, rev():         Function Example.    (line  54)
-* user-defined, function, ctime():       Function Example.    (line  74)
+* user-defined, function, _gr_init():    Group Functions.     (line  83)
+* user-defined, function, _ord_init():   Ordinal Functions.   (line  16)
+* user-defined, function, _pw_init():    Passwd Functions.    (line 105)
 * user-defined, function, assert():      Assert Function.     (line  28)
-* user-defined, function, round():       Round Function.      (line  16)
+* user-defined, function, beginfile():   Filetrans Function.  (line  62)
+* user-defined, function, bits2str():    Bitwise Functions.   (line  69)
+* user-defined, function, chr():         Ordinal Functions.   (line  16)
 * user-defined, function, cliff_rand():  Cliff Random Function.
                                                               (line  12)
-* user-defined, function, ord():         Ordinal Functions.   (line  16)
-* user-defined, function, chr():         Ordinal Functions.   (line  16)
-* user-defined, function, _ord_init():   Ordinal Functions.   (line  16)
-* user-defined, function, join():        Join Function.       (line  18)
+* user-defined, function, ctime():       Function Example.    (line  74)
+* user-defined, function, endfile():     Filetrans Function.  (line  62)
+* user-defined, function, endgrent():    Group Functions.     (line 214)
+* user-defined, function, endpwent():    Passwd Functions.    (line 210)
+* user-defined, function, getgrent():    Group Functions.     (line   6)
+* user-defined, function, getgrent() <1>: Group Functions.    (line 203)
+* user-defined, function, getgrgid():    Group Functions.     (line 185)
+* user-defined, function, getgrnam():    Group Functions.     (line 176)
+* user-defined, function, getgruser():   Group Functions.     (line 194)
 * user-defined, function, getlocaltime(): Getlocaltime Function.
                                                               (line  16)
-* user-defined, function, readfile():    Readfile Function.   (line  30)
-* user-defined, function, isnumeric():   Isnumeric Function.  (line  11)
-* user-defined, function, beginfile():   Filetrans Function.  (line  62)
-* user-defined, function, endfile():     Filetrans Function.  (line  62)
-* user-defined, function, rewind():      Rewind Function.     (line  15)
 * user-defined, function, getopt():      Getopt Function.     (line 117)
 * user-defined, function, getopt() <1>:  Getopt Function.     (line 144)
 * user-defined, function, getpwent():    Passwd Functions.    (line  16)
-* user-defined, function, _pw_init():    Passwd Functions.    (line 105)
+* user-defined, function, getpwent() <1>: Passwd Functions.   (line 199)
 * user-defined, function, getpwnam():    Passwd Functions.    (line 179)
 * user-defined, function, getpwuid():    Passwd Functions.    (line 189)
-* user-defined, function, getpwent() <1>: Passwd Functions.   (line 199)
-* user-defined, function, endpwent():    Passwd Functions.    (line 210)
-* user-defined, function, getgrent():    Group Functions.     (line   6)
-* user-defined, function, _gr_init():    Group Functions.     (line  83)
-* user-defined, function, getgrnam():    Group Functions.     (line 176)
-* user-defined, function, getgrgid():    Group Functions.     (line 185)
-* user-defined, function, getgruser():   Group Functions.     (line 194)
-* user-defined, function, getgrent() <1>: Group Functions.    (line 203)
-* user-defined, function, endgrent():    Group Functions.     (line 214)
+* user-defined, function, isnumeric():   Isnumeric Function.  (line  11)
+* user-defined, function, join():        Join Function.       (line  18)
+* user-defined, function, ord():         Ordinal Functions.   (line  16)
+* user-defined, function, readfile():    Readfile Function.   (line  30)
+* user-defined, function, rev():         Function Example.    (line  54)
+* user-defined, function, rewind():      Rewind Function.     (line  15)
+* user-defined, function, round():       Round Function.      (line  16)
 * user-defined, function, walk_array():  Walking Arrays.      (line  14)
+* user-defined, functions:               User-defined.        (line   6)
 * user-defined, functions, counts, in a profile: Profiling.   (line 137)
+* user-defined, variables:               Variables.           (line   6)
 * user-modifiable variables:             User-modified.       (line   6)
-* users, information about, retrieving:  Passwd Functions.    (line  16)
 * users, information about, printing:    Id Program.          (line   6)
+* users, information about, retrieving:  Passwd Functions.    (line  16)
 * USR1 signal, for dynamic profiling:    Profiling.           (line 194)
+* values, numeric:                       Basic Data Typing.   (line  13)
 * values, regexp:                        Strong Regexp Constants.
                                                               (line  24)
-* values, numeric:                       Basic Data Typing.   (line  13)
 * values, string:                        Basic Data Typing.   (line  13)
 * variable assignments and input files:  Other Arguments.     (line  34)
 * variable type, typeof() function (gawk): Type Functions.    (line  14)
 * variables:                             Other Features.      (line   6)
-* variables, setting:                    Options.             (line  36)
-* variables, predefined, -v option, setting with: Options.    (line  44)
-* variables, global, printing list of:   Options.             (line  97)
+* variables <1>:                         Basic Data Typing.   (line   6)
+* variables, assigning on command line:  Assignment Options.  (line   6)
+* variables, built-in:                   Using Variables.     (line  23)
+* variables, flag:                       Boolean Ops.         (line  69)
 * variables, getline command into, using: Getline/Variable.   (line   6)
 * variables, getline command into, using <1>: Getline/Variable/File.
                                                               (line   6)
@@ -39649,36 +39614,35 @@ Index
                                                               (line   6)
 * variables, getline command into, using <3>: Getline/Variable/Coprocess.
                                                               (line   6)
-* variables, user-defined:               Variables.           (line   6)
-* variables, built-in:                   Using Variables.     (line  23)
+* variables, global, for library functions: Library Names.    (line  11)
+* variables, global, printing list of:   Options.             (line  97)
 * variables, initializing:               Using Variables.     (line  23)
-* variables, assigning on command line:  Assignment Options.  (line   6)
+* variables, local to a function:        Variable Scope.      (line   6)
+* variables, predefined:                 Built-in Variables.  (line   6)
+* variables, predefined, -v option, setting with: Options.    (line  44)
+* variables, predefined, conveying information: Auto-set.     (line   6)
+* variables, private:                    Library Names.       (line  11)
+* variables, setting:                    Options.             (line  36)
+* variables, shadowing:                  Definition Syntax.   (line  77)
 * variables, types of:                   Assignment Ops.      (line  39)
 * variables, types of, comparison expressions and: Typing and Comparison.
                                                               (line   9)
-* variables, flag:                       Boolean Ops.         (line  69)
-* variables, predefined:                 Built-in Variables.  (line   6)
-* variables, predefined, conveying information: Auto-set.     (line   6)
 * variables, uninitialized, as array subscripts: Uninitialized Subscripts.
                                                               (line   6)
-* variables, shadowing:                  Definition Syntax.   (line  77)
-* variables, local to a function:        Variable Scope.      (line   6)
-* variables, global, for library functions: Library Names.    (line  11)
-* variables, private:                    Library Names.       (line  11)
-* variables <1>:                         Basic Data Typing.   (line   6)
+* variables, user-defined:               Variables.           (line   6)
 * version of, gawk:                      Auto-set.            (line 262)
+* version of, gawk extension API:        Auto-set.            (line 287)
 * version of, GNU MP library:            Auto-set.            (line 270)
 * version of, GNU MPFR library:          Auto-set.            (line 272)
-* version of, gawk extension API:        Auto-set.            (line 287)
 * vertical bar (|):                      Regexp Operator Details.
                                                               (line  66)
 * vertical bar (|), | operator (I/O):    Getline/Pipe.        (line  10)
-* vertical bar (|), |& operator (I/O):   Getline/Coprocess.   (line   6)
-* vertical bar (|), || operator:         Boolean Ops.         (line  59)
 * vertical bar (|), | operator (I/O) <1>: Precedence.         (line  64)
+* vertical bar (|), |& operator (I/O):   Getline/Coprocess.   (line   6)
 * vertical bar (|), |& operator (I/O) <1>: Precedence.        (line  64)
-* vertical bar (|), || operator <1>:     Precedence.          (line  88)
 * vertical bar (|), |& operator (I/O) <2>: Two-way I/O.       (line  27)
+* vertical bar (|), || operator:         Boolean Ops.         (line  59)
+* vertical bar (|), || operator <1>:     Precedence.          (line  88)
 * Vinschen, Corinna:                     Acknowledgments.     (line  60)
 * w debugger command (alias for watch):  Viewing And Changing Data.
                                                               (line  70)
@@ -39702,22 +39666,22 @@ Index
 * Weinberger, Peter <1>:                 Contributors.        (line  12)
 * where debugger command (alias for backtrace): Execution Stack.
                                                               (line  13)
-* while statement, use of regexps in:    Regexp Usage.        (line  19)
 * while statement:                       While Statement.     (line   6)
-* whitespace, newlines as:               Options.             (line 314)
-* whitespace, definition of:             Fields.              (line   6)
+* while statement, use of regexps in:    Regexp Usage.        (line  19)
 * whitespace, as field separators:       Default Field Splitting.
                                                               (line   6)
+* whitespace, definition of:             Fields.              (line   6)
 * whitespace, functions, calling:        Calling Built-in.    (line  10)
+* whitespace, newlines as:               Options.             (line 314)
 * Williams, Kent:                        Contributors.        (line  35)
 * Woehlke, Matthew:                      Contributors.        (line  82)
 * Woods, John:                           Contributors.        (line  28)
 * word boundaries, matching:             GNU Regexp Operators.
                                                               (line  38)
-* word, regexp definition of:            GNU Regexp Operators.
-                                                              (line   6)
 * word-boundary operator (gawk):         GNU Regexp Operators.
                                                               (line  65)
+* word, regexp definition of:            GNU Regexp Operators.
+                                                              (line   6)
 * wordfreq.awk program:                  Word Sorting.        (line  56)
 * words, counting:                       Wc Program.          (line   6)
 * words, duplicate, searching for:       Dupword Program.     (line   6)
@@ -39727,7 +39691,7 @@ Index
 * writeall() extension function:         Extension Sample Read write array.
                                                               (line  24)
 * xgettext utility:                      String Extraction.   (line  13)
-* xor:                                   Bitwise Functions.   (line  58)
+* xor:                                   Bitwise Functions.   (line  57)
 * XOR bitwise operation:                 Bitwise Functions.   (line   6)
 * Yawitz, Efraim:                        Contributors.        (line 134)
 * Zaretskii, Eli:                        Acknowledgments.     (line  60)
@@ -39739,626 +39703,626 @@ Index
 
 
 Tag Table:
-Node: Top1229
-Node: Foreword346932
-Node: Foreword451532
-Node: Preface53081
-Ref: Preface-Footnote-156073
-Ref: Preface-Footnote-256182
-Ref: Preface-Footnote-356416
-Node: History56562
-Node: Names59180
-Ref: Names-Footnote-160343
-Node: This Manual60506
-Ref: This Manual-Footnote-167456
-Node: Conventions67568
-Node: Manual History70046
-Ref: Manual History-Footnote-173083
-Ref: Manual History-Footnote-273130
-Node: How To Contribute73208
-Node: Acknowledgments74158
-Node: Getting Started79156
-Node: Running gawk81683
-Node: One-shot82901
-Node: Read Terminal84204
-Node: Long86264
-Node: Executable Scripts87845
-Ref: Executable Scripts-Footnote-190620
-Node: Comments90727
-Node: Quoting93265
-Node: DOS Quoting98914
-Node: Sample Data Files101000
-Node: Very Simple103637
-Node: Two Rules109916
-Node: More Complex111870
-Node: Statements/Lines114310
-Ref: Statements/Lines-Footnote-1119834
-Node: Other Features120123
-Node: When121091
-Ref: When-Footnote-1122897
-Node: Intro Summary122962
-Node: Invoking Gawk123918
-Node: Command Line125488
-Node: Options126339
-Ref: Options-Footnote-1145716
-Ref: Options-Footnote-2145951
-Node: Other Arguments145976
-Node: Naming Standard Input150153
-Node: Environment Variables151423
-Node: AWKPATH Variable151997
-Ref: AWKPATH Variable-Footnote-1155587
-Ref: AWKPATH Variable-Footnote-2155621
-Node: AWKLIBPATH Variable156014
-Ref: AWKLIBPATH Variable-Footnote-1157789
-Node: Other Environment Variables158186
-Node: Exit Status162682
-Node: Include Files163397
-Node: Loading Shared Libraries167457
-Node: Obsolete168949
-Node: Undocumented169701
-Node: Invoking Summary170000
-Node: Regexp173027
-Node: Regexp Usage174521
-Node: Escape Sequences176622
-Ref: Escape Sequences-Footnote-1184154
-Node: Regexp Operators184234
-Node: Regexp Operator Details184727
-Ref: Regexp Operator Details-Footnote-1192742
-Node: Interval Expressions192901
-Ref: Interval Expressions-Footnote-1195170
-Node: Bracket Expressions195270
-Ref: table-char-classes197830
-Node: Leftmost Longest201352
-Node: Computed Regexps202712
-Node: GNU Regexp Operators206235
-Node: Case-sensitivity210258
-Ref: Case-sensitivity-Footnote-1213215
-Ref: Case-sensitivity-Footnote-2213460
-Node: Regexp Summary213576
-Node: Reading Files215100
-Node: Records217417
-Node: awk split records218692
-Node: gawk split records223582
-Ref: gawk split records-Footnote-1228876
-Node: Fields228913
-Ref: Fields-Footnote-1231837
-Node: Nonconstant Fields231957
-Ref: Nonconstant Fields-Footnote-1234268
-Node: Changing Fields234484
-Node: Field Separators240792
-Node: Default Field Splitting243665
-Node: Regexp Field Splitting244808
-Node: Single Character Fields248637
-Node: Comma Separated Fields249726
-Ref: table-csv-examples251134
-Node: Command Line Field Separator253443
-Node: Full Line Fields256829
-Ref: Full Line Fields-Footnote-1258409
-Ref: Full Line Fields-Footnote-2258455
-Node: Field Splitting Summary258563
-Node: Constant Size260887
-Node: Fixed width data261631
-Node: Skipping intervening265150
-Node: Allowing trailing data265952
-Node: Fields with fixed data267017
-Node: Splitting By Content268643
-Ref: Splitting By Content-Footnote-1272919
-Node: More CSV273082
-Node: FS versus FPAT274735
-Node: Testing field creation275944
-Node: Multiple Line277722
-Node: Getline284204
-Node: Plain Getline286790
-Node: Getline/Variable289440
-Node: Getline/File290637
-Node: Getline/Variable/File292085
-Ref: Getline/Variable/File-Footnote-1293730
-Node: Getline/Pipe293826
-Node: Getline/Variable/Pipe296639
-Node: Getline/Coprocess297822
-Node: Getline/Variable/Coprocess299145
-Node: Getline Notes299911
-Node: Getline Summary302872
-Ref: table-getline-variants303316
-Node: Read Timeout304221
-Ref: Read Timeout-Footnote-1308185
-Node: Retrying Input308243
-Node: Command-line directories309510
-Node: Input Summary310448
-Node: Input Exercises313828
-Node: Printing314268
-Node: Print316211
-Node: Print Examples317717
-Node: Output Separators320570
-Node: OFMT322681
-Node: Printf324396
-Node: Basic Printf325201
-Node: Control Letters326837
-Node: Format Modifiers332306
-Node: Printf Examples338592
-Node: Redirection341137
-Node: Special FD348211
-Ref: Special FD-Footnote-1351501
-Node: Special Files351587
-Node: Other Inherited Files352216
-Node: Special Network353281
-Node: Special Caveats354169
-Node: Close Files And Pipes355152
-Ref: Close Files And Pipes-Footnote-1361288
-Node: Close Return Value361444
-Ref: table-close-pipe-return-values362719
-Ref: Close Return Value-Footnote-1363553
-Node: Noflush363709
-Node: Nonfatal365221
-Node: Output Summary367638
-Node: Output Exercises368924
-Node: Expressions369615
-Node: Values370817
-Node: Constants371495
-Node: Scalar Constants372192
-Ref: Scalar Constants-Footnote-1374770
-Ref: Scalar Constants-Footnote-2375020
-Node: Nondecimal-numbers375100
-Node: Regexp Constants378221
-Node: Using Constant Regexps378767
-Node: Standard Regexp Constants379413
-Node: Strong Regexp Constants382713
-Node: Variables386564
-Node: Using Variables387229
-Node: Assignment Options389209
-Node: Conversion391771
-Node: Strings And Numbers392303
-Ref: Strings And Numbers-Footnote-1395522
-Node: Locale influences conversions395631
-Ref: table-locale-affects398481
-Node: All Operators399124
-Node: Arithmetic Ops399765
-Node: Concatenation402595
-Ref: Concatenation-Footnote-1405545
-Node: Assignment Ops405668
-Ref: table-assign-ops410807
-Node: Increment Ops412189
-Node: Truth Values and Conditions415788
-Node: Truth Values416914
-Node: Typing and Comparison418005
-Node: Variable Typing418841
-Ref: Variable Typing-Footnote-1425503
-Ref: Variable Typing-Footnote-2425583
-Node: Comparison Operators425666
-Ref: table-relational-ops426093
-Node: POSIX String Comparison429779
-Ref: POSIX String Comparison-Footnote-1431538
-Ref: POSIX String Comparison-Footnote-2431681
-Node: Boolean Ops431765
-Ref: Boolean Ops-Footnote-1436458
-Node: Conditional Exp436554
-Node: Function Calls438340
-Node: Precedence442290
-Node: Locales446167
-Node: Expressions Summary447849
-Node: Patterns and Actions450512
-Node: Pattern Overview451654
-Node: Regexp Patterns453380
-Node: Expression Patterns453926
-Node: Ranges457835
-Node: BEGIN/END461013
-Node: Using BEGIN/END461826
-Ref: Using BEGIN/END-Footnote-1464736
-Node: I/O And BEGIN/END464846
-Node: BEGINFILE/ENDFILE467327
-Node: Empty470768
-Node: Using Shell Variables471085
-Node: Action Overview473423
-Node: Statements475858
-Node: If Statement477756
-Node: While Statement479325
-Node: Do Statement481413
-Node: For Statement482599
-Node: Switch Statement485956
-Node: Break Statement488507
-Node: Continue Statement490699
-Node: Next Statement492631
-Node: Nextfile Statement495128
-Node: Exit Statement497989
-Node: Built-in Variables500522
-Node: User-modified501701
-Node: Auto-set509912
-Ref: Auto-set-Footnote-1528011
-Ref: Auto-set-Footnote-2528229
-Node: ARGC and ARGV528285
-Node: Pattern Action Summary532724
-Node: Arrays535340
-Node: Array Basics536717
-Node: Array Intro537567
-Ref: figure-array-elements539583
-Ref: Array Intro-Footnote-1542452
-Node: Reference to Elements542584
-Node: Assigning Elements545106
-Node: Array Example545601
-Node: Scanning an Array547570
-Node: Controlling Scanning550667
-Ref: Controlling Scanning-Footnote-1557313
-Node: Numeric Array Subscripts557637
-Node: Uninitialized Subscripts559911
-Node: Delete561590
-Ref: Delete-Footnote-1564404
-Node: Multidimensional564461
-Node: Multiscanning567666
-Node: Arrays of Arrays569338
-Node: Arrays Summary574238
-Node: Functions576427
-Node: Built-in577487
-Node: Calling Built-in578676
-Node: Boolean Functions580723
-Node: Numeric Functions581293
-Ref: Numeric Functions-Footnote-1585486
-Ref: Numeric Functions-Footnote-2586170
-Ref: Numeric Functions-Footnote-3586222
-Node: String Functions586498
-Ref: String Functions-Footnote-1612974
-Ref: String Functions-Footnote-2613108
-Ref: String Functions-Footnote-3613368
-Node: Gory Details613455
-Ref: table-sub-escapes615469
-Ref: table-sub-proposed617115
-Ref: table-posix-sub618625
-Ref: table-gensub-escapes620313
-Ref: Gory Details-Footnote-1621247
-Node: I/O Functions621401
-Ref: table-system-return-values628088
-Ref: I/O Functions-Footnote-1630259
-Ref: I/O Functions-Footnote-2630407
-Node: Time Functions630527
-Ref: Time Functions-Footnote-1641683
-Ref: Time Functions-Footnote-2641759
-Ref: Time Functions-Footnote-3641921
-Ref: Time Functions-Footnote-4642032
-Ref: Time Functions-Footnote-5642150
-Ref: Time Functions-Footnote-6642385
-Node: Bitwise Functions642667
-Ref: table-bitwise-ops643269
-Ref: Bitwise Functions-Footnote-1649523
-Ref: Bitwise Functions-Footnote-2649702
-Node: Type Functions649899
-Node: I18N Functions653492
-Node: User-defined655235
-Node: Definition Syntax656055
-Ref: Definition Syntax-Footnote-1661883
-Node: Function Example661960
-Ref: Function Example-Footnote-1664939
-Node: Function Calling664961
-Node: Calling A Function665555
-Node: Variable Scope666525
-Node: Pass By Value/Reference669579
-Node: Function Caveats672311
-Ref: Function Caveats-Footnote-1674406
-Node: Return Statement674530
-Node: Dynamic Typing677585
-Node: Indirect Calls679977
-Node: Functions Summary691136
-Node: Library Functions693913
-Ref: Library Functions-Footnote-1697461
-Ref: Library Functions-Footnote-2697604
-Node: Library Names697779
-Ref: Library Names-Footnote-1701573
-Ref: Library Names-Footnote-2701800
-Node: General Functions701896
-Node: Strtonum Function703166
-Node: Assert Function706248
-Node: Round Function709700
-Node: Cliff Random Function711278
-Node: Ordinal Functions712311
-Ref: Ordinal Functions-Footnote-1715420
-Ref: Ordinal Functions-Footnote-2715672
-Node: Join Function715886
-Ref: Join Function-Footnote-1717689
-Node: Getlocaltime Function717893
-Node: Readfile Function721667
-Node: Shell Quoting723696
-Node: Isnumeric Function725152
-Node: To CSV Function726588
-Node: Data File Management728664
-Node: Filetrans Function729296
-Node: Rewind Function733590
-Node: File Checking735569
-Ref: File Checking-Footnote-1736941
-Node: Empty Files737148
-Node: Ignoring Assigns739215
-Node: Getopt Function740789
-Ref: Getopt Function-Footnote-1756623
-Node: Passwd Functions756835
-Ref: Passwd Functions-Footnote-1766017
-Node: Group Functions766105
-Ref: Group Functions-Footnote-1774243
-Node: Walking Arrays774456
-Node: Library Functions Summary777504
-Node: Library Exercises778928
-Node: Sample Programs779415
-Node: Running Examples780197
-Node: Clones780949
-Node: Cut Program782221
-Node: Egrep Program792662
-Node: Id Program801979
-Node: Split Program812093
-Ref: Split Program-Footnote-1822328
-Node: Tee Program822515
-Node: Uniq Program825424
-Node: Wc Program833289
-Node: Bytes vs. Characters833684
-Node: Using extensions835286
-Node: wc program836066
-Node: Miscellaneous Programs841072
-Node: Dupword Program842301
-Node: Alarm Program844364
-Node: Translate Program849277
-Ref: Translate Program-Footnote-1854018
-Node: Labels Program854296
-Ref: Labels Program-Footnote-1857737
-Node: Word Sorting857829
-Node: History Sorting862023
-Node: Extract Program864298
-Node: Simple Sed872567
-Node: Igawk Program875783
-Ref: Igawk Program-Footnote-1891030
-Ref: Igawk Program-Footnote-2891236
-Ref: Igawk Program-Footnote-3891366
-Node: Anagram Program891493
-Node: Signature Program894589
-Node: Programs Summary895841
-Node: Programs Exercises897099
-Ref: Programs Exercises-Footnote-1901415
-Node: Advanced Features901501
-Node: Nondecimal Data903995
-Node: Boolean Typed Values905625
-Node: Array Sorting907600
-Node: Controlling Array Traversal908329
-Ref: Controlling Array Traversal-Footnote-1916836
-Node: Array Sorting Functions916958
-Ref: Array Sorting Functions-Footnote-1923077
-Node: Two-way I/O923285
-Ref: Two-way I/O-Footnote-1931280
-Ref: Two-way I/O-Footnote-2931471
-Node: TCP/IP Networking931553
-Node: Profiling934733
-Node: Persistent Memory944443
-Ref: Persistent Memory-Footnote-1954053
-Node: Extension Philosophy954184
-Node: Advanced Features Summary955719
-Node: Internationalization957989
-Node: I18N and L10N959695
-Node: Explaining gettext960390
-Ref: Explaining gettext-Footnote-1966543
-Ref: Explaining gettext-Footnote-2966738
-Node: Programmer i18n966903
-Ref: Programmer i18n-Footnote-1972016
-Node: Translator i18n972065
-Node: String Extraction972901
-Ref: String Extraction-Footnote-1974079
-Node: Printf Ordering974177
-Ref: Printf Ordering-Footnote-1977039
-Node: I18N Portability977107
-Ref: I18N Portability-Footnote-1979681
-Node: I18N Example979752
-Ref: I18N Example-Footnote-1983152
-Ref: I18N Example-Footnote-2983228
-Node: Gawk I18N983345
-Node: I18N Summary984001
-Node: Debugger985402
-Node: Debugging986426
-Node: Debugging Concepts986875
-Node: Debugging Terms988701
-Node: Awk Debugging991314
-Ref: Awk Debugging-Footnote-1992291
-Node: Sample Debugging Session992431
-Node: Debugger Invocation992983
-Node: Finding The Bug994612
-Node: List of Debugger Commands1001298
-Node: Breakpoint Control1002675
-Node: Debugger Execution Control1006507
-Node: Viewing And Changing Data1009987
-Node: Execution Stack1013725
-Node: Debugger Info1015406
-Node: Miscellaneous Debugger Commands1019705
-Node: Readline Support1024958
-Node: Limitations1025904
-Node: Debugging Summary1028548
-Node: Namespaces1029847
-Node: Global Namespace1030974
-Node: Qualified Names1032419
-Node: Default Namespace1033454
-Node: Changing The Namespace1034229
-Node: Naming Rules1035923
-Node: Internal Name Management1037838
-Node: Namespace Example1038908
-Node: Namespace And Features1041491
-Node: Namespace Summary1042948
-Node: Arbitrary Precision Arithmetic1044461
-Node: Computer Arithmetic1045980
-Ref: table-numeric-ranges1049797
-Ref: table-floating-point-ranges1050295
-Ref: Computer Arithmetic-Footnote-11050954
-Node: Math Definitions1051013
-Ref: table-ieee-formats1054058
-Node: MPFR features1054632
-Node: MPFR On Parole1055085
-Ref: MPFR On Parole-Footnote-11055929
-Node: MPFR Intro1056088
-Node: FP Math Caution1057778
-Ref: FP Math Caution-Footnote-11058852
-Node: Inexactness of computations1059229
-Node: Inexact representation1060260
-Node: Comparing FP Values1061643
-Node: Errors accumulate1062901
-Node: Strange values1064368
-Ref: Strange values-Footnote-11067034
-Node: Getting Accuracy1067139
-Node: Try To Round1069876
-Node: Setting precision1070783
-Ref: table-predefined-precision-strings1071488
-Node: Setting the rounding mode1073373
-Ref: table-gawk-rounding-modes1073755
-Ref: Setting the rounding mode-Footnote-11077813
-Node: Arbitrary Precision Integers1077996
-Ref: Arbitrary Precision Integers-Footnote-11081208
-Node: Checking for MPFR1081364
-Node: POSIX Floating Point Problems1082854
-Ref: POSIX Floating Point Problems-Footnote-11087718
-Node: Floating point summary1087756
-Node: Dynamic Extensions1090020
-Node: Extension Intro1091619
-Node: Plugin License1092927
-Node: Extension Mechanism Outline1093740
-Ref: figure-load-extension1094191
-Ref: figure-register-new-function1095776
-Ref: figure-call-new-function1096886
-Node: Extension API Description1099010
-Node: Extension API Functions Introduction1100739
-Ref: table-api-std-headers1102637
-Node: General Data Types1107101
-Ref: General Data Types-Footnote-11116269
-Node: Memory Allocation Functions1116584
-Ref: Memory Allocation Functions-Footnote-11121309
-Node: Constructor Functions1121408
-Node: API Ownership of MPFR and GMP Values1125313
-Node: Registration Functions1126874
-Node: Extension Functions1127578
-Node: Exit Callback Functions1133154
-Node: Extension Version String1134473
-Node: Input Parsers1135168
-Node: Output Wrappers1149812
-Node: Two-way processors1154660
-Node: Printing Messages1157021
-Ref: Printing Messages-Footnote-11158235
-Node: Updating ERRNO1158390
-Node: Requesting Values1159189
-Ref: table-value-types-returned1159942
-Node: Accessing Parameters1161051
-Node: Symbol Table Access1162335
-Node: Symbol table by name1162851
-Ref: Symbol table by name-Footnote-11166062
-Node: Symbol table by cookie1166194
-Ref: Symbol table by cookie-Footnote-11170475
-Node: Cached values1170539
-Ref: Cached values-Footnote-11174183
-Node: Array Manipulation1174340
-Ref: Array Manipulation-Footnote-11175443
-Node: Array Data Types1175480
-Ref: Array Data Types-Footnote-11178302
-Node: Array Functions1178402
-Node: Flattening Arrays1183431
-Node: Creating Arrays1190483
-Node: Redirection API1195333
-Node: Extension API Variables1198354
-Node: Extension Versioning1199079
-Ref: gawk-api-version1199516
-Node: Extension GMP/MPFR Versioning1201304
-Node: Extension API Informational Variables1203010
-Node: Extension API Boilerplate1204263
-Node: Changes from API V11208399
-Node: Finding Extensions1210033
-Node: Extension Example1210608
-Node: Internal File Description1211432
-Node: Internal File Ops1215756
-Ref: Internal File Ops-Footnote-11227314
-Node: Using Internal File Ops1227462
-Ref: Using Internal File Ops-Footnote-11229893
-Node: Extension Samples1230171
-Node: Extension Sample File Functions1231740
-Node: Extension Sample Fnmatch1239878
-Node: Extension Sample Fork1241473
-Node: Extension Sample Inplace1242749
-Node: Extension Sample Ord1246421
-Node: Extension Sample Readdir1247297
-Ref: table-readdir-file-types1248086
-Node: Extension Sample Revout1249447
-Node: Extension Sample Rev2way1250044
-Node: Extension Sample Read write array1250796
-Node: Extension Sample Readfile1254070
-Node: Extension Sample Time1255201
-Node: Extension Sample API Tests1257491
-Node: gawkextlib1257999
-Node: Extension summary1261035
-Node: Extension Exercises1264893
-Node: Language History1266171
-Node: V7/SVR3.11267885
-Node: SVR41270235
-Node: POSIX1271767
-Node: BTL1273192
-Node: POSIX/GNU1273961
-Node: Feature History1280492
-Node: Common Extensions1300308
-Node: Ranges and Locales1301785
-Ref: Ranges and Locales-Footnote-11306586
-Ref: Ranges and Locales-Footnote-21306613
-Ref: Ranges and Locales-Footnote-31306852
-Node: Contributors1307075
-Node: History summary1313280
-Node: Installation1314726
-Node: Gawk Distribution1315690
-Node: Getting1316182
-Node: Extracting1317181
-Node: Distribution contents1318893
-Node: Unix Installation1326973
-Node: Quick Installation1327795
-Node: Compiling with MPFR1330341
-Node: Shell Startup Files1331047
-Node: Additional Configuration Options1332204
-Node: Configuration Philosophy1334591
-Node: Compiling from Git1337093
-Node: Building the Documentation1337652
-Node: Non-Unix Installation1339064
-Node: PC Installation1339540
-Node: PC Binary Installation1340413
-Node: PC Compiling1341318
-Node: PC Using1342496
-Node: Cygwin1346224
-Node: MSYS1347480
-Node: OpenVMS Installation1348112
-Node: OpenVMS Compilation1348793
-Ref: OpenVMS Compilation-Footnote-11350276
-Node: OpenVMS Dynamic Extensions1350338
-Node: OpenVMS Installation Details1351974
-Node: OpenVMS Running1354409
-Node: OpenVMS GNV1358546
-Node: Bugs1359301
-Node: Bug definition1360225
-Node: Bug address1363876
-Node: Usenet1367467
-Node: Performance bugs1368698
-Node: Asking for help1371716
-Node: Maintainers1373707
-Node: Other Versions1374734
-Node: Installation summary1384077
-Node: Notes1385461
-Node: Compatibility Mode1386271
-Node: Additions1387093
-Node: Accessing The Source1388038
-Node: Adding Code1389573
-Node: New Ports1396709
-Node: Derived Files1401219
-Ref: Derived Files-Footnote-11407066
-Ref: Derived Files-Footnote-21407101
-Ref: Derived Files-Footnote-31407718
-Node: Future Extensions1407832
-Node: Implementation Limitations1408504
-Node: Extension Design1409746
-Node: Old Extension Problems1410910
-Ref: Old Extension Problems-Footnote-11412486
-Node: Extension New Mechanism Goals1412547
-Ref: Extension New Mechanism Goals-Footnote-11416043
-Node: Extension Other Design Decisions1416244
-Node: Extension Future Growth1418443
-Node: Notes summary1419067
-Node: Basic Concepts1420280
-Node: Basic High Level1420965
-Ref: figure-general-flow1421247
-Ref: figure-process-flow1421954
-Ref: Basic High Level-Footnote-11425355
-Node: Basic Data Typing1425544
-Node: Glossary1428962
-Node: Copying1462084
-Node: GNU Free Documentation License1499845
-Node: Index1525168
+Node: Top1203
+Node: Foreword346844
+Node: Foreword451418
+Node: Preface52962
+Ref: Preface-Footnote-155948
+Ref: Preface-Footnote-256057
+Ref: Preface-Footnote-356291
+Node: History56437
+Node: Names59051
+Ref: Names-Footnote-160205
+Node: This Manual60368
+Ref: This Manual-Footnote-167297
+Node: Conventions67405
+Node: Manual History69834
+Ref: Manual History-Footnote-172859
+Ref: Manual History-Footnote-272900
+Node: How To Contribute72974
+Node: Acknowledgments73920
+Node: Getting Started78909
+Node: Running gawk81436
+Node: One-shot82654
+Node: Read Terminal83953
+Node: Long86007
+Node: Executable Scripts87576
+Ref: Executable Scripts-Footnote-190346
+Node: Comments90453
+Node: Quoting92983
+Node: DOS Quoting98622
+Node: Sample Data Files100702
+Node: Very Simple103337
+Node: Two Rules109591
+Node: More Complex111543
+Node: Statements/Lines113963
+Ref: Statements/Lines-Footnote-1119475
+Node: Other Features119764
+Node: When120732
+Ref: When-Footnote-1122534
+Node: Intro Summary122599
+Node: Invoking Gawk123553
+Node: Command Line125115
+Node: Options125965
+Ref: Options-Footnote-1145305
+Ref: Options-Footnote-2145540
+Node: Other Arguments145565
+Node: Naming Standard Input149730
+Node: Environment Variables151000
+Node: AWKPATH Variable151574
+Ref: AWKPATH Variable-Footnote-1155158
+Ref: AWKPATH Variable-Footnote-2155192
+Node: AWKLIBPATH Variable155583
+Ref: AWKLIBPATH Variable-Footnote-1157356
+Node: Other Environment Variables157751
+Node: Exit Status162227
+Node: Include Files162940
+Node: Loading Shared Libraries166992
+Node: Obsolete168482
+Node: Undocumented169231
+Node: Invoking Summary169528
+Node: Regexp172553
+Node: Regexp Usage174047
+Node: Escape Sequences176148
+Ref: Escape Sequences-Footnote-1183654
+Node: Regexp Operators183732
+Node: Regexp Operator Details184225
+Ref: Regexp Operator Details-Footnote-1192236
+Node: Interval Expressions192395
+Ref: Interval Expressions-Footnote-1194662
+Node: Bracket Expressions194760
+Ref: table-char-classes197316
+Node: Leftmost Longest200814
+Node: Computed Regexps202170
+Node: GNU Regexp Operators205685
+Node: Case-sensitivity209701
+Ref: Case-sensitivity-Footnote-1212651
+Ref: Case-sensitivity-Footnote-2212894
+Node: Regexp Summary213006
+Node: Reading Files214528
+Node: Records216845
+Node: awk split records218120
+Node: gawk split records223002
+Ref: gawk split records-Footnote-1228290
+Node: Fields228327
+Ref: Fields-Footnote-1231243
+Node: Nonconstant Fields231363
+Ref: Nonconstant Fields-Footnote-1233671
+Node: Changing Fields233887
+Node: Field Separators240185
+Node: Default Field Splitting243054
+Node: Regexp Field Splitting244196
+Node: Single Character Fields248025
+Node: Comma Separated Fields249114
+Ref: table-csv-examples250518
+Node: Command Line Field Separator252817
+Node: Full Line Fields256193
+Ref: Full Line Fields-Footnote-1257771
+Ref: Full Line Fields-Footnote-2257817
+Node: Field Splitting Summary257922
+Node: Constant Size260239
+Node: Fixed width data260983
+Node: Skipping intervening264498
+Node: Allowing trailing data265300
+Node: Fields with fixed data266361
+Node: Splitting By Content267983
+Ref: Splitting By Content-Footnote-1272248
+Node: More CSV272411
+Node: FS versus FPAT274056
+Node: Testing field creation275256
+Node: Multiple Line277030
+Node: Getline283499
+Node: Plain Getline286082
+Node: Getline/Variable288728
+Node: Getline/File289923
+Node: Getline/Variable/File291371
+Ref: Getline/Variable/File-Footnote-1293016
+Node: Getline/Pipe293112
+Node: Getline/Variable/Pipe295920
+Node: Getline/Coprocess297103
+Node: Getline/Variable/Coprocess298426
+Node: Getline Notes299192
+Node: Getline Summary302145
+Ref: table-getline-variants302589
+Node: Read Timeout303493
+Ref: Read Timeout-Footnote-1307455
+Node: Retrying Input307513
+Node: Command-line directories308780
+Node: Input Summary309718
+Node: Input Exercises313098
+Node: Printing313536
+Node: Print315479
+Node: Print Examples316980
+Node: Output Separators319825
+Node: OFMT321932
+Node: Printf323645
+Node: Basic Printf324450
+Node: Control Letters326085
+Node: Format Modifiers331531
+Node: Printf Examples337803
+Node: Redirection340344
+Node: Special FD347409
+Ref: Special FD-Footnote-1350693
+Node: Special Files350771
+Node: Other Inherited Files351400
+Node: Special Network352465
+Node: Special Caveats353353
+Node: Close Files And Pipes354336
+Ref: Close Files And Pipes-Footnote-1360460
+Node: Close Return Value360608
+Ref: table-close-pipe-return-values361879
+Ref: Close Return Value-Footnote-1362710
+Node: Noflush362866
+Node: Nonfatal364374
+Node: Output Summary366789
+Node: Output Exercises368075
+Node: Expressions368766
+Node: Values369966
+Node: Constants370644
+Node: Scalar Constants371339
+Ref: Scalar Constants-Footnote-1373915
+Ref: Scalar Constants-Footnote-2374165
+Node: Nondecimal-numbers374245
+Node: Regexp Constants377358
+Node: Using Constant Regexps377904
+Node: Standard Regexp Constants378550
+Node: Strong Regexp Constants381846
+Node: Variables385689
+Node: Using Variables386354
+Node: Assignment Options388328
+Node: Conversion390879
+Node: Strings And Numbers391411
+Ref: Strings And Numbers-Footnote-1394621
+Node: Locale influences conversions394730
+Ref: table-locale-affects397568
+Node: All Operators398210
+Node: Arithmetic Ops398851
+Node: Concatenation401674
+Ref: Concatenation-Footnote-1404610
+Node: Assignment Ops404729
+Ref: table-assign-ops409856
+Node: Increment Ops411237
+Node: Truth Values and Conditions414828
+Node: Truth Values415922
+Node: Typing and Comparison417002
+Node: Variable Typing417834
+Ref: Variable Typing-Footnote-1424478
+Ref: Variable Typing-Footnote-2424558
+Node: Comparison Operators424639
+Ref: table-relational-ops425066
+Node: POSIX String Comparison428742
+Ref: POSIX String Comparison-Footnote-1430499
+Ref: POSIX String Comparison-Footnote-2430642
+Node: Boolean Ops430726
+Ref: Boolean Ops-Footnote-1435400
+Node: Conditional Exp435496
+Node: Function Calls437276
+Node: Precedence441223
+Node: Locales445086
+Node: Expressions Summary446762
+Node: Patterns and Actions449417
+Node: Pattern Overview450553
+Node: Regexp Patterns452278
+Node: Expression Patterns452824
+Node: Ranges456729
+Node: BEGIN/END459903
+Node: Using BEGIN/END460712
+Ref: Using BEGIN/END-Footnote-1463620
+Node: I/O And BEGIN/END463730
+Node: BEGINFILE/ENDFILE466211
+Node: Empty469642
+Node: Using Shell Variables469959
+Node: Action Overview472285
+Node: Statements474720
+Node: If Statement476616
+Node: While Statement478179
+Node: Do Statement480267
+Node: For Statement481451
+Node: Switch Statement484806
+Node: Break Statement487355
+Node: Continue Statement489547
+Node: Next Statement491478
+Node: Nextfile Statement493957
+Node: Exit Statement496810
+Node: Built-in Variables499337
+Node: User-modified500514
+Node: Auto-set508721
+Ref: Auto-set-Footnote-1526805
+Ref: Auto-set-Footnote-2527023
+Node: ARGC and ARGV527079
+Node: Pattern Action Summary531508
+Node: Arrays534114
+Node: Array Basics535487
+Node: Array Intro536335
+Ref: figure-array-elements538346
+Ref: Array Intro-Footnote-1541199
+Node: Reference to Elements541331
+Node: Assigning Elements543851
+Node: Array Example544346
+Node: Scanning an Array546308
+Node: Controlling Scanning549403
+Ref: Controlling Scanning-Footnote-1556038
+Node: Numeric Array Subscripts556362
+Node: Uninitialized Subscripts558630
+Node: Delete560303
+Ref: Delete-Footnote-1563115
+Node: Multidimensional563172
+Node: Multiscanning566375
+Node: Arrays of Arrays568042
+Node: Arrays Summary572932
+Node: Functions575119
+Node: Built-in576177
+Node: Calling Built-in577366
+Node: Boolean Functions579406
+Node: Numeric Functions579968
+Ref: Numeric Functions-Footnote-1584153
+Ref: Numeric Functions-Footnote-2584837
+Ref: Numeric Functions-Footnote-3584889
+Node: String Functions585165
+Ref: String Functions-Footnote-1611616
+Ref: String Functions-Footnote-2611748
+Ref: String Functions-Footnote-3612004
+Node: Gory Details612091
+Ref: table-sub-escapes614100
+Ref: table-sub-proposed615731
+Ref: table-posix-sub617226
+Ref: table-gensub-escapes618899
+Ref: Gory Details-Footnote-1619818
+Node: I/O Functions619972
+Ref: table-system-return-values626648
+Ref: I/O Functions-Footnote-1628810
+Ref: I/O Functions-Footnote-2628958
+Node: Time Functions629078
+Ref: Time Functions-Footnote-1640160
+Ref: Time Functions-Footnote-2640228
+Ref: Time Functions-Footnote-3640390
+Ref: Time Functions-Footnote-4640501
+Ref: Time Functions-Footnote-5640617
+Ref: Time Functions-Footnote-6640844
+Node: Bitwise Functions641122
+Ref: table-bitwise-ops641720
+Ref: Bitwise Functions-Footnote-1647962
+Ref: Bitwise Functions-Footnote-2648139
+Node: Type Functions648334
+Node: I18N Functions651927
+Node: User-defined653662
+Node: Definition Syntax654482
+Ref: Definition Syntax-Footnote-1660300
+Node: Function Example660375
+Ref: Function Example-Footnote-1663354
+Node: Function Calling663376
+Node: Calling A Function663968
+Node: Variable Scope664938
+Node: Pass By Value/Reference667992
+Node: Function Caveats670720
+Ref: Function Caveats-Footnote-1672811
+Node: Return Statement672931
+Node: Dynamic Typing675986
+Node: Indirect Calls678368
+Node: Functions Summary689503
+Node: Library Functions692272
+Ref: Library Functions-Footnote-1695820
+Ref: Library Functions-Footnote-2695963
+Node: Library Names696138
+Ref: Library Names-Footnote-1699909
+Ref: Library Names-Footnote-2700136
+Node: General Functions700230
+Node: Strtonum Function701500
+Node: Assert Function704582
+Node: Round Function708032
+Node: Cliff Random Function709604
+Node: Ordinal Functions710628
+Ref: Ordinal Functions-Footnote-1713731
+Ref: Ordinal Functions-Footnote-2713983
+Node: Join Function714197
+Ref: Join Function-Footnote-1715995
+Node: Getlocaltime Function716199
+Node: Readfile Function719973
+Node: Shell Quoting722002
+Node: Isnumeric Function723458
+Node: To CSV Function724894
+Node: Data File Management726968
+Node: Filetrans Function727600
+Node: Rewind Function731876
+Node: File Checking733847
+Ref: File Checking-Footnote-1735213
+Node: Empty Files735418
+Node: Ignoring Assigns737481
+Node: Getopt Function739055
+Ref: Getopt Function-Footnote-1754873
+Node: Passwd Functions755085
+Ref: Passwd Functions-Footnote-1764220
+Node: Group Functions764308
+Ref: Group Functions-Footnote-1772432
+Node: Walking Arrays772643
+Node: Library Functions Summary775689
+Node: Library Exercises777109
+Node: Sample Programs777594
+Node: Running Examples778376
+Node: Clones779128
+Node: Cut Program780396
+Node: Egrep Program790820
+Node: Id Program800125
+Node: Split Program810217
+Ref: Split Program-Footnote-1820430
+Node: Tee Program820615
+Node: Uniq Program823521
+Node: Wc Program831381
+Node: Bytes vs. Characters831776
+Node: Using extensions833376
+Node: wc program834154
+Node: Miscellaneous Programs839147
+Node: Dupword Program840372
+Node: Alarm Program842421
+Node: Translate Program847324
+Ref: Translate Program-Footnote-1852033
+Node: Labels Program852311
+Ref: Labels Program-Footnote-1855746
+Node: Word Sorting855830
+Node: History Sorting860004
+Node: Extract Program862277
+Node: Simple Sed870532
+Node: Igawk Program873742
+Ref: Igawk Program-Footnote-1888943
+Ref: Igawk Program-Footnote-2889149
+Ref: Igawk Program-Footnote-3889279
+Node: Anagram Program889406
+Node: Signature Program892492
+Node: Programs Summary893742
+Node: Programs Exercises894996
+Ref: Programs Exercises-Footnote-1899298
+Node: Advanced Features899384
+Node: Nondecimal Data901865
+Node: Boolean Typed Values903495
+Node: Array Sorting905452
+Node: Controlling Array Traversal906181
+Ref: Controlling Array Traversal-Footnote-1914684
+Node: Array Sorting Functions914806
+Ref: Array Sorting Functions-Footnote-1920903
+Node: Two-way I/O921111
+Ref: Two-way I/O-Footnote-1929082
+Ref: Two-way I/O-Footnote-2929273
+Node: TCP/IP Networking929355
+Node: Profiling932523
+Node: Persistent Memory942193
+Ref: Persistent Memory-Footnote-1951765
+Node: Extension Philosophy951896
+Node: Advanced Features Summary953423
+Node: Internationalization955689
+Node: I18N and L10N957391
+Node: Explaining gettext958086
+Ref: Explaining gettext-Footnote-1964222
+Ref: Explaining gettext-Footnote-2964415
+Node: Programmer i18n964580
+Ref: Programmer i18n-Footnote-1969685
+Node: Translator i18n969734
+Node: String Extraction970564
+Ref: String Extraction-Footnote-1971740
+Node: Printf Ordering971838
+Ref: Printf Ordering-Footnote-1974696
+Node: I18N Portability974764
+Ref: I18N Portability-Footnote-1977324
+Node: I18N Example977391
+Ref: I18N Example-Footnote-1980785
+Ref: I18N Example-Footnote-2980858
+Node: Gawk I18N980975
+Node: I18N Summary981629
+Node: Debugger983026
+Node: Debugging984046
+Node: Debugging Concepts984495
+Node: Debugging Terms986312
+Node: Awk Debugging988915
+Ref: Awk Debugging-Footnote-1989888
+Node: Sample Debugging Session990024
+Node: Debugger Invocation990574
+Node: Finding The Bug992199
+Node: List of Debugger Commands998831
+Node: Breakpoint Control1000208
+Node: Debugger Execution Control1004030
+Node: Viewing And Changing Data1007504
+Node: Execution Stack1011238
+Node: Debugger Info1012919
+Node: Miscellaneous Debugger Commands1017214
+Node: Readline Support1022455
+Node: Limitations1023399
+Node: Debugging Summary1026023
+Node: Namespaces1027322
+Node: Global Namespace1028449
+Node: Qualified Names1029883
+Node: Default Namespace1030918
+Node: Changing The Namespace1031691
+Node: Naming Rules1033373
+Node: Internal Name Management1035288
+Node: Namespace Example1036358
+Node: Namespace And Features1038935
+Node: Namespace Summary1040390
+Node: Arbitrary Precision Arithmetic1041901
+Node: Computer Arithmetic1043420
+Ref: table-numeric-ranges1047228
+Ref: table-floating-point-ranges1047725
+Ref: Computer Arithmetic-Footnote-11048383
+Node: Math Definitions1048440
+Ref: table-ieee-formats1051472
+Node: MPFR features1052045
+Node: MPFR On Parole1052498
+Ref: MPFR On Parole-Footnote-11053339
+Node: MPFR Intro1053498
+Node: FP Math Caution1055182
+Ref: FP Math Caution-Footnote-11056254
+Node: Inexactness of computations1056627
+Node: Inexact representation1057658
+Node: Comparing FP Values1059039
+Node: Errors accumulate1060297
+Node: Strange values1061762
+Ref: Strange values-Footnote-11064416
+Node: Getting Accuracy1064521
+Node: Try To Round1067258
+Node: Setting precision1068165
+Ref: table-predefined-precision-strings1068870
+Node: Setting the rounding mode1070754
+Ref: table-gawk-rounding-modes1071136
+Ref: Setting the rounding mode-Footnote-11075188
+Node: Arbitrary Precision Integers1075371
+Ref: Arbitrary Precision Integers-Footnote-11078581
+Node: Checking for MPFR1078734
+Node: POSIX Floating Point Problems1080224
+Ref: POSIX Floating Point Problems-Footnote-11085044
+Node: Floating point summary1085082
+Node: Dynamic Extensions1087338
+Node: Extension Intro1088935
+Node: Plugin License1090237
+Node: Extension Mechanism Outline1091050
+Ref: figure-load-extension1091501
+Ref: figure-register-new-function1093079
+Ref: figure-call-new-function1094188
+Node: Extension API Description1096303
+Node: Extension API Functions Introduction1098032
+Ref: table-api-std-headers1099926
+Node: General Data Types1104367
+Ref: General Data Types-Footnote-11113513
+Node: Memory Allocation Functions1113816
+Ref: Memory Allocation Functions-Footnote-11118533
+Node: Constructor Functions1118632
+Node: API Ownership of MPFR and GMP Values1122533
+Node: Registration Functions1124086
+Node: Extension Functions1124790
+Node: Exit Callback Functions1130364
+Node: Extension Version String1131678
+Node: Input Parsers1132373
+Node: Output Wrappers1146992
+Node: Two-way processors1151834
+Node: Printing Messages1154187
+Ref: Printing Messages-Footnote-11155398
+Node: Updating ERRNO1155551
+Node: Requesting Values1156350
+Ref: table-value-types-returned1157103
+Node: Accessing Parameters1158211
+Node: Symbol Table Access1159492
+Node: Symbol table by name1160004
+Ref: Symbol table by name-Footnote-11163205
+Node: Symbol table by cookie1163337
+Ref: Symbol table by cookie-Footnote-11167606
+Node: Cached values1167670
+Ref: Cached values-Footnote-11171302
+Node: Array Manipulation1171459
+Ref: Array Manipulation-Footnote-11172558
+Node: Array Data Types1172595
+Ref: Array Data Types-Footnote-11175413
+Node: Array Functions1175509
+Node: Flattening Arrays1180538
+Node: Creating Arrays1187586
+Node: Redirection API1192428
+Node: Extension API Variables1195445
+Node: Extension Versioning1196168
+Ref: gawk-api-version1196597
+Node: Extension GMP/MPFR Versioning1198384
+Node: Extension API Informational Variables1200088
+Node: Extension API Boilerplate1201341
+Node: Changes from API V11205471
+Node: Finding Extensions1207103
+Node: Extension Example1207678
+Node: Internal File Description1208500
+Node: Internal File Ops1212792
+Ref: Internal File Ops-Footnote-11224342
+Node: Using Internal File Ops1224490
+Ref: Using Internal File Ops-Footnote-11226921
+Node: Extension Samples1227199
+Node: Extension Sample File Functions1228768
+Node: Extension Sample Fnmatch1236893
+Node: Extension Sample Fork1238488
+Node: Extension Sample Inplace1239764
+Node: Extension Sample Ord1243430
+Node: Extension Sample Readdir1244306
+Ref: table-readdir-file-types1245095
+Node: Extension Sample Revout1246451
+Node: Extension Sample Rev2way1247048
+Node: Extension Sample Read write array1247800
+Node: Extension Sample Readfile1251074
+Node: Extension Sample Time1252205
+Node: Extension Sample API Tests1254493
+Node: gawkextlib1255001
+Node: Extension summary1258033
+Node: Extension Exercises1261881
+Node: Language History1263151
+Node: V7/SVR3.11264863
+Node: SVR41267213
+Node: POSIX1268745
+Node: BTL1270170
+Node: POSIX/GNU1270937
+Node: Feature History1277466
+Node: Common Extensions1297268
+Node: Ranges and Locales1298743
+Ref: Ranges and Locales-Footnote-11303528
+Ref: Ranges and Locales-Footnote-21303555
+Ref: Ranges and Locales-Footnote-31303790
+Node: Contributors1304013
+Node: History summary1310204
+Node: Installation1311646
+Node: Gawk Distribution1312610
+Node: Getting1313102
+Node: Extracting1314101
+Node: Distribution contents1315807
+Node: Unix Installation1323881
+Node: Quick Installation1324701
+Node: Compiling with MPFR1327241
+Node: Shell Startup Files1327947
+Node: Additional Configuration Options1329104
+Node: Configuration Philosophy1331487
+Node: Compiling from Git1333987
+Node: Building the Documentation1334546
+Node: Non-Unix Installation1335958
+Node: PC Installation1336434
+Node: PC Binary Installation1337303
+Node: PC Compiling1338196
+Node: PC Using1339374
+Node: Cygwin1343090
+Node: MSYS1344342
+Node: OpenVMS Installation1344968
+Node: OpenVMS Compilation1345649
+Ref: OpenVMS Compilation-Footnote-11347132
+Node: OpenVMS Dynamic Extensions1347190
+Node: OpenVMS Installation Details1348826
+Node: OpenVMS Running1351257
+Node: OpenVMS GNV1355394
+Node: Bugs1356149
+Node: Bug definition1357069
+Node: Bug address1360670
+Node: Usenet1364239
+Node: Performance bugs1365452
+Node: Asking for help1368468
+Node: Maintainers1370455
+Node: Other Versions1371482
+Node: Installation summary1380781
+Node: Notes1382163
+Node: Compatibility Mode1382973
+Node: Additions1383795
+Node: Accessing The Source1384740
+Node: Adding Code1386271
+Node: New Ports1393382
+Node: Derived Files1397885
+Ref: Derived Files-Footnote-11403696
+Ref: Derived Files-Footnote-21403731
+Ref: Derived Files-Footnote-31404342
+Node: Future Extensions1404456
+Node: Implementation Limitations1405126
+Node: Extension Design1406368
+Node: Old Extension Problems1407528
+Ref: Old Extension Problems-Footnote-11409100
+Node: Extension New Mechanism Goals1409161
+Ref: Extension New Mechanism Goals-Footnote-11412631
+Node: Extension Other Design Decisions1412832
+Node: Extension Future Growth1415029
+Node: Notes summary1415649
+Node: Basic Concepts1416859
+Node: Basic High Level1417544
+Ref: figure-general-flow1417826
+Ref: figure-process-flow1418528
+Ref: Basic High Level-Footnote-11421898
+Node: Basic Data Typing1422087
+Node: Glossary1425495
+Node: Copying1458374
+Node: GNU Free Documentation License1495932
+Node: Index1521055
 
 End Tag Table
 
diff --git a/doc/gawk.texi b/doc/gawk.texi
index f0714c90..eaf88091 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -1,8 +1,3 @@
-% ****************************************************
-% * DO NOT MODIFY THIS FILE!!!!                      *
-% * It was generated from gawktexi.in by sidebar.awk *
-% * Edit gawktexi.in instead.                        *
-% ****************************************************
 \input texinfo   @c -*-texinfo-*-
 @c vim: filetype=texinfo
 @c %**start of header (This is for running Texinfo on a region.)
@@ -1488,37 +1483,7 @@ has been removed.}
 @cindex recipe for a programming language
 @cindex programming language, recipe for
 @cindex sidebar @subentry Recipe for a Programming Language
-@ifdocbook
-@docbook
-<sidebar><title>Recipe for a Programming Language</title>
-@end docbook
-
-
-@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
-
-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.
-
-After 35 more years, add Unicode and CSV support, sprinkle lightly with
-a few choice features from @command{gawk}, document very well again,
-and release.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Recipe for a Programming Language}
-
-
+@cartouche 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}
@@ -1535,7 +1500,6 @@ After 35 more years, add Unicode and CSV support, 
sprinkle lightly with
 a few choice features from @command{gawk}, document very well again,
 and release.
 @end cartouche
-@end ifnotdocbook
 
 @cindex Aho, Alfred
 @cindex Weinberger, Peter
@@ -2716,62 +2680,7 @@ program that users can invoke without their having to 
know that the program is
 written in @command{awk}.
 
 @cindex sidebar @subentry Understanding @samp{#!}
-@ifdocbook
-@docbook
-<sidebar><title>Understanding @samp{#!}</title>
-@end docbook
-
-@cindex portability @subentry @code{#!} (executable scripts)
-
-@command{awk} is an @dfn{interpreted} language. This means that the
-@command{awk} utility reads your program and then processes your data
-according to the instructions in your program. (This is different
-from a @dfn{compiled} language such as C, where your program is first
-compiled into machine code that is executed directly by your system's
-processor.)  The @command{awk} utility is thus termed an @dfn{interpreter}.
-Many modern languages are interpreted.
-
-The line beginning with @samp{#!} lists the full @value{FN} of an
-interpreter to run and a single optional initial command-line argument
-to pass to that interpreter.  The operating system then runs the
-interpreter with the given argument and the full argument list of the
-executed program.  The first argument in the list is the full @value{FN}
-of the @command{awk} program.  The rest of the argument list contains
-either options to @command{awk}, or @value{DF}s, or both. (Note that on
-many systems @command{awk} is found in @file{/usr/bin} instead of
-in @file{/bin}.)
-
-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}.
-
-@cindex @code{ARGC}/@code{ARGV} variables @subentry portability and
-@cindex portability @subentry @code{ARGV} variable
-@cindex dark corner @subentry @code{ARGV} variable, value of
-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.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Understanding @samp{#!}}
-
-
+@cartouche Understanding @samp{#!}
 @cindex portability @subentry @code{#!} (executable scripts)
 
 @command{awk} is an @dfn{interpreted} language. This means that the
@@ -2813,7 +2722,6 @@ of your script (@samp{advice}).  @value{DARKCORNER}
 Don't rely on the value of @code{ARGV[0]}
 to provide your script name.
 @end cartouche
-@end ifnotdocbook
 
 @node Comments
 @subsection Comments in @command{awk} Programs
@@ -4658,49 +4566,7 @@ the value of @code{FS} is not
 strictly necessary.  It remains for historical compatibility.
 
 @cindex sidebar @subentry Quoting Shell Variables On The @command{awk} Command 
Line
-@ifdocbook
-@docbook
-<sidebar><title>Quoting Shell Variables On The @command{awk} Command 
Line</title>
-@end docbook
-
-@cindex quoting @subentry in @command{gawk} command lines
-@cindex shell quoting, rules for
-@cindex null strings @subentry in @command{gawk} arguments, quoting and
-
-Small @command{awk} programs are often embedded in larger shell scripts,
-so it's worthwhile to understand some shell basics. Consider the following:
-
-@example
-f=""
-awk '@{ print("hi") @}' $f
-@end example
-
-In this case, @command{awk} reads from standard input instead of trying
-to open any command line files. To the unwary, this looks like @command{awk}
-is hanging.
-
-However @command{awk} doesn't see an explicit empty string. When a
-variable expansion is the null string, @emph{and} it's not quoted,
-the shell simply removes it from the command line. To demonstrate:
-
-@example
-$ @kbd{f=""}
-$ @kbd{awk 'BEGIN @{ print ARGC @}' $f}
-@print{} 1
-$ @kbd{awk 'BEGIN @{ print ARGC @}' "$f"}
-@print{} 2
-@end example
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Quoting Shell Variables On The @command{awk} Command Line}
-
-
+@cartouche Quoting Shell Variables On The @command{awk} Command Line
 @cindex quoting @subentry in @command{gawk} command lines
 @cindex shell quoting, rules for
 @cindex null strings @subentry in @command{gawk} arguments, quoting and
@@ -4729,7 +4595,6 @@ $ @kbd{awk 'BEGIN @{ print ARGC @}' "$f"}
 @print{} 2
 @end example
 @end cartouche
-@end ifnotdocbook
 
 @node Naming Standard Input
 @section Naming Standard Input
@@ -5818,55 +5683,7 @@ shown in the previous list or that is not an operator.
 
 @c 11/2014: Moved so as to not stack sidebars
 @cindex sidebar @subentry Backslash Before Regular Characters
-@ifdocbook
-@docbook
-<sidebar><title>Backslash Before Regular Characters</title>
-@end docbook
-
-@cindex portability @subentry backslash in escape sequences
-@cindex POSIX @command{awk} @subentry backslashes in string constants
-@cindex backslash (@code{\}) @subentry in escape sequences @subentry POSIX and
-@cindex @code{\} (backslash) @subentry in escape sequences @subentry POSIX and
-
-@cindex troubleshooting @subentry 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:
-
-@c @cindex automatic warnings
-@c @cindex warnings, automatic
-@cindex Brian Kernighan's @command{awk}
-@table @asis
-@item Strip the backslash out
-This is what BWK @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,
-@command{gawk} 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]+"}}.)
-@c I did this!  This is why I added the warning.
-
-@cindex @command{gawk} @subentry escape sequences
-@cindex @command{gawk} @subentry escape sequences @seealso{backslash}
-@cindex Unix @command{awk} @subentry backslashes in escape sequences
-@cindex @command{mawk} utility
-@item Leave the backslash alone
-Some other @command{awk} implementations do this.
-In such implementations, typing @code{"a\qc"} is the same as typing
-@code{"a\\qc"}.
-@end table
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Backslash Before Regular Characters}
-
-
+@cartouche Backslash Before Regular Characters
 @cindex portability @subentry backslash in escape sequences
 @cindex POSIX @command{awk} @subentry backslashes in string constants
 @cindex backslash (@code{\}) @subentry in escape sequences @subentry POSIX and
@@ -5901,7 +5718,6 @@ In such implementations, typing @code{"a\qc"} is the same 
as typing
 @code{"a\\qc"}.
 @end table
 @end cartouche
-@end ifnotdocbook
 
 To summarize:
 
@@ -5923,39 +5739,7 @@ literally.
 @end itemize
 
 @cindex sidebar @subentry Escape Sequences for Metacharacters
-@ifdocbook
-@docbook
-<sidebar><title>Escape Sequences for Metacharacters</title>
-@end docbook
-
-@cindex metacharacters @subentry 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?
-
-@cindex dark corner @subentry escape sequences @subentry for metacharacters
-Historically, such characters were taken literally.
-@value{DARKCORNER}
-However, the POSIX standard indicates that they should be treated
-as real metacharacters, which is what @command{gawk} does.
-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/}.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Escape Sequences for Metacharacters}
-
-
+@cartouche Escape Sequences for Metacharacters
 @cindex metacharacters @subentry escape sequences for
 
 Suppose you use an octal or hexadecimal
@@ -5974,7 +5758,6 @@ In compatibility mode (@pxref{Options}),
 escape sequences literally when used in regexp constants. Thus,
 @code{/a\52b/} is equivalent to @code{/a\*b/}.
 @end cartouche
-@end ifnotdocbook
 
 @node Regexp Operators
 @section Regular Expression Operators
@@ -6200,59 +5983,7 @@ plus sign.  However, many other versions of 
@command{awk} treat such a
 usage as a syntax error.
 
 @cindex sidebar @subentry What About The Empty Regexp?
-@ifdocbook
-@docbook
-<sidebar><title>What About The Empty Regexp?</title>
-@end docbook
-
-@cindex empty regexps
-@cindex regexps, empty
-We describe here an advanced regexp usage. Feel free to skip it
-upon first reading.
-
-You can supply an empty regexp constant (@samp{//}) in all places
-where a regexp is expected. Is this useful?  What does it match?
-
-It is useful. It matches the (invisible) empty string at the start
-and end of a string of characters, as well as the empty string
-between characters. This is best illustrated with the @code{gsub()}
-function, which makes global substitutions in a string
-(@pxref{String Functions}).  Normal usage of @code{gsub()} is like
-so:
-
-@example
-$ @kbd{awk '}
-> @kbd{BEGIN @{}
-> @kbd{    x = "ABC_CBA"}
-> @kbd{    gsub(/B/, "bb", x)}
-> @kbd{    print x}
-> @kbd{@}'}
-@print{} AbbC_CbbA
-@end example
-
-We can use @code{gsub()} to see where the empty strings
-are that match the empty regexp:
-
-@example
-$ @kbd{awk '}
-> @kbd{BEGIN @{}
-> @kbd{    x = "ABC"}
-> @kbd{    gsub(//, "x", x)}
-> @kbd{    print x}
-> @kbd{@}'}
-@print{} xAxBxCx
-@end example
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{What About The Empty Regexp?}
-
-
+@cartouche What About The Empty Regexp?
 @cindex empty regexps
 @cindex regexps, empty
 We describe here an advanced regexp usage. Feel free to skip it
@@ -6291,7 +6022,6 @@ $ @kbd{awk '}
 @print{} xAxBxCx
 @end example
 @end cartouche
-@end ifnotdocbook
 
 @node Interval Expressions
 @subsection Some Notes On Interval Expressions
@@ -6660,49 +6390,7 @@ intend a regexp match.
 @end itemize
 
 @cindex sidebar @subentry Using @code{\n} in Bracket Expressions of Dynamic 
Regexps
-@ifdocbook
-@docbook
-<sidebar><title>Using @code{\n} in Bracket Expressions of Dynamic 
Regexps</title>
-@end docbook
-
-@cindex regular expressions @subentry dynamic @subentry with embedded newlines
-@cindex newlines @subentry in dynamic regexps
-
-Some older versions of @command{awk} do not allow the newline
-character to be used inside a bracket expression for a dynamic regexp:
-
-@example
-$ @kbd{awk '$0 ~ "[ \t\n]"'}
-@error{} awk: newline in character class [
-@error{} ]...
-@error{}  source line number 1
-@error{}  context is
-@error{}        $0 ~ "[ >>>  \t\n]" <<<
-@end example
-
-@cindex newlines @subentry in regexp constants
-But a newline in a regexp constant works with no problem:
-
-@example
-$ @kbd{awk '$0 ~ /[ \t\n]/'}
-@kbd{here is a sample line}
-@print{} here is a sample line
-@kbd{Ctrl-d}
-@end example
-
-@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.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Using @code{\n} in Bracket Expressions of Dynamic Regexps}
-
-
+@cartouche Using @code{\n} in Bracket Expressions of Dynamic Regexps
 @cindex regular expressions @subentry dynamic @subentry with embedded newlines
 @cindex newlines @subentry in dynamic regexps
 
@@ -6731,7 +6419,6 @@ $ @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.
 @end cartouche
-@end ifnotdocbook
 
 @node GNU Regexp Operators
 @section @command{gawk}-Specific Regexp Operators
@@ -7350,35 +7037,7 @@ if the input text that could match the trailing part is 
fairly long.
 no guarantee that this will never happen.
 
 @cindex sidebar @subentry Caveats When Using Regular Expressions for @code{RS}
-@ifdocbook
-@docbook
-<sidebar><title>Caveats When Using Regular Expressions for @code{RS}</title>
-@end docbook
-
-Remember that in @command{awk}, the @samp{^} and @samp{$} anchor
-metacharacters match the beginning and end of a @emph{string}, and not
-the beginning and end of a @emph{line}.  As a result, something like
-@samp{RS = "^[[:upper:]]"} can only match at the beginning of a file.
-This is because @command{gawk} views the input file as one long string
-that happens to contain newline characters.
-It is thus best to avoid anchor metacharacters in the value of @code{RS}.
-
-Record splitting with regular expressions works differently than
-regexp matching with the @code{sub()}, @code{gsub()}, and @code{gensub()}
-(@pxref{String Functions}).  Those functions allow a regexp to match the empty 
string;
-record splitting does not.  Thus, for example @samp{RS = "()"} does @emph{not}
-split records between characters.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Caveats When Using Regular Expressions for @code{RS}}
-
-
+@cartouche Caveats When Using Regular Expressions for @code{RS}
 Remember that in @command{awk}, the @samp{^} and @samp{$} anchor
 metacharacters match the beginning and end of a @emph{string}, and not
 the beginning and end of a @emph{line}.  As a result, something like
@@ -7393,7 +7052,6 @@ regexp matching with the @code{sub()}, @code{gsub()}, and 
@code{gensub()}
 record splitting does not.  Thus, for example @samp{RS = "()"} does @emph{not}
 split records between characters.
 @end cartouche
-@end ifnotdocbook
 
 @cindex @command{gawk} @subentry @code{RT} variable in
 @cindex @code{RT} variable
@@ -7411,63 +7069,7 @@ As of October, 2019, BWK @command{awk} also supports it. 
 Neither
 version supplies @code{RT}, however.
 
 @cindex sidebar @subentry @code{RS = "\0"} Is Not Portable
-@ifdocbook
-@docbook
-<sidebar><title>@code{RS = "\0"} Is Not Portable</title>
-@end docbook
-
-@cindex portability @subentry data files 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.
-
-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:
-
-@example
-BEGIN @{ RS = "\0" @}  # whole file becomes one record?
-@end example
-
-@cindex differences in @command{awk} and @command{gawk} @subentry strings 
@subentry storing
-@command{gawk} in fact accepts this, and uses the @sc{nul}
-character for the record separator.
-This works for certain special files, such as @file{/proc/environ} on
-GNU/Linux systems, where the @sc{nul} character is in fact the record 
separator.
-However, this usage is @emph{not} portable
-to most other @command{awk} implementations.
-
-@cindex dark corner @subentry strings, storing
-Almost all other @command{awk} implementations@footnote{At least that we know
-about.} store strings internally as C-style strings.  C strings use the
-@sc{nul} character as the string terminator.  In effect, this means that
-@samp{RS = "\0"} is the same as @samp{RS = ""}.
-@value{DARKCORNER}
-
-It happens that recent versions of @command{mawk} can use the @sc{nul}
-character as a record separator. However, this is a special case:
-@command{mawk} does not allow embedded @sc{nul} characters in strings.
-(This may change in a future version of @command{mawk}.)
-
-@cindex records @subentry treating files as
-@cindex treating files, as single records
-@cindex single records, treating files as
-@xref{Readfile Function} for an interesting way to read
-whole files.  If you are using @command{gawk}, see @ref{Extension Sample
-Readfile} for another option.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{@code{RS = "\0"} Is Not Portable}
-
-
+@cartouche @code{RS = "\0"} Is Not Portable
 @cindex portability @subentry data files 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}
@@ -7510,7 +7112,6 @@ character as a record separator. However, this is a 
special case:
 whole files.  If you are using @command{gawk}, see @ref{Extension Sample
 Readfile} for another option.
 @end cartouche
-@end ifnotdocbook
 
 @node Fields
 @section Examining Fields
@@ -7836,36 +7437,7 @@ such as @code{sub()} and @code{gsub()}
 (@pxref{String Functions}).
 
 @cindex sidebar @subentry Understanding @code{$0}
-@ifdocbook
-@docbook
-<sidebar><title>Understanding @code{$0}</title>
-@end docbook
-
-
-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 separates the fields.
-
-It is a common 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, because 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.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Understanding @code{$0}}
-
-
+@cartouche 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
@@ -7881,7 +7453,6 @@ But this does not work, because 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.
 @end cartouche
-@end ifnotdocbook
 
 
 @node Field Separators
@@ -8199,37 +7770,7 @@ or @code{FPAT}.
 
 @cindex Kernighan, Brian @subentry quotes
 @cindex sidebar @subentry Carriage-Return--Line-Feed Line Endings In CSV Files
-@ifdocbook
-@docbook
-<sidebar><title>Carriage-Return--Line-Feed Line Endings In CSV Files</title>
-@end docbook
-
-@quotation
-@code{\r\n} @i{is the invention of the devil.}
-@author Brian Kernighan
-@end quotation
-
-Many CSV files are imported from systems where the line terminator
-for text files is a carriage-return--line-feed pair
-(CR-LF, @samp{\r} followed by @samp{\n}).
-For ease of use, when processing CSV files, @command{gawk} converts
-CR-LF pairs into a single newline. That is, the @samp{\r} is removed.
-
-This occurs only when a CR is paired with an LF; a standalone CR
-is left alone. This behavior is consistent with Windows systems
-which automatically convert CR-LF in files into a plain LF in memory,
-and also with the commonly available @command{unix2dos} utility program.
-
-@docbook
-</sidebar>
-@end docbook
-@end ifdocbook
-
-@ifnotdocbook
-@cartouche
-@center @b{Carriage-Return--Line-Feed Line Endings In CSV Files}
-
-
+@cartouche Carriage-Return--Line-Feed Line Endings In CSV Files
 @quotation
 @code{\r\n} @i{is the invention of the devil.}
 @author Brian Kernighan
@@ -8246,7 +7787,6 @@ is left alone. This behavior is consistent with Windows 
systems
 which automatically convert CR-LF in files into a plain LF in memory,
 and also with the commonly available @command{unix2dos} utility program.
 @end cartouche
-@end ifnotdocbook
 
 The behavior of the @code{split()} function (not formally discussed
 yet, see @ref{String Functions}) differs slightly when processing CSV
@@ -8388,65 +7928,7 @@ awk -F'\n' '@var{program}' @var{files @dots{}}
 When you do this, @code{