summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2022-09-17 23:12:13 +0300
committerArnold D. Robbins <arnold@skeeve.com>2022-09-17 23:12:13 +0300
commitdb0d61712a9be9b3ac03a45061b7b49d7160ac58 (patch)
tree4851e9bdd2ada801ed4bf8215eea5e515b0ae665
parent6e83385a9484934c3f3fb053e853d1e5d00fef00 (diff)
parent68b00ae254d0da5324f32139198d95820cb3c0aa (diff)
downloadgawk-db0d61712a9be9b3ac03a45061b7b49d7160ac58.tar.gz
Merge branch 'master' into feature/bwk-csv
-rw-r--r--ChangeLog6
-rw-r--r--debug.c18
-rw-r--r--doc/ChangeLog8
-rw-r--r--doc/gawk.info1130
-rw-r--r--doc/gawk.texi5
-rw-r--r--doc/gawktexi.in5
-rw-r--r--extension/ChangeLog5
-rw-r--r--extension/rwarray.c29
-rw-r--r--pc/ChangeLog4
-rw-r--r--pc/Makefile.tst10
-rw-r--r--test/ChangeLog10
-rw-r--r--test/Makefile.am8
-rw-r--r--test/Makefile.in13
-rw-r--r--test/Maketests5
-rw-r--r--test/dbugeval4.awk0
-rw-r--r--test/dbugeval4.in2
-rw-r--r--test/dbugeval4.ok5
-rw-r--r--test/readall.ok1
-rw-r--r--test/readall1.awk1
-rw-r--r--test/readall2.awk1
20 files changed, 687 insertions, 579 deletions
diff --git a/ChangeLog b/ChangeLog
index 7eb04ca4..13602873 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2022-09-16 Arnold D. Robbins <arnold@skeeve.com>
+
+ * debug.c (do_eval): If a fatal error occurs, don't attempt to
+ recover, just restart. Thanks to Pascal Maugis
+ <pascal.maugis@lsce.ipsl.fr> for the report.
+
2022-09-14 Arnold D. Robbins <arnold@skeeve.com>
* interpret.h (r_interpret): For the `push' opcodes, don't upref
diff --git a/debug.c b/debug.c
index efc5a9a1..b85939f3 100644
--- a/debug.c
+++ b/debug.c
@@ -5582,8 +5582,22 @@ execute_code(volatile INSTRUCTION *code)
if (setjmp(fatal_tag) == 0) {
(void) interpret((INSTRUCTION *) code);
r = POP_SCALAR();
- } else /* fatal error */
- (void) unwind_stack(save_stack_size);
+ } else { /* fatal error */
+ /*
+ * 9/2022:
+ * Initially, the code did this:
+ *
+ * (void) unwind_stack(save_stack_size);
+ *
+ * to attempt to recover and keep going. But a fatal error
+ * can corrupt memory. Instead of trying to recover, just
+ * start over.
+ */
+ // Let the user know, but DON'T use the fatal() function!
+ fprintf(stderr, _("fatal error during eval, need to restart.\n"));
+ // Go back to debugger
+ restart(false); // does not return
+ }
POP_BINDING(fatal_tag_stack, fatal_tag, fatal_tag_valid);
do_flags = save_flags;
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 573b488a..406f4ea6 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,11 @@
+2022-09-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in (Extension Sample Read write array): Clarify how readall
+ works. Thanks to J Naman, <gawker@703n.com> for the prod.
+ (GNU Regexp Operators): Add some phraseology borrowed from GNU grep
+ man page to further explain \B. Thanks to Neil R. Ormos
+ <ormos-gnulists17@ormos.org> for the suggestion.
+
2022-09-04 Arnold D. Robbins <arnold@skeeve.com>
* 5.2.0: Release tar ball made.
diff --git a/doc/gawk.info b/doc/gawk.info
index b0e61999..bb878db4 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -4315,6 +4315,8 @@ letters, digits, or underscores ('_'):
Matches the empty string that occurs between two word-constituent
characters. For example, '/\Brat\B/' matches 'crate', but it does
not match 'dirty rat'. '\B' is essentially the opposite of '\y'.
+ Another way to think of this is that '\B' matches the empty string
+ provided it's not at the edge of a word.
There are two other operators that work on buffers. In Emacs, a
"buffer" is, naturally, an Emacs buffer. Other GNU programs, including
@@ -29483,9 +29485,9 @@ The 'rwarray' extension adds four functions, named 'writea()',
This function takes a string argument, which is the name of the
file from which to read the contents of various global variables.
For each variable in the file, the data is loaded unless the
- variable already exists. If the variable already exists, the data
- for that variable in the file is ignored. It returns one on
- success, or zero upon failure.
+ variable has already been assigned a value or used as an array. In
+ that case, the data for that variable in the file is ignored. It
+ returns one on success, or zero upon failure.
The array created by 'reada()' is identical to that written by
'writea()' in the sense that the contents are the same. However, due to
@@ -35857,7 +35859,7 @@ Index
* ? (question mark), regexp operator: Regexp Operator Details.
(line 113)
* ? (question mark), regexp operator <1>: GNU Regexp Operators.
- (line 59)
+ (line 61)
* ? (question mark), ?: operator: Precedence. (line 91)
* @ (at-sign), @include directive: Include Files. (line 8)
* @ (at-sign), @load directive: Loading Shared Libraries.
@@ -35913,9 +35915,9 @@ Index
* \ (backslash), \B operator (gawk): GNU Regexp Operators.
(line 43)
* \ (backslash), \` operator (gawk): GNU Regexp Operators.
- (line 54)
-* \ (backslash), \' operator (gawk): GNU Regexp Operators.
(line 56)
+* \ (backslash), \' operator (gawk): GNU Regexp Operators.
+ (line 58)
* \ (backslash), as field separator: Command Line Field Separator.
(line 24)
* \ (backslash), gsub()/gensub()/sub() functions and: Gory Details.
@@ -35924,7 +35926,7 @@ Index
(line 18)
* ^ (caret), in bracket expressions: Bracket Expressions. (line 25)
* ^ (caret), regexp operator <1>: GNU Regexp Operators.
- (line 59)
+ (line 61)
* ^ (caret), in FS: Regexp Field Splitting.
(line 58)
* ^ (caret), ^= operator: Assignment Ops. (line 129)
@@ -36285,9 +36287,9 @@ Index
* backslash (\), \B operator (gawk): GNU Regexp Operators.
(line 43)
* backslash (\), \` operator (gawk): GNU Regexp Operators.
- (line 54)
-* backslash (\), \' operator (gawk): GNU Regexp Operators.
(line 56)
+* backslash (\), \' operator (gawk): GNU Regexp Operators.
+ (line 58)
* backslash (\), as field separator: Command Line Field Separator.
(line 24)
* backslash (\), gsub()/gensub()/sub() functions and: Gory Details.
@@ -36396,7 +36398,7 @@ Index
* Brian Kernighan's awk: When. (line 21)
* Brian Kernighan's awk <1>: Escape Sequences. (line 112)
* Brian Kernighan's awk <2>: GNU Regexp Operators.
- (line 82)
+ (line 84)
* Brian Kernighan's awk <3>: gawk split records. (line 71)
* Brian Kernighan's awk <4>: Regexp Field Splitting.
(line 66)
@@ -36425,7 +36427,7 @@ Index
* buffering, input/output: I/O Functions. (line 168)
* buffering, input/output <1>: Two-way I/O. (line 53)
* buffers, operators for: GNU Regexp Operators.
- (line 48)
+ (line 50)
* buffers, flushing: I/O Functions. (line 32)
* buffers, flushing <1>: I/O Functions. (line 168)
* bug reports, email address, <bug-gawk@gnu.org>: Bug address.
@@ -36464,7 +36466,7 @@ Index
(line 18)
* caret (^), in bracket expressions: Bracket Expressions. (line 25)
* caret (^), regexp operator <1>: GNU Regexp Operators.
- (line 59)
+ (line 61)
* caret (^), ^= operator: Assignment Ops. (line 129)
* caret (^), ^ operator: Precedence. (line 48)
* caret (^), ^= operator <1>: Precedence. (line 94)
@@ -37517,9 +37519,9 @@ Index
* gawk, regular expressions, operators: GNU Regexp Operators.
(line 6)
* gawk, word-boundary operator: GNU Regexp Operators.
- (line 63)
+ (line 65)
* gawk, command-line options, regular expressions and: GNU Regexp Operators.
- (line 70)
+ (line 72)
* gawk, regular expressions, case sensitivity: Case-sensitivity.
(line 26)
* gawk, IGNORECASE variable in: Case-sensitivity. (line 26)
@@ -38201,9 +38203,9 @@ Index
* operators, GNU-specific: GNU Regexp Operators.
(line 6)
* operators, string-matching, for buffers: GNU Regexp Operators.
- (line 48)
+ (line 50)
* operators, word-boundary (gawk): GNU Regexp Operators.
- (line 63)
+ (line 65)
* operators, input/output: Getline/File. (line 6)
* operators, input/output <1>: Getline/Pipe. (line 10)
* operators, input/output <2>: Getline/Coprocess. (line 6)
@@ -38525,7 +38527,7 @@ Index
* question mark (?), regexp operator: Regexp Operator Details.
(line 113)
* question mark (?), regexp operator <1>: GNU Regexp Operators.
- (line 59)
+ (line 61)
* question mark (?), ?: operator: Precedence. (line 91)
* QuikTrim Awk: Other Versions. (line 171)
* quit debugger command: Miscellaneous Debugger Commands.
@@ -38622,9 +38624,9 @@ Index
* regular expressions, operators, for words: GNU Regexp Operators.
(line 6)
* regular expressions, operators, for buffers: GNU Regexp Operators.
- (line 48)
+ (line 50)
* regular expressions, gawk, command-line options: GNU Regexp Operators.
- (line 70)
+ (line 72)
* regular expressions, case sensitivity: Case-sensitivity. (line 6)
* regular expressions, as record separators: awk split records.
(line 118)
@@ -39271,7 +39273,7 @@ Index
* word, regexp definition of: GNU Regexp Operators.
(line 6)
* word-boundary operator (gawk): GNU Regexp Operators.
- (line 63)
+ (line 65)
* wordfreq.awk program: Word Sorting. (line 56)
* words, counting: Wc Program. (line 6)
* words, duplicate, searching for: Dupword Program. (line 6)
@@ -39364,550 +39366,550 @@ Ref: table-char-classes188160
Node: Leftmost Longest191487
Node: Computed Regexps192790
Node: GNU Regexp Operators196217
-Node: Case-sensitivity199895
-Ref: Case-sensitivity-Footnote-1202761
-Ref: Case-sensitivity-Footnote-2202996
-Node: Regexp Summary203104
-Node: Reading Files204570
-Node: Records206839
-Node: awk split records207914
-Node: gawk split records212614
-Ref: gawk split records-Footnote-1217688
-Node: Fields217725
-Node: Nonconstant Fields220466
-Ref: Nonconstant Fields-Footnote-1222702
-Node: Changing Fields222906
-Node: Field Separators228937
-Node: Default Field Splitting231692
-Node: Regexp Field Splitting232810
-Node: Single Character Fields236487
-Node: Comma Separated Fields237541
-Ref: table-csv-examples238805
-Node: Command Line Field Separator239268
-Node: Full Line Fields242485
-Ref: Full Line Fields-Footnote-1244007
-Ref: Full Line Fields-Footnote-2244053
-Node: Field Splitting Summary244154
-Node: Constant Size246334
-Node: Fixed width data247066
-Node: Skipping intervening250533
-Node: Allowing trailing data251331
-Node: Fields with fixed data252368
-Node: Splitting By Content253886
-Ref: Splitting By Content-Footnote-1257722
-Node: More CSV257885
-Node: FS versus FPAT259500
-Node: Testing field creation260660
-Node: Multiple Line262285
-Node: Getline268562
-Node: Plain Getline271031
-Node: Getline/Variable273604
-Node: Getline/File274755
-Node: Getline/Variable/File276143
-Ref: Getline/Variable/File-Footnote-1277748
-Node: Getline/Pipe277836
-Node: Getline/Variable/Pipe280540
-Node: Getline/Coprocess281675
-Node: Getline/Variable/Coprocess282942
-Node: Getline Notes283684
-Node: Getline Summary286481
-Ref: table-getline-variants286905
-Node: Read Timeout287654
-Ref: Read Timeout-Footnote-1291570
-Node: Retrying Input291628
-Node: Command-line directories292827
-Node: Input Summary293733
-Node: Input Exercises296905
-Node: Printing297339
-Node: Print299173
-Node: Print Examples300630
-Node: Output Separators303410
-Node: OFMT305427
-Node: Printf306783
-Node: Basic Printf307568
-Node: Control Letters309142
-Node: Format Modifiers314304
-Node: Printf Examples320319
-Node: Redirection322805
-Node: Special FD329646
-Ref: Special FD-Footnote-1332814
-Node: Special Files332888
-Node: Other Inherited Files333505
-Node: Special Network334506
-Node: Special Caveats335366
-Node: Close Files And Pipes336315
-Ref: table-close-pipe-return-values343222
-Ref: Close Files And Pipes-Footnote-1344036
-Ref: Close Files And Pipes-Footnote-2344184
-Node: Nonfatal344336
-Node: Output Summary346674
-Node: Output Exercises347896
-Node: Expressions348575
-Node: Values349763
-Node: Constants350441
-Node: Scalar Constants351132
-Ref: Scalar Constants-Footnote-1353642
-Node: Nondecimal-numbers353892
-Node: Regexp Constants356893
-Node: Using Constant Regexps357419
-Node: Standard Regexp Constants358041
-Node: Strong Regexp Constants361229
-Node: Variables364944
-Node: Using Variables365601
-Node: Assignment Options367511
-Node: Conversion369982
-Node: Strings And Numbers370506
-Ref: Strings And Numbers-Footnote-1373569
-Node: Locale influences conversions373678
-Ref: table-locale-affects376436
-Node: All Operators377055
-Node: Arithmetic Ops377684
-Node: Concatenation380400
-Ref: Concatenation-Footnote-1383247
-Node: Assignment Ops383354
-Ref: table-assign-ops388345
-Node: Increment Ops389659
-Node: Truth Values and Conditions393119
-Node: Truth Values394193
-Node: Typing and Comparison395241
-Node: Variable Typing396061
-Ref: Variable Typing-Footnote-1402524
-Ref: Variable Typing-Footnote-2402596
-Node: Comparison Operators402673
-Ref: table-relational-ops403092
-Node: POSIX String Comparison406588
-Ref: POSIX String Comparison-Footnote-1408283
-Ref: POSIX String Comparison-Footnote-2408422
-Node: Boolean Ops408506
-Ref: Boolean Ops-Footnote-1412988
-Node: Conditional Exp413080
-Node: Function Calls414816
-Node: Precedence418693
-Node: Locales422352
-Node: Expressions Summary423984
-Node: Patterns and Actions426557
-Node: Pattern Overview427677
-Node: Regexp Patterns429354
-Node: Expression Patterns429896
-Node: Ranges433677
-Node: BEGIN/END436785
-Node: Using BEGIN/END437546
-Ref: Using BEGIN/END-Footnote-1440300
-Node: I/O And BEGIN/END440406
-Node: BEGINFILE/ENDFILE442719
-Node: Empty445950
-Node: Using Shell Variables446267
-Node: Action Overview448541
-Node: Statements450866
-Node: If Statement452714
-Node: While Statement454209
-Node: Do Statement456237
-Node: For Statement457385
-Node: Switch Statement460640
-Node: Break Statement463081
-Node: Continue Statement465173
-Node: Next Statement467000
-Node: Nextfile Statement469383
-Node: Exit Statement472072
-Node: Built-in Variables474475
-Node: User-modified475608
-Node: Auto-set483375
-Ref: Auto-set-Footnote-1500077
-Ref: Auto-set-Footnote-2500283
-Node: ARGC and ARGV500339
-Node: Pattern Action Summary504552
-Node: Arrays506982
-Node: Array Basics508311
-Node: Array Intro509155
-Ref: figure-array-elements511130
-Ref: Array Intro-Footnote-1513835
-Node: Reference to Elements513963
-Node: Assigning Elements516427
-Node: Array Example516918
-Node: Scanning an Array518872
-Node: Controlling Scanning521894
-Ref: Controlling Scanning-Footnote-1528350
-Node: Numeric Array Subscripts528666
-Node: Uninitialized Subscripts530850
-Node: Delete532469
-Ref: Delete-Footnote-1535221
-Node: Multidimensional535278
-Node: Multiscanning538373
-Node: Arrays of Arrays539964
-Node: Arrays Summary544732
-Node: Functions546825
-Node: Built-in547863
-Node: Calling Built-in549016
-Node: Boolean Functions551012
-Node: Numeric Functions551566
-Ref: Numeric Functions-Footnote-1555593
-Ref: Numeric Functions-Footnote-2556241
-Ref: Numeric Functions-Footnote-3556289
-Node: String Functions556561
-Ref: String Functions-Footnote-1581701
-Ref: String Functions-Footnote-2581829
-Ref: String Functions-Footnote-3582077
-Node: Gory Details582164
-Ref: table-sub-escapes583955
-Ref: table-sub-proposed585475
-Ref: table-posix-sub586839
-Ref: table-gensub-escapes588381
-Ref: Gory Details-Footnote-1589205
-Node: I/O Functions589359
-Ref: table-system-return-values595813
-Ref: I/O Functions-Footnote-1597894
-Ref: I/O Functions-Footnote-2598042
-Node: Time Functions598162
-Ref: Time Functions-Footnote-1608833
-Ref: Time Functions-Footnote-2608901
-Ref: Time Functions-Footnote-3609059
-Ref: Time Functions-Footnote-4609170
-Ref: Time Functions-Footnote-5609282
-Ref: Time Functions-Footnote-6609509
-Node: Bitwise Functions609775
-Ref: table-bitwise-ops610369
-Ref: Bitwise Functions-Footnote-1616433
-Ref: Bitwise Functions-Footnote-2616606
-Node: Type Functions616797
-Node: I18N Functions620318
-Node: User-defined621969
-Node: Definition Syntax622781
-Ref: Definition Syntax-Footnote-1628475
-Node: Function Example628546
-Ref: Function Example-Footnote-1631468
-Node: Function Calling631490
-Node: Calling A Function632078
-Node: Variable Scope633036
-Node: Pass By Value/Reference636030
-Node: Function Caveats638674
-Ref: Function Caveats-Footnote-1640721
-Node: Return Statement640841
-Node: Dynamic Typing643820
-Node: Indirect Calls644750
-Node: Functions Summary655677
-Node: Library Functions658382
-Ref: Library Functions-Footnote-1661866
-Ref: Library Functions-Footnote-2662009
-Node: Library Names662180
-Ref: Library Names-Footnote-1665847
-Ref: Library Names-Footnote-2666070
-Node: General Functions666156
-Node: Strtonum Function667338
-Node: Assert Function670360
-Node: Round Function673686
-Node: Cliff Random Function675226
-Node: Ordinal Functions676242
-Ref: Ordinal Functions-Footnote-1679305
-Ref: Ordinal Functions-Footnote-2679557
-Node: Join Function679767
-Ref: Join Function-Footnote-1681537
-Node: Getlocaltime Function681737
-Node: Readfile Function685479
-Node: Shell Quoting687456
-Node: Isnumeric Function688884
-Node: Data File Management690272
-Node: Filetrans Function690904
-Node: Rewind Function695000
-Node: File Checking696909
-Ref: File Checking-Footnote-1698243
-Node: Empty Files698444
-Node: Ignoring Assigns700423
-Node: Getopt Function701973
-Ref: Getopt Function-Footnote-1717270
-Node: Passwd Functions717470
-Ref: Passwd Functions-Footnote-1726309
-Node: Group Functions726397
-Ref: Group Functions-Footnote-1734295
-Node: Walking Arrays734502
-Node: Library Functions Summary737510
-Node: Library Exercises738916
-Node: Sample Programs739381
-Node: Running Examples740151
-Node: Clones740879
-Node: Cut Program742103
-Node: Egrep Program752243
-Node: Id Program761244
-Node: Split Program771179
-Ref: Split Program-Footnote-1781072
-Node: Tee Program781245
-Node: Uniq Program784035
-Node: Wc Program791623
-Node: Bytes vs. Characters792010
-Node: Using extensions793558
-Node: wc program794312
-Node: Miscellaneous Programs799177
-Node: Dupword Program800390
-Node: Alarm Program802420
-Node: Translate Program807275
-Ref: Translate Program-Footnote-1811840
-Node: Labels Program812110
-Ref: Labels Program-Footnote-1815461
-Node: Word Sorting815545
-Node: History Sorting819617
-Node: Extract Program821842
-Node: Simple Sed829855
-Node: Igawk Program832929
-Ref: Igawk Program-Footnote-1847558
-Ref: Igawk Program-Footnote-2847760
-Ref: Igawk Program-Footnote-3847882
-Node: Anagram Program847997
-Node: Signature Program851059
-Node: Programs Summary852306
-Node: Programs Exercises853520
-Ref: Programs Exercises-Footnote-1857650
-Node: Advanced Features857736
-Node: Nondecimal Data860133
-Node: Boolean Typed Values861731
-Node: Array Sorting863612
-Node: Controlling Array Traversal864317
-Ref: Controlling Array Traversal-Footnote-1872685
-Node: Array Sorting Functions872803
-Ref: Array Sorting Functions-Footnote-1878714
-Node: Two-way I/O878910
-Ref: Two-way I/O-Footnote-1886636
-Ref: Two-way I/O-Footnote-2886823
-Node: TCP/IP Networking886905
-Node: Profiling889981
-Node: Persistent Memory899287
-Ref: Persistent Memory-Footnote-1907208
-Node: Extension Philosophy907335
-Node: Advanced Features Summary908822
-Node: Internationalization910994
-Node: I18N and L10N912668
-Node: Explaining gettext913355
-Ref: Explaining gettext-Footnote-1919247
-Ref: Explaining gettext-Footnote-2919432
-Node: Programmer i18n919597
-Ref: Programmer i18n-Footnote-1924546
-Node: Translator i18n924595
-Node: String Extraction925389
-Ref: String Extraction-Footnote-1926521
-Node: Printf Ordering926607
-Ref: Printf Ordering-Footnote-1929393
-Node: I18N Portability929457
-Ref: I18N Portability-Footnote-1931913
-Node: I18N Example931976
-Ref: I18N Example-Footnote-1935251
-Ref: I18N Example-Footnote-2935324
-Node: Gawk I18N935433
-Node: I18N Summary936055
-Node: Debugger937396
-Node: Debugging938396
-Node: Debugging Concepts938837
-Node: Debugging Terms940646
-Node: Awk Debugging943221
-Ref: Awk Debugging-Footnote-1944166
-Node: Sample Debugging Session944298
-Node: Debugger Invocation944832
-Node: Finding The Bug946218
-Node: List of Debugger Commands952692
-Node: Breakpoint Control954025
-Node: Debugger Execution Control957719
-Node: Viewing And Changing Data961081
-Node: Execution Stack964622
-Node: Debugger Info966259
-Node: Miscellaneous Debugger Commands970330
-Node: Readline Support975392
-Node: Limitations976288
-Node: Debugging Summary978842
-Node: Namespaces980121
-Node: Global Namespace981232
-Node: Qualified Names982630
-Node: Default Namespace983629
-Node: Changing The Namespace984370
-Node: Naming Rules985984
-Node: Internal Name Management987832
-Node: Namespace Example988874
-Node: Namespace And Features991436
-Node: Namespace Summary992871
-Node: Arbitrary Precision Arithmetic994348
-Node: Computer Arithmetic995835
-Ref: table-numeric-ranges999601
-Ref: table-floating-point-ranges1000095
-Ref: Computer Arithmetic-Footnote-11000754
-Node: Math Definitions1000811
-Ref: table-ieee-formats1003787
-Node: MPFR features1004355
-Node: MPFR On Parole1004800
-Ref: MPFR On Parole-Footnote-11005629
-Node: MPFR Intro1005784
-Node: FP Math Caution1007435
-Ref: FP Math Caution-Footnote-11008507
-Node: Inexactness of computations1008876
-Node: Inexact representation1009907
-Node: Comparing FP Values1011267
-Node: Errors accumulate1012508
-Node: Strange values1013964
-Ref: Strange values-Footnote-11016552
-Node: Getting Accuracy1016657
-Node: Try To Round1019367
-Node: Setting precision1020266
-Ref: table-predefined-precision-strings1020963
-Node: Setting the rounding mode1022794
-Ref: table-gawk-rounding-modes1023168
-Ref: Setting the rounding mode-Footnote-11027100
-Node: Arbitrary Precision Integers1027279
-Ref: Arbitrary Precision Integers-Footnote-11030454
-Node: Checking for MPFR1030603
-Node: POSIX Floating Point Problems1032077
-Ref: POSIX Floating Point Problems-Footnote-11036730
-Node: Floating point summary1036768
-Node: Dynamic Extensions1038958
-Node: Extension Intro1040511
-Node: Plugin License1041777
-Node: Extension Mechanism Outline1042574
-Ref: figure-load-extension1043013
-Ref: figure-register-new-function1044579
-Ref: figure-call-new-function1045672
-Node: Extension API Description1047735
-Node: Extension API Functions Introduction1049448
-Ref: table-api-std-headers1051284
-Node: General Data Types1055534
-Ref: General Data Types-Footnote-11064240
-Node: Memory Allocation Functions1064539
-Ref: Memory Allocation Functions-Footnote-11069040
-Node: Constructor Functions1069139
-Node: API Ownership of MPFR and GMP Values1072792
-Node: Registration Functions1074325
-Node: Extension Functions1075025
-Node: Exit Callback Functions1080347
-Node: Extension Version String1081597
-Node: Input Parsers1082260
-Node: Output Wrappers1094981
-Node: Two-way processors1099493
-Node: Printing Messages1101758
-Ref: Printing Messages-Footnote-11102929
-Node: Updating ERRNO1103082
-Node: Requesting Values1103821
-Ref: table-value-types-returned1104558
-Node: Accessing Parameters1105667
-Node: Symbol Table Access1106904
-Node: Symbol table by name1107416
-Ref: Symbol table by name-Footnote-11110441
-Node: Symbol table by cookie1110569
-Ref: Symbol table by cookie-Footnote-11114754
-Node: Cached values1114818
-Ref: Cached values-Footnote-11118354
-Node: Array Manipulation1118507
-Ref: Array Manipulation-Footnote-11119598
-Node: Array Data Types1119635
-Ref: Array Data Types-Footnote-11122293
-Node: Array Functions1122385
-Node: Flattening Arrays1127170
-Node: Creating Arrays1134146
-Node: Redirection API1138913
-Node: Extension API Variables1141746
-Node: Extension Versioning1142457
-Ref: gawk-api-version1142886
-Node: Extension GMP/MPFR Versioning1144618
-Node: Extension API Informational Variables1146246
-Node: Extension API Boilerplate1147319
-Node: Changes from API V11151293
-Node: Finding Extensions1152865
-Node: Extension Example1153424
-Node: Internal File Description1154222
-Node: Internal File Ops1158302
-Ref: Internal File Ops-Footnote-11169652
-Node: Using Internal File Ops1169792
-Ref: Using Internal File Ops-Footnote-11172175
-Node: Extension Samples1172449
-Node: Extension Sample File Functions1173978
-Node: Extension Sample Fnmatch1181627
-Node: Extension Sample Fork1183114
-Node: Extension Sample Inplace1184332
-Node: Extension Sample Ord1187958
-Node: Extension Sample Readdir1188794
-Ref: table-readdir-file-types1189683
-Node: Extension Sample Revout1190751
-Node: Extension Sample Rev2way1191340
-Node: Extension Sample Read write array1192080
-Node: Extension Sample Readfile1195245
-Node: Extension Sample Time1196340
-Node: Extension Sample API Tests1198092
-Node: gawkextlib1198584
-Node: Extension summary1201502
-Node: Extension Exercises1205204
-Node: Language History1206446
-Node: V7/SVR3.11208102
-Node: SVR41210254
-Node: POSIX1211688
-Node: BTL1213069
-Node: POSIX/GNU1213798
-Node: Feature History1219723
-Node: Common Extensions1237462
-Node: Ranges and Locales1238745
-Ref: Ranges and Locales-Footnote-11243361
-Ref: Ranges and Locales-Footnote-21243388
-Ref: Ranges and Locales-Footnote-31243623
-Node: Contributors1243846
-Node: History summary1249843
-Node: Installation1251223
-Node: Gawk Distribution1252167
-Node: Getting1252651
-Node: Extracting1253614
-Node: Distribution contents1255252
-Node: Unix Installation1262758
-Node: Quick Installation1263562
-Node: Compiling with MPFR1265982
-Node: Shell Startup Files1266672
-Node: Additional Configuration Options1267761
-Node: Configuration Philosophy1270076
-Node: Compiling from Git1272472
-Node: Building the Documentation1273027
-Node: Non-Unix Installation1274411
-Node: PC Installation1274871
-Node: PC Binary Installation1275712
-Node: PC Compiling1276585
-Node: PC Using1277691
-Node: Cygwin1281187
-Node: MSYS1282411
-Node: VMS Installation1283013
-Node: VMS Compilation1283732
-Ref: VMS Compilation-Footnote-11285139
-Node: VMS Dynamic Extensions1285197
-Ref: VMS Dynamic Extensions-Footnote-11286921
-Node: VMS Installation Details1287011
-Node: VMS Running1289273
-Node: VMS GNV1293552
-Node: Bugs1294266
-Node: Bug definition1295178
-Node: Bug address1298680
-Node: Usenet1302199
-Node: Performance bugs1303388
-Node: Asking for help1306309
-Node: Maintainers1308276
-Node: Other Versions1309283
-Node: Installation summary1317553
-Node: Notes1318910
-Node: Compatibility Mode1319704
-Node: Additions1320486
-Node: Accessing The Source1321411
-Node: Adding Code1322848
-Node: New Ports1329663
-Node: Derived Files1334038
-Ref: Derived Files-Footnote-11339698
-Ref: Derived Files-Footnote-21339733
-Ref: Derived Files-Footnote-31340331
-Node: Future Extensions1340445
-Node: Implementation Limitations1341103
-Node: Extension Design1342313
-Node: Old Extension Problems1343457
-Ref: Old Extension Problems-Footnote-11344975
-Node: Extension New Mechanism Goals1345032
-Ref: Extension New Mechanism Goals-Footnote-11348396
-Node: Extension Other Design Decisions1348585
-Node: Extension Future Growth1350698
-Node: Notes summary1351304
-Node: Basic Concepts1352462
-Node: Basic High Level1353143
-Ref: figure-general-flow1353425
-Ref: figure-process-flow1354111
-Ref: Basic High Level-Footnote-11357413
-Node: Basic Data Typing1357598
-Node: Glossary1360926
-Node: Copying1392813
-Node: GNU Free Documentation License1430356
-Node: Index1455476
+Node: Case-sensitivity200013
+Ref: Case-sensitivity-Footnote-1202879
+Ref: Case-sensitivity-Footnote-2203114
+Node: Regexp Summary203222
+Node: Reading Files204688
+Node: Records206957
+Node: awk split records208032
+Node: gawk split records212732
+Ref: gawk split records-Footnote-1217806
+Node: Fields217843
+Node: Nonconstant Fields220584
+Ref: Nonconstant Fields-Footnote-1222820
+Node: Changing Fields223024
+Node: Field Separators229055
+Node: Default Field Splitting231810
+Node: Regexp Field Splitting232928
+Node: Single Character Fields236605
+Node: Comma Separated Fields237659
+Ref: table-csv-examples238923
+Node: Command Line Field Separator239386
+Node: Full Line Fields242603
+Ref: Full Line Fields-Footnote-1244125
+Ref: Full Line Fields-Footnote-2244171
+Node: Field Splitting Summary244272
+Node: Constant Size246452
+Node: Fixed width data247184
+Node: Skipping intervening250651
+Node: Allowing trailing data251449
+Node: Fields with fixed data252486
+Node: Splitting By Content254004
+Ref: Splitting By Content-Footnote-1257840
+Node: More CSV258003
+Node: FS versus FPAT259618
+Node: Testing field creation260778
+Node: Multiple Line262403
+Node: Getline268680
+Node: Plain Getline271149
+Node: Getline/Variable273722
+Node: Getline/File274873
+Node: Getline/Variable/File276261
+Ref: Getline/Variable/File-Footnote-1277866
+Node: Getline/Pipe277954
+Node: Getline/Variable/Pipe280658
+Node: Getline/Coprocess281793
+Node: Getline/Variable/Coprocess283060
+Node: Getline Notes283802
+Node: Getline Summary286599
+Ref: table-getline-variants287023
+Node: Read Timeout287772
+Ref: Read Timeout-Footnote-1291688
+Node: Retrying Input291746
+Node: Command-line directories292945
+Node: Input Summary293851
+Node: Input Exercises297023
+Node: Printing297457
+Node: Print299291
+Node: Print Examples300748
+Node: Output Separators303528
+Node: OFMT305545
+Node: Printf306901
+Node: Basic Printf307686
+Node: Control Letters309260
+Node: Format Modifiers314422
+Node: Printf Examples320437
+Node: Redirection322923
+Node: Special FD329764
+Ref: Special FD-Footnote-1332932
+Node: Special Files333006
+Node: Other Inherited Files333623
+Node: Special Network334624
+Node: Special Caveats335484
+Node: Close Files And Pipes336433
+Ref: table-close-pipe-return-values343340
+Ref: Close Files And Pipes-Footnote-1344154
+Ref: Close Files And Pipes-Footnote-2344302
+Node: Nonfatal344454
+Node: Output Summary346792
+Node: Output Exercises348014
+Node: Expressions348693
+Node: Values349881
+Node: Constants350559
+Node: Scalar Constants351250
+Ref: Scalar Constants-Footnote-1353760
+Node: Nondecimal-numbers354010
+Node: Regexp Constants357011
+Node: Using Constant Regexps357537
+Node: Standard Regexp Constants358159
+Node: Strong Regexp Constants361347
+Node: Variables365062
+Node: Using Variables365719
+Node: Assignment Options367629
+Node: Conversion370100
+Node: Strings And Numbers370624
+Ref: Strings And Numbers-Footnote-1373687
+Node: Locale influences conversions373796
+Ref: table-locale-affects376554
+Node: All Operators377173
+Node: Arithmetic Ops377802
+Node: Concatenation380518
+Ref: Concatenation-Footnote-1383365
+Node: Assignment Ops383472
+Ref: table-assign-ops388463
+Node: Increment Ops389777
+Node: Truth Values and Conditions393237
+Node: Truth Values394311
+Node: Typing and Comparison395359
+Node: Variable Typing396179
+Ref: Variable Typing-Footnote-1402642
+Ref: Variable Typing-Footnote-2402714
+Node: Comparison Operators402791
+Ref: table-relational-ops403210
+Node: POSIX String Comparison406706
+Ref: POSIX String Comparison-Footnote-1408401
+Ref: POSIX String Comparison-Footnote-2408540
+Node: Boolean Ops408624
+Ref: Boolean Ops-Footnote-1413106
+Node: Conditional Exp413198
+Node: Function Calls414934
+Node: Precedence418811
+Node: Locales422470
+Node: Expressions Summary424102
+Node: Patterns and Actions426675
+Node: Pattern Overview427795
+Node: Regexp Patterns429472
+Node: Expression Patterns430014
+Node: Ranges433795
+Node: BEGIN/END436903
+Node: Using BEGIN/END437664
+Ref: Using BEGIN/END-Footnote-1440418
+Node: I/O And BEGIN/END440524
+Node: BEGINFILE/ENDFILE442837
+Node: Empty446068
+Node: Using Shell Variables446385
+Node: Action Overview448659
+Node: Statements450984
+Node: If Statement452832
+Node: While Statement454327
+Node: Do Statement456355
+Node: For Statement457503
+Node: Switch Statement460758
+Node: Break Statement463199
+Node: Continue Statement465291
+Node: Next Statement467118
+Node: Nextfile Statement469501
+Node: Exit Statement472190
+Node: Built-in Variables474593
+Node: User-modified475726
+Node: Auto-set483493
+Ref: Auto-set-Footnote-1500195
+Ref: Auto-set-Footnote-2500401
+Node: ARGC and ARGV500457
+Node: Pattern Action Summary504670
+Node: Arrays507100
+Node: Array Basics508429
+Node: Array Intro509273
+Ref: figure-array-elements511248
+Ref: Array Intro-Footnote-1513953
+Node: Reference to Elements514081
+Node: Assigning Elements516545
+Node: Array Example517036
+Node: Scanning an Array518990
+Node: Controlling Scanning522012
+Ref: Controlling Scanning-Footnote-1528468
+Node: Numeric Array Subscripts528784
+Node: Uninitialized Subscripts530968
+Node: Delete532587
+Ref: Delete-Footnote-1535339
+Node: Multidimensional535396
+Node: Multiscanning538491
+Node: Arrays of Arrays540082
+Node: Arrays Summary544850
+Node: Functions546943
+Node: Built-in547981
+Node: Calling Built-in549134
+Node: Boolean Functions551130
+Node: Numeric Functions551684
+Ref: Numeric Functions-Footnote-1555711
+Ref: Numeric Functions-Footnote-2556359
+Ref: Numeric Functions-Footnote-3556407
+Node: String Functions556679
+Ref: String Functions-Footnote-1581819
+Ref: String Functions-Footnote-2581947
+Ref: String Functions-Footnote-3582195
+Node: Gory Details582282
+Ref: table-sub-escapes584073
+Ref: table-sub-proposed585593
+Ref: table-posix-sub586957
+Ref: table-gensub-escapes588499
+Ref: Gory Details-Footnote-1589323
+Node: I/O Functions589477
+Ref: table-system-return-values595931
+Ref: I/O Functions-Footnote-1598012
+Ref: I/O Functions-Footnote-2598160
+Node: Time Functions598280
+Ref: Time Functions-Footnote-1608951
+Ref: Time Functions-Footnote-2609019
+Ref: Time Functions-Footnote-3609177
+Ref: Time Functions-Footnote-4609288
+Ref: Time Functions-Footnote-5609400
+Ref: Time Functions-Footnote-6609627
+Node: Bitwise Functions609893
+Ref: table-bitwise-ops610487
+Ref: Bitwise Functions-Footnote-1616551
+Ref: Bitwise Functions-Footnote-2616724
+Node: Type Functions616915
+Node: I18N Functions620436
+Node: User-defined622087
+Node: Definition Syntax622899
+Ref: Definition Syntax-Footnote-1628593
+Node: Function Example628664
+Ref: Function Example-Footnote-1631586
+Node: Function Calling631608
+Node: Calling A Function632196
+Node: Variable Scope633154
+Node: Pass By Value/Reference636148
+Node: Function Caveats638792
+Ref: Function Caveats-Footnote-1640839
+Node: Return Statement640959
+Node: Dynamic Typing643938
+Node: Indirect Calls644868
+Node: Functions Summary655795
+Node: Library Functions658500
+Ref: Library Functions-Footnote-1661984
+Ref: Library Functions-Footnote-2662127
+Node: Library Names662298
+Ref: Library Names-Footnote-1665965
+Ref: Library Names-Footnote-2666188
+Node: General Functions666274
+Node: Strtonum Function667456
+Node: Assert Function670478
+Node: Round Function673804
+Node: Cliff Random Function675344
+Node: Ordinal Functions676360
+Ref: Ordinal Functions-Footnote-1679423
+Ref: Ordinal Functions-Footnote-2679675
+Node: Join Function679885
+Ref: Join Function-Footnote-1681655
+Node: Getlocaltime Function681855
+Node: Readfile Function685597
+Node: Shell Quoting687574
+Node: Isnumeric Function689002
+Node: Data File Management690390
+Node: Filetrans Function691022
+Node: Rewind Function695118
+Node: File Checking697027
+Ref: File Checking-Footnote-1698361
+Node: Empty Files698562
+Node: Ignoring Assigns700541
+Node: Getopt Function702091
+Ref: Getopt Function-Footnote-1717388
+Node: Passwd Functions717588
+Ref: Passwd Functions-Footnote-1726427
+Node: Group Functions726515
+Ref: Group Functions-Footnote-1734413
+Node: Walking Arrays734620
+Node: Library Functions Summary737628
+Node: Library Exercises739034
+Node: Sample Programs739499
+Node: Running Examples740269
+Node: Clones740997
+Node: Cut Program742221
+Node: Egrep Program752361
+Node: Id Program761362
+Node: Split Program771297
+Ref: Split Program-Footnote-1781190
+Node: Tee Program781363
+Node: Uniq Program784153
+Node: Wc Program791741
+Node: Bytes vs. Characters792128
+Node: Using extensions793676
+Node: wc program794430
+Node: Miscellaneous Programs799295
+Node: Dupword Program800508
+Node: Alarm Program802538
+Node: Translate Program807393
+Ref: Translate Program-Footnote-1811958
+Node: Labels Program812228
+Ref: Labels Program-Footnote-1815579
+Node: Word Sorting815663
+Node: History Sorting819735
+Node: Extract Program821960
+Node: Simple Sed829973
+Node: Igawk Program833047
+Ref: Igawk Program-Footnote-1847676
+Ref: Igawk Program-Footnote-2847878
+Ref: Igawk Program-Footnote-3848000
+Node: Anagram Program848115
+Node: Signature Program851177
+Node: Programs Summary852424
+Node: Programs Exercises853638
+Ref: Programs Exercises-Footnote-1857768
+Node: Advanced Features857854
+Node: Nondecimal Data860251
+Node: Boolean Typed Values861849
+Node: Array Sorting863730
+Node: Controlling Array Traversal864435
+Ref: Controlling Array Traversal-Footnote-1872803
+Node: Array Sorting Functions872921
+Ref: Array Sorting Functions-Footnote-1878832
+Node: Two-way I/O879028
+Ref: Two-way I/O-Footnote-1886754
+Ref: Two-way I/O-Footnote-2886941
+Node: TCP/IP Networking887023
+Node: Profiling890099
+Node: Persistent Memory899405
+Ref: Persistent Memory-Footnote-1907326
+Node: Extension Philosophy907453
+Node: Advanced Features Summary908940
+Node: Internationalization911112
+Node: I18N and L10N912786
+Node: Explaining gettext913473
+Ref: Explaining gettext-Footnote-1919365
+Ref: Explaining gettext-Footnote-2919550
+Node: Programmer i18n919715
+Ref: Programmer i18n-Footnote-1924664
+Node: Translator i18n924713
+Node: String Extraction925507
+Ref: String Extraction-Footnote-1926639
+Node: Printf Ordering926725
+Ref: Printf Ordering-Footnote-1929511
+Node: I18N Portability929575
+Ref: I18N Portability-Footnote-1932031
+Node: I18N Example932094
+Ref: I18N Example-Footnote-1935369
+Ref: I18N Example-Footnote-2935442
+Node: Gawk I18N935551
+Node: I18N Summary936173
+Node: Debugger937514
+Node: Debugging938514
+Node: Debugging Concepts938955
+Node: Debugging Terms940764
+Node: Awk Debugging943339
+Ref: Awk Debugging-Footnote-1944284
+Node: Sample Debugging Session944416
+Node: Debugger Invocation944950
+Node: Finding The Bug946336
+Node: List of Debugger Commands952810
+Node: Breakpoint Control954143
+Node: Debugger Execution Control957837
+Node: Viewing And Changing Data961199
+Node: Execution Stack964740
+Node: Debugger Info966377
+Node: Miscellaneous Debugger Commands970448
+Node: Readline Support975510
+Node: Limitations976406
+Node: Debugging Summary978960
+Node: Namespaces980239
+Node: Global Namespace981350
+Node: Qualified Names982748
+Node: Default Namespace983747
+Node: Changing The Namespace984488
+Node: Naming Rules986102
+Node: Internal Name Management987950
+Node: Namespace Example988992
+Node: Namespace And Features991554
+Node: Namespace Summary992989
+Node: Arbitrary Precision Arithmetic994466
+Node: Computer Arithmetic995953
+Ref: table-numeric-ranges999719
+Ref: table-floating-point-ranges1000213
+Ref: Computer Arithmetic-Footnote-11000872
+Node: Math Definitions1000929
+Ref: table-ieee-formats1003905
+Node: MPFR features1004473
+Node: MPFR On Parole1004918
+Ref: MPFR On Parole-Footnote-11005747
+Node: MPFR Intro1005902
+Node: FP Math Caution1007553
+Ref: FP Math Caution-Footnote-11008625
+Node: Inexactness of computations1008994
+Node: Inexact representation1010025
+Node: Comparing FP Values1011385
+Node: Errors accumulate1012626
+Node: Strange values1014082
+Ref: Strange values-Footnote-11016670
+Node: Getting Accuracy1016775
+Node: Try To Round1019485
+Node: Setting precision1020384
+Ref: table-predefined-precision-strings1021081
+Node: Setting the rounding mode1022912
+Ref: table-gawk-rounding-modes1023286
+Ref: Setting the rounding mode-Footnote-11027218
+Node: Arbitrary Precision Integers1027397
+Ref: Arbitrary Precision Integers-Footnote-11030572
+Node: Checking for MPFR1030721
+Node: POSIX Floating Point Problems1032195
+Ref: POSIX Floating Point Problems-Footnote-11036848
+Node: Floating point summary1036886
+Node: Dynamic Extensions1039076
+Node: Extension Intro1040629
+Node: Plugin License1041895
+Node: Extension Mechanism Outline1042692
+Ref: figure-load-extension1043131
+Ref: figure-register-new-function1044697
+Ref: figure-call-new-function1045790
+Node: Extension API Description1047853
+Node: Extension API Functions Introduction1049566
+Ref: table-api-std-headers1051402
+Node: General Data Types1055652
+Ref: General Data Types-Footnote-11064358
+Node: Memory Allocation Functions1064657
+Ref: Memory Allocation Functions-Footnote-11069158
+Node: Constructor Functions1069257
+Node: API Ownership of MPFR and GMP Values1072910
+Node: Registration Functions1074443
+Node: Extension Functions1075143
+Node: Exit Callback Functions1080465
+Node: Extension Version String1081715
+Node: Input Parsers1082378
+Node: Output Wrappers1095099
+Node: Two-way processors1099611
+Node: Printing Messages1101876
+Ref: Printing Messages-Footnote-11103047
+Node: Updating ERRNO1103200
+Node: Requesting Values1103939
+Ref: table-value-types-returned1104676
+Node: Accessing Parameters1105785
+Node: Symbol Table Access1107022
+Node: Symbol table by name1107534
+Ref: Symbol table by name-Footnote-11110559
+Node: Symbol table by cookie1110687
+Ref: Symbol table by cookie-Footnote-11114872
+Node: Cached values1114936
+Ref: Cached values-Footnote-11118472
+Node: Array Manipulation1118625
+Ref: Array Manipulation-Footnote-11119716
+Node: Array Data Types1119753
+Ref: Array Data Types-Footnote-11122411
+Node: Array Functions1122503
+Node: Flattening Arrays1127288
+Node: Creating Arrays1134264
+Node: Redirection API1139031
+Node: Extension API Variables1141864
+Node: Extension Versioning1142575
+Ref: gawk-api-version1143004
+Node: Extension GMP/MPFR Versioning1144736
+Node: Extension API Informational Variables1146364
+Node: Extension API Boilerplate1147437
+Node: Changes from API V11151411
+Node: Finding Extensions1152983
+Node: Extension Example1153542
+Node: Internal File Description1154340
+Node: Internal File Ops1158420
+Ref: Internal File Ops-Footnote-11169770
+Node: Using Internal File Ops1169910
+Ref: Using Internal File Ops-Footnote-11172293
+Node: Extension Samples1172567
+Node: Extension Sample File Functions1174096
+Node: Extension Sample Fnmatch1181745
+Node: Extension Sample Fork1183232
+Node: Extension Sample Inplace1184450
+Node: Extension Sample Ord1188076
+Node: Extension Sample Readdir1188912
+Ref: table-readdir-file-types1189801
+Node: Extension Sample Revout1190869
+Node: Extension Sample Rev2way1191458
+Node: Extension Sample Read write array1192198
+Node: Extension Sample Readfile1195384
+Node: Extension Sample Time1196479
+Node: Extension Sample API Tests1198231
+Node: gawkextlib1198723
+Node: Extension summary1201641
+Node: Extension Exercises1205343
+Node: Language History1206585
+Node: V7/SVR3.11208241
+Node: SVR41210393
+Node: POSIX1211827
+Node: BTL1213208
+Node: POSIX/GNU1213937
+Node: Feature History1219862
+Node: Common Extensions1237601
+Node: Ranges and Locales1238884
+Ref: Ranges and Locales-Footnote-11243500
+Ref: Ranges and Locales-Footnote-21243527
+Ref: Ranges and Locales-Footnote-31243762
+Node: Contributors1243985
+Node: History summary1249982
+Node: Installation1251362
+Node: Gawk Distribution1252306
+Node: Getting1252790
+Node: Extracting1253753
+Node: Distribution contents1255391
+Node: Unix Installation1262897
+Node: Quick Installation1263701
+Node: Compiling with MPFR1266121
+Node: Shell Startup Files1266811
+Node: Additional Configuration Options1267900
+Node: Configuration Philosophy1270215
+Node: Compiling from Git1272611
+Node: Building the Documentation1273166
+Node: Non-Unix Installation1274550
+Node: PC Installation1275010
+Node: PC Binary Installation1275851
+Node: PC Compiling1276724
+Node: PC Using1277830
+Node: Cygwin1281326
+Node: MSYS1282550
+Node: VMS Installation1283152
+Node: VMS Compilation1283871
+Ref: VMS Compilation-Footnote-11285278
+Node: VMS Dynamic Extensions1285336
+Ref: VMS Dynamic Extensions-Footnote-11287060
+Node: VMS Installation Details1287150
+Node: VMS Running1289412
+Node: VMS GNV1293691
+Node: Bugs1294405
+Node: Bug definition1295317
+Node: Bug address1298819
+Node: Usenet1302338
+Node: Performance bugs1303527
+Node: Asking for help1306448
+Node: Maintainers1308415
+Node: Other Versions1309422
+Node: Installation summary1317692
+Node: Notes1319049
+Node: Compatibility Mode1319843
+Node: Additions1320625
+Node: Accessing The Source1321550
+Node: Adding Code1322987
+Node: New Ports1329802
+Node: Derived Files1334177
+Ref: Derived Files-Footnote-11339837
+Ref: Derived Files-Footnote-21339872
+Ref: Derived Files-Footnote-31340470
+Node: Future Extensions1340584
+Node: Implementation Limitations1341242
+Node: Extension Design1342452
+Node: Old Extension Problems1343596
+Ref: Old Extension Problems-Footnote-11345114
+Node: Extension New Mechanism Goals1345171
+Ref: Extension New Mechanism Goals-Footnote-11348535
+Node: Extension Other Design Decisions1348724
+Node: Extension Future Growth1350837
+Node: Notes summary1351443
+Node: Basic Concepts1352601
+Node: Basic High Level1353282
+Ref: figure-general-flow1353564
+Ref: figure-process-flow1354250
+Ref: Basic High Level-Footnote-11357552
+Node: Basic Data Typing1357737
+Node: Glossary1361065
+Node: Copying1392952
+Node: GNU Free Documentation License1430495
+Node: Index1455615

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index c553f3e6..db4c94c8 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -6694,6 +6694,8 @@ Matches the empty string that occurs between two
word-constituent characters. For example,
@code{/\Brat\B/} matches @samp{crate}, but it does not match @samp{dirty rat}.
@samp{\B} is essentially the opposite of @samp{\y}.
+Another way to think of this is that @samp{\B} matches the empty string
+provided it's not at the edge of a word.
@end table
@cindex buffers @subentry operators for
@@ -40227,7 +40229,8 @@ It returns one on success, or zero upon failure
This function takes a string argument, which is the name of the
file from which to read the contents of various global variables.
For each variable in the file, the data is loaded unless the variable
-already exists. If the variable already exists, the data for that variable
+has already been assigned a value or used as an array.
+In that case, the data for that variable
in the file is ignored.
It returns one on success, or zero upon failure.
@end table
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index bf093bb6..81ec46ea 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -6378,6 +6378,8 @@ Matches the empty string that occurs between two
word-constituent characters. For example,
@code{/\Brat\B/} matches @samp{crate}, but it does not match @samp{dirty rat}.
@samp{\B} is essentially the opposite of @samp{\y}.
+Another way to think of this is that @samp{\B} matches the empty string
+provided it's not at the edge of a word.
@end table
@cindex buffers @subentry operators for
@@ -39070,7 +39072,8 @@ It returns one on success, or zero upon failure
This function takes a string argument, which is the name of the
file from which to read the contents of various global variables.
For each variable in the file, the data is loaded unless the variable
-already exists. If the variable already exists, the data for that variable
+has already been assigned a value or used as an array.
+In that case, the data for that variable
in the file is ignored.
It returns one on success, or zero upon failure.
@end table
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 2fb0edff..db568436 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2022-09-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * rwarray.c (do_poke): Handle namespaced variables (foo::bar).
+ Thanks to J Naman, <gawker@703n.com> for the report.
+
2022-09-04 Arnold D. Robbins <arnold@skeeve.com>
* 5.2.0: Release tar ball made.
diff --git a/extension/rwarray.c b/extension/rwarray.c
index 3e09102e..1a3a7d10 100644
--- a/extension/rwarray.c
+++ b/extension/rwarray.c
@@ -454,15 +454,34 @@ do_poke(awk_element_t *e)
if (e->index.val_type != AWK_STRING)
return awk_false;
- /* So this is a bit tricky. If the program refers to the variable,
+ /*
+ * So this is a bit tricky. If the program refers to the variable,
* then it will already exist in an undefined state after parsing.
* If the program never refers to it, then the lookup fails.
* We still need to create it in case the program accesses it via
- * indirection through the SYMTAB table. */
- if (sym_lookup(e->index.str_value.str, AWK_UNDEFINED, &t) && (t.val_type != AWK_UNDEFINED))
+ * indirection through the SYMTAB table.
+ */
+ // it's even trickier, we need to handle foo::bar as well
+ char *p = strstr(e->index.str_value.str, "::");
+ char *ns, *ident;
+ if (p != NULL) {
+ ns = e->index.str_value.str;
+ ident = p + 2;
+ *p = '\0';
+ } else {
+ ns = "";
+ ident = e->index.str_value.str;
+ }
+
+ if (sym_lookup_ns(ns, ident, AWK_UNDEFINED, & t)
+ && (t.val_type != AWK_UNDEFINED))
return awk_false;
- if (! sym_update(e->index.str_value.str, & e->value)) {
- warning(ext_id, _("readall: unable to set %s"), e->index.str_value.str);
+
+ if (! sym_update_ns(ns, ident, & e->value)) {
+ if (ns[0])
+ warning(ext_id, _("readall: unable to set %s::%s"), ns, ident);
+ else
+ warning(ext_id, _("readall: unable to set %s"), ident);
return awk_false;
}
return awk_true;
diff --git a/pc/ChangeLog b/pc/ChangeLog
index 8733d2af..3f73f70d 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,7 @@
+2022-09-16 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.tst: Regenerated.
+
2022-09-14 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.tst: Regenerated.
diff --git a/pc/Makefile.tst b/pc/Makefile.tst
index df530a54..7fc78920 100644
--- a/pc/Makefile.tst
+++ b/pc/Makefile.tst
@@ -189,7 +189,8 @@ GAWK_EXT_TESTS = \
arraysort2 arraytype asortbool backw badargs beginfile1 beginfile2 \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf csv1 dbugeval dbugeval2 \
- dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
+ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \
+ devfd devfd1 devfd2 \
dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \
errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
@@ -244,7 +245,7 @@ SHLIB_TESTS = \
# List of the tests which should be run with --debug option:
-NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3
+NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 dbugeval4
# List of the tests which should be run with --lint option:
NEED_LINT = \
@@ -2721,6 +2722,11 @@ dbugeval3:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+dbugeval4:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
dbugtypedre1:
@echo $@
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/ChangeLog b/test/ChangeLog
index 1ecdb39c..334e4667 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,13 @@
+2022-09-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * readall.ok, readall1.awk, readall2.awk: Update for code changes.
+
+2022-09-16 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DIST): New test: dbugeval4.
+ (NEED_DEBUG): Add dbugeval4.
+ * dbugeval4.awk, dbugeval4.in, dbugeval4.ok: New files.
+
2022-09-14 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.am (EXTRA_DIST): New tests: elemnew1, elemnew2, elemnew3.
diff --git a/test/Makefile.am b/test/Makefile.am
index c8707d22..7c1197dc 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -237,6 +237,9 @@ EXTRA_DIST = \
dbugeval3.awk \
dbugeval3.in \
dbugeval3.ok \
+ dbugeval4.awk \
+ dbugeval4.in \
+ dbugeval4.ok \
dbugtypedre1.awk \
dbugtypedre1.in \
dbugtypedre1.ok \
@@ -1488,7 +1491,8 @@ GAWK_EXT_TESTS = \
arraysort2 arraytype asortbool backw badargs beginfile1 beginfile2 \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf csv1 dbugeval dbugeval2 \
- dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
+ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \
+ devfd devfd1 devfd2 \
dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \
errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
@@ -1546,7 +1550,7 @@ SHLIB_TESTS = \
testext time
# List of the tests which should be run with --debug option:
-NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3
+NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 dbugeval4
# List of the tests which should be run with --lint option:
NEED_LINT = \
diff --git a/test/Makefile.in b/test/Makefile.in
index f02bbccb..05516ed7 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -505,6 +505,9 @@ EXTRA_DIST = \
dbugeval3.awk \
dbugeval3.in \
dbugeval3.ok \
+ dbugeval4.awk \
+ dbugeval4.in \
+ dbugeval4.ok \
dbugtypedre1.awk \
dbugtypedre1.in \
dbugtypedre1.ok \
@@ -1756,7 +1759,8 @@ GAWK_EXT_TESTS = \
arraysort2 arraytype asortbool backw badargs beginfile1 beginfile2 \
binmode1 charasbytes clos1way clos1way2 clos1way3 clos1way4 \
clos1way5 clos1way6 colonwarn commas crlf csv1 dbugeval dbugeval2 \
- dbugeval3 dbugtypedre1 dbugtypedre2 delsub devfd devfd1 devfd2 \
+ dbugeval3 dbugeval4 dbugtypedre1 dbugtypedre2 delsub \
+ devfd devfd1 devfd2 \
dfacheck1 dumpvars elemnew1 elemnew2 elemnew3 \
errno exit fieldwdth forcenum fpat1 fpat2 \
fpat3 fpat4 fpat5 fpat6 fpat7 fpat8 fpat9 fpatnull fsfwfs functab1 \
@@ -1811,7 +1815,7 @@ SHLIB_TESTS = \
# List of the tests which should be run with --debug option:
-NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3
+NEED_DEBUG = dbugtypedre1 dbugtypedre2 dbugeval2 dbugeval3 dbugeval4
# List of the tests which should be run with --lint option:
NEED_LINT = \
@@ -4471,6 +4475,11 @@ dbugeval3:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+dbugeval4:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
dbugtypedre1:
@echo $@
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 11130eef..bae0dc5d 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -1417,6 +1417,11 @@ dbugeval3:
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+dbugeval4:
+ @echo $@
+ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
dbugtypedre1:
@echo $@
@-AWKPATH="$(srcdir)" $(AWK) -f $@.awk --debug < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/dbugeval4.awk b/test/dbugeval4.awk
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/dbugeval4.awk
diff --git a/test/dbugeval4.in b/test/dbugeval4.in
new file mode 100644
index 00000000..cf7b513f
--- /dev/null
+++ b/test/dbugeval4.in
@@ -0,0 +1,2 @@
+eval "a()"
+eval "print 1"
diff --git a/test/dbugeval4.ok b/test/dbugeval4.ok
new file mode 100644
index 00000000..a40d0891
--- /dev/null
+++ b/test/dbugeval4.ok
@@ -0,0 +1,5 @@
+gawk: cmd. line:1: fatal: function `a' not defined
+fatal error during eval, need to restart.
+Restarting ...
+1
+EXIT CODE: 2
diff --git a/test/readall.ok b/test/readall.ok
index b343af59..8aa6899f 100644
--- a/test/readall.ok
+++ b/test/readall.ok
@@ -1,6 +1,7 @@
1
1
5.9 3 -2.327
+42
zebra[archie] = banana
zebra[0] = apple
zebra[3][foo] = bar
diff --git a/test/readall1.awk b/test/readall1.awk
index 2888d157..4f90c73d 100644
--- a/test/readall1.awk
+++ b/test/readall1.awk
@@ -2,6 +2,7 @@ BEGIN {
x = 5.9
y = 3
z = -2.327
+ guide::answer = 42
zebra[0] = "apple"
zebra["archie"] = "banana"
zebra[3]["foo"] = "bar"
diff --git a/test/readall2.awk b/test/readall2.awk
index 8b79849a..af45751d 100644
--- a/test/readall2.awk
+++ b/test/readall2.awk
@@ -10,6 +10,7 @@ function printarray(n, x, i) {
BEGIN {
print readall(ifile)
print x, y, z
+ print guide::answer
#print zebra[0], zebra[3]["foo"], zebra[3]["bar"]
printarray("zebra", zebra)
}