diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2020-07-02 10:30:03 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2020-07-02 10:30:03 +0300 |
commit | efd054b9800ec926587d2903f0712c68d4591d43 (patch) | |
tree | 8dae33a9da6044ae7a1bd9c26625e0a98150d6a5 | |
parent | 85da96b705877b4a10b0a96b3d9722536674b2d0 (diff) | |
download | egawk-efd054b9800ec926587d2903f0712c68d4591d43.tar.gz egawk-efd054b9800ec926587d2903f0712c68d4591d43.tar.bz2 egawk-efd054b9800ec926587d2903f0712c68d4591d43.zip |
Add instruction trace option.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | awk.h | 4 | ||||
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.1 | 13 | ||||
-rw-r--r-- | doc/gawk.info | 1239 | ||||
-rw-r--r-- | doc/gawk.texi | 12 | ||||
-rw-r--r-- | doc/gawktexi.in | 12 | ||||
-rw-r--r-- | interpret.h | 8 | ||||
-rw-r--r-- | main.c | 8 | ||||
-rw-r--r-- | pc/Makefile.tst | 15 | ||||
-rw-r--r-- | test/ChangeLog | 4 | ||||
-rw-r--r-- | test/badargs.ok | 1 |
13 files changed, 709 insertions, 622 deletions
@@ -3,6 +3,14 @@ * eval.c (posix_compare): Rewrite contributed by Michael Builov <mbuilov@gmail.com>. + Unrelated: + + * awk.h: New option: do_itrace. + * interpret.h (r_interpret): Print instruction trace if enabled. + * main.c (optab): New option: -I/--trace. + (parse_args): Update optlist and the code to handle it. + * NEWS: Updated. + 2020-06-29 Arnold D. Robbins <arnold@skeeve.com> * debug.c: Cleanup messages. Error messages start with lower @@ -13,6 +13,9 @@ Changes from 5.0.1 to 5.0.2 second destination array is supplied. Similarly, using either array as the second argument is now a fatal error. +3. The new -I/--trace option prints a trace of the byte codes as they + are executed. + Changes from 5.0.1 to 5.1.0 --------------------------- @@ -1159,7 +1159,8 @@ enum do_flag_values { DO_SANDBOX = 0x01000, /* sandbox mode - disable 'system' function & redirections */ DO_PROFILE = 0x02000, /* profile the program */ DO_DEBUG = 0x04000, /* debug the program */ - DO_MPFR = 0x08000 /* arbitrary-precision floating-point math */ + DO_MPFR = 0x08000, /* arbitrary-precision floating-point math */ + DO_ITRACE = 0x10000 /* trace byte-code instructions */ }; #define do_traditional (do_flags & DO_TRADITIONAL) @@ -1174,6 +1175,7 @@ enum do_flag_values { #define do_sandbox (do_flags & DO_SANDBOX) #define do_debug (do_flags & DO_DEBUG) #define do_mpfr (do_flags & DO_MPFR) +#define do_itrace (do_flags & DO_ITRACE) extern bool do_optimize; extern int use_lc_numeric; diff --git a/doc/ChangeLog b/doc/ChangeLog index c1df31fc..4f8142d7 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2020-07-02 Arnold D. Robbins <arnold@skeeve.com> + + * gawk.1, gawktexi.in: Document -I/--trace option. + 2020-06-25 Arnold D. Robbins <arnold@skeeve.com> * gawk.1: Applied some more troff "lint" fixes. @@ -13,7 +13,7 @@ . if \w'\(rq' .ds rq "\(rq . \} .\} -.TH GAWK 1 "Mar 23 2020" "Free Software Foundation" "Utility Commands" +.TH GAWK 1 "Jul 2 2020" "Free Software Foundation" "Utility Commands" .SH NAME gawk \- pattern scanning and processing language .SH SYNOPSIS @@ -321,6 +321,17 @@ Files read with are treated as if they begin with an implicit \fB@namespace "awk"\fR statement. .TP .PD 0 +.BI \-I +.TP +.PD +.B \-\^\-trace +Print the internal byte code names as they are executed when running +the program. The trace is printed to standard error. Each ``op code'' +is preceded by a +.B + +sign in the output. +.TP +.PD 0 .BI "\-l " lib .TP .PD diff --git a/doc/gawk.info b/doc/gawk.info index 23729311..62bea4bf 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -2666,6 +2666,12 @@ The following list describes options mandated by the POSIX standard: at their beginning. *Note Changing The Namespace::, for more information. +'-I' +'--trace' + Print the internal byte code names as they are executed when + running the program. The trace is printed to standard error. Each + "op code" is preceded by a '+' sign in the output. + '-l' EXT '--load' EXT Load a dynamic extension named EXT. Extensions are stored as @@ -33935,7 +33941,7 @@ Index * + (plus sign), += operator <1>: Precedence. (line 94) * , (comma), in range patterns: Ranges. (line 6) * - (hyphen), file names beginning with: Options. (line 64) -* - (hyphen), -- end of options marker: Options. (line 343) +* - (hyphen), -- end of options marker: Options. (line 349) * - (hyphen), in bracket expressions: Bracket Expressions. (line 25) * - (hyphen), -= operator: Assignment Ops. (line 129) * - (hyphen), -- operator: Increment Ops. (line 48) @@ -33944,7 +33950,7 @@ Index * - (hyphen), - operator <1>: Precedence. (line 57) * - (hyphen), -= operator <1>: Precedence. (line 94) * --assign option: Options. (line 36) -* --bignum option: Options. (line 237) +* --bignum option: Options. (line 243) * --characters-as-bytes option: Options. (line 73) * --copyright option: Options. (line 93) * --debug option: Options. (line 112) @@ -33970,32 +33976,33 @@ Index * --help option: Options. (line 176) * --include option: Options. (line 181) * --lint option: Command Line. (line 20) -* --lint option <1>: Options. (line 210) -* --lint-old option: Options. (line 333) -* --load option: Options. (line 198) -* --no-optimize option: Options. (line 318) -* --non-decimal-data option: Options. (line 243) +* --lint option <1>: Options. (line 216) +* --lint-old option: Options. (line 339) +* --load option: Options. (line 204) +* --no-optimize option: Options. (line 324) +* --non-decimal-data option: Options. (line 249) * --non-decimal-data option <1>: Nondecimal Data. (line 6) * --non-decimal-data option, strtonum() function and: Nondecimal Data. (line 35) -* --optimize option: Options. (line 268) -* --posix option: Options. (line 290) -* --posix option, --traditional option and: Options. (line 305) -* --pretty-print option: Options. (line 257) -* --profile option: Options. (line 278) +* --optimize option: Options. (line 274) +* --posix option: Options. (line 296) +* --posix option, --traditional option and: Options. (line 311) +* --pretty-print option: Options. (line 263) +* --profile option: Options. (line 284) * --profile option <1>: Profiling. (line 12) -* --re-interval option: Options. (line 311) -* --sandbox option: Options. (line 323) +* --re-interval option: Options. (line 317) +* --sandbox option: Options. (line 329) * --sandbox option, input redirection with getline: Getline. (line 19) * --sandbox option, output redirection with print, printf: Redirection. (line 6) * --sandbox option, disabling system() function: I/O Functions. (line 128) * --source option: Options. (line 121) +* --trace option: Options. (line 198) * --traditional option: Options. (line 86) -* --traditional option, --posix option and: Options. (line 305) -* --use-lc-numeric option: Options. (line 252) -* --version option: Options. (line 338) +* --traditional option, --posix option and: Options. (line 311) +* --use-lc-numeric option: Options. (line 258) +* --version option: Options. (line 344) * -b option: Options. (line 73) * -c option: Options. (line 86) * -C option: Options. (line 93) @@ -34003,32 +34010,33 @@ Index * -D option: Options. (line 112) * -e option: Options. (line 121) * -E option: Options. (line 147) -* -e option <1>: Options. (line 378) +* -e option <1>: Options. (line 384) * -f option: Long. (line 12) * -F option: Options. (line 21) * -f option <1>: Options. (line 25) -* -F option, -Ft sets FS to TAB: Options. (line 350) -* -f option, multiple uses: Options. (line 355) +* -F option, -Ft sets FS to TAB: Options. (line 356) +* -f option, multiple uses: Options. (line 361) * -F option, command-line: Command Line Field Separator. (line 6) * -g option: Options. (line 169) * -h option: Options. (line 176) * -i option: Options. (line 181) -* -l option: Options. (line 198) -* -l option <1>: Options. (line 210) -* -L option: Options. (line 333) -* -M option: Options. (line 237) -* -n option: Options. (line 243) -* -N option: Options. (line 252) -* -o option: Options. (line 257) -* -O option: Options. (line 268) -* -p option: Options. (line 278) -* -P option: Options. (line 290) -* -r option: Options. (line 311) -* -s option: Options. (line 318) -* -S option: Options. (line 323) +* -I option: Options. (line 198) +* -l option: Options. (line 204) +* -l option <1>: Options. (line 216) +* -L option: Options. (line 339) +* -M option: Options. (line 243) +* -n option: Options. (line 249) +* -N option: Options. (line 258) +* -o option: Options. (line 263) +* -O option: Options. (line 274) +* -p option: Options. (line 284) +* -P option: Options. (line 296) +* -r option: Options. (line 317) +* -s option: Options. (line 324) +* -S option: Options. (line 329) * -v option: Options. (line 36) -* -V option: Options. (line 338) +* -V option: Options. (line 344) * -v option <1>: Assignment Options. (line 12) * -W option: Options. (line 51) * . (period), regexp operator: Regexp Operator Details. @@ -34262,7 +34270,7 @@ Index * arguments, command-line <1>: Auto-set. (line 15) * arguments, command-line <2>: ARGC and ARGV. (line 6) * arguments, processing: Getopt Function. (line 6) -* ARGV array: Options. (line 323) +* ARGV array: Options. (line 329) * ARGV array, indexing into: Other Arguments. (line 21) * arithmetic operators: Arithmetic Ops. (line 6) * array manipulation in extensions: Array Manipulation. (line 6) @@ -34386,7 +34394,7 @@ Index * awk, uses for <1>: Getting Started. (line 12) * awk, uses for <2>: When. (line 6) * awk, invoking: Command Line. (line 6) -* awk, profiling, enabling: Options. (line 278) +* awk, profiling, enabling: Options. (line 284) * awk, implementations, limits: Getline Notes. (line 14) * awk, implementation issues, pipes: Redirection. (line 129) * awk, new vs. old, OFMT variable: Strings And Numbers. (line 56) @@ -34825,7 +34833,7 @@ Index * cosine: Numeric Functions. (line 16) * counting words, lines, and characters: Wc Program. (line 6) * csh utility: Statements/Lines. (line 45) -* csh utility, POSIXLY_CORRECT environment variable: Options. (line 399) +* csh utility, POSIXLY_CORRECT environment variable: Options. (line 405) * csh utility, |& operator, comparison with: Two-way I/O. (line 27) * ctime() user-defined function: Function Example. (line 74) * Curreli, Marco: Contributors. (line 147) @@ -35050,7 +35058,7 @@ Index * debugging, example session: Sample Debugging Session. (line 6) * debugging gawk, bug reports: Bugs. (line 9) -* decimal point character, locale specific: Options. (line 302) +* decimal point character, locale specific: Options. (line 308) * decrement operators: Increment Ops. (line 35) * default keyword: Switch Statement. (line 6) * Deifik, Scott: Acknowledgments. (line 60) @@ -35237,7 +35245,7 @@ Index * endpwent() user-defined function: Passwd Functions. (line 211) * English, Steve: Advanced Features. (line 6) * ENVIRON array: Auto-set. (line 59) -* environment variables, POSIXLY_CORRECT: Options. (line 384) +* environment variables, POSIXLY_CORRECT: Options. (line 390) * environment variables, used by gawk: Environment Variables. (line 6) * environment variables, AWKPATH: AWKPATH Variable. (line 6) @@ -35530,7 +35538,7 @@ Index * Free Software Foundation (FSF) <3>: Glossary. (line 403) * FreeBSD: Glossary. (line 747) * FS variable, --field-separator option and: Options. (line 21) -* FS variable, TAB character as: Options. (line 299) +* FS variable, TAB character as: Options. (line 305) * FS variable: Field Separators. (line 15) * FS variable, changing value of: Field Separators. (line 34) * FS variable, containing ^: Regexp Field Splitting. @@ -35605,8 +35613,8 @@ Index * gawk, uses for: Preface. (line 34) * gawk, awk and <1>: This Manual. (line 14) * gawk, newlines in: Statements/Lines. (line 12) -* gawk, extensions, disabling: Options. (line 290) -* gawk, version of, printing information about: Options. (line 338) +* gawk, extensions, disabling: Options. (line 296) +* gawk, version of, printing information about: Options. (line 344) * gawk, ARGIND variable in: Other Arguments. (line 21) * gawk, PROCINFO array in: Other Arguments. (line 21) * gawk, escape sequences: Escape Sequences. (line 121) @@ -35810,13 +35818,13 @@ Index * help debugger command: Miscellaneous Debugger Commands. (line 67) * hexadecimal numbers: Nondecimal-numbers. (line 6) -* hexadecimal values, enabling interpretation of: Options. (line 243) +* hexadecimal values, enabling interpretation of: Options. (line 249) * history expansion, in debugger: Readline Support. (line 6) * histsort.awk program: History Sorting. (line 25) * Hughes, Phil: Acknowledgments. (line 43) * HUP signal, for dynamic profiling: Profiling. (line 211) * hyphen (-), file names beginning with: Options. (line 64) -* hyphen (-), -- end of options marker: Options. (line 343) +* hyphen (-), -- end of options marker: Options. (line 349) * hyphen (-), in bracket expressions: Bracket Expressions. (line 25) * hyphen (-), -= operator: Assignment Ops. (line 129) * hyphen (-), -- operator: Increment Ops. (line 48) @@ -35900,6 +35908,7 @@ Index * installing gawk, Cygwin: Cygwin. (line 21) * installing gawk, VMS: VMS Installation. (line 6) * instruction tracing, in debugger: Debugger Info. (line 90) +* instructions, trace of internal: Options. (line 198) * int: Numeric Functions. (line 24) * INT signal (MS-Windows): Profiling. (line 214) * integer array indices: Numeric Array Subscripts. @@ -36035,9 +36044,9 @@ Index * lines, counting: Wc Program. (line 6) * lines, duplicate, removing: History Sorting. (line 6) * lint checking, empty programs: Command Line. (line 16) -* lint checking, issuing warnings: Options. (line 210) +* lint checking, issuing warnings: Options. (line 216) * lint checking, POSIXLY_CORRECT environment variable: Options. - (line 384) + (line 390) * lint checking: User-modified. (line 90) * lint checking, array subscripts: Uninitialized Subscripts. (line 43) @@ -36050,13 +36059,13 @@ Index * list function definitions, in debugger: Debugger Info. (line 30) * @load directive: Loading Shared Libraries. (line 8) -* loading extensions: Options. (line 198) +* loading extensions: Options. (line 204) * loading extensions, @load directive: Loading Shared Libraries. (line 8) * local variables, in a function: Variable Scope. (line 6) * local variables, show in debugger: Debugger Info. (line 34) * locale categories: Explaining gettext. (line 81) -* locale decimal point character: Options. (line 302) +* locale decimal point character: Options. (line 308) * locale, definition of: Locales. (line 6) * log: Numeric Functions. (line 29) * log files, timestamps in: Time Functions. (line 6) @@ -36168,7 +36177,7 @@ Index * networks, support for: Special Network. (line 6) * networks, programming: TCP/IP Networking. (line 6) * newlines: Statements/Lines. (line 6) -* newlines <1>: Options. (line 296) +* newlines <1>: Options. (line 302) * newlines, in dynamic regexps: Computed Regexps. (line 60) * newlines, in regexp constants: Computed Regexps. (line 70) * newlines, as record separators: awk split records. (line 12) @@ -36243,7 +36252,7 @@ Index * o debugger command (alias for option): Debugger Info. (line 57) * obsolete features: Obsolete. (line 6) * octal numbers: Nondecimal-numbers. (line 6) -* octal values, enabling interpretation of: Options. (line 243) +* octal values, enabling interpretation of: Options. (line 249) * OFMT variable: OFMT. (line 15) * OFMT variable, POSIX awk and: OFMT. (line 27) * OFMT variable <1>: Strings And Numbers. (line 56) @@ -36251,6 +36260,7 @@ Index * OFS variable: Changing Fields. (line 64) * OFS variable <1>: Output Separators. (line 6) * OFS variable <2>: User-modified. (line 116) +* op-codes, trace of internal: Options. (line 198) * OpenBSD: Glossary. (line 747) * OpenSolaris: Other Versions. (line 96) * operating systems, BSD-based: Manual History. (line 28) @@ -36374,7 +36384,7 @@ Index * portability, #! (executable scripts): Executable Scripts. (line 29) * portability, ARGV variable: Executable Scripts. (line 55) * portability, backslash continuation and: Statements/Lines. (line 30) -* portability, POSIXLY_CORRECT environment variable: Options. (line 404) +* portability, POSIXLY_CORRECT environment variable: Options. (line 410) * portability: Escape Sequences. (line 103) * portability, backslash in escape sequences: Escape Sequences. (line 108) @@ -36450,8 +36460,8 @@ Index * POSIX awk, date utility and: Time Functions. (line 255) * POSIX awk, function keyword in: Definition Syntax. (line 99) * POSIX awk, changes in awk versions: POSIX. (line 6) -* POSIX mode: Options. (line 290) -* POSIX mode <1>: Options. (line 384) +* POSIX mode: Options. (line 296) +* POSIX mode <1>: Options. (line 390) * POSIX mode <2>: Regexp Operator Details. (line 47) * POSIX mode <3>: Input Summary. (line 69) @@ -36471,7 +36481,7 @@ Index * POSIX mode <12>: POSIX Floating Point Problems. (line 83) * POSIX mode <13>: Feature History. (line 313) -* POSIXLY_CORRECT environment variable: Options. (line 384) +* POSIXLY_CORRECT environment variable: Options. (line 390) * PREC variable: User-modified. (line 127) * precedence, regexp operators: Regexp Operator Details. (line 137) @@ -36483,7 +36493,7 @@ Index * predefined variables, conveying information: Auto-set. (line 6) * pretty printer, interaction with namespaces: Namespace And Features. (line 9) -* pretty printing: Options. (line 255) +* pretty printing: Options. (line 261) * pretty printing <1>: Profiling. (line 222) * pretty printing, profiling, difference with: Profiling. (line 229) * print debugger command: Viewing And Changing Data. @@ -36647,7 +36657,7 @@ Index * regexp constants, as patterns: Expression Patterns. (line 34) * register loadable extension: Registration Functions. (line 6) -* regular expressions, interval expressions and: Options. (line 311) +* regular expressions, interval expressions and: Options. (line 317) * regular expressions: Regexp. (line 6) * regular expressions, as patterns: Regexp Usage. (line 6) * regular expressions, operators: Regexp Usage. (line 19) @@ -36747,7 +36757,7 @@ Index (line 68) * sample debugging session: Sample Debugging Session. (line 6) -* sandbox mode: Options. (line 323) +* sandbox mode: Options. (line 329) * save debugger options: Debugger Info. (line 85) * scalar or array: Type Functions. (line 11) * scalar values: Basic Data Typing. (line 13) @@ -37091,13 +37101,14 @@ Index * tr utility: Translate Program. (line 6) * trace debugger command: Miscellaneous Debugger Commands. (line 108) +* trace, internal instructions: Options. (line 198) * traceback, display in debugger: Execution Stack. (line 13) * translate string: I18N Functions. (line 21) * translate.awk program: Translate Program. (line 55) * treating files, as single records: gawk split records. (line 96) * troubleshooting, typographical errors, global variables: Options. (line 103) -* troubleshooting, --non-decimal-data option: Options. (line 243) +* troubleshooting, --non-decimal-data option: Options. (line 249) * troubleshooting, backslash before nonspecial character: Escape Sequences. (line 108) * troubleshooting, regexp constants vs. string constants: Computed Regexps. @@ -37271,7 +37282,7 @@ Index * Wall, Larry: Array Intro. (line 6) * Wall, Larry <1>: Future Extensions. (line 6) * Wallin, Anders: Contributors. (line 106) -* warnings, issuing: Options. (line 210) +* warnings, issuing: Options. (line 216) * watch debugger command: Viewing And Changing Data. (line 70) * watchpoint (debugger): Debugging Terms. (line 42) @@ -37284,7 +37295,7 @@ Index (line 13) * while statement, use of regexps in: Regexp Usage. (line 19) * while statement: While Statement. (line 6) -* whitespace, newlines as: Options. (line 296) +* whitespace, newlines as: Options. (line 302) * whitespace, definition of: Fields. (line 6) * whitespace, as field separators: Default Field Splitting. (line 6) @@ -37358,560 +37369,560 @@ Node: Intro Summary116359 Node: Invoking Gawk117243 Node: Command Line118757 Node: Options119555 -Ref: Options-Footnote-1137224 -Ref: Options-Footnote-2137455 -Node: Other Arguments137480 -Node: Naming Standard Input140787 -Node: Environment Variables141997 -Node: AWKPATH Variable142555 -Ref: AWKPATH Variable-Footnote-1145967 -Ref: AWKPATH Variable-Footnote-2146001 -Node: AWKLIBPATH Variable146372 -Ref: AWKLIBPATH Variable-Footnote-1148069 -Node: Other Environment Variables148444 -Node: Exit Status152265 -Node: Include Files152942 -Node: Loading Shared Libraries156632 -Node: Obsolete158060 -Node: Undocumented158752 -Node: Invoking Summary159049 -Node: Regexp161890 -Node: Regexp Usage163344 -Node: Escape Sequences165381 -Node: Regexp Operators171622 -Node: Regexp Operator Details172107 -Ref: Regexp Operator Details-Footnote-1178539 -Node: Interval Expressions178686 -Ref: Interval Expressions-Footnote-1180107 -Node: Bracket Expressions180205 -Ref: table-char-classes182681 -Node: Leftmost Longest186007 -Node: Computed Regexps187310 -Node: GNU Regexp Operators190737 -Node: Case-sensitivity194474 -Ref: Case-sensitivity-Footnote-1197340 -Ref: Case-sensitivity-Footnote-2197575 -Node: Regexp Summary197683 -Node: Reading Files199149 -Node: Records201418 -Node: awk split records202493 -Node: gawk split records207768 -Ref: gawk split records-Footnote-1212501 -Node: Fields212538 -Node: Nonconstant Fields215279 -Ref: Nonconstant Fields-Footnote-1217515 -Node: Changing Fields217719 -Node: Field Separators223750 -Node: Default Field Splitting226448 -Node: Regexp Field Splitting227566 -Node: Single Character Fields230919 -Node: Command Line Field Separator231979 -Node: Full Line Fields235197 -Ref: Full Line Fields-Footnote-1236719 -Ref: Full Line Fields-Footnote-2236765 -Node: Field Splitting Summary236866 -Node: Constant Size238940 -Node: Fixed width data239672 -Node: Skipping intervening243139 -Node: Allowing trailing data243937 -Node: Fields with fixed data244974 -Node: Splitting By Content246492 -Ref: Splitting By Content-Footnote-1250275 -Node: More CSV250438 -Node: Testing field creation251748 -Node: Multiple Line253373 -Node: Getline259650 -Node: Plain Getline262119 -Node: Getline/Variable264692 -Node: Getline/File265843 -Node: Getline/Variable/File267231 -Ref: Getline/Variable/File-Footnote-1268836 -Node: Getline/Pipe268924 -Node: Getline/Variable/Pipe271628 -Node: Getline/Coprocess272763 -Node: Getline/Variable/Coprocess274030 -Node: Getline Notes274772 -Node: Getline Summary277569 -Ref: table-getline-variants277993 -Node: Read Timeout278741 -Ref: Read Timeout-Footnote-1282647 -Node: Retrying Input282705 -Node: Command-line directories283904 -Node: Input Summary284810 -Node: Input Exercises287982 -Node: Printing288416 -Node: Print290250 -Node: Print Examples291707 -Node: Output Separators294487 -Node: OFMT296504 -Node: Printf297860 -Node: Basic Printf298645 -Node: Control Letters300219 -Node: Format Modifiers305383 -Node: Printf Examples311398 -Node: Redirection313884 -Node: Special FD320725 -Ref: Special FD-Footnote-1323893 -Node: Special Files323967 -Node: Other Inherited Files324584 -Node: Special Network325585 -Node: Special Caveats326445 -Node: Close Files And Pipes327394 -Ref: table-close-pipe-return-values334301 -Ref: Close Files And Pipes-Footnote-1335114 -Ref: Close Files And Pipes-Footnote-2335262 -Node: Nonfatal335414 -Node: Output Summary337752 -Node: Output Exercises338974 -Node: Expressions339653 -Node: Values340841 -Node: Constants341519 -Node: Scalar Constants342210 -Ref: Scalar Constants-Footnote-1344734 -Node: Nondecimal-numbers344984 -Node: Regexp Constants347985 -Node: Using Constant Regexps348511 -Node: Standard Regexp Constants349133 -Node: Strong Regexp Constants352321 -Node: Variables355333 -Node: Using Variables355990 -Node: Assignment Options357900 -Node: Conversion360371 -Node: Strings And Numbers360895 -Ref: Strings And Numbers-Footnote-1363958 -Node: Locale influences conversions364067 -Ref: table-locale-affects366825 -Node: All Operators367443 -Node: Arithmetic Ops368072 -Node: Concatenation370578 -Ref: Concatenation-Footnote-1373425 -Node: Assignment Ops373532 -Ref: table-assign-ops378523 -Node: Increment Ops379836 -Node: Truth Values and Conditions383296 -Node: Truth Values384370 -Node: Typing and Comparison385418 -Node: Variable Typing386238 -Ref: Variable Typing-Footnote-1392701 -Ref: Variable Typing-Footnote-2392773 -Node: Comparison Operators392850 -Ref: table-relational-ops393269 -Node: POSIX String Comparison396764 -Ref: POSIX String Comparison-Footnote-1398459 -Ref: POSIX String Comparison-Footnote-2398598 -Node: Boolean Ops398682 -Ref: Boolean Ops-Footnote-1403164 -Node: Conditional Exp403256 -Node: Function Calls404992 -Node: Precedence408869 -Node: Locales412528 -Node: Expressions Summary414160 -Node: Patterns and Actions416733 -Node: Pattern Overview417853 -Node: Regexp Patterns419530 -Node: Expression Patterns420072 -Node: Ranges423853 -Node: BEGIN/END426961 -Node: Using BEGIN/END427722 -Ref: Using BEGIN/END-Footnote-1430458 -Node: I/O And BEGIN/END430564 -Node: BEGINFILE/ENDFILE432878 -Node: Empty435791 -Node: Using Shell Variables436108 -Node: Action Overview438382 -Node: Statements440707 -Node: If Statement442555 -Node: While Statement444050 -Node: Do Statement446078 -Node: For Statement447226 -Node: Switch Statement450397 -Node: Break Statement452838 -Node: Continue Statement454930 -Node: Next Statement456757 -Node: Nextfile Statement459140 -Node: Exit Statement461792 -Node: Built-in Variables464195 -Node: User-modified465328 -Node: Auto-set473095 -Ref: Auto-set-Footnote-1489902 -Ref: Auto-set-Footnote-2490108 -Node: ARGC and ARGV490164 -Node: Pattern Action Summary494377 -Node: Arrays496807 -Node: Array Basics498136 -Node: Array Intro498980 -Ref: figure-array-elements500955 -Ref: Array Intro-Footnote-1503659 -Node: Reference to Elements503787 -Node: Assigning Elements506251 -Node: Array Example506742 -Node: Scanning an Array508501 -Node: Controlling Scanning511523 -Ref: Controlling Scanning-Footnote-1517979 -Node: Numeric Array Subscripts518295 -Node: Uninitialized Subscripts520479 -Node: Delete522098 -Ref: Delete-Footnote-1524850 -Node: Multidimensional524907 -Node: Multiscanning528002 -Node: Arrays of Arrays529593 -Node: Arrays Summary534361 -Node: Functions536454 -Node: Built-in537492 -Node: Calling Built-in538573 -Node: Numeric Functions540569 -Ref: Numeric Functions-Footnote-1544597 -Ref: Numeric Functions-Footnote-2545245 -Ref: Numeric Functions-Footnote-3545293 -Node: String Functions545565 -Ref: String Functions-Footnote-1569722 -Ref: String Functions-Footnote-2569850 -Ref: String Functions-Footnote-3570098 -Node: Gory Details570185 -Ref: table-sub-escapes571976 -Ref: table-sub-proposed573495 -Ref: table-posix-sub574858 -Ref: table-gensub-escapes576399 -Ref: Gory Details-Footnote-1577222 -Node: I/O Functions577376 -Ref: table-system-return-values583844 -Ref: I/O Functions-Footnote-1585924 -Ref: I/O Functions-Footnote-2586072 -Node: Time Functions586192 -Ref: Time Functions-Footnote-1596863 -Ref: Time Functions-Footnote-2596931 -Ref: Time Functions-Footnote-3597089 -Ref: Time Functions-Footnote-4597200 -Ref: Time Functions-Footnote-5597312 -Ref: Time Functions-Footnote-6597539 -Node: Bitwise Functions597805 -Ref: table-bitwise-ops598399 -Ref: Bitwise Functions-Footnote-1604462 -Ref: Bitwise Functions-Footnote-2604635 -Node: Type Functions604826 -Node: I18N Functions607689 -Node: User-defined609340 -Node: Definition Syntax610152 -Ref: Definition Syntax-Footnote-1615839 -Node: Function Example615910 -Ref: Function Example-Footnote-1618832 -Node: Function Calling618854 -Node: Calling A Function619442 -Node: Variable Scope620400 -Node: Pass By Value/Reference623394 -Node: Function Caveats626038 -Ref: Function Caveats-Footnote-1628085 -Node: Return Statement628205 -Node: Dynamic Typing631184 -Node: Indirect Calls632114 -Ref: Indirect Calls-Footnote-1642366 -Node: Functions Summary642494 -Node: Library Functions645199 -Ref: Library Functions-Footnote-1648806 -Ref: Library Functions-Footnote-2648949 -Node: Library Names649120 -Ref: Library Names-Footnote-1652787 -Ref: Library Names-Footnote-2653010 -Node: General Functions653096 -Node: Strtonum Function654199 -Node: Assert Function657221 -Node: Round Function660547 -Node: Cliff Random Function662087 -Node: Ordinal Functions663103 -Ref: Ordinal Functions-Footnote-1666166 -Ref: Ordinal Functions-Footnote-2666418 -Node: Join Function666628 -Ref: Join Function-Footnote-1668398 -Node: Getlocaltime Function668598 -Node: Readfile Function672340 -Node: Shell Quoting674317 -Node: Data File Management675718 -Node: Filetrans Function676350 -Node: Rewind Function680446 -Node: File Checking682355 -Ref: File Checking-Footnote-1683689 -Node: Empty Files683890 -Node: Ignoring Assigns685869 -Node: Getopt Function687419 -Ref: Getopt Function-Footnote-1702631 -Node: Passwd Functions702831 -Ref: Passwd Functions-Footnote-1711670 -Node: Group Functions711758 -Ref: Group Functions-Footnote-1719656 -Node: Walking Arrays719863 -Node: Library Functions Summary722871 -Node: Library Exercises724277 -Node: Sample Programs724742 -Node: Running Examples725512 -Node: Clones726240 -Node: Cut Program727464 -Node: Egrep Program737393 -Ref: Egrep Program-Footnote-1744905 -Node: Id Program745015 -Node: Split Program748695 -Ref: Split Program-Footnote-1752153 -Node: Tee Program752282 -Node: Uniq Program755072 -Node: Wc Program762693 -Ref: Wc Program-Footnote-1766948 -Node: Miscellaneous Programs767042 -Node: Dupword Program768255 -Node: Alarm Program770285 -Node: Translate Program775140 -Ref: Translate Program-Footnote-1779705 -Node: Labels Program779975 -Ref: Labels Program-Footnote-1783326 -Node: Word Sorting783410 -Node: History Sorting787482 -Node: Extract Program789707 -Node: Simple Sed797761 -Node: Igawk Program800835 -Ref: Igawk Program-Footnote-1815166 -Ref: Igawk Program-Footnote-2815368 -Ref: Igawk Program-Footnote-3815490 -Node: Anagram Program815605 -Node: Signature Program818667 -Node: Programs Summary819914 -Node: Programs Exercises821128 -Ref: Programs Exercises-Footnote-1825257 -Node: Advanced Features825348 -Node: Nondecimal Data827338 -Node: Array Sorting828929 -Node: Controlling Array Traversal829629 -Ref: Controlling Array Traversal-Footnote-1837997 -Node: Array Sorting Functions838115 -Ref: Array Sorting Functions-Footnote-1843206 -Node: Two-way I/O843402 -Ref: Two-way I/O-Footnote-1851123 -Ref: Two-way I/O-Footnote-2851310 -Node: TCP/IP Networking851392 -Node: Profiling854510 -Node: Advanced Features Summary863525 -Node: Internationalization865369 -Node: I18N and L10N866849 -Node: Explaining gettext867536 -Ref: Explaining gettext-Footnote-1873428 -Ref: Explaining gettext-Footnote-2873613 -Node: Programmer i18n873778 -Ref: Programmer i18n-Footnote-1878727 -Node: Translator i18n878776 -Node: String Extraction879570 -Ref: String Extraction-Footnote-1880702 -Node: Printf Ordering880788 -Ref: Printf Ordering-Footnote-1883574 -Node: I18N Portability883638 -Ref: I18N Portability-Footnote-1886094 -Node: I18N Example886157 -Ref: I18N Example-Footnote-1889432 -Ref: I18N Example-Footnote-2889505 -Node: Gawk I18N889614 -Node: I18N Summary890263 -Node: Debugger891604 -Node: Debugging892604 -Node: Debugging Concepts893045 -Node: Debugging Terms894854 -Node: Awk Debugging897429 -Ref: Awk Debugging-Footnote-1898374 -Node: Sample Debugging Session898506 -Node: Debugger Invocation899040 -Node: Finding The Bug900426 -Node: List of Debugger Commands906900 -Node: Breakpoint Control908233 -Node: Debugger Execution Control911927 -Node: Viewing And Changing Data915289 -Node: Execution Stack918830 -Node: Debugger Info920467 -Node: Miscellaneous Debugger Commands924538 -Node: Readline Support929600 -Node: Limitations930496 -Node: Debugging Summary933050 -Node: Namespaces934329 -Node: Global Namespace935440 -Node: Qualified Names936838 -Node: Default Namespace937837 -Node: Changing The Namespace938578 -Node: Naming Rules940192 -Node: Internal Name Management942040 -Node: Namespace Example943082 -Node: Namespace And Features945644 -Node: Namespace Summary947079 -Node: Arbitrary Precision Arithmetic948556 -Node: Computer Arithmetic950043 -Ref: table-numeric-ranges953809 -Ref: table-floating-point-ranges954302 -Ref: Computer Arithmetic-Footnote-1954960 -Node: Math Definitions955017 -Ref: table-ieee-formats958333 -Ref: Math Definitions-Footnote-1958936 -Node: MPFR features959041 -Node: FP Math Caution960759 -Ref: FP Math Caution-Footnote-1961831 -Node: Inexactness of computations962200 -Node: Inexact representation963160 -Node: Comparing FP Values964520 -Node: Errors accumulate965761 -Node: Getting Accuracy967194 -Node: Try To Round969904 -Node: Setting precision970803 -Ref: table-predefined-precision-strings971500 -Node: Setting the rounding mode973330 -Ref: table-gawk-rounding-modes973704 -Ref: Setting the rounding mode-Footnote-1977635 -Node: Arbitrary Precision Integers977814 -Ref: Arbitrary Precision Integers-Footnote-1980989 -Node: Checking for MPFR981138 -Node: POSIX Floating Point Problems982612 -Ref: POSIX Floating Point Problems-Footnote-1986897 -Node: Floating point summary986935 -Node: Dynamic Extensions989125 -Node: Extension Intro990678 -Node: Plugin License991944 -Node: Extension Mechanism Outline992741 -Ref: figure-load-extension993180 -Ref: figure-register-new-function994745 -Ref: figure-call-new-function995837 -Node: Extension API Description997899 -Node: Extension API Functions Introduction999541 -Ref: table-api-std-headers1001377 -Node: General Data Types1005242 -Ref: General Data Types-Footnote-11013603 -Node: Memory Allocation Functions1013902 -Ref: Memory Allocation Functions-Footnote-11018112 -Node: Constructor Functions1018211 -Node: Registration Functions1021797 -Node: Extension Functions1022482 -Node: Exit Callback Functions1027804 -Node: Extension Version String1029054 -Node: Input Parsers1029717 -Node: Output Wrappers1042438 -Node: Two-way processors1046950 -Node: Printing Messages1049215 -Ref: Printing Messages-Footnote-11050386 -Node: Updating ERRNO1050539 -Node: Requesting Values1051278 -Ref: table-value-types-returned1052015 -Node: Accessing Parameters1052951 -Node: Symbol Table Access1054186 -Node: Symbol table by name1054698 -Ref: Symbol table by name-Footnote-11057722 -Node: Symbol table by cookie1057850 -Ref: Symbol table by cookie-Footnote-11062035 -Node: Cached values1062099 -Ref: Cached values-Footnote-11065635 -Node: Array Manipulation1065788 -Ref: Array Manipulation-Footnote-11066879 -Node: Array Data Types1066916 -Ref: Array Data Types-Footnote-11069574 -Node: Array Functions1069666 -Node: Flattening Arrays1074164 -Node: Creating Arrays1081140 -Node: Redirection API1085907 -Node: Extension API Variables1088740 -Node: Extension Versioning1089451 -Ref: gawk-api-version1089880 -Node: Extension GMP/MPFR Versioning1091611 -Node: Extension API Informational Variables1093239 -Node: Extension API Boilerplate1094312 -Node: Changes from API V11098286 -Node: Finding Extensions1099858 -Node: Extension Example1100417 -Node: Internal File Description1101215 -Node: Internal File Ops1105295 -Ref: Internal File Ops-Footnote-11116645 -Node: Using Internal File Ops1116785 -Ref: Using Internal File Ops-Footnote-11119168 -Node: Extension Samples1119442 -Node: Extension Sample File Functions1120971 -Node: Extension Sample Fnmatch1128620 -Node: Extension Sample Fork1130107 -Node: Extension Sample Inplace1131325 -Node: Extension Sample Ord1134950 -Node: Extension Sample Readdir1135786 -Ref: table-readdir-file-types1136675 -Node: Extension Sample Revout1137742 -Node: Extension Sample Rev2way1138331 -Node: Extension Sample Read write array1139071 -Node: Extension Sample Readfile1141013 -Node: Extension Sample Time1142108 -Node: Extension Sample API Tests1143860 -Node: gawkextlib1144352 -Node: Extension summary1147270 -Node: Extension Exercises1150972 -Node: Language History1152214 -Node: V7/SVR3.11153870 -Node: SVR41156022 -Node: POSIX1157456 -Node: BTL1158837 -Node: POSIX/GNU1159566 -Node: Feature History1165344 -Node: Common Extensions1181663 -Node: Ranges and Locales1182946 -Ref: Ranges and Locales-Footnote-11187562 -Ref: Ranges and Locales-Footnote-21187589 -Ref: Ranges and Locales-Footnote-31187824 -Node: Contributors1188047 -Node: History summary1194044 -Node: Installation1195424 -Node: Gawk Distribution1196368 -Node: Getting1196852 -Node: Extracting1197815 -Node: Distribution contents1199453 -Node: Unix Installation1205933 -Node: Quick Installation1206615 -Node: Shell Startup Files1209029 -Node: Additional Configuration Options1210118 -Node: Configuration Philosophy1212433 -Node: Non-Unix Installation1214802 -Node: PC Installation1215262 -Node: PC Binary Installation1216100 -Node: PC Compiling1216535 -Node: PC Using1217652 -Node: Cygwin1221205 -Node: MSYS1222429 -Node: VMS Installation1223031 -Node: VMS Compilation1223822 -Ref: VMS Compilation-Footnote-11225051 -Node: VMS Dynamic Extensions1225109 -Node: VMS Installation Details1226794 -Node: VMS Running1229047 -Node: VMS GNV1233326 -Node: VMS Old Gawk1234061 -Node: Bugs1234532 -Node: Bug address1235195 -Node: Usenet1238177 -Node: Maintainers1239181 -Node: Other Versions1240366 -Node: Installation summary1247454 -Node: Notes1248663 -Node: Compatibility Mode1249457 -Node: Additions1250239 -Node: Accessing The Source1251164 -Node: Adding Code1252601 -Node: New Ports1258820 -Node: Derived Files1263195 -Ref: Derived Files-Footnote-11268855 -Ref: Derived Files-Footnote-21268890 -Ref: Derived Files-Footnote-31269488 -Node: Future Extensions1269602 -Node: Implementation Limitations1270260 -Node: Extension Design1271470 -Node: Old Extension Problems1272614 -Ref: Old Extension Problems-Footnote-11274132 -Node: Extension New Mechanism Goals1274189 -Ref: Extension New Mechanism Goals-Footnote-11277553 -Node: Extension Other Design Decisions1277742 -Node: Extension Future Growth1279855 -Node: Notes summary1280461 -Node: Basic Concepts1281619 -Node: Basic High Level1282300 -Ref: figure-general-flow1282582 -Ref: figure-process-flow1283267 -Ref: Basic High Level-Footnote-11286568 -Node: Basic Data Typing1286753 -Node: Glossary1290081 -Node: Copying1321966 -Node: GNU Free Documentation License1359509 -Node: Index1384629 +Ref: Options-Footnote-1137435 +Ref: Options-Footnote-2137666 +Node: Other Arguments137691 +Node: Naming Standard Input140998 +Node: Environment Variables142208 +Node: AWKPATH Variable142766 +Ref: AWKPATH Variable-Footnote-1146178 +Ref: AWKPATH Variable-Footnote-2146212 +Node: AWKLIBPATH Variable146583 +Ref: AWKLIBPATH Variable-Footnote-1148280 +Node: Other Environment Variables148655 +Node: Exit Status152476 +Node: Include Files153153 +Node: Loading Shared Libraries156843 +Node: Obsolete158271 +Node: Undocumented158963 +Node: Invoking Summary159260 +Node: Regexp162101 +Node: Regexp Usage163555 +Node: Escape Sequences165592 +Node: Regexp Operators171833 +Node: Regexp Operator Details172318 +Ref: Regexp Operator Details-Footnote-1178750 +Node: Interval Expressions178897 +Ref: Interval Expressions-Footnote-1180318 +Node: Bracket Expressions180416 +Ref: table-char-classes182892 +Node: Leftmost Longest186218 +Node: Computed Regexps187521 +Node: GNU Regexp Operators190948 +Node: Case-sensitivity194685 +Ref: Case-sensitivity-Footnote-1197551 +Ref: Case-sensitivity-Footnote-2197786 +Node: Regexp Summary197894 +Node: Reading Files199360 +Node: Records201629 +Node: awk split records202704 +Node: gawk split records207979 +Ref: gawk split records-Footnote-1212712 +Node: Fields212749 +Node: Nonconstant Fields215490 +Ref: Nonconstant Fields-Footnote-1217726 +Node: Changing Fields217930 +Node: Field Separators223961 +Node: Default Field Splitting226659 +Node: Regexp Field Splitting227777 +Node: Single Character Fields231130 +Node: Command Line Field Separator232190 +Node: Full Line Fields235408 +Ref: Full Line Fields-Footnote-1236930 +Ref: Full Line Fields-Footnote-2236976 +Node: Field Splitting Summary237077 +Node: Constant Size239151 +Node: Fixed width data239883 +Node: Skipping intervening243350 +Node: Allowing trailing data244148 +Node: Fields with fixed data245185 +Node: Splitting By Content246703 +Ref: Splitting By Content-Footnote-1250486 +Node: More CSV250649 +Node: Testing field creation251959 +Node: Multiple Line253584 +Node: Getline259861 +Node: Plain Getline262330 +Node: Getline/Variable264903 +Node: Getline/File266054 +Node: Getline/Variable/File267442 +Ref: Getline/Variable/File-Footnote-1269047 +Node: Getline/Pipe269135 +Node: Getline/Variable/Pipe271839 +Node: Getline/Coprocess272974 +Node: Getline/Variable/Coprocess274241 +Node: Getline Notes274983 +Node: Getline Summary277780 +Ref: table-getline-variants278204 +Node: Read Timeout278952 +Ref: Read Timeout-Footnote-1282858 +Node: Retrying Input282916 +Node: Command-line directories284115 +Node: Input Summary285021 +Node: Input Exercises288193 +Node: Printing288627 +Node: Print290461 +Node: Print Examples291918 +Node: Output Separators294698 +Node: OFMT296715 +Node: Printf298071 +Node: Basic Printf298856 +Node: Control Letters300430 +Node: Format Modifiers305594 +Node: Printf Examples311609 +Node: Redirection314095 +Node: Special FD320936 +Ref: Special FD-Footnote-1324104 +Node: Special Files324178 +Node: Other Inherited Files324795 +Node: Special Network325796 +Node: Special Caveats326656 +Node: Close Files And Pipes327605 +Ref: table-close-pipe-return-values334512 +Ref: Close Files And Pipes-Footnote-1335325 +Ref: Close Files And Pipes-Footnote-2335473 +Node: Nonfatal335625 +Node: Output Summary337963 +Node: Output Exercises339185 +Node: Expressions339864 +Node: Values341052 +Node: Constants341730 +Node: Scalar Constants342421 +Ref: Scalar Constants-Footnote-1344945 +Node: Nondecimal-numbers345195 +Node: Regexp Constants348196 +Node: Using Constant Regexps348722 +Node: Standard Regexp Constants349344 +Node: Strong Regexp Constants352532 +Node: Variables355544 +Node: Using Variables356201 +Node: Assignment Options358111 +Node: Conversion360582 +Node: Strings And Numbers361106 +Ref: Strings And Numbers-Footnote-1364169 +Node: Locale influences conversions364278 +Ref: table-locale-affects367036 +Node: All Operators367654 +Node: Arithmetic Ops368283 +Node: Concatenation370789 +Ref: Concatenation-Footnote-1373636 +Node: Assignment Ops373743 +Ref: table-assign-ops378734 +Node: Increment Ops380047 +Node: Truth Values and Conditions383507 +Node: Truth Values384581 +Node: Typing and Comparison385629 +Node: Variable Typing386449 +Ref: Variable Typing-Footnote-1392912 +Ref: Variable Typing-Footnote-2392984 +Node: Comparison Operators393061 +Ref: table-relational-ops393480 +Node: POSIX String Comparison396975 +Ref: POSIX String Comparison-Footnote-1398670 +Ref: POSIX String Comparison-Footnote-2398809 +Node: Boolean Ops398893 +Ref: Boolean Ops-Footnote-1403375 +Node: Conditional Exp403467 +Node: Function Calls405203 +Node: Precedence409080 +Node: Locales412739 +Node: Expressions Summary414371 +Node: Patterns and Actions416944 +Node: Pattern Overview418064 +Node: Regexp Patterns419741 +Node: Expression Patterns420283 +Node: Ranges424064 +Node: BEGIN/END427172 +Node: Using BEGIN/END427933 +Ref: Using BEGIN/END-Footnote-1430669 +Node: I/O And BEGIN/END430775 +Node: BEGINFILE/ENDFILE433089 +Node: Empty436002 +Node: Using Shell Variables436319 +Node: Action Overview438593 +Node: Statements440918 +Node: If Statement442766 +Node: While Statement444261 +Node: Do Statement446289 +Node: For Statement447437 +Node: Switch Statement450608 +Node: Break Statement453049 +Node: Continue Statement455141 +Node: Next Statement456968 +Node: Nextfile Statement459351 +Node: Exit Statement462003 +Node: Built-in Variables464406 +Node: User-modified465539 +Node: Auto-set473306 +Ref: Auto-set-Footnote-1490113 +Ref: Auto-set-Footnote-2490319 +Node: ARGC and ARGV490375 +Node: Pattern Action Summary494588 +Node: Arrays497018 +Node: Array Basics498347 +Node: Array Intro499191 +Ref: figure-array-elements501166 +Ref: Array Intro-Footnote-1503870 +Node: Reference to Elements503998 +Node: Assigning Elements506462 +Node: Array Example506953 +Node: Scanning an Array508712 +Node: Controlling Scanning511734 +Ref: Controlling Scanning-Footnote-1518190 +Node: Numeric Array Subscripts518506 +Node: Uninitialized Subscripts520690 +Node: Delete522309 +Ref: Delete-Footnote-1525061 +Node: Multidimensional525118 +Node: Multiscanning528213 +Node: Arrays of Arrays529804 +Node: Arrays Summary534572 +Node: Functions536665 +Node: Built-in537703 +Node: Calling Built-in538784 +Node: Numeric Functions540780 +Ref: Numeric Functions-Footnote-1544808 +Ref: Numeric Functions-Footnote-2545456 +Ref: Numeric Functions-Footnote-3545504 +Node: String Functions545776 +Ref: String Functions-Footnote-1569933 +Ref: String Functions-Footnote-2570061 +Ref: String Functions-Footnote-3570309 +Node: Gory Details570396 +Ref: table-sub-escapes572187 +Ref: table-sub-proposed573706 +Ref: table-posix-sub575069 +Ref: table-gensub-escapes576610 +Ref: Gory Details-Footnote-1577433 +Node: I/O Functions577587 +Ref: table-system-return-values584055 +Ref: I/O Functions-Footnote-1586135 +Ref: I/O Functions-Footnote-2586283 +Node: Time Functions586403 +Ref: Time Functions-Footnote-1597074 +Ref: Time Functions-Footnote-2597142 +Ref: Time Functions-Footnote-3597300 +Ref: Time Functions-Footnote-4597411 +Ref: Time Functions-Footnote-5597523 +Ref: Time Functions-Footnote-6597750 +Node: Bitwise Functions598016 +Ref: table-bitwise-ops598610 +Ref: Bitwise Functions-Footnote-1604673 +Ref: Bitwise Functions-Footnote-2604846 +Node: Type Functions605037 +Node: I18N Functions607900 +Node: User-defined609551 +Node: Definition Syntax610363 +Ref: Definition Syntax-Footnote-1616050 +Node: Function Example616121 +Ref: Function Example-Footnote-1619043 +Node: Function Calling619065 +Node: Calling A Function619653 +Node: Variable Scope620611 +Node: Pass By Value/Reference623605 +Node: Function Caveats626249 +Ref: Function Caveats-Footnote-1628296 +Node: Return Statement628416 +Node: Dynamic Typing631395 +Node: Indirect Calls632325 +Ref: Indirect Calls-Footnote-1642577 +Node: Functions Summary642705 +Node: Library Functions645410 +Ref: Library Functions-Footnote-1649017 +Ref: Library Functions-Footnote-2649160 +Node: Library Names649331 +Ref: Library Names-Footnote-1652998 +Ref: Library Names-Footnote-2653221 +Node: General Functions653307 +Node: Strtonum Function654410 +Node: Assert Function657432 +Node: Round Function660758 +Node: Cliff Random Function662298 +Node: Ordinal Functions663314 +Ref: Ordinal Functions-Footnote-1666377 +Ref: Ordinal Functions-Footnote-2666629 +Node: Join Function666839 +Ref: Join Function-Footnote-1668609 +Node: Getlocaltime Function668809 +Node: Readfile Function672551 +Node: Shell Quoting674528 +Node: Data File Management675929 +Node: Filetrans Function676561 +Node: Rewind Function680657 +Node: File Checking682566 +Ref: File Checking-Footnote-1683900 +Node: Empty Files684101 +Node: Ignoring Assigns686080 +Node: Getopt Function687630 +Ref: Getopt Function-Footnote-1702842 +Node: Passwd Functions703042 +Ref: Passwd Functions-Footnote-1711881 +Node: Group Functions711969 +Ref: Group Functions-Footnote-1719867 +Node: Walking Arrays720074 +Node: Library Functions Summary723082 +Node: Library Exercises724488 +Node: Sample Programs724953 +Node: Running Examples725723 +Node: Clones726451 +Node: Cut Program727675 +Node: Egrep Program737604 +Ref: Egrep Program-Footnote-1745116 +Node: Id Program745226 +Node: Split Program748906 +Ref: Split Program-Footnote-1752364 +Node: Tee Program752493 +Node: Uniq Program755283 +Node: Wc Program762904 +Ref: Wc Program-Footnote-1767159 +Node: Miscellaneous Programs767253 +Node: Dupword Program768466 +Node: Alarm Program770496 +Node: Translate Program775351 +Ref: Translate Program-Footnote-1779916 +Node: Labels Program780186 +Ref: Labels Program-Footnote-1783537 +Node: Word Sorting783621 +Node: History Sorting787693 +Node: Extract Program789918 +Node: Simple Sed797972 +Node: Igawk Program801046 +Ref: Igawk Program-Footnote-1815377 +Ref: Igawk Program-Footnote-2815579 +Ref: Igawk Program-Footnote-3815701 +Node: Anagram Program815816 +Node: Signature Program818878 +Node: Programs Summary820125 +Node: Programs Exercises821339 +Ref: Programs Exercises-Footnote-1825468 +Node: Advanced Features825559 +Node: Nondecimal Data827549 +Node: Array Sorting829140 +Node: Controlling Array Traversal829840 +Ref: Controlling Array Traversal-Footnote-1838208 +Node: Array Sorting Functions838326 +Ref: Array Sorting Functions-Footnote-1843417 +Node: Two-way I/O843613 +Ref: Two-way I/O-Footnote-1851334 +Ref: Two-way I/O-Footnote-2851521 +Node: TCP/IP Networking851603 +Node: Profiling854721 +Node: Advanced Features Summary863736 +Node: Internationalization865580 +Node: I18N and L10N867060 +Node: Explaining gettext867747 +Ref: Explaining gettext-Footnote-1873639 +Ref: Explaining gettext-Footnote-2873824 +Node: Programmer i18n873989 +Ref: Programmer i18n-Footnote-1878938 +Node: Translator i18n878987 +Node: String Extraction879781 +Ref: String Extraction-Footnote-1880913 +Node: Printf Ordering880999 +Ref: Printf Ordering-Footnote-1883785 +Node: I18N Portability883849 +Ref: I18N Portability-Footnote-1886305 +Node: I18N Example886368 +Ref: I18N Example-Footnote-1889643 +Ref: I18N Example-Footnote-2889716 +Node: Gawk I18N889825 +Node: I18N Summary890474 +Node: Debugger891815 +Node: Debugging892815 +Node: Debugging Concepts893256 +Node: Debugging Terms895065 +Node: Awk Debugging897640 +Ref: Awk Debugging-Footnote-1898585 +Node: Sample Debugging Session898717 +Node: Debugger Invocation899251 +Node: Finding The Bug900637 +Node: List of Debugger Commands907111 +Node: Breakpoint Control908444 +Node: Debugger Execution Control912138 +Node: Viewing And Changing Data915500 +Node: Execution Stack919041 +Node: Debugger Info920678 +Node: Miscellaneous Debugger Commands924749 +Node: Readline Support929811 +Node: Limitations930707 +Node: Debugging Summary933261 +Node: Namespaces934540 +Node: Global Namespace935651 +Node: Qualified Names937049 +Node: Default Namespace938048 +Node: Changing The Namespace938789 +Node: Naming Rules940403 +Node: Internal Name Management942251 +Node: Namespace Example943293 +Node: Namespace And Features945855 +Node: Namespace Summary947290 +Node: Arbitrary Precision Arithmetic948767 +Node: Computer Arithmetic950254 +Ref: table-numeric-ranges954020 +Ref: table-floating-point-ranges954513 +Ref: Computer Arithmetic-Footnote-1955171 +Node: Math Definitions955228 +Ref: table-ieee-formats958544 +Ref: Math Definitions-Footnote-1959147 +Node: MPFR features959252 +Node: FP Math Caution960970 +Ref: FP Math Caution-Footnote-1962042 +Node: Inexactness of computations962411 +Node: Inexact representation963371 +Node: Comparing FP Values964731 +Node: Errors accumulate965972 +Node: Getting Accuracy967405 +Node: Try To Round970115 +Node: Setting precision971014 +Ref: table-predefined-precision-strings971711 +Node: Setting the rounding mode973541 +Ref: table-gawk-rounding-modes973915 +Ref: Setting the rounding mode-Footnote-1977846 +Node: Arbitrary Precision Integers978025 +Ref: Arbitrary Precision Integers-Footnote-1981200 +Node: Checking for MPFR981349 +Node: POSIX Floating Point Problems982823 +Ref: POSIX Floating Point Problems-Footnote-1987108 +Node: Floating point summary987146 +Node: Dynamic Extensions989336 +Node: Extension Intro990889 +Node: Plugin License992155 +Node: Extension Mechanism Outline992952 +Ref: figure-load-extension993391 +Ref: figure-register-new-function994956 +Ref: figure-call-new-function996048 +Node: Extension API Description998110 +Node: Extension API Functions Introduction999752 +Ref: table-api-std-headers1001588 +Node: General Data Types1005453 +Ref: General Data Types-Footnote-11013814 +Node: Memory Allocation Functions1014113 +Ref: Memory Allocation Functions-Footnote-11018323 +Node: Constructor Functions1018422 +Node: Registration Functions1022008 +Node: Extension Functions1022693 +Node: Exit Callback Functions1028015 +Node: Extension Version String1029265 +Node: Input Parsers1029928 +Node: Output Wrappers1042649 +Node: Two-way processors1047161 +Node: Printing Messages1049426 +Ref: Printing Messages-Footnote-11050597 +Node: Updating ERRNO1050750 +Node: Requesting Values1051489 +Ref: table-value-types-returned1052226 +Node: Accessing Parameters1053162 +Node: Symbol Table Access1054397 +Node: Symbol table by name1054909 +Ref: Symbol table by name-Footnote-11057933 +Node: Symbol table by cookie1058061 +Ref: Symbol table by cookie-Footnote-11062246 +Node: Cached values1062310 +Ref: Cached values-Footnote-11065846 +Node: Array Manipulation1065999 +Ref: Array Manipulation-Footnote-11067090 +Node: Array Data Types1067127 +Ref: Array Data Types-Footnote-11069785 +Node: Array Functions1069877 +Node: Flattening Arrays1074375 +Node: Creating Arrays1081351 +Node: Redirection API1086118 +Node: Extension API Variables1088951 +Node: Extension Versioning1089662 +Ref: gawk-api-version1090091 +Node: Extension GMP/MPFR Versioning1091822 +Node: Extension API Informational Variables1093450 +Node: Extension API Boilerplate1094523 +Node: Changes from API V11098497 +Node: Finding Extensions1100069 +Node: Extension Example1100628 +Node: Internal File Description1101426 +Node: Internal File Ops1105506 +Ref: Internal File Ops-Footnote-11116856 +Node: Using Internal File Ops1116996 +Ref: Using Internal File Ops-Footnote-11119379 +Node: Extension Samples1119653 +Node: Extension Sample File Functions1121182 +Node: Extension Sample Fnmatch1128831 +Node: Extension Sample Fork1130318 +Node: Extension Sample Inplace1131536 +Node: Extension Sample Ord1135161 +Node: Extension Sample Readdir1135997 +Ref: table-readdir-file-types1136886 +Node: Extension Sample Revout1137953 +Node: Extension Sample Rev2way1138542 +Node: Extension Sample Read write array1139282 +Node: Extension Sample Readfile1141224 +Node: Extension Sample Time1142319 +Node: Extension Sample API Tests1144071 +Node: gawkextlib1144563 +Node: Extension summary1147481 +Node: Extension Exercises1151183 +Node: Language History1152425 +Node: V7/SVR3.11154081 +Node: SVR41156233 +Node: POSIX1157667 +Node: BTL1159048 +Node: POSIX/GNU1159777 +Node: Feature History1165555 +Node: Common Extensions1181874 +Node: Ranges and Locales1183157 +Ref: Ranges and Locales-Footnote-11187773 +Ref: Ranges and Locales-Footnote-21187800 +Ref: Ranges and Locales-Footnote-31188035 +Node: Contributors1188258 +Node: History summary1194255 +Node: Installation1195635 +Node: Gawk Distribution1196579 +Node: Getting1197063 +Node: Extracting1198026 +Node: Distribution contents1199664 +Node: Unix Installation1206144 +Node: Quick Installation1206826 +Node: Shell Startup Files1209240 +Node: Additional Configuration Options1210329 +Node: Configuration Philosophy1212644 +Node: Non-Unix Installation1215013 +Node: PC Installation1215473 +Node: PC Binary Installation1216311 +Node: PC Compiling1216746 +Node: PC Using1217863 +Node: Cygwin1221416 +Node: MSYS1222640 +Node: VMS Installation1223242 +Node: VMS Compilation1224033 +Ref: VMS Compilation-Footnote-11225262 +Node: VMS Dynamic Extensions1225320 +Node: VMS Installation Details1227005 +Node: VMS Running1229258 +Node: VMS GNV1233537 +Node: VMS Old Gawk1234272 +Node: Bugs1234743 +Node: Bug address1235406 +Node: Usenet1238388 +Node: Maintainers1239392 +Node: Other Versions1240577 +Node: Installation summary1247665 +Node: Notes1248874 +Node: Compatibility Mode1249668 +Node: Additions1250450 +Node: Accessing The Source1251375 +Node: Adding Code1252812 +Node: New Ports1259031 +Node: Derived Files1263406 +Ref: Derived Files-Footnote-11269066 +Ref: Derived Files-Footnote-21269101 +Ref: Derived Files-Footnote-31269699 +Node: Future Extensions1269813 +Node: Implementation Limitations1270471 +Node: Extension Design1271681 +Node: Old Extension Problems1272825 +Ref: Old Extension Problems-Footnote-11274343 +Node: Extension New Mechanism Goals1274400 +Ref: Extension New Mechanism Goals-Footnote-11277764 +Node: Extension Other Design Decisions1277953 +Node: Extension Future Growth1280066 +Node: Notes summary1280672 +Node: Basic Concepts1281830 +Node: Basic High Level1282511 +Ref: figure-general-flow1282793 +Ref: figure-process-flow1283478 +Ref: Basic High Level-Footnote-11286779 +Node: Basic Data Typing1286964 +Node: Glossary1290292 +Node: Copying1322177 +Node: GNU Free Documentation License1359720 +Node: Index1384840 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index d211a910..577a114c 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -4094,6 +4094,18 @@ or on the command line. Files named with @option{-i} are treated as if they had @samp{@@namespace "awk"} at their beginning. @xref{Changing The Namespace}, for more information. +@item @option{-I} +@itemx @option{--trace} +@cindex @option{-I} option +@cindex @option{--trace} option +@cindex trace, internal instructions +@cindex instructions, trace of internal +@cindex op-codes, trace of internal +Print the internal byte code names as they are executed when running +the program. The trace is printed to standard error. Each ``op code'' +is preceded by a @code{+} +sign in the output. + @item @option{-l} @var{ext} @itemx @option{--load} @var{ext} @cindex @option{-l} option diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 4a169b44..73b30c39 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -4004,6 +4004,18 @@ or on the command line. Files named with @option{-i} are treated as if they had @samp{@@namespace "awk"} at their beginning. @xref{Changing The Namespace}, for more information. +@item @option{-I} +@itemx @option{--trace} +@cindex @option{-I} option +@cindex @option{--trace} option +@cindex trace, internal instructions +@cindex instructions, trace of internal +@cindex op-codes, trace of internal +Print the internal byte code names as they are executed when running +the program. The trace is printed to standard error. Each ``op code'' +is preceded by a @code{+} +sign in the output. + @item @option{-l} @var{ext} @itemx @option{--load} @var{ext} @cindex @option{-l} option diff --git a/interpret.h b/interpret.h index 6137e8e0..4de778e7 100644 --- a/interpret.h +++ b/interpret.h @@ -100,7 +100,13 @@ top: } #endif - switch ((op = pc->opcode)) { + op = pc->opcode; + if (do_itrace) { + fprintf(stderr, "+ %s\n", opcode2str(op)); + fflush(stderr); + } + + switch (op) { case Op_rule: currule = pc->in_rule; /* for sole use in Op_K_next, Op_K_nextfile, Op_K_getline */ /* fall through */ @@ -205,6 +205,7 @@ static const struct option optab[] = { { "re-interval", no_argument, NULL, 'r' }, { "sandbox", no_argument, NULL, 'S' }, { "source", required_argument, NULL, 'e' }, + { "trace", no_argument, NULL, 'I' }, { "traditional", no_argument, NULL, 'c' }, { "use-lc-numeric", no_argument, & use_lc_numeric, 1 }, { "version", no_argument, & do_version, 'V' }, @@ -601,6 +602,7 @@ usage(int exitval, FILE *fp) fputs(_("\t-g\t\t\t--gen-pot\n"), fp); fputs(_("\t-h\t\t\t--help\n"), fp); fputs(_("\t-i includefile\t\t--include=includefile\n"), fp); + fputs(_("\t-I\t\t\t--trace\n"), fp); fputs(_("\t-l library\t\t--load=library\n"), fp); /* * TRANSLATORS: the "fatal", "invalid" and "no-ext" here are literal @@ -1519,7 +1521,7 @@ parse_args(int argc, char **argv) /* * The + on the front tells GNU getopt not to rearrange argv. */ - const char *optlist = "+F:f:v:W;bcCd::D::e:E:ghi:l:L::nNo::Op::MPrSstVYZ:"; + const char *optlist = "+F:f:v:W;bcCd::D::e:E:ghi:Il:L::nNo::Op::MPrSstVYZ:"; int old_optind; int c; char *scan; @@ -1614,6 +1616,10 @@ parse_args(int argc, char **argv) (void) add_srcfile(SRC_INC, optarg, srcfiles, NULL, NULL); break; + case 'I': + do_flags |= DO_ITRACE; + break; + case 'l': (void) add_srcfile(SRC_EXTLIB, optarg, srcfiles, NULL, NULL); break; diff --git a/pc/Makefile.tst b/pc/Makefile.tst index 7da52fdf..9f8f5790 100644 --- a/pc/Makefile.tst +++ b/pc/Makefile.tst @@ -167,7 +167,7 @@ BASIC_TESTS = \ octsub ofmt ofmta ofmtbig ofmtfidl ofmts ofmtstrnum ofs1 onlynl \ opasnidx opasnslf \ paramasfunc1 paramasfunc2 paramdup paramres paramtyp paramuninitglobal \ - parse1 parsefld parseme pcntplus posix2008sub prdupval prec printf0 \ + parse1 parsefld parseme pcntplus posix_compare posix2008sub prdupval prec printf0 \ printf1 printfchar prmarscl prmreuse prt1eval prtoeval \ rand randtest range1 range2 readbuf rebrackloc rebt8b1 rebuild redfilnm regeq \ regexpbrack regexpbrack2 regexprange regrange reindops reparse resplit \ @@ -267,7 +267,7 @@ NEED_MPFR = mpfrbigint mpfrbigint2 mpfrexprange mpfrfield mpfrieee mpfrmemok1 \ NEED_NONDEC = mpfrbigint2 nondec2 intarray forcenum # List of tests that need --posix -NEED_POSIX = escapebrace printf0 posix2008sub paramasfunc1 paramasfunc2 muldimposix +NEED_POSIX = escapebrace printf0 posix2008sub paramasfunc1 paramasfunc2 muldimposix posix_compare # List of tests that need --pretty-print NEED_PRETTY = nsprof1 nsprof2 \ @@ -305,8 +305,9 @@ NEED_LOCALE_C = \ NEED_LOCALE_EN = \ backbigs1 backsmalls1 backsmalls2 concat4 dfamb1 ignrcas2 lc_num1 \ - mbfw1 mbprintf1 mbprintf3 mbprintf4 mbstr1 mbstr2 printhuge reint2 \ - rri1 subamp subi18n wideidx wideidx2 widesub widesub2 widesub3 widesub4 + mbfw1 mbprintf1 mbprintf3 mbprintf4 mbstr1 mbstr2 posix_compare \ + printhuge reint2 rri1 subamp subi18n wideidx wideidx2 \ + widesub widesub2 widesub3 widesub4 # Unused at the moment, since nlstringtest has additional stufff it does @@ -2027,6 +2028,12 @@ pcntplus: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +posix_compare: + @echo $@ + @[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=ENU_USA.1252; export GAWKLOCALE; \ + AWKPATH="$(srcdir)" $(AWK) -f $@.awk --posix >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + posix2008sub: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --posix >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/ChangeLog b/test/ChangeLog index bf033534..a85ef93b 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -2,6 +2,10 @@ * Makefile.am (EXTRA_DIST): New test, posix_compare. * posix_compare.awk, posix_compare.ok: New files. + + Unrelated: + + * badargs.ok: Updated after code changes. 2020-06-29 Arnold D. Robbins <arnold@skeeve.com> diff --git a/test/badargs.ok b/test/badargs.ok index dfbd1c19..5ec0558c 100644 --- a/test/badargs.ok +++ b/test/badargs.ok @@ -16,6 +16,7 @@ Short options: GNU long options: (extensions) -g --gen-pot -h --help -i includefile --include=includefile + -I --trace -l library --load=library -L[fatal|invalid|no-ext] --lint[=fatal|invalid|no-ext] -M --bignum |