[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gawk-diffs] [SCM] gawk branch, feature/api-parser, updated. gawk-4.1.0-
From: |
Andrew J. Schorr |
Subject: |
[gawk-diffs] [SCM] gawk branch, feature/api-parser, updated. gawk-4.1.0-2489-g7f6772a |
Date: |
Mon, 10 Apr 2017 11:57:37 -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, feature/api-parser has been updated
via 7f6772a66e57c9f636cbbf370015200a7dae2ef8 (commit)
from 215618921d2515040bd02fecc1a3438cd4949a5b (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=7f6772a66e57c9f636cbbf370015200a7dae2ef8
commit 7f6772a66e57c9f636cbbf370015200a7dae2ef8
Author: Andrew J. Schorr <address@hidden>
Date: Mon Apr 10 11:57:07 2017 -0400
Update texinfo docs to document new FIELDWIDTHS and API input parser
capabilities.
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 6e5d1a7..7b956c4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,10 @@
+2017-04-10 Andrew J. Schorr <address@hidden>
+
+ * gawktexi.in: Document FIELDWIDTHS enhancement to support an optional
+ field skip prefix. Document new PROCINFO["FS"] value "API".
+ Document new get_record field_width argument that enables the API
+ parser to override the default field parsing mechanism.
+
2017-04-07 Arnold D. Robbins <address@hidden>
* using-git.texi: Removed.
diff --git a/doc/gawk.info b/doc/gawk.info
index 197dc2f..d33e018 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -5127,9 +5127,12 @@ by assigning a string containing space-separated numbers
to the built-in
variable 'FIELDWIDTHS'. Each number specifies the width of the field,
_including_ columns between fields. If you want to ignore the columns
between fields, you can specify the width as a separate field that is
-subsequently ignored. It is a fatal error to supply a field width that
-has a negative value. The following data is the output of the Unix 'w'
-utility. It is useful to illustrate the use of 'FIELDWIDTHS':
+subsequently ignored. Or, starting in version 4.2, each field width may
+optionally be preceded by a colon-separated value specifying the number
+of characters to skip before the field starts. It is a fatal error to
+supply a field width that has a negative value. The following data is
+the output of the Unix 'w' utility. It is useful to illustrate the use
+of 'FIELDWIDTHS':
10:06pm up 21 days, 14:04, 23 users
User tty login idle JCPU PCPU what
@@ -5176,6 +5179,20 @@ calculated idle time:
brent ttyp0 286
dave ttyq4 1296000
+ Starting in version 4.2, this program could be rewritten to specify
+'FIELDWIDTHS' like so:
+ BEGIN { FIELDWIDTHS = "8 1:5 4:7 6 1:6 1:6 2:33" }
+ This strips away some of the white space separating the fields. With
+such a change, the program would produce the following results:
+
+ hzang ttyV3 50
+ eklye ttyV5 0
+ dportein ttyV6 107
+ gierd ttyD3 1
+ dave ttyD4 0
+ brent ttyp0 286
+ dave ttyq4 1296000
+
Another (possibly more practical) example of fixed-width input data
is the input from a deck of balloting cards. In some parts of the
United States, voters mark their choices by punching holes in computer
@@ -5197,8 +5214,10 @@ value is '"FS"' if regular field splitting is being
used, or
REGULAR FIELD SPLITTING ...
else if (PROCINFO["FS"] == "FIELDWIDTHS")
FIXED-WIDTH FIELD SPLITTING ...
- else
+ else if (PROCINFO["FS"] == "FPAT")
CONTENT-BASED FIELD SPLITTING ... (see next minor node)
+ else
+ API INPUT PARSER FIELD SPLITTING ... (*note Input Parsers::)
This information is useful when writing a function that needs to
temporarily change 'FS' or 'FIELDWIDTHS', read some records, and then
@@ -5304,7 +5323,10 @@ available for splitting regular strings (*note String
Functions::).
To recap, 'gawk' provides three independent methods to split input
records into fields. The mechanism used is based on which of the three
-variables--'FS', 'FIELDWIDTHS', or 'FPAT'--was last assigned to.
+variables--'FS', 'FIELDWIDTHS', or 'FPAT'--was last assigned to. In
+addition, an API input parser may choose to override the record parsing
+mechanism; please refer to *note Input Parsers:: for further information
+about this feature.
---------- Footnotes ----------
@@ -10441,9 +10463,12 @@ each variable.)
'FIELDWIDTHS #'
A space-separated list of columns that tells 'gawk' how to split
- input with fixed columnar boundaries. Assigning a value to
- 'FIELDWIDTHS' overrides the use of 'FS' and 'FPAT' for field
- splitting. *Note Constant Size:: for more information.
+ input with fixed columnar boundaries. Starting in version 4.2,
+ each field width may optionally be preceded by a colon-separated
+ value specifying the number of characters to skip before the field
+ starts. Assigning a value to 'FIELDWIDTHS' overrides the use of
+ 'FS' and 'FPAT' for field splitting. *Note Constant Size:: for
+ more information.
'FPAT #'
A regular expression (as a string) that tells 'gawk' to create the
@@ -10727,8 +10752,9 @@ they are not special:
'PROCINFO["FS"]'
This is '"FS"' if field splitting with 'FS' is in effect,
'"FIELDWIDTHS"' if field splitting with 'FIELDWIDTHS' is in
- effect, or '"FPAT"' if field matching with 'FPAT' is in
- effect.
+ effect, '"FPAT"' if field matching with 'FPAT' is in effect,
+ or '"API"' if field splitting is controlled by an API input
+ parser.
'PROCINFO["gid"]'
The value of the 'getgid()' system call.
@@ -24167,7 +24193,8 @@ for 'RT', if any.
#define INVALID_HANDLE (-1)
void *opaque; /* private data for input parsers */
int (*get_record)(char **out, struct awk_input *iobuf,
- int *errcode, char **rt_start, size_t *rt_len);
+ int *errcode, char **rt_start, size_t *rt_len,
+ const awk_fieldwidth_info_t **field_width);
ssize_t (*read_func)();
void (*close_func)(struct awk_input *iobuf);
struct stat sbuf; /* stat buf */
@@ -24213,7 +24240,8 @@ may be filled by 'XXX_take_control_of()':
' struct awk_input *iobuf,'
' int *errcode,'
' char **rt_start,'
-' size_t *rt_len);'
+' size_t *rt_len,'
+' const awk_fieldwidth_info_t **field_width);'
This function pointer should point to a function that creates the
input records. Said function is the core of the input parser. Its
behavior is described in the text following this list.
@@ -24263,6 +24291,20 @@ records. The parameters are as follows:
'*rt_len' should be set to zero. 'gawk' makes its own copy of this
data, so the extension must manage this storage.
+'const awk_fieldwidth_info_t **field_width'
+ If 'field_width' is not 'NULL', then '*field_width' will be
+ initialized to 'NULL', and the function may set it to point to a
+ structure supplying field width information to override the default
+ field parsing mechanism. Note that this structure will not be
+ copied by 'gawk'; it must persist at least until the next call to
+ 'get_record' or 'close_func'. Note also that 'field_width' will be
+ 'NULL' when 'getline' is assigning the results to a variable, thus
+ field parsing is not needed. If the parser does set
+ '*field_width', then 'gawk' will use this layout to parse the input
+ record, and the 'PROCINFO["FS"]' value will be '"API"' while this
+ record is active in '$0'. The 'awk_fieldwidth_info_t' data
+ structure is described below.
+
The return value is the length of the buffer pointed to by '*out', or
'EOF' if end-of-file was reached or an error occurred.
@@ -24312,6 +24354,47 @@ activate an input parser (*note BEGINFILE/ENDFILE::).
'void register_input_parser(awk_input_parser_t *input_parser);'
Register the input parser pointed to by 'input_parser' with 'gawk'.
+ If you would like to override the default field parsing mechanism for
+a given record, then you must populate the 'awk_fieldwidth_info_t'
+structure, which looks like this:
+
+ typedef struct {
+ awk_bool_t use_chars; /* false ==> use bytes */
+ size_t nf; /* number of fields in record (NF) */
+ struct awk_field_info {
+ size_t skip; /* amount to skip before field starts */
+ size_t len; /* length of field */
+ } fields[1]; /* actual dimension should be nf */
+ } awk_fieldwidth_info_t;
+
+ The fields are:
+
+'awk_bool_t use_chars;'
+ Set this to 'awk_true' if the field lengths are specified in terms
+ of potentially multi-byte characters, and set it to 'awk_false' if
+ the lengths are in terms of bytes. Performance will be better if
+ the values are supplied in terms of bytes.
+
+'size_t nf;'
+ Set this to the number of fields in the input record, i.e. 'NF'.
+
+'struct awk_field_info fields[nf];'
+ This is a variable-length array whose actual dimension should be
+ 'nf'. For each field, the 'skip' element should be set to the
+ number of characters or bytes, as controlled by the 'use_chars'
+ flag, to skip before the start of this field. And the 'len'
+ element provides the length of the field. The values in
+ 'fields[0]' provide the information for the '$1' field, and so on
+ through the 'fields[nf-1]' element containing the information for
+ '$NF'.
+
+ A convenience macro 'awk_fieldwidth_info_size(NF)' is provided to
+calculate the appropriate size of a variable-length
+'awk_fieldwidth_info_t' structure containing 'NF' fields. This can be
+used as an argument to 'malloc' or in a union to allocate space
+statically. Please refer to the sample extension 'readdir_test' for an
+example.
+
File: gawk.info, Node: Output Wrappers, Next: Two-way processors, Prev:
Input Parsers, Up: Registration Functions
@@ -33052,8 +33135,8 @@ Index
* caret (^), ^= operator: Assignment Ops. (line 129)
* caret (^), ^= operator <1>: Precedence. (line 94)
* case keyword: Switch Statement. (line 6)
-* case sensitivity, and regexps: User-modified. (line 76)
-* case sensitivity, and string comparisons: User-modified. (line 76)
+* case sensitivity, and regexps: User-modified. (line 79)
+* case sensitivity, and string comparisons: User-modified. (line 79)
* case sensitivity, array indices and: Array Intro. (line 100)
* case sensitivity, converting case: String Functions. (line 523)
* case sensitivity, example programs: Library Functions. (line 53)
@@ -33242,7 +33325,7 @@ Index
* dark corner, field separators: Full Line Fields. (line 22)
* dark corner, FILENAME variable: Getline Notes. (line 19)
* dark corner, FILENAME variable <1>: Auto-set. (line 108)
-* dark corner, FNR/NR variables: Auto-set. (line 357)
+* dark corner, FNR/NR variables: Auto-set. (line 358)
* dark corner, format-control characters: Control Letters. (line 18)
* dark corner, format-control characters <1>: Control Letters.
(line 93)
@@ -33441,13 +33524,13 @@ Index
* differences in awk and gawk, error messages: Special FD. (line 19)
* differences in awk and gawk, FIELDWIDTHS variable: User-modified.
(line 37)
-* differences in awk and gawk, FPAT variable: User-modified. (line 43)
+* differences in awk and gawk, FPAT variable: User-modified. (line 46)
* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 134)
* differences in awk and gawk, function arguments (gawk): Calling Built-in.
(line 16)
* differences in awk and gawk, getline command: Getline. (line 19)
* differences in awk and gawk, IGNORECASE variable: User-modified.
- (line 76)
+ (line 79)
* differences in awk and gawk, implementation limitations: Getline Notes.
(line 14)
* differences in awk and gawk, implementation limitations <1>: Redirection.
@@ -33460,7 +33543,7 @@ Index
(line 96)
* differences in awk and gawk, line continuations: Conditional Exp.
(line 34)
-* differences in awk and gawk, LINT variable: User-modified. (line 87)
+* differences in awk and gawk, LINT variable: User-modified. (line 90)
* differences in awk and gawk, match() function: String Functions.
(line 262)
* differences in awk and gawk, print/printf statements: Format Modifiers.
@@ -33477,7 +33560,7 @@ Index
(line 6)
* differences in awk and gawk, RS/RT variables: gawk split records.
(line 58)
-* differences in awk and gawk, RT variable: Auto-set. (line 295)
+* differences in awk and gawk, RT variable: Auto-set. (line 296)
* differences in awk and gawk, single-character fields: Single Character
Fields.
(line 6)
* differences in awk and gawk, split() function: String Functions.
@@ -33485,9 +33568,9 @@ Index
* differences in awk and gawk, strings: Scalar Constants. (line 20)
* differences in awk and gawk, strings, storing: gawk split records.
(line 76)
-* differences in awk and gawk, SYMTAB variable: Auto-set. (line 299)
+* differences in awk and gawk, SYMTAB variable: Auto-set. (line 300)
* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
- (line 152)
+ (line 155)
* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
(line 66)
* directories, command-line: Command-line directories.
@@ -33648,7 +33731,7 @@ Index
(line 6)
* extension API version: Extension Versioning.
(line 6)
-* extension API, version number: Auto-set. (line 246)
+* extension API, version number: Auto-set. (line 247)
* extension example: Extension Example. (line 6)
* extension registration: Registration Functions.
(line 6)
@@ -33699,11 +33782,11 @@ Index
(line 6)
* field separator, POSIX and: Full Line Fields. (line 16)
* field separators: Field Separators. (line 15)
-* field separators <1>: User-modified. (line 50)
-* field separators <2>: User-modified. (line 113)
+* field separators <1>: User-modified. (line 53)
+* field separators <2>: User-modified. (line 116)
* field separators, choice of: Field Separators. (line 50)
* field separators, FIELDWIDTHS variable and: User-modified. (line 37)
-* field separators, FPAT variable and: User-modified. (line 43)
+* field separators, FPAT variable and: User-modified. (line 46)
* field separators, regular expressions as: Field Separators. (line 50)
* field separators, regular expressions as <1>: Regexp Field Splitting.
(line 6)
@@ -33800,7 +33883,7 @@ Index
(line 12)
* FNR variable: Records. (line 6)
* FNR variable <1>: Auto-set. (line 118)
-* FNR variable, changing: Auto-set. (line 357)
+* FNR variable, changing: Auto-set. (line 358)
* for statement: For Statement. (line 6)
* for statement, looping over arrays: Scanning an Array. (line 20)
* fork() extension function: Extension Sample Fork.
@@ -33824,7 +33907,7 @@ Index
* forward slash (/), patterns and: Expression Patterns. (line 24)
* FPAT variable: Splitting By Content.
(line 25)
-* FPAT variable <1>: User-modified. (line 43)
+* FPAT variable <1>: User-modified. (line 46)
* frame debugger command: Execution Stack. (line 27)
* Free Documentation License (FDL): GNU Free Documentation License.
(line 8)
@@ -33834,7 +33917,7 @@ Index
* Free Software Foundation (FSF) <3>: Glossary. (line 405)
* FreeBSD: Glossary. (line 748)
* FS variable: Field Separators. (line 15)
-* FS variable <1>: User-modified. (line 50)
+* FS variable <1>: User-modified. (line 53)
* FS variable, --field-separator option and: Options. (line 21)
* FS variable, as null string: Single Character Fields.
(line 20)
@@ -33904,7 +33987,7 @@ Index
* G., Daniel Richard <1>: Maintainers. (line 14)
* Garfinkle, Scott: Contributors. (line 35)
* gawk program, dynamic profiling: Profiling. (line 177)
-* gawk version: Auto-set. (line 221)
+* gawk version: Auto-set. (line 222)
* gawk, ARGIND variable in: Other Arguments. (line 15)
* gawk, awk and: Preface. (line 21)
* gawk, awk and <1>: This Manual. (line 14)
@@ -33931,7 +34014,7 @@ Index
* gawk, extensions, disabling: Options. (line 257)
* gawk, features, adding: Adding Code. (line 6)
* gawk, features, advanced: Advanced Features. (line 6)
-* gawk, field separators and: User-modified. (line 71)
+* gawk, field separators and: User-modified. (line 74)
* gawk, FIELDWIDTHS variable in: Constant Size. (line 22)
* gawk, FIELDWIDTHS variable in <1>: User-modified. (line 37)
* gawk, file names in: Special Files. (line 6)
@@ -33939,12 +34022,12 @@ Index
* gawk, format-control characters <1>: Control Letters. (line 93)
* gawk, FPAT variable in: Splitting By Content.
(line 25)
-* gawk, FPAT variable in <1>: User-modified. (line 43)
+* gawk, FPAT variable in <1>: User-modified. (line 46)
* gawk, FUNCTAB array in: Auto-set. (line 134)
* gawk, function arguments and: Calling Built-in. (line 16)
* gawk, hexadecimal numbers and: Nondecimal-numbers. (line 41)
* gawk, IGNORECASE variable in: Case-sensitivity. (line 26)
-* gawk, IGNORECASE variable in <1>: User-modified. (line 76)
+* gawk, IGNORECASE variable in <1>: User-modified. (line 79)
* gawk, IGNORECASE variable in <2>: Array Intro. (line 100)
* gawk, IGNORECASE variable in <3>: String Functions. (line 58)
* gawk, IGNORECASE variable in <4>: Array Sorting Functions.
@@ -33962,7 +34045,7 @@ Index
(line 6)
* gawk, interval expressions and: Regexp Operators. (line 139)
* gawk, line continuation in: Conditional Exp. (line 34)
-* gawk, LINT variable in: User-modified. (line 87)
+* gawk, LINT variable in: User-modified. (line 90)
* gawk, list of contributors to: Contributors. (line 6)
* gawk, MS-Windows version of: PC Using. (line 9)
* gawk, newlines in: Statements/Lines. (line 12)
@@ -33980,13 +34063,13 @@ Index
* gawk, regular expressions, precedence: Regexp Operators. (line 161)
* gawk, RT variable in: awk split records. (line 124)
* gawk, RT variable in <1>: Multiple Line. (line 130)
-* gawk, RT variable in <2>: Auto-set. (line 295)
+* gawk, RT variable in <2>: Auto-set. (line 296)
* gawk, See Also awk: Preface. (line 34)
* gawk, source code, obtaining: Getting. (line 6)
-* gawk, splitting fields and: Constant Size. (line 86)
+* gawk, splitting fields and: Constant Size. (line 103)
* gawk, string-translation functions: I18N Functions. (line 6)
-* gawk, SYMTAB array in: Auto-set. (line 299)
-* gawk, TEXTDOMAIN variable in: User-modified. (line 152)
+* gawk, SYMTAB array in: Auto-set. (line 300)
+* gawk, TEXTDOMAIN variable in: User-modified. (line 155)
* gawk, timestamps: Time Functions. (line 6)
* gawk, uses for: Preface. (line 34)
* gawk, versions of, information about, printing: Options. (line 304)
@@ -34082,7 +34165,7 @@ Index
* Grigera, Juan: Contributors. (line 58)
* group database, reading: Group Functions. (line 6)
* group file: Group Functions. (line 6)
-* group ID of gawk user: Auto-set. (line 170)
+* group ID of gawk user: Auto-set. (line 171)
* groups, information about: Group Functions. (line 6)
* gsub: Standard Regexp Constants.
(line 43)
@@ -34122,7 +34205,7 @@ Index
* igawk.sh program: Igawk Program. (line 124)
* ignore breakpoint: Breakpoint Control. (line 87)
* ignore debugger command: Breakpoint Control. (line 87)
-* IGNORECASE variable: User-modified. (line 76)
+* IGNORECASE variable: User-modified. (line 79)
* IGNORECASE variable, and array indices: Array Intro. (line 100)
* IGNORECASE variable, and array sorting functions: Array Sorting Functions.
(line 83)
@@ -34197,7 +34280,7 @@ Index
* interacting with other programs: I/O Functions. (line 107)
* internationalization: I18N Functions. (line 6)
* internationalization <1>: I18N and L10N. (line 6)
-* internationalization, localization: User-modified. (line 152)
+* internationalization, localization: User-modified. (line 155)
* internationalization, localization <1>: Internationalization.
(line 13)
* internationalization, localization, character classes: Bracket Expressions.
@@ -34310,7 +34393,7 @@ Index
* lines, duplicate, removing: History Sorting. (line 6)
* lines, matching ranges of: Ranges. (line 6)
* lines, skipping between markers: Ranges. (line 43)
-* lint checking: User-modified. (line 87)
+* lint checking: User-modified. (line 90)
* lint checking, array elements: Delete. (line 34)
* lint checking, array subscripts: Uninitialized Subscripts.
(line 43)
@@ -34320,7 +34403,7 @@ Index
(line 343)
* lint checking, undefined functions: Pass By Value/Reference.
(line 85)
-* LINT variable: User-modified. (line 87)
+* LINT variable: User-modified. (line 90)
* Linux: Manual History. (line 28)
* Linux <1>: I18N Example. (line 57)
* Linux <2>: Glossary. (line 748)
@@ -34382,7 +34465,7 @@ Index
* mawk utility <2>: Concatenation. (line 36)
* mawk utility <3>: Nextfile Statement. (line 47)
* mawk utility <4>: Other Versions. (line 48)
-* maximum precision supported by MPFR library: Auto-set. (line 235)
+* maximum precision supported by MPFR library: Auto-set. (line 236)
* McIlroy, Doug: Glossary. (line 257)
* McPhee, Patrick: Contributors. (line 101)
* message object files: Explaining gettext. (line 42)
@@ -34395,7 +34478,7 @@ Index
* messages from extensions: Printing Messages. (line 6)
* metacharacters in regular expressions: Regexp Operators. (line 6)
* metacharacters, escape sequences for: Escape Sequences. (line 140)
-* minimum precision required by MPFR library: Auto-set. (line 238)
+* minimum precision required by MPFR library: Auto-set. (line 239)
* mktime: Time Functions. (line 25)
* modifiers, in format specifiers: Format Modifiers. (line 6)
* monetary information, localization: Explaining gettext. (line 104)
@@ -34453,7 +34536,7 @@ Index
* not Boolean-logic operator: Boolean Ops. (line 6)
* NR variable: Records. (line 6)
* NR variable <1>: Auto-set. (line 143)
-* NR variable, changing: Auto-set. (line 357)
+* NR variable, changing: Auto-set. (line 358)
* null strings: awk split records. (line 114)
* null strings <1>: Regexp Field Splitting.
(line 43)
@@ -34479,7 +34562,7 @@ Index
* numbers, converting: Strings And Numbers. (line 6)
* numbers, converting <1>: Bitwise Functions. (line 108)
* numbers, converting, to strings: User-modified. (line 30)
-* numbers, converting, to strings <1>: User-modified. (line 104)
+* numbers, converting, to strings <1>: User-modified. (line 107)
* numbers, hexadecimal: Nondecimal-numbers. (line 6)
* numbers, octal: Nondecimal-numbers. (line 6)
* numbers, rounding: Round Function. (line 6)
@@ -34493,11 +34576,11 @@ Index
* octal values, enabling interpretation of: Options. (line 209)
* OFMT variable: OFMT. (line 15)
* OFMT variable <1>: Strings And Numbers. (line 56)
-* OFMT variable <2>: User-modified. (line 104)
+* OFMT variable <2>: User-modified. (line 107)
* OFMT variable, POSIX awk and: OFMT. (line 27)
* OFS variable: Changing Fields. (line 64)
* OFS variable <1>: Output Separators. (line 6)
-* OFS variable <2>: User-modified. (line 113)
+* OFS variable <2>: User-modified. (line 116)
* OpenBSD: Glossary. (line 748)
* OpenSolaris: Other Versions. (line 100)
* operating systems, BSD-based: Manual History. (line 28)
@@ -34553,7 +34636,7 @@ Index
* ord() user-defined function: Ordinal Functions. (line 16)
* order of evaluation, concatenation: Concatenation. (line 41)
* ORS variable: Output Separators. (line 20)
-* ORS variable <1>: User-modified. (line 119)
+* ORS variable <1>: User-modified. (line 122)
* output field separator, See OFS variable: Changing Fields. (line 64)
* output record separator, See ORS variable: Output Separators.
(line 20)
@@ -34573,7 +34656,7 @@ Index
* p debugger command (alias for print): Viewing And Changing Data.
(line 35)
* Papadopoulos, Panos: Contributors. (line 129)
-* parent process ID of gawk process: Auto-set. (line 210)
+* parent process ID of gawk process: Auto-set. (line 211)
* parentheses (), in a profile: Profiling. (line 146)
* parentheses (), regexp operator: Regexp Operators. (line 81)
* password file: Passwd Functions. (line 16)
@@ -34696,7 +34779,7 @@ Index
* POSIX, gawk extensions not included in: POSIX/GNU. (line 6)
* POSIX, programs, implementing in awk: Clones. (line 6)
* POSIXLY_CORRECT environment variable: Options. (line 343)
-* PREC variable: User-modified. (line 124)
+* PREC variable: User-modified. (line 127)
* precedence: Increment Ops. (line 60)
* precedence <1>: Precedence. (line 6)
* precedence, regexp operators: Regexp Operators. (line 156)
@@ -34711,7 +34794,7 @@ Index
* print statement, commas, omitting: Print Examples. (line 30)
* print statement, I/O operators in: Precedence. (line 70)
* print statement, line continuations and: Print Examples. (line 75)
-* print statement, OFMT variable and: User-modified. (line 113)
+* print statement, OFMT variable and: User-modified. (line 116)
* print statement, See Also redirection, of output: Redirection.
(line 17)
* print statement, sprintf() function and: Round Function. (line 6)
@@ -34742,8 +34825,8 @@ Index
* printing, unduplicated lines of text: Uniq Program. (line 6)
* printing, user information: Id Program. (line 6)
* private variables: Library Names. (line 11)
-* process group ID of gawk process: Auto-set. (line 204)
-* process ID of gawk process: Auto-set. (line 207)
+* process group ID of gawk process: Auto-set. (line 205)
+* process ID of gawk process: Auto-set. (line 208)
* processes, two-way communications with: Two-way I/O. (line 6)
* processing data: Basic High Level. (line 6)
* PROCINFO array: Auto-set. (line 148)
@@ -34758,7 +34841,7 @@ Index
(line 26)
* profiling awk programs: Profiling. (line 6)
* profiling awk programs, dynamically: Profiling. (line 177)
-* program identifiers: Auto-set. (line 173)
+* program identifiers: Auto-set. (line 174)
* program, definition of: Getting Started. (line 21)
* programming conventions, --non-decimal-data option: Nondecimal Data.
(line 35)
@@ -34827,7 +34910,7 @@ Index
* reading input files: Reading Files. (line 6)
* recipe for a programming language: History. (line 6)
* record separators: awk split records. (line 6)
-* record separators <1>: User-modified. (line 133)
+* record separators <1>: User-modified. (line 136)
* record separators, changing: awk split records. (line 85)
* record separators, regular expressions as: awk split records.
(line 124)
@@ -34869,7 +34952,7 @@ Index
* regular expressions, as record separators: awk split records.
(line 124)
* regular expressions, case sensitivity: Case-sensitivity. (line 6)
-* regular expressions, case sensitivity <1>: User-modified. (line 76)
+* regular expressions, case sensitivity <1>: User-modified. (line 79)
* regular expressions, computed: Computed Regexps. (line 6)
* regular expressions, constants, See regexp constants: Regexp Usage.
(line 57)
@@ -34919,7 +35002,7 @@ Index
* right shift: Bitwise Functions. (line 54)
* right shift, bitwise: Bitwise Functions. (line 32)
* Ritchie, Dennis: Basic Data Typing. (line 54)
-* RLENGTH variable: Auto-set. (line 282)
+* RLENGTH variable: Auto-set. (line 283)
* RLENGTH variable, match() function and: String Functions. (line 227)
* Robbins, Arnold: Command Line Field Separator.
(line 71)
@@ -34940,16 +35023,16 @@ Index
* round to nearest integer: Numeric Functions. (line 24)
* round() user-defined function: Round Function. (line 16)
* rounding numbers: Round Function. (line 6)
-* ROUNDMODE variable: User-modified. (line 128)
+* ROUNDMODE variable: User-modified. (line 131)
* RS variable: awk split records. (line 12)
-* RS variable <1>: User-modified. (line 133)
+* RS variable <1>: User-modified. (line 136)
* RS variable, multiline records and: Multiple Line. (line 17)
* rshift: Bitwise Functions. (line 54)
-* RSTART variable: Auto-set. (line 288)
+* RSTART variable: Auto-set. (line 289)
* RSTART variable, match() function and: String Functions. (line 227)
* RT variable: awk split records. (line 124)
* RT variable <1>: Multiple Line. (line 130)
-* RT variable <2>: Auto-set. (line 295)
+* RT variable <2>: Auto-set. (line 296)
* Rubin, Paul: History. (line 30)
* Rubin, Paul <1>: Contributors. (line 16)
* rule, definition of: Getting Started. (line 21)
@@ -34967,7 +35050,7 @@ Index
* scanning arrays: Scanning an Array. (line 6)
* scanning multidimensional arrays: Multiscanning. (line 11)
* Schorr, Andrew: Acknowledgments. (line 60)
-* Schorr, Andrew <1>: Auto-set. (line 327)
+* Schorr, Andrew <1>: Auto-set. (line 328)
* Schorr, Andrew <2>: Contributors. (line 134)
* Schreiber, Bert: Acknowledgments. (line 38)
* Schreiber, Rita: Acknowledgments. (line 38)
@@ -34994,17 +35077,17 @@ Index
(line 19)
* semicolon (;), separating statements in actions <2>: Statements.
(line 10)
-* separators, field: User-modified. (line 50)
-* separators, field <1>: User-modified. (line 113)
+* separators, field: User-modified. (line 53)
+* separators, field <1>: User-modified. (line 116)
* separators, field, FIELDWIDTHS variable and: User-modified. (line 37)
-* separators, field, FPAT variable and: User-modified. (line 43)
+* separators, field, FPAT variable and: User-modified. (line 46)
* separators, for records: awk split records. (line 6)
* separators, for records <1>: awk split records. (line 85)
-* separators, for records <2>: User-modified. (line 133)
+* separators, for records <2>: User-modified. (line 136)
* separators, for records, regular expressions as: awk split records.
(line 124)
* separators, for statements in actions: Action Overview. (line 19)
-* separators, subscript: User-modified. (line 146)
+* separators, subscript: User-modified. (line 149)
* set breakpoint: Breakpoint Control. (line 11)
* set debugger command: Viewing And Changing Data.
(line 58)
@@ -35053,7 +35136,7 @@ Index
* sidebar, Beware The Smoke and Mirrors!: Bitwise Functions. (line 126)
* sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
(line 14)
-* sidebar, Changing NR and FNR: Auto-set. (line 355)
+* sidebar, Changing NR and FNR: Auto-set. (line 356)
* sidebar, Controlling Output Buffering with system(): I/O Functions.
(line 164)
* sidebar, Escape Sequences for Metacharacters: Escape Sequences.
@@ -35138,7 +35221,7 @@ Index
* split.awk program: Split Program. (line 30)
* sprintf: OFMT. (line 15)
* sprintf <1>: String Functions. (line 384)
-* sprintf() function, OFMT variable and: User-modified. (line 113)
+* sprintf() function, OFMT variable and: User-modified. (line 116)
* sprintf() function, print/printf statements and: Round Function.
(line 6)
* sqrt: Numeric Functions. (line 93)
@@ -35184,7 +35267,7 @@ Index
* strings, converting <1>: Bitwise Functions. (line 108)
* strings, converting letter case: String Functions. (line 523)
* strings, converting, numbers to: User-modified. (line 30)
-* strings, converting, numbers to <1>: User-modified. (line 104)
+* strings, converting, numbers to <1>: User-modified. (line 107)
* strings, empty, See null strings: awk split records. (line 114)
* strings, extracting: String Extraction. (line 6)
* strings, for localization: Programmer i18n. (line 13)
@@ -35201,7 +35284,7 @@ Index
* sub <1>: String Functions. (line 409)
* sub() function, arguments of: String Functions. (line 463)
* sub() function, escape processing: Gory Details. (line 6)
-* subscript separators: User-modified. (line 146)
+* subscript separators: User-modified. (line 149)
* subscripts in arrays, multidimensional: Multidimensional. (line 10)
* subscripts in arrays, multidimensional, scanning: Multiscanning.
(line 11)
@@ -35209,16 +35292,16 @@ Index
(line 6)
* subscripts in arrays, uninitialized variables as: Uninitialized Subscripts.
(line 6)
-* SUBSEP variable: User-modified. (line 146)
+* SUBSEP variable: User-modified. (line 149)
* SUBSEP variable, and multidimensional arrays: Multidimensional.
(line 16)
* substitute in string: String Functions. (line 89)
* substr: String Functions. (line 482)
* substring: String Functions. (line 482)
* Sumner, Andrew: Other Versions. (line 68)
-* supplementary groups of gawk process: Auto-set. (line 251)
+* supplementary groups of gawk process: Auto-set. (line 252)
* switch statement: Switch Statement. (line 6)
-* SYMTAB array: Auto-set. (line 299)
+* SYMTAB array: Auto-set. (line 300)
* syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
(line 149)
* system: I/O Functions. (line 107)
@@ -35247,7 +35330,7 @@ Index
(line 6)
* text, printing: Print. (line 22)
* text, printing, unduplicated lines of: Uniq Program. (line 6)
-* TEXTDOMAIN variable: User-modified. (line 152)
+* TEXTDOMAIN variable: User-modified. (line 155)
* TEXTDOMAIN variable <1>: Programmer i18n. (line 8)
* TEXTDOMAIN variable, BEGIN pattern and: Programmer i18n. (line 60)
* TEXTDOMAIN variable, portability and: I18N Portability. (line 20)
@@ -35400,10 +35483,10 @@ Index
* variables, uninitialized, as array subscripts: Uninitialized Subscripts.
(line 6)
* variables, user-defined: Variables. (line 6)
-* version of gawk: Auto-set. (line 221)
-* version of gawk extension API: Auto-set. (line 246)
-* version of GNU MP library: Auto-set. (line 229)
-* version of GNU MPFR library: Auto-set. (line 231)
+* version of gawk: Auto-set. (line 222)
+* version of gawk extension API: Auto-set. (line 247)
+* version of GNU MP library: Auto-set. (line 230)
+* version of GNU MPFR library: Auto-set. (line 232)
* vertical bar (|): Regexp Operators. (line 70)
* vertical bar (|), | operator (I/O): Getline/Pipe. (line 10)
* vertical bar (|), | operator (I/O) <1>: Precedence. (line 64)
@@ -35560,484 +35643,484 @@ Ref: Full Line Fields-Footnote-1228233
Ref: Full Line Fields-Footnote-2228279
Node: Field Splitting Summary228380
Node: Constant Size230454
-Node: Splitting By Content235032
-Ref: Splitting By Content-Footnote-1239003
-Node: Multiple Line239166
-Ref: Multiple Line-Footnote-1245048
-Node: Getline245227
-Node: Plain Getline247694
-Node: Getline/Variable250333
-Node: Getline/File251482
-Node: Getline/Variable/File252868
-Ref: Getline/Variable/File-Footnote-1254471
-Node: Getline/Pipe254559
-Node: Getline/Variable/Pipe257264
-Node: Getline/Coprocess258397
-Node: Getline/Variable/Coprocess259662
-Node: Getline Notes260402
-Node: Getline Summary263197
-Ref: table-getline-variants263619
-Node: Read Timeout264367
-Ref: Read Timeout-Footnote-1268273
-Node: Retrying Input268331
-Node: Command-line directories269530
-Node: Input Summary270436
-Node: Input Exercises273608
-Node: Printing274336
-Node: Print276170
-Node: Print Examples277627
-Node: Output Separators280407
-Node: OFMT282424
-Node: Printf283780
-Node: Basic Printf284565
-Node: Control Letters286139
-Node: Format Modifiers290127
-Node: Printf Examples296142
-Node: Redirection298628
-Node: Special FD305469
-Ref: Special FD-Footnote-1308637
-Node: Special Files308711
-Node: Other Inherited Files309328
-Node: Special Network310329
-Node: Special Caveats311189
-Node: Close Files And Pipes312138
-Ref: table-close-pipe-return-values319045
-Ref: Close Files And Pipes-Footnote-1319828
-Ref: Close Files And Pipes-Footnote-2319976
-Node: Nonfatal320128
-Node: Output Summary322453
-Node: Output Exercises323675
-Node: Expressions324354
-Node: Values325542
-Node: Constants326220
-Node: Scalar Constants326911
-Ref: Scalar Constants-Footnote-1327775
-Node: Nondecimal-numbers328025
-Node: Regexp Constants331026
-Node: Using Constant Regexps331552
-Node: Standard Regexp Constants332174
-Node: Strong Regexp Constants335362
-Node: Variables338320
-Node: Using Variables338977
-Node: Assignment Options340887
-Node: Conversion342760
-Node: Strings And Numbers343284
-Ref: Strings And Numbers-Footnote-1346347
-Node: Locale influences conversions346456
-Ref: table-locale-affects349214
-Node: All Operators349832
-Node: Arithmetic Ops350461
-Node: Concatenation352967
-Ref: Concatenation-Footnote-1355814
-Node: Assignment Ops355921
-Ref: table-assign-ops360912
-Node: Increment Ops362225
-Node: Truth Values and Conditions365685
-Node: Truth Values366759
-Node: Typing and Comparison367807
-Node: Variable Typing368627
-Ref: Variable Typing-Footnote-1375090
-Ref: Variable Typing-Footnote-2375162
-Node: Comparison Operators375239
-Ref: table-relational-ops375658
-Node: POSIX String Comparison379153
-Ref: POSIX String Comparison-Footnote-1380848
-Ref: POSIX String Comparison-Footnote-2380987
-Node: Boolean Ops381071
-Ref: Boolean Ops-Footnote-1385553
-Node: Conditional Exp385645
-Node: Function Calls387381
-Node: Precedence391258
-Node: Locales394917
-Node: Expressions Summary396549
-Node: Patterns and Actions399122
-Node: Pattern Overview400242
-Node: Regexp Patterns401919
-Node: Expression Patterns402461
-Node: Ranges406242
-Node: BEGIN/END409350
-Node: Using BEGIN/END410111
-Ref: Using BEGIN/END-Footnote-1412847
-Node: I/O And BEGIN/END412953
-Node: BEGINFILE/ENDFILE415267
-Node: Empty418174
-Node: Using Shell Variables418491
-Node: Action Overview420765
-Node: Statements423090
-Node: If Statement424938
-Node: While Statement426433
-Node: Do Statement428461
-Node: For Statement429609
-Node: Switch Statement432767
-Node: Break Statement435153
-Node: Continue Statement437245
-Node: Next Statement439072
-Node: Nextfile Statement441455
-Node: Exit Statement444107
-Node: Built-in Variables446510
-Node: User-modified447643
-Node: Auto-set455229
-Ref: Auto-set-Footnote-1469882
-Ref: Auto-set-Footnote-2470088
-Node: ARGC and ARGV470144
-Node: Pattern Action Summary474357
-Node: Arrays476787
-Node: Array Basics478116
-Node: Array Intro478960
-Ref: figure-array-elements480935
-Ref: Array Intro-Footnote-1483639
-Node: Reference to Elements483767
-Node: Assigning Elements486231
-Node: Array Example486722
-Node: Scanning an Array488481
-Node: Controlling Scanning491503
-Ref: Controlling Scanning-Footnote-1496902
-Node: Numeric Array Subscripts497218
-Node: Uninitialized Subscripts499402
-Node: Delete501021
-Ref: Delete-Footnote-1503773
-Node: Multidimensional503830
-Node: Multiscanning506925
-Node: Arrays of Arrays508516
-Node: Arrays Summary513283
-Node: Functions515376
-Node: Built-in516414
-Node: Calling Built-in517495
-Node: Numeric Functions519491
-Ref: Numeric Functions-Footnote-1524324
-Ref: Numeric Functions-Footnote-2524681
-Ref: Numeric Functions-Footnote-3524729
-Node: String Functions525001
-Ref: String Functions-Footnote-1548505
-Ref: String Functions-Footnote-2548633
-Ref: String Functions-Footnote-3548881
-Node: Gory Details548968
-Ref: table-sub-escapes550759
-Ref: table-sub-proposed552278
-Ref: table-posix-sub553641
-Ref: table-gensub-escapes555182
-Ref: Gory Details-Footnote-1556005
-Node: I/O Functions556159
-Ref: table-system-return-values562741
-Ref: I/O Functions-Footnote-1564721
-Ref: I/O Functions-Footnote-2564869
-Node: Time Functions564989
-Ref: Time Functions-Footnote-1575656
-Ref: Time Functions-Footnote-2575724
-Ref: Time Functions-Footnote-3575882
-Ref: Time Functions-Footnote-4575993
-Ref: Time Functions-Footnote-5576105
-Ref: Time Functions-Footnote-6576332
-Node: Bitwise Functions576598
-Ref: table-bitwise-ops577192
-Ref: Bitwise Functions-Footnote-1583225
-Ref: Bitwise Functions-Footnote-2583398
-Node: Type Functions583589
-Node: I18N Functions586264
-Node: User-defined587915
-Node: Definition Syntax588720
-Ref: Definition Syntax-Footnote-1594407
-Node: Function Example594478
-Ref: Function Example-Footnote-1597400
-Node: Function Caveats597422
-Node: Calling A Function597940
-Node: Variable Scope598898
-Node: Pass By Value/Reference601892
-Node: Return Statement605391
-Node: Dynamic Typing608370
-Node: Indirect Calls609300
-Ref: Indirect Calls-Footnote-1619551
-Node: Functions Summary619679
-Node: Library Functions622384
-Ref: Library Functions-Footnote-1625991
-Ref: Library Functions-Footnote-2626134
-Node: Library Names626305
-Ref: Library Names-Footnote-1629765
-Ref: Library Names-Footnote-2629988
-Node: General Functions630074
-Node: Strtonum Function631177
-Node: Assert Function634199
-Node: Round Function637525
-Node: Cliff Random Function639066
-Node: Ordinal Functions640082
-Ref: Ordinal Functions-Footnote-1643145
-Ref: Ordinal Functions-Footnote-2643397
-Node: Join Function643607
-Ref: Join Function-Footnote-1645377
-Node: Getlocaltime Function645577
-Node: Readfile Function649319
-Node: Shell Quoting651291
-Node: Data File Management652692
-Node: Filetrans Function653324
-Node: Rewind Function657420
-Node: File Checking659326
-Ref: File Checking-Footnote-1660660
-Node: Empty Files660861
-Node: Ignoring Assigns662840
-Node: Getopt Function664390
-Ref: Getopt Function-Footnote-1675859
-Node: Passwd Functions676059
-Ref: Passwd Functions-Footnote-1684898
-Node: Group Functions684986
-Ref: Group Functions-Footnote-1692884
-Node: Walking Arrays693091
-Node: Library Functions Summary696099
-Node: Library Exercises697505
-Node: Sample Programs697970
-Node: Running Examples698740
-Node: Clones699468
-Node: Cut Program700692
-Node: Egrep Program710621
-Ref: Egrep Program-Footnote-1718133
-Node: Id Program718243
-Node: Split Program721923
-Ref: Split Program-Footnote-1725382
-Node: Tee Program725511
-Node: Uniq Program728301
-Node: Wc Program735727
-Ref: Wc Program-Footnote-1739982
-Node: Miscellaneous Programs740076
-Node: Dupword Program741289
-Node: Alarm Program743319
-Node: Translate Program748174
-Ref: Translate Program-Footnote-1752739
-Node: Labels Program753009
-Ref: Labels Program-Footnote-1756360
-Node: Word Sorting756444
-Node: History Sorting760516
-Node: Extract Program762351
-Node: Simple Sed769880
-Node: Igawk Program772954
-Ref: Igawk Program-Footnote-1787285
-Ref: Igawk Program-Footnote-2787487
-Ref: Igawk Program-Footnote-3787609
-Node: Anagram Program787724
-Node: Signature Program790786
-Node: Programs Summary792033
-Node: Programs Exercises793247
-Ref: Programs Exercises-Footnote-1797376
-Node: Advanced Features797467
-Node: Nondecimal Data799457
-Node: Array Sorting801048
-Node: Controlling Array Traversal801748
-Ref: Controlling Array Traversal-Footnote-1810115
-Node: Array Sorting Functions810233
-Ref: Array Sorting Functions-Footnote-1815324
-Node: Two-way I/O815520
-Ref: Two-way I/O-Footnote-1822071
-Ref: Two-way I/O-Footnote-2822258
-Node: TCP/IP Networking822340
-Node: Profiling825458
-Ref: Profiling-Footnote-1834130
-Node: Advanced Features Summary834453
-Node: Internationalization836297
-Node: I18N and L10N837777
-Node: Explaining gettext838464
-Ref: Explaining gettext-Footnote-1844356
-Ref: Explaining gettext-Footnote-2844541
-Node: Programmer i18n844706
-Ref: Programmer i18n-Footnote-1849655
-Node: Translator i18n849704
-Node: String Extraction850498
-Ref: String Extraction-Footnote-1851630
-Node: Printf Ordering851716
-Ref: Printf Ordering-Footnote-1854502
-Node: I18N Portability854566
-Ref: I18N Portability-Footnote-1857022
-Node: I18N Example857085
-Ref: I18N Example-Footnote-1859891
-Node: Gawk I18N859964
-Node: I18N Summary860609
-Node: Debugger861950
-Node: Debugging862972
-Node: Debugging Concepts863413
-Node: Debugging Terms865222
-Node: Awk Debugging867797
-Node: Sample Debugging Session868703
-Node: Debugger Invocation869237
-Node: Finding The Bug870623
-Node: List of Debugger Commands877101
-Node: Breakpoint Control878434
-Node: Debugger Execution Control882128
-Node: Viewing And Changing Data885490
-Node: Execution Stack888864
-Node: Debugger Info890501
-Node: Miscellaneous Debugger Commands894572
-Node: Readline Support899660
-Node: Limitations900556
-Node: Debugging Summary902665
-Node: Arbitrary Precision Arithmetic903944
-Node: Computer Arithmetic905360
-Ref: table-numeric-ranges908951
-Ref: Computer Arithmetic-Footnote-1909673
-Node: Math Definitions909730
-Ref: table-ieee-formats913044
-Ref: Math Definitions-Footnote-1913647
-Node: MPFR features913752
-Node: FP Math Caution915469
-Ref: FP Math Caution-Footnote-1916541
-Node: Inexactness of computations916910
-Node: Inexact representation917870
-Node: Comparing FP Values919230
-Node: Errors accumulate920312
-Node: Getting Accuracy921745
-Node: Try To Round924455
-Node: Setting precision925354
-Ref: table-predefined-precision-strings926051
-Node: Setting the rounding mode927881
-Ref: table-gawk-rounding-modes928255
-Ref: Setting the rounding mode-Footnote-1931663
-Node: Arbitrary Precision Integers931842
-Ref: Arbitrary Precision Integers-Footnote-1936759
-Node: POSIX Floating Point Problems936908
-Ref: POSIX Floating Point Problems-Footnote-1940790
-Node: Floating point summary940828
-Node: Dynamic Extensions943018
-Node: Extension Intro944571
-Node: Plugin License945837
-Node: Extension Mechanism Outline946634
-Ref: figure-load-extension947073
-Ref: figure-register-new-function948638
-Ref: figure-call-new-function949730
-Node: Extension API Description951792
-Node: Extension API Functions Introduction953434
-Node: General Data Types958768
-Ref: General Data Types-Footnote-1965973
-Node: Memory Allocation Functions966272
-Ref: Memory Allocation Functions-Footnote-1969117
-Node: Constructor Functions969216
-Node: Registration Functions972215
-Node: Extension Functions972900
-Node: Exit Callback Functions978113
-Node: Extension Version String979363
-Node: Input Parsers980026
-Node: Output Wrappers989908
-Node: Two-way processors994420
-Node: Printing Messages996685
-Ref: Printing Messages-Footnote-1997856
-Node: Updating ERRNO998009
-Node: Requesting Values998748
-Ref: table-value-types-returned999485
-Node: Accessing Parameters1000421
-Node: Symbol Table Access1001656
-Node: Symbol table by name1002168
-Node: Symbol table by cookie1003957
-Ref: Symbol table by cookie-Footnote-11008142
-Node: Cached values1008206
-Ref: Cached values-Footnote-11011742
-Node: Array Manipulation1011833
-Ref: Array Manipulation-Footnote-11012924
-Node: Array Data Types1012961
-Ref: Array Data Types-Footnote-11015619
-Node: Array Functions1015711
-Node: Flattening Arrays1020110
-Node: Creating Arrays1027051
-Node: Redirection API1031820
-Node: Extension API Variables1034662
-Node: Extension Versioning1035295
-Ref: gawk-api-version1035732
-Node: Extension API Informational Variables1037460
-Node: Extension API Boilerplate1038524
-Node: Changes from API V11042386
-Node: Finding Extensions1043046
-Node: Extension Example1043605
-Node: Internal File Description1044403
-Node: Internal File Ops1048483
-Ref: Internal File Ops-Footnote-11059883
-Node: Using Internal File Ops1060023
-Ref: Using Internal File Ops-Footnote-11062406
-Node: Extension Samples1062680
-Node: Extension Sample File Functions1064209
-Node: Extension Sample Fnmatch1071858
-Node: Extension Sample Fork1073345
-Node: Extension Sample Inplace1074563
-Node: Extension Sample Ord1077773
-Node: Extension Sample Readdir1078609
-Ref: table-readdir-file-types1079498
-Node: Extension Sample Revout1080303
-Node: Extension Sample Rev2way1080892
-Node: Extension Sample Read write array1081632
-Node: Extension Sample Readfile1083574
-Node: Extension Sample Time1084669
-Node: Extension Sample API Tests1086017
-Node: gawkextlib1086509
-Node: Extension summary1088956
-Node: Extension Exercises1092658
-Node: Language History1094156
-Node: V7/SVR3.11095812
-Node: SVR41097964
-Node: POSIX1099398
-Node: BTL1100777
-Node: POSIX/GNU1101506
-Node: Feature History1107398
-Node: Common Extensions1121768
-Node: Ranges and Locales1123051
-Ref: Ranges and Locales-Footnote-11127667
-Ref: Ranges and Locales-Footnote-21127694
-Ref: Ranges and Locales-Footnote-31127929
-Node: Contributors1128150
-Node: History summary1133710
-Node: Installation1135090
-Node: Gawk Distribution1136034
-Node: Getting1136518
-Node: Extracting1137479
-Node: Distribution contents1139117
-Node: Unix Installation1145459
-Node: Quick Installation1146141
-Node: Shell Startup Files1148555
-Node: Additional Configuration Options1149644
-Node: Configuration Philosophy1151449
-Node: Non-Unix Installation1153818
-Node: PC Installation1154278
-Node: PC Binary Installation1155116
-Node: PC Compiling1155551
-Node: PC Using1156668
-Node: Cygwin1159713
-Node: MSYS1160483
-Node: VMS Installation1160984
-Node: VMS Compilation1161775
-Ref: VMS Compilation-Footnote-11163004
-Node: VMS Dynamic Extensions1163062
-Node: VMS Installation Details1164747
-Node: VMS Running1167000
-Node: VMS GNV1171279
-Node: VMS Old Gawk1172014
-Node: Bugs1172485
-Node: Bug address1173148
-Node: Usenet1175545
-Node: Maintainers1176322
-Node: Other Versions1177698
-Node: Installation summary1184282
-Node: Notes1185317
-Node: Compatibility Mode1186182
-Node: Additions1186964
-Node: Accessing The Source1187889
-Node: Adding Code1189324
-Node: New Ports1195542
-Node: Derived Files1200030
-Ref: Derived Files-Footnote-11205515
-Ref: Derived Files-Footnote-21205550
-Ref: Derived Files-Footnote-31206148
-Node: Future Extensions1206262
-Node: Implementation Limitations1206920
-Node: Extension Design1208103
-Node: Old Extension Problems1209257
-Ref: Old Extension Problems-Footnote-11210775
-Node: Extension New Mechanism Goals1210832
-Ref: Extension New Mechanism Goals-Footnote-11214196
-Node: Extension Other Design Decisions1214385
-Node: Extension Future Growth1216498
-Node: Old Extension Mechanism1217334
-Node: Notes summary1219097
-Node: Basic Concepts1220279
-Node: Basic High Level1220960
-Ref: figure-general-flow1221242
-Ref: figure-process-flow1221927
-Ref: Basic High Level-Footnote-11225228
-Node: Basic Data Typing1225413
-Node: Glossary1228741
-Node: Copying1260688
-Node: GNU Free Documentation License1298227
-Node: Index1323345
+Node: Splitting By Content235768
+Ref: Splitting By Content-Footnote-1239908
+Node: Multiple Line240071
+Ref: Multiple Line-Footnote-1245953
+Node: Getline246132
+Node: Plain Getline248599
+Node: Getline/Variable251238
+Node: Getline/File252387
+Node: Getline/Variable/File253773
+Ref: Getline/Variable/File-Footnote-1255376
+Node: Getline/Pipe255464
+Node: Getline/Variable/Pipe258169
+Node: Getline/Coprocess259302
+Node: Getline/Variable/Coprocess260567
+Node: Getline Notes261307
+Node: Getline Summary264102
+Ref: table-getline-variants264524
+Node: Read Timeout265272
+Ref: Read Timeout-Footnote-1269178
+Node: Retrying Input269236
+Node: Command-line directories270435
+Node: Input Summary271341
+Node: Input Exercises274513
+Node: Printing275241
+Node: Print277075
+Node: Print Examples278532
+Node: Output Separators281312
+Node: OFMT283329
+Node: Printf284685
+Node: Basic Printf285470
+Node: Control Letters287044
+Node: Format Modifiers291032
+Node: Printf Examples297047
+Node: Redirection299533
+Node: Special FD306374
+Ref: Special FD-Footnote-1309542
+Node: Special Files309616
+Node: Other Inherited Files310233
+Node: Special Network311234
+Node: Special Caveats312094
+Node: Close Files And Pipes313043
+Ref: table-close-pipe-return-values319950
+Ref: Close Files And Pipes-Footnote-1320733
+Ref: Close Files And Pipes-Footnote-2320881
+Node: Nonfatal321033
+Node: Output Summary323358
+Node: Output Exercises324580
+Node: Expressions325259
+Node: Values326447
+Node: Constants327125
+Node: Scalar Constants327816
+Ref: Scalar Constants-Footnote-1328680
+Node: Nondecimal-numbers328930
+Node: Regexp Constants331931
+Node: Using Constant Regexps332457
+Node: Standard Regexp Constants333079
+Node: Strong Regexp Constants336267
+Node: Variables339225
+Node: Using Variables339882
+Node: Assignment Options341792
+Node: Conversion343665
+Node: Strings And Numbers344189
+Ref: Strings And Numbers-Footnote-1347252
+Node: Locale influences conversions347361
+Ref: table-locale-affects350119
+Node: All Operators350737
+Node: Arithmetic Ops351366
+Node: Concatenation353872
+Ref: Concatenation-Footnote-1356719
+Node: Assignment Ops356826
+Ref: table-assign-ops361817
+Node: Increment Ops363130
+Node: Truth Values and Conditions366590
+Node: Truth Values367664
+Node: Typing and Comparison368712
+Node: Variable Typing369532
+Ref: Variable Typing-Footnote-1375995
+Ref: Variable Typing-Footnote-2376067
+Node: Comparison Operators376144
+Ref: table-relational-ops376563
+Node: POSIX String Comparison380058
+Ref: POSIX String Comparison-Footnote-1381753
+Ref: POSIX String Comparison-Footnote-2381892
+Node: Boolean Ops381976
+Ref: Boolean Ops-Footnote-1386458
+Node: Conditional Exp386550
+Node: Function Calls388286
+Node: Precedence392163
+Node: Locales395822
+Node: Expressions Summary397454
+Node: Patterns and Actions400027
+Node: Pattern Overview401147
+Node: Regexp Patterns402824
+Node: Expression Patterns403366
+Node: Ranges407147
+Node: BEGIN/END410255
+Node: Using BEGIN/END411016
+Ref: Using BEGIN/END-Footnote-1413752
+Node: I/O And BEGIN/END413858
+Node: BEGINFILE/ENDFILE416172
+Node: Empty419079
+Node: Using Shell Variables419396
+Node: Action Overview421670
+Node: Statements423995
+Node: If Statement425843
+Node: While Statement427338
+Node: Do Statement429366
+Node: For Statement430514
+Node: Switch Statement433672
+Node: Break Statement436058
+Node: Continue Statement438150
+Node: Next Statement439977
+Node: Nextfile Statement442360
+Node: Exit Statement445012
+Node: Built-in Variables447415
+Node: User-modified448548
+Node: Auto-set456315
+Ref: Auto-set-Footnote-1471043
+Ref: Auto-set-Footnote-2471249
+Node: ARGC and ARGV471305
+Node: Pattern Action Summary475518
+Node: Arrays477948
+Node: Array Basics479277
+Node: Array Intro480121
+Ref: figure-array-elements482096
+Ref: Array Intro-Footnote-1484800
+Node: Reference to Elements484928
+Node: Assigning Elements487392
+Node: Array Example487883
+Node: Scanning an Array489642
+Node: Controlling Scanning492664
+Ref: Controlling Scanning-Footnote-1498063
+Node: Numeric Array Subscripts498379
+Node: Uninitialized Subscripts500563
+Node: Delete502182
+Ref: Delete-Footnote-1504934
+Node: Multidimensional504991
+Node: Multiscanning508086
+Node: Arrays of Arrays509677
+Node: Arrays Summary514444
+Node: Functions516537
+Node: Built-in517575
+Node: Calling Built-in518656
+Node: Numeric Functions520652
+Ref: Numeric Functions-Footnote-1525485
+Ref: Numeric Functions-Footnote-2525842
+Ref: Numeric Functions-Footnote-3525890
+Node: String Functions526162
+Ref: String Functions-Footnote-1549666
+Ref: String Functions-Footnote-2549794
+Ref: String Functions-Footnote-3550042
+Node: Gory Details550129
+Ref: table-sub-escapes551920
+Ref: table-sub-proposed553439
+Ref: table-posix-sub554802
+Ref: table-gensub-escapes556343
+Ref: Gory Details-Footnote-1557166
+Node: I/O Functions557320
+Ref: table-system-return-values563902
+Ref: I/O Functions-Footnote-1565882
+Ref: I/O Functions-Footnote-2566030
+Node: Time Functions566150
+Ref: Time Functions-Footnote-1576817
+Ref: Time Functions-Footnote-2576885
+Ref: Time Functions-Footnote-3577043
+Ref: Time Functions-Footnote-4577154
+Ref: Time Functions-Footnote-5577266
+Ref: Time Functions-Footnote-6577493
+Node: Bitwise Functions577759
+Ref: table-bitwise-ops578353
+Ref: Bitwise Functions-Footnote-1584386
+Ref: Bitwise Functions-Footnote-2584559
+Node: Type Functions584750
+Node: I18N Functions587425
+Node: User-defined589076
+Node: Definition Syntax589881
+Ref: Definition Syntax-Footnote-1595568
+Node: Function Example595639
+Ref: Function Example-Footnote-1598561
+Node: Function Caveats598583
+Node: Calling A Function599101
+Node: Variable Scope600059
+Node: Pass By Value/Reference603053
+Node: Return Statement606552
+Node: Dynamic Typing609531
+Node: Indirect Calls610461
+Ref: Indirect Calls-Footnote-1620712
+Node: Functions Summary620840
+Node: Library Functions623545
+Ref: Library Functions-Footnote-1627152
+Ref: Library Functions-Footnote-2627295
+Node: Library Names627466
+Ref: Library Names-Footnote-1630926
+Ref: Library Names-Footnote-2631149
+Node: General Functions631235
+Node: Strtonum Function632338
+Node: Assert Function635360
+Node: Round Function638686
+Node: Cliff Random Function640227
+Node: Ordinal Functions641243
+Ref: Ordinal Functions-Footnote-1644306
+Ref: Ordinal Functions-Footnote-2644558
+Node: Join Function644768
+Ref: Join Function-Footnote-1646538
+Node: Getlocaltime Function646738
+Node: Readfile Function650480
+Node: Shell Quoting652452
+Node: Data File Management653853
+Node: Filetrans Function654485
+Node: Rewind Function658581
+Node: File Checking660487
+Ref: File Checking-Footnote-1661821
+Node: Empty Files662022
+Node: Ignoring Assigns664001
+Node: Getopt Function665551
+Ref: Getopt Function-Footnote-1677020
+Node: Passwd Functions677220
+Ref: Passwd Functions-Footnote-1686059
+Node: Group Functions686147
+Ref: Group Functions-Footnote-1694045
+Node: Walking Arrays694252
+Node: Library Functions Summary697260
+Node: Library Exercises698666
+Node: Sample Programs699131
+Node: Running Examples699901
+Node: Clones700629
+Node: Cut Program701853
+Node: Egrep Program711782
+Ref: Egrep Program-Footnote-1719294
+Node: Id Program719404
+Node: Split Program723084
+Ref: Split Program-Footnote-1726543
+Node: Tee Program726672
+Node: Uniq Program729462
+Node: Wc Program736888
+Ref: Wc Program-Footnote-1741143
+Node: Miscellaneous Programs741237
+Node: Dupword Program742450
+Node: Alarm Program744480
+Node: Translate Program749335
+Ref: Translate Program-Footnote-1753900
+Node: Labels Program754170
+Ref: Labels Program-Footnote-1757521
+Node: Word Sorting757605
+Node: History Sorting761677
+Node: Extract Program763512
+Node: Simple Sed771041
+Node: Igawk Program774115
+Ref: Igawk Program-Footnote-1788446
+Ref: Igawk Program-Footnote-2788648
+Ref: Igawk Program-Footnote-3788770
+Node: Anagram Program788885
+Node: Signature Program791947
+Node: Programs Summary793194
+Node: Programs Exercises794408
+Ref: Programs Exercises-Footnote-1798537
+Node: Advanced Features798628
+Node: Nondecimal Data800618
+Node: Array Sorting802209
+Node: Controlling Array Traversal802909
+Ref: Controlling Array Traversal-Footnote-1811276
+Node: Array Sorting Functions811394
+Ref: Array Sorting Functions-Footnote-1816485
+Node: Two-way I/O816681
+Ref: Two-way I/O-Footnote-1823232
+Ref: Two-way I/O-Footnote-2823419
+Node: TCP/IP Networking823501
+Node: Profiling826619
+Ref: Profiling-Footnote-1835291
+Node: Advanced Features Summary835614
+Node: Internationalization837458
+Node: I18N and L10N838938
+Node: Explaining gettext839625
+Ref: Explaining gettext-Footnote-1845517
+Ref: Explaining gettext-Footnote-2845702
+Node: Programmer i18n845867
+Ref: Programmer i18n-Footnote-1850816
+Node: Translator i18n850865
+Node: String Extraction851659
+Ref: String Extraction-Footnote-1852791
+Node: Printf Ordering852877
+Ref: Printf Ordering-Footnote-1855663
+Node: I18N Portability855727
+Ref: I18N Portability-Footnote-1858183
+Node: I18N Example858246
+Ref: I18N Example-Footnote-1861052
+Node: Gawk I18N861125
+Node: I18N Summary861770
+Node: Debugger863111
+Node: Debugging864133
+Node: Debugging Concepts864574
+Node: Debugging Terms866383
+Node: Awk Debugging868958
+Node: Sample Debugging Session869864
+Node: Debugger Invocation870398
+Node: Finding The Bug871784
+Node: List of Debugger Commands878262
+Node: Breakpoint Control879595
+Node: Debugger Execution Control883289
+Node: Viewing And Changing Data886651
+Node: Execution Stack890025
+Node: Debugger Info891662
+Node: Miscellaneous Debugger Commands895733
+Node: Readline Support900821
+Node: Limitations901717
+Node: Debugging Summary903826
+Node: Arbitrary Precision Arithmetic905105
+Node: Computer Arithmetic906521
+Ref: table-numeric-ranges910112
+Ref: Computer Arithmetic-Footnote-1910834
+Node: Math Definitions910891
+Ref: table-ieee-formats914205
+Ref: Math Definitions-Footnote-1914808
+Node: MPFR features914913
+Node: FP Math Caution916630
+Ref: FP Math Caution-Footnote-1917702
+Node: Inexactness of computations918071
+Node: Inexact representation919031
+Node: Comparing FP Values920391
+Node: Errors accumulate921473
+Node: Getting Accuracy922906
+Node: Try To Round925616
+Node: Setting precision926515
+Ref: table-predefined-precision-strings927212
+Node: Setting the rounding mode929042
+Ref: table-gawk-rounding-modes929416
+Ref: Setting the rounding mode-Footnote-1932824
+Node: Arbitrary Precision Integers933003
+Ref: Arbitrary Precision Integers-Footnote-1937920
+Node: POSIX Floating Point Problems938069
+Ref: POSIX Floating Point Problems-Footnote-1941951
+Node: Floating point summary941989
+Node: Dynamic Extensions944179
+Node: Extension Intro945732
+Node: Plugin License946998
+Node: Extension Mechanism Outline947795
+Ref: figure-load-extension948234
+Ref: figure-register-new-function949799
+Ref: figure-call-new-function950891
+Node: Extension API Description952953
+Node: Extension API Functions Introduction954595
+Node: General Data Types959929
+Ref: General Data Types-Footnote-1967134
+Node: Memory Allocation Functions967433
+Ref: Memory Allocation Functions-Footnote-1970278
+Node: Constructor Functions970377
+Node: Registration Functions973376
+Node: Extension Functions974061
+Node: Exit Callback Functions979274
+Node: Extension Version String980524
+Node: Input Parsers981187
+Node: Output Wrappers993921
+Node: Two-way processors998433
+Node: Printing Messages1000698
+Ref: Printing Messages-Footnote-11001869
+Node: Updating ERRNO1002022
+Node: Requesting Values1002761
+Ref: table-value-types-returned1003498
+Node: Accessing Parameters1004434
+Node: Symbol Table Access1005669
+Node: Symbol table by name1006181
+Node: Symbol table by cookie1007970
+Ref: Symbol table by cookie-Footnote-11012155
+Node: Cached values1012219
+Ref: Cached values-Footnote-11015755
+Node: Array Manipulation1015846
+Ref: Array Manipulation-Footnote-11016937
+Node: Array Data Types1016974
+Ref: Array Data Types-Footnote-11019632
+Node: Array Functions1019724
+Node: Flattening Arrays1024123
+Node: Creating Arrays1031064
+Node: Redirection API1035833
+Node: Extension API Variables1038675
+Node: Extension Versioning1039308
+Ref: gawk-api-version1039745
+Node: Extension API Informational Variables1041473
+Node: Extension API Boilerplate1042537
+Node: Changes from API V11046399
+Node: Finding Extensions1047059
+Node: Extension Example1047618
+Node: Internal File Description1048416
+Node: Internal File Ops1052496
+Ref: Internal File Ops-Footnote-11063896
+Node: Using Internal File Ops1064036
+Ref: Using Internal File Ops-Footnote-11066419
+Node: Extension Samples1066693
+Node: Extension Sample File Functions1068222
+Node: Extension Sample Fnmatch1075871
+Node: Extension Sample Fork1077358
+Node: Extension Sample Inplace1078576
+Node: Extension Sample Ord1081786
+Node: Extension Sample Readdir1082622
+Ref: table-readdir-file-types1083511
+Node: Extension Sample Revout1084316
+Node: Extension Sample Rev2way1084905
+Node: Extension Sample Read write array1085645
+Node: Extension Sample Readfile1087587
+Node: Extension Sample Time1088682
+Node: Extension Sample API Tests1090030
+Node: gawkextlib1090522
+Node: Extension summary1092969
+Node: Extension Exercises1096671
+Node: Language History1098169
+Node: V7/SVR3.11099825
+Node: SVR41101977
+Node: POSIX1103411
+Node: BTL1104790
+Node: POSIX/GNU1105519
+Node: Feature History1111411
+Node: Common Extensions1125781
+Node: Ranges and Locales1127064
+Ref: Ranges and Locales-Footnote-11131680
+Ref: Ranges and Locales-Footnote-21131707
+Ref: Ranges and Locales-Footnote-31131942
+Node: Contributors1132163
+Node: History summary1137723
+Node: Installation1139103
+Node: Gawk Distribution1140047
+Node: Getting1140531
+Node: Extracting1141492
+Node: Distribution contents1143130
+Node: Unix Installation1149472
+Node: Quick Installation1150154
+Node: Shell Startup Files1152568
+Node: Additional Configuration Options1153657
+Node: Configuration Philosophy1155462
+Node: Non-Unix Installation1157831
+Node: PC Installation1158291
+Node: PC Binary Installation1159129
+Node: PC Compiling1159564
+Node: PC Using1160681
+Node: Cygwin1163726
+Node: MSYS1164496
+Node: VMS Installation1164997
+Node: VMS Compilation1165788
+Ref: VMS Compilation-Footnote-11167017
+Node: VMS Dynamic Extensions1167075
+Node: VMS Installation Details1168760
+Node: VMS Running1171013
+Node: VMS GNV1175292
+Node: VMS Old Gawk1176027
+Node: Bugs1176498
+Node: Bug address1177161
+Node: Usenet1179558
+Node: Maintainers1180335
+Node: Other Versions1181711
+Node: Installation summary1188295
+Node: Notes1189330
+Node: Compatibility Mode1190195
+Node: Additions1190977
+Node: Accessing The Source1191902
+Node: Adding Code1193337
+Node: New Ports1199555
+Node: Derived Files1204043
+Ref: Derived Files-Footnote-11209528
+Ref: Derived Files-Footnote-21209563
+Ref: Derived Files-Footnote-31210161
+Node: Future Extensions1210275
+Node: Implementation Limitations1210933
+Node: Extension Design1212116
+Node: Old Extension Problems1213270
+Ref: Old Extension Problems-Footnote-11214788
+Node: Extension New Mechanism Goals1214845
+Ref: Extension New Mechanism Goals-Footnote-11218209
+Node: Extension Other Design Decisions1218398
+Node: Extension Future Growth1220511
+Node: Old Extension Mechanism1221347
+Node: Notes summary1223110
+Node: Basic Concepts1224292
+Node: Basic High Level1224973
+Ref: figure-general-flow1225255
+Ref: figure-process-flow1225940
+Ref: Basic High Level-Footnote-11229241
+Node: Basic Data Typing1229426
+Node: Glossary1232754
+Node: Copying1264701
+Node: GNU Free Documentation License1302240
+Node: Index1327358
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 658ac17..f2d1751 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -7761,6 +7761,9 @@ variable @code{FIELDWIDTHS}. Each number specifies the
width of the field,
@emph{including} columns between fields. If you want to ignore the columns
between fields, you can specify the width as a separate field that is
subsequently ignored.
+Or, starting in @value{PVERSION} 4.2, each field width may optionally be
+preceded by a colon-separated value specifying the number of characters to skip
+before the field starts.
It is a fatal error to supply a field width that has a negative value.
The following data is the output of the Unix @command{w} utility. It is useful
to illustrate the use of @code{FIELDWIDTHS}:
@@ -7820,6 +7823,24 @@ brent ttyp0 286
dave ttyq4 1296000
@end example
+Starting in @value{PVERSION} 4.2, this program could be rewritten to
+specify @code{FIELDWIDTHS} like so:
address@hidden
+BEGIN @{ FIELDWIDTHS = "8 1:5 4:7 6 1:6 1:6 2:33" @}
address@hidden example
+This strips away some of the white space separating the fields. With such
+a change, the program would produce the following results:
+
address@hidden
+hzang ttyV3 50
+eklye ttyV5 0
+dportein ttyV6 107
+gierd ttyD3 1
+dave ttyD4 0
+brent ttyp0 286
+dave ttyq4 1296000
address@hidden example
+
Another (possibly more practical) example of fixed-width input data
is the input from a deck of balloting cards. In some parts of
the United States, voters mark their choices by punching holes in computer
@@ -7845,8 +7866,10 @@ if (PROCINFO["FS"] == "FS")
@var{regular field splitting} @dots{}
else if (PROCINFO["FS"] == "FIELDWIDTHS")
@var{fixed-width field splitting} @dots{}
-else
+else if (PROCINFO["FS"] == "FPAT")
@var{content-based field splitting} @dots{} @ii{(see next @value{SECTION})}
+else
+ @var{API input parser field splitting} @dots{} @ii{(@pxref{Input Parsers})}
@end example
This information is useful when writing a function
@@ -7986,7 +8009,9 @@ To recap, @command{gawk} provides three independent
methods
to split input records into fields.
The mechanism used is based on which of the three
address@hidden, @code{FIELDWIDTHS}, or @code{FPAT}---was
-last assigned to.
+last assigned to. In addition, an API input parser may choose to
+override the record parsing mechanism; please refer to @pxref{Input Parsers}
+for further information about this feature.
@node Multiple Line
@section Multiple-Line Records
@@ -14972,6 +14997,9 @@ Its default value is @code{"%.6g"}.
@item FIELDWIDTHS #
A space-separated list of columns that tells @command{gawk}
how to split input with fixed columnar boundaries.
+Starting in @value{PVERSION} 4.2, each field width may optionally be
+preceded by a colon-separated value specifying the number of characters to skip
+before the field starts.
Assigning a value to @code{FIELDWIDTHS}
overrides the use of @code{FS} and @code{FPAT} for field splitting.
@xref{Constant Size} for more information.
@@ -15366,7 +15394,8 @@ The value of the @code{geteuid()} system call.
This is
@code{"FS"} if field splitting with @code{FS} is in effect,
@code{"FIELDWIDTHS"} if field splitting with @code{FIELDWIDTHS} is in effect,
-or @code{"FPAT"} if field matching with @code{FPAT} is in effect.
address@hidden"FPAT"} if field matching with @code{FPAT} is in effect,
+or @code{"API"} if field splitting is controlled by an API input parser.
@item PROCINFO["gid"]
@cindex group ID of @command{gawk} user
@@ -33165,7 +33194,8 @@ typedef struct awk_input @{
#define INVALID_HANDLE (-1)
void *opaque; /* private data for input parsers */
int (*get_record)(char **out, struct awk_input *iobuf,
- int *errcode, char **rt_start, size_t *rt_len);
+ int *errcode, char **rt_start, size_t *rt_len,
+ const awk_fieldwidth_info_t **field_width);
ssize_t (*read_func)();
void (*close_func)(struct awk_input *iobuf);
struct stat sbuf; /* stat buf */
@@ -33217,7 +33247,8 @@ is not required to use this pointer.
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ struct@ awk_input *iobuf,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ int *errcode,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ char **rt_start,
address@hidden @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t *rt_len);
address@hidden @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t *rt_len,
address@hidden @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_fieldwidth_info_t
**field_width);
This function pointer should point to a function that creates the input
records. Said function is the core of the input parser. Its behavior
is described in the text following this list.
@@ -33269,6 +33300,21 @@ If the concept of a ``record terminator'' makes sense,
then
data. Otherwise, @code{*rt_len} should be set to zero.
@command{gawk} makes its own copy of this data, so the
extension must manage this storage.
+
address@hidden const awk_fieldwidth_info_t **field_width
+If @code{field_width} is not @code{NULL}, then @code{*field_width} will be
initialized
+to @code{NULL}, and the function may set it to point to a structure
+supplying field width information to override the default
+field parsing mechanism. Note that this structure will not
+be copied by @command{gawk}; it must persist at least until the next call
+to @code{get_record} or @code{close_func}. Note also that @code{field_width}
will
+be @code{NULL} when @code{getline} is assigning the results to a variable, thus
+field parsing is not needed. If the parser does set @code{*field_width},
+then @command{gawk} will use this layout to parse the input record,
+and the @code{PROCINFO["FS"]} value will be @code{"API"} while this record
+is active in @code{$0}.
+The @code{awk_fieldwidth_info_t} data structure
+is described below.
@end table
The return value is the length of the buffer pointed to by
@@ -33327,6 +33373,50 @@ Register the input parser pointed to by
@code{input_parser} with
@command{gawk}.
@end table
+If you would like to override the default field parsing mechanism for a given
+record, then you must populate the @code{awk_fieldwidth_info_t} structure,
+which looks like this:
+
address@hidden
+typedef struct @{
+ awk_bool_t use_chars; /* false ==> use bytes */
+ size_t nf; /* number of fields in record (NF) */
+ struct awk_field_info @{
+ size_t skip; /* amount to skip before field starts */
+ size_t len; /* length of field */
+ @} fields[1]; /* actual dimension should be nf */
address@hidden awk_fieldwidth_info_t;
address@hidden example
+
+The fields are:
+
address@hidden @code
address@hidden awk_bool_t use_chars;
+Set this to @code{awk_true} if the field lengths are specified in terms
+of potentially multi-byte characters, and set it to @code{awk_false} if
+the lengths are in terms of bytes.
+Performance will be better if the values are supplied in
+terms of bytes.
+
address@hidden size_t nf;
+Set this to the number of fields in the input record, i.e. @code{NF}.
+
address@hidden struct awk_field_info fields[nf];
+This is a variable-length array whose actual dimension should be @code{nf}.
+For each field, the @code{skip} element should be set to the number
+of characters or bytes, as controlled by the @code{use_chars} flag,
+to skip before the start of this field. And the @code{len} element provides
+the length of the field. The values in @code{fields[0]} provide the information
+for the @code{$1} field, and so on through the @code{fields[nf-1]} element
containing the information for @code{$NF}.
address@hidden table
+
+A convenience macro @code{awk_fieldwidth_info_size(NF)} is provided to
+calculate the appropriate size of a variable-length
address@hidden structure containing @code{NF} fields. This can
+be used as an argument to @code{malloc} or in a union to allocate space
+statically. Please refer to the sample extension @code{readdir_test} for an
+example.
+
@node Output Wrappers
@subsubsection Customized Output Wrappers
@cindex customized output wrapper
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index d8e9654..78a2823 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -7361,6 +7361,9 @@ variable @code{FIELDWIDTHS}. Each number specifies the
width of the field,
@emph{including} columns between fields. If you want to ignore the columns
between fields, you can specify the width as a separate field that is
subsequently ignored.
+Or, starting in @value{PVERSION} 4.2, each field width may optionally be
+preceded by a colon-separated value specifying the number of characters to skip
+before the field starts.
It is a fatal error to supply a field width that has a negative value.
The following data is the output of the Unix @command{w} utility. It is useful
to illustrate the use of @code{FIELDWIDTHS}:
@@ -7420,6 +7423,24 @@ brent ttyp0 286
dave ttyq4 1296000
@end example
+Starting in @value{PVERSION} 4.2, this program could be rewritten to
+specify @code{FIELDWIDTHS} like so:
address@hidden
+BEGIN @{ FIELDWIDTHS = "8 1:5 4:7 6 1:6 1:6 2:33" @}
address@hidden example
+This strips away some of the white space separating the fields. With such
+a change, the program would produce the following results:
+
address@hidden
+hzang ttyV3 50
+eklye ttyV5 0
+dportein ttyV6 107
+gierd ttyD3 1
+dave ttyD4 0
+brent ttyp0 286
+dave ttyq4 1296000
address@hidden example
+
Another (possibly more practical) example of fixed-width input data
is the input from a deck of balloting cards. In some parts of
the United States, voters mark their choices by punching holes in computer
@@ -7445,8 +7466,10 @@ if (PROCINFO["FS"] == "FS")
@var{regular field splitting} @dots{}
else if (PROCINFO["FS"] == "FIELDWIDTHS")
@var{fixed-width field splitting} @dots{}
-else
+else if (PROCINFO["FS"] == "FPAT")
@var{content-based field splitting} @dots{} @ii{(see next @value{SECTION})}
+else
+ @var{API input parser field splitting} @dots{} @ii{(@pxref{Input Parsers})}
@end example
This information is useful when writing a function
@@ -7586,7 +7609,9 @@ To recap, @command{gawk} provides three independent
methods
to split input records into fields.
The mechanism used is based on which of the three
address@hidden, @code{FIELDWIDTHS}, or @code{FPAT}---was
-last assigned to.
+last assigned to. In addition, an API input parser may choose to
+override the record parsing mechanism; please refer to @pxref{Input Parsers}
+for further information about this feature.
@node Multiple Line
@section Multiple-Line Records
@@ -14291,6 +14316,9 @@ Its default value is @code{"%.6g"}.
@item FIELDWIDTHS #
A space-separated list of columns that tells @command{gawk}
how to split input with fixed columnar boundaries.
+Starting in @value{PVERSION} 4.2, each field width may optionally be
+preceded by a colon-separated value specifying the number of characters to skip
+before the field starts.
Assigning a value to @code{FIELDWIDTHS}
overrides the use of @code{FS} and @code{FPAT} for field splitting.
@xref{Constant Size} for more information.
@@ -14685,7 +14713,8 @@ The value of the @code{geteuid()} system call.
This is
@code{"FS"} if field splitting with @code{FS} is in effect,
@code{"FIELDWIDTHS"} if field splitting with @code{FIELDWIDTHS} is in effect,
-or @code{"FPAT"} if field matching with @code{FPAT} is in effect.
address@hidden"FPAT"} if field matching with @code{FPAT} is in effect,
+or @code{"API"} if field splitting is controlled by an API input parser.
@item PROCINFO["gid"]
@cindex group ID of @command{gawk} user
@@ -32179,7 +32208,8 @@ typedef struct awk_input @{
#define INVALID_HANDLE (-1)
void *opaque; /* private data for input parsers */
int (*get_record)(char **out, struct awk_input *iobuf,
- int *errcode, char **rt_start, size_t *rt_len);
+ int *errcode, char **rt_start, size_t *rt_len,
+ const awk_fieldwidth_info_t **field_width);
ssize_t (*read_func)();
void (*close_func)(struct awk_input *iobuf);
struct stat sbuf; /* stat buf */
@@ -32231,7 +32261,8 @@ is not required to use this pointer.
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ struct@ awk_input *iobuf,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ int *errcode,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ char **rt_start,
address@hidden @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t *rt_len);
address@hidden @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t *rt_len,
address@hidden @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_fieldwidth_info_t
**field_width);
This function pointer should point to a function that creates the input
records. Said function is the core of the input parser. Its behavior
is described in the text following this list.
@@ -32283,6 +32314,21 @@ If the concept of a ``record terminator'' makes sense,
then
data. Otherwise, @code{*rt_len} should be set to zero.
@command{gawk} makes its own copy of this data, so the
extension must manage this storage.
+
address@hidden const awk_fieldwidth_info_t **field_width
+If @code{field_width} is not @code{NULL}, then @code{*field_width} will be
initialized
+to @code{NULL}, and the function may set it to point to a structure
+supplying field width information to override the default
+field parsing mechanism. Note that this structure will not
+be copied by @command{gawk}; it must persist at least until the next call
+to @code{get_record} or @code{close_func}. Note also that @code{field_width}
will
+be @code{NULL} when @code{getline} is assigning the results to a variable, thus
+field parsing is not needed. If the parser does set @code{*field_width},
+then @command{gawk} will use this layout to parse the input record,
+and the @code{PROCINFO["FS"]} value will be @code{"API"} while this record
+is active in @code{$0}.
+The @code{awk_fieldwidth_info_t} data structure
+is described below.
@end table
The return value is the length of the buffer pointed to by
@@ -32341,6 +32387,50 @@ Register the input parser pointed to by
@code{input_parser} with
@command{gawk}.
@end table
+If you would like to override the default field parsing mechanism for a given
+record, then you must populate the @code{awk_fieldwidth_info_t} structure,
+which looks like this:
+
address@hidden
+typedef struct @{
+ awk_bool_t use_chars; /* false ==> use bytes */
+ size_t nf; /* number of fields in record (NF) */
+ struct awk_field_info @{
+ size_t skip; /* amount to skip before field starts */
+ size_t len; /* length of field */
+ @} fields[1]; /* actual dimension should be nf */
address@hidden awk_fieldwidth_info_t;
address@hidden example
+
+The fields are:
+
address@hidden @code
address@hidden awk_bool_t use_chars;
+Set this to @code{awk_true} if the field lengths are specified in terms
+of potentially multi-byte characters, and set it to @code{awk_false} if
+the lengths are in terms of bytes.
+Performance will be better if the values are supplied in
+terms of bytes.
+
address@hidden size_t nf;
+Set this to the number of fields in the input record, i.e. @code{NF}.
+
address@hidden struct awk_field_info fields[nf];
+This is a variable-length array whose actual dimension should be @code{nf}.
+For each field, the @code{skip} element should be set to the number
+of characters or bytes, as controlled by the @code{use_chars} flag,
+to skip before the start of this field. And the @code{len} element provides
+the length of the field. The values in @code{fields[0]} provide the information
+for the @code{$1} field, and so on through the @code{fields[nf-1]} element
containing the information for @code{$NF}.
address@hidden table
+
+A convenience macro @code{awk_fieldwidth_info_size(NF)} is provided to
+calculate the appropriate size of a variable-length
address@hidden structure containing @code{NF} fields. This can
+be used as an argument to @code{malloc} or in a union to allocate space
+statically. Please refer to the sample extension @code{readdir_test} for an
+example.
+
@node Output Wrappers
@subsubsection Customized Output Wrappers
@cindex customized output wrapper
-----------------------------------------------------------------------
Summary of changes:
doc/ChangeLog | 7 +
doc/gawk.info | 1201 +++++++++++++++++++++++++++++--------------------------
doc/gawk.texi | 100 ++++-
doc/gawktexi.in | 100 ++++-
4 files changed, 839 insertions(+), 569 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gawk-diffs] [SCM] gawk branch, feature/api-parser, updated. gawk-4.1.0-2489-g7f6772a,
Andrew J. Schorr <=