[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] gawk branch, gawk-5.3-stable, updated. gawk-4.1.0-5488-gd998e324
From: |
Arnold Robbins |
Subject: |
[SCM] gawk branch, gawk-5.3-stable, updated. gawk-4.1.0-5488-gd998e324 |
Date: |
Thu, 11 Jul 2024 05:22:42 -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, gawk-5.3-stable has been updated
via d998e32435542941d505e23e08a6d60270757253 (commit)
from 7f7d733d0ddd4e75f16f2cff1b6b1a28642bbcea (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=d998e32435542941d505e23e08a6d60270757253
commit d998e32435542941d505e23e08a6d60270757253
Author: Arnold D. Robbins <arnold@skeeve.com>
Date: Thu Jul 11 12:22:25 2024 +0300
Document getline as a function, not a statement.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 06eb9e51..20b067fb 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2024-07-11 Denys Vlasenko <dvlasenk@redhat.com>
+
+ * gawk.1, gawk.texi, gawkinet.texi: Document getline as a function,
+ not as a statement.
+
2024-07-11 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi: Typo fix.
diff --git a/doc/gawk.1 b/doc/gawk.1
index d69cb4e8..97cb4fab 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -1426,7 +1426,7 @@ below.)
.PP
The
.B getline
-command returns 1 on success, zero on end of file, and \-1 on an error.
+function returns 1 on success, zero on end of file, and \-1 on an error.
If the
.IR errno (3)
value indicates that the I/O operation may be retried,
diff --git a/doc/gawk.info b/doc/gawk.info
index 6c678079..88c25c49 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -1097,7 +1097,7 @@ in *note Sample Programs::, should be of interest.
â *note Reading Files::, describes how âawkâ reads your data.
It introduces the concepts of records and fields, as well as
- the âgetlineâ command. I/O redirection is first described
+ the âgetlineâ function. I/O redirection is first described
here. Network I/O is also briefly introduced here.
â *note Printing::, describes how âawkâ programs can produce
@@ -4590,10 +4590,10 @@ one line. Each record is automatically split into
chunks called
âfieldsâ. This makes it more convenient for programs to work on the
parts of a record.
- On rare occasions, you may need to use the âgetlineâ command. The
-âgetlineâ command is valuable both because it can do explicit input from
-any number of files, and because the files used with it do not have to
-be named on the âawkâ command line (*note Getline::).
+ On rare occasions, you may need to use the âgetlineâ function. The
+âgetlineâ function is valuable both because it can do explicit input
+from any number of files, and because the files used with it do not have
+to be named on the âawkâ command line (*note Getline::).
* Menu:
@@ -6181,14 +6181,14 @@ 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.
- The âgetlineâ command is used in several different ways and should
+ The âgetlineâ function is used in several different ways and should
_not_ be used by beginners. The examples that follow the explanation of
-the âgetlineâ command include material that has not been covered yet.
-Therefore, come back and study the âgetlineâ command _after_ you have
+the âgetlineâ function include material that has not been covered yet.
+Therefore, come back and study the âgetlineâ function _after_ you have
reviewed the rest of this Info file and have a good knowledge of how
âawkâ works.
- The âgetlineâ command returns 1 if it finds a record and 0 if it
+ The âgetlineâ function returns 1 if it finds a record and 0 if it
encounters the end of the file. If there is some error in getting a
record, such as a file that cannot be opened, then âgetlineâ returns â1.
In this case, âgawkâ sets the variable âERRNOâ to a string describing
@@ -6227,7 +6227,7 @@ File: gawk.info, Node: Plain Getline, Next:
Getline/Variable, Up: Getline
4.10.1 Using âgetlineâ with No Arguments
----------------------------------------
-The âgetlineâ command can be used without arguments to read input from
+The âgetlineâ function 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
processing the current record, but want to do some special processing on
@@ -6280,7 +6280,7 @@ regular expression.
⣠part 1 part 2 part 3
⣠no comment
- This form of the âgetlineâ command sets âNFâ, âNRâ, âFNRâ,
âRTâ, and
+ This form of the âgetlineâ function sets âNFâ, âNRâ, âFNRâ,
âRTâ, and
the value of â$0â.
NOTE: The new value of â$0â is used to test the patterns of any
@@ -6326,7 +6326,7 @@ and produces these results:
phore
free
- The âgetlineâ command used in this way sets only the variables âNRâ,
+ The âgetlineâ function used in this way sets only the variables
âNRâ,
âFNRâ, and âRTâ (and, of course, VAR). The record is not split into
fields, so the values of the fields (including â$0â) and the value of
âNFâ do not change.
@@ -6575,7 +6575,7 @@ in mind:
⢠An interesting side effect occurs if you use âgetlineâ without a
redirection inside a âBEGINâ rule. Because an unredirected
âgetlineâ reads from the command-line data files, the first
- âgetlineâ command causes âawkâ to set the value of âFILENAMEâ.
+ âgetlineâ function causes âawkâ to set the value of
âFILENAMEâ.
Normally, âFILENAMEâ does not have a value inside âBEGINâ rules,
because you have not yet started to process the command-line data
files. (d.c.) (See *note BEGIN/END::; also *note Auto-set::.)
@@ -6593,6 +6593,32 @@ in mind:
âFILENAMEâ to be updated if they cause âawkâ to start reading a
new
input file.
+ ⢠âgetlineâ is not a statement (unlike âprintâ), it's an
expression.
+ It has a result value, and can be used as part as a larger
+ expression, in control statements, and so on. Here are examples of
+ the "read until EOF/error" idiom:
+
+ while ("sort FILE" | getline line > 0)
+ print line
+ while (getline line < "file.txt" > 0)
+ print line
+
+ If you need to test the error code for being less than zero, you
+ need to enclose âgetlineâ in parentheses, to avoid it being
+ interpreted as input redirection:
+
+ if ((getline VAR) < 0)
+ print "Read error";
+
+ It is, in fact, best to parenthesize use of âgetlineâ in all
+ control expressions, as some versions of âawkâ require this. Thus,
+ the previos examples are best written this way:
+
+ while (("sort FILE" | getline line) > 0)
+ print line
+ while ((getline line < "file.txt") > 0)
+ print line
+
⢠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
@@ -10478,7 +10504,7 @@ I/O from a âBEGINâ or âENDâ rule. The first
has to do with the value of
input is read, there simply is no input record, and therefore no fields,
when executing âBEGINâ rules. References to â$0â and the fields yield
a
null string or zero, depending upon the context. One way to give â$0â a
-real value is to execute a âgetlineâ command without a variable (*note
+real value is to execute a âgetlineâ function without a variable (*note
Getline::). Another way is simply to assign a value to â$0â.
The second point is similar to the first, but from the other
@@ -10569,7 +10595,7 @@ level of the âawkâ program.
either a âBEGINFILEâ or an âENDFILEâ rule. The ânextfileâ
statement is
allowed only inside a âBEGINFILEâ rule, not inside an âENDFILEâ rule.
- The âgetlineâ statement (*note Getline::) is restricted inside both
+ The âgetlineâ function (*note Getline::) is restricted inside both
âBEGINFILEâ and âENDFILEâ: only redirected forms of âgetlineâ are
allowed.
@@ -10690,7 +10716,7 @@ Compound statements
âifâ, âwhileâ, âdoâ, or âforâ statement.
Input statements
- Use the âgetlineâ command (*note Getline::). Also supplied in
+ Use the âgetlineâ function (*note Getline::). Also supplied in
âawkâ are the ânextâ statement (*note Next Statement::) and the
ânextfileâ statement (*note Nextfile Statement::).
@@ -34782,7 +34808,7 @@ Redirection
standard input stream, or performing output to something other than
the standard output stream.
- You can redirect input to the âgetlineâ statement using the â<â,
+ You can redirect input to the âgetlineâ function using the â<â,
â|â, and â|&â operators. You can redirect the output of the
âprintâ and âprintfâ statements to a file or a system command,
using the â>â, â>>â, â|â, and â|&â operators. (*Note
Getline::,
@@ -37450,7 +37476,7 @@ Index
* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 134)
* 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, getline function: Getline. (line 19)
* differences in awk and gawk, IGNORECASE variable: User-modified.
(line 79)
* differences in awk and gawk, implementation limitations: Getline Notes.
@@ -37697,7 +37723,7 @@ Index
* 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)
+* ERRNO variable, with getline function: Getline. (line 19)
* error handling: Special FD. (line 19)
* error handling, ERRNO variable and: Auto-set. (line 87)
* error output: Special FD. (line 6)
@@ -38177,23 +38203,23 @@ Index
* getgrnam() user-defined function: Group Functions. (line 176)
* getgruser() function (C library): Group Functions. (line 191)
* getgruser() user-defined function: Group Functions. (line 194)
-* getline command: Reading Files. (line 20)
-* getline command, _gr_init() user-defined function: Group Functions.
+* getline function: Reading Files. (line 20)
+* getline function, _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.
+* getline function, _pw_init() function: Passwd Functions. (line 154)
+* getline function, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
(line 60)
-* getline command, coprocesses, using from: Getline/Coprocess.
+* getline function, coprocesses, using from: Getline/Coprocess.
(line 6)
-* getline command, coprocesses, using from <1>: Close Files And Pipes.
+* getline function, coprocesses, using from <1>: Close Files And Pipes.
(line 6)
-* 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)
+* getline function, deadlock and: Two-way I/O. (line 53)
+* getline function, explicit input with: Getline. (line 6)
+* getline function, FILENAME variable and: Getline Notes. (line 19)
+* getline function, from a file: Getline/File. (line 6)
+* getline function, into a variable: Getline/Variable. (line 6)
+* getline function, return values: Getline. (line 19)
+* getline function, variants: Getline Summary. (line 6)
* getlocaltime() user-defined function: Getlocaltime Function.
(line 16)
* getopt() function (C library): Getopt Function. (line 15)
@@ -38593,7 +38619,7 @@ Index
* monetary information, localization: Explaining gettext. (line 104)
* Moon, Sailor: Internationalization.
(line 6)
-* Moore, Duncan: Getline Notes. (line 40)
+* Moore, Duncan: Getline Notes. (line 66)
* MPFR library, building with: Compiling with MPFR. (line 6)
* MPFR values, API ownership of: API Ownership of MPFR and GMP Values.
(line 6)
@@ -39647,7 +39673,7 @@ Index
* troubleshooting, gawk, bug reports: Bugs. (line 9)
* troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
(line 16)
-* troubleshooting, getline command: File Checking. (line 25)
+* troubleshooting, getline function: 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.
@@ -39758,12 +39784,12 @@ Index
* 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.
+* variables, getline function into, using: Getline/Variable. (line 6)
+* variables, getline function into, using <1>: Getline/Variable/File.
(line 6)
-* variables, getline command into, using <2>: Getline/Variable/Pipe.
+* variables, getline function into, using <2>: Getline/Variable/Pipe.
(line 6)
-* variables, getline command into, using <3>: Getline/Variable/Coprocess.
+* variables, getline function into, using <3>: Getline/Variable/Coprocess.
(line 6)
* variables, global, for library functions: Library Names. (line 11)
* variables, global, printing list of: Options. (line 97)
@@ -39866,617 +39892,617 @@ Node: History56625
Node: Names59239
Ref: Names-Footnote-160393
Node: This Manual60556
-Ref: This Manual-Footnote-167485
-Node: Conventions67593
-Node: Manual History70022
-Ref: Manual History-Footnote-173047
-Ref: Manual History-Footnote-273088
-Node: How To Contribute73162
-Node: Acknowledgments74108
-Node: Getting Started79097
-Node: Running gawk81624
-Node: One-shot82842
-Node: Read Terminal84141
-Node: Long86195
-Node: Executable Scripts87845
-Ref: Executable Scripts-Footnote-190615
-Node: Comments90722
-Node: Quoting93252
-Node: DOS Quoting98896
-Node: Sample Data Files100976
-Node: Very Simple103611
-Node: Two Rules109865
-Node: More Complex111817
-Node: Statements/Lines114237
-Ref: Statements/Lines-Footnote-1119749
-Node: Other Features120038
-Node: When121006
-Ref: When-Footnote-1122808
-Node: Intro Summary122873
-Node: Invoking Gawk123827
-Node: Command Line125389
-Node: Options126239
-Ref: Options-Footnote-1145579
-Ref: Options-Footnote-2145814
-Node: Other Arguments145839
-Node: Naming Standard Input150004
-Node: Environment Variables151274
-Node: AWKPATH Variable151848
-Ref: AWKPATH Variable-Footnote-1155432
-Ref: AWKPATH Variable-Footnote-2155466
-Node: AWKLIBPATH Variable155857
-Ref: AWKLIBPATH Variable-Footnote-1157630
-Node: Other Environment Variables158025
-Node: Exit Status162501
-Node: Include Files163214
-Node: Loading Shared Libraries167266
-Node: Obsolete168756
-Node: Undocumented169504
-Node: Invoking Summary169801
-Node: Regexp172826
-Node: Regexp Usage174320
-Node: Escape Sequences176421
-Ref: Escape Sequences-Footnote-1183956
-Node: Regexp Operators184034
-Node: Regexp Operator Details184527
-Ref: Regexp Operator Details-Footnote-1192538
-Node: Interval Expressions192697
-Ref: Interval Expressions-Footnote-1194964
-Node: Bracket Expressions195062
-Ref: table-char-classes197618
-Node: Leftmost Longest201116
-Node: Computed Regexps202472
-Node: GNU Regexp Operators205987
-Node: Case-sensitivity211082
-Ref: Case-sensitivity-Footnote-1214032
-Ref: Case-sensitivity-Footnote-2214275
-Node: Regexp Summary214387
-Node: Reading Files215909
-Node: Records218226
-Node: awk split records219501
-Node: gawk split records224383
-Ref: gawk split records-Footnote-1229671
-Node: Fields229708
-Ref: Fields-Footnote-1232624
-Node: Nonconstant Fields232744
-Ref: Nonconstant Fields-Footnote-1235052
-Node: Changing Fields235268
-Node: Field Separators241566
-Node: Default Field Splitting244435
-Node: Regexp Field Splitting245577
-Node: Single Character Fields249406
-Node: Comma Separated Fields250495
-Ref: table-csv-examples251899
-Node: Command Line Field Separator254198
-Node: Full Line Fields257574
-Ref: Full Line Fields-Footnote-1259152
-Ref: Full Line Fields-Footnote-2259198
-Node: Field Splitting Summary259303
-Node: Constant Size261620
-Node: Fixed width data262364
-Node: Skipping intervening265879
-Node: Allowing trailing data266681
-Node: Fields with fixed data267742
-Node: Splitting By Content269364
-Ref: Splitting By Content-Footnote-1273814
-Node: More CSV273977
-Node: FS versus FPAT275635
-Node: Testing field creation276835
-Node: Multiple Line278609
-Node: Getline285078
-Node: Plain Getline287661
-Node: Getline/Variable290307
-Node: Getline/File291502
-Node: Getline/Variable/File292950
-Ref: Getline/Variable/File-Footnote-1294595
-Node: Getline/Pipe294691
-Node: Getline/Variable/Pipe297499
-Node: Getline/Coprocess298682
-Node: Getline/Variable/Coprocess300005
-Node: Getline Notes300771
-Node: Getline Summary303724
-Ref: table-getline-variants304168
-Node: Read Timeout305072
-Ref: Read Timeout-Footnote-1309034
-Node: Retrying Input309092
-Node: Command-line directories310359
-Node: Input Summary311297
-Node: Input Exercises314677
-Node: Printing315115
-Node: Print317058
-Node: Print Examples318559
-Node: Output Separators321404
-Node: OFMT323511
-Node: Printf325224
-Node: Basic Printf326029
-Node: Control Letters327664
-Node: Format Modifiers333110
-Node: Printf Examples339382
-Node: Redirection341923
-Node: Special FD349695
-Ref: Special FD-Footnote-1352993
-Node: Special Files353071
-Node: Other Inherited Files353700
-Node: Special Network354765
-Node: Special Caveats355653
-Node: Close Files And Pipes356636
-Ref: Close Files And Pipes-Footnote-1362760
-Node: Close Return Value362908
-Ref: table-close-pipe-return-values364179
-Ref: Close Return Value-Footnote-1365010
-Node: Noflush365166
-Node: Nonfatal366674
-Node: Output Summary369089
-Node: Output Exercises370375
-Node: Expressions371066
-Node: Values372266
-Node: Constants372944
-Node: Scalar Constants373639
-Ref: Scalar Constants-Footnote-1376215
-Ref: Scalar Constants-Footnote-2376465
-Node: Nondecimal-numbers376545
-Node: Regexp Constants379658
-Node: Using Constant Regexps380204
-Node: Standard Regexp Constants380850
-Node: Strong Regexp Constants384146
-Node: Variables387989
-Node: Using Variables388654
-Node: Assignment Options390628
-Node: Conversion393179
-Node: Strings And Numbers393711
-Ref: Strings And Numbers-Footnote-1396921
-Node: Locale influences conversions397030
-Ref: table-locale-affects399868
-Node: All Operators400510
-Node: Arithmetic Ops401151
-Node: Concatenation403974
-Ref: Concatenation-Footnote-1406910
-Node: Assignment Ops407029
-Ref: table-assign-ops412156
-Node: Increment Ops413537
-Node: Truth Values and Conditions417128
-Node: Truth Values418222
-Node: Typing and Comparison419302
-Node: Variable Typing420134
-Ref: Variable Typing-Footnote-1426778
-Ref: Variable Typing-Footnote-2426858
-Node: Comparison Operators426939
-Ref: table-relational-ops427366
-Node: POSIX String Comparison431042
-Ref: POSIX String Comparison-Footnote-1432799
-Ref: POSIX String Comparison-Footnote-2432942
-Node: Boolean Ops433026
-Ref: Boolean Ops-Footnote-1437700
-Node: Conditional Exp437796
-Node: Function Calls439576
-Node: Precedence443523
-Node: Locales447386
-Node: Expressions Summary449062
-Node: Patterns and Actions451717
-Node: Pattern Overview452853
-Node: Regexp Patterns454578
-Node: Expression Patterns455124
-Node: Ranges459029
-Node: BEGIN/END462203
-Node: Using BEGIN/END463012
-Ref: Using BEGIN/END-Footnote-1465920
-Node: I/O And BEGIN/END466030
-Node: BEGINFILE/ENDFILE468511
-Node: Empty471942
-Node: Using Shell Variables472259
-Node: Action Overview474595
-Node: Statements477030
-Node: If Statement478926
-Node: While Statement480489
-Node: Do Statement482577
-Node: For Statement483761
-Node: Switch Statement487116
-Node: Break Statement489665
-Node: Continue Statement491857
-Node: Next Statement493788
-Node: Nextfile Statement496267
-Node: Exit Statement499120
-Node: Built-in Variables501647
-Node: User-modified502824
-Node: Auto-set511031
-Ref: Auto-set-Footnote-1529115
-Ref: Auto-set-Footnote-2529333
-Node: ARGC and ARGV529389
-Node: Pattern Action Summary533818
-Node: Arrays536424
-Node: Array Basics537797
-Node: Array Intro538645
-Ref: figure-array-elements540656
-Ref: Array Intro-Footnote-1543509
-Node: Reference to Elements543641
-Node: Assigning Elements546161
-Node: Array Example546656
-Node: Scanning an Array548618
-Node: Controlling Scanning551713
-Ref: Controlling Scanning-Footnote-1558348
-Node: Numeric Array Subscripts558672
-Node: Uninitialized Subscripts560940
-Node: Delete562613
-Ref: Delete-Footnote-1565425
-Node: Multidimensional565482
-Node: Multiscanning568685
-Node: Arrays of Arrays570352
-Node: Arrays Summary574656
-Node: Functions576843
-Node: Built-in577975
-Node: Calling Built-in579164
-Node: Boolean Functions581204
-Node: Numeric Functions581766
-Ref: Numeric Functions-Footnote-1585951
-Ref: Numeric Functions-Footnote-2586634
-Ref: Numeric Functions-Footnote-3586686
-Node: String Functions586962
-Ref: String Functions-Footnote-1613413
-Ref: String Functions-Footnote-2613545
-Ref: String Functions-Footnote-3613801
-Node: Gory Details613888
-Ref: table-sub-escapes615897
-Ref: table-sub-proposed617528
-Ref: table-posix-sub619023
-Ref: table-gensub-escapes620696
-Ref: Gory Details-Footnote-1621615
-Node: I/O Functions621769
-Ref: table-system-return-values628445
-Ref: I/O Functions-Footnote-1630607
-Ref: I/O Functions-Footnote-2630755
-Node: Time Functions630875
-Ref: Time Functions-Footnote-1642587
-Ref: Time Functions-Footnote-2642655
-Ref: Time Functions-Footnote-3642817
-Ref: Time Functions-Footnote-4642928
-Ref: Time Functions-Footnote-5643044
-Ref: Time Functions-Footnote-6643271
-Node: Bitwise Functions643549
-Ref: table-bitwise-ops644147
-Ref: Bitwise Functions-Footnote-1650389
-Ref: Bitwise Functions-Footnote-2650566
-Node: Type Functions650761
-Node: I18N Functions652932
-Node: User-defined654667
-Node: Definition Syntax655413
-Ref: Definition Syntax-Footnote-1661231
-Node: Function Example661306
-Ref: Function Example-Footnote-1664285
-Node: Function Calling664307
-Node: Calling A Function664899
-Node: Variable Scope665869
-Node: Pass By Value/Reference668923
-Node: Function Caveats671651
-Ref: Function Caveats-Footnote-1673742
-Node: Return Statement673862
-Node: Dynamic Typing676894
-Node: Dynamic Typing Awk677472
-Node: Dynamic Typing Gawk679610
-Node: Indirect Calls682980
-Node: Functions Summary694117
-Node: Library Functions697083
-Ref: Library Functions-Footnote-1700631
-Ref: Library Functions-Footnote-2700776
-Node: Library Names700951
-Ref: Library Names-Footnote-1704722
-Ref: Library Names-Footnote-2704949
-Node: General Functions705043
-Node: Strtonum Function706313
-Node: Assert Function709395
-Node: Round Function712845
-Node: Cliff Random Function714417
-Node: Ordinal Functions715441
-Ref: Ordinal Functions-Footnote-1718544
-Ref: Ordinal Functions-Footnote-2718796
-Node: Join Function719010
-Ref: Join Function-Footnote-1720808
-Node: Getlocaltime Function721012
-Node: Readfile Function724786
-Node: Shell Quoting726815
-Node: Isnumeric Function728271
-Node: To CSV Function729707
-Node: Data File Management731799
-Node: Filetrans Function732431
-Node: Rewind Function736707
-Node: File Checking738678
-Ref: File Checking-Footnote-1740044
-Node: Empty Files740249
-Node: Ignoring Assigns742312
-Node: Getopt Function743886
-Ref: Getopt Function-Footnote-1759704
-Node: Passwd Functions759916
-Ref: Passwd Functions-Footnote-1769051
-Node: Group Functions769139
-Ref: Group Functions-Footnote-1777263
-Node: Walking Arrays777474
-Node: Library Functions Summary780520
-Node: Library Exercises781940
-Node: Sample Programs782425
-Node: Running Examples783207
-Node: Clones783959
-Node: Cut Program785227
-Node: Egrep Program795651
-Node: Id Program804956
-Node: Split Program815048
-Ref: Split Program-Footnote-1825261
-Node: Tee Program825446
-Node: Uniq Program828352
-Node: Wc Program836212
-Node: Bytes vs. Characters836607
-Node: Using extensions838207
-Node: wc program838985
-Node: Miscellaneous Programs843978
-Node: Dupword Program845203
-Node: Alarm Program847252
-Node: Translate Program852155
-Ref: Translate Program-Footnote-1856864
-Node: Labels Program857142
-Ref: Labels Program-Footnote-1860577
-Node: Word Sorting860661
-Node: History Sorting864835
-Node: Extract Program867108
-Node: Simple Sed875361
-Node: Igawk Program878571
-Ref: Igawk Program-Footnote-1893781
-Ref: Igawk Program-Footnote-2893987
-Ref: Igawk Program-Footnote-3894117
-Node: Anagram Program894244
-Node: Signature Program897330
-Node: Programs Summary898580
-Node: Programs Exercises899834
-Ref: Programs Exercises-Footnote-1904136
-Node: Advanced Features904222
-Node: Nondecimal Data906703
-Node: Boolean Typed Values908333
-Node: Array Sorting910290
-Node: Controlling Array Traversal911019
-Ref: Controlling Array Traversal-Footnote-1919522
-Node: Array Sorting Functions919644
-Ref: Array Sorting Functions-Footnote-1925741
-Node: Two-way I/O925949
-Ref: Two-way I/O-Footnote-1933920
-Ref: Two-way I/O-Footnote-2934111
-Node: TCP/IP Networking934193
-Node: Profiling937361
-Node: Persistent Memory947031
-Ref: Persistent Memory-Footnote-1956603
-Node: Extension Philosophy956734
-Node: Advanced Features Summary958261
-Node: Internationalization960527
-Node: I18N and L10N962229
-Node: Explaining gettext962924
-Ref: Explaining gettext-Footnote-1969060
-Ref: Explaining gettext-Footnote-2969253
-Node: Programmer i18n969418
-Ref: Programmer i18n-Footnote-1974530
-Node: Translator i18n974579
-Node: String Extraction975409
-Ref: String Extraction-Footnote-1976585
-Node: Printf Ordering976683
-Ref: Printf Ordering-Footnote-1979541
-Node: I18N Portability979609
-Ref: I18N Portability-Footnote-1982169
-Node: I18N Example982236
-Ref: I18N Example-Footnote-1985630
-Ref: I18N Example-Footnote-2985703
-Node: Gawk I18N985820
-Node: I18N Summary986474
-Node: Debugger987871
-Node: Debugging988891
-Node: Debugging Concepts989340
-Node: Debugging Terms991157
-Node: Awk Debugging993760
-Ref: Awk Debugging-Footnote-1994733
-Node: Sample Debugging Session994869
-Node: Debugger Invocation995419
-Node: Finding The Bug997044
-Node: List of Debugger Commands1003676
-Node: Breakpoint Control1005053
-Node: Debugger Execution Control1008875
-Node: Viewing And Changing Data1012349
-Node: Execution Stack1016083
-Node: Debugger Info1017764
-Node: Miscellaneous Debugger Commands1022059
-Node: Readline Support1027300
-Node: Limitations1028244
-Node: Debugging Summary1030868
-Node: Namespaces1032167
-Node: Global Namespace1033294
-Node: Qualified Names1034728
-Node: Default Namespace1035763
-Node: Changing The Namespace1036536
-Node: Naming Rules1038218
-Node: Internal Name Management1040133
-Node: Namespace Example1041203
-Node: Namespace And Features1043780
-Node: Namespace Summary1045235
-Node: Arbitrary Precision Arithmetic1046746
-Node: Computer Arithmetic1048265
-Ref: table-numeric-ranges1052073
-Ref: table-floating-point-ranges1052570
-Ref: Computer Arithmetic-Footnote-11053228
-Node: Math Definitions1053285
-Ref: table-ieee-formats1056317
-Node: MPFR features1056890
-Node: MPFR On Parole1057343
-Ref: MPFR On Parole-Footnote-11058184
-Node: MPFR Intro1058343
-Node: FP Math Caution1060027
-Ref: FP Math Caution-Footnote-11061099
-Node: Inexactness of computations1061472
-Node: Inexact representation1062503
-Node: Comparing FP Values1063884
-Node: Errors accumulate1065142
-Node: Strange values1066607
-Ref: Strange values-Footnote-11069261
-Node: Getting Accuracy1069366
-Node: Try To Round1072103
-Node: Setting precision1073010
-Ref: table-predefined-precision-strings1073715
-Node: Setting the rounding mode1075599
-Ref: table-gawk-rounding-modes1075981
-Ref: Setting the rounding mode-Footnote-11080033
-Node: Arbitrary Precision Integers1080216
-Ref: Arbitrary Precision Integers-Footnote-11083426
-Node: Checking for MPFR1083579
-Node: POSIX Floating Point Problems1085069
-Ref: POSIX Floating Point Problems-Footnote-11089889
-Node: Floating point summary1089927
-Node: Dynamic Extensions1092183
-Node: Extension Intro1093780
-Node: Plugin License1095082
-Node: Extension Mechanism Outline1095895
-Ref: figure-load-extension1096346
-Ref: figure-register-new-function1097924
-Ref: figure-call-new-function1099033
-Node: Extension API Description1101148
-Node: Extension API Functions Introduction1102877
-Ref: table-api-std-headers1104771
-Node: General Data Types1109212
-Ref: General Data Types-Footnote-11118358
-Node: Memory Allocation Functions1118661
-Ref: Memory Allocation Functions-Footnote-11123378
-Node: Constructor Functions1123477
-Node: API Ownership of MPFR and GMP Values1127378
-Node: Registration Functions1128931
-Node: Extension Functions1129635
-Node: Exit Callback Functions1135209
-Node: Extension Version String1136523
-Node: Input Parsers1137218
-Node: Output Wrappers1151837
-Node: Two-way processors1156679
-Node: Printing Messages1159032
-Ref: Printing Messages-Footnote-11160243
-Node: Updating ERRNO1160396
-Node: Requesting Values1161195
-Ref: table-value-types-returned1161948
-Node: Accessing Parameters1164007
-Node: Symbol Table Access1165288
-Node: Symbol table by name1165800
-Ref: Symbol table by name-Footnote-11169001
-Node: Symbol table by cookie1169133
-Ref: Symbol table by cookie-Footnote-11173402
-Node: Cached values1173466
-Ref: Cached values-Footnote-11177098
-Node: Array Manipulation1177255
-Ref: Array Manipulation-Footnote-11178354
-Node: Array Data Types1178391
-Ref: Array Data Types-Footnote-11181209
-Node: Array Functions1181305
-Node: Flattening Arrays1186334
-Node: Creating Arrays1193382
-Node: Redirection API1198224
-Node: Extension API Variables1201241
-Node: Extension Versioning1201964
-Ref: gawk-api-version1202393
-Node: Extension GMP/MPFR Versioning1204180
-Node: Extension API Informational Variables1205884
-Node: Extension API Boilerplate1207137
-Node: Changes from API V11211267
-Node: Finding Extensions1212899
-Node: Extension Example1213474
-Node: Internal File Description1214296
-Node: Internal File Ops1218588
-Ref: Internal File Ops-Footnote-11230138
-Node: Using Internal File Ops1230286
-Ref: Using Internal File Ops-Footnote-11232717
-Node: Extension Samples1232995
-Node: Extension Sample File Functions1234564
-Node: Extension Sample Fnmatch1242689
-Node: Extension Sample Fork1244284
-Node: Extension Sample Inplace1245560
-Node: Extension Sample Ord1249662
-Node: Extension Sample Readdir1250538
-Ref: table-readdir-file-types1251327
-Node: Extension Sample Revout1252683
-Node: Extension Sample Rev2way1253280
-Node: Extension Sample Read write array1254032
-Node: Extension Sample Readfile1257306
-Node: Extension Sample Time1258437
-Node: Extension Sample API Tests1260437
-Node: gawkextlib1260945
-Node: Extension summary1263977
-Node: Extension Exercises1267825
-Node: Language History1269095
-Node: V7/SVR3.11270807
-Node: SVR41273157
-Node: POSIX1274689
-Node: BTL1276114
-Node: POSIX/GNU1276881
-Node: Feature History1283536
-Node: Common Extensions1303377
-Node: Ranges and Locales1304852
-Ref: Ranges and Locales-Footnote-11309637
-Ref: Ranges and Locales-Footnote-21309664
-Ref: Ranges and Locales-Footnote-31309899
-Node: Contributors1310122
-Node: History summary1316313
-Node: Installation1317755
-Node: Gawk Distribution1318719
-Node: Getting1319211
-Node: Extracting1320210
-Node: Distribution contents1321916
-Node: Unix Installation1329806
-Node: Quick Installation1330626
-Node: Compiling with MPFR1333166
-Node: Shell Startup Files1333872
-Node: Additional Configuration Options1335029
-Node: Configuration Philosophy1337412
-Node: Compiling from Git1339912
-Node: Building the Documentation1340471
-Node: Non-Unix Installation1341883
-Node: PC Installation1342359
-Node: PC Binary Installation1343228
-Node: PC Compiling1344121
-Node: PC Using1345299
-Node: Cygwin1349015
-Node: MSYS1350267
-Node: OpenVMS Installation1350893
-Node: OpenVMS Compilation1351574
-Ref: OpenVMS Compilation-Footnote-11353057
-Node: OpenVMS Dynamic Extensions1353115
-Node: OpenVMS Installation Details1354751
-Node: OpenVMS Running1357182
-Node: OpenVMS GNV1361319
-Node: Bugs1362074
-Node: Bug definition1362994
-Node: Bug address1366595
-Node: Usenet1370164
-Node: Performance bugs1371377
-Node: Asking for help1374393
-Node: Maintainers1376380
-Node: Other Versions1377407
-Node: Installation summary1387011
-Node: Notes1388393
-Node: Compatibility Mode1389203
-Node: Additions1390025
-Node: Accessing The Source1390970
-Node: Adding Code1392501
-Node: New Ports1399612
-Node: Derived Files1404115
-Ref: Derived Files-Footnote-11409926
-Ref: Derived Files-Footnote-21409961
-Ref: Derived Files-Footnote-31410572
-Node: Future Extensions1410686
-Node: Implementation Limitations1411356
-Node: Extension Design1412598
-Node: Old Extension Problems1413758
-Ref: Old Extension Problems-Footnote-11415330
-Node: Extension New Mechanism Goals1415391
-Ref: Extension New Mechanism Goals-Footnote-11418861
-Node: Extension Other Design Decisions1419062
-Node: Extension Future Growth1421259
-Node: Notes summary1421879
-Node: Basic Concepts1423089
-Node: Basic High Level1423774
-Ref: figure-general-flow1424056
-Ref: figure-process-flow1424758
-Ref: Basic High Level-Footnote-11428128
-Node: Basic Data Typing1428317
-Node: Glossary1431725
-Node: Copying1464604
-Node: GNU Free Documentation License1502162
-Node: Index1527285
+Ref: This Manual-Footnote-167486
+Node: Conventions67594
+Node: Manual History70023
+Ref: Manual History-Footnote-173048
+Ref: Manual History-Footnote-273089
+Node: How To Contribute73163
+Node: Acknowledgments74109
+Node: Getting Started79098
+Node: Running gawk81625
+Node: One-shot82843
+Node: Read Terminal84142
+Node: Long86196
+Node: Executable Scripts87846
+Ref: Executable Scripts-Footnote-190616
+Node: Comments90723
+Node: Quoting93253
+Node: DOS Quoting98897
+Node: Sample Data Files100977
+Node: Very Simple103612
+Node: Two Rules109866
+Node: More Complex111818
+Node: Statements/Lines114238
+Ref: Statements/Lines-Footnote-1119750
+Node: Other Features120039
+Node: When121007
+Ref: When-Footnote-1122809
+Node: Intro Summary122874
+Node: Invoking Gawk123828
+Node: Command Line125390
+Node: Options126240
+Ref: Options-Footnote-1145580
+Ref: Options-Footnote-2145815
+Node: Other Arguments145840
+Node: Naming Standard Input150005
+Node: Environment Variables151275
+Node: AWKPATH Variable151849
+Ref: AWKPATH Variable-Footnote-1155433
+Ref: AWKPATH Variable-Footnote-2155467
+Node: AWKLIBPATH Variable155858
+Ref: AWKLIBPATH Variable-Footnote-1157631
+Node: Other Environment Variables158026
+Node: Exit Status162502
+Node: Include Files163215
+Node: Loading Shared Libraries167267
+Node: Obsolete168757
+Node: Undocumented169505
+Node: Invoking Summary169802
+Node: Regexp172827
+Node: Regexp Usage174321
+Node: Escape Sequences176422
+Ref: Escape Sequences-Footnote-1183957
+Node: Regexp Operators184035
+Node: Regexp Operator Details184528
+Ref: Regexp Operator Details-Footnote-1192539
+Node: Interval Expressions192698
+Ref: Interval Expressions-Footnote-1194965
+Node: Bracket Expressions195063
+Ref: table-char-classes197619
+Node: Leftmost Longest201117
+Node: Computed Regexps202473
+Node: GNU Regexp Operators205988
+Node: Case-sensitivity211083
+Ref: Case-sensitivity-Footnote-1214033
+Ref: Case-sensitivity-Footnote-2214276
+Node: Regexp Summary214388
+Node: Reading Files215910
+Node: Records218229
+Node: awk split records219504
+Node: gawk split records224386
+Ref: gawk split records-Footnote-1229674
+Node: Fields229711
+Ref: Fields-Footnote-1232627
+Node: Nonconstant Fields232747
+Ref: Nonconstant Fields-Footnote-1235055
+Node: Changing Fields235271
+Node: Field Separators241569
+Node: Default Field Splitting244438
+Node: Regexp Field Splitting245580
+Node: Single Character Fields249409
+Node: Comma Separated Fields250498
+Ref: table-csv-examples251902
+Node: Command Line Field Separator254201
+Node: Full Line Fields257577
+Ref: Full Line Fields-Footnote-1259155
+Ref: Full Line Fields-Footnote-2259201
+Node: Field Splitting Summary259306
+Node: Constant Size261623
+Node: Fixed width data262367
+Node: Skipping intervening265882
+Node: Allowing trailing data266684
+Node: Fields with fixed data267745
+Node: Splitting By Content269367
+Ref: Splitting By Content-Footnote-1273817
+Node: More CSV273980
+Node: FS versus FPAT275638
+Node: Testing field creation276838
+Node: Multiple Line278612
+Node: Getline285081
+Node: Plain Getline287668
+Node: Getline/Variable290316
+Node: Getline/File291512
+Node: Getline/Variable/File292960
+Ref: Getline/Variable/File-Footnote-1294605
+Node: Getline/Pipe294701
+Node: Getline/Variable/Pipe297509
+Node: Getline/Coprocess298692
+Node: Getline/Variable/Coprocess300015
+Node: Getline Notes300781
+Node: Getline Summary304742
+Ref: table-getline-variants305186
+Node: Read Timeout306090
+Ref: Read Timeout-Footnote-1310052
+Node: Retrying Input310110
+Node: Command-line directories311377
+Node: Input Summary312315
+Node: Input Exercises315695
+Node: Printing316133
+Node: Print318076
+Node: Print Examples319577
+Node: Output Separators322422
+Node: OFMT324529
+Node: Printf326242
+Node: Basic Printf327047
+Node: Control Letters328682
+Node: Format Modifiers334128
+Node: Printf Examples340400
+Node: Redirection342941
+Node: Special FD350713
+Ref: Special FD-Footnote-1354011
+Node: Special Files354089
+Node: Other Inherited Files354718
+Node: Special Network355783
+Node: Special Caveats356671
+Node: Close Files And Pipes357654
+Ref: Close Files And Pipes-Footnote-1363778
+Node: Close Return Value363926
+Ref: table-close-pipe-return-values365197
+Ref: Close Return Value-Footnote-1366028
+Node: Noflush366184
+Node: Nonfatal367692
+Node: Output Summary370107
+Node: Output Exercises371393
+Node: Expressions372084
+Node: Values373284
+Node: Constants373962
+Node: Scalar Constants374657
+Ref: Scalar Constants-Footnote-1377233
+Ref: Scalar Constants-Footnote-2377483
+Node: Nondecimal-numbers377563
+Node: Regexp Constants380676
+Node: Using Constant Regexps381222
+Node: Standard Regexp Constants381868
+Node: Strong Regexp Constants385164
+Node: Variables389007
+Node: Using Variables389672
+Node: Assignment Options391646
+Node: Conversion394197
+Node: Strings And Numbers394729
+Ref: Strings And Numbers-Footnote-1397939
+Node: Locale influences conversions398048
+Ref: table-locale-affects400886
+Node: All Operators401528
+Node: Arithmetic Ops402169
+Node: Concatenation404992
+Ref: Concatenation-Footnote-1407928
+Node: Assignment Ops408047
+Ref: table-assign-ops413174
+Node: Increment Ops414555
+Node: Truth Values and Conditions418146
+Node: Truth Values419240
+Node: Typing and Comparison420320
+Node: Variable Typing421152
+Ref: Variable Typing-Footnote-1427796
+Ref: Variable Typing-Footnote-2427876
+Node: Comparison Operators427957
+Ref: table-relational-ops428384
+Node: POSIX String Comparison432060
+Ref: POSIX String Comparison-Footnote-1433817
+Ref: POSIX String Comparison-Footnote-2433960
+Node: Boolean Ops434044
+Ref: Boolean Ops-Footnote-1438718
+Node: Conditional Exp438814
+Node: Function Calls440594
+Node: Precedence444541
+Node: Locales448404
+Node: Expressions Summary450080
+Node: Patterns and Actions452735
+Node: Pattern Overview453871
+Node: Regexp Patterns455596
+Node: Expression Patterns456142
+Node: Ranges460047
+Node: BEGIN/END463221
+Node: Using BEGIN/END464030
+Ref: Using BEGIN/END-Footnote-1466938
+Node: I/O And BEGIN/END467048
+Node: BEGINFILE/ENDFILE469530
+Node: Empty472960
+Node: Using Shell Variables473277
+Node: Action Overview475613
+Node: Statements478049
+Node: If Statement479945
+Node: While Statement481508
+Node: Do Statement483596
+Node: For Statement484780
+Node: Switch Statement488135
+Node: Break Statement490684
+Node: Continue Statement492876
+Node: Next Statement494807
+Node: Nextfile Statement497286
+Node: Exit Statement500139
+Node: Built-in Variables502666
+Node: User-modified503843
+Node: Auto-set512050
+Ref: Auto-set-Footnote-1530134
+Ref: Auto-set-Footnote-2530352
+Node: ARGC and ARGV530408
+Node: Pattern Action Summary534837
+Node: Arrays537443
+Node: Array Basics538816
+Node: Array Intro539664
+Ref: figure-array-elements541675
+Ref: Array Intro-Footnote-1544528
+Node: Reference to Elements544660
+Node: Assigning Elements547180
+Node: Array Example547675
+Node: Scanning an Array549637
+Node: Controlling Scanning552732
+Ref: Controlling Scanning-Footnote-1559367
+Node: Numeric Array Subscripts559691
+Node: Uninitialized Subscripts561959
+Node: Delete563632
+Ref: Delete-Footnote-1566444
+Node: Multidimensional566501
+Node: Multiscanning569704
+Node: Arrays of Arrays571371
+Node: Arrays Summary575675
+Node: Functions577862
+Node: Built-in578994
+Node: Calling Built-in580183
+Node: Boolean Functions582223
+Node: Numeric Functions582785
+Ref: Numeric Functions-Footnote-1586970
+Ref: Numeric Functions-Footnote-2587653
+Ref: Numeric Functions-Footnote-3587705
+Node: String Functions587981
+Ref: String Functions-Footnote-1614432
+Ref: String Functions-Footnote-2614564
+Ref: String Functions-Footnote-3614820
+Node: Gory Details614907
+Ref: table-sub-escapes616916
+Ref: table-sub-proposed618547
+Ref: table-posix-sub620042
+Ref: table-gensub-escapes621715
+Ref: Gory Details-Footnote-1622634
+Node: I/O Functions622788
+Ref: table-system-return-values629464
+Ref: I/O Functions-Footnote-1631626
+Ref: I/O Functions-Footnote-2631774
+Node: Time Functions631894
+Ref: Time Functions-Footnote-1643606
+Ref: Time Functions-Footnote-2643674
+Ref: Time Functions-Footnote-3643836
+Ref: Time Functions-Footnote-4643947
+Ref: Time Functions-Footnote-5644063
+Ref: Time Functions-Footnote-6644290
+Node: Bitwise Functions644568
+Ref: table-bitwise-ops645166
+Ref: Bitwise Functions-Footnote-1651408
+Ref: Bitwise Functions-Footnote-2651585
+Node: Type Functions651780
+Node: I18N Functions653951
+Node: User-defined655686
+Node: Definition Syntax656432
+Ref: Definition Syntax-Footnote-1662250
+Node: Function Example662325
+Ref: Function Example-Footnote-1665304
+Node: Function Calling665326
+Node: Calling A Function665918
+Node: Variable Scope666888
+Node: Pass By Value/Reference669942
+Node: Function Caveats672670
+Ref: Function Caveats-Footnote-1674761
+Node: Return Statement674881
+Node: Dynamic Typing677913
+Node: Dynamic Typing Awk678491
+Node: Dynamic Typing Gawk680629
+Node: Indirect Calls683999
+Node: Functions Summary695136
+Node: Library Functions698102
+Ref: Library Functions-Footnote-1701650
+Ref: Library Functions-Footnote-2701795
+Node: Library Names701970
+Ref: Library Names-Footnote-1705741
+Ref: Library Names-Footnote-2705968
+Node: General Functions706062
+Node: Strtonum Function707332
+Node: Assert Function710414
+Node: Round Function713864
+Node: Cliff Random Function715436
+Node: Ordinal Functions716460
+Ref: Ordinal Functions-Footnote-1719563
+Ref: Ordinal Functions-Footnote-2719815
+Node: Join Function720029
+Ref: Join Function-Footnote-1721827
+Node: Getlocaltime Function722031
+Node: Readfile Function725805
+Node: Shell Quoting727834
+Node: Isnumeric Function729290
+Node: To CSV Function730726
+Node: Data File Management732818
+Node: Filetrans Function733450
+Node: Rewind Function737726
+Node: File Checking739697
+Ref: File Checking-Footnote-1741063
+Node: Empty Files741268
+Node: Ignoring Assigns743331
+Node: Getopt Function744905
+Ref: Getopt Function-Footnote-1760723
+Node: Passwd Functions760935
+Ref: Passwd Functions-Footnote-1770070
+Node: Group Functions770158
+Ref: Group Functions-Footnote-1778282
+Node: Walking Arrays778493
+Node: Library Functions Summary781539
+Node: Library Exercises782959
+Node: Sample Programs783444
+Node: Running Examples784226
+Node: Clones784978
+Node: Cut Program786246
+Node: Egrep Program796670
+Node: Id Program805975
+Node: Split Program816067
+Ref: Split Program-Footnote-1826280
+Node: Tee Program826465
+Node: Uniq Program829371
+Node: Wc Program837231
+Node: Bytes vs. Characters837626
+Node: Using extensions839226
+Node: wc program840004
+Node: Miscellaneous Programs844997
+Node: Dupword Program846222
+Node: Alarm Program848271
+Node: Translate Program853174
+Ref: Translate Program-Footnote-1857883
+Node: Labels Program858161
+Ref: Labels Program-Footnote-1861596
+Node: Word Sorting861680
+Node: History Sorting865854
+Node: Extract Program868127
+Node: Simple Sed876380
+Node: Igawk Program879590
+Ref: Igawk Program-Footnote-1894800
+Ref: Igawk Program-Footnote-2895006
+Ref: Igawk Program-Footnote-3895136
+Node: Anagram Program895263
+Node: Signature Program898349
+Node: Programs Summary899599
+Node: Programs Exercises900853
+Ref: Programs Exercises-Footnote-1905155
+Node: Advanced Features905241
+Node: Nondecimal Data907722
+Node: Boolean Typed Values909352
+Node: Array Sorting911309
+Node: Controlling Array Traversal912038
+Ref: Controlling Array Traversal-Footnote-1920541
+Node: Array Sorting Functions920663
+Ref: Array Sorting Functions-Footnote-1926760
+Node: Two-way I/O926968
+Ref: Two-way I/O-Footnote-1934939
+Ref: Two-way I/O-Footnote-2935130
+Node: TCP/IP Networking935212
+Node: Profiling938380
+Node: Persistent Memory948050
+Ref: Persistent Memory-Footnote-1957622
+Node: Extension Philosophy957753
+Node: Advanced Features Summary959280
+Node: Internationalization961546
+Node: I18N and L10N963248
+Node: Explaining gettext963943
+Ref: Explaining gettext-Footnote-1970079
+Ref: Explaining gettext-Footnote-2970272
+Node: Programmer i18n970437
+Ref: Programmer i18n-Footnote-1975549
+Node: Translator i18n975598
+Node: String Extraction976428
+Ref: String Extraction-Footnote-1977604
+Node: Printf Ordering977702
+Ref: Printf Ordering-Footnote-1980560
+Node: I18N Portability980628
+Ref: I18N Portability-Footnote-1983188
+Node: I18N Example983255
+Ref: I18N Example-Footnote-1986649
+Ref: I18N Example-Footnote-2986722
+Node: Gawk I18N986839
+Node: I18N Summary987493
+Node: Debugger988890
+Node: Debugging989910
+Node: Debugging Concepts990359
+Node: Debugging Terms992176
+Node: Awk Debugging994779
+Ref: Awk Debugging-Footnote-1995752
+Node: Sample Debugging Session995888
+Node: Debugger Invocation996438
+Node: Finding The Bug998063
+Node: List of Debugger Commands1004695
+Node: Breakpoint Control1006072
+Node: Debugger Execution Control1009894
+Node: Viewing And Changing Data1013368
+Node: Execution Stack1017102
+Node: Debugger Info1018783
+Node: Miscellaneous Debugger Commands1023078
+Node: Readline Support1028319
+Node: Limitations1029263
+Node: Debugging Summary1031887
+Node: Namespaces1033186
+Node: Global Namespace1034313
+Node: Qualified Names1035747
+Node: Default Namespace1036782
+Node: Changing The Namespace1037555
+Node: Naming Rules1039237
+Node: Internal Name Management1041152
+Node: Namespace Example1042222
+Node: Namespace And Features1044799
+Node: Namespace Summary1046254
+Node: Arbitrary Precision Arithmetic1047765
+Node: Computer Arithmetic1049284
+Ref: table-numeric-ranges1053092
+Ref: table-floating-point-ranges1053589
+Ref: Computer Arithmetic-Footnote-11054247
+Node: Math Definitions1054304
+Ref: table-ieee-formats1057336
+Node: MPFR features1057909
+Node: MPFR On Parole1058362
+Ref: MPFR On Parole-Footnote-11059203
+Node: MPFR Intro1059362
+Node: FP Math Caution1061046
+Ref: FP Math Caution-Footnote-11062118
+Node: Inexactness of computations1062491
+Node: Inexact representation1063522
+Node: Comparing FP Values1064903
+Node: Errors accumulate1066161
+Node: Strange values1067626
+Ref: Strange values-Footnote-11070280
+Node: Getting Accuracy1070385
+Node: Try To Round1073122
+Node: Setting precision1074029
+Ref: table-predefined-precision-strings1074734
+Node: Setting the rounding mode1076618
+Ref: table-gawk-rounding-modes1077000
+Ref: Setting the rounding mode-Footnote-11081052
+Node: Arbitrary Precision Integers1081235
+Ref: Arbitrary Precision Integers-Footnote-11084445
+Node: Checking for MPFR1084598
+Node: POSIX Floating Point Problems1086088
+Ref: POSIX Floating Point Problems-Footnote-11090908
+Node: Floating point summary1090946
+Node: Dynamic Extensions1093202
+Node: Extension Intro1094799
+Node: Plugin License1096101
+Node: Extension Mechanism Outline1096914
+Ref: figure-load-extension1097365
+Ref: figure-register-new-function1098943
+Ref: figure-call-new-function1100052
+Node: Extension API Description1102167
+Node: Extension API Functions Introduction1103896
+Ref: table-api-std-headers1105790
+Node: General Data Types1110231
+Ref: General Data Types-Footnote-11119377
+Node: Memory Allocation Functions1119680
+Ref: Memory Allocation Functions-Footnote-11124397
+Node: Constructor Functions1124496
+Node: API Ownership of MPFR and GMP Values1128397
+Node: Registration Functions1129950
+Node: Extension Functions1130654
+Node: Exit Callback Functions1136228
+Node: Extension Version String1137542
+Node: Input Parsers1138237
+Node: Output Wrappers1152856
+Node: Two-way processors1157698
+Node: Printing Messages1160051
+Ref: Printing Messages-Footnote-11161262
+Node: Updating ERRNO1161415
+Node: Requesting Values1162214
+Ref: table-value-types-returned1162967
+Node: Accessing Parameters1165026
+Node: Symbol Table Access1166307
+Node: Symbol table by name1166819
+Ref: Symbol table by name-Footnote-11170020
+Node: Symbol table by cookie1170152
+Ref: Symbol table by cookie-Footnote-11174421
+Node: Cached values1174485
+Ref: Cached values-Footnote-11178117
+Node: Array Manipulation1178274
+Ref: Array Manipulation-Footnote-11179373
+Node: Array Data Types1179410
+Ref: Array Data Types-Footnote-11182228
+Node: Array Functions1182324
+Node: Flattening Arrays1187353
+Node: Creating Arrays1194401
+Node: Redirection API1199243
+Node: Extension API Variables1202260
+Node: Extension Versioning1202983
+Ref: gawk-api-version1203412
+Node: Extension GMP/MPFR Versioning1205199
+Node: Extension API Informational Variables1206903
+Node: Extension API Boilerplate1208156
+Node: Changes from API V11212286
+Node: Finding Extensions1213918
+Node: Extension Example1214493
+Node: Internal File Description1215315
+Node: Internal File Ops1219607
+Ref: Internal File Ops-Footnote-11231157
+Node: Using Internal File Ops1231305
+Ref: Using Internal File Ops-Footnote-11233736
+Node: Extension Samples1234014
+Node: Extension Sample File Functions1235583
+Node: Extension Sample Fnmatch1243708
+Node: Extension Sample Fork1245303
+Node: Extension Sample Inplace1246579
+Node: Extension Sample Ord1250681
+Node: Extension Sample Readdir1251557
+Ref: table-readdir-file-types1252346
+Node: Extension Sample Revout1253702
+Node: Extension Sample Rev2way1254299
+Node: Extension Sample Read write array1255051
+Node: Extension Sample Readfile1258325
+Node: Extension Sample Time1259456
+Node: Extension Sample API Tests1261456
+Node: gawkextlib1261964
+Node: Extension summary1264996
+Node: Extension Exercises1268844
+Node: Language History1270114
+Node: V7/SVR3.11271826
+Node: SVR41274176
+Node: POSIX1275708
+Node: BTL1277133
+Node: POSIX/GNU1277900
+Node: Feature History1284555
+Node: Common Extensions1304396
+Node: Ranges and Locales1305871
+Ref: Ranges and Locales-Footnote-11310656
+Ref: Ranges and Locales-Footnote-21310683
+Ref: Ranges and Locales-Footnote-31310918
+Node: Contributors1311141
+Node: History summary1317332
+Node: Installation1318774
+Node: Gawk Distribution1319738
+Node: Getting1320230
+Node: Extracting1321229
+Node: Distribution contents1322935
+Node: Unix Installation1330825
+Node: Quick Installation1331645
+Node: Compiling with MPFR1334185
+Node: Shell Startup Files1334891
+Node: Additional Configuration Options1336048
+Node: Configuration Philosophy1338431
+Node: Compiling from Git1340931
+Node: Building the Documentation1341490
+Node: Non-Unix Installation1342902
+Node: PC Installation1343378
+Node: PC Binary Installation1344247
+Node: PC Compiling1345140
+Node: PC Using1346318
+Node: Cygwin1350034
+Node: MSYS1351286
+Node: OpenVMS Installation1351912
+Node: OpenVMS Compilation1352593
+Ref: OpenVMS Compilation-Footnote-11354076
+Node: OpenVMS Dynamic Extensions1354134
+Node: OpenVMS Installation Details1355770
+Node: OpenVMS Running1358201
+Node: OpenVMS GNV1362338
+Node: Bugs1363093
+Node: Bug definition1364013
+Node: Bug address1367614
+Node: Usenet1371183
+Node: Performance bugs1372396
+Node: Asking for help1375412
+Node: Maintainers1377399
+Node: Other Versions1378426
+Node: Installation summary1388030
+Node: Notes1389412
+Node: Compatibility Mode1390222
+Node: Additions1391044
+Node: Accessing The Source1391989
+Node: Adding Code1393520
+Node: New Ports1400631
+Node: Derived Files1405134
+Ref: Derived Files-Footnote-11410945
+Ref: Derived Files-Footnote-21410980
+Ref: Derived Files-Footnote-31411591
+Node: Future Extensions1411705
+Node: Implementation Limitations1412375
+Node: Extension Design1413617
+Node: Old Extension Problems1414777
+Ref: Old Extension Problems-Footnote-11416349
+Node: Extension New Mechanism Goals1416410
+Ref: Extension New Mechanism Goals-Footnote-11419880
+Node: Extension Other Design Decisions1420081
+Node: Extension Future Growth1422278
+Node: Notes summary1422898
+Node: Basic Concepts1424108
+Node: Basic High Level1424793
+Ref: figure-general-flow1425075
+Ref: figure-process-flow1425777
+Ref: Basic High Level-Footnote-11429147
+Node: Basic Data Typing1429336
+Node: Glossary1432744
+Node: Copying1465622
+Node: GNU Free Documentation License1503180
+Node: Index1528303
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 4969ebe8..78dae299 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -1684,7 +1684,7 @@ supported by POSIX @command{awk} and @command{gawk}.
@ref{Reading Files},
describes how @command{awk} reads your data.
It introduces the concepts of records and fields, as well
-as the @code{getline} command.
+as the @code{getline} function.
I/O redirection is first described here.
Network I/O is also briefly introduced here.
@@ -6765,9 +6765,9 @@ By default, each record is one line. Each
record is automatically split into chunks called @dfn{fields}.
This makes it more convenient for programs to work on the parts of a record.
-@cindex @code{getline} command
-On rare occasions, you may need to use the @code{getline} command.
-The @code{getline} command is valuable both because it
+@cindex @code{getline} function
+On rare occasions, you may need to use the @code{getline} function.
+The @code{getline} function is valuable both because it
can do explicit input from any number of files, and because the files
used with it do not have to be named on the @command{awk} command line
(@pxref{Getline}).
@@ -8729,7 +8729,7 @@ then @command{gawk} sets @code{RT} to the null string.
@node Getline
@section Explicit Input with @code{getline}
-@cindex @code{getline} command @subentry explicit input with
+@cindex @code{getline} function @subentry explicit input with
@cindex input @subentry explicit
So far we have been getting our input data from @command{awk}'s main
input stream---either the standard input (usually your keyboard, sometimes
@@ -8738,11 +8738,11 @@ files specified on the command line. The @command{awk}
language has a
special built-in command called @code{getline} that
can be used to read input under your explicit control.
-The @code{getline} command is used in several different ways and should
+The @code{getline} function is used in several different ways and should
@emph{not} be used by beginners.
-The examples that follow the explanation of the @code{getline} command
+The examples that follow the explanation of the @code{getline} function
include material that has not been covered yet. Therefore, come back
-and study the @code{getline} command @emph{after} you have reviewed the
+and study the @code{getline} function @emph{after} you have reviewed the
rest of
@ifinfo
this @value{DOCUMENT}
@@ -8758,12 +8758,12 @@ Parts I and II
and have a good knowledge of how @command{awk} works.
@cindex @command{gawk} @subentry @code{ERRNO} variable in
-@cindex @code{ERRNO} variable @subentry with @command{getline} command
-@cindex differences in @command{awk} and @command{gawk} @subentry
@code{getline} command
-@cindex @code{getline} command @subentry return values
+@cindex @code{ERRNO} variable @subentry with @command{getline} function
+@cindex differences in @command{awk} and @command{gawk} @subentry
@code{getline} function
+@cindex @code{getline} function @subentry return values
@cindex @option{--sandbox} option @subentry input redirection with
@code{getline}
-The @code{getline} command returns 1 if it finds a record and 0 if
+The @code{getline} function returns 1 if it finds a record and 0 if
it encounters the end of the file. If there is some error in getting
a record, such as a file that cannot be opened, then @code{getline}
returns @minus{}1. In this case, @command{gawk} sets the variable
@@ -8803,7 +8803,7 @@ reading lines from files, pipes, and coprocesses is
disabled.
@node Plain Getline
@subsection Using @code{getline} with No Arguments
-The @code{getline} command can be used without arguments to read input
+The @code{getline} function 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 processing the current record, but want to do some special
@@ -8869,7 +8869,7 @@ $ @kbd{awk -f strip_comments.awk example_text}
@print{} no comment
@end example
-This form of the @code{getline} command sets @code{NF},
+This form of the @code{getline} function sets @code{NF},
@code{NR}, @code{FNR}, @code{RT}, and the value of @code{$0}.
@quotation NOTE
@@ -8884,8 +8884,8 @@ rule in the program. @xref{Next Statement}.
@node Getline/Variable
@subsection Using @code{getline} into a Variable
-@cindex @code{getline} command @subentry into a variable
-@cindex variables @subentry @code{getline} command into, using
+@cindex @code{getline} function @subentry into a variable
+@cindex variables @subentry @code{getline} function into, using
You can use @samp{getline @var{var}} to read the next record from
@command{awk}'s input into the variable @var{var}. No other processing is
@@ -8929,7 +8929,7 @@ phore
free
@end example
-The @code{getline} command used in this way sets only the variables
+The @code{getline} function used in this way sets only the variables
@code{NR}, @code{FNR}, and @code{RT} (and, of course, @var{var}).
The record is not
split into fields, so the values of the fields (including @code{$0}) and
@@ -8938,7 +8938,7 @@ the value of @code{NF} do not change.
@node Getline/File
@subsection Using @code{getline} from a File
-@cindex @code{getline} command @subentry from a file
+@cindex @code{getline} function @subentry from a file
@cindex input redirection
@cindex redirection @subentry of input
@cindex @code{<} (left angle bracket) @subentry @code{<} operator (I/O)
@@ -8980,7 +8980,7 @@ you want your program to be portable to all @command{awk}
implementations.
@node Getline/Variable/File
@subsection Using @code{getline} into a Variable from a File
-@cindex variables @subentry @code{getline} command into, using
+@cindex variables @subentry @code{getline} function into, using
Use @samp{getline @var{var} < @var{file}} to read input
from the file
@@ -9134,7 +9134,7 @@ have to worry.
@node Getline/Variable/Pipe
@subsection Using @code{getline} into a Variable from a Pipe
-@cindex variables @subentry @code{getline} command into, using
+@cindex variables @subentry @code{getline} function into, using
When you use @samp{@var{command} | getline @var{var}}, the
output of @var{command} is sent through a pipe to
@@ -9167,7 +9167,7 @@ program to be portable to other @command{awk}
implementations.
@node Getline/Coprocess
@subsection Using @code{getline} from a Coprocess
@cindex coprocesses @subentry @code{getline} from
-@cindex @code{getline} command @subentry coprocesses, using from
+@cindex @code{getline} function @subentry coprocesses, using from
@cindex @code{|} (vertical bar) @subentry @code{|&} operator (I/O)
@cindex vertical bar (@code{|}) @subentry @code{|&} operator (I/O)
@cindex operators @subentry input/output
@@ -9207,7 +9207,7 @@ where coprocesses are discussed in more detail.
@node Getline/Variable/Coprocess
@subsection Using @code{getline} into a Variable from a Coprocess
-@cindex variables @subentry @code{getline} command into, using
+@cindex variables @subentry @code{getline} function into, using
When you use @samp{@var{command} |& getline @var{var}}, the output from
the coprocess @var{command} is sent through a two-way pipe to @code{getline}
@@ -9250,12 +9250,12 @@ system permits.
@cindex side effects @subentry @code{FILENAME} variable
@cindex @code{FILENAME} variable @subentry @code{getline}, setting with
@cindex dark corner @subentry @code{FILENAME} variable
-@cindex @code{getline} command @subentry @code{FILENAME} variable and
+@cindex @code{getline} function @subentry @code{FILENAME} variable and
@cindex @code{BEGIN} pattern @subentry @code{getline} and
@item
An interesting side effect occurs if you use @code{getline} without a
redirection inside a @code{BEGIN} rule. Because an unredirected @code{getline}
-reads from the command-line @value{DF}s, the first @code{getline} command
+reads from the command-line @value{DF}s, the first @code{getline} function
causes @command{awk} to set the value of @code{FILENAME}. Normally,
@code{FILENAME} does not have a value inside @code{BEGIN} rules, because you
have not yet started to process the command-line @value{DF}s.
@@ -9286,6 +9286,40 @@ It is worth noting that those variants that do not use
redirection
can cause @code{FILENAME} to be updated if they cause
@command{awk} to start reading a new input file.
+@item
+@code{getline} is not a statement (unlike @code{print}), it's an
+expression. It has a result value, and can be used as part as a
+larger expression, in control statements, and so on.
+Here are examples of the ``read until EOF/error'' idiom:
+
+@example
+while ("sort FILE" | getline line > 0)
+ print line
+while (getline line < "file.txt" > 0)
+ print line
+@end example
+
+If you need to test the error code for being less than zero,
+you need to enclose @code{getline} in parentheses, to avoid
+it being interpreted as input redirection:
+
+@example
+if ((getline VAR) < 0)
+ print "Read error";
+@end example
+
+It is, in fact, best to parenthesize use of @command{getline}
+in all control expressions, as some versions of @command{awk}
+require this. Thus, the previos examples are best written
+this way:
+
+@example
+while (("sort FILE" | getline line) > 0)
+ print line
+while ((getline line < "file.txt") > 0)
+ print line
+@end example
+
@item
@cindex Moore, Duncan
If the variable being assigned is an expression with side effects,
@@ -9318,7 +9352,7 @@ know that there is a string value to be assigned.
@node Getline Summary
@subsection Summary of @code{getline} Variants
-@cindex @code{getline} command @subentry variants
+@cindex @code{getline} function @subentry variants
@ref{table-getline-variants}
summarizes the eight variants of @code{getline},
@@ -10883,7 +10917,7 @@ Doing so results in unpredictable behavior.
@cindex output @subentry files, closing
@cindex pipe @subentry closing
@cindex coprocesses @subentry closing
-@cindex @code{getline} command @subentry coprocesses, using from
+@cindex @code{getline} function @subentry coprocesses, using from
@menu
* Close Return Value:: Using the return value from @code{close()}.
@@ -14413,7 +14447,7 @@ rule. Because @code{BEGIN} rules are executed before
any input is read,
there simply is no input record, and therefore no fields, when
executing @code{BEGIN} rules. References to @code{$0} and the fields
yield a null string or zero, depending upon the context. One way
-to give @code{$0} a real value is to execute a @code{getline} command
+to give @code{$0} a real value is to execute a @code{getline} function
without a variable (@pxref{Getline}).
Another way is simply to assign a value to @code{$0}.
@@ -14548,8 +14582,8 @@ either a @code{BEGINFILE} or an @code{ENDFILE} rule.
The @code{nextfile}
statement is allowed only inside a
@code{BEGINFILE} rule, not inside an @code{ENDFILE} rule.
-@cindex @code{getline} command @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
-The @code{getline} statement (@pxref{Getline}) is restricted inside
+@cindex @code{getline} function @subentry @code{BEGINFILE}/@code{ENDFILE}
patterns and
+The @code{getline} function (@pxref{Getline}) is restricted inside
both @code{BEGINFILE} and @code{ENDFILE}: only redirected
forms of @code{getline} are allowed.
@@ -14703,7 +14737,7 @@ is used in order to put several statements together in
the body of an
@code{if}, @code{while}, @code{do}, or @code{for} statement.
@item Input statements
-Use the @code{getline} command
+Use the @code{getline} function
(@pxref{Getline}).
Also supplied in @command{awk} are the @code{next}
statement (@pxref{Next Statement})
@@ -23336,7 +23370,7 @@ BEGIN @{
@c endfile
@end example
-@cindex troubleshooting @subentry @code{getline} command
+@cindex troubleshooting @subentry @code{getline} function
This works, because the @code{getline} won't be fatal.
Removing the element from @code{ARGV} with @code{delete}
skips the file (because it's no longer in the list).
@@ -24183,7 +24217,7 @@ The variable @code{_pw_inited} is used for efficiency,
as @code{_pw_init()}
needs to be called only once.
@cindex @code{PROCINFO} array @subentry testing the field splitting
-@cindex @code{getline} command @subentry @code{_pw_init()} function
+@cindex @code{getline} function @subentry @code{_pw_init()} function
Because this function uses @code{getline} to read information from
@command{pwcat}, it first saves the values of @code{FS}, @code{RS}, and
@code{$0}.
It notes in the variable @code{using_fw} whether field splitting
@@ -24455,7 +24489,7 @@ $ @kbd{grcat}
Here are the functions for obtaining information from the group database.
There are several, modeled after the C library functions of the same names:
-@cindex @code{getline} command @subentry @code{_gr_init()} user-defined
function
+@cindex @code{getline} function @subentry @code{_gr_init()} user-defined
function
@cindex @code{_gr_init()} user-defined function
@cindex user-defined @subentry function @subentry @code{_gr_init()}
@example
@@ -29866,7 +29900,7 @@ standard error separately.
@cindex deadlocks
@cindex buffering @subentry input/output
-@cindex @code{getline} command @subentry deadlock and
+@cindex @code{getline} function @subentry deadlock and
@item
I/O buffering may be a problem. @command{gawk} automatically
flushes all output down the pipe to the coprocess.
@@ -46158,7 +46192,7 @@ Otherwise, refer to the entry for ``recursion.''
Redirection means performing input from something other than the standard input
stream, or performing output to something other than the standard output
stream.
-You can redirect input to the @code{getline} statement using
+You can redirect input to the @code{getline} function using
the @samp{<}, @samp{|}, and @samp{|&} operators.
You can redirect the output of the @code{print} and @code{printf} statements
to a file or a system command, using the @samp{>}, @samp{>>}, @samp{|}, and
@samp{|&}
diff --git a/doc/gawkinet.info b/doc/gawkinet.info
index 17ebaee2..bff87daf 100644
--- a/doc/gawkinet.info
+++ b/doc/gawkinet.info
@@ -1,4 +1,4 @@
-This is gawkinet.info, produced by makeinfo version 7.0.1 from
+This is gawkinet.info, produced by makeinfo version 7.1 from
gawkinet.texi.
This is Edition 1.6 of âTCP/IP Internetworking with âgawkââ, for the
@@ -12,19 +12,19 @@ This is Edition 1.6 of âTCP/IP Internetworking with
âgawkââ, for the
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â, the Front-Cover
+Invariant Sections being "GNU General Public License", the Front-Cover
texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below). A copy of the license is included in the section entitled
-âGNU Free Documentation Licenseâ.
+"GNU Free Documentation License".
- a. âA GNU Manualâ
+ a. "A GNU Manual"
- b. âYou have the freedom to copy and modify this GNU manual. Buying
+ b. "You have the freedom to copy and modify this GNU manual. Buying
copies from the FSF supports it in developing GNU and promoting
- software freedom.â
+ software freedom."
INFO-DIR-SECTION Network applications
START-INFO-DIR-ENTRY
-* awkinet: (gawkinet). TCP/IP Internetworking With âgawkâ.
+* awkinet: (gawkinet). TCP/IP Internetworking With 'gawk'.
END-INFO-DIR-ENTRY
@@ -47,16 +47,16 @@ This file documents the networking features in GNU Awk
(âgawkâ) version
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â, the Front-Cover
+Invariant Sections being "GNU General Public License", the Front-Cover
texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below). A copy of the license is included in the section entitled
-âGNU Free Documentation Licenseâ.
+"GNU Free Documentation License".
- a. âA GNU Manualâ
+ a. "A GNU Manual"
- b. âYou have the freedom to copy and modify this GNU manual. Buying
+ b. "You have the freedom to copy and modify this GNU manual. Buying
copies from the FSF supports it in developing GNU and promoting
- software freedom.â
+ software freedom."
* Menu:
@@ -124,7 +124,7 @@ the production versions of âgawkâ available from his
home page. In
August of 2000 (for âgawkâ 3.0.6), this patch also made it to the main
GNU âftpâ distribution site.
- For release with âgawkâ, I edited Jürgenâs prose for English grammar
+ For release with âgawkâ, I edited Jürgen's prose for English grammar
and style, as he is not a native English speaker. I also rearranged the
material somewhat for what I felt was a better order of presentation,
and (re)wrote some of the introductory material.
@@ -190,7 +190,7 @@ When you make a phone call, the following steps occur:
The same steps occur in a duplex reliable computer networking
connection. There is considerably more overhead in setting up the
-communications, but once itâs done, data moves in both directions,
+communications, but once it's done, data moves in both directions,
reliably, in sequence.
@@ -216,12 +216,12 @@ following.
does not occur very often.)
6. In a computer network, one or more âpacketsâ may also arrive
- multiple times. (This doesnât happen with the postal system!)
+ multiple times. (This doesn't happen with the postal system!)
The important characteristics of datagram communications, like those
of the postal system are thus:
- ⢠Delivery is âbest effort;â the data may never get there.
+ ⢠Delivery is "best effort;" the data may never get there.
⢠Each message is self-contained, including the source and
destination addresses.
@@ -245,7 +245,7 @@ File: gawkinet.info, Node: The TCP/IP Protocols, Next:
Making Connections, Pr
The Internet Protocol Suite (usually referred to as just TCP/IP)(1)
consists of a number of different protocols at different levels or
-âlayers.â For our purposes, three protocols provide the fundamental
+"layers." For our purposes, three protocols provide the fundamental
communications mechanisms. All other defined protocols are referred to
as user-level protocols (e.g., HTTP, used later in this Info file).
@@ -269,8 +269,8 @@ File: gawkinet.info, Node: Basic Protocols, Next: Ports,
Prev: The TCP/IP Pro
IP
The Internet Protocol. This protocol is almost never used directly
by applications. It provides the basic packet delivery and routing
- infrastructure of the Internet. Much like the phone companyâs
- switching centers or the Post Officeâs trucks, it is not of much
+ infrastructure of the Internet. Much like the phone company's
+ switching centers or the Post Office's trucks, it is not of much
day-to-day interest to the regular user (or programmer). It
happens to be a best effort datagram protocol. In the early
twenty-first century, there are two versions of this protocol in
@@ -281,11 +281,11 @@ IP
addresses, on which most of the current Internet is based.
IPv6
- The ânext generationâ of the Internet Protocol, with 128-bit
+ The "next generation" of the Internet Protocol, with 128-bit
addresses. This protocol is in wide use in certain parts of
the world, but has not yet replaced IPv4.(1)
- Versions of the other protocols that sit âatopâ IP exist for both
+ Versions of the other protocols that sit "atop" IP exist for both
IPv4 and IPv6. However, as the IPv6 versions are fundamentally the
same as the original IPv4 versions, we will not distinguish further
between them.
@@ -309,7 +309,7 @@ Protocol).
---------- Footnotes ----------
- (1) There isnât an IPv5.
+ (1) There isn't an IPv5.
File: gawkinet.info, Node: Ports, Prev: Basic Protocols, Up: The TCP/IP
Protocols
@@ -323,9 +323,9 @@ than one person at the location; thus you have to further
quantify the
recipient by putting a person or company name on the envelope.
In the phone system, one phone number may represent an entire
-company, in which case you need a personâs extension number in order to
+company, in which case you need a person's extension number in order to
reach that individual directly. Or, when you call a home, you have to
-say, âMay I please speak to ...â before talking to the person directly.
+say, "May I please speak to ..." before talking to the person directly.
IP networking provides the concept of addressing. An IP address
represents a particular computer, but no more. In order to reach the
@@ -336,7 +336,7 @@ represent the services, much like an extension number used
with a phone
number.
Port numbers are 16-bit integers. Unix and Unix-like systems reserve
-ports below 1024 for âwell knownâ services, such as SMTP, FTP, and HTTP.
+ports below 1024 for "well known" services, such as SMTP, FTP, and HTTP.
Numbers 1024 and above may be used by any application, although there is
no promise made that a particular port number is always available.
@@ -347,7 +347,7 @@ File: gawkinet.info, Node: Making Connections, Prev: The
TCP/IP Protocols, Up
====================================================
Two terms come up repeatedly when discussing networking: âclientâ and
-âserverâ. For now, weâll discuss these terms at the âconnection
levelâ,
+âserverâ. For now, we'll discuss these terms at the âconnection
levelâ,
when first establishing connections between two processes on different
systems over a network. (Once the connection is established, the higher
level, or âapplication levelâ protocols, such as HTTP or FTP, determine
@@ -379,13 +379,13 @@ in order to enjoy the benefits of a simple communication
paradigm in
âsynchronousâ.(2) I.e., each end waits on the other to finish
transmitting, before replying. This is much like two people in a phone
conversation. While both could talk simultaneously, doing so usually
-doesnât work too well.
+doesn't work too well.
In the case of TCP, the synchronicity is enforced by the protocol
when sending data. Data writes âblockâ until the data have been
received on the other end. For both TCP and UDP, data reads block until
there is incoming data waiting to be read. This is summarized in the
-following table, where an âxâ indicates that the given action blocks.
+following table, where an "x" indicates that the given action blocks.
TCP x x
UDP x
@@ -394,9 +394,9 @@ UDP x
(1) In the days before voice mail systems!
- (2) For the technically savvy, data reads blockâif thereâs no
+ (2) For the technically savvy, data reads block--if there's no
incoming data, the program is made to wait until there is, instead of
-receiving a âthereâs no dataâ error return.
+receiving a "there's no data" error return.
File: gawkinet.info, Node: Using Networking, Next: Some Applications and
Techniques, Prev: Introduction, Up: Top
@@ -406,10 +406,10 @@ File: gawkinet.info, Node: Using Networking, Next: Some
Applications and Techn
The âawkâ programming language was originally developed as a
pattern-matching language for writing short programs to perform data
-manipulation tasks. âawkââs strength is the manipulation of textual
+manipulation tasks. âawkâ's strength is the manipulation of textual
data that is stored in files. It was never meant to be used for
networking purposes. To exploit its features in a networking context,
-itâs necessary to use an access mode for network connections that
+it's necessary to use an access mode for network connections that
resembles the access of files as closely as possible.
âawkâ is also meant to be a prototyping language. It is used to
@@ -448,18 +448,18 @@ protocol is much less important for most users.
File: gawkinet.info, Node: Gawk Special Files, Next: TCP Connecting, Prev:
Using Networking, Up: Using Networking
-2.1 âgawkââs Networking Mechanisms
+2.1 âgawkâ's Networking Mechanisms
==================================
The â|&â operator for use in communicating with a âcoprocessâ is
described in *note Two-way Communications With Another Process:
(gawk)Two-way I/O. It shows how to do two-way I/O to a separate process,
sending it data with âprintâ or âprintfâ and reading data with
-âgetlineâ. If you havenât read it already, you should detour there to
+âgetlineâ. If you haven't read it already, you should detour there to
do so.
âgawkâ transparently extends the two-way I/O mechanism to simple
-networking through the use of special file names. When a âcoprocessâ
+networking through the use of special file names. When a "coprocess"
that matches the special files we are about to describe is started,
âgawkâ creates the appropriate network connection, and then two-way I/O
proceeds as usual.
@@ -495,14 +495,14 @@ File: gawkinet.info, Node: Special File Fields, Next:
Comparing Protocols, Pr
This node explains the meaning of all of the fields, as well as the
range of values and the defaults. All of the fields are mandatory. To
-let the system pick a value, or if the field doesnât apply to the
+let the system pick a value, or if the field doesn't apply to the
protocol, specify it as â0â (zero):
NET-TYPE
This is one of âinet4â for IPv4, âinet6â for IPv6, or âinetâ
to use
the system default (which is likely to be IPv4). For the rest of
this document, we will use the generic â/inetâ in our descriptions
- of how âgawkââs networking works.
+ of how âgawkâ's networking works.
PROTOCOL
Determines which member of the TCP/IP family of protocols is
@@ -513,7 +513,7 @@ PROTOCOL
LOCALPORT
Determines which port on the local machine is used to communicate
across the network. Application-level clients usually use â0â to
- indicate they do not care which local port is usedâinstead they
+ indicate they do not care which local port is used--instead they
specify a remote port to connect to.
It is vital for application-level servers to use a number different
@@ -570,7 +570,6 @@ meaning. If this table is too complicated, focus on the
three lines
printed in *bold*. All the examples in *note Networking With âgawkâ:
Using Networking, use only the patterns printed in bold letters.
-
PROTOCOL LOCAL HOST NAME REMOTE RESULTING CONNECTION-LEVEL
PORT PORT BEHAVIOR
------------------------------------------------------------------------------
@@ -672,10 +671,10 @@ started first:
}
In the case of UDP, the initial âprintâ command is the one that
-actually sends data so that there is a connection. UDP and âconnectionâ
+actually sends data so that there is a connection. UDP and "connection"
sounds strange to anyone who has learned that UDP is a connectionless
-protocol. Here, âconnectionâ means that the âconnect()â system call
has
-completed its work and completed the âassociationâ between a certain
+protocol. Here, "connection" means that the âconnect()â system call has
+completed its work and completed the "association" between a certain
socket and an IP address. Thus there are subtle differences between
âconnect()â for TCP and UDP; see the man page for details.(1)
@@ -699,7 +698,7 @@ File: gawkinet.info, Node: TCP Connecting, Next:
Troubleshooting, Prev: Gawk
2.2 Establishing a TCP Connection
=================================
-Letâs observe a network connection at work. Type in the following
+Let's observe a network connection at work. Type in the following
program and watch the output. Within a second, it connects via TCP
(â/inet/tcpâ) to a remote server and asks the service âdaytimeâ on the
machine what time it is:
@@ -832,7 +831,7 @@ support TCP as well as UDP.
(1) Microsoft preferred to ignore the TCP/IP family of protocols
until 1995. Then came the rise of the Netscape browser as a landmark
-âkiller application.â Microsoft added TCP/IP support and their own
+"killer application." Microsoft added TCP/IP support and their own
browser to Microsoft Windows 95 at the last minute. They even
back-ported their TCP/IP implementation to Microsoft Windows for
Workgroups 3.11, but it was a rather rudimentary and half-hearted
@@ -972,7 +971,7 @@ machine can only be used by one server program at a time.
Now terminate
the server program and change the name â8888â to âechoâ. After
restarting it, the server program does not run any more, and you know
why: there is already an âechoâ service running on your machine. But
-even if this isnât true, you would not get your own âechoâ server
+even if this isn't true, you would not get your own âechoâ server
running on a Unix machine, because the ports with numbers smaller than
1024 (âechoâ is at port 7) are reserved for ârootâ. On machines
running
some flavor of Microsoft Windows, there is no restriction that reserves
@@ -982,7 +981,7 @@ restriction of the Unix world seems to have never been
adopted âDoes
windows(10/server-2016) have privileged ports?â
(https://social.technet.microsoft.com/Forums/windowsserver/en-US/334f0770-eda9-475a-a27f-46b80ab7e872/does-windows10server2016-have-privileged-ports-?forum=ws2016).
In Microsoft Windows it is the level of the firewall that handles port
-access restrictions, not the level of the operating systemâs kernel.
+access restrictions, not the level of the operating system's kernel.
Turning this short server program into something really useful is
simple. Imagine a server that first reads a file name from the client
@@ -1119,7 +1118,7 @@ calls âwww.yahoo.comâ):
Again, lines are separated by a redefined âRSâ and âORSâ. The
âGETâ
request that we send to the server is the only kind of HTTP request that
existed when the web was created in the early 1990s. HTTP calls this
-âGETâ request a âmethod,â which tells the service to transmit a web
page
+âGETâ request a "method," which tells the service to transmit a web page
(here the home page of the Yahoo! search engine). Version 1.0 added
the request methods âHEADâ and âPOSTâ. The current version of HTTP is
1.1,(1)(2) and knows the additional request methods âOPTIONSâ, âPUTâ,
@@ -1154,11 +1153,11 @@ obsolete by RFC 2616, an update without any substantial
changes.
(2) Version 2.0 of HTTP (https://en.wikipedia.org/wiki/HTTP/2) was
defined in RFC7540 (https://tools.ietf.org/html/rfc7540) and was derived
-from Googleâs SPDY (https://en.wikipedia.org/wiki/SPDY) protocol. It is
+from Google's SPDY (https://en.wikipedia.org/wiki/SPDY) protocol. It is
said to be widely supported. As of 2020 the most popular web sites
still identify themselves as supporting HTTP/1.1. Version 3.0 of HTTP
(https://en.wikipedia.org/wiki/HTTP/3) is still a draft and was derived
-from Googleâs QUIC (https://en.wikipedia.org/wiki/QUIC) protocol.
+from Google's QUIC (https://en.wikipedia.org/wiki/QUIC) protocol.
File: gawkinet.info, Node: Primitive Service, Next: Interacting Service,
Prev: Web page, Up: Using Networking
@@ -1215,7 +1214,7 @@ The steps are as follows:
point to <http://localhost:8080> (the browser needs to know on which
port our server is listening for requests). If this does not work, the
browser probably tries to connect to a proxy server that does not know
-your machine. If so, change the browserâs configuration so that the
+your machine. If so, change the browser's configuration so that the
browser does not try to use a proxy to connect to your machine.
@@ -1239,7 +1238,7 @@ will become the core of event-driven execution controlled
by a graphical
user interface (GUI). Each HTTP event that the user triggers by some
action within the browser is received in this central procedure.
Parameters and menu choices are extracted from this request, and an
-appropriate measure is taken according to the userâs choice:
+appropriate measure is taken according to the user's choice:
BEGIN {
if (MyHost == "") {
@@ -1384,10 +1383,10 @@ inevitable. Header parameters should then be stored in
a global array
as well as the body.
On each subsequent run through the main loop, one request from a
-browser is received, evaluated, and answered according to the userâs
+browser is received, evaluated, and answered according to the user's
choice. This can be done by letting the value of the HTTP method guide
the main loop into execution of the procedure âHandleGET()â, which
-evaluates the userâs choice. In this case, we have only one
+evaluates the user's choice. In this case, we have only one
hierarchical level of menus, but in the general case, menus are nested.
The menu choices at each level are separated by â/â, just as in file
names. Notice how simple it is to construct menus of arbitrary depth:
@@ -1426,14 +1425,14 @@ File: gawkinet.info, Node: CGI Lib, Prev: Interacting
Service, Up: Interactin
--------------------------
HTTP is like being married: you have to be able to handle whatever
- youâre given, while being very careful what you send back.
- â _Phil Smith III,
+ you're given, while being very careful what you send back.
+ -- _Phil Smith III,
<http://www.netfunny.com/rhf/jokes/99/Mar/http.html>_
In *note A Web Service with Interaction: Interacting Service, we saw
-the function âCGI_setup()â as part of the web server âcore logicâ
+the function âCGI_setup()â as part of the web server "core logic"
framework. The code presented there handles almost everything necessary
-for CGI requests. One thing it doesnât do is handle encoded characters
+for CGI requests. One thing it doesn't do is handle encoded characters
in the requests. For example, an â&â is encoded as a percent sign
followed by the hexadecimal value: â%26â. These encoded values should
be decoded. Following is a simple library to perform these tasks. This
@@ -1534,7 +1533,7 @@ is the code:
This isolates details in a single function, âCGI_setup()â. Decoding
of encoded characters is pushed off to a helper function,
â_CGI_decode()â. The use of the leading underscore (â_â) in the
-function name is intended to indicate that it is an âinternalâ function,
+function name is intended to indicate that it is an "internal" function,
although there is nothing to enforce this:
function _CGI_decode(str, hexdigs, i, pre, code1, code2,
@@ -1568,7 +1567,7 @@ although there is nothing to enforce this:
This works by splitting the string apart around an encoded character.
The two digits are converted to lowercase characters and looked up in a
string of hex digits. Note that â0â is not in the string on purpose;
-âindex()â returns zero when itâs not found, automatically giving the
+âindex()â returns zero when it's not found, automatically giving the
correct value! Once the hexadecimal value is converted from characters
in a string into a numerical value, âsprintf()â converts the value back
into a real character. The following is a simple test harness for the
@@ -1699,7 +1698,7 @@ Initially the user does not say anything; then ELIZA
resets its money
counter and asks the user to tell what comes to mind open-heartedly.
The subsequent answers are converted to uppercase characters and stored
for later comparison. ELIZA presents the bill when being confronted
-with a sentence that contains the phrase âshut up.â Otherwise, it looks
+with a sentence that contains the phrase "shut up." Otherwise, it looks
for keywords in the sentence, conjugates the rest of the sentence,
remembers the keyword for later use, and finally selects an answer from
the set of possible answers:
@@ -1786,7 +1785,7 @@ ELIZA just picks an index randomly:
}
Some interesting remarks and details (including the original source
-code of ELIZA) are found on Mark Humphrysâs home page âHow my program
+code of ELIZA) are found on Mark Humphrys's home page âHow my program
passed the Turing Testâ (https://computing.dcu.ie/~humphrys/eliza.html).
Wikipedia provides much background information about ELIZA
(https://en.wikipedia.org/wiki/ELIZA), including the original design of
@@ -1816,10 +1815,10 @@ application works or not sometimes depends on the
following:
⢠The state of the party at the other end
The most difficult problems for a beginner arise from the hidden
-states of the underlying network. After closing a TCP connection, itâs
+states of the underlying network. After closing a TCP connection, it's
often necessary to wait a short while before reopening the connection.
Even more difficult is the establishment of a connection that previously
-ended with a âbroken pipe.â Those connections have to âtime outâ for a
+ended with a "broken pipe." Those connections have to "time out" for a
minute or so before they can reopen. Check this with the command
ânetstat -aâ, which provides a list of still-active connections.
@@ -1835,7 +1834,7 @@ Loebner Prize is the first formal instantiation of a
Turing Test. Hugh
Loebner agreed with The Cambridge Center for Behavioral Studies to
underwrite a contest designed to implement the Turing Test. Dr. Loebner
pledged a Grand Prize of $100,000 for the first computer whose responses
-were indistinguishable from a humanâs. Each year an annual prize of
+were indistinguishable from a human's. Each year an annual prize of
$2000 and a bronze medal is awarded to the _most_ human computer. The
winner of the annual contest is the best entry relative to other entries
that year, irrespective of how good it is in an absolute sense. Here is
@@ -1900,7 +1899,7 @@ is up to you to accomplish this?
The GAWK manual can be consumed in a single lab session and
the language can be mastered by the next morning by the
- average student. GAWKâs automatic initialization, implicit
+ average student. GAWK's automatic initialization, implicit
coercion, I/O support and lack of pointers forgive many of the
mistakes that young programmers are likely to make. Those who
have seen C but not mastered it are happy to see that GAWK
@@ -1910,14 +1909,14 @@ is up to you to accomplish this?
There are further simple answers. Probably the best is the
fact that increasingly, undergraduate AI programming is
involving the Web. Oren Etzioni (University of Washington,
- Seattle) has for a while been arguing that the âsoftbotâ is
- replacing the mechanical engineersâ robot as the most
+ Seattle) has for a while been arguing that the "softbot" is
+ replacing the mechanical engineers' robot as the most
glamorous AI testbed. If the artifact whose behavior needs to
be controlled in an intelligent way is the software agent,
then a language that is well-suited to controlling the
software environment is the appropriate language. That would
imply a scripting language. If the robot is KAREL, then the
- right language is âturn left; turn right.â If the robot is
+ right language is "turn left; turn right." If the robot is
Netscape, then the right language is something that can
generate ânetscape -remote
'openURL(http://cs.wustl.edu/~loui)'â with elan.
@@ -1934,8 +1933,8 @@ is up to you to accomplish this?
strings. A language that provides the best support for string
processing in the end provides the best support for logic, for
the exploration of various logics, and for most forms of
- symbolic processing that AI might choose to call âreasoningâ
- instead of âlogic.â The implication is that PROLOG, which
+ symbolic processing that AI might choose to call "reasoning"
+ instead of "logic." The implication is that PROLOG, which
saves the AI programmer from having to write a unifier, saves
perhaps two dozen lines of GAWK code at the expense of
strongly biasing the logic and representational expressiveness
@@ -1956,7 +1955,7 @@ is up to you to accomplish this?
real translation program.
⢠Another dialogue-oriented application (on the verge of ridicule) is
- the email âsupport service.â Troubled customers write an email to
+ the email "support service." Troubled customers write an email to
an automatic âgawkâ service that reads the email. It looks for
keywords in the mail and assembles a reply email accordingly. By
carefully investigating the email header, and repeating these
@@ -1998,7 +1997,7 @@ languages that allow us to quickly solve problems with
short programs.
But Tcl has Tk on top of it, and âgawkâ had nothing comparable up to
now. While Tcl needs a large and ever-changing library (Tk, which was
originally bound to the X Window System), âgawkâ needs just the
-networking interface and some kind of browser on the clientâs side.
+networking interface and some kind of browser on the client's side.
Besides better portability, the most important advantage of this
approach (embracing well-established standards such HTTP and HTML) is
that _we do not need to change the language_. We let others do the work
@@ -2030,7 +2029,7 @@ we can turn it into something useful.
The PANIC program tells everyone who connects that the local site is
not working. When a web server breaks down, it makes a difference if
-customers get a strange ânetwork unreachableâ message, or a short
+customers get a strange "network unreachable" message, or a short
message telling them that the server has a problem. In such an
emergency, the hard disk and everything on it (including the regular web
service) may be unavailable. Rebooting the web server off a USB drive
@@ -2114,7 +2113,7 @@ the page content, but does receive the header:
This program can be changed as needed, but be careful with the last
lines. Make sure transmission of binary data is not corrupted by
additional line breaks. Even as it is now, the byte sequence
-â"\r\n\r\n"â would disappear if it were contained in binary data. Donât
+â"\r\n\r\n"â would disappear if it were contained in binary data. Don't
get caught in a trap when trying a quick fix on this one.
@@ -2252,7 +2251,7 @@ variables âProxyâ and âProxyPortâ as GETURL,
because these variables are
handed over to GETURL for each URL that gets checked. The one and only
parameter is the name of a file that contains one line for each URL. In
the first column, we find the URL, and the second and third columns hold
-the length of the URLâs body when checked for the two last times. Now,
+the length of the URL's body when checked for the two last times. Now,
we follow this plan:
1. Read the URLs from the file and remember their most recent lengths
@@ -2304,7 +2303,7 @@ be passed on. If so, we prepare strings that will become
part of the
command line later. In âGetHeaderâ, we store these strings together
with the longest part of the command line. Later, in the loop over the
URLs, âGetHeaderâ is appended with the URL and a redirection operator to
-form the command that reads the URLâs header over the Internet. GETURL
+form the command that reads the URL's header over the Internet. GETURL
always sends the headers to â/dev/stderrâ. That is the reason why we
need the redirection operator to have the header piped in.
@@ -2341,7 +2340,7 @@ expression. However, it is straightforward to add them,
if doing so is
necessary for other tasks.
This program reads an HTML file and prints all the HTTP links that it
-finds. It relies on âgawkââs ability to use regular expressions as the
+finds. It relies on âgawkâ's ability to use regular expressions as the
record separator. With âRSâ set to a regular expression that matches
links, the second action is executed each time a non-empty link is
found. We can find the matching link itself in âRTâ.
@@ -2371,7 +2370,7 @@ Microsoft and Netscape in the web server market.
firewall. After attaching a browser to port 80, we usually catch a
glimpse of the bright side of the server (its home page). With a tool
like GETURL at hand, we are able to discover some of the more concealed
-or even âindecentâ services (i.e., lacking conformity to standards of
+or even "indecent" services (i.e., lacking conformity to standards of
quality). It can be exciting to see the fancy CGI scripts that lie
there, revealing the inner workings of the server, ready to be called:
@@ -2396,8 +2395,8 @@ there, revealing the inner workings of the server, ready
to be called:
gawk -f geturl.awk http://any.host.on.the.net/cgi-bin/printenv
⢠Sometimes it is even possible to retrieve system files like the web
- serverâs log fileâpossibly containing customer dataâor even the
- file â/etc/passwdâ. (We donât recommend this!)
+ server's log file--possibly containing customer data--or even the
+ file â/etc/passwdâ. (We don't recommend this!)
*Caution:* Although this may sound funny or simply irrelevant, we are
talking about severe security holes. Try to explore your own system
@@ -2435,7 +2434,7 @@ File: gawkinet.info, Node: STATIST, Next: MAZE, Prev:
WEBGRAB, Up: Some Appl
-10 5 0 5 10"