aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-10-14 22:38:20 +0300
committerArnold D. Robbins <arnold@skeeve.com>2014-10-14 22:38:20 +0300
commitd7a6deaeca178a15c600fbc13262aca29fb39753 (patch)
treeb7e0fbc6bee89648933fbd54667ff6c3e74551a6
parent2a8c128ca91b42261720368e5d25431ee4362c70 (diff)
parentcb9faa8c276efc4e2b24378bdb941d007523fc22 (diff)
downloadegawk-d7a6deaeca178a15c600fbc13262aca29fb39753.tar.gz
egawk-d7a6deaeca178a15c600fbc13262aca29fb39753.tar.bz2
egawk-d7a6deaeca178a15c600fbc13262aca29fb39753.zip
Merge branch 'gawk-4.1-stable'
-rw-r--r--doc/ChangeLog4
-rw-r--r--doc/gawk.info1155
-rw-r--r--doc/gawk.texi59
-rw-r--r--doc/gawktexi.in59
4 files changed, 712 insertions, 565 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog
index ed2a2761..05b7585e 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2014-10-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Add new Foreword from Mike Brennan.
+
2014-10-13 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: Fix example outputs in chapter 2.
diff --git a/doc/gawk.info b/doc/gawk.info
index caa557e8..6ca2e807 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -29,7 +29,7 @@ entitled "GNU Free Documentation License".
modify this GNU manual."

-File: gawk.info, Node: Top, Next: Foreword, Up: (dir)
+File: gawk.info, Node: Top, Next: Foreword3, Up: (dir)
General Introduction
********************
@@ -58,8 +58,9 @@ entitled "GNU Free Documentation License".
* Menu:
-* Foreword:: Some nice words about this
+* Foreword3:: Some nice words about this
Info file.
+* Foreword4:: More nice words.
* Preface:: What this Info file is about; brief
history and acknowledgments.
* Getting Started:: A basic introduction to using
@@ -679,10 +680,10 @@ your life together with me.
lives in innumerable ways.

-File: gawk.info, Node: Foreword, Next: Preface, Prev: Top, Up: Top
+File: gawk.info, Node: Foreword3, Next: Foreword4, Prev: Top, Up: Top
-Foreword
-********
+Foreword to the Third Edition
+*****************************
Arnold Robbins and I are good friends. We were introduced in 1990 by
circumstances--and our favorite programming language, AWK. The
@@ -766,7 +767,41 @@ want to learn how, then read this book.
March, 2001

-File: gawk.info, Node: Preface, Next: Getting Started, Prev: Foreword, Up: Top
+File: gawk.info, Node: Foreword4, Next: Preface, Prev: Foreword3, Up: Top
+
+Foreword to the Fourth Edition
+******************************
+
+Some things don't change. Thirteen years ago I wrote: "If you use AWK
+or want to learn how, then read this book." True then and still true
+today.
+
+ Learning to use a programming language is more than mastering the
+syntax. One needs to acquire an understanding of how to use the
+features of the language to solve practical programming problems. A
+focus of this book is many examples that show how to use AWK.
+
+ Some things do change. Our computers are much faster and have more
+memory. Consequently, speed and storage inefficiencies of a high level
+language matter less. Prototyping in AWK and then rewriting in C for
+performance reasons happens less, because more often the prototype is
+fast enough.
+
+ Of course, there are computing operations that are best done in C or
+C++. With `gawk' 4.1 and later, you do not have to choose between
+writing your program in AWK or in C/C++. You can write most of your
+program in AWK and the aspects that require C/C++ capabilities can be
+written in C/C++ and then the pieces glued together when the `gawk'
+module loads the C/C++ module as a dynamic plug-in. *note Dynamic
+Extensions::, has all the details, and as expected, many examples to
+help you learn the ins and outs.
+
+ Michael Brennan
+ Author of `mawk'
+ October, 2014
+
+
+File: gawk.info, Node: Preface, Next: Getting Started, Prev: Foreword4, Up: Top
Preface
*******
@@ -31861,7 +31896,8 @@ Index
* Brennan, Michael <2>: Simple Sed. (line 25)
* Brennan, Michael <3>: Delete. (line 56)
* Brennan, Michael <4>: Acknowledgments. (line 78)
-* Brennan, Michael: Foreword. (line 83)
+* Brennan, Michael <5>: Foreword4. (line 30)
+* Brennan, Michael: Foreword3. (line 83)
* Brian Kernighan's awk <1>: I/O Functions. (line 43)
* Brian Kernighan's awk <2>: Gory Details. (line 19)
* Brian Kernighan's awk <3>: String Functions. (line 491)
@@ -34308,557 +34344,558 @@ Index

Tag Table:
Node: Top1204
-Node: Foreword42103
-Node: Preface46450
-Ref: Preface-Footnote-149320
-Ref: Preface-Footnote-249427
-Ref: Preface-Footnote-349660
-Node: History49802
-Node: Names52150
-Ref: Names-Footnote-153244
-Node: This Manual53390
-Ref: This Manual-Footnote-159219
-Node: Conventions59319
-Node: Manual History61659
-Ref: Manual History-Footnote-164650
-Ref: Manual History-Footnote-264691
-Node: How To Contribute64765
-Node: Acknowledgments66004
-Node: Getting Started70812
-Node: Running gawk73246
-Node: One-shot74436
-Node: Read Terminal75661
-Node: Long77688
-Node: Executable Scripts79204
-Ref: Executable Scripts-Footnote-181993
-Node: Comments82095
-Node: Quoting84568
-Node: DOS Quoting90074
-Node: Sample Data Files90749
-Node: Very Simple93342
-Node: Two Rules98233
-Node: More Complex100119
-Node: Statements/Lines102981
-Ref: Statements/Lines-Footnote-1107437
-Node: Other Features107702
-Node: When108633
-Ref: When-Footnote-1110389
-Node: Intro Summary110454
-Node: Invoking Gawk111337
-Node: Command Line112852
-Node: Options113643
-Ref: Options-Footnote-1129409
-Node: Other Arguments129434
-Node: Naming Standard Input132395
-Node: Environment Variables133488
-Node: AWKPATH Variable134046
-Ref: AWKPATH Variable-Footnote-1136898
-Ref: AWKPATH Variable-Footnote-2136943
-Node: AWKLIBPATH Variable137203
-Node: Other Environment Variables137962
-Node: Exit Status141453
-Node: Include Files142128
-Node: Loading Shared Libraries145716
-Node: Obsolete147143
-Node: Undocumented147840
-Node: Invoking Summary148107
-Node: Regexp149773
-Node: Regexp Usage151232
-Node: Escape Sequences153265
-Node: Regexp Operators159365
-Ref: Regexp Operators-Footnote-1166799
-Ref: Regexp Operators-Footnote-2166946
-Node: Bracket Expressions167044
-Ref: table-char-classes169061
-Node: Leftmost Longest172001
-Node: Computed Regexps173303
-Node: GNU Regexp Operators176700
-Node: Case-sensitivity180402
-Ref: Case-sensitivity-Footnote-1183292
-Ref: Case-sensitivity-Footnote-2183527
-Node: Regexp Summary183635
-Node: Reading Files185104
-Node: Records187198
-Node: awk split records187930
-Node: gawk split records192844
-Ref: gawk split records-Footnote-1197383
-Node: Fields197420
-Ref: Fields-Footnote-1200218
-Node: Nonconstant Fields200304
-Ref: Nonconstant Fields-Footnote-1202540
-Node: Changing Fields202742
-Node: Field Separators208674
-Node: Default Field Splitting211378
-Node: Regexp Field Splitting212495
-Node: Single Character Fields215845
-Node: Command Line Field Separator216904
-Node: Full Line Fields220116
-Ref: Full Line Fields-Footnote-1220624
-Node: Field Splitting Summary220670
-Ref: Field Splitting Summary-Footnote-1223801
-Node: Constant Size223902
-Node: Splitting By Content228508
-Ref: Splitting By Content-Footnote-1232581
-Node: Multiple Line232621
-Ref: Multiple Line-Footnote-1238510
-Node: Getline238689
-Node: Plain Getline240900
-Node: Getline/Variable243540
-Node: Getline/File244687
-Node: Getline/Variable/File246071
-Ref: Getline/Variable/File-Footnote-1247672
-Node: Getline/Pipe247759
-Node: Getline/Variable/Pipe250442
-Node: Getline/Coprocess251573
-Node: Getline/Variable/Coprocess252825
-Node: Getline Notes253564
-Node: Getline Summary256356
-Ref: table-getline-variants256768
-Node: Read Timeout257597
-Ref: Read Timeout-Footnote-1261411
-Node: Command-line directories261469
-Node: Input Summary262373
-Node: Input Exercises265625
-Node: Printing266353
-Node: Print268130
-Node: Print Examples269587
-Node: Output Separators272366
-Node: OFMT274384
-Node: Printf275738
-Node: Basic Printf276523
-Node: Control Letters278094
-Node: Format Modifiers282078
-Node: Printf Examples288085
-Node: Redirection290567
-Node: Special FD297406
-Ref: Special FD-Footnote-1300563
-Node: Special Files300637
-Node: Other Inherited Files301253
-Node: Special Network302253
-Node: Special Caveats303114
-Node: Close Files And Pipes304065
-Ref: Close Files And Pipes-Footnote-1311244
-Ref: Close Files And Pipes-Footnote-2311392
-Node: Output Summary311542
-Node: Output Exercises312538
-Node: Expressions313218
-Node: Values314403
-Node: Constants315079
-Node: Scalar Constants315759
-Ref: Scalar Constants-Footnote-1316618
-Node: Nondecimal-numbers316868
-Node: Regexp Constants319868
-Node: Using Constant Regexps320393
-Node: Variables323531
-Node: Using Variables324186
-Node: Assignment Options326096
-Node: Conversion327971
-Node: Strings And Numbers328495
-Ref: Strings And Numbers-Footnote-1331559
-Node: Locale influences conversions331668
-Ref: table-locale-affects334413
-Node: All Operators335001
-Node: Arithmetic Ops335631
-Node: Concatenation338136
-Ref: Concatenation-Footnote-1340955
-Node: Assignment Ops341061
-Ref: table-assign-ops346044
-Node: Increment Ops347322
-Node: Truth Values and Conditions350760
-Node: Truth Values351843
-Node: Typing and Comparison352892
-Node: Variable Typing353685
-Node: Comparison Operators357337
-Ref: table-relational-ops357747
-Node: POSIX String Comparison361262
-Ref: POSIX String Comparison-Footnote-1362334
-Node: Boolean Ops362472
-Ref: Boolean Ops-Footnote-1366951
-Node: Conditional Exp367042
-Node: Function Calls368769
-Node: Precedence372649
-Node: Locales376317
-Node: Expressions Summary377948
-Node: Patterns and Actions380522
-Node: Pattern Overview381642
-Node: Regexp Patterns383321
-Node: Expression Patterns383864
-Node: Ranges387644
-Node: BEGIN/END390750
-Node: Using BEGIN/END391512
-Ref: Using BEGIN/END-Footnote-1394249
-Node: I/O And BEGIN/END394355
-Node: BEGINFILE/ENDFILE396669
-Node: Empty399570
-Node: Using Shell Variables399887
-Node: Action Overview402163
-Node: Statements404490
-Node: If Statement406338
-Node: While Statement407836
-Node: Do Statement409864
-Node: For Statement411006
-Node: Switch Statement414161
-Node: Break Statement416549
-Node: Continue Statement418590
-Node: Next Statement420415
-Node: Nextfile Statement422795
-Node: Exit Statement425425
-Node: Built-in Variables427828
-Node: User-modified428961
-Ref: User-modified-Footnote-1436641
-Node: Auto-set436703
-Ref: Auto-set-Footnote-1450070
-Ref: Auto-set-Footnote-2450275
-Node: ARGC and ARGV450331
-Node: Pattern Action Summary454535
-Node: Arrays456962
-Node: Array Basics458291
-Node: Array Intro459135
-Ref: figure-array-elements461099
-Ref: Array Intro-Footnote-1463623
-Node: Reference to Elements463751
-Node: Assigning Elements466201
-Node: Array Example466692
-Node: Scanning an Array468450
-Node: Controlling Scanning471466
-Ref: Controlling Scanning-Footnote-1476655
-Node: Numeric Array Subscripts476971
-Node: Uninitialized Subscripts479156
-Node: Delete480773
-Ref: Delete-Footnote-1483517
-Node: Multidimensional483574
-Node: Multiscanning486669
-Node: Arrays of Arrays488258
-Node: Arrays Summary493019
-Node: Functions495124
-Node: Built-in495997
-Node: Calling Built-in497075
-Node: Numeric Functions499063
-Ref: Numeric Functions-Footnote-1503887
-Ref: Numeric Functions-Footnote-2504244
-Ref: Numeric Functions-Footnote-3504292
-Node: String Functions504561
-Ref: String Functions-Footnote-1528033
-Ref: String Functions-Footnote-2528162
-Ref: String Functions-Footnote-3528410
-Node: Gory Details528497
-Ref: table-sub-escapes530278
-Ref: table-sub-proposed531798
-Ref: table-posix-sub533162
-Ref: table-gensub-escapes534702
-Ref: Gory Details-Footnote-1535534
-Node: I/O Functions535685
-Ref: I/O Functions-Footnote-1542786
-Node: Time Functions542933
-Ref: Time Functions-Footnote-1553402
-Ref: Time Functions-Footnote-2553470
-Ref: Time Functions-Footnote-3553628
-Ref: Time Functions-Footnote-4553739
-Ref: Time Functions-Footnote-5553851
-Ref: Time Functions-Footnote-6554078
-Node: Bitwise Functions554344
-Ref: table-bitwise-ops554906
-Ref: Bitwise Functions-Footnote-1559214
-Node: Type Functions559383
-Node: I18N Functions560532
-Node: User-defined562177
-Node: Definition Syntax562981
-Ref: Definition Syntax-Footnote-1568387
-Node: Function Example568456
-Ref: Function Example-Footnote-1571373
-Node: Function Caveats571395
-Node: Calling A Function571913
-Node: Variable Scope572868
-Node: Pass By Value/Reference575856
-Node: Return Statement579366
-Node: Dynamic Typing582350
-Node: Indirect Calls583279
-Ref: Indirect Calls-Footnote-1594583
-Node: Functions Summary594711
-Node: Library Functions597410
-Ref: Library Functions-Footnote-1601028
-Ref: Library Functions-Footnote-2601171
-Node: Library Names601342
-Ref: Library Names-Footnote-1604802
-Ref: Library Names-Footnote-2605022
-Node: General Functions605108
-Node: Strtonum Function606211
-Node: Assert Function609231
-Node: Round Function612555
-Node: Cliff Random Function614096
-Node: Ordinal Functions615112
-Ref: Ordinal Functions-Footnote-1618177
-Ref: Ordinal Functions-Footnote-2618429
-Node: Join Function618640
-Ref: Join Function-Footnote-1620411
-Node: Getlocaltime Function620611
-Node: Readfile Function624352
-Node: Shell Quoting626322
-Node: Data File Management627723
-Node: Filetrans Function628355
-Node: Rewind Function632414
-Node: File Checking633799
-Ref: File Checking-Footnote-1635127
-Node: Empty Files635328
-Node: Ignoring Assigns637307
-Node: Getopt Function638858
-Ref: Getopt Function-Footnote-1650318
-Node: Passwd Functions650521
-Ref: Passwd Functions-Footnote-1659372
-Node: Group Functions659460
-Ref: Group Functions-Footnote-1667363
-Node: Walking Arrays667576
-Node: Library Functions Summary669179
-Node: Library Exercises670580
-Node: Sample Programs671860
-Node: Running Examples672630
-Node: Clones673358
-Node: Cut Program674582
-Node: Egrep Program684312
-Ref: Egrep Program-Footnote-1691816
-Node: Id Program691926
-Node: Split Program695570
-Ref: Split Program-Footnote-1699016
-Node: Tee Program699144
-Node: Uniq Program701931
-Node: Wc Program709352
-Ref: Wc Program-Footnote-1713600
-Node: Miscellaneous Programs713692
-Node: Dupword Program714905
-Node: Alarm Program716936
-Node: Translate Program721740
-Ref: Translate Program-Footnote-1726304
-Node: Labels Program726574
-Ref: Labels Program-Footnote-1729923
-Node: Word Sorting730007
-Node: History Sorting734077
-Node: Extract Program735913
-Node: Simple Sed743445
-Node: Igawk Program746507
-Ref: Igawk Program-Footnote-1760833
-Ref: Igawk Program-Footnote-2761034
-Ref: Igawk Program-Footnote-3761156
-Node: Anagram Program761271
-Node: Signature Program764333
-Node: Programs Summary765580
-Node: Programs Exercises766773
-Ref: Programs Exercises-Footnote-1770904
-Node: Advanced Features770995
-Node: Nondecimal Data772943
-Node: Array Sorting774533
-Node: Controlling Array Traversal775230
-Ref: Controlling Array Traversal-Footnote-1783561
-Node: Array Sorting Functions783679
-Ref: Array Sorting Functions-Footnote-1787571
-Node: Two-way I/O787765
-Ref: Two-way I/O-Footnote-1792709
-Ref: Two-way I/O-Footnote-2792895
-Node: TCP/IP Networking792977
-Node: Profiling795849
-Node: Advanced Features Summary803402
-Node: Internationalization805335
-Node: I18N and L10N806815
-Node: Explaining gettext807501
-Ref: Explaining gettext-Footnote-1812530
-Ref: Explaining gettext-Footnote-2812714
-Node: Programmer i18n812879
-Ref: Programmer i18n-Footnote-1817745
-Node: Translator i18n817794
-Node: String Extraction818588
-Ref: String Extraction-Footnote-1819719
-Node: Printf Ordering819805
-Ref: Printf Ordering-Footnote-1822591
-Node: I18N Portability822655
-Ref: I18N Portability-Footnote-1825104
-Node: I18N Example825167
-Ref: I18N Example-Footnote-1827967
-Node: Gawk I18N828039
-Node: I18N Summary828677
-Node: Debugger830016
-Node: Debugging831038
-Node: Debugging Concepts831479
-Node: Debugging Terms833336
-Node: Awk Debugging835911
-Node: Sample Debugging Session836803
-Node: Debugger Invocation837323
-Node: Finding The Bug838707
-Node: List of Debugger Commands845182
-Node: Breakpoint Control846514
-Node: Debugger Execution Control850206
-Node: Viewing And Changing Data853570
-Node: Execution Stack856935
-Node: Debugger Info858573
-Node: Miscellaneous Debugger Commands862590
-Node: Readline Support867782
-Node: Limitations868674
-Node: Debugging Summary870771
-Node: Arbitrary Precision Arithmetic871939
-Node: Computer Arithmetic873355
-Ref: table-numeric-ranges876956
-Ref: Computer Arithmetic-Footnote-1877815
-Node: Math Definitions877872
-Ref: table-ieee-formats881159
-Ref: Math Definitions-Footnote-1881763
-Node: MPFR features881868
-Node: FP Math Caution883539
-Ref: FP Math Caution-Footnote-1884589
-Node: Inexactness of computations884958
-Node: Inexact representation885906
-Node: Comparing FP Values887261
-Node: Errors accumulate888334
-Node: Getting Accuracy889767
-Node: Try To Round892426
-Node: Setting precision893325
-Ref: table-predefined-precision-strings894009
-Node: Setting the rounding mode895803
-Ref: table-gawk-rounding-modes896167
-Ref: Setting the rounding mode-Footnote-1899621
-Node: Arbitrary Precision Integers899800
-Ref: Arbitrary Precision Integers-Footnote-1904704
-Node: POSIX Floating Point Problems904853
-Ref: POSIX Floating Point Problems-Footnote-1908729
-Node: Floating point summary908767
-Node: Dynamic Extensions910959
-Node: Extension Intro912511
-Node: Plugin License913777
-Node: Extension Mechanism Outline914574
-Ref: figure-load-extension915002
-Ref: figure-register-new-function916482
-Ref: figure-call-new-function917486
-Node: Extension API Description919472
-Node: Extension API Functions Introduction920922
-Node: General Data Types925758
-Ref: General Data Types-Footnote-1931445
-Node: Memory Allocation Functions931744
-Ref: Memory Allocation Functions-Footnote-1934574
-Node: Constructor Functions934670
-Node: Registration Functions936404
-Node: Extension Functions937089
-Node: Exit Callback Functions939385
-Node: Extension Version String940633
-Node: Input Parsers941283
-Node: Output Wrappers951098
-Node: Two-way processors955614
-Node: Printing Messages957818
-Ref: Printing Messages-Footnote-1958895
-Node: Updating `ERRNO'959047
-Node: Requesting Values959787
-Ref: table-value-types-returned960515
-Node: Accessing Parameters961473
-Node: Symbol Table Access962704
-Node: Symbol table by name963218
-Node: Symbol table by cookie965198
-Ref: Symbol table by cookie-Footnote-1969337
-Node: Cached values969400
-Ref: Cached values-Footnote-1972904
-Node: Array Manipulation972995
-Ref: Array Manipulation-Footnote-1974093
-Node: Array Data Types974132
-Ref: Array Data Types-Footnote-1976789
-Node: Array Functions976881
-Node: Flattening Arrays980735
-Node: Creating Arrays987622
-Node: Extension API Variables992389
-Node: Extension Versioning993025
-Node: Extension API Informational Variables994926
-Node: Extension API Boilerplate996014
-Node: Finding Extensions999830
-Node: Extension Example1000390
-Node: Internal File Description1001162
-Node: Internal File Ops1005229
-Ref: Internal File Ops-Footnote-11016887
-Node: Using Internal File Ops1017027
-Ref: Using Internal File Ops-Footnote-11019410
-Node: Extension Samples1019683
-Node: Extension Sample File Functions1021207
-Node: Extension Sample Fnmatch1028809
-Node: Extension Sample Fork1030291
-Node: Extension Sample Inplace1031504
-Node: Extension Sample Ord1033179
-Node: Extension Sample Readdir1034015
-Ref: table-readdir-file-types1034871
-Node: Extension Sample Revout1035682
-Node: Extension Sample Rev2way1036273
-Node: Extension Sample Read write array1037014
-Node: Extension Sample Readfile1038953
-Node: Extension Sample Time1040048
-Node: Extension Sample API Tests1041397
-Node: gawkextlib1041888
-Node: Extension summary1044538
-Node: Extension Exercises1048220
-Node: Language History1048942
-Node: V7/SVR3.11050599
-Node: SVR41052780
-Node: POSIX1054225
-Node: BTL1055614
-Node: POSIX/GNU1056348
-Node: Feature History1061977
-Node: Common Extensions1075068
-Node: Ranges and Locales1076392
-Ref: Ranges and Locales-Footnote-11081031
-Ref: Ranges and Locales-Footnote-21081058
-Ref: Ranges and Locales-Footnote-31081292
-Node: Contributors1081513
-Node: History summary1087053
-Node: Installation1088422
-Node: Gawk Distribution1089378
-Node: Getting1089862
-Node: Extracting1090686
-Node: Distribution contents1092328
-Node: Unix Installation1098098
-Node: Quick Installation1098715
-Node: Additional Configuration Options1101146
-Node: Configuration Philosophy1102886
-Node: Non-Unix Installation1105237
-Node: PC Installation1105695
-Node: PC Binary Installation1107021
-Node: PC Compiling1108869
-Ref: PC Compiling-Footnote-11111890
-Node: PC Testing1111995
-Node: PC Using1113171
-Node: Cygwin1117286
-Node: MSYS1118109
-Node: VMS Installation1118607
-Node: VMS Compilation1119399
-Ref: VMS Compilation-Footnote-11120621
-Node: VMS Dynamic Extensions1120679
-Node: VMS Installation Details1122363
-Node: VMS Running1124615
-Node: VMS GNV1127456
-Node: VMS Old Gawk1128190
-Node: Bugs1128660
-Node: Other Versions1132564
-Node: Installation summary1138777
-Node: Notes1139833
-Node: Compatibility Mode1140698
-Node: Additions1141480
-Node: Accessing The Source1142405
-Node: Adding Code1143841
-Node: New Ports1150013
-Node: Derived Files1154495
-Ref: Derived Files-Footnote-11159970
-Ref: Derived Files-Footnote-21160004
-Ref: Derived Files-Footnote-31160600
-Node: Future Extensions1160714
-Node: Implementation Limitations1161320
-Node: Extension Design1162568
-Node: Old Extension Problems1163722
-Ref: Old Extension Problems-Footnote-11165239
-Node: Extension New Mechanism Goals1165296
-Ref: Extension New Mechanism Goals-Footnote-11168656
-Node: Extension Other Design Decisions1168845
-Node: Extension Future Growth1170953
-Node: Old Extension Mechanism1171789
-Node: Notes summary1173551
-Node: Basic Concepts1174737
-Node: Basic High Level1175418
-Ref: figure-general-flow1175690
-Ref: figure-process-flow1176289
-Ref: Basic High Level-Footnote-11179518
-Node: Basic Data Typing1179703
-Node: Glossary1183031
-Node: Copying1208189
-Node: GNU Free Documentation License1245745
-Node: Index1270881
+Node: Foreword342156
+Node: Foreword446548
+Node: Preface47982
+Ref: Preface-Footnote-150853
+Ref: Preface-Footnote-250960
+Ref: Preface-Footnote-351193
+Node: History51335
+Node: Names53683
+Ref: Names-Footnote-154777
+Node: This Manual54923
+Ref: This Manual-Footnote-160752
+Node: Conventions60852
+Node: Manual History63192
+Ref: Manual History-Footnote-166183
+Ref: Manual History-Footnote-266224
+Node: How To Contribute66298
+Node: Acknowledgments67537
+Node: Getting Started72345
+Node: Running gawk74779
+Node: One-shot75969
+Node: Read Terminal77194
+Node: Long79221
+Node: Executable Scripts80737
+Ref: Executable Scripts-Footnote-183526
+Node: Comments83628
+Node: Quoting86101
+Node: DOS Quoting91607
+Node: Sample Data Files92282
+Node: Very Simple94875
+Node: Two Rules99766
+Node: More Complex101652
+Node: Statements/Lines104514
+Ref: Statements/Lines-Footnote-1108970
+Node: Other Features109235
+Node: When110166
+Ref: When-Footnote-1111922
+Node: Intro Summary111987
+Node: Invoking Gawk112870
+Node: Command Line114385
+Node: Options115176
+Ref: Options-Footnote-1130942
+Node: Other Arguments130967
+Node: Naming Standard Input133928
+Node: Environment Variables135021
+Node: AWKPATH Variable135579
+Ref: AWKPATH Variable-Footnote-1138431
+Ref: AWKPATH Variable-Footnote-2138476
+Node: AWKLIBPATH Variable138736
+Node: Other Environment Variables139495
+Node: Exit Status142986
+Node: Include Files143661
+Node: Loading Shared Libraries147249
+Node: Obsolete148676
+Node: Undocumented149373
+Node: Invoking Summary149640
+Node: Regexp151306
+Node: Regexp Usage152765
+Node: Escape Sequences154798
+Node: Regexp Operators160898
+Ref: Regexp Operators-Footnote-1168332
+Ref: Regexp Operators-Footnote-2168479
+Node: Bracket Expressions168577
+Ref: table-char-classes170594
+Node: Leftmost Longest173534
+Node: Computed Regexps174836
+Node: GNU Regexp Operators178233
+Node: Case-sensitivity181935
+Ref: Case-sensitivity-Footnote-1184825
+Ref: Case-sensitivity-Footnote-2185060
+Node: Regexp Summary185168
+Node: Reading Files186637
+Node: Records188731
+Node: awk split records189463
+Node: gawk split records194377
+Ref: gawk split records-Footnote-1198916
+Node: Fields198953
+Ref: Fields-Footnote-1201751
+Node: Nonconstant Fields201837
+Ref: Nonconstant Fields-Footnote-1204073
+Node: Changing Fields204275
+Node: Field Separators210207
+Node: Default Field Splitting212911
+Node: Regexp Field Splitting214028
+Node: Single Character Fields217378
+Node: Command Line Field Separator218437
+Node: Full Line Fields221649
+Ref: Full Line Fields-Footnote-1222157
+Node: Field Splitting Summary222203
+Ref: Field Splitting Summary-Footnote-1225334
+Node: Constant Size225435
+Node: Splitting By Content230041
+Ref: Splitting By Content-Footnote-1234114
+Node: Multiple Line234154
+Ref: Multiple Line-Footnote-1240043
+Node: Getline240222
+Node: Plain Getline242433
+Node: Getline/Variable245073
+Node: Getline/File246220
+Node: Getline/Variable/File247604
+Ref: Getline/Variable/File-Footnote-1249205
+Node: Getline/Pipe249292
+Node: Getline/Variable/Pipe251975
+Node: Getline/Coprocess253106
+Node: Getline/Variable/Coprocess254358
+Node: Getline Notes255097
+Node: Getline Summary257889
+Ref: table-getline-variants258301
+Node: Read Timeout259130
+Ref: Read Timeout-Footnote-1262944
+Node: Command-line directories263002
+Node: Input Summary263906
+Node: Input Exercises267158
+Node: Printing267886
+Node: Print269663
+Node: Print Examples271120
+Node: Output Separators273899
+Node: OFMT275917
+Node: Printf277271
+Node: Basic Printf278056
+Node: Control Letters279627
+Node: Format Modifiers283611
+Node: Printf Examples289618
+Node: Redirection292100
+Node: Special FD298939
+Ref: Special FD-Footnote-1302096
+Node: Special Files302170
+Node: Other Inherited Files302786
+Node: Special Network303786
+Node: Special Caveats304647
+Node: Close Files And Pipes305598
+Ref: Close Files And Pipes-Footnote-1312777
+Ref: Close Files And Pipes-Footnote-2312925
+Node: Output Summary313075
+Node: Output Exercises314071
+Node: Expressions314751
+Node: Values315936
+Node: Constants316612
+Node: Scalar Constants317292
+Ref: Scalar Constants-Footnote-1318151
+Node: Nondecimal-numbers318401
+Node: Regexp Constants321401
+Node: Using Constant Regexps321926
+Node: Variables325064
+Node: Using Variables325719
+Node: Assignment Options327629
+Node: Conversion329504
+Node: Strings And Numbers330028
+Ref: Strings And Numbers-Footnote-1333092
+Node: Locale influences conversions333201
+Ref: table-locale-affects335946
+Node: All Operators336534
+Node: Arithmetic Ops337164
+Node: Concatenation339669
+Ref: Concatenation-Footnote-1342488
+Node: Assignment Ops342594
+Ref: table-assign-ops347577
+Node: Increment Ops348855
+Node: Truth Values and Conditions352293
+Node: Truth Values353376
+Node: Typing and Comparison354425
+Node: Variable Typing355218
+Node: Comparison Operators358870
+Ref: table-relational-ops359280
+Node: POSIX String Comparison362795
+Ref: POSIX String Comparison-Footnote-1363867
+Node: Boolean Ops364005
+Ref: Boolean Ops-Footnote-1368484
+Node: Conditional Exp368575
+Node: Function Calls370302
+Node: Precedence374182
+Node: Locales377850
+Node: Expressions Summary379481
+Node: Patterns and Actions382055
+Node: Pattern Overview383175
+Node: Regexp Patterns384854
+Node: Expression Patterns385397
+Node: Ranges389177
+Node: BEGIN/END392283
+Node: Using BEGIN/END393045
+Ref: Using BEGIN/END-Footnote-1395782
+Node: I/O And BEGIN/END395888
+Node: BEGINFILE/ENDFILE398202
+Node: Empty401103
+Node: Using Shell Variables401420
+Node: Action Overview403696
+Node: Statements406023
+Node: If Statement407871
+Node: While Statement409369
+Node: Do Statement411397
+Node: For Statement412539
+Node: Switch Statement415694
+Node: Break Statement418082
+Node: Continue Statement420123
+Node: Next Statement421948
+Node: Nextfile Statement424328
+Node: Exit Statement426958
+Node: Built-in Variables429361
+Node: User-modified430494
+Ref: User-modified-Footnote-1438174
+Node: Auto-set438236
+Ref: Auto-set-Footnote-1451603
+Ref: Auto-set-Footnote-2451808
+Node: ARGC and ARGV451864
+Node: Pattern Action Summary456068
+Node: Arrays458495
+Node: Array Basics459824
+Node: Array Intro460668
+Ref: figure-array-elements462632
+Ref: Array Intro-Footnote-1465156
+Node: Reference to Elements465284
+Node: Assigning Elements467734
+Node: Array Example468225
+Node: Scanning an Array469983
+Node: Controlling Scanning472999
+Ref: Controlling Scanning-Footnote-1478188
+Node: Numeric Array Subscripts478504
+Node: Uninitialized Subscripts480689
+Node: Delete482306
+Ref: Delete-Footnote-1485050
+Node: Multidimensional485107
+Node: Multiscanning488202
+Node: Arrays of Arrays489791
+Node: Arrays Summary494552
+Node: Functions496657
+Node: Built-in497530
+Node: Calling Built-in498608
+Node: Numeric Functions500596
+Ref: Numeric Functions-Footnote-1505420
+Ref: Numeric Functions-Footnote-2505777
+Ref: Numeric Functions-Footnote-3505825
+Node: String Functions506094
+Ref: String Functions-Footnote-1529566
+Ref: String Functions-Footnote-2529695
+Ref: String Functions-Footnote-3529943
+Node: Gory Details530030
+Ref: table-sub-escapes531811
+Ref: table-sub-proposed533331
+Ref: table-posix-sub534695
+Ref: table-gensub-escapes536235
+Ref: Gory Details-Footnote-1537067
+Node: I/O Functions537218
+Ref: I/O Functions-Footnote-1544319
+Node: Time Functions544466
+Ref: Time Functions-Footnote-1554935
+Ref: Time Functions-Footnote-2555003
+Ref: Time Functions-Footnote-3555161
+Ref: Time Functions-Footnote-4555272
+Ref: Time Functions-Footnote-5555384
+Ref: Time Functions-Footnote-6555611
+Node: Bitwise Functions555877
+Ref: table-bitwise-ops556439
+Ref: Bitwise Functions-Footnote-1560747
+Node: Type Functions560916
+Node: I18N Functions562065
+Node: User-defined563710
+Node: Definition Syntax564514
+Ref: Definition Syntax-Footnote-1569920
+Node: Function Example569989
+Ref: Function Example-Footnote-1572906
+Node: Function Caveats572928
+Node: Calling A Function573446
+Node: Variable Scope574401
+Node: Pass By Value/Reference577389
+Node: Return Statement580899
+Node: Dynamic Typing583883
+Node: Indirect Calls584812
+Ref: Indirect Calls-Footnote-1596116
+Node: Functions Summary596244
+Node: Library Functions598943
+Ref: Library Functions-Footnote-1602561
+Ref: Library Functions-Footnote-2602704
+Node: Library Names602875
+Ref: Library Names-Footnote-1606335
+Ref: Library Names-Footnote-2606555
+Node: General Functions606641
+Node: Strtonum Function607744
+Node: Assert Function610764
+Node: Round Function614088
+Node: Cliff Random Function615629
+Node: Ordinal Functions616645
+Ref: Ordinal Functions-Footnote-1619710
+Ref: Ordinal Functions-Footnote-2619962
+Node: Join Function620173
+Ref: Join Function-Footnote-1621944
+Node: Getlocaltime Function622144
+Node: Readfile Function625885
+Node: Shell Quoting627855
+Node: Data File Management629256
+Node: Filetrans Function629888
+Node: Rewind Function633947
+Node: File Checking635332
+Ref: File Checking-Footnote-1636660
+Node: Empty Files636861
+Node: Ignoring Assigns638840
+Node: Getopt Function640391
+Ref: Getopt Function-Footnote-1651851
+Node: Passwd Functions652054
+Ref: Passwd Functions-Footnote-1660905
+Node: Group Functions660993
+Ref: Group Functions-Footnote-1668896
+Node: Walking Arrays669109
+Node: Library Functions Summary670712
+Node: Library Exercises672113
+Node: Sample Programs673393
+Node: Running Examples674163
+Node: Clones674891
+Node: Cut Program676115
+Node: Egrep Program685845
+Ref: Egrep Program-Footnote-1693349
+Node: Id Program693459
+Node: Split Program697103
+Ref: Split Program-Footnote-1700549
+Node: Tee Program700677
+Node: Uniq Program703464
+Node: Wc Program710885
+Ref: Wc Program-Footnote-1715133
+Node: Miscellaneous Programs715225
+Node: Dupword Program716438
+Node: Alarm Program718469
+Node: Translate Program723273
+Ref: Translate Program-Footnote-1727837
+Node: Labels Program728107
+Ref: Labels Program-Footnote-1731456
+Node: Word Sorting731540
+Node: History Sorting735610
+Node: Extract Program737446
+Node: Simple Sed744978
+Node: Igawk Program748040
+Ref: Igawk Program-Footnote-1762366
+Ref: Igawk Program-Footnote-2762567
+Ref: Igawk Program-Footnote-3762689
+Node: Anagram Program762804
+Node: Signature Program765866
+Node: Programs Summary767113
+Node: Programs Exercises768306
+Ref: Programs Exercises-Footnote-1772437
+Node: Advanced Features772528
+Node: Nondecimal Data774476
+Node: Array Sorting776066
+Node: Controlling Array Traversal776763
+Ref: Controlling Array Traversal-Footnote-1785094
+Node: Array Sorting Functions785212
+Ref: Array Sorting Functions-Footnote-1789104
+Node: Two-way I/O789298
+Ref: Two-way I/O-Footnote-1794242
+Ref: Two-way I/O-Footnote-2794428
+Node: TCP/IP Networking794510
+Node: Profiling797382
+Node: Advanced Features Summary804935
+Node: Internationalization806868
+Node: I18N and L10N808348
+Node: Explaining gettext809034
+Ref: Explaining gettext-Footnote-1814063
+Ref: Explaining gettext-Footnote-2814247
+Node: Programmer i18n814412
+Ref: Programmer i18n-Footnote-1819278
+Node: Translator i18n819327
+Node: String Extraction820121
+Ref: String Extraction-Footnote-1821252
+Node: Printf Ordering821338
+Ref: Printf Ordering-Footnote-1824124
+Node: I18N Portability824188
+Ref: I18N Portability-Footnote-1826637
+Node: I18N Example826700
+Ref: I18N Example-Footnote-1829500
+Node: Gawk I18N829572
+Node: I18N Summary830210
+Node: Debugger831549
+Node: Debugging832571
+Node: Debugging Concepts833012
+Node: Debugging Terms834869
+Node: Awk Debugging837444
+Node: Sample Debugging Session838336
+Node: Debugger Invocation838856
+Node: Finding The Bug840240
+Node: List of Debugger Commands846715
+Node: Breakpoint Control848047
+Node: Debugger Execution Control851739
+Node: Viewing And Changing Data855103
+Node: Execution Stack858468
+Node: Debugger Info860106
+Node: Miscellaneous Debugger Commands864123
+Node: Readline Support869315
+Node: Limitations870207
+Node: Debugging Summary872304
+Node: Arbitrary Precision Arithmetic873472
+Node: Computer Arithmetic874888
+Ref: table-numeric-ranges878489
+Ref: Computer Arithmetic-Footnote-1879348
+Node: Math Definitions879405
+Ref: table-ieee-formats882692
+Ref: Math Definitions-Footnote-1883296
+Node: MPFR features883401
+Node: FP Math Caution885072
+Ref: FP Math Caution-Footnote-1886122
+Node: Inexactness of computations886491
+Node: Inexact representation887439
+Node: Comparing FP Values888794
+Node: Errors accumulate889867
+Node: Getting Accuracy891300
+Node: Try To Round893959
+Node: Setting precision894858
+Ref: table-predefined-precision-strings895542
+Node: Setting the rounding mode897336
+Ref: table-gawk-rounding-modes897700
+Ref: Setting the rounding mode-Footnote-1901154
+Node: Arbitrary Precision Integers901333
+Ref: Arbitrary Precision Integers-Footnote-1906237
+Node: POSIX Floating Point Problems906386
+Ref: POSIX Floating Point Problems-Footnote-1910262
+Node: Floating point summary910300
+Node: Dynamic Extensions912492
+Node: Extension Intro914044
+Node: Plugin License915310
+Node: Extension Mechanism Outline916107
+Ref: figure-load-extension916535
+Ref: figure-register-new-function918015
+Ref: figure-call-new-function919019
+Node: Extension API Description921005
+Node: Extension API Functions Introduction922455
+Node: General Data Types927291
+Ref: General Data Types-Footnote-1932978
+Node: Memory Allocation Functions933277
+Ref: Memory Allocation Functions-Footnote-1936107
+Node: Constructor Functions936203
+Node: Registration Functions937937
+Node: Extension Functions938622
+Node: Exit Callback Functions940918
+Node: Extension Version String942166
+Node: Input Parsers942816
+Node: Output Wrappers952631
+Node: Two-way processors957147
+Node: Printing Messages959351
+Ref: Printing Messages-Footnote-1960428
+Node: Updating `ERRNO'960580
+Node: Requesting Values961320
+Ref: table-value-types-returned962048
+Node: Accessing Parameters963006
+Node: Symbol Table Access964237
+Node: Symbol table by name964751
+Node: Symbol table by cookie966731
+Ref: Symbol table by cookie-Footnote-1970870
+Node: Cached values970933
+Ref: Cached values-Footnote-1974437
+Node: Array Manipulation974528
+Ref: Array Manipulation-Footnote-1975626
+Node: Array Data Types975665
+Ref: Array Data Types-Footnote-1978322
+Node: Array Functions978414
+Node: Flattening Arrays982268
+Node: Creating Arrays989155
+Node: Extension API Variables993922
+Node: Extension Versioning994558
+Node: Extension API Informational Variables996459
+Node: Extension API Boilerplate997547
+Node: Finding Extensions1001363
+Node: Extension Example1001923
+Node: Internal File Description1002695
+Node: Internal File Ops1006762
+Ref: Internal File Ops-Footnote-11018420
+Node: Using Internal File Ops1018560
+Ref: Using Internal File Ops-Footnote-11020943
+Node: Extension Samples1021216
+Node: Extension Sample File Functions1022740
+Node: Extension Sample Fnmatch1030342
+Node: Extension Sample Fork1031824
+Node: Extension Sample Inplace1033037
+Node: Extension Sample Ord1034712
+Node: Extension Sample Readdir1035548
+Ref: table-readdir-file-types1036404
+Node: Extension Sample Revout1037215
+Node: Extension Sample Rev2way1037806
+Node: Extension Sample Read write array1038547
+Node: Extension Sample Readfile1040486
+Node: Extension Sample Time1041581
+Node: Extension Sample API Tests1042930
+Node: gawkextlib1043421
+Node: Extension summary1046071
+Node: Extension Exercises1049753
+Node: Language History1050475
+Node: V7/SVR3.11052132
+Node: SVR41054313
+Node: POSIX1055758
+Node: BTL1057147
+Node: POSIX/GNU1057881
+Node: Feature History1063510
+Node: Common Extensions1076601
+Node: Ranges and Locales1077925
+Ref: Ranges and Locales-Footnote-11082564
+Ref: Ranges and Locales-Footnote-21082591
+Ref: Ranges and Locales-Footnote-31082825
+Node: Contributors1083046
+Node: History summary1088586
+Node: Installation1089955
+Node: Gawk Distribution1090911
+Node: Getting1091395
+Node: Extracting1092219
+Node: Distribution contents1093861
+Node: Unix Installation1099631
+Node: Quick Installation1100248
+Node: Additional Configuration Options1102679
+Node: Configuration Philosophy1104419
+Node: Non-Unix Installation1106770
+Node: PC Installation1107228
+Node: PC Binary Installation1108554
+Node: PC Compiling1110402
+Ref: PC Compiling-Footnote-11113423
+Node: PC Testing1113528
+Node: PC Using1114704
+Node: Cygwin1118819
+Node: MSYS1119642
+Node: VMS Installation1120140
+Node: VMS Compilation1120932
+Ref: VMS Compilation-Footnote-11122154
+Node: VMS Dynamic Extensions1122212
+Node: VMS Installation Details1123896
+Node: VMS Running1126148
+Node: VMS GNV1128989
+Node: VMS Old Gawk1129723
+Node: Bugs1130193
+Node: Other Versions1134097
+Node: Installation summary1140310
+Node: Notes1141366
+Node: Compatibility Mode1142231
+Node: Additions1143013
+Node: Accessing The Source1143938
+Node: Adding Code1145374
+Node: New Ports1151546
+Node: Derived Files1156028
+Ref: Derived Files-Footnote-11161503
+Ref: Derived Files-Footnote-21161537
+Ref: Derived Files-Footnote-31162133
+Node: Future Extensions1162247
+Node: Implementation Limitations1162853
+Node: Extension Design1164101
+Node: Old Extension Problems1165255
+Ref: Old Extension Problems-Footnote-11166772
+Node: Extension New Mechanism Goals1166829
+Ref: Extension New Mechanism Goals-Footnote-11170189
+Node: Extension Other Design Decisions1170378
+Node: Extension Future Growth1172486
+Node: Old Extension Mechanism1173322
+Node: Notes summary1175084
+Node: Basic Concepts1176270
+Node: Basic High Level1176951
+Ref: figure-general-flow1177223
+Ref: figure-process-flow1177822
+Ref: Basic High Level-Footnote-11181051
+Node: Basic Data Typing1181236
+Node: Glossary1184564
+Node: Copying1209722
+Node: GNU Free Documentation License1247278
+Node: Index1272414

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 20087fa7..1453b145 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -433,8 +433,9 @@ particular records in a file and perform operations upon them.
@end ifnottex
@menu
-* Foreword:: Some nice words about this
+* Foreword3:: Some nice words about this
@value{DOCUMENT}.
+* Foreword4:: More nice words.
* Preface:: What this @value{DOCUMENT} is about; brief
history and acknowledgments.
* Getting Started:: A basic introduction to using
@@ -1062,8 +1063,8 @@ for enrichening our lives in innumerable ways.
@summarycontents
@contents
-@node Foreword
-@unnumbered Foreword
+@node Foreword3
+@unnumbered Foreword to the Third Edition
@c This bit is post-processed by a script which turns the chapter
@c tag into a preface tag, and moves this stuff to before the title.
@@ -1213,6 +1214,58 @@ March, 2001
@end display
@end ifnotdocbook
+@node Foreword4
+@unnumbered Foreword to the Fourth Edition
+
+@c This bit is post-processed by a script which turns the chapter
+@c tag into a preface tag, and moves this stuff to before the title.
+@c Bleah.
+@docbook
+ <prefaceinfo>
+ <author>
+ <firstname>Michael</firstname>
+ <surname>Brennan</surname>
+ <!-- can't put mawk into command tags. sigh. -->
+ <affiliation><jobtitle>Author of mawk</jobtitle></affiliation>
+ </author>
+ <date>March, 2001</date>
+ </prefaceinfo>
+@end docbook
+
+Some things don't change. Thirteen years ago I wrote:
+``If you use AWK or want to learn how, then read this book.''
+True then and still true today.
+
+Learning to use a programming language is more than mastering the
+syntax. One needs to acquire an understanding of how to use the
+features of the language to solve practical programming problems.
+A focus of this book is many examples that show how to use AWK.
+
+Some things do change. Our computers are much faster and have more memory.
+Consequently, speed and storage inefficiencies of a high level language
+matter less. Prototyping in AWK and then rewriting in C for performance
+reasons happens less, because more often the prototype is fast enough.
+
+Of course, there are computing operations that are best done in C or C++.
+With @command{gawk} 4.1 and later, you do not have to choose between writing
+your program in AWK or in C/C++. You can write most of your
+program in AWK and the aspects that require C/C++ capabilities can be written
+in C/C++ and then the pieces glued together when the @command{gawk} module loads
+the C/C++ module as a dynamic plug-in.
+@c Chapter 16
+@ref{Dynamic Extensions},
+has all the
+details, and as expected, many examples to help you learn the ins and outs.
+
+@ifnotdocbook
+@cindex Brennan, Michael
+@display
+Michael Brennan
+Author of @command{mawk}
+October, 2014
+@end display
+@end ifnotdocbook
+
@node Preface
@unnumbered Preface
@c I saw a comment somewhere that the preface should describe the book itself,
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 875893f1..66e6b0e0 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -428,8 +428,9 @@ particular records in a file and perform operations upon them.
@end ifnottex
@menu
-* Foreword:: Some nice words about this
+* Foreword3:: Some nice words about this
@value{DOCUMENT}.
+* Foreword4:: More nice words.
* Preface:: What this @value{DOCUMENT} is about; brief
history and acknowledgments.
* Getting Started:: A basic introduction to using
@@ -1057,8 +1058,8 @@ for enrichening our lives in innumerable ways.
@summarycontents
@contents
-@node Foreword
-@unnumbered Foreword
+@node Foreword3
+@unnumbered Foreword to the Third Edition
@c This bit is post-processed by a script which turns the chapter
@c tag into a preface tag, and moves this stuff to before the title.
@@ -1208,6 +1209,58 @@ March, 2001
@end display
@end ifnotdocbook
+@node Foreword4
+@unnumbered Foreword to the Fourth Edition
+
+@c This bit is post-processed by a script which turns the chapter
+@c tag into a preface tag, and moves this stuff to before the title.
+@c Bleah.
+@docbook
+ <prefaceinfo>
+ <author>
+ <firstname>Michael</firstname>
+ <surname>Brennan</surname>
+ <!-- can't put mawk into command tags. sigh. -->
+ <affiliation><jobtitle>Author of mawk</jobtitle></affiliation>
+ </author>
+ <date>March, 2001</date>
+ </prefaceinfo>
+@end docbook
+
+Some things don't change. Thirteen years ago I wrote:
+``If you use AWK or want to learn how, then read this book.''
+True then and still true today.
+
+Learning to use a programming language is more than mastering the
+syntax. One needs to acquire an understanding of how to use the
+features of the language to solve practical programming problems.
+A focus of this book is many examples that show how to use AWK.
+
+Some things do change. Our computers are much faster and have more memory.
+Consequently, speed and storage inefficiencies of a high level language
+matter less. Prototyping in AWK and then rewriting in C for performance
+reasons happens less, because more often the prototype is fast enough.
+
+Of course, there are computing operations that are best done in C or C++.
+With @command{gawk} 4.1 and later, you do not have to choose between writing
+your program in AWK or in C/C++. You can write most of your
+program in AWK and the aspects that require C/C++ capabilities can be written
+in C/C++ and then the pieces glued together when the @command{gawk} module loads
+the C/C++ module as a dynamic plug-in.
+@c Chapter 16
+@ref{Dynamic Extensions},
+has all the
+details, and as expected, many examples to help you learn the ins and outs.
+
+@ifnotdocbook
+@cindex Brennan, Michael
+@display
+Michael Brennan
+Author of @command{mawk}
+October, 2014
+@end display
+@end ifnotdocbook
+
@node Preface
@unnumbered Preface
@c I saw a comment somewhere that the preface should describe the book itself,