[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, master, updated. gawk-4.1.0-5137-gcecb2c65
From: |
Arnold Robbins |
Subject: |
[SCM] gawk branch, master, updated. gawk-4.1.0-5137-gcecb2c65 |
Date: |
Fri, 10 Feb 2023 09:13:04 -0500 (EST) |
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 cecb2c654b26737b23c7a41da1ccb9de9b86186b (commit)
via 33a1b76c163a4fcb7aa874530dcd217aa514c470 (commit)
from 8dcadb58459578cbc67f1a69f064483a9855c7d7 (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=cecb2c654b26737b23c7a41da1ccb9de9b86186b
commit cecb2c654b26737b23c7a41da1ccb9de9b86186b
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Feb 10 16:12:30 2023 +0200
New minor feature: Allow buffering of pipes.
diff --git a/ChangeLog b/ChangeLog
index f98d2523..9b763864 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2023-02-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * io.c (avoid_flush): New function.
+ (redirect_string): Use it when setting up an output pipeline.
+
2023-02-09 Arnold D. Robbins <arnold@skeeve.com>
* main.c (usage): Include URL for source code in the message.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index d6642212..00c0d93a 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2023-02-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in (Noflush): New section.
+ Update modified date, version and patchlevel.
+
2023-02-09 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in (Feature History): Clean up the entry for
diff --git a/doc/gawk.info b/doc/gawk.info
index a4359b3c..218f333c 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -5,7 +5,7 @@ Free Software Foundation, Inc.
This is Edition 5.2 of âGAWK: Effective AWK Programming: A Userâs
-Guide for GNU Awkâ, for the 5.2.2 (or later) version of the GNU
+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
@@ -42,7 +42,7 @@ Free Software Foundation, Inc.
This is Edition 5.2 of âGAWK: Effective AWK Programming: A Userâs
-Guide for GNU Awkâ, for the 5.2.2 (or later) version of the GNU
+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
@@ -262,6 +262,7 @@ in (a) below. A copy of the license is included in the
section entitled
* Close Return Value:: Using the return value from
âclose()â.
* Nonfatal:: Enabling Nonfatal Output.
+* Noflush:: Speeding Up Pipe Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -6780,6 +6781,7 @@ function.
âgawkâ allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Noflush:: Speeding Up Pipe Output.
* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@@ -7712,7 +7714,7 @@ that âgawkâ provides:
behavior.
-File: gawk.info, Node: Close Files And Pipes, Next: Nonfatal, Prev: Special
Files, Up: Printing
+File: gawk.info, Node: Close Files And Pipes, Next: Noflush, Prev: Special
Files, Up: Printing
5.9 Closing Input and Output Redirections
=========================================
@@ -7904,9 +7906,46 @@ co-process was the full 16-bit exit value as defined by
the âwait()â
system call.
-File: gawk.info, Node: Nonfatal, Next: Output Summary, Prev: Close Files
And Pipes, Up: Printing
+File: gawk.info, Node: Noflush, Next: Nonfatal, Prev: Close Files And
Pipes, Up: Printing
-5.10 Enabling Nonfatal Output
+5.10 Speeding Up Pipe Output
+============================
+
+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
+expected order:
+
+ print "something" # goes to standard output
+ print "someting else" | "some-command" # also to standard output
+ print "more stuff" # and this too
+
+ There can be a price to pay for this; flushing data down the pipeline
+uses more CPU time, and in certain environments this can become
+expensive.
+
+ You can tell âgawkâ not to flush buffered data in one of two ways:
+
+ ⢠Set âPROCINFO["BUFFERPIPE"]â to any value. When this is done,
+ â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.
+
+ You _must_ create one or the other of these elements in âPROCINFOâ
+before the first âprintâ or âprintfâ to the pipeline. Doing so after
+output has already been sent is too late.
+
+ Be aware that using this feature may change the output behavior of
+your programs, so exercise caution.
+
+
+File: gawk.info, Node: Nonfatal, Next: Output Summary, Prev: Noflush, Up:
Printing
+
+5.11 Enabling Nonfatal Output
=============================
This minor node describes a âgawkâ-specific feature.
@@ -7966,7 +8005,7 @@ is enabled for a given socket, âgawkâ only retries
once, relying on
File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev:
Nonfatal, Up: Printing
-5.11 Summary
+5.12 Summary
============
⢠The âprintâ statement prints comma-separated expressions. Each
@@ -7996,7 +8035,7 @@ File: gawk.info, Node: Output Summary, Next: Output
Exercises, Prev: Nonfatal
File: gawk.info, Node: Output Exercises, Prev: Output Summary, Up: Printing
-5.12 Exercises
+5.13 Exercises
==============
1. Rewrite the program:
@@ -11598,6 +11637,13 @@ they are not special:
The following elements allow you to change âgawkââs behavior:
+ âPROCINFO["BUFFERPIPE"]â
+ If this element exists, all output to pipelines becomes
+ buffered. *Note Noflush::.
+
+ âPROCINFO["COMMAND", "BUFFERPIPE"]â
+ Make output to COMMAND buffered. *Note Noflush::.
+
âPROCINFO["NONFATAL"]â
If this element exists, then I/O errors for all redirections
become nonfatal. *Note Nonfatal::.
@@ -30749,6 +30795,9 @@ unfortunately. It added the following features:
⢠Comma separated value (CSV) field splitting (*note Comma Separated
Fields::).
+ ⢠The ability to make âgawkâ buffer output to pipes (*note
+ Noflush::).
+
⢠The need for GNU âlibsigsegvâ was removed from âgawkâ. The
value-add was never very much and it caused problems in some
environments.
@@ -31128,7 +31177,7 @@ There are two ways to get GNU software:
supported. If you have the âwgetâ program, you can use a command
like the following:
- wget https://ftp.gnu.org/gnu/gawk/gawk-5.2.2.tar.gz
+ wget https://ftp.gnu.org/gnu/gawk/gawk-5.3.0.tar.gz
The GNU software archive is mirrored around the world. The
up-to-date list of mirror sites is available from the main FSF website
@@ -31150,25 +31199,25 @@ compression programs: âgzipâ, âbzip2â, and
âxzâ. For simplicity, th
rest of these instructions assume you are using the one compressed with
the GNU Gzip program (âgzipâ).
- Once you have the distribution (e.g., âgawk-5.2.2.tar.gzâ), use
+ Once you have the distribution (e.g., âgawk-5.3.0.tar.gzâ), use
âgzipâ to expand the file and then use âtarâ to extract it. You can
use
the following pipeline to produce the âgawkâ distribution:
- gzip -d -c gawk-5.2.2.tar.gz | tar -xvpf -
+ gzip -d -c gawk-5.3.0.tar.gz | tar -xvpf -
On a system with GNU âtarâ, you can let âtarâ do the decompression
for you:
- tar -xvpzf gawk-5.2.2.tar.gz
+ tar -xvpzf gawk-5.3.0.tar.gz
-Extracting the archive creates a directory named âgawk-5.2.2â in the
+Extracting the archive creates a directory named âgawk-5.3.0â in the
current directory.
The distribution file name is of the form âgawk-V.R.P.tar.gzâ. The V
represents the major version of âgawkâ, the R represents the current
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
-2, but when retrieving distributions, you should get the version with
+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
@@ -31425,7 +31474,7 @@ Unix-derived systems, GNU/Linux, BSD-based systems, and
the Cygwin
environment for MS-Windows.
After you have extracted the âgawkâ distribution, âcdâ to
-âgawk-5.2.2â. As with most GNU software, you configure âgawkâ for your
+âgawk-5.3.0â. As with most GNU software, you configure âgawkâ for your
system by running the âconfigureâ program. This program is a Bourne
shell script that is generated automatically using GNU Autoconf. (The
Autoconf software is described fully starting with *note Autoconf:
@@ -31845,8 +31894,8 @@ environment provides an excellent simulation of
GNU/Linux, using Bash,
GCC, GNU Make, and other GNU programs. Compilation and installation for
Cygwin is the same as for a Unix system:
- tar -xvpzf gawk-5.2.2.tar.gz
- cd gawk-5.2.2
+ tar -xvpzf gawk-5.3.0.tar.gz
+ cd gawk-5.3.0
./configure
make && make check
@@ -32735,9 +32784,9 @@ B.6 Summary
⢠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.2.2.tar.gz
- tar -xvpzf gawk-5.2.2.tar.gz
- cd gawk-5.2.2
+ wget https://ftp.gnu.org/gnu/gawk/gawk-5.3.0.tar.gz
+ tar -xvpzf gawk-5.3.0.tar.gz
+ cd gawk-5.3.0
./configure && make && make check
NOTE: Because of the âhttps://â URL, you may have to supply
@@ -36768,7 +36817,7 @@ Index
* 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 409)
+* 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.
@@ -37015,8 +37064,8 @@ Index
* 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 348)
-* differences in awk and gawk, SYMTAB variable: Auto-set. (line 352)
+* 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.
@@ -37459,7 +37508,7 @@ Index
(line 12)
* FNR variable: Records. (line 6)
* FNR variable <1>: Auto-set. (line 118)
-* FNR variable, changing: Auto-set. (line 409)
+* FNR variable, changing: Auto-set. (line 416)
* for statement: For Statement. (line 6)
* for statement, looping over arrays: Scanning an Array. (line 20)
* fork() extension function: Extension Sample Fork.
@@ -37627,8 +37676,8 @@ Index
* 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 348)
-* gawk, SYMTAB array in: Auto-set. (line 352)
+* 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, IGNORECASE variable in <3>: String Functions. (line 57)
@@ -38211,7 +38260,7 @@ Index
* not Boolean-logic operator: Boolean Ops. (line 6)
* NR variable: Records. (line 6)
* NR variable <1>: Auto-set. (line 143)
-* NR variable, changing: Auto-set. (line 409)
+* 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)
@@ -38734,7 +38783,7 @@ Index
* right angle bracket (>), >> operator (I/O) <1>: Precedence. (line 64)
* right shift, bitwise: Bitwise Functions. (line 33)
* Ritchie, Dennis: Basic Data Typing. (line 54)
-* RLENGTH variable: Auto-set. (line 335)
+* RLENGTH variable: Auto-set. (line 342)
* RLENGTH variable, match() function and: String Functions. (line 241)
* Robbins, Miriam: Acknowledgments. (line 94)
* Robbins, Jean: Acknowledgments. (line 94)
@@ -38764,12 +38813,12 @@ Index
* RS variable, multiline records and: Multiple Line. (line 17)
* RS variable <1>: User-modified. (line 135)
* rshift: Bitwise Functions. (line 55)
-* RSTART variable: Auto-set. (line 341)
+* RSTART variable: Auto-set. (line 348)
* RSTART variable, match() function and: String Functions. (line 241)
* RT variable: awk split records. (line 118)
* RT variable <1>: gawk split records. (line 66)
* RT variable <2>: Multiple Line. (line 138)
-* RT variable <3>: Auto-set. (line 348)
+* RT variable <3>: Auto-set. (line 355)
* Rubin, Paul: History. (line 30)
* Rubin, Paul <1>: Contributors. (line 16)
* rule, definition of: Getting Started. (line 21)
@@ -38787,7 +38836,7 @@ Index
* scanning arrays: Scanning an Array. (line 6)
* scanning multidimensional arrays: Multiscanning. (line 11)
* Schorr, Andrew: Acknowledgments. (line 60)
-* Schorr, Andrew <1>: Auto-set. (line 379)
+* Schorr, Andrew <1>: Auto-set. (line 386)
* Schorr, Andrew <2>: Contributors. (line 136)
* Schreiber, Bert: Acknowledgments. (line 38)
* Schreiber, Rita: Acknowledgments. (line 38)
@@ -38909,7 +38958,7 @@ Index
* 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 407)
+* sidebar, Changing NR and FNR: Auto-set. (line 414)
* sidebar, Matching the Null String: String Functions. (line 565)
* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
(line 73)
@@ -39075,7 +39124,7 @@ Index
* Sumner, Andrew: Other Versions. (line 64)
* supplementary groups of gawk process: Auto-set. (line 292)
* switch statement: Switch Statement. (line 6)
-* SYMTAB array: Auto-set. (line 352)
+* SYMTAB array: Auto-set. (line 359)
* syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
(line 150)
* system: I/O Functions. (line 105)
@@ -39370,620 +39419,621 @@ Index
Tag Table:
Node: Top1229
-Node: Foreword346743
-Node: Foreword451343
-Node: Preface52892
-Ref: Preface-Footnote-155884
-Ref: Preface-Footnote-255993
-Ref: Preface-Footnote-356227
-Node: History56373
-Node: Names58837
-Ref: Names-Footnote-160000
-Node: This Manual60163
-Ref: This Manual-Footnote-167113
-Node: Conventions67225
-Node: Manual History69703
-Ref: Manual History-Footnote-172740
-Ref: Manual History-Footnote-272787
-Node: How To Contribute72865
-Node: Acknowledgments73815
-Node: Getting Started78813
-Node: Running gawk81340
-Node: One-shot82558
-Node: Read Terminal83861
-Node: Long85921
-Node: Executable Scripts87502
-Ref: Executable Scripts-Footnote-190277
-Node: Comments90384
-Node: Quoting92922
-Node: DOS Quoting98571
-Node: Sample Data Files100657
-Node: Very Simple103294
-Node: Two Rules109573
-Node: More Complex111527
-Node: Statements/Lines113967
-Ref: Statements/Lines-Footnote-1118847
-Node: Other Features119136
-Node: When120104
-Ref: When-Footnote-1121910
-Node: Intro Summary121975
-Node: Invoking Gawk122931
-Node: Command Line124501
-Node: Options125352
-Ref: Options-Footnote-1144501
-Ref: Options-Footnote-2144736
-Node: Other Arguments144761
-Node: Naming Standard Input148938
-Node: Environment Variables150208
-Node: AWKPATH Variable150782
-Ref: AWKPATH Variable-Footnote-1154372
-Ref: AWKPATH Variable-Footnote-2154406
-Node: AWKLIBPATH Variable154799
-Ref: AWKLIBPATH Variable-Footnote-1156574
-Node: Other Environment Variables156971
-Node: Exit Status161467
-Node: Include Files162182
-Node: Loading Shared Libraries166053
-Node: Obsolete167545
-Node: Undocumented168181
-Node: Invoking Summary168480
-Node: Regexp171507
-Node: Regexp Usage173001
-Node: Escape Sequences175102
-Node: Regexp Operators181633
-Node: Regexp Operator Details182126
-Ref: Regexp Operator Details-Footnote-1189992
-Node: Interval Expressions190151
-Ref: Interval Expressions-Footnote-1192420
-Node: Bracket Expressions192520
-Ref: table-char-classes195080
-Node: Leftmost Longest198602
-Node: Computed Regexps199962
-Node: GNU Regexp Operators203485
-Node: Case-sensitivity207508
-Ref: Case-sensitivity-Footnote-1210465
-Ref: Case-sensitivity-Footnote-2210710
-Node: Regexp Summary210826
-Node: Reading Files212350
-Node: Records214667
-Node: awk split records215778
-Node: gawk split records220668
-Ref: gawk split records-Footnote-1225962
-Node: Fields225999
-Node: Nonconstant Fields228886
-Ref: Nonconstant Fields-Footnote-1231197
-Node: Changing Fields231413
-Node: Field Separators237721
-Node: Default Field Splitting240594
-Node: Regexp Field Splitting241737
-Node: Single Character Fields245566
-Node: Comma Separated Fields246655
-Ref: table-csv-examples247943
-Node: Command Line Field Separator248895
-Node: Full Line Fields252281
-Ref: Full Line Fields-Footnote-1253861
-Ref: Full Line Fields-Footnote-2253907
-Node: Field Splitting Summary254015
-Node: Constant Size256294
-Node: Fixed width data257038
-Node: Skipping intervening260557
-Node: Allowing trailing data261359
-Node: Fields with fixed data262424
-Node: Splitting By Content264050
-Ref: Splitting By Content-Footnote-1268235
-Node: More CSV268398
-Node: FS versus FPAT270051
-Node: Testing field creation271260
-Node: Multiple Line272953
-Node: Getline279435
-Node: Plain Getline282021
-Node: Getline/Variable284671
-Node: Getline/File285868
-Node: Getline/Variable/File287316
-Ref: Getline/Variable/File-Footnote-1288961
-Node: Getline/Pipe289057
-Node: Getline/Variable/Pipe291870
-Node: Getline/Coprocess293053
-Node: Getline/Variable/Coprocess294376
-Node: Getline Notes295142
-Node: Getline Summary298103
-Ref: table-getline-variants298547
-Node: Read Timeout299452
-Ref: Read Timeout-Footnote-1303416
-Node: Retrying Input303474
-Node: Command-line directories304741
-Node: Input Summary305679
-Node: Input Exercises309059
-Node: Printing309499
-Node: Print311385
-Node: Print Examples312891
-Node: Output Separators315744
-Node: OFMT317855
-Node: Printf319278
-Node: Basic Printf320083
-Node: Control Letters321719
-Node: Format Modifiers327188
-Node: Printf Examples333474
-Node: Redirection336019
-Node: Special FD343093
-Ref: Special FD-Footnote-1346383
-Node: Special Files346469
-Node: Other Inherited Files347098
-Node: Special Network348163
-Node: Special Caveats349051
-Node: Close Files And Pipes350034
-Ref: Close Files And Pipes-Footnote-1356171
-Node: Close Return Value356327
-Ref: table-close-pipe-return-values357602
-Ref: Close Return Value-Footnote-1358436
-Node: Nonfatal358592
-Node: Output Summary361023
-Node: Output Exercises362309
-Node: Expressions363000
-Node: Values364202
-Node: Constants364880
-Node: Scalar Constants365577
-Ref: Scalar Constants-Footnote-1368152
-Node: Nondecimal-numbers368402
-Node: Regexp Constants371523
-Node: Using Constant Regexps372069
-Node: Standard Regexp Constants372715
-Node: Strong Regexp Constants376015
-Node: Variables379866
-Node: Using Variables380531
-Node: Assignment Options382511
-Node: Conversion385073
-Node: Strings And Numbers385605
-Ref: Strings And Numbers-Footnote-1388824
-Node: Locale influences conversions388933
-Ref: table-locale-affects391783
-Node: All Operators392426
-Node: Arithmetic Ops393067
-Node: Concatenation395897
-Ref: Concatenation-Footnote-1398847
-Node: Assignment Ops398970
-Ref: table-assign-ops404109
-Node: Increment Ops405491
-Node: Truth Values and Conditions409090
-Node: Truth Values410216
-Node: Typing and Comparison411307
-Node: Variable Typing412143
-Ref: Variable Typing-Footnote-1418805
-Ref: Variable Typing-Footnote-2418885
-Node: Comparison Operators418968
-Ref: table-relational-ops419395
-Node: POSIX String Comparison423081
-Ref: POSIX String Comparison-Footnote-1424840
-Ref: POSIX String Comparison-Footnote-2424983
-Node: Boolean Ops425067
-Ref: Boolean Ops-Footnote-1429760
-Node: Conditional Exp429856
-Node: Function Calls431642
-Node: Precedence435592
-Node: Locales439469
-Node: Expressions Summary441151
-Node: Patterns and Actions443814
-Node: Pattern Overview444956
-Node: Regexp Patterns446682
-Node: Expression Patterns447228
-Node: Ranges451137
-Node: BEGIN/END454315
-Node: Using BEGIN/END455128
-Ref: Using BEGIN/END-Footnote-1458038
-Node: I/O And BEGIN/END458148
-Node: BEGINFILE/ENDFILE460629
-Node: Empty464070
-Node: Using Shell Variables464387
-Node: Action Overview466725
-Node: Statements469160
-Node: If Statement471058
-Node: While Statement472627
-Node: Do Statement474715
-Node: For Statement475901
-Node: Switch Statement479258
-Node: Break Statement481809
-Node: Continue Statement484001
-Node: Next Statement485933
-Node: Nextfile Statement488430
-Node: Exit Statement491291
-Node: Built-in Variables493824
-Node: User-modified495003
-Node: Auto-set503214
-Ref: Auto-set-Footnote-1521067
-Ref: Auto-set-Footnote-2521285
-Node: ARGC and ARGV521341
-Node: Pattern Action Summary525780
-Node: Arrays528396
-Node: Array Basics529773
-Node: Array Intro530623
-Ref: figure-array-elements532639
-Ref: Array Intro-Footnote-1535503
-Node: Reference to Elements535635
-Node: Assigning Elements538157
-Node: Array Example538652
-Node: Scanning an Array540621
-Node: Controlling Scanning543718
-Ref: Controlling Scanning-Footnote-1550381
-Node: Numeric Array Subscripts550705
-Node: Uninitialized Subscripts552979
-Node: Delete554658
-Ref: Delete-Footnote-1557472
-Node: Multidimensional557529
-Node: Multiscanning560734
-Node: Arrays of Arrays562406
-Node: Arrays Summary567306
-Node: Functions569495
-Node: Built-in570555
-Node: Calling Built-in571744
-Node: Boolean Functions573791
-Node: Numeric Functions574361
-Ref: Numeric Functions-Footnote-1578554
-Ref: Numeric Functions-Footnote-2579238
-Ref: Numeric Functions-Footnote-3579290
-Node: String Functions579566
-Ref: String Functions-Footnote-1605702
-Ref: String Functions-Footnote-2605836
-Ref: String Functions-Footnote-3606096
-Node: Gory Details606183
-Ref: table-sub-escapes608090
-Ref: table-sub-proposed609736
-Ref: table-posix-sub611246
-Ref: table-gensub-escapes612934
-Ref: Gory Details-Footnote-1613868
-Node: I/O Functions614022
-Ref: table-system-return-values620709
-Ref: I/O Functions-Footnote-1622880
-Ref: I/O Functions-Footnote-2623028
-Node: Time Functions623148
-Ref: Time Functions-Footnote-1634304
-Ref: Time Functions-Footnote-2634380
-Ref: Time Functions-Footnote-3634542
-Ref: Time Functions-Footnote-4634653
-Ref: Time Functions-Footnote-5634771
-Ref: Time Functions-Footnote-6635006
-Node: Bitwise Functions635288
-Ref: table-bitwise-ops635890
-Ref: Bitwise Functions-Footnote-1642144
-Ref: Bitwise Functions-Footnote-2642323
-Node: Type Functions642520
-Node: I18N Functions646113
-Node: User-defined647856
-Node: Definition Syntax648676
-Ref: Definition Syntax-Footnote-1654504
-Node: Function Example654581
-Ref: Function Example-Footnote-1657560
-Node: Function Calling657582
-Node: Calling A Function658176
-Node: Variable Scope659146
-Node: Pass By Value/Reference662200
-Node: Function Caveats664932
-Ref: Function Caveats-Footnote-1667027
-Node: Return Statement667151
-Node: Dynamic Typing670206
-Node: Indirect Calls671162
-Node: Functions Summary682321
-Node: Library Functions685098
-Ref: Library Functions-Footnote-1688646
-Ref: Library Functions-Footnote-2688789
-Node: Library Names688964
-Ref: Library Names-Footnote-1692758
-Ref: Library Names-Footnote-2692985
-Node: General Functions693081
-Node: Strtonum Function694275
-Node: Assert Function697357
-Node: Round Function700809
-Node: Cliff Random Function702387
-Node: Ordinal Functions703420
-Ref: Ordinal Functions-Footnote-1706529
-Ref: Ordinal Functions-Footnote-2706781
-Node: Join Function706995
-Ref: Join Function-Footnote-1708798
-Node: Getlocaltime Function709002
-Node: Readfile Function712776
-Node: Shell Quoting714805
-Node: Isnumeric Function716261
-Node: Data File Management717673
-Node: Filetrans Function718305
-Node: Rewind Function722599
-Node: File Checking724578
-Ref: File Checking-Footnote-1725950
-Node: Empty Files726157
-Node: Ignoring Assigns728224
-Node: Getopt Function729798
-Ref: Getopt Function-Footnote-1745632
-Node: Passwd Functions745844
-Ref: Passwd Functions-Footnote-1755026
-Node: Group Functions755114
-Ref: Group Functions-Footnote-1763252
-Node: Walking Arrays763465
-Node: Library Functions Summary766513
-Node: Library Exercises767937
-Node: Sample Programs768424
-Node: Running Examples769206
-Node: Clones769958
-Node: Cut Program771230
-Node: Egrep Program781671
-Node: Id Program790988
-Node: Split Program801102
-Ref: Split Program-Footnote-1811337
-Node: Tee Program811524
-Node: Uniq Program814433
-Node: Wc Program822298
-Node: Bytes vs. Characters822693
-Node: Using extensions824295
-Node: wc program825075
-Node: Miscellaneous Programs830081
-Node: Dupword Program831310
-Node: Alarm Program833373
-Node: Translate Program838286
-Ref: Translate Program-Footnote-1843027
-Node: Labels Program843305
-Ref: Labels Program-Footnote-1846746
-Node: Word Sorting846838
-Node: History Sorting851032
-Node: Extract Program853307
-Node: Simple Sed861576
-Node: Igawk Program864792
-Ref: Igawk Program-Footnote-1880039
-Ref: Igawk Program-Footnote-2880245
-Ref: Igawk Program-Footnote-3880375
-Node: Anagram Program880502
-Node: Signature Program883598
-Node: Programs Summary884850
-Node: Programs Exercises886108
-Ref: Programs Exercises-Footnote-1890424
-Node: Advanced Features890510
-Node: Nondecimal Data893004
-Node: Boolean Typed Values894634
-Node: Array Sorting896609
-Node: Controlling Array Traversal897338
-Ref: Controlling Array Traversal-Footnote-1905845
-Node: Array Sorting Functions905967
-Ref: Array Sorting Functions-Footnote-1912086
-Node: Two-way I/O912294
-Ref: Two-way I/O-Footnote-1920289
-Ref: Two-way I/O-Footnote-2920480
-Node: TCP/IP Networking920562
-Node: Profiling923742
-Node: Persistent Memory933452
-Ref: Persistent Memory-Footnote-1942410
-Node: Extension Philosophy942541
-Node: Advanced Features Summary944076
-Node: Internationalization946346
-Node: I18N and L10N948052
-Node: Explaining gettext948747
-Ref: Explaining gettext-Footnote-1954900
-Ref: Explaining gettext-Footnote-2955095
-Node: Programmer i18n955260
-Ref: Programmer i18n-Footnote-1960373
-Node: Translator i18n960422
-Node: String Extraction961258
-Ref: String Extraction-Footnote-1962436
-Node: Printf Ordering962534
-Ref: Printf Ordering-Footnote-1965396
-Node: I18N Portability965464
-Ref: I18N Portability-Footnote-1968038
-Node: I18N Example968109
-Ref: I18N Example-Footnote-1971509
-Ref: I18N Example-Footnote-2971585
-Node: Gawk I18N971702
-Node: I18N Summary972358
-Node: Debugger973759
-Node: Debugging974783
-Node: Debugging Concepts975232
-Node: Debugging Terms977058
-Node: Awk Debugging979671
-Ref: Awk Debugging-Footnote-1980648
-Node: Sample Debugging Session980788
-Node: Debugger Invocation981340
-Node: Finding The Bug982969
-Node: List of Debugger Commands989655
-Node: Breakpoint Control991032
-Node: Debugger Execution Control994864
-Node: Viewing And Changing Data998344
-Node: Execution Stack1002082
-Node: Debugger Info1003763
-Node: Miscellaneous Debugger Commands1008062
-Node: Readline Support1013315
-Node: Limitations1014261
-Node: Debugging Summary1016905
-Node: Namespaces1018208
-Node: Global Namespace1019335
-Node: Qualified Names1020780
-Node: Default Namespace1021815
-Node: Changing The Namespace1022590
-Node: Naming Rules1024284
-Node: Internal Name Management1026199
-Node: Namespace Example1027269
-Node: Namespace And Features1029852
-Node: Namespace Summary1031309
-Node: Arbitrary Precision Arithmetic1032822
-Node: Computer Arithmetic1034341
-Ref: table-numeric-ranges1038158
-Ref: table-floating-point-ranges1038656
-Ref: Computer Arithmetic-Footnote-11039315
-Node: Math Definitions1039374
-Ref: table-ieee-formats1042419
-Node: MPFR features1042993
-Node: MPFR On Parole1043446
-Ref: MPFR On Parole-Footnote-11044290
-Node: MPFR Intro1044449
-Node: FP Math Caution1046139
-Ref: FP Math Caution-Footnote-11047213
-Node: Inexactness of computations1047590
-Node: Inexact representation1048621
-Node: Comparing FP Values1050004
-Node: Errors accumulate1051262
-Node: Strange values1052729
-Ref: Strange values-Footnote-11055395
-Node: Getting Accuracy1055500
-Node: Try To Round1058237
-Node: Setting precision1059144
-Ref: table-predefined-precision-strings1059849
-Node: Setting the rounding mode1061734
-Ref: table-gawk-rounding-modes1062116
-Ref: Setting the rounding mode-Footnote-11066174
-Node: Arbitrary Precision Integers1066357
-Ref: Arbitrary Precision Integers-Footnote-11069569
-Node: Checking for MPFR1069725
-Node: POSIX Floating Point Problems1071215
-Ref: POSIX Floating Point Problems-Footnote-11076079
-Node: Floating point summary1076117
-Node: Dynamic Extensions1078381
-Node: Extension Intro1079980
-Node: Plugin License1081288
-Node: Extension Mechanism Outline1082101
-Ref: figure-load-extension1082552
-Ref: figure-register-new-function1084132
-Ref: figure-call-new-function1085237
-Node: Extension API Description1087356
-Node: Extension API Functions Introduction1089085
-Ref: table-api-std-headers1090983
-Node: General Data Types1095447
-Ref: General Data Types-Footnote-11104615
-Node: Memory Allocation Functions1104930
-Ref: Memory Allocation Functions-Footnote-11109655
-Node: Constructor Functions1109754
-Node: API Ownership of MPFR and GMP Values1113659
-Node: Registration Functions1115220
-Node: Extension Functions1115924
-Node: Exit Callback Functions1121500
-Node: Extension Version String1122819
-Node: Input Parsers1123514
-Node: Output Wrappers1136888
-Node: Two-way processors1141596
-Node: Printing Messages1143957
-Ref: Printing Messages-Footnote-11145171
-Node: Updating ERRNO1145326
-Node: Requesting Values1146125
-Ref: table-value-types-returned1146878
-Node: Accessing Parameters1147987
-Node: Symbol Table Access1149271
-Node: Symbol table by name1149787
-Ref: Symbol table by name-Footnote-11152998
-Node: Symbol table by cookie1153130
-Ref: Symbol table by cookie-Footnote-11157411
-Node: Cached values1157475
-Ref: Cached values-Footnote-11161119
-Node: Array Manipulation1161276
-Ref: Array Manipulation-Footnote-11162379
-Node: Array Data Types1162416
-Ref: Array Data Types-Footnote-11165238
-Node: Array Functions1165338
-Node: Flattening Arrays1170367
-Node: Creating Arrays1177419
-Node: Redirection API1182269
-Node: Extension API Variables1185290
-Node: Extension Versioning1186015
-Ref: gawk-api-version1186452
-Node: Extension GMP/MPFR Versioning1188240
-Node: Extension API Informational Variables1189946
-Node: Extension API Boilerplate1191107
-Node: Changes from API V11195243
-Node: Finding Extensions1196877
-Node: Extension Example1197452
-Node: Internal File Description1198276
-Node: Internal File Ops1202600
-Ref: Internal File Ops-Footnote-11214158
-Node: Using Internal File Ops1214306
-Ref: Using Internal File Ops-Footnote-11216737
-Node: Extension Samples1217015
-Node: Extension Sample File Functions1218584
-Node: Extension Sample Fnmatch1226722
-Node: Extension Sample Fork1228317
-Node: Extension Sample Inplace1229593
-Node: Extension Sample Ord1233265
-Node: Extension Sample Readdir1234141
-Ref: table-readdir-file-types1235038
-Node: Extension Sample Revout1236176
-Node: Extension Sample Rev2way1236773
-Node: Extension Sample Read write array1237525
-Node: Extension Sample Readfile1240799
-Node: Extension Sample Time1241930
-Node: Extension Sample API Tests1244220
-Node: gawkextlib1244728
-Node: Extension summary1247764
-Node: Extension Exercises1251622
-Node: Language History1252900
-Node: V7/SVR3.11254614
-Node: SVR41256964
-Node: POSIX1258496
-Node: BTL1259921
-Node: POSIX/GNU1260690
-Node: Feature History1267221
-Node: Common Extensions1286584
-Node: Ranges and Locales1287953
-Ref: Ranges and Locales-Footnote-11292754
-Ref: Ranges and Locales-Footnote-21292781
-Ref: Ranges and Locales-Footnote-31293020
-Node: Contributors1293243
-Node: History summary1299448
-Node: Installation1300894
-Node: Gawk Distribution1301858
-Node: Getting1302350
-Node: Extracting1303349
-Node: Distribution contents1305061
-Node: Unix Installation1313141
-Node: Quick Installation1313963
-Node: Compiling with MPFR1316509
-Node: Shell Startup Files1317215
-Node: Additional Configuration Options1318372
-Node: Configuration Philosophy1320759
-Node: Compiling from Git1323261
-Node: Building the Documentation1323820
-Node: Non-Unix Installation1325232
-Node: PC Installation1325708
-Node: PC Binary Installation1326581
-Node: PC Compiling1327486
-Node: PC Using1328664
-Node: Cygwin1332392
-Node: MSYS1333648
-Node: OpenVMS Installation1334280
-Node: OpenVMS Compilation1334961
-Ref: OpenVMS Compilation-Footnote-11336444
-Node: OpenVMS Dynamic Extensions1336506
-Node: OpenVMS Installation Details1338142
-Node: OpenVMS Running1340577
-Node: OpenVMS GNV1344714
-Node: Bugs1345469
-Node: Bug definition1346393
-Node: Bug address1350044
-Node: Usenet1353635
-Node: Performance bugs1354866
-Node: Asking for help1357884
-Node: Maintainers1359875
-Node: Other Versions1360902
-Node: Installation summary1369834
-Node: Notes1371218
-Node: Compatibility Mode1372028
-Node: Additions1372850
-Node: Accessing The Source1373795
-Node: Adding Code1375330
-Node: New Ports1382466
-Node: Derived Files1386976
-Ref: Derived Files-Footnote-11392823
-Ref: Derived Files-Footnote-21392858
-Ref: Derived Files-Footnote-31393475
-Node: Future Extensions1393589
-Node: Implementation Limitations1394261
-Node: Extension Design1395503
-Node: Old Extension Problems1396667
-Ref: Old Extension Problems-Footnote-11398243
-Node: Extension New Mechanism Goals1398304
-Ref: Extension New Mechanism Goals-Footnote-11401800
-Node: Extension Other Design Decisions1402001
-Node: Extension Future Growth1404200
-Node: Notes summary1404824
-Node: Basic Concepts1406037
-Node: Basic High Level1406722
-Ref: figure-general-flow1407004
-Ref: figure-process-flow1407706
-Ref: Basic High Level-Footnote-11411102
-Node: Basic Data Typing1411291
-Node: Glossary1414709
-Node: Copying1447831
-Node: GNU Free Documentation License1485592
-Node: Index1510915
+Node: Foreword346808
+Node: Foreword451408
+Node: Preface52957
+Ref: Preface-Footnote-155949
+Ref: Preface-Footnote-256058
+Ref: Preface-Footnote-356292
+Node: History56438
+Node: Names58902
+Ref: Names-Footnote-160065
+Node: This Manual60228
+Ref: This Manual-Footnote-167178
+Node: Conventions67290
+Node: Manual History69768
+Ref: Manual History-Footnote-172805
+Ref: Manual History-Footnote-272852
+Node: How To Contribute72930
+Node: Acknowledgments73880
+Node: Getting Started78878
+Node: Running gawk81405
+Node: One-shot82623
+Node: Read Terminal83926
+Node: Long85986
+Node: Executable Scripts87567
+Ref: Executable Scripts-Footnote-190342
+Node: Comments90449
+Node: Quoting92987
+Node: DOS Quoting98636
+Node: Sample Data Files100722
+Node: Very Simple103359
+Node: Two Rules109638
+Node: More Complex111592
+Node: Statements/Lines114032
+Ref: Statements/Lines-Footnote-1118912
+Node: Other Features119201
+Node: When120169
+Ref: When-Footnote-1121975
+Node: Intro Summary122040
+Node: Invoking Gawk122996
+Node: Command Line124566
+Node: Options125417
+Ref: Options-Footnote-1144566
+Ref: Options-Footnote-2144801
+Node: Other Arguments144826
+Node: Naming Standard Input149003
+Node: Environment Variables150273
+Node: AWKPATH Variable150847
+Ref: AWKPATH Variable-Footnote-1154437
+Ref: AWKPATH Variable-Footnote-2154471
+Node: AWKLIBPATH Variable154864
+Ref: AWKLIBPATH Variable-Footnote-1156639
+Node: Other Environment Variables157036
+Node: Exit Status161532
+Node: Include Files162247
+Node: Loading Shared Libraries166118
+Node: Obsolete167610
+Node: Undocumented168246
+Node: Invoking Summary168545
+Node: Regexp171572
+Node: Regexp Usage173066
+Node: Escape Sequences175167
+Node: Regexp Operators181698
+Node: Regexp Operator Details182191
+Ref: Regexp Operator Details-Footnote-1190057
+Node: Interval Expressions190216
+Ref: Interval Expressions-Footnote-1192485
+Node: Bracket Expressions192585
+Ref: table-char-classes195145
+Node: Leftmost Longest198667
+Node: Computed Regexps200027
+Node: GNU Regexp Operators203550
+Node: Case-sensitivity207573
+Ref: Case-sensitivity-Footnote-1210530
+Ref: Case-sensitivity-Footnote-2210775
+Node: Regexp Summary210891
+Node: Reading Files212415
+Node: Records214732
+Node: awk split records215843
+Node: gawk split records220733
+Ref: gawk split records-Footnote-1226027
+Node: Fields226064
+Node: Nonconstant Fields228951
+Ref: Nonconstant Fields-Footnote-1231262
+Node: Changing Fields231478
+Node: Field Separators237786
+Node: Default Field Splitting240659
+Node: Regexp Field Splitting241802
+Node: Single Character Fields245631
+Node: Comma Separated Fields246720
+Ref: table-csv-examples248008
+Node: Command Line Field Separator248960
+Node: Full Line Fields252346
+Ref: Full Line Fields-Footnote-1253926
+Ref: Full Line Fields-Footnote-2253972
+Node: Field Splitting Summary254080
+Node: Constant Size256359
+Node: Fixed width data257103
+Node: Skipping intervening260622
+Node: Allowing trailing data261424
+Node: Fields with fixed data262489
+Node: Splitting By Content264115
+Ref: Splitting By Content-Footnote-1268300
+Node: More CSV268463
+Node: FS versus FPAT270116
+Node: Testing field creation271325
+Node: Multiple Line273018
+Node: Getline279500
+Node: Plain Getline282086
+Node: Getline/Variable284736
+Node: Getline/File285933
+Node: Getline/Variable/File287381
+Ref: Getline/Variable/File-Footnote-1289026
+Node: Getline/Pipe289122
+Node: Getline/Variable/Pipe291935
+Node: Getline/Coprocess293118
+Node: Getline/Variable/Coprocess294441
+Node: Getline Notes295207
+Node: Getline Summary298168
+Ref: table-getline-variants298612
+Node: Read Timeout299517
+Ref: Read Timeout-Footnote-1303481
+Node: Retrying Input303539
+Node: Command-line directories304806
+Node: Input Summary305744
+Node: Input Exercises309124
+Node: Printing309564
+Node: Print311507
+Node: Print Examples313013
+Node: Output Separators315866
+Node: OFMT317977
+Node: Printf319400
+Node: Basic Printf320205
+Node: Control Letters321841
+Node: Format Modifiers327310
+Node: Printf Examples333596
+Node: Redirection336141
+Node: Special FD343215
+Ref: Special FD-Footnote-1346505
+Node: Special Files346591
+Node: Other Inherited Files347220
+Node: Special Network348285
+Node: Special Caveats349173
+Node: Close Files And Pipes350156
+Ref: Close Files And Pipes-Footnote-1356292
+Node: Close Return Value356448
+Ref: table-close-pipe-return-values357723
+Ref: Close Return Value-Footnote-1358557
+Node: Noflush358713
+Node: Nonfatal360185
+Node: Output Summary362602
+Node: Output Exercises363888
+Node: Expressions364579
+Node: Values365781
+Node: Constants366459
+Node: Scalar Constants367156
+Ref: Scalar Constants-Footnote-1369731
+Node: Nondecimal-numbers369981
+Node: Regexp Constants373102
+Node: Using Constant Regexps373648
+Node: Standard Regexp Constants374294
+Node: Strong Regexp Constants377594
+Node: Variables381445
+Node: Using Variables382110
+Node: Assignment Options384090
+Node: Conversion386652
+Node: Strings And Numbers387184
+Ref: Strings And Numbers-Footnote-1390403
+Node: Locale influences conversions390512
+Ref: table-locale-affects393362
+Node: All Operators394005
+Node: Arithmetic Ops394646
+Node: Concatenation397476
+Ref: Concatenation-Footnote-1400426
+Node: Assignment Ops400549
+Ref: table-assign-ops405688
+Node: Increment Ops407070
+Node: Truth Values and Conditions410669
+Node: Truth Values411795
+Node: Typing and Comparison412886
+Node: Variable Typing413722
+Ref: Variable Typing-Footnote-1420384
+Ref: Variable Typing-Footnote-2420464
+Node: Comparison Operators420547
+Ref: table-relational-ops420974
+Node: POSIX String Comparison424660
+Ref: POSIX String Comparison-Footnote-1426419
+Ref: POSIX String Comparison-Footnote-2426562
+Node: Boolean Ops426646
+Ref: Boolean Ops-Footnote-1431339
+Node: Conditional Exp431435
+Node: Function Calls433221
+Node: Precedence437171
+Node: Locales441048
+Node: Expressions Summary442730
+Node: Patterns and Actions445393
+Node: Pattern Overview446535
+Node: Regexp Patterns448261
+Node: Expression Patterns448807
+Node: Ranges452716
+Node: BEGIN/END455894
+Node: Using BEGIN/END456707
+Ref: Using BEGIN/END-Footnote-1459617
+Node: I/O And BEGIN/END459727
+Node: BEGINFILE/ENDFILE462208
+Node: Empty465649
+Node: Using Shell Variables465966
+Node: Action Overview468304
+Node: Statements470739
+Node: If Statement472637
+Node: While Statement474206
+Node: Do Statement476294
+Node: For Statement477480
+Node: Switch Statement480837
+Node: Break Statement483388
+Node: Continue Statement485580
+Node: Next Statement487512
+Node: Nextfile Statement490009
+Node: Exit Statement492870
+Node: Built-in Variables495403
+Node: User-modified496582
+Node: Auto-set504793
+Ref: Auto-set-Footnote-1522892
+Ref: Auto-set-Footnote-2523110
+Node: ARGC and ARGV523166
+Node: Pattern Action Summary527605
+Node: Arrays530221
+Node: Array Basics531598
+Node: Array Intro532448
+Ref: figure-array-elements534464
+Ref: Array Intro-Footnote-1537328
+Node: Reference to Elements537460
+Node: Assigning Elements539982
+Node: Array Example540477
+Node: Scanning an Array542446
+Node: Controlling Scanning545543
+Ref: Controlling Scanning-Footnote-1552206
+Node: Numeric Array Subscripts552530
+Node: Uninitialized Subscripts554804
+Node: Delete556483
+Ref: Delete-Footnote-1559297
+Node: Multidimensional559354
+Node: Multiscanning562559
+Node: Arrays of Arrays564231
+Node: Arrays Summary569131
+Node: Functions571320
+Node: Built-in572380
+Node: Calling Built-in573569
+Node: Boolean Functions575616
+Node: Numeric Functions576186
+Ref: Numeric Functions-Footnote-1580379
+Ref: Numeric Functions-Footnote-2581063
+Ref: Numeric Functions-Footnote-3581115
+Node: String Functions581391
+Ref: String Functions-Footnote-1607527
+Ref: String Functions-Footnote-2607661
+Ref: String Functions-Footnote-3607921
+Node: Gory Details608008
+Ref: table-sub-escapes609915
+Ref: table-sub-proposed611561
+Ref: table-posix-sub613071
+Ref: table-gensub-escapes614759
+Ref: Gory Details-Footnote-1615693
+Node: I/O Functions615847
+Ref: table-system-return-values622534
+Ref: I/O Functions-Footnote-1624705
+Ref: I/O Functions-Footnote-2624853
+Node: Time Functions624973
+Ref: Time Functions-Footnote-1636129
+Ref: Time Functions-Footnote-2636205
+Ref: Time Functions-Footnote-3636367
+Ref: Time Functions-Footnote-4636478
+Ref: Time Functions-Footnote-5636596
+Ref: Time Functions-Footnote-6636831
+Node: Bitwise Functions637113
+Ref: table-bitwise-ops637715
+Ref: Bitwise Functions-Footnote-1643969
+Ref: Bitwise Functions-Footnote-2644148
+Node: Type Functions644345
+Node: I18N Functions647938
+Node: User-defined649681
+Node: Definition Syntax650501
+Ref: Definition Syntax-Footnote-1656329
+Node: Function Example656406
+Ref: Function Example-Footnote-1659385
+Node: Function Calling659407
+Node: Calling A Function660001
+Node: Variable Scope660971
+Node: Pass By Value/Reference664025
+Node: Function Caveats666757
+Ref: Function Caveats-Footnote-1668852
+Node: Return Statement668976
+Node: Dynamic Typing672031
+Node: Indirect Calls672987
+Node: Functions Summary684146
+Node: Library Functions686923
+Ref: Library Functions-Footnote-1690471
+Ref: Library Functions-Footnote-2690614
+Node: Library Names690789
+Ref: Library Names-Footnote-1694583
+Ref: Library Names-Footnote-2694810
+Node: General Functions694906
+Node: Strtonum Function696100
+Node: Assert Function699182
+Node: Round Function702634
+Node: Cliff Random Function704212
+Node: Ordinal Functions705245
+Ref: Ordinal Functions-Footnote-1708354
+Ref: Ordinal Functions-Footnote-2708606
+Node: Join Function708820
+Ref: Join Function-Footnote-1710623
+Node: Getlocaltime Function710827
+Node: Readfile Function714601
+Node: Shell Quoting716630
+Node: Isnumeric Function718086
+Node: Data File Management719498
+Node: Filetrans Function720130
+Node: Rewind Function724424
+Node: File Checking726403
+Ref: File Checking-Footnote-1727775
+Node: Empty Files727982
+Node: Ignoring Assigns730049
+Node: Getopt Function731623
+Ref: Getopt Function-Footnote-1747457
+Node: Passwd Functions747669
+Ref: Passwd Functions-Footnote-1756851
+Node: Group Functions756939
+Ref: Group Functions-Footnote-1765077
+Node: Walking Arrays765290
+Node: Library Functions Summary768338
+Node: Library Exercises769762
+Node: Sample Programs770249
+Node: Running Examples771031
+Node: Clones771783
+Node: Cut Program773055
+Node: Egrep Program783496
+Node: Id Program792813
+Node: Split Program802927
+Ref: Split Program-Footnote-1813162
+Node: Tee Program813349
+Node: Uniq Program816258
+Node: Wc Program824123
+Node: Bytes vs. Characters824518
+Node: Using extensions826120
+Node: wc program826900
+Node: Miscellaneous Programs831906
+Node: Dupword Program833135
+Node: Alarm Program835198
+Node: Translate Program840111
+Ref: Translate Program-Footnote-1844852
+Node: Labels Program845130
+Ref: Labels Program-Footnote-1848571
+Node: Word Sorting848663
+Node: History Sorting852857
+Node: Extract Program855132
+Node: Simple Sed863401
+Node: Igawk Program866617
+Ref: Igawk Program-Footnote-1881864
+Ref: Igawk Program-Footnote-2882070
+Ref: Igawk Program-Footnote-3882200
+Node: Anagram Program882327
+Node: Signature Program885423
+Node: Programs Summary886675
+Node: Programs Exercises887933
+Ref: Programs Exercises-Footnote-1892249
+Node: Advanced Features892335
+Node: Nondecimal Data894829
+Node: Boolean Typed Values896459
+Node: Array Sorting898434
+Node: Controlling Array Traversal899163
+Ref: Controlling Array Traversal-Footnote-1907670
+Node: Array Sorting Functions907792
+Ref: Array Sorting Functions-Footnote-1913911
+Node: Two-way I/O914119
+Ref: Two-way I/O-Footnote-1922114
+Ref: Two-way I/O-Footnote-2922305
+Node: TCP/IP Networking922387
+Node: Profiling925567
+Node: Persistent Memory935277
+Ref: Persistent Memory-Footnote-1944235
+Node: Extension Philosophy944366
+Node: Advanced Features Summary945901
+Node: Internationalization948171
+Node: I18N and L10N949877
+Node: Explaining gettext950572
+Ref: Explaining gettext-Footnote-1956725
+Ref: Explaining gettext-Footnote-2956920
+Node: Programmer i18n957085
+Ref: Programmer i18n-Footnote-1962198
+Node: Translator i18n962247
+Node: String Extraction963083
+Ref: String Extraction-Footnote-1964261
+Node: Printf Ordering964359
+Ref: Printf Ordering-Footnote-1967221
+Node: I18N Portability967289
+Ref: I18N Portability-Footnote-1969863
+Node: I18N Example969934
+Ref: I18N Example-Footnote-1973334
+Ref: I18N Example-Footnote-2973410
+Node: Gawk I18N973527
+Node: I18N Summary974183
+Node: Debugger975584
+Node: Debugging976608
+Node: Debugging Concepts977057
+Node: Debugging Terms978883
+Node: Awk Debugging981496
+Ref: Awk Debugging-Footnote-1982473
+Node: Sample Debugging Session982613
+Node: Debugger Invocation983165
+Node: Finding The Bug984794
+Node: List of Debugger Commands991480
+Node: Breakpoint Control992857
+Node: Debugger Execution Control996689
+Node: Viewing And Changing Data1000169
+Node: Execution Stack1003907
+Node: Debugger Info1005588
+Node: Miscellaneous Debugger Commands1009887
+Node: Readline Support1015140
+Node: Limitations1016086
+Node: Debugging Summary1018730
+Node: Namespaces1020033
+Node: Global Namespace1021160
+Node: Qualified Names1022605
+Node: Default Namespace1023640
+Node: Changing The Namespace1024415
+Node: Naming Rules1026109
+Node: Internal Name Management1028024
+Node: Namespace Example1029094
+Node: Namespace And Features1031677
+Node: Namespace Summary1033134
+Node: Arbitrary Precision Arithmetic1034647
+Node: Computer Arithmetic1036166
+Ref: table-numeric-ranges1039983
+Ref: table-floating-point-ranges1040481
+Ref: Computer Arithmetic-Footnote-11041140
+Node: Math Definitions1041199
+Ref: table-ieee-formats1044244
+Node: MPFR features1044818
+Node: MPFR On Parole1045271
+Ref: MPFR On Parole-Footnote-11046115
+Node: MPFR Intro1046274
+Node: FP Math Caution1047964
+Ref: FP Math Caution-Footnote-11049038
+Node: Inexactness of computations1049415
+Node: Inexact representation1050446
+Node: Comparing FP Values1051829
+Node: Errors accumulate1053087
+Node: Strange values1054554
+Ref: Strange values-Footnote-11057220
+Node: Getting Accuracy1057325
+Node: Try To Round1060062
+Node: Setting precision1060969
+Ref: table-predefined-precision-strings1061674
+Node: Setting the rounding mode1063559
+Ref: table-gawk-rounding-modes1063941
+Ref: Setting the rounding mode-Footnote-11067999
+Node: Arbitrary Precision Integers1068182
+Ref: Arbitrary Precision Integers-Footnote-11071394
+Node: Checking for MPFR1071550
+Node: POSIX Floating Point Problems1073040
+Ref: POSIX Floating Point Problems-Footnote-11077904
+Node: Floating point summary1077942
+Node: Dynamic Extensions1080206
+Node: Extension Intro1081805
+Node: Plugin License1083113
+Node: Extension Mechanism Outline1083926
+Ref: figure-load-extension1084377
+Ref: figure-register-new-function1085957
+Ref: figure-call-new-function1087062
+Node: Extension API Description1089181
+Node: Extension API Functions Introduction1090910
+Ref: table-api-std-headers1092808
+Node: General Data Types1097272
+Ref: General Data Types-Footnote-11106440
+Node: Memory Allocation Functions1106755
+Ref: Memory Allocation Functions-Footnote-11111480
+Node: Constructor Functions1111579
+Node: API Ownership of MPFR and GMP Values1115484
+Node: Registration Functions1117045
+Node: Extension Functions1117749
+Node: Exit Callback Functions1123325
+Node: Extension Version String1124644
+Node: Input Parsers1125339
+Node: Output Wrappers1138713
+Node: Two-way processors1143421
+Node: Printing Messages1145782
+Ref: Printing Messages-Footnote-11146996
+Node: Updating ERRNO1147151
+Node: Requesting Values1147950
+Ref: table-value-types-returned1148703
+Node: Accessing Parameters1149812
+Node: Symbol Table Access1151096
+Node: Symbol table by name1151612
+Ref: Symbol table by name-Footnote-11154823
+Node: Symbol table by cookie1154955
+Ref: Symbol table by cookie-Footnote-11159236
+Node: Cached values1159300
+Ref: Cached values-Footnote-11162944
+Node: Array Manipulation1163101
+Ref: Array Manipulation-Footnote-11164204
+Node: Array Data Types1164241
+Ref: Array Data Types-Footnote-11167063
+Node: Array Functions1167163
+Node: Flattening Arrays1172192
+Node: Creating Arrays1179244
+Node: Redirection API1184094
+Node: Extension API Variables1187115
+Node: Extension Versioning1187840
+Ref: gawk-api-version1188277
+Node: Extension GMP/MPFR Versioning1190065
+Node: Extension API Informational Variables1191771
+Node: Extension API Boilerplate1192932
+Node: Changes from API V11197068
+Node: Finding Extensions1198702
+Node: Extension Example1199277
+Node: Internal File Description1200101
+Node: Internal File Ops1204425
+Ref: Internal File Ops-Footnote-11215983
+Node: Using Internal File Ops1216131
+Ref: Using Internal File Ops-Footnote-11218562
+Node: Extension Samples1218840
+Node: Extension Sample File Functions1220409
+Node: Extension Sample Fnmatch1228547
+Node: Extension Sample Fork1230142
+Node: Extension Sample Inplace1231418
+Node: Extension Sample Ord1235090
+Node: Extension Sample Readdir1235966
+Ref: table-readdir-file-types1236863
+Node: Extension Sample Revout1238001
+Node: Extension Sample Rev2way1238598
+Node: Extension Sample Read write array1239350
+Node: Extension Sample Readfile1242624
+Node: Extension Sample Time1243755
+Node: Extension Sample API Tests1246045
+Node: gawkextlib1246553
+Node: Extension summary1249589
+Node: Extension Exercises1253447
+Node: Language History1254725
+Node: V7/SVR3.11256439
+Node: SVR41258789
+Node: POSIX1260321
+Node: BTL1261746
+Node: POSIX/GNU1262515
+Node: Feature History1269046
+Node: Common Extensions1288495
+Node: Ranges and Locales1289864
+Ref: Ranges and Locales-Footnote-11294665
+Ref: Ranges and Locales-Footnote-21294692
+Ref: Ranges and Locales-Footnote-31294931
+Node: Contributors1295154
+Node: History summary1301359
+Node: Installation1302805
+Node: Gawk Distribution1303769
+Node: Getting1304261
+Node: Extracting1305260
+Node: Distribution contents1306972
+Node: Unix Installation1315052
+Node: Quick Installation1315874
+Node: Compiling with MPFR1318420
+Node: Shell Startup Files1319126
+Node: Additional Configuration Options1320283
+Node: Configuration Philosophy1322670
+Node: Compiling from Git1325172
+Node: Building the Documentation1325731
+Node: Non-Unix Installation1327143
+Node: PC Installation1327619
+Node: PC Binary Installation1328492
+Node: PC Compiling1329397
+Node: PC Using1330575
+Node: Cygwin1334303
+Node: MSYS1335559
+Node: OpenVMS Installation1336191
+Node: OpenVMS Compilation1336872
+Ref: OpenVMS Compilation-Footnote-11338355
+Node: OpenVMS Dynamic Extensions1338417
+Node: OpenVMS Installation Details1340053
+Node: OpenVMS Running1342488
+Node: OpenVMS GNV1346625
+Node: Bugs1347380
+Node: Bug definition1348304
+Node: Bug address1351955
+Node: Usenet1355546
+Node: Performance bugs1356777
+Node: Asking for help1359795
+Node: Maintainers1361786
+Node: Other Versions1362813
+Node: Installation summary1371745
+Node: Notes1373129
+Node: Compatibility Mode1373939
+Node: Additions1374761
+Node: Accessing The Source1375706
+Node: Adding Code1377241
+Node: New Ports1384377
+Node: Derived Files1388887
+Ref: Derived Files-Footnote-11394734
+Ref: Derived Files-Footnote-21394769
+Ref: Derived Files-Footnote-31395386
+Node: Future Extensions1395500
+Node: Implementation Limitations1396172
+Node: Extension Design1397414
+Node: Old Extension Problems1398578
+Ref: Old Extension Problems-Footnote-11400154
+Node: Extension New Mechanism Goals1400215
+Ref: Extension New Mechanism Goals-Footnote-11403711
+Node: Extension Other Design Decisions1403912
+Node: Extension Future Growth1406111
+Node: Notes summary1406735
+Node: Basic Concepts1407948
+Node: Basic High Level1408633
+Ref: figure-general-flow1408915
+Ref: figure-process-flow1409617
+Ref: Basic High Level-Footnote-11413013
+Node: Basic Data Typing1413202
+Node: Glossary1416620
+Node: Copying1449742
+Node: GNU Free Documentation License1487503
+Node: Index1512826
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 0277d632..85ccc261 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -59,9 +59,9 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH December, 2022
-@set VERSION 5.2
-@set PATCHLEVEL 2
+@set UPDATE-MONTH February, 2023
+@set VERSION 5.3
+@set PATCHLEVEL 0
@set GAWKINETTITLE TCP/IP Internetworking with @command{gawk}
@set GAWKWORKFLOWTITLE Participating in @command{gawk} Development
@@ -658,6 +658,7 @@ particular records in a file and perform operations upon
them.
* Close Return Value:: Using the return value from
@code{close()}.
* Nonfatal:: Enabling Nonfatal Output.
+* Noflush:: Speeding Up Pipe Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -10006,6 +10007,7 @@ and discusses the @code{close()} built-in function.
@command{gawk} allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Noflush:: Speeding Up Pipe Output.
* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@@ -11507,8 +11509,53 @@ pipes; thus, the return value cannot be used portably.
In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
when closing a pipe.
+@node Noflush
+@section Speeding Up Pipe Output
+@c FIXME: Add indexing
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+Normally, when you send data down a pipeline to a command with
+@code{print} or @code{printf}, @command{gawk} @dfn{flushes} the
+output down the pipe. That is, output is not buffered, but
+written directly. This assures, that pipeline output
+intermixed with @command{gawk}'s output comes out in the
+expected order:
+
+@example
+print "something" # goes to standard output
+print "someting else" | "some-command" # also to standard output
+print "more stuff" # and this too
+@end example
+
+There can be a price to pay for this; flushing data down
+the pipeline uses more CPU time, and in certain environments
+this can become expensive.
+
+You can tell @command{gawk} not to flush buffered data in
+one of two ways:
+
+@itemize @bullet
+@item
+Set @code{PROCINFO["BUFFERPIPE"]} to any value. When this is done,
+@command{gawk} will buffer data for all pipelines.
+
+@item
+Set @code{PROCINFO["@var{command}", "BUFFERPIPE"]} to any value.
+In this case, only @var{command}'s data will be fully buffered.
+@end itemize
+
+You @emph{must} create one or the other of these elements
+in @code{PROCINFO} before the first @code{print} or
+@code{printf} to the pipeline. Doing so after output has
+already been sent is too late.
+
+Be aware that using this feature may change the output behavior of
+your programs, so exercise caution.
+
@node Nonfatal
@section Enabling Nonfatal Output
+@c FIXME: Add indexing
This @value{SECTION} describes a @command{gawk}-specific feature.
@@ -16616,6 +16663,14 @@ to test for these elements
The following elements allow you to change @command{gawk}'s behavior:
@table @code
+@item PROCINFO["BUFFERPIPE"]
+If this element exists, all output to pipelines becomes buffered.
+@xref{Noflush}.
+
+@item PROCINFO["@var{command}", "BUFFERPIPE"]
+Make output to @var{command} buffered.
+@xref{Noflush}.
+
@item PROCINFO["NONFATAL"]
If this element exists, then I/O errors for all redirections become nonfatal.
@xref{Nonfatal}.
@@ -42153,6 +42208,10 @@ Version 5.3 added the following features:
Comma separated value (CSV) field splitting
(@pxref{Comma Separated Fields}).
+@item
+The ability to make @command{gawk} buffer output to pipes
+(@pxref{Noflush}).
+
@item
The need for GNU @code{libsigsegv} was removed from @command{gawk}.
The value-add was never very much and it caused problems in some
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index f9ee2638..951c118f 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -54,9 +54,9 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH December, 2022
-@set VERSION 5.2
-@set PATCHLEVEL 2
+@set UPDATE-MONTH February, 2023
+@set VERSION 5.3
+@set PATCHLEVEL 0
@set GAWKINETTITLE TCP/IP Internetworking with @command{gawk}
@set GAWKWORKFLOWTITLE Participating in @command{gawk} Development
@@ -653,6 +653,7 @@ particular records in a file and perform operations upon
them.
* Close Return Value:: Using the return value from
@code{close()}.
* Nonfatal:: Enabling Nonfatal Output.
+* Noflush:: Speeding Up Pipe Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -9475,6 +9476,7 @@ and discusses the @code{close()} built-in function.
@command{gawk} allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Noflush:: Speeding Up Pipe Output.
* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@@ -10935,8 +10937,53 @@ pipes; thus, the return value cannot be used portably.
In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
when closing a pipe.
+@node Noflush
+@section Speeding Up Pipe Output
+@c FIXME: Add indexing
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+Normally, when you send data down a pipeline to a command with
+@code{print} or @code{printf}, @command{gawk} @dfn{flushes} the
+output down the pipe. That is, output is not buffered, but
+written directly. This assures, that pipeline output
+intermixed with @command{gawk}'s output comes out in the
+expected order:
+
+@example
+print "something" # goes to standard output
+print "someting else" | "some-command" # also to standard output
+print "more stuff" # and this too
+@end example
+
+There can be a price to pay for this; flushing data down
+the pipeline uses more CPU time, and in certain environments
+this can become expensive.
+
+You can tell @command{gawk} not to flush buffered data in
+one of two ways:
+
+@itemize @bullet
+@item
+Set @code{PROCINFO["BUFFERPIPE"]} to any value. When this is done,
+@command{gawk} will buffer data for all pipelines.
+
+@item
+Set @code{PROCINFO["@var{command}", "BUFFERPIPE"]} to any value.
+In this case, only @var{command}'s data will be fully buffered.
+@end itemize
+
+You @emph{must} create one or the other of these elements
+in @code{PROCINFO} before the first @code{print} or
+@code{printf} to the pipeline. Doing so after output has
+already been sent is too late.
+
+Be aware that using this feature may change the output behavior of
+your programs, so exercise caution.
+
@node Nonfatal
@section Enabling Nonfatal Output
+@c FIXME: Add indexing
This @value{SECTION} describes a @command{gawk}-specific feature.
@@ -15876,6 +15923,14 @@ to test for these elements
The following elements allow you to change @command{gawk}'s behavior:
@table @code
+@item PROCINFO["BUFFERPIPE"]
+If this element exists, all output to pipelines becomes buffered.
+@xref{Noflush}.
+
+@item PROCINFO["@var{command}", "BUFFERPIPE"]
+Make output to @var{command} buffered.
+@xref{Noflush}.
+
@item PROCINFO["NONFATAL"]
If this element exists, then I/O errors for all redirections become nonfatal.
@xref{Nonfatal}.
@@ -41069,6 +41124,10 @@ Version 5.3 added the following features:
Comma separated value (CSV) field splitting
(@pxref{Comma Separated Fields}).
+@item
+The ability to make @command{gawk} buffer output to pipes
+(@pxref{Noflush}).
+
@item
The need for GNU @code{libsigsegv} was removed from @command{gawk}.
The value-add was never very much and it caused problems in some
diff --git a/io.c b/io.c
index 2addce0c..6641d3ca 100644
--- a/io.c
+++ b/io.c
@@ -260,6 +260,7 @@ static void find_input_parser(IOBUF *iop);
static bool find_output_wrapper(awk_output_buf_t *outbuf);
static void init_output_wrapper(awk_output_buf_t *outbuf);
static bool find_two_way_processor(const char *name, struct redirect *rp);
+static bool avoid_flush(const char *name);
static RECVALUE rs1scan(IOBUF *iop, struct recmatch *recm, SCANSTATE *state);
static RECVALUE rsnullscan(IOBUF *iop, struct recmatch *recm, SCANSTATE
*state);
@@ -951,7 +952,11 @@ redirect_string(const char *str, size_t explen, bool
not_string,
/* set close-on-exec */
os_close_on_exec(fileno(rp->output.fp), str, "pipe",
"to");
- rp->flag |= RED_NOBUF;
+
+ // Allow the user to say they don't want pipe output
+ // to be flushed all the time.
+ if (! avoid_flush(str))
+ rp->flag |= RED_NOBUF;
break;
case redirect_pipein:
if (extfd >= 0) {
@@ -4479,3 +4484,14 @@ init_output_wrapper(awk_output_buf_t *outbuf)
outbuf->gawk_ferror = gawk_ferror;
outbuf->gawk_fclose = gawk_fclose;
}
+
+/* avoid_flush --- return true if should not flush a pipe every time */
+
+static bool
+avoid_flush(const char *name)
+{
+ static const char bufferpipe[] = "BUFFERPIPE";
+
+ return in_PROCINFO(bufferpipe, NULL, NULL) != NULL
+ || in_PROCINFO(name, bufferpipe, NULL) != NULL;
+}
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=33a1b76c163a4fcb7aa874530dcd217aa514c470
commit 33a1b76c163a4fcb7aa874530dcd217aa514c470
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Fri Feb 10 16:03:02 2023 +0200
Fix badards.ok after code update.
diff --git a/test/badargs.ok b/test/badargs.ok
index f1a01849..d2c67cac 100644
--- a/test/badargs.ok
+++ b/test/badargs.ok
@@ -41,7 +41,7 @@ PLEASE do NOT try to report bugs by posting in comp.lang.awk,
or by using a web forum such as Stack Overflow.
Source code for gawk may be obtained from
-https://ftp.gnu.org/gnu/gawk/gawk-5.2.1.tar.gz
+https://www.skeeve.com/gawk/gawk-5.2.60.tar.gz
gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 5 +
doc/ChangeLog | 5 +
doc/gawk.info | 1342 +++++++++++++++++++++++++++++--------------------------
doc/gawk.texi | 65 ++-
doc/gawktexi.in | 65 ++-
io.c | 18 +-
test/badargs.ok | 2 +-
7 files changed, 848 insertions(+), 654 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] gawk branch, master, updated. gawk-4.1.0-5137-gcecb2c65,
Arnold Robbins <=