aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 e6c864d7..da2b7cc0 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 94170939..fd3e19db 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
*******
@@ -31786,7 +31821,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)
@@ -34232,557 +34268,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-1129538
-Node: Other Arguments129563
-Node: Naming Standard Input132524
-Node: Environment Variables133617
-Node: AWKPATH Variable134175
-Ref: AWKPATH Variable-Footnote-1137027
-Ref: AWKPATH Variable-Footnote-2137072
-Node: AWKLIBPATH Variable137332
-Node: Other Environment Variables138091
-Node: Exit Status141811
-Node: Include Files142486
-Node: Loading Shared Libraries146074
-Node: Obsolete147501
-Node: Undocumented148198
-Node: Invoking Summary148465
-Node: Regexp150131
-Node: Regexp Usage151590
-Node: Escape Sequences153623
-Node: Regexp Operators159640
-Ref: Regexp Operators-Footnote-1167074
-Ref: Regexp Operators-Footnote-2167221
-Node: Bracket Expressions167319
-Ref: table-char-classes169336
-Node: Leftmost Longest172276
-Node: Computed Regexps173578
-Node: GNU Regexp Operators176975
-Node: Case-sensitivity180677
-Ref: Case-sensitivity-Footnote-1183567
-Ref: Case-sensitivity-Footnote-2183802
-Node: Regexp Summary183910
-Node: Reading Files185379
-Node: Records187473
-Node: awk split records188205
-Node: gawk split records193119
-Ref: gawk split records-Footnote-1197658
-Node: Fields197695
-Ref: Fields-Footnote-1200493
-Node: Nonconstant Fields200579
-Ref: Nonconstant Fields-Footnote-1202815
-Node: Changing Fields203017
-Node: Field Separators208949
-Node: Default Field Splitting211653
-Node: Regexp Field Splitting212770
-Node: Single Character Fields216120
-Node: Command Line Field Separator217179
-Node: Full Line Fields220391
-Ref: Full Line Fields-Footnote-1220899
-Node: Field Splitting Summary220945
-Ref: Field Splitting Summary-Footnote-1224076
-Node: Constant Size224177
-Node: Splitting By Content228783
-Ref: Splitting By Content-Footnote-1232856
-Node: Multiple Line232896
-Ref: Multiple Line-Footnote-1238785
-Node: Getline238964
-Node: Plain Getline241175
-Node: Getline/Variable243815
-Node: Getline/File244962
-Node: Getline/Variable/File246346
-Ref: Getline/Variable/File-Footnote-1247947
-Node: Getline/Pipe248034
-Node: Getline/Variable/Pipe250717
-Node: Getline/Coprocess251848
-Node: Getline/Variable/Coprocess253100
-Node: Getline Notes253839
-Node: Getline Summary256631
-Ref: table-getline-variants257043
-Node: Read Timeout257872
-Ref: Read Timeout-Footnote-1261686
-Node: Command-line directories261744
-Node: Input Summary262648
-Node: Input Exercises265900
-Node: Printing266628
-Node: Print268405
-Node: Print Examples269862
-Node: Output Separators272641
-Node: OFMT274659
-Node: Printf276013
-Node: Basic Printf276798
-Node: Control Letters278369
-Node: Format Modifiers282353
-Node: Printf Examples288360
-Node: Redirection290842
-Node: Special FD297681
-Ref: Special FD-Footnote-1300838
-Node: Special Files300912
-Node: Other Inherited Files301528
-Node: Special Network302528
-Node: Special Caveats303389
-Node: Close Files And Pipes304340
-Ref: Close Files And Pipes-Footnote-1311519
-Ref: Close Files And Pipes-Footnote-2311667
-Node: Output Summary311817
-Node: Output Exercises312813
-Node: Expressions313493
-Node: Values314678
-Node: Constants315354
-Node: Scalar Constants316034
-Ref: Scalar Constants-Footnote-1316893
-Node: Nondecimal-numbers317143
-Node: Regexp Constants320143
-Node: Using Constant Regexps320668
-Node: Variables323806
-Node: Using Variables324461
-Node: Assignment Options326371
-Node: Conversion328246
-Node: Strings And Numbers328770
-Ref: Strings And Numbers-Footnote-1331834
-Node: Locale influences conversions331943
-Ref: table-locale-affects334688
-Node: All Operators335276
-Node: Arithmetic Ops335906
-Node: Concatenation338411
-Ref: Concatenation-Footnote-1341230
-Node: Assignment Ops341336
-Ref: table-assign-ops346319
-Node: Increment Ops347597
-Node: Truth Values and Conditions351035
-Node: Truth Values352118
-Node: Typing and Comparison353167
-Node: Variable Typing353960
-Node: Comparison Operators357612
-Ref: table-relational-ops358022
-Node: POSIX String Comparison361537
-Ref: POSIX String Comparison-Footnote-1362609
-Node: Boolean Ops362747
-Ref: Boolean Ops-Footnote-1367226
-Node: Conditional Exp367317
-Node: Function Calls369044
-Node: Precedence372924
-Node: Locales376592
-Node: Expressions Summary378223
-Node: Patterns and Actions380797
-Node: Pattern Overview381917
-Node: Regexp Patterns383596
-Node: Expression Patterns384139
-Node: Ranges387919
-Node: BEGIN/END391025
-Node: Using BEGIN/END391787
-Ref: Using BEGIN/END-Footnote-1394524
-Node: I/O And BEGIN/END394630
-Node: BEGINFILE/ENDFILE396944
-Node: Empty399845
-Node: Using Shell Variables400162
-Node: Action Overview402438
-Node: Statements404765
-Node: If Statement406613
-Node: While Statement408111
-Node: Do Statement410139
-Node: For Statement411281
-Node: Switch Statement414436
-Node: Break Statement416824
-Node: Continue Statement418865
-Node: Next Statement420690
-Node: Nextfile Statement423070
-Node: Exit Statement425700
-Node: Built-in Variables428103
-Node: User-modified429236
-Ref: User-modified-Footnote-1436916
-Node: Auto-set436978
-Ref: Auto-set-Footnote-1450008
-Ref: Auto-set-Footnote-2450213
-Node: ARGC and ARGV450269
-Node: Pattern Action Summary454473
-Node: Arrays456900
-Node: Array Basics458229
-Node: Array Intro459073
-Ref: figure-array-elements461037
-Ref: Array Intro-Footnote-1463561
-Node: Reference to Elements463689
-Node: Assigning Elements466139
-Node: Array Example466630
-Node: Scanning an Array468388
-Node: Controlling Scanning471404
-Ref: Controlling Scanning-Footnote-1476593
-Node: Numeric Array Subscripts476909
-Node: Uninitialized Subscripts479094
-Node: Delete480711
-Ref: Delete-Footnote-1483455
-Node: Multidimensional483512
-Node: Multiscanning486607
-Node: Arrays of Arrays488196
-Node: Arrays Summary492957
-Node: Functions495062
-Node: Built-in495935
-Node: Calling Built-in497013
-Node: Numeric Functions499001
-Ref: Numeric Functions-Footnote-1503023
-Ref: Numeric Functions-Footnote-2503380
-Ref: Numeric Functions-Footnote-3503428
-Node: String Functions503697
-Ref: String Functions-Footnote-1527169
-Ref: String Functions-Footnote-2527298
-Ref: String Functions-Footnote-3527546
-Node: Gory Details527633
-Ref: table-sub-escapes529414
-Ref: table-sub-proposed530934
-Ref: table-posix-sub532298
-Ref: table-gensub-escapes533838
-Ref: Gory Details-Footnote-1534670
-Node: I/O Functions534821
-Ref: I/O Functions-Footnote-1541922
-Node: Time Functions542069
-Ref: Time Functions-Footnote-1552538
-Ref: Time Functions-Footnote-2552606
-Ref: Time Functions-Footnote-3552764
-Ref: Time Functions-Footnote-4552875
-Ref: Time Functions-Footnote-5552987
-Ref: Time Functions-Footnote-6553214
-Node: Bitwise Functions553480
-Ref: table-bitwise-ops554042
-Ref: Bitwise Functions-Footnote-1558350
-Node: Type Functions558519
-Node: I18N Functions559668
-Node: User-defined561313
-Node: Definition Syntax562117
-Ref: Definition Syntax-Footnote-1567523
-Node: Function Example567592
-Ref: Function Example-Footnote-1570509
-Node: Function Caveats570531
-Node: Calling A Function571049
-Node: Variable Scope572004
-Node: Pass By Value/Reference574992
-Node: Return Statement578502
-Node: Dynamic Typing581486
-Node: Indirect Calls582415
-Ref: Indirect Calls-Footnote-1593719
-Node: Functions Summary593847
-Node: Library Functions596546
-Ref: Library Functions-Footnote-1600164
-Ref: Library Functions-Footnote-2600307
-Node: Library Names600478
-Ref: Library Names-Footnote-1603938
-Ref: Library Names-Footnote-2604158
-Node: General Functions604244
-Node: Strtonum Function605347
-Node: Assert Function608367
-Node: Round Function611691
-Node: Cliff Random Function613232
-Node: Ordinal Functions614248
-Ref: Ordinal Functions-Footnote-1617313
-Ref: Ordinal Functions-Footnote-2617565
-Node: Join Function617776
-Ref: Join Function-Footnote-1619547
-Node: Getlocaltime Function619747
-Node: Readfile Function623488
-Node: Shell Quoting625458
-Node: Data File Management626859
-Node: Filetrans Function627491
-Node: Rewind Function631550
-Node: File Checking632935
-Ref: File Checking-Footnote-1634263
-Node: Empty Files634464
-Node: Ignoring Assigns636443
-Node: Getopt Function637994
-Ref: Getopt Function-Footnote-1649454
-Node: Passwd Functions649657
-Ref: Passwd Functions-Footnote-1658508
-Node: Group Functions658596
-Ref: Group Functions-Footnote-1666499
-Node: Walking Arrays666712
-Node: Library Functions Summary668315
-Node: Library Exercises669716
-Node: Sample Programs670996
-Node: Running Examples671766
-Node: Clones672494
-Node: Cut Program673718
-Node: Egrep Program683448
-Ref: Egrep Program-Footnote-1690952
-Node: Id Program691062
-Node: Split Program694706
-Ref: Split Program-Footnote-1698152
-Node: Tee Program698280
-Node: Uniq Program701067
-Node: Wc Program708488
-Ref: Wc Program-Footnote-1712736
-Node: Miscellaneous Programs712828
-Node: Dupword Program714041
-Node: Alarm Program716072
-Node: Translate Program720876
-Ref: Translate Program-Footnote-1725440
-Node: Labels Program725710
-Ref: Labels Program-Footnote-1729059
-Node: Word Sorting729143
-Node: History Sorting733213
-Node: Extract Program735049
-Node: Simple Sed742581
-Node: Igawk Program745643
-Ref: Igawk Program-Footnote-1759969
-Ref: Igawk Program-Footnote-2760170
-Ref: Igawk Program-Footnote-3760292
-Node: Anagram Program760407
-Node: Signature Program763469
-Node: Programs Summary764716
-Node: Programs Exercises765909
-Ref: Programs Exercises-Footnote-1770040
-Node: Advanced Features770131
-Node: Nondecimal Data772079
-Node: Array Sorting773669
-Node: Controlling Array Traversal774366
-Ref: Controlling Array Traversal-Footnote-1782697
-Node: Array Sorting Functions782815
-Ref: Array Sorting Functions-Footnote-1786707
-Node: Two-way I/O786901
-Ref: Two-way I/O-Footnote-1791845
-Ref: Two-way I/O-Footnote-2792031
-Node: TCP/IP Networking792113
-Node: Profiling794985
-Node: Advanced Features Summary802529
-Node: Internationalization804462
-Node: I18N and L10N805942
-Node: Explaining gettext806628
-Ref: Explaining gettext-Footnote-1811657
-Ref: Explaining gettext-Footnote-2811841
-Node: Programmer i18n812006
-Ref: Programmer i18n-Footnote-1816872
-Node: Translator i18n816921
-Node: String Extraction817715
-Ref: String Extraction-Footnote-1818846
-Node: Printf Ordering818932
-Ref: Printf Ordering-Footnote-1821718
-Node: I18N Portability821782
-Ref: I18N Portability-Footnote-1824231
-Node: I18N Example824294
-Ref: I18N Example-Footnote-1827094
-Node: Gawk I18N827166
-Node: I18N Summary827804
-Node: Debugger829143
-Node: Debugging830165
-Node: Debugging Concepts830606
-Node: Debugging Terms832463
-Node: Awk Debugging835038
-Node: Sample Debugging Session835930
-Node: Debugger Invocation836450
-Node: Finding The Bug837834
-Node: List of Debugger Commands844309
-Node: Breakpoint Control845641
-Node: Debugger Execution Control849333
-Node: Viewing And Changing Data852697
-Node: Execution Stack856062
-Node: Debugger Info857700
-Node: Miscellaneous Debugger Commands861717
-Node: Readline Support866909
-Node: Limitations867801
-Node: Debugging Summary869898
-Node: Arbitrary Precision Arithmetic871066
-Node: Computer Arithmetic872482
-Ref: table-numeric-ranges876083
-Ref: Computer Arithmetic-Footnote-1876942
-Node: Math Definitions876999
-Ref: table-ieee-formats880286
-Ref: Math Definitions-Footnote-1880890
-Node: MPFR features880995
-Node: FP Math Caution882666
-Ref: FP Math Caution-Footnote-1883716
-Node: Inexactness of computations884085
-Node: Inexact representation885033
-Node: Comparing FP Values886388
-Node: Errors accumulate887461
-Node: Getting Accuracy888894
-Node: Try To Round891553
-Node: Setting precision892452
-Ref: table-predefined-precision-strings893136
-Node: Setting the rounding mode894930
-Ref: table-gawk-rounding-modes895294
-Ref: Setting the rounding mode-Footnote-1898748
-Node: Arbitrary Precision Integers898927
-Ref: Arbitrary Precision Integers-Footnote-1901918
-Node: POSIX Floating Point Problems902067
-Ref: POSIX Floating Point Problems-Footnote-1905943
-Node: Floating point summary905981
-Node: Dynamic Extensions908173
-Node: Extension Intro909725
-Node: Plugin License910991
-Node: Extension Mechanism Outline911788
-Ref: figure-load-extension912216
-Ref: figure-register-new-function913696
-Ref: figure-call-new-function914700
-Node: Extension API Description916686
-Node: Extension API Functions Introduction918136
-Node: General Data Types922972
-Ref: General Data Types-Footnote-1928659
-Node: Memory Allocation Functions928958
-Ref: Memory Allocation Functions-Footnote-1931788
-Node: Constructor Functions931884
-Node: Registration Functions933618
-Node: Extension Functions934303
-Node: Exit Callback Functions936599
-Node: Extension Version String937847
-Node: Input Parsers938497
-Node: Output Wrappers948312
-Node: Two-way processors952828
-Node: Printing Messages955032
-Ref: Printing Messages-Footnote-1956109
-Node: Updating `ERRNO'956261
-Node: Requesting Values957001
-Ref: table-value-types-returned957729
-Node: Accessing Parameters958687
-Node: Symbol Table Access959918
-Node: Symbol table by name960432
-Node: Symbol table by cookie962412
-Ref: Symbol table by cookie-Footnote-1966551
-Node: Cached values966614
-Ref: Cached values-Footnote-1970118
-Node: Array Manipulation970209
-Ref: Array Manipulation-Footnote-1971307
-Node: Array Data Types971346
-Ref: Array Data Types-Footnote-1974003
-Node: Array Functions974095
-Node: Flattening Arrays977949
-Node: Creating Arrays984836
-Node: Extension API Variables989603
-Node: Extension Versioning990239
-Node: Extension API Informational Variables992140
-Node: Extension API Boilerplate993228
-Node: Finding Extensions997044
-Node: Extension Example997604
-Node: Internal File Description998376
-Node: Internal File Ops1002443
-Ref: Internal File Ops-Footnote-11014101
-Node: Using Internal File Ops1014241
-Ref: Using Internal File Ops-Footnote-11016624
-Node: Extension Samples1016897
-Node: Extension Sample File Functions1018421
-Node: Extension Sample Fnmatch1026023
-Node: Extension Sample Fork1027505
-Node: Extension Sample Inplace1028718
-Node: Extension Sample Ord1030393
-Node: Extension Sample Readdir1031229
-Ref: table-readdir-file-types1032085
-Node: Extension Sample Revout1032896
-Node: Extension Sample Rev2way1033487
-Node: Extension Sample Read write array1034228
-Node: Extension Sample Readfile1036167
-Node: Extension Sample Time1037262
-Node: Extension Sample API Tests1038611
-Node: gawkextlib1039102
-Node: Extension summary1041752
-Node: Extension Exercises1045434
-Node: Language History1046156
-Node: V7/SVR3.11047813
-Node: SVR41049994
-Node: POSIX1051439
-Node: BTL1052828
-Node: POSIX/GNU1053562
-Node: Feature History1059131
-Node: Common Extensions1072222
-Node: Ranges and Locales1073546
-Ref: Ranges and Locales-Footnote-11078185
-Ref: Ranges and Locales-Footnote-21078212
-Ref: Ranges and Locales-Footnote-31078446
-Node: Contributors1078667
-Node: History summary1084207
-Node: Installation1085576
-Node: Gawk Distribution1086532
-Node: Getting1087016
-Node: Extracting1087840
-Node: Distribution contents1089482
-Node: Unix Installation1095199
-Node: Quick Installation1095816
-Node: Additional Configuration Options1098247
-Node: Configuration Philosophy1099987
-Node: Non-Unix Installation1102338
-Node: PC Installation1102796
-Node: PC Binary Installation1104122
-Node: PC Compiling1105970
-Ref: PC Compiling-Footnote-11108991
-Node: PC Testing1109096
-Node: PC Using1110272
-Node: Cygwin1114387
-Node: MSYS1115210
-Node: VMS Installation1115708
-Node: VMS Compilation1116500
-Ref: VMS Compilation-Footnote-11117722
-Node: VMS Dynamic Extensions1117780
-Node: VMS Installation Details1119464
-Node: VMS Running1121716
-Node: VMS GNV1124557
-Node: VMS Old Gawk1125291
-Node: Bugs1125761
-Node: Other Versions1129665
-Node: Installation summary1135878
-Node: Notes1136934
-Node: Compatibility Mode1137799
-Node: Additions1138581
-Node: Accessing The Source1139506
-Node: Adding Code1140942
-Node: New Ports1147114
-Node: Derived Files1151596
-Ref: Derived Files-Footnote-11157071
-Ref: Derived Files-Footnote-21157105
-Ref: Derived Files-Footnote-31157701
-Node: Future Extensions1157815
-Node: Implementation Limitations1158421
-Node: Extension Design1159669
-Node: Old Extension Problems1160823
-Ref: Old Extension Problems-Footnote-11162340
-Node: Extension New Mechanism Goals1162397
-Ref: Extension New Mechanism Goals-Footnote-11165757
-Node: Extension Other Design Decisions1165946
-Node: Extension Future Growth1168054
-Node: Old Extension Mechanism1168890
-Node: Notes summary1170652
-Node: Basic Concepts1171838
-Node: Basic High Level1172519
-Ref: figure-general-flow1172791
-Ref: figure-process-flow1173390
-Ref: Basic High Level-Footnote-11176619
-Node: Basic Data Typing1176804
-Node: Glossary1180132
-Node: Copying1205290
-Node: GNU Free Documentation License1242846
-Node: Index1267982
+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-1131071
+Node: Other Arguments131096
+Node: Naming Standard Input134057
+Node: Environment Variables135150
+Node: AWKPATH Variable135708
+Ref: AWKPATH Variable-Footnote-1138560
+Ref: AWKPATH Variable-Footnote-2138605
+Node: AWKLIBPATH Variable138865
+Node: Other Environment Variables139624
+Node: Exit Status143344
+Node: Include Files144019
+Node: Loading Shared Libraries147607
+Node: Obsolete149034
+Node: Undocumented149731
+Node: Invoking Summary149998
+Node: Regexp151664
+Node: Regexp Usage153123
+Node: Escape Sequences155156
+Node: Regexp Operators161173
+Ref: Regexp Operators-Footnote-1168607
+Ref: Regexp Operators-Footnote-2168754
+Node: Bracket Expressions168852
+Ref: table-char-classes170869
+Node: Leftmost Longest173809
+Node: Computed Regexps175111
+Node: GNU Regexp Operators178508
+Node: Case-sensitivity182210
+Ref: Case-sensitivity-Footnote-1185100
+Ref: Case-sensitivity-Footnote-2185335
+Node: Regexp Summary185443
+Node: Reading Files186912
+Node: Records189006
+Node: awk split records189738
+Node: gawk split records194652
+Ref: gawk split records-Footnote-1199191
+Node: Fields199228
+Ref: Fields-Footnote-1202026
+Node: Nonconstant Fields202112
+Ref: Nonconstant Fields-Footnote-1204348
+Node: Changing Fields204550
+Node: Field Separators210482
+Node: Default Field Splitting213186
+Node: Regexp Field Splitting214303
+Node: Single Character Fields217653
+Node: Command Line Field Separator218712
+Node: Full Line Fields221924
+Ref: Full Line Fields-Footnote-1222432
+Node: Field Splitting Summary222478
+Ref: Field Splitting Summary-Footnote-1225609
+Node: Constant Size225710
+Node: Splitting By Content230316
+Ref: Splitting By Content-Footnote-1234389
+Node: Multiple Line234429
+Ref: Multiple Line-Footnote-1240318
+Node: Getline240497
+Node: Plain Getline242708
+Node: Getline/Variable245348
+Node: Getline/File246495
+Node: Getline/Variable/File247879
+Ref: Getline/Variable/File-Footnote-1249480
+Node: Getline/Pipe249567
+Node: Getline/Variable/Pipe252250
+Node: Getline/Coprocess253381
+Node: Getline/Variable/Coprocess254633
+Node: Getline Notes255372
+Node: Getline Summary258164
+Ref: table-getline-variants258576
+Node: Read Timeout259405
+Ref: Read Timeout-Footnote-1263219
+Node: Command-line directories263277
+Node: Input Summary264181
+Node: Input Exercises267433
+Node: Printing268161
+Node: Print269938
+Node: Print Examples271395
+Node: Output Separators274174
+Node: OFMT276192
+Node: Printf277546
+Node: Basic Printf278331
+Node: Control Letters279902
+Node: Format Modifiers283886
+Node: Printf Examples289893
+Node: Redirection292375
+Node: Special FD299214
+Ref: Special FD-Footnote-1302371
+Node: Special Files302445
+Node: Other Inherited Files303061
+Node: Special Network304061
+Node: Special Caveats304922
+Node: Close Files And Pipes305873
+Ref: Close Files And Pipes-Footnote-1313052
+Ref: Close Files And Pipes-Footnote-2313200
+Node: Output Summary313350
+Node: Output Exercises314346
+Node: Expressions315026
+Node: Values316211
+Node: Constants316887
+Node: Scalar Constants317567
+Ref: Scalar Constants-Footnote-1318426
+Node: Nondecimal-numbers318676
+Node: Regexp Constants321676
+Node: Using Constant Regexps322201
+Node: Variables325339
+Node: Using Variables325994
+Node: Assignment Options327904
+Node: Conversion329779
+Node: Strings And Numbers330303
+Ref: Strings And Numbers-Footnote-1333367
+Node: Locale influences conversions333476
+Ref: table-locale-affects336221
+Node: All Operators336809
+Node: Arithmetic Ops337439
+Node: Concatenation339944
+Ref: Concatenation-Footnote-1342763
+Node: Assignment Ops342869
+Ref: table-assign-ops347852
+Node: Increment Ops349130
+Node: Truth Values and Conditions352568
+Node: Truth Values353651
+Node: Typing and Comparison354700
+Node: Variable Typing355493
+Node: Comparison Operators359145
+Ref: table-relational-ops359555
+Node: POSIX String Comparison363070
+Ref: POSIX String Comparison-Footnote-1364142
+Node: Boolean Ops364280
+Ref: Boolean Ops-Footnote-1368759
+Node: Conditional Exp368850
+Node: Function Calls370577
+Node: Precedence374457
+Node: Locales378125
+Node: Expressions Summary379756
+Node: Patterns and Actions382330
+Node: Pattern Overview383450
+Node: Regexp Patterns385129
+Node: Expression Patterns385672
+Node: Ranges389452
+Node: BEGIN/END392558
+Node: Using BEGIN/END393320
+Ref: Using BEGIN/END-Footnote-1396057
+Node: I/O And BEGIN/END396163
+Node: BEGINFILE/ENDFILE398477
+Node: Empty401378
+Node: Using Shell Variables401695
+Node: Action Overview403971
+Node: Statements406298
+Node: If Statement408146
+Node: While Statement409644
+Node: Do Statement411672
+Node: For Statement412814
+Node: Switch Statement415969
+Node: Break Statement418357
+Node: Continue Statement420398
+Node: Next Statement422223
+Node: Nextfile Statement424603
+Node: Exit Statement427233
+Node: Built-in Variables429636
+Node: User-modified430769
+Ref: User-modified-Footnote-1438449
+Node: Auto-set438511
+Ref: Auto-set-Footnote-1451541
+Ref: Auto-set-Footnote-2451746
+Node: ARGC and ARGV451802
+Node: Pattern Action Summary456006
+Node: Arrays458433
+Node: Array Basics459762
+Node: Array Intro460606
+Ref: figure-array-elements462570
+Ref: Array Intro-Footnote-1465094
+Node: Reference to Elements465222
+Node: Assigning Elements467672
+Node: Array Example468163
+Node: Scanning an Array469921
+Node: Controlling Scanning472937
+Ref: Controlling Scanning-Footnote-1478126
+Node: Numeric Array Subscripts478442
+Node: Uninitialized Subscripts480627
+Node: Delete482244
+Ref: Delete-Footnote-1484988
+Node: Multidimensional485045
+Node: Multiscanning488140
+Node: Arrays of Arrays489729
+Node: Arrays Summary494490
+Node: Functions496595
+Node: Built-in497468
+Node: Calling Built-in498546
+Node: Numeric Functions500534
+Ref: Numeric Functions-Footnote-1504556
+Ref: Numeric Functions-Footnote-2504913
+Ref: Numeric Functions-Footnote-3504961
+Node: String Functions505230
+Ref: String Functions-Footnote-1528702
+Ref: String Functions-Footnote-2528831
+Ref: String Functions-Footnote-3529079
+Node: Gory Details529166
+Ref: table-sub-escapes530947
+Ref: table-sub-proposed532467
+Ref: table-posix-sub533831
+Ref: table-gensub-escapes535371
+Ref: Gory Details-Footnote-1536203
+Node: I/O Functions536354
+Ref: I/O Functions-Footnote-1543455
+Node: Time Functions543602
+Ref: Time Functions-Footnote-1554071
+Ref: Time Functions-Footnote-2554139
+Ref: Time Functions-Footnote-3554297
+Ref: Time Functions-Footnote-4554408
+Ref: Time Functions-Footnote-5554520
+Ref: Time Functions-Footnote-6554747
+Node: Bitwise Functions555013
+Ref: table-bitwise-ops555575
+Ref: Bitwise Functions-Footnote-1559883
+Node: Type Functions560052
+Node: I18N Functions561201
+Node: User-defined562846
+Node: Definition Syntax563650
+Ref: Definition Syntax-Footnote-1569056
+Node: Function Example569125
+Ref: Function Example-Footnote-1572042
+Node: Function Caveats572064
+Node: Calling A Function572582
+Node: Variable Scope573537
+Node: Pass By Value/Reference576525
+Node: Return Statement580035
+Node: Dynamic Typing583019
+Node: Indirect Calls583948
+Ref: Indirect Calls-Footnote-1595252
+Node: Functions Summary595380
+Node: Library Functions598079
+Ref: Library Functions-Footnote-1601697
+Ref: Library Functions-Footnote-2601840
+Node: Library Names602011
+Ref: Library Names-Footnote-1605471
+Ref: Library Names-Footnote-2605691
+Node: General Functions605777
+Node: Strtonum Function606880
+Node: Assert Function609900
+Node: Round Function613224
+Node: Cliff Random Function614765
+Node: Ordinal Functions615781
+Ref: Ordinal Functions-Footnote-1618846
+Ref: Ordinal Functions-Footnote-2619098
+Node: Join Function619309
+Ref: Join Function-Footnote-1621080
+Node: Getlocaltime Function621280
+Node: Readfile Function625021
+Node: Shell Quoting626991
+Node: Data File Management628392
+Node: Filetrans Function629024
+Node: Rewind Function633083
+Node: File Checking634468
+Ref: File Checking-Footnote-1635796
+Node: Empty Files635997
+Node: Ignoring Assigns637976
+Node: Getopt Function639527
+Ref: Getopt Function-Footnote-1650987
+Node: Passwd Functions651190
+Ref: Passwd Functions-Footnote-1660041
+Node: Group Functions660129
+Ref: Group Functions-Footnote-1668032
+Node: Walking Arrays668245
+Node: Library Functions Summary669848
+Node: Library Exercises671249
+Node: Sample Programs672529
+Node: Running Examples673299
+Node: Clones674027
+Node: Cut Program675251
+Node: Egrep Program684981
+Ref: Egrep Program-Footnote-1692485
+Node: Id Program692595
+Node: Split Program696239
+Ref: Split Program-Footnote-1699685
+Node: Tee Program699813
+Node: Uniq Program702600
+Node: Wc Program710021
+Ref: Wc Program-Footnote-1714269
+Node: Miscellaneous Programs714361
+Node: Dupword Program715574
+Node: Alarm Program717605
+Node: Translate Program722409
+Ref: Translate Program-Footnote-1726973
+Node: Labels Program727243
+Ref: Labels Program-Footnote-1730592
+Node: Word Sorting730676
+Node: History Sorting734746
+Node: Extract Program736582
+Node: Simple Sed744114
+Node: Igawk Program747176
+Ref: Igawk Program-Footnote-1761502
+Ref: Igawk Program-Footnote-2761703
+Ref: Igawk Program-Footnote-3761825
+Node: Anagram Program761940
+Node: Signature Program765002
+Node: Programs Summary766249
+Node: Programs Exercises767442
+Ref: Programs Exercises-Footnote-1771573
+Node: Advanced Features771664
+Node: Nondecimal Data773612
+Node: Array Sorting775202
+Node: Controlling Array Traversal775899
+Ref: Controlling Array Traversal-Footnote-1784230
+Node: Array Sorting Functions784348
+Ref: Array Sorting Functions-Footnote-1788240
+Node: Two-way I/O788434
+Ref: Two-way I/O-Footnote-1793378
+Ref: Two-way I/O-Footnote-2793564
+Node: TCP/IP Networking793646
+Node: Profiling796518
+Node: Advanced Features Summary804062
+Node: Internationalization805995
+Node: I18N and L10N807475
+Node: Explaining gettext808161
+Ref: Explaining gettext-Footnote-1813190
+Ref: Explaining gettext-Footnote-2813374
+Node: Programmer i18n813539
+Ref: Programmer i18n-Footnote-1818405
+Node: Translator i18n818454
+Node: String Extraction819248
+Ref: String Extraction-Footnote-1820379
+Node: Printf Ordering820465
+Ref: Printf Ordering-Footnote-1823251
+Node: I18N Portability823315
+Ref: I18N Portability-Footnote-1825764
+Node: I18N Example825827
+Ref: I18N Example-Footnote-1828627
+Node: Gawk I18N828699
+Node: I18N Summary829337
+Node: Debugger830676
+Node: Debugging831698
+Node: Debugging Concepts832139
+Node: Debugging Terms833996
+Node: Awk Debugging836571
+Node: Sample Debugging Session837463
+Node: Debugger Invocation837983
+Node: Finding The Bug839367
+Node: List of Debugger Commands845842
+Node: Breakpoint Control847174
+Node: Debugger Execution Control850866
+Node: Viewing And Changing Data854230
+Node: Execution Stack857595
+Node: Debugger Info859233
+Node: Miscellaneous Debugger Commands863250
+Node: Readline Support868442
+Node: Limitations869334
+Node: Debugging Summary871431
+Node: Arbitrary Precision Arithmetic872599
+Node: Computer Arithmetic874015
+Ref: table-numeric-ranges877616
+Ref: Computer Arithmetic-Footnote-1878475
+Node: Math Definitions878532
+Ref: table-ieee-formats881819
+Ref: Math Definitions-Footnote-1882423
+Node: MPFR features882528
+Node: FP Math Caution884199
+Ref: FP Math Caution-Footnote-1885249
+Node: Inexactness of computations885618
+Node: Inexact representation886566
+Node: Comparing FP Values887921
+Node: Errors accumulate888994
+Node: Getting Accuracy890427
+Node: Try To Round893086
+Node: Setting precision893985
+Ref: table-predefined-precision-strings894669
+Node: Setting the rounding mode896463
+Ref: table-gawk-rounding-modes896827
+Ref: Setting the rounding mode-Footnote-1900281
+Node: Arbitrary Precision Integers900460
+Ref: Arbitrary Precision Integers-Footnote-1903451
+Node: POSIX Floating Point Problems903600
+Ref: POSIX Floating Point Problems-Footnote-1907476
+Node: Floating point summary907514
+Node: Dynamic Extensions909706
+Node: Extension Intro911258
+Node: Plugin License912524
+Node: Extension Mechanism Outline913321
+Ref: figure-load-extension913749
+Ref: figure-register-new-function915229
+Ref: figure-call-new-function916233
+Node: Extension API Description918219
+Node: Extension API Functions Introduction919669
+Node: General Data Types924505
+Ref: General Data Types-Footnote-1930192
+Node: Memory Allocation Functions930491
+Ref: Memory Allocation Functions-Footnote-1933321
+Node: Constructor Functions933417
+Node: Registration Functions935151
+Node: Extension Functions935836
+Node: Exit Callback Functions938132
+Node: Extension Version String939380
+Node: Input Parsers940030
+Node: Output Wrappers949845
+Node: Two-way processors954361
+Node: Printing Messages956565
+Ref: Printing Messages-Footnote-1957642
+Node: Updating `ERRNO'957794
+Node: Requesting Values958534
+Ref: table-value-types-returned959262
+Node: Accessing Parameters960220
+Node: Symbol Table Access961451
+Node: Symbol table by name961965
+Node: Symbol table by cookie963945
+Ref: Symbol table by cookie-Footnote-1968084
+Node: Cached values968147
+Ref: Cached values-Footnote-1971651
+Node: Array Manipulation971742
+Ref: Array Manipulation-Footnote-1972840
+Node: Array Data Types972879
+Ref: Array Data Types-Footnote-1975536
+Node: Array Functions975628
+Node: Flattening Arrays979482
+Node: Creating Arrays986369
+Node: Extension API Variables991136
+Node: Extension Versioning991772
+Node: Extension API Informational Variables993673
+Node: Extension API Boilerplate994761
+Node: Finding Extensions998577
+Node: Extension Example999137
+Node: Internal File Description999909
+Node: Internal File Ops1003976
+Ref: Internal File Ops-Footnote-11015634
+Node: Using Internal File Ops1015774
+Ref: Using Internal File Ops-Footnote-11018157
+Node: Extension Samples1018430
+Node: Extension Sample File Functions1019954
+Node: Extension Sample Fnmatch1027556
+Node: Extension Sample Fork1029038
+Node: Extension Sample Inplace1030251
+Node: Extension Sample Ord1031926
+Node: Extension Sample Readdir1032762
+Ref: table-readdir-file-types1033618
+Node: Extension Sample Revout1034429
+Node: Extension Sample Rev2way1035020
+Node: Extension Sample Read write array1035761
+Node: Extension Sample Readfile1037700
+Node: Extension Sample Time1038795
+Node: Extension Sample API Tests1040144
+Node: gawkextlib1040635
+Node: Extension summary1043285
+Node: Extension Exercises1046967
+Node: Language History1047689
+Node: V7/SVR3.11049346
+Node: SVR41051527
+Node: POSIX1052972
+Node: BTL1054361
+Node: POSIX/GNU1055095
+Node: Feature History1060664
+Node: Common Extensions1073755
+Node: Ranges and Locales1075079
+Ref: Ranges and Locales-Footnote-11079718
+Ref: Ranges and Locales-Footnote-21079745
+Ref: Ranges and Locales-Footnote-31079979
+Node: Contributors1080200
+Node: History summary1085740
+Node: Installation1087109
+Node: Gawk Distribution1088065
+Node: Getting1088549
+Node: Extracting1089373
+Node: Distribution contents1091015
+Node: Unix Installation1096732
+Node: Quick Installation1097349
+Node: Additional Configuration Options1099780
+Node: Configuration Philosophy1101520
+Node: Non-Unix Installation1103871
+Node: PC Installation1104329
+Node: PC Binary Installation1105655
+Node: PC Compiling1107503
+Ref: PC Compiling-Footnote-11110524
+Node: PC Testing1110629
+Node: PC Using1111805
+Node: Cygwin1115920
+Node: MSYS1116743
+Node: VMS Installation1117241
+Node: VMS Compilation1118033
+Ref: VMS Compilation-Footnote-11119255
+Node: VMS Dynamic Extensions1119313
+Node: VMS Installation Details1120997
+Node: VMS Running1123249
+Node: VMS GNV1126090
+Node: VMS Old Gawk1126824
+Node: Bugs1127294
+Node: Other Versions1131198
+Node: Installation summary1137411
+Node: Notes1138467
+Node: Compatibility Mode1139332
+Node: Additions1140114
+Node: Accessing The Source1141039
+Node: Adding Code1142475
+Node: New Ports1148647
+Node: Derived Files1153129
+Ref: Derived Files-Footnote-11158604
+Ref: Derived Files-Footnote-21158638
+Ref: Derived Files-Footnote-31159234
+Node: Future Extensions1159348
+Node: Implementation Limitations1159954
+Node: Extension Design1161202
+Node: Old Extension Problems1162356
+Ref: Old Extension Problems-Footnote-11163873
+Node: Extension New Mechanism Goals1163930
+Ref: Extension New Mechanism Goals-Footnote-11167290
+Node: Extension Other Design Decisions1167479
+Node: Extension Future Growth1169587
+Node: Old Extension Mechanism1170423
+Node: Notes summary1172185
+Node: Basic Concepts1173371
+Node: Basic High Level1174052
+Ref: figure-general-flow1174324
+Ref: figure-process-flow1174923
+Ref: Basic High Level-Footnote-11178152
+Node: Basic Data Typing1178337
+Node: Glossary1181665
+Node: Copying1206823
+Node: GNU Free Documentation License1244379
+Node: Index1269515

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index e8e9b4c0..4cb6a781 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 f9aea67e..001dd8b7 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,