diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2014-10-14 22:38:20 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2014-10-14 22:38:20 +0300 |
commit | d7a6deaeca178a15c600fbc13262aca29fb39753 (patch) | |
tree | b7e0fbc6bee89648933fbd54667ff6c3e74551a6 | |
parent | 2a8c128ca91b42261720368e5d25431ee4362c70 (diff) | |
parent | cb9faa8c276efc4e2b24378bdb941d007523fc22 (diff) | |
download | egawk-d7a6deaeca178a15c600fbc13262aca29fb39753.tar.gz egawk-d7a6deaeca178a15c600fbc13262aca29fb39753.tar.bz2 egawk-d7a6deaeca178a15c600fbc13262aca29fb39753.zip |
Merge branch 'gawk-4.1-stable'
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.info | 1155 | ||||
-rw-r--r-- | doc/gawk.texi | 59 | ||||
-rw-r--r-- | doc/gawktexi.in | 59 |
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, |