[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gawk-diffs] [SCM] gawk branch, non-fatal-io-2, created. gawk-4.1.0-1097
From: |
Arnold Robbins |
Subject: |
[gawk-diffs] [SCM] gawk branch, non-fatal-io-2, created. gawk-4.1.0-1097-g0e38201 |
Date: |
Sun, 08 Feb 2015 17:56:08 +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-2 has been created
at 0e38201f5879cc91c90876b2b9b219a308e3a2d2 (commit)
- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=0e38201f5879cc91c90876b2b9b219a308e3a2d2
commit 0e38201f5879cc91c90876b2b9b219a308e3a2d2
Merge: 34c33ee 7306300
Author: Arnold D. Robbins <address@hidden>
Date: Sun Feb 8 19:55:45 2015 +0200
Merge branch 'master' into non-fatal-io-2
diff --cc ChangeLog
index c61e8ee,f116265..61362b7
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,21 -1,104 +1,125 @@@
++<<<<<<< HEAD
+2015-02-08 Andrew J. Schorr <address@hidden>
+
+ * awk.h (RED_NON_FATAL): Removed.
+ (redirect): Add new failure_fatal parameter.
+ (is_non_fatal_redirect): Add declaration.
+ * builtin.c (efwrite): Rework check for non-fatal.
+ (do_printf): Adjust calls to redirect.
+ (do_print_rec): Ditto. Move check for redirection error up.
+ * io.c (redflags2str): Remove RED_NON_FATAL.
+ (redirect): Add new failure_fatal parameter. Simplify the code.
+ (is_non_fatal_redirect): New function.
+ (do_getline_redir): Adjust calls to redirect.
+
+2014-12-27 Arnold D. Robbins <address@hidden>
+
+ * awk.h (is_non_fatal_std): Declare new function.
+ * io.c (is_non_fatal_std): New function.
+ * builtin.c (efwrite): Call it.
++=======
+ 2015-02-07 Arnold D. Robbins <address@hidden>
+
+ * regcomp.c, regex.c, regex.h, regex_internal.c, regex_internal.h,
+ regexec.c: Sync with GLIBC. Mostly copyright date updates.
+
+ 2015-02-05 Andrew J. Schorr <address@hidden>
+
+ * eval.c (set_IGNORECASE): If IGNORECASE has a numeric value, try
+ using that before treating it as a string. This fixes a problem
+ where setting -v IGNORECASE=0 on the command line was not working
+ properly.
+
+ 2015-02-01 Arnold D. Robbins <address@hidden>
+
+ Move POSIX requirement for disallowing paramater names with the
+ same name as a function into --posix.
+
+ * NEWS: Document it.
+ * awkgram.y (parse_program): Check do_posix before calling
+ check_param_names().
+ * symbol.c (check_param_names): Set up a fake node and call
+ in_array() for function parameter names instead of linear
+ searching the function list a second time. Thanks to Andrew
+ Schorr for the motivation.
+
+ 2015-01-30 Arnold D. Robbins <address@hidden>
+
+ Don't allow function parameter names to be the same as function
+ names - required by POSIX. Bug first reported in comp.lang.awk.
+
+ In addition, don't allow use of a parameter as a function name
+ in a call (but it's ok in indirect calls).
+
+ * NEWS: Updated.
+ * awk.h (check_param_names): Add declaration.
+ * awkgram.y (at_seen): New variable. Communicates between
+ yylex() and the parser.
+ (FUNC_CALL production): Check at_seen and check that the identifier
+ is a function name.
+ (parse_program): Call check_param_names() and set errcount.
+ (yylex): Set at_seen after seeing an at-sign.
+ * symbol.c (check_param_names): New function.
+
+ 2015-01-24 Arnold D. Robbins <address@hidden>
+
+ Infrastructure updates.
+
+ Bison 3.0.4. Automake 1.15. Gettext 0.19.4.
+
+ 2015-01-20 Arnold D. Robbins <address@hidden>
+
+ * gawkapi.c (api_set_array_element): Remove useless call to
+ make_aname.
+ * symbol.c (load_symbols): Ditto.
+ Thanks to Andrew Schorr for pointing out the problem.
+
+ 2015-01-19 Arnold D. Robbins <address@hidden>
+
+ * awkgram.c: Update to bison 3.0.3.
+ * command.c: Ditto.
+ * NEWS: Note same.
+
+ 2015-01-16 Stephen Davies <address@hidden>
+
+ * awkgram.y (rule): Set first_rule to false. Catches more cases
+ for gathering comments. Thanks to Hermann Peifer for the test case.
+
+ 2015-01-15 Arnold D. Robbins <address@hidden>
+
+ * dfa.h, dfa.c: Sync with grep. Mainly copyright updates.
+ * getopt.c, getopt.h, getopt1.c getopt_int.h: Sync with GLIBC.
+ Mainly copyright updates, one minor code fix.
+
+ 2015-01-14 Arnold D. Robbins <address@hidden>
+
+ Remove deferred variables.
+
+ * awk.h (register_deferred_variable): Remove declaration.
+ * awkgram.y (is_deferred_variable, process_deferred,
+ symtab_used, extensions_used, deferred_variables,
+ process_deferred): Remove declarations, bodies, and uses.
+ * builtin.c (do_length): Update comment.
+ * main.c (init_vars): Just call load_procinfo() and `load_environ()'.
+
+ 2015-01-07 Arnold D. Robbins <address@hidden>
+
+ * configure.ac: Update debug flags if developing.
+ * awkgram.y (yylex): Regex parsing bug fix for bracket expressions.
+ Thanks to Mike Brennan for the report.
+ * builtin.c (format_tree): Catch non-use of count$ for dynamic
+ field width or precision.
+
+ Unrelated:
+
+ Load deferred variables if extensions are used; they might
+ want to access PROCINFO and/or ENVIRON. Thanks to Andrew Schorr
+ for pointing out the issue.
+
+ * awkgram.y (extensions_used): New variable. Set it on @load.
+ (do_add_scrfile): Set it on -l.
+ (process_deferred): Check it also.
++>>>>>>> master
2014-12-24 Arnold D. Robbins <address@hidden>
diff --cc doc/ChangeLog
index ba47316,bfb0dbe..5d8c4a5
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@@ -1,8 -1,66 +1,71 @@@
+ 2015-02-08 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+
+ 2015-02-06 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+
+ 2015-02-04 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+ * gawktexi.in: Update various version-related bits of info.
+
+ 2015-02-02 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+
+ 2015-02-01 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: POSIX requirement that function parameters cannot
+ have the same name as a function is now --posix.
+ Restore indirectcall example.
+
+ More O'Reilly fixes.
+
+ 2015-01-30 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: Document POSIX requirement that function parameters
+ cannot have the same name as a function. Fix indirectcall example.
+
+ 2015-01-27 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+ And still more. Also, fix @code --> @command in a number of places.
+
+ 2015-01-26 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+
+ 2015-01-25 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: Fix a bad URL. And another one.
+ More O'Reilly fixes.
+
+ 2015-01-23 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+ (Glossary): Many new entries from Antonio Giovanni Columbo.
+
+ 2015-01-21 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+ Remove obsolete start/end of range indexing comments.
+
+ 2015-01-20 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: O'Reilly fixes.
+
+ 2015-01-19 Arnold D. Robbins <address@hidden>
+
+ * gawkinet.texi: Fix capitalization in document title.
+ * gawktexi.in: Here we go again: Starting on more O'Reilly fixes.
+
+2014-12-27 Arnold D. Robbins <address@hidden>
+
+ * gawktexi.in: Add info that nonfatal I/O works with stdout and
+ stderr. Revise version info and what was added when.
+
2014-12-26 Antonio Giovanni Colombo <address@hidden>
* gawktexi.in (Glossary): Really sort the items.
diff --cc doc/gawk.info
index 08ec445,21e8fd3..d83370e
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@@ -34543,561 -34656,560 +34720,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 Operators163219
-Ref: Regexp Operators-Footnote-1170629
-Ref: Regexp Operators-Footnote-2170776
-Node: Bracket Expressions170874
-Ref: table-char-classes172889
-Node: Leftmost Longest175831
-Node: Computed Regexps177133
-Node: GNU Regexp Operators180562
-Node: Case-sensitivity184234
-Ref: Case-sensitivity-Footnote-1187119
-Ref: Case-sensitivity-Footnote-2187354
-Node: Regexp Summary187462
-Node: Reading Files188929
-Node: Records191022
-Node: awk split records191755
-Node: gawk split records196684
-Ref: gawk split records-Footnote-1201223
-Node: Fields201260
-Ref: Fields-Footnote-1204038
-Node: Nonconstant Fields204124
-Ref: Nonconstant Fields-Footnote-1206362
-Node: Changing Fields206565
-Node: Field Separators212496
-Node: Default Field Splitting215200
-Node: Regexp Field Splitting216317
-Node: Single Character Fields219667
-Node: Command Line Field Separator220726
-Node: Full Line Fields223943
-Ref: Full Line Fields-Footnote-1225464
-Ref: Full Line Fields-Footnote-2225510
-Node: Field Splitting Summary225611
-Node: Constant Size227685
-Node: Splitting By Content232268
-Ref: Splitting By Content-Footnote-1236233
-Node: Multiple Line236396
-Ref: Multiple Line-Footnote-1242277
-Node: Getline242456
-Node: Plain Getline244663
-Node: Getline/Variable247303
-Node: Getline/File248452
-Node: Getline/Variable/File249837
-Ref: Getline/Variable/File-Footnote-1251440
-Node: Getline/Pipe251527
-Node: Getline/Variable/Pipe254205
-Node: Getline/Coprocess255336
-Node: Getline/Variable/Coprocess256600
-Node: Getline Notes257339
-Node: Getline Summary260133
-Ref: table-getline-variants260545
-Node: Read Timeout261374
-Ref: Read Timeout-Footnote-1265211
-Node: Command-line directories265269
-Node: Input Summary266174
-Node: Input Exercises269559
-Node: Printing270287
-Node: Print272064
-Node: Print Examples273521
-Node: Output Separators276300
-Node: OFMT278318
-Node: Printf279673
-Node: Basic Printf280458
-Node: Control Letters282030
-Node: Format Modifiers286015
-Node: Printf Examples292025
-Node: Redirection294511
-Node: Special FD301349
-Ref: Special FD-Footnote-1304515
-Node: Special Files304589
-Node: Other Inherited Files305206
-Node: Special Network306206
-Node: Special Caveats307068
-Node: Close Files And Pipes308017
-Ref: Close Files And Pipes-Footnote-1315208
-Ref: Close Files And Pipes-Footnote-2315356
-Node: Output Summary315506
-Node: Output Exercises316504
-Node: Expressions317184
-Node: Values318373
-Node: Constants319050
-Node: Scalar Constants319741
-Ref: Scalar Constants-Footnote-1320603
-Node: Nondecimal-numbers320853
-Node: Regexp Constants323863
-Node: Using Constant Regexps324389
-Node: Variables327552
-Node: Using Variables328209
-Node: Assignment Options330120
-Node: Conversion331995
-Node: Strings And Numbers332519
-Ref: Strings And Numbers-Footnote-1335584
-Node: Locale influences conversions335693
-Ref: table-locale-affects338439
-Node: All Operators339031
-Node: Arithmetic Ops339660
-Node: Concatenation342165
-Ref: Concatenation-Footnote-1344984
-Node: Assignment Ops345091
-Ref: table-assign-ops350070
-Node: Increment Ops351380
-Node: Truth Values and Conditions354811
-Node: Truth Values355894
-Node: Typing and Comparison356943
-Node: Variable Typing357759
-Node: Comparison Operators361426
-Ref: table-relational-ops361836
-Node: POSIX String Comparison365331
-Ref: POSIX String Comparison-Footnote-1366403
-Node: Boolean Ops366542
-Ref: Boolean Ops-Footnote-1371020
-Node: Conditional Exp371111
-Node: Function Calls372849
-Node: Precedence376729
-Node: Locales380389
-Node: Expressions Summary382021
-Node: Patterns and Actions384592
-Node: Pattern Overview385712
-Node: Regexp Patterns387391
-Node: Expression Patterns387934
-Node: Ranges391643
-Node: BEGIN/END394750
-Node: Using BEGIN/END395511
-Ref: Using BEGIN/END-Footnote-1398247
-Node: I/O And BEGIN/END398353
-Node: BEGINFILE/ENDFILE400668
-Node: Empty403565
-Node: Using Shell Variables403882
-Node: Action Overview406155
-Node: Statements408481
-Node: If Statement410329
-Node: While Statement411824
-Node: Do Statement413852
-Node: For Statement415000
-Node: Switch Statement418158
-Node: Break Statement420540
-Node: Continue Statement422581
-Node: Next Statement424408
-Node: Nextfile Statement426789
-Node: Exit Statement429417
-Node: Built-in Variables431828
-Node: User-modified432961
-Ref: User-modified-Footnote-1440664
-Node: Auto-set440726
-Ref: Auto-set-Footnote-1454435
-Ref: Auto-set-Footnote-2454640
-Node: ARGC and ARGV454696
-Node: Pattern Action Summary458914
-Node: Arrays461347
-Node: Array Basics462676
-Node: Array Intro463520
-Ref: figure-array-elements465454
-Ref: Array Intro-Footnote-1468074
-Node: Reference to Elements468202
-Node: Assigning Elements470664
-Node: Array Example471155
-Node: Scanning an Array472914
-Node: Controlling Scanning475934
-Ref: Controlling Scanning-Footnote-1481328
-Node: Numeric Array Subscripts481644
-Node: Uninitialized Subscripts483829
-Node: Delete485446
-Ref: Delete-Footnote-1488195
-Node: Multidimensional488252
-Node: Multiscanning491349
-Node: Arrays of Arrays492938
-Node: Arrays Summary497692
-Node: Functions499783
-Node: Built-in500822
-Node: Calling Built-in501900
-Node: Numeric Functions503895
-Ref: Numeric Functions-Footnote-1508713
-Ref: Numeric Functions-Footnote-2509070
-Ref: Numeric Functions-Footnote-3509118
-Node: String Functions509390
-Ref: String Functions-Footnote-1532891
-Ref: String Functions-Footnote-2533020
-Ref: String Functions-Footnote-3533268
-Node: Gory Details533355
-Ref: table-sub-escapes535136
-Ref: table-sub-proposed536651
-Ref: table-posix-sub538013
-Ref: table-gensub-escapes539550
-Ref: Gory Details-Footnote-1540383
-Node: I/O Functions540534
-Ref: I/O Functions-Footnote-1547770
-Node: Time Functions547917
-Ref: Time Functions-Footnote-1558426
-Ref: Time Functions-Footnote-2558494
-Ref: Time Functions-Footnote-3558652
-Ref: Time Functions-Footnote-4558763
-Ref: Time Functions-Footnote-5558875
-Ref: Time Functions-Footnote-6559102
-Node: Bitwise Functions559368
-Ref: table-bitwise-ops559930
-Ref: Bitwise Functions-Footnote-1564258
-Node: Type Functions564430
-Node: I18N Functions565582
-Node: User-defined567229
-Node: Definition Syntax568034
-Ref: Definition Syntax-Footnote-1573693
-Node: Function Example573764
-Ref: Function Example-Footnote-1576685
-Node: Function Caveats576707
-Node: Calling A Function577225
-Node: Variable Scope578183
-Node: Pass By Value/Reference581176
-Node: Return Statement584673
-Node: Dynamic Typing587652
-Node: Indirect Calls588581
-Ref: Indirect Calls-Footnote-1599887
-Node: Functions Summary600015
-Node: Library Functions602717
-Ref: Library Functions-Footnote-1606325
-Ref: Library Functions-Footnote-2606468
-Node: Library Names606639
-Ref: Library Names-Footnote-1610097
-Ref: Library Names-Footnote-2610320
-Node: General Functions610406
-Node: Strtonum Function611509
-Node: Assert Function614531
-Node: Round Function617855
-Node: Cliff Random Function619396
-Node: Ordinal Functions620412
-Ref: Ordinal Functions-Footnote-1623475
-Ref: Ordinal Functions-Footnote-2623727
-Node: Join Function623938
-Ref: Join Function-Footnote-1625708
-Node: Getlocaltime Function625908
-Node: Readfile Function629652
-Node: Shell Quoting631624
-Node: Data File Management633025
-Node: Filetrans Function633657
-Node: Rewind Function637753
-Node: File Checking639139
-Ref: File Checking-Footnote-1640472
-Node: Empty Files640673
-Node: Ignoring Assigns642652
-Node: Getopt Function644202
-Ref: Getopt Function-Footnote-1655666
-Node: Passwd Functions655866
-Ref: Passwd Functions-Footnote-1664706
-Node: Group Functions664794
-Ref: Group Functions-Footnote-1672691
-Node: Walking Arrays672896
-Node: Library Functions Summary674496
-Node: Library Exercises675900
-Node: Sample Programs677180
-Node: Running Examples677950
-Node: Clones678678
-Node: Cut Program679902
-Node: Egrep Program689622
-Ref: Egrep Program-Footnote-1697125
-Node: Id Program697235
-Node: Split Program700911
-Ref: Split Program-Footnote-1704365
-Node: Tee Program704493
-Node: Uniq Program707282
-Node: Wc Program714701
-Ref: Wc Program-Footnote-1718951
-Node: Miscellaneous Programs719045
-Node: Dupword Program720258
-Node: Alarm Program722289
-Node: Translate Program727094
-Ref: Translate Program-Footnote-1731657
-Node: Labels Program731927
-Ref: Labels Program-Footnote-1735278
-Node: Word Sorting735362
-Node: History Sorting739432
-Node: Extract Program741267
-Node: Simple Sed748791
-Node: Igawk Program751861
-Ref: Igawk Program-Footnote-1766187
-Ref: Igawk Program-Footnote-2766388
-Ref: Igawk Program-Footnote-3766510
-Node: Anagram Program766625
-Node: Signature Program769686
-Node: Programs Summary770933
-Node: Programs Exercises772154
-Ref: Programs Exercises-Footnote-1776285
-Node: Advanced Features776376
-Node: Nondecimal Data778358
-Node: Array Sorting779948
-Node: Controlling Array Traversal780648
-Ref: Controlling Array Traversal-Footnote-1789014
-Node: Array Sorting Functions789132
-Ref: Array Sorting Functions-Footnote-1793018
-Node: Two-way I/O793214
-Ref: Two-way I/O-Footnote-1798159
-Ref: Two-way I/O-Footnote-2798345
-Node: TCP/IP Networking798427
-Node: Profiling801299
-Node: Advanced Features Summary809570
-Node: Internationalization811503
-Node: I18N and L10N812983
-Node: Explaining gettext813669
-Ref: Explaining gettext-Footnote-1818694
-Ref: Explaining gettext-Footnote-2818878
-Node: Programmer i18n819043
-Ref: Programmer i18n-Footnote-1823919
-Node: Translator i18n823968
-Node: String Extraction824762
-Ref: String Extraction-Footnote-1825893
-Node: Printf Ordering825979
-Ref: Printf Ordering-Footnote-1828765
-Node: I18N Portability828829
-Ref: I18N Portability-Footnote-1831285
-Node: I18N Example831348
-Ref: I18N Example-Footnote-1834151
-Node: Gawk I18N834223
-Node: I18N Summary834867
-Node: Debugger836207
-Node: Debugging837229
-Node: Debugging Concepts837670
-Node: Debugging Terms839480
-Node: Awk Debugging842052
-Node: Sample Debugging Session842958
-Node: Debugger Invocation843492
-Node: Finding The Bug844877
-Node: List of Debugger Commands851356
-Node: Breakpoint Control852688
-Node: Debugger Execution Control856365
-Node: Viewing And Changing Data859724
-Node: Execution Stack863100
-Node: Debugger Info864735
-Node: Miscellaneous Debugger Commands868780
-Node: Readline Support873781
-Node: Limitations874675
-Node: Debugging Summary876790
-Node: Arbitrary Precision Arithmetic877964
-Node: Computer Arithmetic879380
-Ref: table-numeric-ranges882978
-Ref: Computer Arithmetic-Footnote-1883837
-Node: Math Definitions883894
-Ref: table-ieee-formats887182
-Ref: Math Definitions-Footnote-1887786
-Node: MPFR features887891
-Node: FP Math Caution889562
-Ref: FP Math Caution-Footnote-1890612
-Node: Inexactness of computations890981
-Node: Inexact representation891940
-Node: Comparing FP Values893297
-Node: Errors accumulate894379
-Node: Getting Accuracy895812
-Node: Try To Round898474
-Node: Setting precision899373
-Ref: table-predefined-precision-strings900057
-Node: Setting the rounding mode901846
-Ref: table-gawk-rounding-modes902210
-Ref: Setting the rounding mode-Footnote-1905665
-Node: Arbitrary Precision Integers905844
-Ref: Arbitrary Precision Integers-Footnote-1910744
-Node: POSIX Floating Point Problems910893
-Ref: POSIX Floating Point Problems-Footnote-1914766
-Node: Floating point summary914804
-Node: Dynamic Extensions916998
-Node: Extension Intro918550
-Node: Plugin License919816
-Node: Extension Mechanism Outline920613
-Ref: figure-load-extension921041
-Ref: figure-register-new-function922521
-Ref: figure-call-new-function923525
-Node: Extension API Description925511
-Node: Extension API Functions Introduction926961
-Node: General Data Types931785
-Ref: General Data Types-Footnote-1937524
-Node: Memory Allocation Functions937823
-Ref: Memory Allocation Functions-Footnote-1940662
-Node: Constructor Functions940758
-Node: Registration Functions942492
-Node: Extension Functions943177
-Node: Exit Callback Functions945474
-Node: Extension Version String946722
-Node: Input Parsers947387
-Node: Output Wrappers957266
-Node: Two-way processors961781
-Node: Printing Messages963985
-Ref: Printing Messages-Footnote-1965061
-Node: Updating `ERRNO'965213
-Node: Requesting Values965953
-Ref: table-value-types-returned966681
-Node: Accessing Parameters967638
-Node: Symbol Table Access968869
-Node: Symbol table by name969383
-Node: Symbol table by cookie971364
-Ref: Symbol table by cookie-Footnote-1975508
-Node: Cached values975571
-Ref: Cached values-Footnote-1979070
-Node: Array Manipulation979161
-Ref: Array Manipulation-Footnote-1980259
-Node: Array Data Types980296
-Ref: Array Data Types-Footnote-1982951
-Node: Array Functions983043
-Node: Flattening Arrays986897
-Node: Creating Arrays993789
-Node: Extension API Variables998560
-Node: Extension Versioning999196
-Node: Extension API Informational Variables1001097
-Node: Extension API Boilerplate1002162
-Node: Finding Extensions1005971
-Node: Extension Example1006531
-Node: Internal File Description1007303
-Node: Internal File Ops1011370
-Ref: Internal File Ops-Footnote-11023040
-Node: Using Internal File Ops1023180
-Ref: Using Internal File Ops-Footnote-11025563
-Node: Extension Samples1025836
-Node: Extension Sample File Functions1027362
-Node: Extension Sample Fnmatch1035000
-Node: Extension Sample Fork1036491
-Node: Extension Sample Inplace1037706
-Node: Extension Sample Ord1039381
-Node: Extension Sample Readdir1040217
-Ref: table-readdir-file-types1041093
-Node: Extension Sample Revout1041904
-Node: Extension Sample Rev2way1042494
-Node: Extension Sample Read write array1043234
-Node: Extension Sample Readfile1045174
-Node: Extension Sample Time1046269
-Node: Extension Sample API Tests1047618
-Node: gawkextlib1048109
-Node: Extension summary1050767
-Node: Extension Exercises1054456
-Node: Language History1055178
-Node: V7/SVR3.11056834
-Node: SVR41059015
-Node: POSIX1060460
-Node: BTL1061849
-Node: POSIX/GNU1062583
-Node: Feature History1068372
-Node: Common Extensions1082098
-Node: Ranges and Locales1083422
-Ref: Ranges and Locales-Footnote-11088040
-Ref: Ranges and Locales-Footnote-21088067
-Ref: Ranges and Locales-Footnote-31088301
-Node: Contributors1088522
-Node: History summary1094063
-Node: Installation1095433
-Node: Gawk Distribution1096379
-Node: Getting1096863
-Node: Extracting1097686
-Node: Distribution contents1099321
-Node: Unix Installation1105386
-Node: Quick Installation1106069
-Node: Shell Startup Files1108480
-Node: Additional Configuration Options1109559
-Node: Configuration Philosophy1111298
-Node: Non-Unix Installation1113667
-Node: PC Installation1114125
-Node: PC Binary Installation1115444
-Node: PC Compiling1117292
-Ref: PC Compiling-Footnote-11120313
-Node: PC Testing1120422
-Node: PC Using1121598
-Node: Cygwin1125713
-Node: MSYS1126536
-Node: VMS Installation1127036
-Node: VMS Compilation1127828
-Ref: VMS Compilation-Footnote-11129050
-Node: VMS Dynamic Extensions1129108
-Node: VMS Installation Details1130792
-Node: VMS Running1133044
-Node: VMS GNV1135880
-Node: VMS Old Gawk1136614
-Node: Bugs1137084
-Node: Other Versions1140967
-Node: Installation summary1147391
-Node: Notes1148447
-Node: Compatibility Mode1149312
-Node: Additions1150094
-Node: Accessing The Source1151019
-Node: Adding Code1152454
-Node: New Ports1158611
-Node: Derived Files1163093
-Ref: Derived Files-Footnote-11168568
-Ref: Derived Files-Footnote-21168602
-Ref: Derived Files-Footnote-31169198
-Node: Future Extensions1169312
-Node: Implementation Limitations1169918
-Node: Extension Design1171166
-Node: Old Extension Problems1172320
-Ref: Old Extension Problems-Footnote-11173837
-Node: Extension New Mechanism Goals1173894
-Ref: Extension New Mechanism Goals-Footnote-11177254
-Node: Extension Other Design Decisions1177443
-Node: Extension Future Growth1179551
-Node: Old Extension Mechanism1180387
-Node: Notes summary1182149
-Node: Basic Concepts1183335
-Node: Basic High Level1184016
-Ref: figure-general-flow1184288
-Ref: figure-process-flow1184887
-Ref: Basic High Level-Footnote-11188116
-Node: Basic Data Typing1188301
-Node: Glossary1191629
-Node: Copying1223558
-Node: GNU Free Documentation License1261114
-Node: Index1286250
+Node: Foreword342291
- Node: Foreword446733
- Node: Preface48255
- Ref: Preface-Footnote-151126
- Ref: Preface-Footnote-251233
- Ref: Preface-Footnote-351466
- Node: History51608
- Node: Names53954
- Ref: Names-Footnote-155048
- Node: This Manual55194
- Ref: This Manual-Footnote-161681
- Node: Conventions61781
- Node: Manual History64119
- Ref: Manual History-Footnote-167101
- Ref: Manual History-Footnote-267142
- Node: How To Contribute67216
- Node: Acknowledgments68345
- Node: Getting Started73150
- Node: Running gawk75583
- Node: One-shot76773
- Node: Read Terminal78021
- Node: Long80048
- Node: Executable Scripts81564
- Ref: Executable Scripts-Footnote-184353
- Node: Comments84456
- Node: Quoting86938
- Node: DOS Quoting92462
- Node: Sample Data Files93137
- Node: Very Simple95732
- Node: Two Rules100630
- Node: More Complex102516
- Node: Statements/Lines105378
- Ref: Statements/Lines-Footnote-1109833
- Node: Other Features110098
- Node: When111029
- Ref: When-Footnote-1112783
- Node: Intro Summary112848
- Node: Invoking Gawk113731
- Node: Command Line115245
- Node: Options116043
- Ref: Options-Footnote-1131847
- Ref: Options-Footnote-2132076
- Node: Other Arguments132101
- Node: Naming Standard Input135049
- Node: Environment Variables136142
- Node: AWKPATH Variable136700
- Ref: AWKPATH Variable-Footnote-1140113
- Ref: AWKPATH Variable-Footnote-2140158
- Node: AWKLIBPATH Variable140418
- Node: Other Environment Variables141674
- Node: Exit Status145162
- Node: Include Files145838
- Node: Loading Shared Libraries149435
- Node: Obsolete150862
- Node: Undocumented151559
- Node: Invoking Summary151826
- Node: Regexp153490
- Node: Regexp Usage154944
- Node: Escape Sequences156981
- Node: Regexp Operators163211
- Ref: Regexp Operators-Footnote-1170637
- Ref: Regexp Operators-Footnote-2170784
- Node: Bracket Expressions170882
- Ref: table-char-classes172897
- Node: Leftmost Longest175821
- Node: Computed Regexps177123
- Node: GNU Regexp Operators180520
- Node: Case-sensitivity184193
- Ref: Case-sensitivity-Footnote-1187078
- Ref: Case-sensitivity-Footnote-2187313
- Node: Regexp Summary187421
- Node: Reading Files188888
- Node: Records190982
- Node: awk split records191715
- Node: gawk split records196630
- Ref: gawk split records-Footnote-1201174
- Node: Fields201211
- Ref: Fields-Footnote-1203987
- Node: Nonconstant Fields204073
- Ref: Nonconstant Fields-Footnote-1206316
- Node: Changing Fields206520
- Node: Field Separators212449
- Node: Default Field Splitting215154
- Node: Regexp Field Splitting216271
- Node: Single Character Fields219621
- Node: Command Line Field Separator220680
- Node: Full Line Fields223892
- Ref: Full Line Fields-Footnote-1225409
- Ref: Full Line Fields-Footnote-2225455
- Node: Field Splitting Summary225556
- Node: Constant Size227630
- Node: Splitting By Content232219
- Ref: Splitting By Content-Footnote-1236213
- Node: Multiple Line236376
- Ref: Multiple Line-Footnote-1242262
- Node: Getline242441
- Node: Plain Getline244653
- Node: Getline/Variable247293
- Node: Getline/File248441
- Node: Getline/Variable/File249825
- Ref: Getline/Variable/File-Footnote-1251428
- Node: Getline/Pipe251515
- Node: Getline/Variable/Pipe254198
- Node: Getline/Coprocess255329
- Node: Getline/Variable/Coprocess256581
- Node: Getline Notes257320
- Node: Getline Summary260112
- Ref: table-getline-variants260524
- Node: Read Timeout261353
- Ref: Read Timeout-Footnote-1265178
- Node: Command-line directories265236
- Node: Input Summary266141
- Node: Input Exercises269442
- Node: Printing270170
- Node: Print272005
- Node: Print Examples273462
- Node: Output Separators276241
- Node: OFMT278259
- Node: Printf279613
- Node: Basic Printf280398
- Node: Control Letters281968
- Node: Format Modifiers285951
- Node: Printf Examples291960
- Node: Redirection294446
- Node: Special FD301287
- Ref: Special FD-Footnote-1304447
- Node: Special Files304521
- Node: Other Inherited Files305138
- Node: Special Network306138
- Node: Special Caveats307000
- Node: Close Files And Pipes307951
- Ref: Close Files And Pipes-Footnote-1315127
- Ref: Close Files And Pipes-Footnote-2315275
- Node: Nonfatal315425
- Node: Output Summary317348
- Node: Output Exercises318569
- Node: Expressions319249
- Node: Values320434
- Node: Constants321112
- Node: Scalar Constants321803
- Ref: Scalar Constants-Footnote-1322662
- Node: Nondecimal-numbers322912
- Node: Regexp Constants325930
- Node: Using Constant Regexps326455
- Node: Variables329598
- Node: Using Variables330253
- Node: Assignment Options332164
- Node: Conversion334039
- Node: Strings And Numbers334563
- Ref: Strings And Numbers-Footnote-1337628
- Node: Locale influences conversions337737
- Ref: table-locale-affects340484
- Node: All Operators341072
- Node: Arithmetic Ops341702
- Node: Concatenation344207
- Ref: Concatenation-Footnote-1347026
- Node: Assignment Ops347132
- Ref: table-assign-ops352111
- Node: Increment Ops353383
- Node: Truth Values and Conditions356821
- Node: Truth Values357906
- Node: Typing and Comparison358955
- Node: Variable Typing359765
- Node: Comparison Operators363418
- Ref: table-relational-ops363828
- Node: POSIX String Comparison367323
- Ref: POSIX String Comparison-Footnote-1368395
- Node: Boolean Ops368533
- Ref: Boolean Ops-Footnote-1373012
- Node: Conditional Exp373103
- Node: Function Calls374830
- Node: Precedence378710
- Node: Locales382371
- Node: Expressions Summary384003
- Node: Patterns and Actions386563
- Node: Pattern Overview387683
- Node: Regexp Patterns389362
- Node: Expression Patterns389905
- Node: Ranges393615
- Node: BEGIN/END396721
- Node: Using BEGIN/END397482
- Ref: Using BEGIN/END-Footnote-1400216
- Node: I/O And BEGIN/END400322
- Node: BEGINFILE/ENDFILE402636
- Node: Empty405537
- Node: Using Shell Variables405854
- Node: Action Overview408127
- Node: Statements410453
- Node: If Statement412301
- Node: While Statement413796
- Node: Do Statement415825
- Node: For Statement416969
- Node: Switch Statement420126
- Node: Break Statement422508
- Node: Continue Statement424549
- Node: Next Statement426376
- Node: Nextfile Statement428757
- Node: Exit Statement431387
- Node: Built-in Variables433790
- Node: User-modified434923
- Ref: User-modified-Footnote-1442604
- Node: Auto-set442666
- Ref: Auto-set-Footnote-1456358
- Ref: Auto-set-Footnote-2456563
- Node: ARGC and ARGV456619
- Node: Pattern Action Summary460837
- Node: Arrays463264
- Node: Array Basics464593
- Node: Array Intro465437
- Ref: figure-array-elements467401
- Ref: Array Intro-Footnote-1469927
- Node: Reference to Elements470055
- Node: Assigning Elements472507
- Node: Array Example472998
- Node: Scanning an Array474756
- Node: Controlling Scanning477772
- Ref: Controlling Scanning-Footnote-1482968
- Node: Numeric Array Subscripts483284
- Node: Uninitialized Subscripts485469
- Node: Delete487086
- Ref: Delete-Footnote-1489829
- Node: Multidimensional489886
- Node: Multiscanning492983
- Node: Arrays of Arrays494572
- Node: Arrays Summary499331
- Node: Functions501423
- Node: Built-in502322
- Node: Calling Built-in503400
- Node: Numeric Functions505391
- Ref: Numeric Functions-Footnote-1510210
- Ref: Numeric Functions-Footnote-2510567
- Ref: Numeric Functions-Footnote-3510615
- Node: String Functions510887
- Ref: String Functions-Footnote-1534362
- Ref: String Functions-Footnote-2534491
- Ref: String Functions-Footnote-3534739
- Node: Gory Details534826
- Ref: table-sub-escapes536607
- Ref: table-sub-proposed538127
- Ref: table-posix-sub539491
- Ref: table-gensub-escapes541027
- Ref: Gory Details-Footnote-1541859
- Node: I/O Functions542010
- Ref: I/O Functions-Footnote-1549228
- Node: Time Functions549375
- Ref: Time Functions-Footnote-1559863
- Ref: Time Functions-Footnote-2559931
- Ref: Time Functions-Footnote-3560089
- Ref: Time Functions-Footnote-4560200
- Ref: Time Functions-Footnote-5560312
- Ref: Time Functions-Footnote-6560539
- Node: Bitwise Functions560805
- Ref: table-bitwise-ops561367
- Ref: Bitwise Functions-Footnote-1565676
- Node: Type Functions565845
- Node: I18N Functions566996
- Node: User-defined568641
- Node: Definition Syntax569446
- Ref: Definition Syntax-Footnote-1574853
- Node: Function Example574924
- Ref: Function Example-Footnote-1577843
- Node: Function Caveats577865
- Node: Calling A Function578383
- Node: Variable Scope579341
- Node: Pass By Value/Reference582329
- Node: Return Statement585824
- Node: Dynamic Typing588805
- Node: Indirect Calls589734
- Ref: Indirect Calls-Footnote-1601036
- Node: Functions Summary601164
- Node: Library Functions603866
- Ref: Library Functions-Footnote-1607475
- Ref: Library Functions-Footnote-2607618
- Node: Library Names607789
- Ref: Library Names-Footnote-1611243
- Ref: Library Names-Footnote-2611466
- Node: General Functions611552
- Node: Strtonum Function612655
- Node: Assert Function615677
- Node: Round Function619001
- Node: Cliff Random Function620542
- Node: Ordinal Functions621558
- Ref: Ordinal Functions-Footnote-1624621
- Ref: Ordinal Functions-Footnote-2624873
- Node: Join Function625084
- Ref: Join Function-Footnote-1626853
- Node: Getlocaltime Function627053
- Node: Readfile Function630797
- Node: Shell Quoting632767
- Node: Data File Management634168
- Node: Filetrans Function634800
- Node: Rewind Function638856
- Node: File Checking640243
- Ref: File Checking-Footnote-1641575
- Node: Empty Files641776
- Node: Ignoring Assigns643755
- Node: Getopt Function645306
- Ref: Getopt Function-Footnote-1656768
- Node: Passwd Functions656968
- Ref: Passwd Functions-Footnote-1665805
- Node: Group Functions665893
- Ref: Group Functions-Footnote-1673787
- Node: Walking Arrays674000
- Node: Library Functions Summary675603
- Node: Library Exercises677004
- Node: Sample Programs678284
- Node: Running Examples679054
- Node: Clones679782
- Node: Cut Program681006
- Node: Egrep Program690725
- Ref: Egrep Program-Footnote-1698223
- Node: Id Program698333
- Node: Split Program701978
- Ref: Split Program-Footnote-1705426
- Node: Tee Program705554
- Node: Uniq Program708343
- Node: Wc Program715762
- Ref: Wc Program-Footnote-1720012
- Node: Miscellaneous Programs720106
- Node: Dupword Program721319
- Node: Alarm Program723350
- Node: Translate Program728154
- Ref: Translate Program-Footnote-1732719
- Node: Labels Program732989
- Ref: Labels Program-Footnote-1736340
- Node: Word Sorting736424
- Node: History Sorting740495
- Node: Extract Program742331
- Node: Simple Sed749856
- Node: Igawk Program752924
- Ref: Igawk Program-Footnote-1767248
- Ref: Igawk Program-Footnote-2767449
- Ref: Igawk Program-Footnote-3767571
- Node: Anagram Program767686
- Node: Signature Program770743
- Node: Programs Summary771990
- Node: Programs Exercises773183
- Ref: Programs Exercises-Footnote-1777314
- Node: Advanced Features777405
- Node: Nondecimal Data779353
- Node: Array Sorting780943
- Node: Controlling Array Traversal781640
- Ref: Controlling Array Traversal-Footnote-1789973
- Node: Array Sorting Functions790091
- Ref: Array Sorting Functions-Footnote-1793980
- Node: Two-way I/O794176
- Ref: Two-way I/O-Footnote-1799121
- Ref: Two-way I/O-Footnote-2799307
- Node: TCP/IP Networking799389
- Node: Profiling802262
- Node: Advanced Features Summary810539
- Node: Internationalization812472
- Node: I18N and L10N813952
- Node: Explaining gettext814638
- Ref: Explaining gettext-Footnote-1819663
- Ref: Explaining gettext-Footnote-2819847
- Node: Programmer i18n820012
- Ref: Programmer i18n-Footnote-1824878
- Node: Translator i18n824927
- Node: String Extraction825721
- Ref: String Extraction-Footnote-1826852
- Node: Printf Ordering826938
- Ref: Printf Ordering-Footnote-1829724
- Node: I18N Portability829788
- Ref: I18N Portability-Footnote-1832243
- Node: I18N Example832306
- Ref: I18N Example-Footnote-1835109
- Node: Gawk I18N835181
- Node: I18N Summary835819
- Node: Debugger837158
- Node: Debugging838180
- Node: Debugging Concepts838621
- Node: Debugging Terms840474
- Node: Awk Debugging843046
- Node: Sample Debugging Session843940
- Node: Debugger Invocation844460
- Node: Finding The Bug845844
- Node: List of Debugger Commands852319
- Node: Breakpoint Control853652
- Node: Debugger Execution Control857348
- Node: Viewing And Changing Data860712
- Node: Execution Stack864090
- Node: Debugger Info865727
- Node: Miscellaneous Debugger Commands869744
- Node: Readline Support874773
- Node: Limitations875665
- Node: Debugging Summary877779
- Node: Arbitrary Precision Arithmetic878947
- Node: Computer Arithmetic880363
- Ref: table-numeric-ranges883961
- Ref: Computer Arithmetic-Footnote-1884820
- Node: Math Definitions884877
- Ref: table-ieee-formats888165
- Ref: Math Definitions-Footnote-1888769
- Node: MPFR features888874
- Node: FP Math Caution890545
- Ref: FP Math Caution-Footnote-1891595
- Node: Inexactness of computations891964
- Node: Inexact representation892923
- Node: Comparing FP Values894280
- Node: Errors accumulate895362
- Node: Getting Accuracy896795
- Node: Try To Round899457
- Node: Setting precision900356
- Ref: table-predefined-precision-strings901040
- Node: Setting the rounding mode902829
- Ref: table-gawk-rounding-modes903193
- Ref: Setting the rounding mode-Footnote-1906648
- Node: Arbitrary Precision Integers906827
- Ref: Arbitrary Precision Integers-Footnote-1911726
- Node: POSIX Floating Point Problems911875
- Ref: POSIX Floating Point Problems-Footnote-1915748
- Node: Floating point summary915786
- Node: Dynamic Extensions917980
- Node: Extension Intro919532
- Node: Plugin License920798
- Node: Extension Mechanism Outline921595
- Ref: figure-load-extension922023
- Ref: figure-register-new-function923503
- Ref: figure-call-new-function924507
- Node: Extension API Description926493
- Node: Extension API Functions Introduction927943
- Node: General Data Types932767
- Ref: General Data Types-Footnote-1938506
- Node: Memory Allocation Functions938805
- Ref: Memory Allocation Functions-Footnote-1941644
- Node: Constructor Functions941740
- Node: Registration Functions943474
- Node: Extension Functions944159
- Node: Exit Callback Functions946456
- Node: Extension Version String947704
- Node: Input Parsers948369
- Node: Output Wrappers958248
- Node: Two-way processors962763
- Node: Printing Messages964967
- Ref: Printing Messages-Footnote-1966043
- Node: Updating `ERRNO'966195
- Node: Requesting Values966935
- Ref: table-value-types-returned967663
- Node: Accessing Parameters968620
- Node: Symbol Table Access969851
- Node: Symbol table by name970365
- Node: Symbol table by cookie972346
- Ref: Symbol table by cookie-Footnote-1976490
- Node: Cached values976553
- Ref: Cached values-Footnote-1980052
- Node: Array Manipulation980143
- Ref: Array Manipulation-Footnote-1981241
- Node: Array Data Types981278
- Ref: Array Data Types-Footnote-1983933
- Node: Array Functions984025
- Node: Flattening Arrays987879
- Node: Creating Arrays994771
- Node: Extension API Variables999542
- Node: Extension Versioning1000178
- Node: Extension API Informational Variables1002079
- Node: Extension API Boilerplate1003144
- Node: Finding Extensions1006953
- Node: Extension Example1007513
- Node: Internal File Description1008285
- Node: Internal File Ops1012352
- Ref: Internal File Ops-Footnote-11024022
- Node: Using Internal File Ops1024162
- Ref: Using Internal File Ops-Footnote-11026545
- Node: Extension Samples1026818
- Node: Extension Sample File Functions1028344
- Node: Extension Sample Fnmatch1035982
- Node: Extension Sample Fork1037473
- Node: Extension Sample Inplace1038688
- Node: Extension Sample Ord1040363
- Node: Extension Sample Readdir1041199
- Ref: table-readdir-file-types1042075
- Node: Extension Sample Revout1042886
- Node: Extension Sample Rev2way1043476
- Node: Extension Sample Read write array1044216
- Node: Extension Sample Readfile1046156
- Node: Extension Sample Time1047251
- Node: Extension Sample API Tests1048600
- Node: gawkextlib1049091
- Node: Extension summary1051749
- Node: Extension Exercises1055438
- Node: Language History1056160
- Node: V7/SVR3.11057816
- Node: SVR41059997
- Node: POSIX1061442
- Node: BTL1062831
- Node: POSIX/GNU1063565
- Node: Feature History1069446
- Node: Common Extensions1083240
- Node: Ranges and Locales1084564
- Ref: Ranges and Locales-Footnote-11089182
- Ref: Ranges and Locales-Footnote-21089209
- Ref: Ranges and Locales-Footnote-31089443
- Node: Contributors1089664
- Node: History summary1095205
- Node: Installation1096575
- Node: Gawk Distribution1097521
- Node: Getting1098005
- Node: Extracting1098828
- Node: Distribution contents1100463
- Node: Unix Installation1106528
- Node: Quick Installation1107211
- Node: Shell Startup Files1109622
- Node: Additional Configuration Options1110701
- Node: Configuration Philosophy1112440
- Node: Non-Unix Installation1114809
- Node: PC Installation1115267
- Node: PC Binary Installation1116586
- Node: PC Compiling1118434
- Ref: PC Compiling-Footnote-11121455
- Node: PC Testing1121564
- Node: PC Using1122740
- Node: Cygwin1126855
- Node: MSYS1127678
- Node: VMS Installation1128178
- Node: VMS Compilation1128970
- Ref: VMS Compilation-Footnote-11130192
- Node: VMS Dynamic Extensions1130250
- Node: VMS Installation Details1131934
- Node: VMS Running1134186
- Node: VMS GNV1137022
- Node: VMS Old Gawk1137756
- Node: Bugs1138226
- Node: Other Versions1142109
- Node: Installation summary1148537
- Node: Notes1149593
- Node: Compatibility Mode1150458
- Node: Additions1151240
- Node: Accessing The Source1152165
- Node: Adding Code1153601
- Node: New Ports1159766
- Node: Derived Files1164248
- Ref: Derived Files-Footnote-11169723
- Ref: Derived Files-Footnote-21169757
- Ref: Derived Files-Footnote-31170353
- Node: Future Extensions1170467
- Node: Implementation Limitations1171073
- Node: Extension Design1172321
- Node: Old Extension Problems1173475
- Ref: Old Extension Problems-Footnote-11174992
- Node: Extension New Mechanism Goals1175049
- Ref: Extension New Mechanism Goals-Footnote-11178409
- Node: Extension Other Design Decisions1178598
- Node: Extension Future Growth1180706
- Node: Old Extension Mechanism1181542
- Node: Notes summary1183304
- Node: Basic Concepts1184490
- Node: Basic High Level1185171
- Ref: figure-general-flow1185443
- Ref: figure-process-flow1186042
- Ref: Basic High Level-Footnote-11189271
- Node: Basic Data Typing1189456
- Node: Glossary1192784
- Node: Copying1217942
- Node: GNU Free Documentation License1255498
- Node: Index1280634
++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: 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 Program691886
++Ref: Egrep Program-Footnote-1699389
++Node: Id Program699499
++Node: Split Program703175
++Ref: Split Program-Footnote-1706629
++Node: Tee Program706757
++Node: Uniq Program709546
++Node: Wc Program716965
++Ref: Wc Program-Footnote-1721215
++Node: Miscellaneous Programs721309
++Node: Dupword Program722522
++Node: Alarm Program724553
++Node: Translate Program729358
++Ref: Translate Program-Footnote-1733921
++Node: Labels Program734191
++Ref: Labels Program-Footnote-1737542
++Node: Word Sorting737626
++Node: History Sorting741696
++Node: Extract Program743531
++Node: Simple Sed751055
++Node: Igawk Program754125
++Ref: Igawk Program-Footnote-1768451
++Ref: Igawk Program-Footnote-2768652
++Ref: Igawk Program-Footnote-3768774
++Node: Anagram Program768889
++Node: Signature Program771950
++Node: Programs Summary773197
++Node: Programs Exercises774418
++Ref: Programs Exercises-Footnote-1778549
++Node: Advanced Features778640
++Node: Nondecimal Data780622
++Node: Array Sorting782212
++Node: Controlling Array Traversal782912
++Ref: Controlling Array Traversal-Footnote-1791278
++Node: Array Sorting Functions791396
++Ref: Array Sorting Functions-Footnote-1795282
++Node: Two-way I/O795478
++Ref: Two-way I/O-Footnote-1800423
++Ref: Two-way I/O-Footnote-2800609
++Node: TCP/IP Networking800691
++Node: Profiling803563
++Node: Advanced Features Summary811834
++Node: Internationalization813767
++Node: I18N and L10N815247
++Node: Explaining gettext815933
++Ref: Explaining gettext-Footnote-1820958
++Ref: Explaining gettext-Footnote-2821142
++Node: Programmer i18n821307
++Ref: Programmer i18n-Footnote-1826183
++Node: Translator i18n826232
++Node: String Extraction827026
++Ref: String Extraction-Footnote-1828157
++Node: Printf Ordering828243
++Ref: Printf Ordering-Footnote-1831029
++Node: I18N Portability831093
++Ref: I18N Portability-Footnote-1833549
++Node: I18N Example833612
++Ref: I18N Example-Footnote-1836415
++Node: Gawk I18N836487
++Node: I18N Summary837131
++Node: Debugger838471
++Node: Debugging839493
++Node: Debugging Concepts839934
++Node: Debugging Terms841744
++Node: Awk Debugging844316
++Node: Sample Debugging Session845222
++Node: Debugger Invocation845756
++Node: Finding The Bug847141
++Node: List of Debugger Commands853620
++Node: Breakpoint Control854952
++Node: Debugger Execution Control858629
++Node: Viewing And Changing Data861988
++Node: Execution Stack865364
++Node: Debugger Info866999
++Node: Miscellaneous Debugger Commands871044
++Node: Readline Support876045
++Node: Limitations876939
++Node: Debugging Summary879054
++Node: Arbitrary Precision Arithmetic880228
++Node: Computer Arithmetic881644
++Ref: table-numeric-ranges885242
++Ref: Computer Arithmetic-Footnote-1886101
++Node: Math Definitions886158
++Ref: table-ieee-formats889446
++Ref: Math Definitions-Footnote-1890050
++Node: MPFR features890155
++Node: FP Math Caution891826
++Ref: FP Math Caution-Footnote-1892876
++Node: Inexactness of computations893245
++Node: Inexact representation894204
++Node: Comparing FP Values895561
++Node: Errors accumulate896643
++Node: Getting Accuracy898076
++Node: Try To Round900738
++Node: Setting precision901637
++Ref: table-predefined-precision-strings902321
++Node: Setting the rounding mode904110
++Ref: table-gawk-rounding-modes904474
++Ref: Setting the rounding mode-Footnote-1907929
++Node: Arbitrary Precision Integers908108
++Ref: Arbitrary Precision Integers-Footnote-1913008
++Node: POSIX Floating Point Problems913157
++Ref: POSIX Floating Point Problems-Footnote-1917030
++Node: Floating point summary917068
++Node: Dynamic Extensions919262
++Node: Extension Intro920814
++Node: Plugin License922080
++Node: Extension Mechanism Outline922877
++Ref: figure-load-extension923305
++Ref: figure-register-new-function924785
++Ref: figure-call-new-function925789
++Node: Extension API Description927775
++Node: Extension API Functions Introduction929225
++Node: General Data Types934049
++Ref: General Data Types-Footnote-1939788
++Node: Memory Allocation Functions940087
++Ref: Memory Allocation Functions-Footnote-1942926
++Node: Constructor Functions943022
++Node: Registration Functions944756
++Node: Extension Functions945441
++Node: Exit Callback Functions947738
++Node: Extension Version String948986
++Node: Input Parsers949651
++Node: Output Wrappers959530
++Node: Two-way processors964045
++Node: Printing Messages966249
++Ref: Printing Messages-Footnote-1967325
++Node: Updating `ERRNO'967477
++Node: Requesting Values968217
++Ref: table-value-types-returned968945
++Node: Accessing Parameters969902
++Node: Symbol Table Access971133
++Node: Symbol table by name971647
++Node: Symbol table by cookie973628
++Ref: Symbol table by cookie-Footnote-1977772
++Node: Cached values977835
++Ref: Cached values-Footnote-1981334
++Node: Array Manipulation981425
++Ref: Array Manipulation-Footnote-1982523
++Node: Array Data Types982560
++Ref: Array Data Types-Footnote-1985215
++Node: Array Functions985307
++Node: Flattening Arrays989161
++Node: Creating Arrays996053
++Node: Extension API Variables1000824
++Node: Extension Versioning1001460
++Node: Extension API Informational Variables1003361
++Node: Extension API Boilerplate1004426
++Node: Finding Extensions1008235
++Node: Extension Example1008795
++Node: Internal File Description1009567
++Node: Internal File Ops1013634
++Ref: Internal File Ops-Footnote-11025304
++Node: Using Internal File Ops1025444
++Ref: Using Internal File Ops-Footnote-11027827
++Node: Extension Samples1028100
++Node: Extension Sample File Functions1029626
++Node: Extension Sample Fnmatch1037264
++Node: Extension Sample Fork1038755
++Node: Extension Sample Inplace1039970
++Node: Extension Sample Ord1041645
++Node: Extension Sample Readdir1042481
++Ref: table-readdir-file-types1043357
++Node: Extension Sample Revout1044168
++Node: Extension Sample Rev2way1044758
++Node: Extension Sample Read write array1045498
++Node: Extension Sample Readfile1047438
++Node: Extension Sample Time1048533
++Node: Extension Sample API Tests1049882
++Node: gawkextlib1050373
++Node: Extension summary1053031
++Node: Extension Exercises1056720
++Node: Language History1057442
++Node: V7/SVR3.11059098
++Node: SVR41061279
++Node: POSIX1062724
++Node: BTL1064113
++Node: POSIX/GNU1064847
++Node: Feature History1070728
++Node: Common Extensions1084522
++Node: Ranges and Locales1085846
++Ref: Ranges and Locales-Footnote-11090464
++Ref: Ranges and Locales-Footnote-21090491
++Ref: Ranges and Locales-Footnote-31090725
++Node: Contributors1090946
++Node: History summary1096487
++Node: Installation1097857
++Node: Gawk Distribution1098803
++Node: Getting1099287
++Node: Extracting1100110
++Node: Distribution contents1101745
++Node: Unix Installation1107810
++Node: Quick Installation1108493
++Node: Shell Startup Files1110904
++Node: Additional Configuration Options1111983
++Node: Configuration Philosophy1113722
++Node: Non-Unix Installation1116091
++Node: PC Installation1116549
++Node: PC Binary Installation1117868
++Node: PC Compiling1119716
++Ref: PC Compiling-Footnote-11122737
++Node: PC Testing1122846
++Node: PC Using1124022
++Node: Cygwin1128137
++Node: MSYS1128960
++Node: VMS Installation1129460
++Node: VMS Compilation1130252
++Ref: VMS Compilation-Footnote-11131474
++Node: VMS Dynamic Extensions1131532
++Node: VMS Installation Details1133216
++Node: VMS Running1135468
++Node: VMS GNV1138304
++Node: VMS Old Gawk1139038
++Node: Bugs1139508
++Node: Other Versions1143391
++Node: Installation summary1149815
++Node: Notes1150871
++Node: Compatibility Mode1151736
++Node: Additions1152518
++Node: Accessing The Source1153443
++Node: Adding Code1154878
++Node: New Ports1161035
++Node: Derived Files1165517
++Ref: Derived Files-Footnote-11170992
++Ref: Derived Files-Footnote-21171026
++Ref: Derived Files-Footnote-31171622
++Node: Future Extensions1171736
++Node: Implementation Limitations1172342
++Node: Extension Design1173590
++Node: Old Extension Problems1174744
++Ref: Old Extension Problems-Footnote-11176261
++Node: Extension New Mechanism Goals1176318
++Ref: Extension New Mechanism Goals-Footnote-11179678
++Node: Extension Other Design Decisions1179867
++Node: Extension Future Growth1181975
++Node: Old Extension Mechanism1182811
++Node: Notes summary1184573
++Node: Basic Concepts1185759
++Node: Basic High Level1186440
++Ref: figure-general-flow1186712
++Ref: figure-process-flow1187311
++Ref: Basic High Level-Footnote-11190540
++Node: Basic Data Typing1190725
++Node: Glossary1194053
++Node: Copying1225982
++Node: GNU Free Documentation License1263538
++Node: Index1288674
End Tag Table
diff --cc doc/gawk.texi
index e002324,1f0fd2a..81568fe
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@@ -10480,68 -10434,7 +10436,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 87fa41c,38e741e..e127f42
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@@ -9977,68 -9930,7 +9932,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
diff --cc test/ChangeLog
index bff1d80,e9d5620..b0979d8
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@@ -1,9 -1,46 +1,52 @@@
+2015-02-06 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (nonfatal1, nonfatal2): New tests.
+ * nonfatal1.awk, nonfatal1.ok: New files.
+ * nonfatal2.awk, nonfatal2.ok: New files.
+
+ 2015-02-01 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (paramasfunc1, paramasfunc2): Now need --posix.
+ * indirectcall.awk: Restore after code change.
+
+ 2015-01-30 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (callparam, paramasfunc1, paramasfunc2): New tests.
+ * callparam.awk, callparam.ok: New files.
+ * paramasfunc1.awk, paramasfunc1.ok: New files.
+ * paramasfunc2.awk, paramasfunc2.ok: New files.
+ * exit.sh, indirectcall.awk: Update after code change.
+
+ 2015-01-19 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (profile8): Actually add the test and the files.
+ Thanks to Hermann Peifer for the report.
+
+ 2015-01-16 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (profile8): New test.
+ * profile8.awk, profile8.ok: New files.
+
+ 2015-01-14 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (dumpvars): Grep out ENVIRON and PROCINFO since
+ those can be different depending on who runs the test.
+ * dumpvars.ok, id.ok: Updated after code changes.
+
+ 2015-01-07 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (regexpbrack): New test.
+ * regexpbrack.awk, regexpbrack.in, regexpbrack.ok: New files.
+
+ Unrelated:
+
+ * Makefile.am (printfbad4): New test.
+ * printfbad4.awk, printfbad4.ok: New files.
+
+ Unrelated:
+
+ * testext.ok: Adjust for code changes.
+
2014-12-24 Arnold D. Robbins <address@hidden>
* Makefile.am (badbuild): New test.
diff --cc test/Makefile.am
index 802a355,c4c0b8b..053f89f
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@@ -1032,9 -1042,9 +1046,10 @@@ GAWK_EXT_TESTS =
lint lintold lintwarn \
manyfiles match1 match2 match3 mbstr1 \
nastyparm next nondec nondec2 \
+ nonfatal1 nonfatal2 \
- patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
- profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
+ patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge
procinfs \
+ profile1 profile2 profile3 profile4 profile5 profile6 profile7 \
+ profile8 pty1 \
rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline
rsglstdin rsstart1 \
rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
splitarg4 strftime \
diff --cc test/Makefile.in
index 70dd1f4,212cb77..25ea167
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@@ -1278,9 -1298,9 +1302,10 @@@ GAWK_EXT_TESTS =
lint lintold lintwarn \
manyfiles match1 match2 match3 mbstr1 \
nastyparm next nondec nondec2 \
+ nonfatal1 nonfatal2 \
- patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
- profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
+ patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge
procinfs \
+ profile1 profile2 profile3 profile4 profile5 profile6 profile7 \
+ profile8 pty1 \
rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline
rsglstdin rsstart1 \
rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
splitarg4 strftime \
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=34c33ee0f9d3863f9ef381e499e396c9f447a941
commit 34c33ee0f9d3863f9ef381e499e396c9f447a941
Author: Arnold D. Robbins <address@hidden>
Date: Sun Feb 8 19:50:27 2015 +0200
Add tests for non fatal i/o.
diff --git a/test/ChangeLog b/test/ChangeLog
index 2787b90..bff1d80 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-06 Arnold D. Robbins <address@hidden>
+
+ * Makefile.am (nonfatal1, nonfatal2): New tests.
+ * nonfatal1.awk, nonfatal1.ok: New files.
+ * nonfatal2.awk, nonfatal2.ok: New files.
+
2014-12-24 Arnold D. Robbins <address@hidden>
* Makefile.am (badbuild): New test.
diff --git a/test/Makefile.am b/test/Makefile.am
index 7335da3..802a355 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -595,6 +595,10 @@ EXTRA_DIST = \
nondec.ok \
nondec2.awk \
nondec2.ok \
+ nonfatal1.awk \
+ nonfatal1.ok \
+ nonfatal2.awk \
+ nonfatal2.ok \
nonl.awk \
nonl.ok \
noparms.awk \
@@ -1028,6 +1032,7 @@ GAWK_EXT_TESTS = \
lint lintold lintwarn \
manyfiles match1 match2 match3 mbstr1 \
nastyparm next nondec nondec2 \
+ nonfatal1 nonfatal2 \
patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline
rsglstdin rsstart1 \
diff --git a/test/Makefile.in b/test/Makefile.in
index fa86fc7..70dd1f4 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -842,6 +842,10 @@ EXTRA_DIST = \
nondec.ok \
nondec2.awk \
nondec2.ok \
+ nonfatal1.awk \
+ nonfatal1.ok \
+ nonfatal2.awk \
+ nonfatal2.ok \
nonl.awk \
nonl.ok \
noparms.awk \
@@ -1274,6 +1278,7 @@ GAWK_EXT_TESTS = \
lint lintold lintwarn \
manyfiles match1 match2 match3 mbstr1 \
nastyparm next nondec nondec2 \
+ nonfatal1 nonfatal2 \
patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline
rsglstdin rsstart1 \
@@ -3568,6 +3573,16 @@ nondec:
@AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+nonfatal1:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
+nonfatal2:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
patsplit:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index e1b92bf..08085a0 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1137,6 +1137,16 @@ nondec:
@AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+nonfatal1:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
+nonfatal2:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/address@hidden _$@ && rm -f _$@
+
patsplit:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f address@hidden >_$@ 2>&1 || echo EXIT
CODE: $$? >>_$@
diff --git a/test/nonfatal1.awk b/test/nonfatal1.awk
new file mode 100644
index 0000000..8366128
--- /dev/null
+++ b/test/nonfatal1.awk
@@ -0,0 +1,5 @@
+BEGIN {
+ PROCINFO["nonfatal"]
+ print |& "/inet/tcp/0/ti10/357"
+ print ERRNO
+}
diff --git a/test/nonfatal1.ok b/test/nonfatal1.ok
new file mode 100644
index 0000000..b96b8e2
--- /dev/null
+++ b/test/nonfatal1.ok
@@ -0,0 +1,2 @@
+gawk: nonfatal1.awk:3: fatal: remote host and port information (ti10, 357)
invalid
+EXIT CODE: 2
diff --git a/test/nonfatal2.awk b/test/nonfatal2.awk
new file mode 100644
index 0000000..f5db71c
--- /dev/null
+++ b/test/nonfatal2.awk
@@ -0,0 +1,5 @@
+BEGIN {
+ PROCINFO["nonfatal"] = 1
+ print > "/dev/no/such/file"
+ print ERRNO
+}
diff --git a/test/nonfatal2.ok b/test/nonfatal2.ok
new file mode 100644
index 0000000..ddc8869
--- /dev/null
+++ b/test/nonfatal2.ok
@@ -0,0 +1 @@
+No such file or directory
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=2f9c84e82632cbce017a6d342acb3dede5e59e12
commit 2f9c84e82632cbce017a6d342acb3dede5e59e12
Author: Arnold D. Robbins <address@hidden>
Date: Sun Feb 8 19:45:44 2015 +0200
Reset non-fatal-io to 31 December, add fixes from Andrew Schorr.
diff --git a/ChangeLog b/ChangeLog
index 0ee6bf2..c61e8ee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2015-02-08 Andrew J. Schorr <address@hidden>
+
+ * awk.h (RED_NON_FATAL): Removed.
+ (redirect): Add new failure_fatal parameter.
+ (is_non_fatal_redirect): Add declaration.
+ * builtin.c (efwrite): Rework check for non-fatal.
+ (do_printf): Adjust calls to redirect.
+ (do_print_rec): Ditto. Move check for redirection error up.
+ * io.c (redflags2str): Remove RED_NON_FATAL.
+ (redirect): Add new failure_fatal parameter. Simplify the code.
+ (is_non_fatal_redirect): New function.
+ (do_getline_redir): Adjust calls to redirect.
+
2014-12-27 Arnold D. Robbins <address@hidden>
* awk.h (is_non_fatal_std): Declare new function.
diff --git a/awk.h b/awk.h
index 81a0e91..b1272ad 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;
@@ -1484,7 +1483,7 @@ extern void
register_two_way_processor(awk_two_way_processor_t *processor);
extern void set_FNR(void);
extern void set_NR(void);
-extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
+extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg,
bool failure_fatal);
extern NODE *do_close(int nargs);
extern int flush_io(void);
extern int close_io(bool *stdio_problem);
@@ -1497,6 +1496,7 @@ 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 is_non_fatal_redirect(const char *str);
/* 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 e80d46d..aa8caf0 100644
--- a/builtin.c
+++ b/builtin.c
@@ -131,10 +131,9 @@ wrerror:
/* otherwise die verbosely */
- if ( (rp != NULL && (rp->flag & RED_NON_FATAL) != 0)
- || is_non_fatal_std(fp)) {
+ if ((rp != NULL) ? is_non_fatal_redirect(rp->value) :
is_non_fatal_std(fp))
update_ERRNO_int(errno);
- } else
+ else
fatal(_("%s to \"%s\" failed (%s)"), from,
rp ? rp->value : _("standard output"),
errno ? strerror(errno) : _("reason unknown"));
@@ -1649,7 +1648,7 @@ do_printf(int nargs, int redirtype)
redir_exp = TOP();
if (redir_exp->type != Node_val)
fatal(_("attempt to use array `%s' in a
scalar context"), array_vname(redir_exp));
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg,
true);
DEREF(redir_exp);
decr_sp();
}
@@ -1662,7 +1661,7 @@ do_printf(int nargs, int redirtype)
redir_exp = PEEK(nargs);
if (redir_exp->type != Node_val)
fatal(_("attempt to use array `%s' in a scalar
context"), array_vname(redir_exp));
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
if (rp != NULL)
fp = rp->output.fp;
else if (errflg) {
@@ -2093,7 +2092,7 @@ do_print(int nargs, int redirtype)
redir_exp = PEEK(nargs);
if (redir_exp->type != Node_val)
fatal(_("attempt to use array `%s' in a scalar
context"), array_vname(redir_exp));
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
if (rp != NULL)
fp = rp->output.fp;
else if (errflg) {
@@ -2161,7 +2160,7 @@ do_print_rec(int nargs, int redirtype)
assert(nargs == 0);
if (redirtype != 0) {
redir_exp = TOP();
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
if (rp != NULL)
fp = rp->output.fp;
DEREF(redir_exp);
@@ -2169,17 +2168,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/io.c b/io.c
index b3819c0..db8a0a2 100644
--- a/io.c
+++ b/io.c
@@ -261,7 +261,6 @@ struct recmatch {
static int iop_close(IOBUF *iop);
-struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
static void close_one(void);
static int close_redir(struct redirect *rp, bool exitwarn, two_way_close_type
how);
#ifndef PIPES_SIMULATED
@@ -718,7 +717,6 @@ redflags2str(int flags)
{ RED_PTY, "RED_PTY" },
{ RED_SOCKET, "RED_SOCKET" },
{ RED_TCP, "RED_TCP" },
- { RED_NON_FATAL, "RED_NON_FATAL" },
{ 0, NULL }
};
@@ -728,7 +726,7 @@ redflags2str(int flags)
/* redirect --- Redirection for printf and print commands */
struct redirect *
-redirect(NODE *redir_exp, int redirtype, int *errflg)
+redirect(NODE *redir_exp, int redirtype, int *errflg, bool failure_fatal)
{
struct redirect *rp;
char *str;
@@ -745,8 +743,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 +752,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 +760,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 +772,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 +793,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 +892,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 failure_fatal; see input pipe below.
* Note that the failure happens upon failure to fork,
* using a non-existant program will still succeed the
* popen().
@@ -947,17 +932,11 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
case redirect_twoway:
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 (! failure_fatal ||
is_non_fatal_redirect(str)) {
*errflg = errno;
/* do not free rp, saving it for reuse
(save_rp = rp) */
return NULL;
} else
-#endif
fatal(_("can't open two way pipe `%s'
for input/output (%s)"),
str, strerror(errno));
}
@@ -1038,7 +1017,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
*/
if (errflg != NULL)
*errflg = errno;
- if (! is_non_fatal &&
+ if (failure_fatal && !
is_non_fatal_redirect(str) &&
(redirtype == redirect_output
|| redirtype == redirect_append)) {
/* multiple messages make life easier
for translators */
@@ -1104,6 +1083,15 @@ is_non_fatal_std(FILE *fp)
return false;
}
+/* is_non_fatal_redirect --- return true if redirected I/O should be nonfatal
*/
+
+bool
+is_non_fatal_redirect(const char *str)
+{
+ return in_PROCINFO("nonfatal", NULL, NULL) != NULL
+ || in_PROCINFO(str, "nonfatal", NULL) != NULL;
+}
+
/* close_one --- temporarily close an open file to re-use the fd */
static void
@@ -2467,7 +2455,7 @@ do_getline_redir(int into_variable, enum redirval
redirtype)
assert(redirtype != redirect_none);
redir_exp = TOP();
- rp = redirect(redir_exp, redirtype, & redir_error);
+ rp = redirect(redir_exp, redirtype, & redir_error, false);
DEREF(redir_exp);
decr_sp();
if (rp == NULL) {
-----------------------------------------------------------------------
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gawk-diffs] [SCM] gawk branch, non-fatal-io-2, created. gawk-4.1.0-1097-g0e38201,
Arnold Robbins <=