[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gawk-diffs] [SCM] gawk branch, non-fatal-io, updated. gawk-4.1.0-1084-g
From: |
Arnold Robbins |
Subject: |
[gawk-diffs] [SCM] gawk branch, non-fatal-io, updated. gawk-4.1.0-1084-g4f07d2d |
Date: |
Tue, 03 Feb 2015 19:17:09 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".
The branch, non-fatal-io has been updated
via 4f07d2dc9f8a07e0ad22a5a6f2a0226d6c44ebc6 (commit)
via e6de21fd260437430ff11dfdea3312603bec6d76 (commit)
via 6b63c37981ec6e0fc29d83f396acaa473172083f (commit)
via 6a4160dab42fb7e952b0b91a99eedd4bb6bb1d67 (commit)
via 4903b6de82f1ac1318b86fe27e71fea17bbaa9fc (commit)
via ec0a8d6c8ed3855b440aeb90b92088115212fb78 (commit)
via 545cc9691e3d6479053684815d23e6553a7d0a95 (commit)
via bcb51623b8e156b03c2ae588906e4ed25fa3eba2 (commit)
via 86cd3e2cb5117c5800997d3bb363b6d5470be3ce (commit)
via 1bd1b885c7dd16b5e4ab78c040312f6f7d742784 (commit)
via 2fc1e9855f7983fb75a7f72d3ec97eec467e4709 (commit)
via 5153d0f04b7ad460b23ae5a011061f7b93a122ef (commit)
via 2f80bf28898274324a07d0b0d7c0e955f591c0df (commit)
via 62fe40d1944810a79c13bd519a5f1157c49cefb6 (commit)
via 2b9f0aae3eab5715283e843c66e4f02b221493f1 (commit)
via 762f30020bfa5e333345adc25d34da84918faa96 (commit)
via d50e21276ee34fb8044586beb6ab9e85cc169d80 (commit)
via 547b160b254cc6501578c69ea38228ca2d829c49 (commit)
via e7df7131092924b2d4ef1f41bac3d03affa9485b (commit)
via b334ca8db1959020a9e35865c78ce81b829b48a9 (commit)
via 2443fb7afd788395e1c6baf067299f42317df21b (commit)
via d8e04682a95d856c0b7c97e5c965ea50bd9ac76b (commit)
via 00c2e96c7b391c7bc33373397006d7ba2e211113 (commit)
via eccbbe18b119f60bcb4e33259f43f6f3cc0d2581 (commit)
via 48f9d87c455f0804424977e2a2185de94bc2b0a3 (commit)
via a2ffcdbb5896779fc28a8d7ec770b87e516bd941 (commit)
via 65f80a8ce75f050e30a400ff5eee3c08366bb518 (commit)
via 27522378506a1102a77a15d6db3b6682003f0c99 (commit)
via 552f2007b31c1df1694e19e1b07fb8a62fd2d816 (commit)
via 6f220759af1c8e37f56acd334a295daa8c4a2651 (commit)
via 902fcb22d611b7f9e99369ecab223c00c877b82c (commit)
via 8e0e08c84626633e1d4b7b431576d4ec7d8f10c4 (commit)
via 1b2704c322317629cef59d247e45b3dba3c21992 (commit)
from 9f80b1de4a057571c16f4b9b73f8f46dbbdc6a3f (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=4f07d2dc9f8a07e0ad22a5a6f2a0226d6c44ebc6
commit 4f07d2dc9f8a07e0ad22a5a6f2a0226d6c44ebc6
Author: Arnold D. Robbins <address@hidden>
Date: Tue Feb 3 21:16:40 2015 +0200
Simplify the feature.
diff --git a/ChangeLog b/ChangeLog
index 5808ef8..b00211f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2015-02-03 Arnold D. Robbins <address@hidden>
+
+ Interim changes, moving to check upon failure.
+
+ * awk.h (RED_NON_FATAL): Remove.
+ (init_proc_array, non_fatal_io): Add decls.
+ (is_non_fatal_std): Remove decl.
+ * builtin.c (efwrite): If non-fatal, update ERRNO.
+ (do_print_rec): Move check for errflg up.
+ * io.c (non_fatal_io): New variable.
+ (redflags2str): Remove table entry for RED_NON_FATAL.
+ (redirect): Simplify the logic.
+ (is_non_fatal_std): Remove.
+ * main.c (load_procinfo): Call init_proc_array.
+ * str_array.c (proc_store, proc_remove, proc_clear): New functions
+ that set/clear non_fatal_io variable.
+ (proc_array_func): New vtable.
+ (init_proc_array): New function.
+
2015-02-01 Arnold D. Robbins <address@hidden>
Move POSIX requirement for disallowing paramater names with the
diff --git a/NEWS b/NEWS
index b1c7803..98bc090 100644
--- a/NEWS
+++ b/NEWS
@@ -44,6 +44,9 @@ Changes from 4.1.x to 4.2.0
system, these files belong in /etc/profile.d, but the appropriate location
may be different on other platforms.
+11. If PROCINFO["nonfatal"] exists, output with print/printf sets ERRNO
+ upon failure, instead of exiting.
+
Changes from 4.1.1 to 4.1.2
---------------------------
diff --git a/awk.h b/awk.h
index 0f0605f..9cab6ca 100644
--- a/awk.h
+++ b/awk.h
@@ -918,7 +918,6 @@ struct redirect {
# define RED_PTY 512
# define RED_SOCKET 1024
# define RED_TCP 2048
-# define RED_NON_FATAL 4096
char *value;
FILE *ifp; /* input fp, needed for PIPES_SIMULATED */
IOBUF *iop;
@@ -1318,6 +1317,7 @@ extern NODE *do_asort(int nargs);
extern NODE *do_asorti(int nargs);
extern unsigned long (*hash)(const char *s, size_t len, unsigned long hsize,
size_t *code);
extern void init_env_array(NODE *env_node);
+extern void init_proc_array(NODE *proc_node);
/* awkgram.c */
extern NODE *variable(int location, char *name, NODETYPE type);
extern int parse_program(INSTRUCTION **pcode);
@@ -1495,7 +1495,7 @@ extern NODE *do_getline(int intovar, IOBUF *iop);
extern struct redirect *getredirect(const char *str, int len);
extern bool inrec(IOBUF *iop, int *errcode);
extern int nextfile(IOBUF **curfile, bool skipping);
-extern bool is_non_fatal_std(FILE *fp);
+extern bool non_fatal_io;
/* main.c */
extern int arg_assign(char *arg, bool initing);
extern int is_std_var(const char *var);
diff --git a/builtin.c b/builtin.c
index da11f0a..6ad3603 100644
--- a/builtin.c
+++ b/builtin.c
@@ -129,15 +129,15 @@ wrerror:
if (fp == stdout && errno == EPIPE)
gawk_exit(EXIT_FATAL);
-
- /* otherwise die verbosely */
- if ( (rp != NULL && (rp->flag & RED_NON_FATAL) != 0)
- || is_non_fatal_std(fp)) {
+ /* if non-fatal, update ERRNO and be done */
+ if (non_fatal_io) {
update_ERRNO_int(errno);
- } else
+ } else {
+ /* otherwise die verbosely */
fatal(_("%s to \"%s\" failed (%s)"), from,
rp ? rp->value : _("standard output"),
errno ? strerror(errno) : _("reason unknown"));
+ }
}
/* do_exp --- exponential function */
@@ -2175,17 +2175,17 @@ do_print_rec(int nargs, int redirtype)
} else
fp = output_fp;
+ if (errflg) {
+ update_ERRNO_int(errflg);
+ return;
+ }
+
if (fp == NULL)
return;
if (! field0_valid)
(void) get_field(0L, NULL); /* rebuild record */
- if (errflg) {
- update_ERRNO_int(errflg);
- return;
- }
-
f0 = fields_arr[0];
if (do_lint && (f0->flags & NULL_FIELD) != 0)
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 542fb8c..00dd95d 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,8 @@
+2015-02-03 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: Document that it's now just PROCINFO["nonfatal"].
+ * gawk.1: Documment PROCINFO["nonfatal"].
+
2015-02-02 Arnold D. Robbins <address@hidden>
* gawktexi.in: O'Reilly fixes.
diff --git a/doc/gawk.1 b/doc/gawk.1
index 3d5d181..fa50e2a 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -13,7 +13,7 @@
. if \w'\(rq' .ds rq "\(rq
. \}
.\}
-.TH GAWK 1 "Aug 03 2014" "Free Software Foundation" "Utility Commands"
+.TH GAWK 1 "Feb 03 2015" "Free Software Foundation" "Utility Commands"
.SH NAME
gawk \- pattern scanning and processing language
.SH SYNOPSIS
@@ -1258,6 +1258,15 @@ This entry is not present if loading dynamic extensions
is not available.
\fBPROCINFO["version"]\fP
the version of
.IR gawk .
+.TP
+\fBPROCINFO["nonfatal"]\fP
+If this element exists, outut with
+.B print
+and
+.B printf
+set
+.B ERRNO
+upon failure, instead of exiting.
.RE
.TP
.B ROUNDMODE
diff --git a/doc/gawk.info b/doc/gawk.info
index 56f1b0e..ae8c044 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -7222,20 +7222,13 @@ error.
`gawk' makes it possible to detect that an error has occurred,
allowing you to possibly recover from the error, or at least print an
-error message of your choosing before exiting. You can do this in one
-of two ways:
-
- * For all output files, by assigning any value to
- `PROCINFO["nonfatal"]'.
-
- * On a per-file basis, by assigning any value to `PROCINFO[FILENAME,
- "nonfatal"]'. Here, FILENAME is the name of the file to which you
- wish output to be nonfatal.
+error message of your choosing before exiting. You can do this by
+assigning any value to `PROCINFO["nonfatal"]'.
Once you have enabled nonfatal output, you must check `ERRNO' after
-every relevant `print' or `printf' statement to see if something went
-wrong. It is also a good idea to initialize `ERRNO' to zero before
-attempting the output. For example:
+every `print' or `printf' statement to see if something went wrong. It
+is also a good idea to initialize `ERRNO' to zero before attempting the
+output. For example:
$ gawk '
> BEGIN {
@@ -7253,9 +7246,6 @@ attempting the output. For example:
program code detect the problem and handle it.
This mechanism works also for standard output and standard error.
-For standard output, you may use `PROCINFO["-", "nonfatal"]' or
-`PROCINFO["/dev/stdout", "nonfatal"]'. For standard error, use
-`PROCINFO["/dev/stderr", "nonfatal"]'.
File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev:
Nonfatal, Up: Printing
@@ -34852,427 +34842,427 @@ Node: Close Files And Pipes308141
Ref: Close Files And Pipes-Footnote-1315326
Ref: Close Files And Pipes-Footnote-2315474
Node: Nonfatal315624
-Node: Output Summary317547
-Node: Output Exercises318768
-Node: Expressions319448
-Node: Values320637
-Node: Constants321314
-Node: Scalar Constants322005
-Ref: Scalar Constants-Footnote-1322867
-Node: Nondecimal-numbers323117
-Node: Regexp Constants326127
-Node: Using Constant Regexps326653
-Node: Variables329816
-Node: Using Variables330473
-Node: Assignment Options332384
-Node: Conversion334259
-Node: Strings And Numbers334783
-Ref: Strings And Numbers-Footnote-1337848
-Node: Locale influences conversions337957
-Ref: table-locale-affects340703
-Node: All Operators341295
-Node: Arithmetic Ops341924
-Node: Concatenation344429
-Ref: Concatenation-Footnote-1347248
-Node: Assignment Ops347355
-Ref: table-assign-ops352334
-Node: Increment Ops353644
-Node: Truth Values and Conditions357075
-Node: Truth Values358158
-Node: Typing and Comparison359207
-Node: Variable Typing360023
-Node: Comparison Operators363690
-Ref: table-relational-ops364100
-Node: POSIX String Comparison367595
-Ref: POSIX String Comparison-Footnote-1368667
-Node: Boolean Ops368806
-Ref: Boolean Ops-Footnote-1373284
-Node: Conditional Exp373375
-Node: Function Calls375113
-Node: Precedence378993
-Node: Locales382653
-Node: Expressions Summary384285
-Node: Patterns and Actions386856
-Node: Pattern Overview387976
-Node: Regexp Patterns389655
-Node: Expression Patterns390198
-Node: Ranges393907
-Node: BEGIN/END397014
-Node: Using BEGIN/END397775
-Ref: Using BEGIN/END-Footnote-1400511
-Node: I/O And BEGIN/END400617
-Node: BEGINFILE/ENDFILE402932
-Node: Empty405829
-Node: Using Shell Variables406146
-Node: Action Overview408419
-Node: Statements410745
-Node: If Statement412593
-Node: While Statement414088
-Node: Do Statement416116
-Node: For Statement417264
-Node: Switch Statement420422
-Node: Break Statement422804
-Node: Continue Statement424845
-Node: Next Statement426672
-Node: Nextfile Statement429053
-Node: Exit Statement431681
-Node: Built-in Variables434092
-Node: User-modified435225
-Ref: User-modified-Footnote-1442928
-Node: Auto-set442990
-Ref: Auto-set-Footnote-1456699
-Ref: Auto-set-Footnote-2456904
-Node: ARGC and ARGV456960
-Node: Pattern Action Summary461178
-Node: Arrays463611
-Node: Array Basics464940
-Node: Array Intro465784
-Ref: figure-array-elements467718
-Ref: Array Intro-Footnote-1470338
-Node: Reference to Elements470466
-Node: Assigning Elements472928
-Node: Array Example473419
-Node: Scanning an Array475178
-Node: Controlling Scanning478198
-Ref: Controlling Scanning-Footnote-1483592
-Node: Numeric Array Subscripts483908
-Node: Uninitialized Subscripts486093
-Node: Delete487710
-Ref: Delete-Footnote-1490459
-Node: Multidimensional490516
-Node: Multiscanning493613
-Node: Arrays of Arrays495202
-Node: Arrays Summary499956
-Node: Functions502047
-Node: Built-in503086
-Node: Calling Built-in504164
-Node: Numeric Functions506159
-Ref: Numeric Functions-Footnote-1510977
-Ref: Numeric Functions-Footnote-2511334
-Ref: Numeric Functions-Footnote-3511382
-Node: String Functions511654
-Ref: String Functions-Footnote-1535155
-Ref: String Functions-Footnote-2535284
-Ref: String Functions-Footnote-3535532
-Node: Gory Details535619
-Ref: table-sub-escapes537400
-Ref: table-sub-proposed538915
-Ref: table-posix-sub540277
-Ref: table-gensub-escapes541814
-Ref: Gory Details-Footnote-1542647
-Node: I/O Functions542798
-Ref: I/O Functions-Footnote-1550034
-Node: Time Functions550181
-Ref: Time Functions-Footnote-1560690
-Ref: Time Functions-Footnote-2560758
-Ref: Time Functions-Footnote-3560916
-Ref: Time Functions-Footnote-4561027
-Ref: Time Functions-Footnote-5561139
-Ref: Time Functions-Footnote-6561366
-Node: Bitwise Functions561632
-Ref: table-bitwise-ops562194
-Ref: Bitwise Functions-Footnote-1566522
-Node: Type Functions566694
-Node: I18N Functions567846
-Node: User-defined569493
-Node: Definition Syntax570298
-Ref: Definition Syntax-Footnote-1575957
-Node: Function Example576028
-Ref: Function Example-Footnote-1578949
-Node: Function Caveats578971
-Node: Calling A Function579489
-Node: Variable Scope580447
-Node: Pass By Value/Reference583440
-Node: Return Statement586937
-Node: Dynamic Typing589916
-Node: Indirect Calls590845
-Ref: Indirect Calls-Footnote-1602151
-Node: Functions Summary602279
-Node: Library Functions604981
-Ref: Library Functions-Footnote-1608589
-Ref: Library Functions-Footnote-2608732
-Node: Library Names608903
-Ref: Library Names-Footnote-1612361
-Ref: Library Names-Footnote-2612584
-Node: General Functions612670
-Node: Strtonum Function613773
-Node: Assert Function616795
-Node: Round Function620119
-Node: Cliff Random Function621660
-Node: Ordinal Functions622676
-Ref: Ordinal Functions-Footnote-1625739
-Ref: Ordinal Functions-Footnote-2625991
-Node: Join Function626202
-Ref: Join Function-Footnote-1627972
-Node: Getlocaltime Function628172
-Node: Readfile Function631916
-Node: Shell Quoting633888
-Node: Data File Management635289
-Node: Filetrans Function635921
-Node: Rewind Function640017
-Node: File Checking641403
-Ref: File Checking-Footnote-1642736
-Node: Empty Files642937
-Node: Ignoring Assigns644916
-Node: Getopt Function646466
-Ref: Getopt Function-Footnote-1657930
-Node: Passwd Functions658130
-Ref: Passwd Functions-Footnote-1666970
-Node: Group Functions667058
-Ref: Group Functions-Footnote-1674955
-Node: Walking Arrays675160
-Node: Library Functions Summary676760
-Node: Library Exercises678164
-Node: Sample Programs679444
-Node: Running Examples680214
-Node: Clones680942
-Node: Cut Program682166
-Node: Egrep Program691885
-Ref: Egrep Program-Footnote-1699383
-Node: Id Program699493
-Node: Split Program703138
-Ref: Split Program-Footnote-1706586
-Node: Tee Program706714
-Node: Uniq Program709503
-Node: Wc Program716922
-Ref: Wc Program-Footnote-1721172
-Node: Miscellaneous Programs721266
-Node: Dupword Program722479
-Node: Alarm Program724510
-Node: Translate Program729314
-Ref: Translate Program-Footnote-1733879
-Node: Labels Program734149
-Ref: Labels Program-Footnote-1737500
-Node: Word Sorting737584
-Node: History Sorting741655
-Node: Extract Program743491
-Node: Simple Sed751016
-Node: Igawk Program754084
-Ref: Igawk Program-Footnote-1768408
-Ref: Igawk Program-Footnote-2768609
-Ref: Igawk Program-Footnote-3768731
-Node: Anagram Program768846
-Node: Signature Program771903
-Node: Programs Summary773150
-Node: Programs Exercises774343
-Ref: Programs Exercises-Footnote-1778474
-Node: Advanced Features778565
-Node: Nondecimal Data780513
-Node: Array Sorting782103
-Node: Controlling Array Traversal782800
-Ref: Controlling Array Traversal-Footnote-1791133
-Node: Array Sorting Functions791251
-Ref: Array Sorting Functions-Footnote-1795140
-Node: Two-way I/O795336
-Ref: Two-way I/O-Footnote-1800281
-Ref: Two-way I/O-Footnote-2800467
-Node: TCP/IP Networking800549
-Node: Profiling803422
-Node: Advanced Features Summary811699
-Node: Internationalization813632
-Node: I18N and L10N815112
-Node: Explaining gettext815798
-Ref: Explaining gettext-Footnote-1820823
-Ref: Explaining gettext-Footnote-2821007
-Node: Programmer i18n821172
-Ref: Programmer i18n-Footnote-1826038
-Node: Translator i18n826087
-Node: String Extraction826881
-Ref: String Extraction-Footnote-1828012
-Node: Printf Ordering828098
-Ref: Printf Ordering-Footnote-1830884
-Node: I18N Portability830948
-Ref: I18N Portability-Footnote-1833403
-Node: I18N Example833466
-Ref: I18N Example-Footnote-1836269
-Node: Gawk I18N836341
-Node: I18N Summary836979
-Node: Debugger838318
-Node: Debugging839340
-Node: Debugging Concepts839781
-Node: Debugging Terms841634
-Node: Awk Debugging844206
-Node: Sample Debugging Session845100
-Node: Debugger Invocation845620
-Node: Finding The Bug847004
-Node: List of Debugger Commands853479
-Node: Breakpoint Control854812
-Node: Debugger Execution Control858508
-Node: Viewing And Changing Data861872
-Node: Execution Stack865250
-Node: Debugger Info866887
-Node: Miscellaneous Debugger Commands870904
-Node: Readline Support875933
-Node: Limitations876825
-Node: Debugging Summary878939
-Node: Arbitrary Precision Arithmetic880107
-Node: Computer Arithmetic881523
-Ref: table-numeric-ranges885121
-Ref: Computer Arithmetic-Footnote-1885980
-Node: Math Definitions886037
-Ref: table-ieee-formats889325
-Ref: Math Definitions-Footnote-1889929
-Node: MPFR features890034
-Node: FP Math Caution891705
-Ref: FP Math Caution-Footnote-1892755
-Node: Inexactness of computations893124
-Node: Inexact representation894083
-Node: Comparing FP Values895440
-Node: Errors accumulate896522
-Node: Getting Accuracy897955
-Node: Try To Round900617
-Node: Setting precision901516
-Ref: table-predefined-precision-strings902200
-Node: Setting the rounding mode903989
-Ref: table-gawk-rounding-modes904353
-Ref: Setting the rounding mode-Footnote-1907808
-Node: Arbitrary Precision Integers907987
-Ref: Arbitrary Precision Integers-Footnote-1912887
-Node: POSIX Floating Point Problems913036
-Ref: POSIX Floating Point Problems-Footnote-1916909
-Node: Floating point summary916947
-Node: Dynamic Extensions919141
-Node: Extension Intro920693
-Node: Plugin License921959
-Node: Extension Mechanism Outline922756
-Ref: figure-load-extension923184
-Ref: figure-register-new-function924664
-Ref: figure-call-new-function925668
-Node: Extension API Description927654
-Node: Extension API Functions Introduction929104
-Node: General Data Types933928
-Ref: General Data Types-Footnote-1939667
-Node: Memory Allocation Functions939966
-Ref: Memory Allocation Functions-Footnote-1942805
-Node: Constructor Functions942901
-Node: Registration Functions944635
-Node: Extension Functions945320
-Node: Exit Callback Functions947617
-Node: Extension Version String948865
-Node: Input Parsers949530
-Node: Output Wrappers959409
-Node: Two-way processors963924
-Node: Printing Messages966128
-Ref: Printing Messages-Footnote-1967204
-Node: Updating `ERRNO'967356
-Node: Requesting Values968096
-Ref: table-value-types-returned968824
-Node: Accessing Parameters969781
-Node: Symbol Table Access971012
-Node: Symbol table by name971526
-Node: Symbol table by cookie973507
-Ref: Symbol table by cookie-Footnote-1977651
-Node: Cached values977714
-Ref: Cached values-Footnote-1981213
-Node: Array Manipulation981304
-Ref: Array Manipulation-Footnote-1982402
-Node: Array Data Types982439
-Ref: Array Data Types-Footnote-1985094
-Node: Array Functions985186
-Node: Flattening Arrays989040
-Node: Creating Arrays995932
-Node: Extension API Variables1000703
-Node: Extension Versioning1001339
-Node: Extension API Informational Variables1003240
-Node: Extension API Boilerplate1004305
-Node: Finding Extensions1008114
-Node: Extension Example1008674
-Node: Internal File Description1009446
-Node: Internal File Ops1013513
-Ref: Internal File Ops-Footnote-11025183
-Node: Using Internal File Ops1025323
-Ref: Using Internal File Ops-Footnote-11027706
-Node: Extension Samples1027979
-Node: Extension Sample File Functions1029505
-Node: Extension Sample Fnmatch1037143
-Node: Extension Sample Fork1038634
-Node: Extension Sample Inplace1039849
-Node: Extension Sample Ord1041524
-Node: Extension Sample Readdir1042360
-Ref: table-readdir-file-types1043236
-Node: Extension Sample Revout1044047
-Node: Extension Sample Rev2way1044637
-Node: Extension Sample Read write array1045377
-Node: Extension Sample Readfile1047317
-Node: Extension Sample Time1048412
-Node: Extension Sample API Tests1049761
-Node: gawkextlib1050252
-Node: Extension summary1052910
-Node: Extension Exercises1056599
-Node: Language History1057321
-Node: V7/SVR3.11058977
-Node: SVR41061158
-Node: POSIX1062603
-Node: BTL1063992
-Node: POSIX/GNU1064726
-Node: Feature History1070607
-Node: Common Extensions1084401
-Node: Ranges and Locales1085725
-Ref: Ranges and Locales-Footnote-11090343
-Ref: Ranges and Locales-Footnote-21090370
-Ref: Ranges and Locales-Footnote-31090604
-Node: Contributors1090825
-Node: History summary1096366
-Node: Installation1097736
-Node: Gawk Distribution1098682
-Node: Getting1099166
-Node: Extracting1099989
-Node: Distribution contents1101624
-Node: Unix Installation1107689
-Node: Quick Installation1108372
-Node: Shell Startup Files1110783
-Node: Additional Configuration Options1111862
-Node: Configuration Philosophy1113601
-Node: Non-Unix Installation1115970
-Node: PC Installation1116428
-Node: PC Binary Installation1117747
-Node: PC Compiling1119595
-Ref: PC Compiling-Footnote-11122616
-Node: PC Testing1122725
-Node: PC Using1123901
-Node: Cygwin1128016
-Node: MSYS1128839
-Node: VMS Installation1129339
-Node: VMS Compilation1130131
-Ref: VMS Compilation-Footnote-11131353
-Node: VMS Dynamic Extensions1131411
-Node: VMS Installation Details1133095
-Node: VMS Running1135347
-Node: VMS GNV1138183
-Node: VMS Old Gawk1138917
-Node: Bugs1139387
-Node: Other Versions1143270
-Node: Installation summary1149694
-Node: Notes1150750
-Node: Compatibility Mode1151615
-Node: Additions1152397
-Node: Accessing The Source1153322
-Node: Adding Code1154757
-Node: New Ports1160914
-Node: Derived Files1165396
-Ref: Derived Files-Footnote-11170871
-Ref: Derived Files-Footnote-21170905
-Ref: Derived Files-Footnote-31171501
-Node: Future Extensions1171615
-Node: Implementation Limitations1172221
-Node: Extension Design1173469
-Node: Old Extension Problems1174623
-Ref: Old Extension Problems-Footnote-11176140
-Node: Extension New Mechanism Goals1176197
-Ref: Extension New Mechanism Goals-Footnote-11179557
-Node: Extension Other Design Decisions1179746
-Node: Extension Future Growth1181854
-Node: Old Extension Mechanism1182690
-Node: Notes summary1184452
-Node: Basic Concepts1185638
-Node: Basic High Level1186319
-Ref: figure-general-flow1186591
-Ref: figure-process-flow1187190
-Ref: Basic High Level-Footnote-11190419
-Node: Basic Data Typing1190604
-Node: Glossary1193932
-Node: Copying1225861
-Node: GNU Free Documentation License1263417
-Node: Index1288553
+Node: Output Summary317140
+Node: Output Exercises318361
+Node: Expressions319041
+Node: Values320230
+Node: Constants320907
+Node: Scalar Constants321598
+Ref: Scalar Constants-Footnote-1322460
+Node: Nondecimal-numbers322710
+Node: Regexp Constants325720
+Node: Using Constant Regexps326246
+Node: Variables329409
+Node: Using Variables330066
+Node: Assignment Options331977
+Node: Conversion333852
+Node: Strings And Numbers334376
+Ref: Strings And Numbers-Footnote-1337441
+Node: Locale influences conversions337550
+Ref: table-locale-affects340296
+Node: All Operators340888
+Node: Arithmetic Ops341517
+Node: Concatenation344022
+Ref: Concatenation-Footnote-1346841
+Node: Assignment Ops346948
+Ref: table-assign-ops351927
+Node: Increment Ops353237
+Node: Truth Values and Conditions356668
+Node: Truth Values357751
+Node: Typing and Comparison358800
+Node: Variable Typing359616
+Node: Comparison Operators363283
+Ref: table-relational-ops363693
+Node: POSIX String Comparison367188
+Ref: POSIX String Comparison-Footnote-1368260
+Node: Boolean Ops368399
+Ref: Boolean Ops-Footnote-1372877
+Node: Conditional Exp372968
+Node: Function Calls374706
+Node: Precedence378586
+Node: Locales382246
+Node: Expressions Summary383878
+Node: Patterns and Actions386449
+Node: Pattern Overview387569
+Node: Regexp Patterns389248
+Node: Expression Patterns389791
+Node: Ranges393500
+Node: BEGIN/END396607
+Node: Using BEGIN/END397368
+Ref: Using BEGIN/END-Footnote-1400104
+Node: I/O And BEGIN/END400210
+Node: BEGINFILE/ENDFILE402525
+Node: Empty405422
+Node: Using Shell Variables405739
+Node: Action Overview408012
+Node: Statements410338
+Node: If Statement412186
+Node: While Statement413681
+Node: Do Statement415709
+Node: For Statement416857
+Node: Switch Statement420015
+Node: Break Statement422397
+Node: Continue Statement424438
+Node: Next Statement426265
+Node: Nextfile Statement428646
+Node: Exit Statement431274
+Node: Built-in Variables433685
+Node: User-modified434818
+Ref: User-modified-Footnote-1442521
+Node: Auto-set442583
+Ref: Auto-set-Footnote-1456292
+Ref: Auto-set-Footnote-2456497
+Node: ARGC and ARGV456553
+Node: Pattern Action Summary460771
+Node: Arrays463204
+Node: Array Basics464533
+Node: Array Intro465377
+Ref: figure-array-elements467311
+Ref: Array Intro-Footnote-1469931
+Node: Reference to Elements470059
+Node: Assigning Elements472521
+Node: Array Example473012
+Node: Scanning an Array474771
+Node: Controlling Scanning477791
+Ref: Controlling Scanning-Footnote-1483185
+Node: Numeric Array Subscripts483501
+Node: Uninitialized Subscripts485686
+Node: Delete487303
+Ref: Delete-Footnote-1490052
+Node: Multidimensional490109
+Node: Multiscanning493206
+Node: Arrays of Arrays494795
+Node: Arrays Summary499549
+Node: Functions501640
+Node: Built-in502679
+Node: Calling Built-in503757
+Node: Numeric Functions505752
+Ref: Numeric Functions-Footnote-1510570
+Ref: Numeric Functions-Footnote-2510927
+Ref: Numeric Functions-Footnote-3510975
+Node: String Functions511247
+Ref: String Functions-Footnote-1534748
+Ref: String Functions-Footnote-2534877
+Ref: String Functions-Footnote-3535125
+Node: Gory Details535212
+Ref: table-sub-escapes536993
+Ref: table-sub-proposed538508
+Ref: table-posix-sub539870
+Ref: table-gensub-escapes541407
+Ref: Gory Details-Footnote-1542240
+Node: I/O Functions542391
+Ref: I/O Functions-Footnote-1549627
+Node: Time Functions549774
+Ref: Time Functions-Footnote-1560283
+Ref: Time Functions-Footnote-2560351
+Ref: Time Functions-Footnote-3560509
+Ref: Time Functions-Footnote-4560620
+Ref: Time Functions-Footnote-5560732
+Ref: Time Functions-Footnote-6560959
+Node: Bitwise Functions561225
+Ref: table-bitwise-ops561787
+Ref: Bitwise Functions-Footnote-1566115
+Node: Type Functions566287
+Node: I18N Functions567439
+Node: User-defined569086
+Node: Definition Syntax569891
+Ref: Definition Syntax-Footnote-1575550
+Node: Function Example575621
+Ref: Function Example-Footnote-1578542
+Node: Function Caveats578564
+Node: Calling A Function579082
+Node: Variable Scope580040
+Node: Pass By Value/Reference583033
+Node: Return Statement586530
+Node: Dynamic Typing589509
+Node: Indirect Calls590438
+Ref: Indirect Calls-Footnote-1601744
+Node: Functions Summary601872
+Node: Library Functions604574
+Ref: Library Functions-Footnote-1608182
+Ref: Library Functions-Footnote-2608325
+Node: Library Names608496
+Ref: Library Names-Footnote-1611954
+Ref: Library Names-Footnote-2612177
+Node: General Functions612263
+Node: Strtonum Function613366
+Node: Assert Function616388
+Node: Round Function619712
+Node: Cliff Random Function621253
+Node: Ordinal Functions622269
+Ref: Ordinal Functions-Footnote-1625332
+Ref: Ordinal Functions-Footnote-2625584
+Node: Join Function625795
+Ref: Join Function-Footnote-1627565
+Node: Getlocaltime Function627765
+Node: Readfile Function631509
+Node: Shell Quoting633481
+Node: Data File Management634882
+Node: Filetrans Function635514
+Node: Rewind Function639610
+Node: File Checking640996
+Ref: File Checking-Footnote-1642329
+Node: Empty Files642530
+Node: Ignoring Assigns644509
+Node: Getopt Function646059
+Ref: Getopt Function-Footnote-1657523
+Node: Passwd Functions657723
+Ref: Passwd Functions-Footnote-1666563
+Node: Group Functions666651
+Ref: Group Functions-Footnote-1674548
+Node: Walking Arrays674753
+Node: Library Functions Summary676353
+Node: Library Exercises677757
+Node: Sample Programs679037
+Node: Running Examples679807
+Node: Clones680535
+Node: Cut Program681759
+Node: Egrep Program691478
+Ref: Egrep Program-Footnote-1698976
+Node: Id Program699086
+Node: Split Program702731
+Ref: Split Program-Footnote-1706179
+Node: Tee Program706307
+Node: Uniq Program709096
+Node: Wc Program716515
+Ref: Wc Program-Footnote-1720765
+Node: Miscellaneous Programs720859
+Node: Dupword Program722072
+Node: Alarm Program724103
+Node: Translate Program728907
+Ref: Translate Program-Footnote-1733472
+Node: Labels Program733742
+Ref: Labels Program-Footnote-1737093
+Node: Word Sorting737177
+Node: History Sorting741248
+Node: Extract Program743084
+Node: Simple Sed750609
+Node: Igawk Program753677
+Ref: Igawk Program-Footnote-1768001
+Ref: Igawk Program-Footnote-2768202
+Ref: Igawk Program-Footnote-3768324
+Node: Anagram Program768439
+Node: Signature Program771496
+Node: Programs Summary772743
+Node: Programs Exercises773936
+Ref: Programs Exercises-Footnote-1778067
+Node: Advanced Features778158
+Node: Nondecimal Data780106
+Node: Array Sorting781696
+Node: Controlling Array Traversal782393
+Ref: Controlling Array Traversal-Footnote-1790726
+Node: Array Sorting Functions790844
+Ref: Array Sorting Functions-Footnote-1794733
+Node: Two-way I/O794929
+Ref: Two-way I/O-Footnote-1799874
+Ref: Two-way I/O-Footnote-2800060
+Node: TCP/IP Networking800142
+Node: Profiling803015
+Node: Advanced Features Summary811292
+Node: Internationalization813225
+Node: I18N and L10N814705
+Node: Explaining gettext815391
+Ref: Explaining gettext-Footnote-1820416
+Ref: Explaining gettext-Footnote-2820600
+Node: Programmer i18n820765
+Ref: Programmer i18n-Footnote-1825631
+Node: Translator i18n825680
+Node: String Extraction826474
+Ref: String Extraction-Footnote-1827605
+Node: Printf Ordering827691
+Ref: Printf Ordering-Footnote-1830477
+Node: I18N Portability830541
+Ref: I18N Portability-Footnote-1832996
+Node: I18N Example833059
+Ref: I18N Example-Footnote-1835862
+Node: Gawk I18N835934
+Node: I18N Summary836572
+Node: Debugger837911
+Node: Debugging838933
+Node: Debugging Concepts839374
+Node: Debugging Terms841227
+Node: Awk Debugging843799
+Node: Sample Debugging Session844693
+Node: Debugger Invocation845213
+Node: Finding The Bug846597
+Node: List of Debugger Commands853072
+Node: Breakpoint Control854405
+Node: Debugger Execution Control858101
+Node: Viewing And Changing Data861465
+Node: Execution Stack864843
+Node: Debugger Info866480
+Node: Miscellaneous Debugger Commands870497
+Node: Readline Support875526
+Node: Limitations876418
+Node: Debugging Summary878532
+Node: Arbitrary Precision Arithmetic879700
+Node: Computer Arithmetic881116
+Ref: table-numeric-ranges884714
+Ref: Computer Arithmetic-Footnote-1885573
+Node: Math Definitions885630
+Ref: table-ieee-formats888918
+Ref: Math Definitions-Footnote-1889522
+Node: MPFR features889627
+Node: FP Math Caution891298
+Ref: FP Math Caution-Footnote-1892348
+Node: Inexactness of computations892717
+Node: Inexact representation893676
+Node: Comparing FP Values895033
+Node: Errors accumulate896115
+Node: Getting Accuracy897548
+Node: Try To Round900210
+Node: Setting precision901109
+Ref: table-predefined-precision-strings901793
+Node: Setting the rounding mode903582
+Ref: table-gawk-rounding-modes903946
+Ref: Setting the rounding mode-Footnote-1907401
+Node: Arbitrary Precision Integers907580
+Ref: Arbitrary Precision Integers-Footnote-1912480
+Node: POSIX Floating Point Problems912629
+Ref: POSIX Floating Point Problems-Footnote-1916502
+Node: Floating point summary916540
+Node: Dynamic Extensions918734
+Node: Extension Intro920286
+Node: Plugin License921552
+Node: Extension Mechanism Outline922349
+Ref: figure-load-extension922777
+Ref: figure-register-new-function924257
+Ref: figure-call-new-function925261
+Node: Extension API Description927247
+Node: Extension API Functions Introduction928697
+Node: General Data Types933521
+Ref: General Data Types-Footnote-1939260
+Node: Memory Allocation Functions939559
+Ref: Memory Allocation Functions-Footnote-1942398
+Node: Constructor Functions942494
+Node: Registration Functions944228
+Node: Extension Functions944913
+Node: Exit Callback Functions947210
+Node: Extension Version String948458
+Node: Input Parsers949123
+Node: Output Wrappers959002
+Node: Two-way processors963517
+Node: Printing Messages965721
+Ref: Printing Messages-Footnote-1966797
+Node: Updating `ERRNO'966949
+Node: Requesting Values967689
+Ref: table-value-types-returned968417
+Node: Accessing Parameters969374
+Node: Symbol Table Access970605
+Node: Symbol table by name971119
+Node: Symbol table by cookie973100
+Ref: Symbol table by cookie-Footnote-1977244
+Node: Cached values977307
+Ref: Cached values-Footnote-1980806
+Node: Array Manipulation980897
+Ref: Array Manipulation-Footnote-1981995
+Node: Array Data Types982032
+Ref: Array Data Types-Footnote-1984687
+Node: Array Functions984779
+Node: Flattening Arrays988633
+Node: Creating Arrays995525
+Node: Extension API Variables1000296
+Node: Extension Versioning1000932
+Node: Extension API Informational Variables1002833
+Node: Extension API Boilerplate1003898
+Node: Finding Extensions1007707
+Node: Extension Example1008267
+Node: Internal File Description1009039
+Node: Internal File Ops1013106
+Ref: Internal File Ops-Footnote-11024776
+Node: Using Internal File Ops1024916
+Ref: Using Internal File Ops-Footnote-11027299
+Node: Extension Samples1027572
+Node: Extension Sample File Functions1029098
+Node: Extension Sample Fnmatch1036736
+Node: Extension Sample Fork1038227
+Node: Extension Sample Inplace1039442
+Node: Extension Sample Ord1041117
+Node: Extension Sample Readdir1041953
+Ref: table-readdir-file-types1042829
+Node: Extension Sample Revout1043640
+Node: Extension Sample Rev2way1044230
+Node: Extension Sample Read write array1044970
+Node: Extension Sample Readfile1046910
+Node: Extension Sample Time1048005
+Node: Extension Sample API Tests1049354
+Node: gawkextlib1049845
+Node: Extension summary1052503
+Node: Extension Exercises1056192
+Node: Language History1056914
+Node: V7/SVR3.11058570
+Node: SVR41060751
+Node: POSIX1062196
+Node: BTL1063585
+Node: POSIX/GNU1064319
+Node: Feature History1070200
+Node: Common Extensions1083994
+Node: Ranges and Locales1085318
+Ref: Ranges and Locales-Footnote-11089936
+Ref: Ranges and Locales-Footnote-21089963
+Ref: Ranges and Locales-Footnote-31090197
+Node: Contributors1090418
+Node: History summary1095959
+Node: Installation1097329
+Node: Gawk Distribution1098275
+Node: Getting1098759
+Node: Extracting1099582
+Node: Distribution contents1101217
+Node: Unix Installation1107282
+Node: Quick Installation1107965
+Node: Shell Startup Files1110376
+Node: Additional Configuration Options1111455
+Node: Configuration Philosophy1113194
+Node: Non-Unix Installation1115563
+Node: PC Installation1116021
+Node: PC Binary Installation1117340
+Node: PC Compiling1119188
+Ref: PC Compiling-Footnote-11122209
+Node: PC Testing1122318
+Node: PC Using1123494
+Node: Cygwin1127609
+Node: MSYS1128432
+Node: VMS Installation1128932
+Node: VMS Compilation1129724
+Ref: VMS Compilation-Footnote-11130946
+Node: VMS Dynamic Extensions1131004
+Node: VMS Installation Details1132688
+Node: VMS Running1134940
+Node: VMS GNV1137776
+Node: VMS Old Gawk1138510
+Node: Bugs1138980
+Node: Other Versions1142863
+Node: Installation summary1149287
+Node: Notes1150343
+Node: Compatibility Mode1151208
+Node: Additions1151990
+Node: Accessing The Source1152915
+Node: Adding Code1154350
+Node: New Ports1160507
+Node: Derived Files1164989
+Ref: Derived Files-Footnote-11170464
+Ref: Derived Files-Footnote-21170498
+Ref: Derived Files-Footnote-31171094
+Node: Future Extensions1171208
+Node: Implementation Limitations1171814
+Node: Extension Design1173062
+Node: Old Extension Problems1174216
+Ref: Old Extension Problems-Footnote-11175733
+Node: Extension New Mechanism Goals1175790
+Ref: Extension New Mechanism Goals-Footnote-11179150
+Node: Extension Other Design Decisions1179339
+Node: Extension Future Growth1181447
+Node: Old Extension Mechanism1182283
+Node: Notes summary1184045
+Node: Basic Concepts1185231
+Node: Basic High Level1185912
+Ref: figure-general-flow1186184
+Ref: figure-process-flow1186783
+Ref: Basic High Level-Footnote-11190012
+Node: Basic Data Typing1190197
+Node: Glossary1193525
+Node: Copying1225454
+Node: GNU Free Documentation License1263010
+Node: Index1288146
End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index d61772e..a30cf2d 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -10453,21 +10453,10 @@ $ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file"
@}'}
@command{gawk} makes it possible to detect that an error has
occurred, allowing you to possibly recover from the error, or
at least print an error message of your choosing before exiting.
-You can do this in one of two ways:
-
address@hidden @bullet
address@hidden
-For all output files, by assigning any value to @code{PROCINFO["nonfatal"]}.
-
address@hidden
-On a per-file basis, by assigning any value to
address@hidden@var{filename}, "nonfatal"]}.
-Here, @var{filename} is the name of the file to which
-you wish output to be nonfatal.
address@hidden itemize
+You can do this by assigning any value to @code{PROCINFO["nonfatal"]}.
Once you have enabled nonfatal output, you must check @code{ERRNO}
-after every relevant @code{print} or @code{printf} statement to
+after every @code{print} or @code{printf} statement to
see if something went wrong. It is also a good idea to initialize
@code{ERRNO} to zero before attempting the output. For example:
@@ -10489,9 +10478,6 @@ Here, @command{gawk} did not produce a fatal error;
instead
it let the @command{awk} program code detect the problem and handle it.
This mechanism works also for standard output and standard error.
-For standard output, you may use @code{PROCINFO["-", "nonfatal"]}
-or @code{PROCINFO["/dev/stdout", "nonfatal"]}. For standard error, use
address@hidden"/dev/stderr", "nonfatal"]}.
@node Output Summary
@section Summary
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 98e749d..154bdc9 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -9949,21 +9949,10 @@ $ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
@command{gawk} makes it possible to detect that an error has
occurred, allowing you to possibly recover from the error, or
at least print an error message of your choosing before exiting.
-You can do this in one of two ways:
-
address@hidden @bullet
address@hidden
-For all output files, by assigning any value to @code{PROCINFO["nonfatal"]}.
-
address@hidden
-On a per-file basis, by assigning any value to
address@hidden@var{filename}, "nonfatal"]}.
-Here, @var{filename} is the name of the file to which
-you wish output to be nonfatal.
address@hidden itemize
+You can do this by assigning any value to @code{PROCINFO["nonfatal"]}.
Once you have enabled nonfatal output, you must check @code{ERRNO}
-after every relevant @code{print} or @code{printf} statement to
+after every @code{print} or @code{printf} statement to
see if something went wrong. It is also a good idea to initialize
@code{ERRNO} to zero before attempting the output. For example:
@@ -9985,9 +9974,6 @@ Here, @command{gawk} did not produce a fatal error;
instead
it let the @command{awk} program code detect the problem and handle it.
This mechanism works also for standard output and standard error.
-For standard output, you may use @code{PROCINFO["-", "nonfatal"]}
-or @code{PROCINFO["/dev/stdout", "nonfatal"]}. For standard error, use
address@hidden"/dev/stderr", "nonfatal"]}.
@node Output Summary
@section Summary
diff --git a/io.c b/io.c
index b3819c0..cf5e867 100644
--- a/io.c
+++ b/io.c
@@ -208,6 +208,8 @@
#define INCREMENT_REC(X) X++
#endif
+bool non_fatal_io = false;
+
typedef enum { CLOSE_ALL, CLOSE_TO, CLOSE_FROM } two_way_close_type;
/* Several macros to make the code a bit clearer. */
@@ -718,7 +720,6 @@ redflags2str(int flags)
{ RED_PTY, "RED_PTY" },
{ RED_SOCKET, "RED_SOCKET" },
{ RED_TCP, "RED_TCP" },
- { RED_NON_FATAL, "RED_NON_FATAL" },
{ 0, NULL }
};
@@ -745,9 +746,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
static struct redirect *save_rp = NULL; /* hold onto rp that should
* be freed for reuse
*/
- bool is_output = false;
- bool is_non_fatal = false;
-
if (do_sandbox)
fatal(_("redirection not allowed in sandbox mode"));
@@ -756,7 +754,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
tflag = RED_APPEND;
/* FALL THROUGH */
case redirect_output:
- is_output = true;
outflag = (RED_FILE|RED_WRITE);
tflag |= outflag;
if (redirtype == redirect_output)
@@ -765,7 +762,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
what = ">>";
break;
case redirect_pipe:
- is_output = true;
tflag = (RED_PIPE|RED_WRITE);
what = "|";
break;
@@ -778,7 +774,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
what = "<";
break;
case redirect_twoway:
- is_output = true;
tflag = (RED_READ|RED_WRITE|RED_TWOWAY);
what = "|&";
break;
@@ -800,14 +795,6 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
lintwarn(_("filename `%s' for `%s' redirection may be result of
logical expression"),
str, what);
- /* input files/pipes are automatically nonfatal */
- if (is_output) {
- is_non_fatal = (in_PROCINFO("nonfatal", NULL, NULL) != NULL
- || in_PROCINFO(str, "nonfatal", NULL) != NULL);
- if (is_non_fatal)
- tflag |= RED_NON_FATAL;
- }
-
#ifdef HAVE_SOCKETS
/*
* Use /inet4 to force IPv4, /inet6 to force IPv6, and plain
@@ -907,7 +894,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
os_restore_mode(fileno(stdin));
/*
- * Don't check is_non_fatal; see input pipe below.
+ * Don't check non_fatal_io; see input pipe below.
* Note that the failure happens upon failure to fork,
* using a non-existant program will still succeed the
* popen().
@@ -948,11 +935,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
direction = "to/from";
if (! two_way_open(str, rp)) {
#ifdef HAVE_SOCKETS
- if (inetfile(str, NULL)) {
- *errflg = errno;
- /* do not free rp, saving it for reuse
(save_rp = rp) */
- return NULL;
- } else if (is_non_fatal) {
+ if (inetfile(str, NULL) || non_fatal_io) {
*errflg = errno;
/* do not free rp, saving it for reuse
(save_rp = rp) */
return NULL;
@@ -1038,7 +1021,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
*/
if (errflg != NULL)
*errflg = errno;
- if (! is_non_fatal &&
+ if (! non_fatal_io &&
(redirtype == redirect_output
|| redirtype == redirect_append)) {
/* multiple messages make life easier
for translators */
@@ -1085,25 +1068,6 @@ getredirect(const char *str, int len)
return NULL;
}
-/* is_non_fatal_std --- return true if fp is stdout/stderr and nonfatal */
-
-bool
-is_non_fatal_std(FILE *fp)
-{
- if (in_PROCINFO("nonfatal", NULL, NULL))
- return true;
-
- /* yucky logic. sigh. */
- if (fp == stdout) {
- return ( in_PROCINFO("-", "nonfatal", NULL) != NULL
- || in_PROCINFO("/dev/stdout", "nonfatal", NULL) !=
NULL);
- } else if (fp == stderr) {
- return (in_PROCINFO("/dev/stderr", "nonfatal", NULL) != NULL);
- }
-
- return false;
-}
-
/* close_one --- temporarily close an open file to re-use the fd */
static void
diff --git a/main.c b/main.c
index f2bea91..22e0e51 100644
--- a/main.c
+++ b/main.c
@@ -908,6 +908,7 @@ load_procinfo()
been_here = true;
PROCINFO_node = install_symbol(estrdup("PROCINFO", 8), Node_var_array);
+ init_proc_array(PROCINFO_node);
update_PROCINFO_str("version", VERSION);
update_PROCINFO_str("strftime", def_strftime_format);
diff --git a/str_array.c b/str_array.c
index 33c9ddc..c744542 100644
--- a/str_array.c
+++ b/str_array.c
@@ -88,6 +88,25 @@ afunc_t env_array_func[] = {
env_store,
};
+static NODE **proc_remove(NODE *symbol, NODE *subs);
+static NODE **proc_store(NODE *symbol, NODE *subs);
+static NODE **proc_clear(NODE *symbol, NODE *subs);
+
+/* special case for PROCINFO */
+afunc_t proc_array_func[] = {
+ str_array_init,
+ (afunc_t) 0,
+ null_length,
+ str_lookup,
+ str_exists,
+ proc_clear,
+ proc_remove,
+ str_list,
+ str_copy,
+ str_dump,
+ proc_store,
+};
+
static inline NODE **str_find(NODE *symbol, NODE *s1, size_t code1, unsigned
long hash1);
static void grow_table(NODE *symbol);
@@ -816,3 +835,45 @@ init_env_array(NODE *env_node)
env_node->array_funcs = env_array_func;
}
+
+/* proc_remove --- handle removing an element */
+
+static NODE **
+proc_remove(NODE *symbol, NODE *subs)
+{
+ if (subs && subs->stptr && strcmp(subs->stptr, "nonfatal") == 0)
+ non_fatal_io = false;
+
+ return str_remove(symbol, subs);
+}
+
+/* proc_store --- handle storing an element */
+
+static NODE **
+proc_store(NODE *symbol, NODE *subs)
+{
+ NODE **val = str_exists(symbol, subs);
+
+ if (subs && subs->stptr && strcmp(subs->stptr, "nonfatal") == 0)
+ non_fatal_io = true;
+
+ return val;
+}
+
+/* proc_clear --- handle clearing the whole array */
+
+static NODE **
+proc_clear(NODE *symbol, NODE *subs)
+{
+ non_fatal_io = false;
+
+ return str_clear(symbol, subs);
+}
+
+/* init_proc_array --- set up the pointers for PROCINFO. A bit hacky. */
+
+void
+init_proc_array(NODE *proc_node)
+{
+ proc_node->array_funcs = proc_array_func;
+}
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=e6de21fd260437430ff11dfdea3312603bec6d76
commit e6de21fd260437430ff11dfdea3312603bec6d76
Merge: 9f80b1d 6b63c37
Author: Arnold D. Robbins <address@hidden>
Date: Tue Feb 3 18:31:43 2015 +0200
Merge branch 'master' into non-fatal-io
diff --cc doc/gawk.info
index 0e17bf0,3abb4f4..56f1b0e
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -34542,561 -34628,560 +34718,561 @@@ Inde
Tag Table:
Node: Top1204
-Node: Foreword342225
-Node: Foreword446669
-Node: Preface48200
-Ref: Preface-Footnote-151071
-Ref: Preface-Footnote-251178
-Ref: Preface-Footnote-351411
-Node: History51553
-Node: Names53904
-Ref: Names-Footnote-154997
-Node: This Manual55143
-Ref: This Manual-Footnote-161643
-Node: Conventions61743
-Node: Manual History64080
-Ref: Manual History-Footnote-167073
-Ref: Manual History-Footnote-267114
-Node: How To Contribute67188
-Node: Acknowledgments68317
-Node: Getting Started73134
-Node: Running gawk75573
-Node: One-shot76763
-Node: Read Terminal78027
-Node: Long80058
-Node: Executable Scripts81571
-Ref: Executable Scripts-Footnote-184360
-Node: Comments84463
-Node: Quoting86945
-Node: DOS Quoting92463
-Node: Sample Data Files93138
-Node: Very Simple95733
-Node: Two Rules100632
-Node: More Complex102518
-Node: Statements/Lines105380
-Ref: Statements/Lines-Footnote-1109835
-Node: Other Features110100
-Node: When111036
-Ref: When-Footnote-1112790
-Node: Intro Summary112855
-Node: Invoking Gawk113739
-Node: Command Line115253
-Node: Options116051
-Ref: Options-Footnote-1131846
-Ref: Options-Footnote-2132075
-Node: Other Arguments132100
-Node: Naming Standard Input135048
-Node: Environment Variables136141
-Node: AWKPATH Variable136699
-Ref: AWKPATH Variable-Footnote-1140106
-Ref: AWKPATH Variable-Footnote-2140151
-Node: AWKLIBPATH Variable140411
-Node: Other Environment Variables141667
-Node: Exit Status145185
-Node: Include Files145861
-Node: Loading Shared Libraries149450
-Node: Obsolete150877
-Node: Undocumented151569
-Node: Invoking Summary151836
-Node: Regexp153499
-Node: Regexp Usage154953
-Node: Escape Sequences156990
-Node: Regexp Operators163230
-Ref: Regexp Operators-Footnote-1170640
-Ref: Regexp Operators-Footnote-2170787
-Node: Bracket Expressions170885
-Ref: table-char-classes172900
-Node: Leftmost Longest175842
-Node: Computed Regexps177144
-Node: GNU Regexp Operators180573
-Node: Case-sensitivity184245
-Ref: Case-sensitivity-Footnote-1187130
-Ref: Case-sensitivity-Footnote-2187365
-Node: Regexp Summary187473
-Node: Reading Files188940
-Node: Records191033
-Node: awk split records191766
-Node: gawk split records196695
-Ref: gawk split records-Footnote-1201234
-Node: Fields201271
-Ref: Fields-Footnote-1204049
-Node: Nonconstant Fields204135
-Ref: Nonconstant Fields-Footnote-1206373
-Node: Changing Fields206576
-Node: Field Separators212507
-Node: Default Field Splitting215211
-Node: Regexp Field Splitting216328
-Node: Single Character Fields219678
-Node: Command Line Field Separator220737
-Node: Full Line Fields223954
-Ref: Full Line Fields-Footnote-1225475
-Ref: Full Line Fields-Footnote-2225521
-Node: Field Splitting Summary225622
-Node: Constant Size227696
-Node: Splitting By Content232279
-Ref: Splitting By Content-Footnote-1236244
-Node: Multiple Line236407
-Ref: Multiple Line-Footnote-1242288
-Node: Getline242467
-Node: Plain Getline244674
-Node: Getline/Variable247314
-Node: Getline/File248463
-Node: Getline/Variable/File249848
-Ref: Getline/Variable/File-Footnote-1251451
-Node: Getline/Pipe251538
-Node: Getline/Variable/Pipe254216
-Node: Getline/Coprocess255347
-Node: Getline/Variable/Coprocess256611
-Node: Getline Notes257350
-Node: Getline Summary260144
-Ref: table-getline-variants260556
-Node: Read Timeout261385
-Ref: Read Timeout-Footnote-1265222
-Node: Command-line directories265280
-Node: Input Summary266185
-Node: Input Exercises269570
-Node: Printing270298
-Node: Print272075
-Node: Print Examples273532
-Node: Output Separators276311
-Node: OFMT278329
-Node: Printf279684
-Node: Basic Printf280469
-Node: Control Letters282041
-Node: Format Modifiers286026
-Node: Printf Examples292036
-Node: Redirection294522
-Node: Special FD301360
-Ref: Special FD-Footnote-1304526
-Node: Special Files304600
-Node: Other Inherited Files305217
-Node: Special Network306217
-Node: Special Caveats307079
-Node: Close Files And Pipes308028
-Ref: Close Files And Pipes-Footnote-1315219
-Ref: Close Files And Pipes-Footnote-2315367
-Node: Output Summary315517
-Node: Output Exercises316515
-Node: Expressions317195
-Node: Values318384
-Node: Constants319061
-Node: Scalar Constants319752
-Ref: Scalar Constants-Footnote-1320614
-Node: Nondecimal-numbers320864
-Node: Regexp Constants323874
-Node: Using Constant Regexps324400
-Node: Variables327563
-Node: Using Variables328220
-Node: Assignment Options330131
-Node: Conversion332006
-Node: Strings And Numbers332530
-Ref: Strings And Numbers-Footnote-1335595
-Node: Locale influences conversions335704
-Ref: table-locale-affects338450
-Node: All Operators339042
-Node: Arithmetic Ops339671
-Node: Concatenation342176
-Ref: Concatenation-Footnote-1344995
-Node: Assignment Ops345102
-Ref: table-assign-ops350081
-Node: Increment Ops351391
-Node: Truth Values and Conditions354822
-Node: Truth Values355905
-Node: Typing and Comparison356954
-Node: Variable Typing357770
-Node: Comparison Operators361437
-Ref: table-relational-ops361847
-Node: POSIX String Comparison365342
-Ref: POSIX String Comparison-Footnote-1366414
-Node: Boolean Ops366553
-Ref: Boolean Ops-Footnote-1371031
-Node: Conditional Exp371122
-Node: Function Calls372860
-Node: Precedence376740
-Node: Locales380400
-Node: Expressions Summary382032
-Node: Patterns and Actions384603
-Node: Pattern Overview385723
-Node: Regexp Patterns387402
-Node: Expression Patterns387945
-Node: Ranges391654
-Node: BEGIN/END394761
-Node: Using BEGIN/END395522
-Ref: Using BEGIN/END-Footnote-1398258
-Node: I/O And BEGIN/END398364
-Node: BEGINFILE/ENDFILE400679
-Node: Empty403576
-Node: Using Shell Variables403893
-Node: Action Overview406166
-Node: Statements408492
-Node: If Statement410340
-Node: While Statement411835
-Node: Do Statement413863
-Node: For Statement415011
-Node: Switch Statement418169
-Node: Break Statement420551
-Node: Continue Statement422592
-Node: Next Statement424419
-Node: Nextfile Statement426800
-Node: Exit Statement429428
-Node: Built-in Variables431839
-Node: User-modified432972
-Ref: User-modified-Footnote-1440675
-Node: Auto-set440737
-Ref: Auto-set-Footnote-1454446
-Ref: Auto-set-Footnote-2454651
-Node: ARGC and ARGV454707
-Node: Pattern Action Summary458925
-Node: Arrays461358
-Node: Array Basics462687
-Node: Array Intro463531
-Ref: figure-array-elements465465
-Ref: Array Intro-Footnote-1468085
-Node: Reference to Elements468213
-Node: Assigning Elements470675
-Node: Array Example471166
-Node: Scanning an Array472925
-Node: Controlling Scanning475945
-Ref: Controlling Scanning-Footnote-1481339
-Node: Numeric Array Subscripts481655
-Node: Uninitialized Subscripts483840
-Node: Delete485457
-Ref: Delete-Footnote-1488206
-Node: Multidimensional488263
-Node: Multiscanning491360
-Node: Arrays of Arrays492949
-Node: Arrays Summary497703
-Node: Functions499794
-Node: Built-in500833
-Node: Calling Built-in501911
-Node: Numeric Functions503906
-Ref: Numeric Functions-Footnote-1508724
-Ref: Numeric Functions-Footnote-2509081
-Ref: Numeric Functions-Footnote-3509129
-Node: String Functions509401
-Ref: String Functions-Footnote-1532902
-Ref: String Functions-Footnote-2533031
-Ref: String Functions-Footnote-3533279
-Node: Gory Details533366
-Ref: table-sub-escapes535147
-Ref: table-sub-proposed536662
-Ref: table-posix-sub538024
-Ref: table-gensub-escapes539561
-Ref: Gory Details-Footnote-1540394
-Node: I/O Functions540545
-Ref: I/O Functions-Footnote-1547781
-Node: Time Functions547928
-Ref: Time Functions-Footnote-1558437
-Ref: Time Functions-Footnote-2558505
-Ref: Time Functions-Footnote-3558663
-Ref: Time Functions-Footnote-4558774
-Ref: Time Functions-Footnote-5558886
-Ref: Time Functions-Footnote-6559113
-Node: Bitwise Functions559379
-Ref: table-bitwise-ops559941
-Ref: Bitwise Functions-Footnote-1564269
-Node: Type Functions564441
-Node: I18N Functions565593
-Node: User-defined567240
-Node: Definition Syntax568045
-Ref: Definition Syntax-Footnote-1573704
-Node: Function Example573775
-Ref: Function Example-Footnote-1576696
-Node: Function Caveats576718
-Node: Calling A Function577236
-Node: Variable Scope578194
-Node: Pass By Value/Reference581187
-Node: Return Statement584684
-Node: Dynamic Typing587663
-Node: Indirect Calls588592
-Ref: Indirect Calls-Footnote-1599898
-Node: Functions Summary600026
-Node: Library Functions602728
-Ref: Library Functions-Footnote-1606336
-Ref: Library Functions-Footnote-2606479
-Node: Library Names606650
-Ref: Library Names-Footnote-1610108
-Ref: Library Names-Footnote-2610331
-Node: General Functions610417
-Node: Strtonum Function611520
-Node: Assert Function614542
-Node: Round Function617866
-Node: Cliff Random Function619407
-Node: Ordinal Functions620423
-Ref: Ordinal Functions-Footnote-1623486
-Ref: Ordinal Functions-Footnote-2623738
-Node: Join Function623949
-Ref: Join Function-Footnote-1625719
-Node: Getlocaltime Function625919
-Node: Readfile Function629663
-Node: Shell Quoting631635
-Node: Data File Management633036
-Node: Filetrans Function633668
-Node: Rewind Function637764
-Node: File Checking639150
-Ref: File Checking-Footnote-1640483
-Node: Empty Files640684
-Node: Ignoring Assigns642663
-Node: Getopt Function644213
-Ref: Getopt Function-Footnote-1655677
-Node: Passwd Functions655877
-Ref: Passwd Functions-Footnote-1664717
-Node: Group Functions664805
-Ref: Group Functions-Footnote-1672702
-Node: Walking Arrays672907
-Node: Library Functions Summary674507
-Node: Library Exercises675911
-Node: Sample Programs677191
-Node: Running Examples677961
-Node: Clones678689
-Node: Cut Program679913
-Node: Egrep Program689632
-Ref: Egrep Program-Footnote-1697130
-Node: Id Program697240
-Node: Split Program700885
-Ref: Split Program-Footnote-1704333
-Node: Tee Program704461
-Node: Uniq Program707250
-Node: Wc Program714669
-Ref: Wc Program-Footnote-1718919
-Node: Miscellaneous Programs719013
-Node: Dupword Program720226
-Node: Alarm Program722257
-Node: Translate Program727061
-Ref: Translate Program-Footnote-1731626
-Node: Labels Program731896
-Ref: Labels Program-Footnote-1735247
-Node: Word Sorting735331
-Node: History Sorting739402
-Node: Extract Program741238
-Node: Simple Sed748763
-Node: Igawk Program751831
-Ref: Igawk Program-Footnote-1766155
-Ref: Igawk Program-Footnote-2766356
-Ref: Igawk Program-Footnote-3766478
-Node: Anagram Program766593
-Node: Signature Program769650
-Node: Programs Summary770897
-Node: Programs Exercises772090
-Ref: Programs Exercises-Footnote-1776221
-Node: Advanced Features776312
-Node: Nondecimal Data778260
-Node: Array Sorting779850
-Node: Controlling Array Traversal780547
-Ref: Controlling Array Traversal-Footnote-1788880
-Node: Array Sorting Functions788998
-Ref: Array Sorting Functions-Footnote-1792887
-Node: Two-way I/O793083
-Ref: Two-way I/O-Footnote-1798028
-Ref: Two-way I/O-Footnote-2798214
-Node: TCP/IP Networking798296
-Node: Profiling801169
-Node: Advanced Features Summary809446
-Node: Internationalization811379
-Node: I18N and L10N812859
-Node: Explaining gettext813545
-Ref: Explaining gettext-Footnote-1818570
-Ref: Explaining gettext-Footnote-2818754
-Node: Programmer i18n818919
-Ref: Programmer i18n-Footnote-1823785
-Node: Translator i18n823834
-Node: String Extraction824628
-Ref: String Extraction-Footnote-1825759
-Node: Printf Ordering825845
-Ref: Printf Ordering-Footnote-1828631
-Node: I18N Portability828695
-Ref: I18N Portability-Footnote-1831150
-Node: I18N Example831213
-Ref: I18N Example-Footnote-1834016
-Node: Gawk I18N834088
-Node: I18N Summary834726
-Node: Debugger836065
-Node: Debugging837087
-Node: Debugging Concepts837528
-Node: Debugging Terms839381
-Node: Awk Debugging841953
-Node: Sample Debugging Session842847
-Node: Debugger Invocation843367
-Node: Finding The Bug844751
-Node: List of Debugger Commands851226
-Node: Breakpoint Control852559
-Node: Debugger Execution Control856255
-Node: Viewing And Changing Data859619
-Node: Execution Stack862997
-Node: Debugger Info864634
-Node: Miscellaneous Debugger Commands868651
-Node: Readline Support873680
-Node: Limitations874572
-Node: Debugging Summary876686
-Node: Arbitrary Precision Arithmetic877854
-Node: Computer Arithmetic879270
-Ref: table-numeric-ranges882868
-Ref: Computer Arithmetic-Footnote-1883727
-Node: Math Definitions883784
-Ref: table-ieee-formats887072
-Ref: Math Definitions-Footnote-1887676
-Node: MPFR features887781
-Node: FP Math Caution889452
-Ref: FP Math Caution-Footnote-1890502
-Node: Inexactness of computations890871
-Node: Inexact representation891830
-Node: Comparing FP Values893187
-Node: Errors accumulate894269
-Node: Getting Accuracy895702
-Node: Try To Round898364
-Node: Setting precision899263
-Ref: table-predefined-precision-strings899947
-Node: Setting the rounding mode901736
-Ref: table-gawk-rounding-modes902100
-Ref: Setting the rounding mode-Footnote-1905555
-Node: Arbitrary Precision Integers905734
-Ref: Arbitrary Precision Integers-Footnote-1910634
-Node: POSIX Floating Point Problems910783
-Ref: POSIX Floating Point Problems-Footnote-1914656
-Node: Floating point summary914694
-Node: Dynamic Extensions916888
-Node: Extension Intro918440
-Node: Plugin License919706
-Node: Extension Mechanism Outline920503
-Ref: figure-load-extension920931
-Ref: figure-register-new-function922411
-Ref: figure-call-new-function923415
-Node: Extension API Description925401
-Node: Extension API Functions Introduction926851
-Node: General Data Types931675
-Ref: General Data Types-Footnote-1937414
-Node: Memory Allocation Functions937713
-Ref: Memory Allocation Functions-Footnote-1940552
-Node: Constructor Functions940648
-Node: Registration Functions942382
-Node: Extension Functions943067
-Node: Exit Callback Functions945364
-Node: Extension Version String946612
-Node: Input Parsers947277
-Node: Output Wrappers957156
-Node: Two-way processors961671
-Node: Printing Messages963875
-Ref: Printing Messages-Footnote-1964951
-Node: Updating `ERRNO'965103
-Node: Requesting Values965843
-Ref: table-value-types-returned966571
-Node: Accessing Parameters967528
-Node: Symbol Table Access968759
-Node: Symbol table by name969273
-Node: Symbol table by cookie971254
-Ref: Symbol table by cookie-Footnote-1975398
-Node: Cached values975461
-Ref: Cached values-Footnote-1978960
-Node: Array Manipulation979051
-Ref: Array Manipulation-Footnote-1980149
-Node: Array Data Types980186
-Ref: Array Data Types-Footnote-1982841
-Node: Array Functions982933
-Node: Flattening Arrays986787
-Node: Creating Arrays993679
-Node: Extension API Variables998450
-Node: Extension Versioning999086
-Node: Extension API Informational Variables1000987
-Node: Extension API Boilerplate1002052
-Node: Finding Extensions1005861
-Node: Extension Example1006421
-Node: Internal File Description1007193
-Node: Internal File Ops1011260
-Ref: Internal File Ops-Footnote-11022930
-Node: Using Internal File Ops1023070
-Ref: Using Internal File Ops-Footnote-11025453
-Node: Extension Samples1025726
-Node: Extension Sample File Functions1027252
-Node: Extension Sample Fnmatch1034890
-Node: Extension Sample Fork1036381
-Node: Extension Sample Inplace1037596
-Node: Extension Sample Ord1039271
-Node: Extension Sample Readdir1040107
-Ref: table-readdir-file-types1040983
-Node: Extension Sample Revout1041794
-Node: Extension Sample Rev2way1042384
-Node: Extension Sample Read write array1043124
-Node: Extension Sample Readfile1045064
-Node: Extension Sample Time1046159
-Node: Extension Sample API Tests1047508
-Node: gawkextlib1047999
-Node: Extension summary1050657
-Node: Extension Exercises1054346
-Node: Language History1055068
-Node: V7/SVR3.11056724
-Node: SVR41058905
-Node: POSIX1060350
-Node: BTL1061739
-Node: POSIX/GNU1062473
-Node: Feature History1068097
-Node: Common Extensions1081195
-Node: Ranges and Locales1082519
-Ref: Ranges and Locales-Footnote-11087137
-Ref: Ranges and Locales-Footnote-21087164
-Ref: Ranges and Locales-Footnote-31087398
-Node: Contributors1087619
-Node: History summary1093160
-Node: Installation1094530
-Node: Gawk Distribution1095476
-Node: Getting1095960
-Node: Extracting1096783
-Node: Distribution contents1098418
-Node: Unix Installation1104483
-Node: Quick Installation1105166
-Node: Shell Startup Files1107577
-Node: Additional Configuration Options1108656
-Node: Configuration Philosophy1110395
-Node: Non-Unix Installation1112764
-Node: PC Installation1113222
-Node: PC Binary Installation1114541
-Node: PC Compiling1116389
-Ref: PC Compiling-Footnote-11119410
-Node: PC Testing1119519
-Node: PC Using1120695
-Node: Cygwin1124810
-Node: MSYS1125633
-Node: VMS Installation1126133
-Node: VMS Compilation1126925
-Ref: VMS Compilation-Footnote-11128147
-Node: VMS Dynamic Extensions1128205
-Node: VMS Installation Details1129889
-Node: VMS Running1132141
-Node: VMS GNV1134977
-Node: VMS Old Gawk1135711
-Node: Bugs1136181
-Node: Other Versions1140064
-Node: Installation summary1146488
-Node: Notes1147544
-Node: Compatibility Mode1148409
-Node: Additions1149191
-Node: Accessing The Source1150116
-Node: Adding Code1151551
-Node: New Ports1157708
-Node: Derived Files1162190
-Ref: Derived Files-Footnote-11167665
-Ref: Derived Files-Footnote-21167699
-Ref: Derived Files-Footnote-31168295
-Node: Future Extensions1168409
-Node: Implementation Limitations1169015
-Node: Extension Design1170263
-Node: Old Extension Problems1171417
-Ref: Old Extension Problems-Footnote-11172934
-Node: Extension New Mechanism Goals1172991
-Ref: Extension New Mechanism Goals-Footnote-11176351
-Node: Extension Other Design Decisions1176540
-Node: Extension Future Growth1178648
-Node: Old Extension Mechanism1179484
-Node: Notes summary1181246
-Node: Basic Concepts1182432
-Node: Basic High Level1183113
-Ref: figure-general-flow1183385
-Ref: figure-process-flow1183984
-Ref: Basic High Level-Footnote-11187213
-Node: Basic Data Typing1187398
-Node: Glossary1190726
-Node: Copying1222655
-Node: GNU Free Documentation License1260211
-Node: Index1285347
+Node: Foreword342291
+Node: Foreword446735
+Node: Preface48266
+Ref: Preface-Footnote-151137
+Ref: Preface-Footnote-251244
+Ref: Preface-Footnote-351477
+Node: History51619
+Node: Names53970
+Ref: Names-Footnote-155063
+Node: This Manual55209
+Ref: This Manual-Footnote-161709
+Node: Conventions61809
+Node: Manual History64146
+Ref: Manual History-Footnote-167139
+Ref: Manual History-Footnote-267180
+Node: How To Contribute67254
+Node: Acknowledgments68383
+Node: Getting Started73200
+Node: Running gawk75639
+Node: One-shot76829
+Node: Read Terminal78093
+Node: Long80124
+Node: Executable Scripts81637
+Ref: Executable Scripts-Footnote-184426
+Node: Comments84529
+Node: Quoting87011
+Node: DOS Quoting92529
+Node: Sample Data Files93204
+Node: Very Simple95799
+Node: Two Rules100698
+Node: More Complex102584
+Node: Statements/Lines105446
+Ref: Statements/Lines-Footnote-1109901
+Node: Other Features110166
- Node: When111097
- Ref: When-Footnote-1112851
- Node: Intro Summary112916
- Node: Invoking Gawk113799
- Node: Command Line115313
- Node: Options116111
- Ref: Options-Footnote-1131915
- Ref: Options-Footnote-2132144
- Node: Other Arguments132169
- Node: Naming Standard Input135117
- Node: Environment Variables136210
- Node: AWKPATH Variable136768
- Ref: AWKPATH Variable-Footnote-1140181
- Ref: AWKPATH Variable-Footnote-2140226
- Node: AWKLIBPATH Variable140486
- Node: Other Environment Variables141742
- Node: Exit Status145230
- Node: Include Files145906
- Node: Loading Shared Libraries149503
- Node: Obsolete150930
- Node: Undocumented151627
- Node: Invoking Summary151894
- Node: Regexp153558
- Node: Regexp Usage155012
- Node: Escape Sequences157049
- Node: Regexp Operators163279
- Ref: Regexp Operators-Footnote-1170705
- Ref: Regexp Operators-Footnote-2170852
- Node: Bracket Expressions170950
- Ref: table-char-classes172965
- Node: Leftmost Longest175889
- Node: Computed Regexps177191
- Node: GNU Regexp Operators180588
- Node: Case-sensitivity184261
- Ref: Case-sensitivity-Footnote-1187146
- Ref: Case-sensitivity-Footnote-2187381
- Node: Regexp Summary187489
- Node: Reading Files188956
- Node: Records191050
- Node: awk split records191783
- Node: gawk split records196698
- Ref: gawk split records-Footnote-1201242
- Node: Fields201279
- Ref: Fields-Footnote-1204055
- Node: Nonconstant Fields204141
- Ref: Nonconstant Fields-Footnote-1206384
- Node: Changing Fields206588
- Node: Field Separators212517
- Node: Default Field Splitting215222
- Node: Regexp Field Splitting216339
- Node: Single Character Fields219689
- Node: Command Line Field Separator220748
- Node: Full Line Fields223960
- Ref: Full Line Fields-Footnote-1225477
- Ref: Full Line Fields-Footnote-2225523
- Node: Field Splitting Summary225624
- Node: Constant Size227698
- Node: Splitting By Content232287
- Ref: Splitting By Content-Footnote-1236281
- Node: Multiple Line236444
- Ref: Multiple Line-Footnote-1242330
- Node: Getline242509
- Node: Plain Getline244721
- Node: Getline/Variable247361
- Node: Getline/File248509
- Node: Getline/Variable/File249893
- Ref: Getline/Variable/File-Footnote-1251496
- Node: Getline/Pipe251583
- Node: Getline/Variable/Pipe254266
- Node: Getline/Coprocess255397
- Node: Getline/Variable/Coprocess256649
- Node: Getline Notes257388
- Node: Getline Summary260180
- Ref: table-getline-variants260592
- Node: Read Timeout261421
- Ref: Read Timeout-Footnote-1265245
- Node: Command-line directories265303
- Node: Input Summary266208
- Node: Input Exercises269509
- Node: Printing270237
- Node: Print272072
- Node: Print Examples273529
- Node: Output Separators276308
- Node: OFMT278326
- Node: Printf279680
- Node: Basic Printf280465
- Node: Control Letters282035
- Node: Format Modifiers286018
- Node: Printf Examples292027
- Node: Redirection294513
- Node: Special FD301354
- Ref: Special FD-Footnote-1304514
- Node: Special Files304588
- Node: Other Inherited Files305205
- Node: Special Network306205
- Node: Special Caveats307067
- Node: Close Files And Pipes308018
- Ref: Close Files And Pipes-Footnote-1315194
- Ref: Close Files And Pipes-Footnote-2315342
- Node: Nonfatal315492
- Node: Output Summary317415
- Node: Output Exercises318636
- Node: Expressions319316
- Node: Values320501
- Node: Constants321179
- Node: Scalar Constants321870
- Ref: Scalar Constants-Footnote-1322729
- Node: Nondecimal-numbers322979
- Node: Regexp Constants325997
- Node: Using Constant Regexps326522
- Node: Variables329665
- Node: Using Variables330320
- Node: Assignment Options332231
- Node: Conversion334106
- Node: Strings And Numbers334630
- Ref: Strings And Numbers-Footnote-1337695
- Node: Locale influences conversions337804
- Ref: table-locale-affects340551
- Node: All Operators341139
- Node: Arithmetic Ops341769
- Node: Concatenation344274
- Ref: Concatenation-Footnote-1347093
- Node: Assignment Ops347199
- Ref: table-assign-ops352178
- Node: Increment Ops353450
- Node: Truth Values and Conditions356888
- Node: Truth Values357973
- Node: Typing and Comparison359022
- Node: Variable Typing359832
- Node: Comparison Operators363485
- Ref: table-relational-ops363895
- Node: POSIX String Comparison367390
- Ref: POSIX String Comparison-Footnote-1368462
- Node: Boolean Ops368600
- Ref: Boolean Ops-Footnote-1373079
- Node: Conditional Exp373170
- Node: Function Calls374897
- Node: Precedence378777
- Node: Locales382438
- Node: Expressions Summary384070
- Node: Patterns and Actions386630
- Node: Pattern Overview387750
- Node: Regexp Patterns389429
- Node: Expression Patterns389972
- Node: Ranges393682
- Node: BEGIN/END396788
- Node: Using BEGIN/END397549
- Ref: Using BEGIN/END-Footnote-1400283
- Node: I/O And BEGIN/END400389
- Node: BEGINFILE/ENDFILE402703
- Node: Empty405604
- Node: Using Shell Variables405921
- Node: Action Overview408194
- Node: Statements410520
- Node: If Statement412368
- Node: While Statement413863
- Node: Do Statement415892
- Node: For Statement417036
- Node: Switch Statement420193
- Node: Break Statement422575
- Node: Continue Statement424616
- Node: Next Statement426443
- Node: Nextfile Statement428824
- Node: Exit Statement431454
- Node: Built-in Variables433857
- Node: User-modified434990
- Ref: User-modified-Footnote-1442671
- Node: Auto-set442733
- Ref: Auto-set-Footnote-1456425
- Ref: Auto-set-Footnote-2456630
- Node: ARGC and ARGV456686
- Node: Pattern Action Summary460904
- Node: Arrays463331
- Node: Array Basics464660
- Node: Array Intro465504
- Ref: figure-array-elements467468
- Ref: Array Intro-Footnote-1469994
- Node: Reference to Elements470122
- Node: Assigning Elements472574
- Node: Array Example473065
- Node: Scanning an Array474823
- Node: Controlling Scanning477839
- Ref: Controlling Scanning-Footnote-1483035
- Node: Numeric Array Subscripts483351
- Node: Uninitialized Subscripts485536
- Node: Delete487153
- Ref: Delete-Footnote-1489896
- Node: Multidimensional489953
- Node: Multiscanning493050
- Node: Arrays of Arrays494639
- Node: Arrays Summary499398
- Node: Functions501490
- Node: Built-in502389
- Node: Calling Built-in503467
- Node: Numeric Functions505458
- Ref: Numeric Functions-Footnote-1510277
- Ref: Numeric Functions-Footnote-2510634
- Ref: Numeric Functions-Footnote-3510682
- Node: String Functions510954
- Ref: String Functions-Footnote-1534429
- Ref: String Functions-Footnote-2534558
- Ref: String Functions-Footnote-3534806
- Node: Gory Details534893
- Ref: table-sub-escapes536674
- Ref: table-sub-proposed538194
- Ref: table-posix-sub539558
- Ref: table-gensub-escapes541094
- Ref: Gory Details-Footnote-1541926
- Node: I/O Functions542077
- Ref: I/O Functions-Footnote-1549295
- Node: Time Functions549442
- Ref: Time Functions-Footnote-1559930
- Ref: Time Functions-Footnote-2559998
- Ref: Time Functions-Footnote-3560156
- Ref: Time Functions-Footnote-4560267
- Ref: Time Functions-Footnote-5560379
- Ref: Time Functions-Footnote-6560606
- Node: Bitwise Functions560872
- Ref: table-bitwise-ops561434
- Ref: Bitwise Functions-Footnote-1565743
- Node: Type Functions565912
- Node: I18N Functions567063
- Node: User-defined568708
- Node: Definition Syntax569513
- Ref: Definition Syntax-Footnote-1574920
- Node: Function Example574991
- Ref: Function Example-Footnote-1577910
- Node: Function Caveats577932
- Node: Calling A Function578450
- Node: Variable Scope579408
- Node: Pass By Value/Reference582396
- Node: Return Statement585891
- Node: Dynamic Typing588872
- Node: Indirect Calls589801
- Ref: Indirect Calls-Footnote-1601103
- Node: Functions Summary601231
- Node: Library Functions603933
- Ref: Library Functions-Footnote-1607542
- Ref: Library Functions-Footnote-2607685
- Node: Library Names607856
- Ref: Library Names-Footnote-1611310
- Ref: Library Names-Footnote-2611533
- Node: General Functions611619
- Node: Strtonum Function612722
- Node: Assert Function615744
- Node: Round Function619068
- Node: Cliff Random Function620609
- Node: Ordinal Functions621625
- Ref: Ordinal Functions-Footnote-1624688
- Ref: Ordinal Functions-Footnote-2624940
- Node: Join Function625151
- Ref: Join Function-Footnote-1626920
- Node: Getlocaltime Function627120
- Node: Readfile Function630864
- Node: Shell Quoting632834
- Node: Data File Management634235
- Node: Filetrans Function634867
- Node: Rewind Function638923
- Node: File Checking640310
- Ref: File Checking-Footnote-1641642
- Node: Empty Files641843
- Node: Ignoring Assigns643822
- Node: Getopt Function645373
- Ref: Getopt Function-Footnote-1656835
- Node: Passwd Functions657035
- Ref: Passwd Functions-Footnote-1665872
- Node: Group Functions665960
- Ref: Group Functions-Footnote-1673854
- Node: Walking Arrays674067
- Node: Library Functions Summary675670
- Node: Library Exercises677071
- Node: Sample Programs678351
- Node: Running Examples679121
- Node: Clones679849
- Node: Cut Program681073
- Node: Egrep Program690792
- Ref: Egrep Program-Footnote-1698290
- Node: Id Program698400
- Node: Split Program702045
- Ref: Split Program-Footnote-1705493
- Node: Tee Program705621
- Node: Uniq Program708410
- Node: Wc Program715829
- Ref: Wc Program-Footnote-1720079
- Node: Miscellaneous Programs720173
- Node: Dupword Program721386
- Node: Alarm Program723417
- Node: Translate Program728221
- Ref: Translate Program-Footnote-1732786
- Node: Labels Program733056
- Ref: Labels Program-Footnote-1736407
- Node: Word Sorting736491
- Node: History Sorting740562
- Node: Extract Program742398
- Node: Simple Sed749923
- Node: Igawk Program752991
- Ref: Igawk Program-Footnote-1767315
- Ref: Igawk Program-Footnote-2767516
- Ref: Igawk Program-Footnote-3767638
- Node: Anagram Program767753
- Node: Signature Program770810
- Node: Programs Summary772057
- Node: Programs Exercises773250
- Ref: Programs Exercises-Footnote-1777381
- Node: Advanced Features777472
- Node: Nondecimal Data779420
- Node: Array Sorting781010
- Node: Controlling Array Traversal781707
- Ref: Controlling Array Traversal-Footnote-1790040
- Node: Array Sorting Functions790158
- Ref: Array Sorting Functions-Footnote-1794047
- Node: Two-way I/O794243
- Ref: Two-way I/O-Footnote-1799188
- Ref: Two-way I/O-Footnote-2799374
- Node: TCP/IP Networking799456
- Node: Profiling802329
- Node: Advanced Features Summary810606
- Node: Internationalization812539
- Node: I18N and L10N814019
- Node: Explaining gettext814705
- Ref: Explaining gettext-Footnote-1819730
- Ref: Explaining gettext-Footnote-2819914
- Node: Programmer i18n820079
- Ref: Programmer i18n-Footnote-1824945
- Node: Translator i18n824994
- Node: String Extraction825788
- Ref: String Extraction-Footnote-1826919
- Node: Printf Ordering827005
- Ref: Printf Ordering-Footnote-1829791
- Node: I18N Portability829855
- Ref: I18N Portability-Footnote-1832310
- Node: I18N Example832373
- Ref: I18N Example-Footnote-1835176
- Node: Gawk I18N835248
- Node: I18N Summary835886
- Node: Debugger837225
- Node: Debugging838247
- Node: Debugging Concepts838688
- Node: Debugging Terms840541
- Node: Awk Debugging843113
- Node: Sample Debugging Session844007
- Node: Debugger Invocation844527
- Node: Finding The Bug845911
- Node: List of Debugger Commands852386
- Node: Breakpoint Control853719
- Node: Debugger Execution Control857415
- Node: Viewing And Changing Data860779
- Node: Execution Stack864157
- Node: Debugger Info865794
- Node: Miscellaneous Debugger Commands869811
- Node: Readline Support874840
- Node: Limitations875732
- Node: Debugging Summary877846
- Node: Arbitrary Precision Arithmetic879014
- Node: Computer Arithmetic880430
- Ref: table-numeric-ranges884028
- Ref: Computer Arithmetic-Footnote-1884887
- Node: Math Definitions884944
- Ref: table-ieee-formats888232
- Ref: Math Definitions-Footnote-1888836
- Node: MPFR features888941
- Node: FP Math Caution890612
- Ref: FP Math Caution-Footnote-1891662
- Node: Inexactness of computations892031
- Node: Inexact representation892990
- Node: Comparing FP Values894347
- Node: Errors accumulate895429
- Node: Getting Accuracy896862
- Node: Try To Round899524
- Node: Setting precision900423
- Ref: table-predefined-precision-strings901107
- Node: Setting the rounding mode902896
- Ref: table-gawk-rounding-modes903260
- Ref: Setting the rounding mode-Footnote-1906715
- Node: Arbitrary Precision Integers906894
- Ref: Arbitrary Precision Integers-Footnote-1911793
- Node: POSIX Floating Point Problems911942
- Ref: POSIX Floating Point Problems-Footnote-1915815
- Node: Floating point summary915853
- Node: Dynamic Extensions918047
- Node: Extension Intro919599
- Node: Plugin License920865
- Node: Extension Mechanism Outline921662
- Ref: figure-load-extension922090
- Ref: figure-register-new-function923570
- Ref: figure-call-new-function924574
- Node: Extension API Description926560
- Node: Extension API Functions Introduction928010
- Node: General Data Types932834
- Ref: General Data Types-Footnote-1938573
- Node: Memory Allocation Functions938872
- Ref: Memory Allocation Functions-Footnote-1941711
- Node: Constructor Functions941807
- Node: Registration Functions943541
- Node: Extension Functions944226
- Node: Exit Callback Functions946523
- Node: Extension Version String947771
- Node: Input Parsers948436
- Node: Output Wrappers958315
- Node: Two-way processors962830
- Node: Printing Messages965034
- Ref: Printing Messages-Footnote-1966110
- Node: Updating `ERRNO'966262
- Node: Requesting Values967002
- Ref: table-value-types-returned967730
- Node: Accessing Parameters968687
- Node: Symbol Table Access969918
- Node: Symbol table by name970432
- Node: Symbol table by cookie972413
- Ref: Symbol table by cookie-Footnote-1976557
- Node: Cached values976620
- Ref: Cached values-Footnote-1980119
- Node: Array Manipulation980210
- Ref: Array Manipulation-Footnote-1981308
- Node: Array Data Types981345
- Ref: Array Data Types-Footnote-1984000
- Node: Array Functions984092
- Node: Flattening Arrays987946
- Node: Creating Arrays994838
- Node: Extension API Variables999609
- Node: Extension Versioning1000245
- Node: Extension API Informational Variables1002146
- Node: Extension API Boilerplate1003211
- Node: Finding Extensions1007020
- Node: Extension Example1007580
- Node: Internal File Description1008352
- Node: Internal File Ops1012419
- Ref: Internal File Ops-Footnote-11024089
- Node: Using Internal File Ops1024229
- Ref: Using Internal File Ops-Footnote-11026612
- Node: Extension Samples1026885
- Node: Extension Sample File Functions1028411
- Node: Extension Sample Fnmatch1036049
- Node: Extension Sample Fork1037540
- Node: Extension Sample Inplace1038755
- Node: Extension Sample Ord1040430
- Node: Extension Sample Readdir1041266
- Ref: table-readdir-file-types1042142
- Node: Extension Sample Revout1042953
- Node: Extension Sample Rev2way1043543
- Node: Extension Sample Read write array1044283
- Node: Extension Sample Readfile1046223
- Node: Extension Sample Time1047318
- Node: Extension Sample API Tests1048667
- Node: gawkextlib1049158
- Node: Extension summary1051816
- Node: Extension Exercises1055505
- Node: Language History1056227
- Node: V7/SVR3.11057883
- Node: SVR41060064
- Node: POSIX1061509
- Node: BTL1062898
- Node: POSIX/GNU1063632
- Node: Feature History1069513
- Node: Common Extensions1083307
- Node: Ranges and Locales1084631
- Ref: Ranges and Locales-Footnote-11089249
- Ref: Ranges and Locales-Footnote-21089276
- Ref: Ranges and Locales-Footnote-31089510
- Node: Contributors1089731
- Node: History summary1095272
- Node: Installation1096642
- Node: Gawk Distribution1097588
- Node: Getting1098072
- Node: Extracting1098895
- Node: Distribution contents1100530
- Node: Unix Installation1106595
- Node: Quick Installation1107278
- Node: Shell Startup Files1109689
- Node: Additional Configuration Options1110768
- Node: Configuration Philosophy1112507
- Node: Non-Unix Installation1114876
- Node: PC Installation1115334
- Node: PC Binary Installation1116653
- Node: PC Compiling1118501
- Ref: PC Compiling-Footnote-11121522
- Node: PC Testing1121631
- Node: PC Using1122807
- Node: Cygwin1126922
- Node: MSYS1127745
- Node: VMS Installation1128245
- Node: VMS Compilation1129037
- Ref: VMS Compilation-Footnote-11130259
- Node: VMS Dynamic Extensions1130317
- Node: VMS Installation Details1132001
- Node: VMS Running1134253
- Node: VMS GNV1137089
- Node: VMS Old Gawk1137823
- Node: Bugs1138293
- Node: Other Versions1142176
- Node: Installation summary1148604
- Node: Notes1149660
- Node: Compatibility Mode1150525
- Node: Additions1151307
- Node: Accessing The Source1152232
- Node: Adding Code1153668
- Node: New Ports1159833
- Node: Derived Files1164315
- Ref: Derived Files-Footnote-11169790
- Ref: Derived Files-Footnote-21169824
- Ref: Derived Files-Footnote-31170420
- Node: Future Extensions1170534
- Node: Implementation Limitations1171140
- Node: Extension Design1172388
- Node: Old Extension Problems1173542
- Ref: Old Extension Problems-Footnote-11175059
- Node: Extension New Mechanism Goals1175116
- Ref: Extension New Mechanism Goals-Footnote-11178476
- Node: Extension Other Design Decisions1178665
- Node: Extension Future Growth1180773
- Node: Old Extension Mechanism1181609
- Node: Notes summary1183371
- Node: Basic Concepts1184557
- Node: Basic High Level1185238
- Ref: figure-general-flow1185510
- Ref: figure-process-flow1186109
- Ref: Basic High Level-Footnote-11189338
- Node: Basic Data Typing1189523
- Node: Glossary1192851
- Node: Copying1218009
- Node: GNU Free Documentation License1255565
- Node: Index1280701
++Node: When111102
++Ref: When-Footnote-1112856
++Node: Intro Summary112921
++Node: Invoking Gawk113805
++Node: Command Line115319
++Node: Options116117
++Ref: Options-Footnote-1131912
++Ref: Options-Footnote-2132141
++Node: Other Arguments132166
++Node: Naming Standard Input135114
++Node: Environment Variables136207
++Node: AWKPATH Variable136765
++Ref: AWKPATH Variable-Footnote-1140172
++Ref: AWKPATH Variable-Footnote-2140217
++Node: AWKLIBPATH Variable140477
++Node: Other Environment Variables141733
++Node: Exit Status145251
++Node: Include Files145927
++Node: Loading Shared Libraries149516
++Node: Obsolete150943
++Node: Undocumented151635
++Node: Invoking Summary151902
++Node: Regexp153565
++Node: Regexp Usage155019
++Node: Escape Sequences157056
++Node: Regexp Operators163285
++Ref: Regexp Operators-Footnote-1170695
++Ref: Regexp Operators-Footnote-2170842
++Node: Bracket Expressions170940
++Ref: table-char-classes172955
++Node: Leftmost Longest175897
++Node: Computed Regexps177199
++Node: GNU Regexp Operators180628
++Node: Case-sensitivity184300
++Ref: Case-sensitivity-Footnote-1187185
++Ref: Case-sensitivity-Footnote-2187420
++Node: Regexp Summary187528
++Node: Reading Files188995
++Node: Records191088
++Node: awk split records191821
++Node: gawk split records196750
++Ref: gawk split records-Footnote-1201289
++Node: Fields201326
++Ref: Fields-Footnote-1204104
++Node: Nonconstant Fields204190
++Ref: Nonconstant Fields-Footnote-1206428
++Node: Changing Fields206631
++Node: Field Separators212562
++Node: Default Field Splitting215266
++Node: Regexp Field Splitting216383
++Node: Single Character Fields219733
++Node: Command Line Field Separator220792
++Node: Full Line Fields224009
++Ref: Full Line Fields-Footnote-1225530
++Ref: Full Line Fields-Footnote-2225576
++Node: Field Splitting Summary225677
++Node: Constant Size227751
++Node: Splitting By Content232334
++Ref: Splitting By Content-Footnote-1236299
++Node: Multiple Line236462
++Ref: Multiple Line-Footnote-1242343
++Node: Getline242522
++Node: Plain Getline244729
++Node: Getline/Variable247369
++Node: Getline/File248518
++Node: Getline/Variable/File249903
++Ref: Getline/Variable/File-Footnote-1251506
++Node: Getline/Pipe251593
++Node: Getline/Variable/Pipe254271
++Node: Getline/Coprocess255402
++Node: Getline/Variable/Coprocess256666
++Node: Getline Notes257405
++Node: Getline Summary260199
++Ref: table-getline-variants260611
++Node: Read Timeout261440
++Ref: Read Timeout-Footnote-1265277
++Node: Command-line directories265335
++Node: Input Summary266240
++Node: Input Exercises269625
++Node: Printing270353
++Node: Print272188
++Node: Print Examples273645
++Node: Output Separators276424
++Node: OFMT278442
++Node: Printf279797
++Node: Basic Printf280582
++Node: Control Letters282154
++Node: Format Modifiers286139
++Node: Printf Examples292149
++Node: Redirection294635
++Node: Special FD301473
++Ref: Special FD-Footnote-1304639
++Node: Special Files304713
++Node: Other Inherited Files305330
++Node: Special Network306330
++Node: Special Caveats307192
++Node: Close Files And Pipes308141
++Ref: Close Files And Pipes-Footnote-1315326
++Ref: Close Files And Pipes-Footnote-2315474
++Node: Nonfatal315624
++Node: Output Summary317547
++Node: Output Exercises318768
++Node: Expressions319448
++Node: Values320637
++Node: Constants321314
++Node: Scalar Constants322005
++Ref: Scalar Constants-Footnote-1322867
++Node: Nondecimal-numbers323117
++Node: Regexp Constants326127
++Node: Using Constant Regexps326653
++Node: Variables329816
++Node: Using Variables330473
++Node: Assignment Options332384
++Node: Conversion334259
++Node: Strings And Numbers334783
++Ref: Strings And Numbers-Footnote-1337848
++Node: Locale influences conversions337957
++Ref: table-locale-affects340703
++Node: All Operators341295
++Node: Arithmetic Ops341924
++Node: Concatenation344429
++Ref: Concatenation-Footnote-1347248
++Node: Assignment Ops347355
++Ref: table-assign-ops352334
++Node: Increment Ops353644
++Node: Truth Values and Conditions357075
++Node: Truth Values358158
++Node: Typing and Comparison359207
++Node: Variable Typing360023
++Node: Comparison Operators363690
++Ref: table-relational-ops364100
++Node: POSIX String Comparison367595
++Ref: POSIX String Comparison-Footnote-1368667
++Node: Boolean Ops368806
++Ref: Boolean Ops-Footnote-1373284
++Node: Conditional Exp373375
++Node: Function Calls375113
++Node: Precedence378993
++Node: Locales382653
++Node: Expressions Summary384285
++Node: Patterns and Actions386856
++Node: Pattern Overview387976
++Node: Regexp Patterns389655
++Node: Expression Patterns390198
++Node: Ranges393907
++Node: BEGIN/END397014
++Node: Using BEGIN/END397775
++Ref: Using BEGIN/END-Footnote-1400511
++Node: I/O And BEGIN/END400617
++Node: BEGINFILE/ENDFILE402932
++Node: Empty405829
++Node: Using Shell Variables406146
++Node: Action Overview408419
++Node: Statements410745
++Node: If Statement412593
++Node: While Statement414088
++Node: Do Statement416116
++Node: For Statement417264
++Node: Switch Statement420422
++Node: Break Statement422804
++Node: Continue Statement424845
++Node: Next Statement426672
++Node: Nextfile Statement429053
++Node: Exit Statement431681
++Node: Built-in Variables434092
++Node: User-modified435225
++Ref: User-modified-Footnote-1442928
++Node: Auto-set442990
++Ref: Auto-set-Footnote-1456699
++Ref: Auto-set-Footnote-2456904
++Node: ARGC and ARGV456960
++Node: Pattern Action Summary461178
++Node: Arrays463611
++Node: Array Basics464940
++Node: Array Intro465784
++Ref: figure-array-elements467718
++Ref: Array Intro-Footnote-1470338
++Node: Reference to Elements470466
++Node: Assigning Elements472928
++Node: Array Example473419
++Node: Scanning an Array475178
++Node: Controlling Scanning478198
++Ref: Controlling Scanning-Footnote-1483592
++Node: Numeric Array Subscripts483908
++Node: Uninitialized Subscripts486093
++Node: Delete487710
++Ref: Delete-Footnote-1490459
++Node: Multidimensional490516
++Node: Multiscanning493613
++Node: Arrays of Arrays495202
++Node: Arrays Summary499956
++Node: Functions502047
++Node: Built-in503086
++Node: Calling Built-in504164
++Node: Numeric Functions506159
++Ref: Numeric Functions-Footnote-1510977
++Ref: Numeric Functions-Footnote-2511334
++Ref: Numeric Functions-Footnote-3511382
++Node: String Functions511654
++Ref: String Functions-Footnote-1535155
++Ref: String Functions-Footnote-2535284
++Ref: String Functions-Footnote-3535532
++Node: Gory Details535619
++Ref: table-sub-escapes537400
++Ref: table-sub-proposed538915
++Ref: table-posix-sub540277
++Ref: table-gensub-escapes541814
++Ref: Gory Details-Footnote-1542647
++Node: I/O Functions542798
++Ref: I/O Functions-Footnote-1550034
++Node: Time Functions550181
++Ref: Time Functions-Footnote-1560690
++Ref: Time Functions-Footnote-2560758
++Ref: Time Functions-Footnote-3560916
++Ref: Time Functions-Footnote-4561027
++Ref: Time Functions-Footnote-5561139
++Ref: Time Functions-Footnote-6561366
++Node: Bitwise Functions561632
++Ref: table-bitwise-ops562194
++Ref: Bitwise Functions-Footnote-1566522
++Node: Type Functions566694
++Node: I18N Functions567846
++Node: User-defined569493
++Node: Definition Syntax570298
++Ref: Definition Syntax-Footnote-1575957
++Node: Function Example576028
++Ref: Function Example-Footnote-1578949
++Node: Function Caveats578971
++Node: Calling A Function579489
++Node: Variable Scope580447
++Node: Pass By Value/Reference583440
++Node: Return Statement586937
++Node: Dynamic Typing589916
++Node: Indirect Calls590845
++Ref: Indirect Calls-Footnote-1602151
++Node: Functions Summary602279
++Node: Library Functions604981
++Ref: Library Functions-Footnote-1608589
++Ref: Library Functions-Footnote-2608732
++Node: Library Names608903
++Ref: Library Names-Footnote-1612361
++Ref: Library Names-Footnote-2612584
++Node: General Functions612670
++Node: Strtonum Function613773
++Node: Assert Function616795
++Node: Round Function620119
++Node: Cliff Random Function621660
++Node: Ordinal Functions622676
++Ref: Ordinal Functions-Footnote-1625739
++Ref: Ordinal Functions-Footnote-2625991
++Node: Join Function626202
++Ref: Join Function-Footnote-1627972
++Node: Getlocaltime Function628172
++Node: Readfile Function631916
++Node: Shell Quoting633888
++Node: Data File Management635289
++Node: Filetrans Function635921
++Node: Rewind Function640017
++Node: File Checking641403
++Ref: File Checking-Footnote-1642736
++Node: Empty Files642937
++Node: Ignoring Assigns644916
++Node: Getopt Function646466
++Ref: Getopt Function-Footnote-1657930
++Node: Passwd Functions658130
++Ref: Passwd Functions-Footnote-1666970
++Node: Group Functions667058
++Ref: Group Functions-Footnote-1674955
++Node: Walking Arrays675160
++Node: Library Functions Summary676760
++Node: Library Exercises678164
++Node: Sample Programs679444
++Node: Running Examples680214
++Node: Clones680942
++Node: Cut Program682166
++Node: Egrep Program691885
++Ref: Egrep Program-Footnote-1699383
++Node: Id Program699493
++Node: Split Program703138
++Ref: Split Program-Footnote-1706586
++Node: Tee Program706714
++Node: Uniq Program709503
++Node: Wc Program716922
++Ref: Wc Program-Footnote-1721172
++Node: Miscellaneous Programs721266
++Node: Dupword Program722479
++Node: Alarm Program724510
++Node: Translate Program729314
++Ref: Translate Program-Footnote-1733879
++Node: Labels Program734149
++Ref: Labels Program-Footnote-1737500
++Node: Word Sorting737584
++Node: History Sorting741655
++Node: Extract Program743491
++Node: Simple Sed751016
++Node: Igawk Program754084
++Ref: Igawk Program-Footnote-1768408
++Ref: Igawk Program-Footnote-2768609
++Ref: Igawk Program-Footnote-3768731
++Node: Anagram Program768846
++Node: Signature Program771903
++Node: Programs Summary773150
++Node: Programs Exercises774343
++Ref: Programs Exercises-Footnote-1778474
++Node: Advanced Features778565
++Node: Nondecimal Data780513
++Node: Array Sorting782103
++Node: Controlling Array Traversal782800
++Ref: Controlling Array Traversal-Footnote-1791133
++Node: Array Sorting Functions791251
++Ref: Array Sorting Functions-Footnote-1795140
++Node: Two-way I/O795336
++Ref: Two-way I/O-Footnote-1800281
++Ref: Two-way I/O-Footnote-2800467
++Node: TCP/IP Networking800549
++Node: Profiling803422
++Node: Advanced Features Summary811699
++Node: Internationalization813632
++Node: I18N and L10N815112
++Node: Explaining gettext815798
++Ref: Explaining gettext-Footnote-1820823
++Ref: Explaining gettext-Footnote-2821007
++Node: Programmer i18n821172
++Ref: Programmer i18n-Footnote-1826038
++Node: Translator i18n826087
++Node: String Extraction826881
++Ref: String Extraction-Footnote-1828012
++Node: Printf Ordering828098
++Ref: Printf Ordering-Footnote-1830884
++Node: I18N Portability830948
++Ref: I18N Portability-Footnote-1833403
++Node: I18N Example833466
++Ref: I18N Example-Footnote-1836269
++Node: Gawk I18N836341
++Node: I18N Summary836979
++Node: Debugger838318
++Node: Debugging839340
++Node: Debugging Concepts839781
++Node: Debugging Terms841634
++Node: Awk Debugging844206
++Node: Sample Debugging Session845100
++Node: Debugger Invocation845620
++Node: Finding The Bug847004
++Node: List of Debugger Commands853479
++Node: Breakpoint Control854812
++Node: Debugger Execution Control858508
++Node: Viewing And Changing Data861872
++Node: Execution Stack865250
++Node: Debugger Info866887
++Node: Miscellaneous Debugger Commands870904
++Node: Readline Support875933
++Node: Limitations876825
++Node: Debugging Summary878939
++Node: Arbitrary Precision Arithmetic880107
++Node: Computer Arithmetic881523
++Ref: table-numeric-ranges885121
++Ref: Computer Arithmetic-Footnote-1885980
++Node: Math Definitions886037
++Ref: table-ieee-formats889325
++Ref: Math Definitions-Footnote-1889929
++Node: MPFR features890034
++Node: FP Math Caution891705
++Ref: FP Math Caution-Footnote-1892755
++Node: Inexactness of computations893124
++Node: Inexact representation894083
++Node: Comparing FP Values895440
++Node: Errors accumulate896522
++Node: Getting Accuracy897955
++Node: Try To Round900617
++Node: Setting precision901516
++Ref: table-predefined-precision-strings902200
++Node: Setting the rounding mode903989
++Ref: table-gawk-rounding-modes904353
++Ref: Setting the rounding mode-Footnote-1907808
++Node: Arbitrary Precision Integers907987
++Ref: Arbitrary Precision Integers-Footnote-1912887
++Node: POSIX Floating Point Problems913036
++Ref: POSIX Floating Point Problems-Footnote-1916909
++Node: Floating point summary916947
++Node: Dynamic Extensions919141
++Node: Extension Intro920693
++Node: Plugin License921959
++Node: Extension Mechanism Outline922756
++Ref: figure-load-extension923184
++Ref: figure-register-new-function924664
++Ref: figure-call-new-function925668
++Node: Extension API Description927654
++Node: Extension API Functions Introduction929104
++Node: General Data Types933928
++Ref: General Data Types-Footnote-1939667
++Node: Memory Allocation Functions939966
++Ref: Memory Allocation Functions-Footnote-1942805
++Node: Constructor Functions942901
++Node: Registration Functions944635
++Node: Extension Functions945320
++Node: Exit Callback Functions947617
++Node: Extension Version String948865
++Node: Input Parsers949530
++Node: Output Wrappers959409
++Node: Two-way processors963924
++Node: Printing Messages966128
++Ref: Printing Messages-Footnote-1967204
++Node: Updating `ERRNO'967356
++Node: Requesting Values968096
++Ref: table-value-types-returned968824
++Node: Accessing Parameters969781
++Node: Symbol Table Access971012
++Node: Symbol table by name971526
++Node: Symbol table by cookie973507
++Ref: Symbol table by cookie-Footnote-1977651
++Node: Cached values977714
++Ref: Cached values-Footnote-1981213
++Node: Array Manipulation981304
++Ref: Array Manipulation-Footnote-1982402
++Node: Array Data Types982439
++Ref: Array Data Types-Footnote-1985094
++Node: Array Functions985186
++Node: Flattening Arrays989040
++Node: Creating Arrays995932
++Node: Extension API Variables1000703
++Node: Extension Versioning1001339
++Node: Extension API Informational Variables1003240
++Node: Extension API Boilerplate1004305
++Node: Finding Extensions1008114
++Node: Extension Example1008674
++Node: Internal File Description1009446
++Node: Internal File Ops1013513
++Ref: Internal File Ops-Footnote-11025183
++Node: Using Internal File Ops1025323
++Ref: Using Internal File Ops-Footnote-11027706
++Node: Extension Samples1027979
++Node: Extension Sample File Functions1029505
++Node: Extension Sample Fnmatch1037143
++Node: Extension Sample Fork1038634
++Node: Extension Sample Inplace1039849
++Node: Extension Sample Ord1041524
++Node: Extension Sample Readdir1042360
++Ref: table-readdir-file-types1043236
++Node: Extension Sample Revout1044047
++Node: Extension Sample Rev2way1044637
++Node: Extension Sample Read write array1045377
++Node: Extension Sample Readfile1047317
++Node: Extension Sample Time1048412
++Node: Extension Sample API Tests1049761
++Node: gawkextlib1050252
++Node: Extension summary1052910
++Node: Extension Exercises1056599
++Node: Language History1057321
++Node: V7/SVR3.11058977
++Node: SVR41061158
++Node: POSIX1062603
++Node: BTL1063992
++Node: POSIX/GNU1064726
++Node: Feature History1070607
++Node: Common Extensions1084401
++Node: Ranges and Locales1085725
++Ref: Ranges and Locales-Footnote-11090343
++Ref: Ranges and Locales-Footnote-21090370
++Ref: Ranges and Locales-Footnote-31090604
++Node: Contributors1090825
++Node: History summary1096366
++Node: Installation1097736
++Node: Gawk Distribution1098682
++Node: Getting1099166
++Node: Extracting1099989
++Node: Distribution contents1101624
++Node: Unix Installation1107689
++Node: Quick Installation1108372
++Node: Shell Startup Files1110783
++Node: Additional Configuration Options1111862
++Node: Configuration Philosophy1113601
++Node: Non-Unix Installation1115970
++Node: PC Installation1116428
++Node: PC Binary Installation1117747
++Node: PC Compiling1119595
++Ref: PC Compiling-Footnote-11122616
++Node: PC Testing1122725
++Node: PC Using1123901
++Node: Cygwin1128016
++Node: MSYS1128839
++Node: VMS Installation1129339
++Node: VMS Compilation1130131
++Ref: VMS Compilation-Footnote-11131353
++Node: VMS Dynamic Extensions1131411
++Node: VMS Installation Details1133095
++Node: VMS Running1135347
++Node: VMS GNV1138183
++Node: VMS Old Gawk1138917
++Node: Bugs1139387
++Node: Other Versions1143270
++Node: Installation summary1149694
++Node: Notes1150750
++Node: Compatibility Mode1151615
++Node: Additions1152397
++Node: Accessing The Source1153322
++Node: Adding Code1154757
++Node: New Ports1160914
++Node: Derived Files1165396
++Ref: Derived Files-Footnote-11170871
++Ref: Derived Files-Footnote-21170905
++Ref: Derived Files-Footnote-31171501
++Node: Future Extensions1171615
++Node: Implementation Limitations1172221
++Node: Extension Design1173469
++Node: Old Extension Problems1174623
++Ref: Old Extension Problems-Footnote-11176140
++Node: Extension New Mechanism Goals1176197
++Ref: Extension New Mechanism Goals-Footnote-11179557
++Node: Extension Other Design Decisions1179746
++Node: Extension Future Growth1181854
++Node: Old Extension Mechanism1182690
++Node: Notes summary1184452
++Node: Basic Concepts1185638
++Node: Basic High Level1186319
++Ref: figure-general-flow1186591
++Ref: figure-process-flow1187190
++Ref: Basic High Level-Footnote-11190419
++Node: Basic Data Typing1190604
++Node: Glossary1193932
++Node: Copying1225861
++Node: GNU Free Documentation License1263417
++Node: Index1288553
End Tag Table
diff --cc doc/gawk.texi
index b113dfe,33c6575..d61772e
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@@ -10488,68 -10434,7 +10435,64 @@@ when closing a pipe
@end cartouche
@end ifnotdocbook
- @c ENDOFRANGE ifc
- @c ENDOFRANGE ofc
- @c ENDOFRANGE pc
- @c ENDOFRANGE cc
address@hidden Nonfatal
address@hidden Enabling Nonfatal Output
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+In standard @command{awk}, output with @code{print} or @code{printf}
+to a nonexistent file, or some other I/O error (such as filling up the
+disk) is a fatal error.
+
address@hidden
+$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
address@hidden gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No
such file or directory)
address@hidden example
+
address@hidden makes it possible to detect that an error has
+occurred, allowing you to possibly recover from the error, or
+at least print an error message of your choosing before exiting.
+You can do this in one of two ways:
+
address@hidden @bullet
address@hidden
+For all output files, by assigning any value to @code{PROCINFO["nonfatal"]}.
+
address@hidden
+On a per-file basis, by assigning any value to
address@hidden@var{filename}, "nonfatal"]}.
+Here, @var{filename} is the name of the file to which
+you wish output to be nonfatal.
address@hidden itemize
+
+Once you have enabled nonfatal output, you must check @code{ERRNO}
+after every relevant @code{print} or @code{printf} statement to
+see if something went wrong. It is also a good idea to initialize
address@hidden to zero before attempting the output. For example:
+
address@hidden
+$ @kbd{gawk '}
+> @kbd{BEGIN @{}
+> @kbd{ PROCINFO["nonfatal"] = 1}
+> @kbd{ ERRNO = 0}
+> @kbd{ print "hi" > "/no/such/file"}
+> @kbd{ if (ERRNO) @{}
+> @kbd{ print("Output failed:", ERRNO) > "/dev/stderr"}
+> @kbd{ exit 1}
+> @kbd{ @}}
+> @address@hidden'}
address@hidden Output failed: No such file or directory
address@hidden example
+
+Here, @command{gawk} did not produce a fatal error; instead
+it let the @command{awk} program code detect the problem and handle it.
+
+This mechanism works also for standard output and standard error.
+For standard output, you may use @code{PROCINFO["-", "nonfatal"]}
+or @code{PROCINFO["/dev/stdout", "nonfatal"]}. For standard error, use
address@hidden"/dev/stderr", "nonfatal"]}.
+
@node Output Summary
@section Summary
diff --cc doc/gawktexi.in
index ddf5374,6a89010..98e749d
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@@ -9985,68 -9930,7 +9931,64 @@@ In POSIX mode (@pxref{Options}), @comma
when closing a pipe.
@end sidebar
- @c ENDOFRANGE ifc
- @c ENDOFRANGE ofc
- @c ENDOFRANGE pc
- @c ENDOFRANGE cc
address@hidden Nonfatal
address@hidden Enabling Nonfatal Output
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+In standard @command{awk}, output with @code{print} or @code{printf}
+to a nonexistent file, or some other I/O error (such as filling up the
+disk) is a fatal error.
+
address@hidden
+$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
address@hidden gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No
such file or directory)
address@hidden example
+
address@hidden makes it possible to detect that an error has
+occurred, allowing you to possibly recover from the error, or
+at least print an error message of your choosing before exiting.
+You can do this in one of two ways:
+
address@hidden @bullet
address@hidden
+For all output files, by assigning any value to @code{PROCINFO["nonfatal"]}.
+
address@hidden
+On a per-file basis, by assigning any value to
address@hidden@var{filename}, "nonfatal"]}.
+Here, @var{filename} is the name of the file to which
+you wish output to be nonfatal.
address@hidden itemize
+
+Once you have enabled nonfatal output, you must check @code{ERRNO}
+after every relevant @code{print} or @code{printf} statement to
+see if something went wrong. It is also a good idea to initialize
address@hidden to zero before attempting the output. For example:
+
address@hidden
+$ @kbd{gawk '}
+> @kbd{BEGIN @{}
+> @kbd{ PROCINFO["nonfatal"] = 1}
+> @kbd{ ERRNO = 0}
+> @kbd{ print "hi" > "/no/such/file"}
+> @kbd{ if (ERRNO) @{}
+> @kbd{ print("Output failed:", ERRNO) > "/dev/stderr"}
+> @kbd{ exit 1}
+> @kbd{ @}}
+> @address@hidden'}
address@hidden Output failed: No such file or directory
address@hidden example
+
+Here, @command{gawk} did not produce a fatal error; instead
+it let the @command{awk} program code detect the problem and handle it.
+
+This mechanism works also for standard output and standard error.
+For standard output, you may use @code{PROCINFO["-", "nonfatal"]}
+or @code{PROCINFO["/dev/stdout", "nonfatal"]}. For standard error, use
address@hidden"/dev/stderr", "nonfatal"]}.
+
@node Output Summary
@section Summary
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 56 +
INSTALL | 6 +-
Makefile.in | 48 +-
NEWS | 20 +-
aclocal.m4 | 65 +-
awk.h | 5 +-
awkgram.c | 746 +++++-----
awkgram.y | 24 +-
awklib/Makefile.in | 24 +-
awklib/eg/lib/assert.awk | 2 +-
awklib/eg/lib/bits2str.awk | 2 +-
awklib/eg/lib/quicksort.awk | 5 +-
builtin.c | 20 +-
command.c | 4 +-
compile | 2 +-
config.guess | 169 +--
config.sub | 32 +-
configure | 68 +-
configure.ac | 4 +-
depcomp | 37 +-
doc/ChangeLog | 46 +
doc/Makefile.in | 24 +-
doc/gawk.1 | 11 +-
doc/gawk.info | 2674 ++++++++++++++++++----------------
doc/gawk.texi | 1530 +++++++++-----------
doc/gawktexi.in | 1500 +++++++++-----------
extension/ChangeLog | 8 +
extension/INSTALL | 6 +-
extension/Makefile.in | 115 +-
extension/aclocal.m4 | 76 +-
extension/build-aux/ar-lib | 2 +-
extension/build-aux/compile | 2 +-
extension/build-aux/config.guess | 169 +--
extension/build-aux/config.sub | 32 +-
extension/build-aux/depcomp | 37 +-
extension/build-aux/install-sh | 31 +-
extension/build-aux/ltmain.sh | 130 ++-
extension/build-aux/missing | 6 +-
extension/configh.in | 22 -
extension/configure | 2995 ++++++++------------------------------
extension/configure.ac | 5 +-
extension/m4/ChangeLog | 4 +
extension/m4/gettext.m4 | 383 -----
extension/m4/iconv.m4 | 214 ---
extension/m4/intlmacosx.m4 | 51 -
extension/m4/libtool.m4 | 527 ++++++--
extension/m4/ltoptions.m4 | 57 +-
extension/m4/ltsugar.m4 | 2 +-
extension/m4/ltversion.m4 | 12 +-
extension/m4/lt~obsolete.m4 | 2 +-
extension/m4/po.m4 | 449 ------
extras/Makefile.in | 24 +-
install-sh | 31 +-
io.c | 46 +-
m4/ChangeLog | 5 +
m4/iconv.m4 | 61 +-
m4/po.m4 | 2 +-
main.c | 1 +
missing | 6 +-
po/ChangeLog | 4 +
po/POTFILES.in | 6 +
str_array.c | 61 +
symbol.c | 61 +
test/ChangeLog | 13 +
test/Makefile.am | 18 +-
test/Makefile.in | 50 +-
test/Maketests | 5 +
test/callparam.awk | 6 +
test/callparam.ok | 2 +
test/exit.sh | 2 +-
test/paramasfunc1.awk | 9 +
test/paramasfunc1.ok | 3 +
test/paramasfunc2.awk | 10 +
test/paramasfunc2.ok | 3 +
ylwrap | 59 +-
75 files changed, 5318 insertions(+), 7631 deletions(-)
delete mode 100644 extension/m4/gettext.m4
delete mode 100644 extension/m4/iconv.m4
delete mode 100644 extension/m4/intlmacosx.m4
delete mode 100644 extension/m4/po.m4
create mode 100644 test/callparam.awk
create mode 100644 test/callparam.ok
create mode 100644 test/paramasfunc1.awk
create mode 100644 test/paramasfunc1.ok
create mode 100644 test/paramasfunc2.awk
create mode 100644 test/paramasfunc2.ok
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gawk-diffs] [SCM] gawk branch, non-fatal-io, updated. gawk-4.1.0-1084-g4f07d2d,
Arnold Robbins <=