summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2015-04-05 11:35:53 +0300
committerArnold D. Robbins <arnold@skeeve.com>2015-04-05 11:35:53 +0300
commitf846fa69d610100d2fb451dca43e25e06f2fe98b (patch)
tree31fe393923d14bbf112f6babca0616f92fe258e6
parent3a19aae5768c877d02bd9149ec7658fdf8551632 (diff)
parentdbf9d5a4fc4b6d6340912395f020019576ed37f6 (diff)
downloadgawk-f846fa69d610100d2fb451dca43e25e06f2fe98b.tar.gz
Merge branch 'master' into nolibtool
-rw-r--r--ChangeLog485
-rw-r--r--INSTALL6
-rw-r--r--Makefile.in48
-rw-r--r--NEWS34
-rw-r--r--POSIX.STD17
-rw-r--r--TODO9
-rw-r--r--aclocal.m465
-rw-r--r--awk.h26
-rw-r--r--awkgram.c952
-rw-r--r--awkgram.y244
-rw-r--r--awklib/Makefile.in24
-rw-r--r--awklib/eg/lib/assert.awk2
-rw-r--r--awklib/eg/lib/bits2str.awk2
-rw-r--r--awklib/eg/lib/inplace.awk9
-rw-r--r--awklib/eg/lib/intdiv.awk (renamed from awklib/eg/lib/div.awk)7
-rw-r--r--awklib/eg/lib/quicksort.awk5
-rw-r--r--awklib/eg/prog/anagram.awk6
-rw-r--r--awklib/eg/prog/extract.awk2
-rw-r--r--awklib/eg/prog/pi.awk2
-rw-r--r--awklib/eg/prog/translate.awk2
-rw-r--r--builtin.c199
-rw-r--r--command.c6
-rwxr-xr-xcompile2
-rwxr-xr-xconfig.guess173
-rwxr-xr-xconfig.sub38
-rw-r--r--configh.in9
-rwxr-xr-xconfigure222
-rw-r--r--configure.ac25
-rwxr-xr-xdepcomp37
-rw-r--r--dfa.c2
-rw-r--r--dfa.h2
-rw-r--r--doc/ChangeLog204
-rw-r--r--doc/Makefile.in24
-rw-r--r--doc/awkcard.in6
-rw-r--r--doc/gawk.161
-rw-r--r--doc/gawk.info4818
-rw-r--r--doc/gawk.texi3465
-rw-r--r--doc/gawkinet.info6
-rw-r--r--doc/gawkinet.texi2
-rw-r--r--doc/gawktexi.in3435
-rw-r--r--doc/texinfo.tex271
-rw-r--r--eval.c12
-rw-r--r--extension/ChangeLog210
-rw-r--r--extension/INSTALL6
-rw-r--r--extension/Makefile.in96
-rw-r--r--extension/aclocal.m476
-rw-r--r--extension/build-aux/ChangeLog4
-rwxr-xr-xextension/build-aux/ar-lib2
-rwxr-xr-xextension/build-aux/compile2
-rwxr-xr-xextension/build-aux/config.guess173
-rwxr-xr-xextension/build-aux/config.sub38
-rwxr-xr-xextension/build-aux/depcomp37
-rwxr-xr-xextension/build-aux/install-sh31
-rwxr-xr-xextension/build-aux/missing6
-rw-r--r--extension/configh.in22
-rwxr-xr-xextension/configure9766
-rw-r--r--extension/configure.ac5
-rw-r--r--extension/filefuncs.c2
-rw-r--r--extension/inplace.3am18
-rw-r--r--extension/inplace.c4
-rw-r--r--extension/m4/ChangeLog14
-rw-r--r--extension/m4/gettext.m4383
-rw-r--r--extension/m4/iconv.m4214
-rw-r--r--extension/m4/intlmacosx.m451
-rw-r--r--extension/m4/po.m4449
-rw-r--r--extension/testext.c213
-rw-r--r--extras/Makefile.in24
-rw-r--r--gawkapi.c108
-rw-r--r--gawkapi.h42
-rw-r--r--getopt.c4
-rw-r--r--getopt.h2
-rw-r--r--getopt1.c2
-rw-r--r--getopt_int.h2
-rwxr-xr-xinstall-sh31
-rw-r--r--interpret.h29
-rw-r--r--io.c309
-rw-r--r--m4/ChangeLog5
-rw-r--r--m4/iconv.m461
-rw-r--r--m4/po.m42
-rw-r--r--main.c10
-rwxr-xr-xmissing6
-rw-r--r--missing_d/ChangeLog6
-rw-r--r--missing_d/getaddrinfo.c16
-rw-r--r--missing_d/getaddrinfo.h2
-rw-r--r--mpfr.c12
-rw-r--r--po/ChangeLog4
-rw-r--r--po/POTFILES.in6
-rw-r--r--po/ca.gmobin83005 -> 82049 bytes
-rw-r--r--po/ca.po1077
-rw-r--r--po/da.gmobin42160 -> 41373 bytes
-rw-r--r--po/da.po1079
-rw-r--r--po/de.gmobin45199 -> 83971 bytes
-rw-r--r--po/de.po1561
-rw-r--r--po/es.gmobin44600 -> 43722 bytes
-rw-r--r--po/es.po1084
-rw-r--r--po/fi.gmobin84555 -> 83703 bytes
-rw-r--r--po/fi.po1082
-rw-r--r--po/fr.gmobin85628 -> 84606 bytes
-rw-r--r--po/fr.po1077
-rw-r--r--po/gawk.pot1040
-rw-r--r--po/it.gmobin81018 -> 81863 bytes
-rw-r--r--po/it.po1175
-rw-r--r--po/ja.gmobin52559 -> 51602 bytes
-rw-r--r--po/ja.po1079
-rw-r--r--po/ms.gmobin1184 -> 1183 bytes
-rw-r--r--po/ms.po1038
-rw-r--r--po/nl.gmobin80863 -> 80070 bytes
-rw-r--r--po/nl.po1082
-rw-r--r--po/pl.gmobin71101 -> 70252 bytes
-rw-r--r--po/pl.po1082
-rw-r--r--po/sv.gmobin80917 -> 79966 bytes
-rw-r--r--po/sv.po1075
-rw-r--r--po/vi.gmobin93025 -> 91989 bytes
-rw-r--r--po/vi.po1077
-rw-r--r--profile.c209
-rw-r--r--re.c37
-rw-r--r--regcomp.c18
-rw-r--r--regex.c2
-rw-r--r--regex.h2
-rw-r--r--regex_internal.c2
-rw-r--r--regex_internal.h5
-rw-r--r--regexec.c10
-rw-r--r--symbol.c64
-rw-r--r--test/ChangeLog188
-rw-r--r--test/Makefile.am113
-rw-r--r--test/Makefile.in200
-rw-r--r--test/Maketests60
-rw-r--r--test/badbuild.awk6
-rw-r--r--test/badbuild.in1
-rw-r--r--test/badbuild.ok3
-rw-r--r--test/callparam.awk6
-rw-r--r--test/callparam.ok2
-rw-r--r--[-rwxr-xr-x]test/charasbytes.awk0
-rw-r--r--test/crlf.awk11
-rw-r--r--test/crlf.ok3
-rw-r--r--test/errno.awk10
-rw-r--r--test/errno.in3
-rw-r--r--test/errno.ok3
-rwxr-xr-xtest/exit.sh2
-rw-r--r--test/exitval3.awk2
-rw-r--r--test/exitval3.ok1
-rw-r--r--test/fpat4.awk105
-rw-r--r--test/fpat4.ok65
-rw-r--r--test/getfile.awk35
-rw-r--r--test/getfile.ok17
-rw-r--r--test/id.ok4
-rw-r--r--test/indirectbuiltin.awk371
-rw-r--r--test/indirectbuiltin.ok43
-rw-r--r--test/inplace1.ok2
-rw-r--r--test/inplace2.ok2
-rw-r--r--test/inplace3.ok4
-rw-r--r--test/mpfrmemok1.awk7
-rw-r--r--test/mpfrmemok1.ok7
-rw-r--r--test/mpfrsqrt.awk6
-rw-r--r--test/nonfatal1.awk6
-rw-r--r--test/nonfatal1.ok2
-rw-r--r--test/nonfatal2.awk5
-rw-r--r--test/nonfatal2.ok1
-rw-r--r--test/nonfatal3.awk6
-rw-r--r--test/nonfatal3.ok1
-rw-r--r--[-rwxr-xr-x]test/ofs1.awk0
-rw-r--r--test/paramasfunc1.awk9
-rw-r--r--test/paramasfunc1.ok3
-rw-r--r--test/paramasfunc2.awk10
-rw-r--r--test/paramasfunc2.ok3
-rw-r--r--test/printfbad4.awk5
-rw-r--r--test/printfbad4.ok2
-rw-r--r--test/profile0.awk1
-rw-r--r--test/profile0.in2
-rw-r--r--test/profile0.ok6
-rw-r--r--test/profile5.ok707
-rw-r--r--test/profile8.awk9
-rw-r--r--test/profile8.ok14
-rw-r--r--[-rwxr-xr-x]test/range1.awk0
-rw-r--r--test/regexpbrack.awk2
-rw-r--r--test/regexpbrack.in0
-rw-r--r--test/regexpbrack.ok0
-rw-r--r--[-rwxr-xr-x]test/sortglos.awk0
-rw-r--r--[-rwxr-xr-x]test/sortglos.in0
-rw-r--r--test/testext.ok14
-rw-r--r--test/timeout.awk26
-rw-r--r--test/timeout.ok12
-rwxr-xr-xylwrap59
183 files changed, 19921 insertions, 25694 deletions
diff --git a/ChangeLog b/ChangeLog
index ac30d2b4..d50e7c2d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,378 @@
+2015-04-05 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (install_builtins): If do_traditional is true, do not
+ install gawk extensions flagged with GAWKX. Similarly, if do_posix
+ is true, do not install functions flagged with NOT_POSIX.
+ This fixes a problem with spurious lint complaints about shadowing
+ a global variable that is not valid in traditional or posix mode.
+ Thanks to Andrew Schorr for finding the problem and supplying
+ initial code; I did it slightly differently.
+
+2015-04-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * NEWS: Rename div to intdiv.
+
+2015-04-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ Rename div() to intdiv().
+
+ * builtin.c (do_intdiv): Renamed from do_div.
+ * mfpr.c (do_mpfr_intdiv): Renamed from do_mpfr_div.
+ * awk.h: Update declarations.
+ * awkgram.y (tokentab, snode): Revise accordingly.
+
+2015-03-31 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (call_sub): Renamed from call_sub_func.
+ (call_match, call_split_func): Declare.
+ * builtin.c (call_sub): Renamed from call_sub_func.
+ (call_match, call_split_func): New functions.
+ * interpret.h (r_interpret): Call new functions as appropriate.
+ * node.c (r_unref): Revert change to handle Node_regex, not needed.
+
+2015-03-31 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (r_get_field): Declare.
+ * builtin.c (call_sub_func): Rearrange the stack to be what
+ the buitin function expects.
+ * eval.c (r_get_field): Make extern.
+
+2015-03-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * io.c (redirect): Change not_string from int to bool.
+ * gawkapi.c (api_get_file): Minor stylistic improvements.
+ * NEWS: Updated for retryable I/O and new API function.
+
+2015-03-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (make_regnode): Make extern.
+ * awk.h (make_regnode): Declare.
+ * builtin.c (call_sub_func): Start on reworking the stack to
+ be what do_sub() expects. Still needs work.
+ * interpret.h (r_interpret): Add a cast in comparison with do_sub().
+ * node.c (r_unref): Handle Node_regex nodes.
+
+2015-03-24 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * interpret.h (r_interpret): When Op_K_exit has an argument of
+ Nnull_string, do not update exit_val, since no value was supplied.
+
+2015-03-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h, gawkapi.c, io.c: Minor code reformatting.
+
+2015-03-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ Start on fixing indirect calls of builtins.
+
+ * awk.h (call_sub_func): Add declaration.
+ * awkgram.y (lookup_builtin): Handle length, sub functions.
+ (install_builtin): Handle length function.
+ * builtin.c (call_sub_func): New function.
+ * interpret.h (r_interpret): If calling do_sub, do it through
+ call_sub_func().
+
+2015-03-18 Arnold D. Robbins <arnold@skeeve.com>
+
+ * config.guess, config.sub: Updated, from libtool 2.4.6.
+
+2015-03-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile.c (pp_number): Allocate enough room to print the number
+ in all cases. Was a problem mixing -M with profiling with a really
+ big number. Thanks to Hermann Peifer for the bug report.
+
+2015-03-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * re.c (regexflags2str): Removed. It was redundant.
+
+ * io.c (devopen): Change the logic such that if nonfatal is true
+ for the socket, don't do retries. Also clean up the formatting
+ some. At strictopen, check if errno is ENOENT and if so, propagate
+ the error from getaddrinfo() up to the caller. Add explanatory
+ comments.
+
+2015-02-28 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * io.c (pty_vs_pipe): Remove check for NULL PROCINFO_node, since
+ this is now checked inside in_PROCINFO.
+
+2015-02-27 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * io.c (socketopen): New parameter hard_error; set it if
+ getaddrinfo() fails. Change fatals to warnings.
+ (devopen): Pass in address of boolean hard_error variable
+ and stop trying to open the file if hard_error is true.
+ Save and restore errno around call to socketopen() and
+ use restored errno if open() fails at strictopen.
+
+2015-02-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * symbol.c (check_param_names): Fix argument order in memset() call.
+ * configure.ac: Use AC_SEARCH_LIBS instead of AC_CHECK_LIB. This fixes
+ a long-standing problem where `-lm' was used twice in the final
+ compilation line.
+
+2015-02-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * POSIX.STD: Update copyright year.
+ * awkgram.y (yylex): Allow \r after \\ line continuation everywhere.
+ Thanks to Scott Rush <scott.rush@honeywell.com> for the report.
+
+2015-02-13 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.y (yylex): Be more careful about passing true to
+ nextc() when collecting a regexp. Some systems' iscntrl()
+ are not as forgiving as GLIBC's. E.g., Solaris.
+ Thanks to Dagobert Michelsen <dam@baltic-online.de> for
+ the bug report and access to systems to check the fix.
+
+2015-02-12 Arnold D. Robbins <arnold@skeeve.com>
+
+ * POSIX.STD: Update with info about function parameters.
+ * configure.ac: Remove test for / use of dbug library.
+
+2015-02-11 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkapi.h: Fix spelling error in comment.
+
+2015-02-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile.c (pprint): Restore printing of count for rules.
+ Bug report by Hermann Peifer.
+
+2015-02-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * io.c: Make it "NONFATAL" everywhere.
+
+2015-02-08 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * awk.h (RED_NON_FATAL): Removed.
+ (redirect): Add new failure_fatal parameter.
+ (is_non_fatal_redirect): Add declaration.
+ * builtin.c (efwrite): Rework check for non-fatal.
+ (do_printf): Adjust calls to redirect.
+ (do_print_rec): Ditto. Move check for redirection error up.
+ * io.c (redflags2str): Remove RED_NON_FATAL.
+ (redirect): Add new failure_fatal parameter. Simplify the code.
+ (is_non_fatal_redirect): New function.
+ (do_getline_redir): Adjust calls to redirect.
+
+2014-12-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (is_non_fatal_std): Declare new function.
+ * io.c (is_non_fatal_std): New function.
+ * builtin.c (efwrite): Call it.
+
+2015-02-07 Arnold D. Robbins <arnold@skeeve.com>
+
+ * regcomp.c, regex.c, regex.h, regex_internal.c, regex_internal.h,
+ regexec.c: Sync with GLIBC. Mostly copyright date updates.
+
+2015-02-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * eval.c (set_IGNORECASE): If IGNORECASE has a numeric value, try
+ using that before treating it as a string. This fixes a problem
+ where setting -v IGNORECASE=0 on the command line was not working
+ properly.
+
+2015-02-01 Arnold D. Robbins <arnold@skeeve.com>
+
+ Move POSIX requirement for disallowing paramater names with the
+ same name as a function into --posix.
+
+ * NEWS: Document it.
+ * awkgram.y (parse_program): Check do_posix before calling
+ check_param_names().
+ * symbol.c (check_param_names): Set up a fake node and call
+ in_array() for function parameter names instead of linear
+ searching the function list a second time. Thanks to Andrew
+ Schorr for the motivation.
+
+2015-01-30 Arnold D. Robbins <arnold@skeeve.com>
+
+ Don't allow function parameter names to be the same as function
+ names - required by POSIX. Bug first reported in comp.lang.awk.
+
+ In addition, don't allow use of a parameter as a function name
+ in a call (but it's ok in indirect calls).
+
+ * NEWS: Updated.
+ * awk.h (check_param_names): Add declaration.
+ * awkgram.y (at_seen): New variable. Communicates between
+ yylex() and the parser.
+ (FUNC_CALL production): Check at_seen and check that the identifier
+ is a function name.
+ (parse_program): Call check_param_names() and set errcount.
+ (yylex): Set at_seen after seeing an at-sign.
+ * symbol.c (check_param_names): New function.
+
+2015-01-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ Infrastructure updates.
+
+ Bison 3.0.4. Automake 1.15. Gettext 0.19.4.
+
+2015-01-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkapi.c (api_set_array_element): Remove useless call to
+ make_aname.
+ * symbol.c (load_symbols): Ditto.
+ Thanks to Andrew Schorr for pointing out the problem.
+
+2015-01-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awkgram.c: Update to bison 3.0.3.
+ * command.c: Ditto.
+ * NEWS: Note same.
+
+2015-01-16 Stephen Davies <sdavies@sdc.com.au>
+
+ * awkgram.y (rule): Set first_rule to false. Catches more cases
+ for gathering comments. Thanks to Hermann Peifer for the test case.
+
+2015-01-15 Arnold D. Robbins <arnold@skeeve.com>
+
+ * dfa.h, dfa.c: Sync with grep. Mainly copyright updates.
+ * getopt.c, getopt.h, getopt1.c getopt_int.h: Sync with GLIBC.
+ Mainly copyright updates, one minor code fix.
+
+2015-01-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ Remove deferred variables.
+
+ * awk.h (register_deferred_variable): Remove declaration.
+ * awkgram.y (is_deferred_variable, process_deferred,
+ symtab_used, extensions_used, deferred_variables,
+ process_deferred): Remove declarations, bodies, and uses.
+ * builtin.c (do_length): Update comment.
+ * main.c (init_vars): Just call load_procinfo() and `load_environ()'.
+
+2015-01-08 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ Revert changes to API deferred variable creation -- these variables
+ should be created when lookup is called, not when update is called.
+ * awk.h (variable_create): Remove function declaration.
+ * awkgram.y (variable_create): Remove function.
+ (variable): Restore variable_create functionality inline.
+ * gawkapi.c (api_sym_update): Revert to using install_symbol, since the
+ deferred variable check should be done when lookup is called, not here.
+
+2015-01-07 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.c (api_set_array_element): Remove stray call to
+ make_aname. I cannot see what purpose this served. Maybe I am
+ missing something.
+
+2015-01-07 Arnold D. Robbins <arnold@skeeve.com>
+
+ * configure.ac: Update debug flags if developing.
+ * awkgram.y (yylex): Regex parsing bug fix for bracket expressions.
+ Thanks to Mike Brennan for the report.
+ * builtin.c (format_tree): Catch non-use of count$ for dynamic
+ field width or precision.
+
+ Unrelated:
+
+ Load deferred variables if extensions are used; they might
+ want to access PROCINFO and/or ENVIRON. Thanks to Andrew Schorr
+ for pointing out the issue.
+
+ * awkgram.y (extensions_used): New variable. Set it on @load.
+ (do_add_scrfile): Set it on -l.
+ (process_deferred): Check it also.
+
+2015-01-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.c (api_sym_update): If copying a subarray, must update
+ the parent_array pointer. Also, call the astore hook if non-NULL.
+ (api_set_array_element): Call the astore hook if non-NULL.
+
+2015-01-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * awk.h (variable_create): Now takes a 3rd argument to tell caller
+ whether this is a deferred variable.
+ * awkgram.y (variable_create): Return indicator of whether this is
+ a deferred variable in a newly added 3rd arg.
+ (variable): Pass 3rd arg to variable_create.
+ * gawkapi.c (api_sym_update): If we triggered the creation of a deferred
+ variable, we must merge the extension's array elements into the deffered
+ array, not the other way around. The ENVIRON array has special funcs
+ to call setenv and unsetenv.
+
+2015-01-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * awk.h (variable_create): Declare new function.
+ * awkgram.y (variable_create): New function to create a variable
+ taking the deferred variable list into consideration.
+ (variable): Call new function variable_create if the variable is
+ not found.
+ * gawkapi.c (api_sym_update): If an array is being created, then
+ call new function variable_create instead of install_symbol. If this
+ is the first reference to a deferred variable, than the new array
+ may contain elements that must be merged into the array provided by
+ the extension.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * io.c (wait_any): If the `interesting' argument is non-zero, then we
+ must not return until that child process has exited, since the caller
+ gawk_pclose depends on our returning its exit status. So in that case,
+ do not pass WNOHANG to waitpid.
+
+2015-01-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.h: Fix another comment typo.
+
+2015-01-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.h: Fix typo in comment.
+
+2015-01-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.h (gawk_api): Modify api_get_file to remove the typelen
+ argument.
+ (get_file): Remove typelen argument from the macro.
+ * gawkapi.c (api_get_file): Remove typelen argument.
+
+2014-12-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile.c (pprint): Be sure to set ip2 in all paths
+ through the code. Thanks to GCC 4.9 for the warning.
+
+2014-12-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ Enable non-fatal output on per-file or global basis,
+ via PROCINFO.
+
+ * awk.h (RED_NON_FATAL): New redirection flag.
+ * builtin.c (efwrite): If RED_NON_FATAL set, just set ERRNO and return.
+ (do_printf): Check errflg and if set, set ERRNO and return.
+ (do_print): Ditto.
+ (do_print_rec): Ditto.
+ * io.c (redflags2str): Update table.
+ (redirect): Check for global PROCINFO["nonfatal"] or for
+ PROCINFO[file, "nonfatal"] and don't fail on open if set.
+ Add RED_NON_FATAL to flags.
+ (in_PROCINFO): Make smarter and more general.
+
+2014-12-12 Stephen Davies <sdavies@sdc.com.au>
+
+ Improve comment handling in pretty printing.
+
+ * awk.h (comment_type): New field in the node.
+ (EOL_COMMENT, FULL_COMMENT): New defines.
+ * awkgram.y (block_comment): New variable.
+ (check_comment): New function.
+ (grammar): Add code to handle comments as needed.
+ (get_comment): Now takes a flag indicating kind of comment.
+ (yylex): Collect comments appropriately.
+ (append_rule): Ditto.
+ * profile.c (pprint): Smarten up comment handling.
+ Have printing \n take comments into account.
+ (end_line): New function.
+ (pp_func): Better handling of function comments.
+
2014-12-10 Arnold D. Robbins <arnold@skeeve.com>
* dfa.c: Sync with GNU grep.
@@ -102,6 +477,36 @@
and a it's a Node_val set to Nnull_string, return AWK_UNDEFINED instead
of AWK_NUMBER 0.
+2014-11-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * awk.h (redirect_string): First argument should be const. Add a new
+ extfd argument to enable extensions to create files with pre-opened
+ file descriptors.
+ (after_beginfile): Declare function used in both eval.c and gawkapi.c.
+ * eval.c (after_beginfile): Remove extern declaration now in awk.h.
+ * gawkapi.c (api_get_file): Implement API changes to return
+ awk_input_buf_t and/or awk_output_buf_t info, as well as accept an
+ fd for inserting an opened file into the table.
+ * gawkapi.h (gawk_api): Modify the api_get_file declaration to
+ return awk_bool_t and add 3 new arguments -- a file descriptor
+ for inserting an already opened file, and awk_input_buf_t and
+ awk_output_buf_t to return info about both input and output.
+ (get_file): Add new arguments to the macro.
+ * io.c (redirect_string): First arg should be const, and add a new
+ extfd arg so extensions can pass in a file that has already been
+ opened by the extension. Use the passed-in fd when appropriate,
+ and pass it into two_way_open.
+ (redirect): Pass new fd -1 arg to redirect_string.
+ (two_way_open): Accept new extension fd parameter and open it
+ as a socket.
+
+2014-11-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * io.c (retryable): New function to indicate whether I/O can be
+ retried for this file instead of throwing a hard error.
+ (get_a_record) Check whether this file is configured for retryable
+ I/O before returning nonstandard -2.
+
2014-11-03 Norihiro Tanaka <noritnk@kcn.ne.jp>
* re.c (research): Use dfa superset to improve matching speed.
@@ -1270,6 +1675,45 @@
* io.c (get_a_record): Change `min' to `MIN' for consistency with
other files and general practice.
+2013-07-07 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * configure.ac (AC_CHECK_FUNCS): Check for sigprocmask.
+ * io.c (wait_any): If sigprocmask is available, block signals instead
+ of ignoring them temporarily.
+
+2013-07-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.h (gawk_api): Document that the api_get_file function will not
+ access the file type and length arguments if the file name is empty.
+
+2013-07-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * configure.ac (AC_CHECK_FUNCS): Add a check for waitpid.
+ * io.c (wait_any): Enhance comment to explain why we loop reaping all
+ exited children when the argument is zero. When available, use waitpid
+ with WNOHANG to avoid blocking. Remove my previous incorrect patch to
+ exit after reaping the first child. The function is intended to
+ wait for all children, since we are not careful about reaping children
+ as soon as they die.
+
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkapi.h (gawk_api): Remove unused api_lookup_file hook.
+ (lookup_file): Remove associated macro.
+ * gawkapi.c (api_lookup_file): Remove unused function.
+ (api_impl): Remove unused api_lookup_file hook.
+
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * awkgram.y (main_beginfile): Declare new global INSTRUCTION *.
+ (parse_program): Set main_beginfile to point to the BEGINFILE
+ instruction block.
+ * gawkapi.c (api_get_file): After nextfile starts a new file,
+ we need to run the BEGINFILE actions. We retrieve the
+ instruction pointer from main_beginfile and execute it until
+ we reach the Op_after_beginfile opcode. We then run after_beginfile
+ manually and restore the value of currule and source.
+
2013-07-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
* gawkapi.h (awk_element_t): Add comment indicating that the array
@@ -1280,6 +1724,45 @@
force_string redundant, since node_to_awk_value does that internally
when we request a string.
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * eval.c (update_ERRNO_string): Set PROCINFO["errno"] to 0.
+ * io.c (inrec): Since get_a_record may now return -2, be sure
+ to throw an error in that case as well.
+ (wait_any): Fix what appears to be a bug. The old logic repeatedly
+ called wait until it failed. When a process has multiple children,
+ this causes it to stall until all of them have exited. Instead,
+ we now exit the function after the first successful wait call.
+ (do_getline_redir, do_getline): Handle case where get_a_record
+ returns -2.
+ (errno_io_retry): New function to decide whether an I/O operation should
+ be retried.
+ (get_a_record): When read returns an error, call errno_io_retry to
+ decide whether the operation should be retried. If so, return -2
+ instead of setting the IOP_AT_EOF flag.
+
+2013-07-01 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * eval.c (update_ERRNO_int, unset_ERRNO): Update PROCINFO["errno"].
+
+2013-06-30 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * awk.h (redirect_string): Declare new function that provides API access
+ to the redirection mechanism.
+ * gawkapi.h (GAWK_API_MINOR_VERSION): Bump from 0 to 1 since 2 new
+ hooks were added to the api.
+ (gawk_api_t): Add 2 new functions api_lookup_file and api_get_file.
+ (lookup_file, get_file): New macros to wrap the new API functions.
+ * gawkapi.c (curfile): Declare this extern, since it is needed
+ by lookup_file and get_flie.
+ (api_lookup_file): Find an open file using curfile or getredirect().
+ (api_get_file): Find or open a file using curfile or redirect_string().
+ (api_impl): Add api_lookup_file and api_get_file.
+ * io.c (redirect_string): Renamed from redirect and changed arguments
+ to take a string instead of a 'NODE *'. This allows it to be called
+ through the API's new get_file hook.
+ (redirect): Now implemented by calling redirect_string backend function.
+
2013-07-04 Arnold D. Robbins <arnold@skeeve.com>
* builtin.c (format_tree): Fixes for %c with multibyte characters
@@ -1730,7 +2213,7 @@
2012-12-25 Arnold D. Robbins <arnold@skeeve.com>
Remove sym-constant from API after discussions with John
- Haque and Andy Schorr.
+ Haque and Andrew Schorr.
* gawkapi.h (api_sym_constant): Removed field in API struct.
(sym_constant): Remove macro.
diff --git a/INSTALL b/INSTALL
index 6e90e07d..20998407 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
Installation Instructions
*************************
-Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
Inc.
Copying and distribution of this file, with or without modification,
@@ -12,8 +12,8 @@ without warranty of any kind.
Basic Installation
==================
- Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package. The following
+ Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
diff --git a/Makefile.in b/Makefile.in
index e45c520f..7e39cbf7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -39,7 +39,17 @@
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -103,13 +113,6 @@ build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = gawk$(EXEEXT)
subdir = .
-DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
- $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/configure $(am__configure_deps) \
- $(srcdir)/configh.in mkinstalldirs ABOUT-NLS awkgram.c \
- command.c depcomp ylwrap $(include_HEADERS) COPYING TODO \
- compile config.guess config.rpath config.sub install-sh \
- missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/gettext.m4 \
@@ -124,6 +127,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(include_HEADERS) $(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -257,6 +262,10 @@ ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/configh.in ABOUT-NLS \
+ AUTHORS COPYING ChangeLog INSTALL NEWS README TODO awkgram.c \
+ command.c compile config.guess config.rpath config.sub depcomp \
+ install-sh missing mkinstalldirs ylwrap
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -570,7 +579,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -913,15 +921,15 @@ dist-xz: distdir
$(am__post_remove_distdir)
dist-tarZ: distdir
- @echo WARNING: "Support for shar distribution archives is" \
- "deprecated." >&2
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir)
dist-shar: distdir
- @echo WARNING: "Support for distribution archives compressed with" \
- "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__post_remove_distdir)
@@ -957,17 +965,17 @@ distcheck: dist
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
- mkdir $(distdir)/_build $(distdir)/_inst
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
- && $(am__cd) $(distdir)/_build \
- && ../configure \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
- --srcdir=.. --prefix="$$dc_install_base" \
+ --srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1157,6 +1165,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-includeHEADERS
+.PRECIOUS: Makefile
+
# First, add a link from gawk to gawk-X.Y.Z.
#
diff --git a/NEWS b/NEWS
index 84505cf7..d3c1b055 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,5 @@
- Copyright (C) 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015,
+ Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
@@ -22,7 +23,7 @@ Changes from 4.1.x to 4.2.0
4. The igawk script and igawk.1 man page are no longer installed by
`make install'. They have been obsolete since gawk 4.0.0.
-5. Gawk now has a `div()' function to perform integer division; this is
+5. Gawk now has a `intdiv()' function to perform integer division; this is
primarily useful for the -M option to avoid MPFR division when all
values involved are integers.
@@ -44,6 +45,12 @@ Changes from 4.1.x to 4.2.0
system, these files belong in /etc/profile.d, but the appropriate location
may be different on other platforms.
+11. Gawk now supports retryable I/O via PROCINFO[input-file, "RETRY"]; see
+ the manual.
+
+12. The API minor version has been increased to two; the get_file()
+ API provides access to open redirections. Also see the manual.
+
Changes from 4.1.1 to 4.1.2
---------------------------
@@ -53,6 +60,7 @@ Changes from 4.1.1 to 4.1.2
- Chapter 15 on MPFR reworked.
- Summary sections added to all chapters.
- Exercises added in several chapters.
+ - Heavily proof-read and copyedited.
2. The debugger's "restart" command now works again.
@@ -60,14 +68,14 @@ Changes from 4.1.1 to 4.1.2
4. A number of bugs have been fixed in the MPFR code.
-5. Indirect function calls now work for both built-in and
- extension functions.
+5. Indirect function calls now work for both built-in and extension functions.
6. Built-in functions are now included in FUNCTAB.
-7. In non-English locales, it was accidentally possible to use "letters"
- beside those of the English alphabet in identifiers. This has
- been fixed. (isalpha and isalnum are NOT our friends.)
+7. POSIX and historical practice require the exclusive use of the English
+ alphabet in identifiers. In non-English locales, it was accidentally
+ possible to use "letters" beside those of the English alphabet. This
+ has been fixed. (isalpha and isalnum are NOT our friends.)
If you feel that you must have this misfeature, use `configure --help'
to see what option to use when configuring gawk to reenable it.
@@ -81,7 +89,17 @@ Changes from 4.1.1 to 4.1.2
AWKPATH setting, be sure to put "." in it somewhere. The documentation
has been updated and clarified.
-10. Infrastructure upgrades: Automake 1.14.1, Gettext 0.19.3, Libtool 2.4.3.
+10. Infrastructure upgrades: Automake 1.15, Gettext 0.19.4, Libtool 2.4.6,
+ Bison 3.0.4.
+
+11. If a user-defined function has a parameter with the same name as another
+ user-defined function, it is no longer possible to call the second
+ function from inside the first.
+
+12. POSIX requires that the names of function parameters not be the
+ same as any of the special built-in variables and also not conflict
+ with the names of any functions. Gawk has checked for the former
+ since 3.1.7. With --posix, it now also checks for the latter.
XX. A number of bugs have been fixed. See the ChangeLog.
diff --git a/POSIX.STD b/POSIX.STD
index 1555d7be..a2368949 100644
--- a/POSIX.STD
+++ b/POSIX.STD
@@ -1,11 +1,11 @@
- Copyright (C) 1992, 1995, 1998, 2001, 2006, 2007, 2010, 2011
+ Copyright (C) 1992, 1995, 1998, 2001, 2006, 2007, 2010, 2011, 2015
Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
--------------------------------------------------------------------------
-Thu Mar 31 22:31:57 IST 2011
+Thu Feb 12 08:51:22 IST 2015
============================
This file documents several things related to the 2008 POSIX standard
that I noted after reviewing it.
@@ -30,6 +30,19 @@ that I noted after reviewing it.
sequence into account. By default gawk doesn't do this. Rather, gawk
will do this only if --posix is in effect.
+4. According to POSIX, the function parameters of one function may not have
+ the same name as another function, making this invalid:
+
+ function foo() { ... }
+ function bar(foo) { ...}
+
+ Or even:
+
+ function bar(foo) { ...}
+ function foo() { ... }
+
+ Gawk enforces this only with --posix.
+
The following things aren't described by POSIX but ought to be:
1. The value of $0 in an END rule
diff --git a/TODO b/TODO
index 235ded0e..65aa0f15 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-Sun Sep 28 22:19:10 IDT 2014
+Wed Dec 24 20:41:38 IST 2014
============================
There were too many files tracking different thoughts and ideas for
@@ -44,9 +44,6 @@ Minor New Features
Consider relaxing the strictness of --posix.
- Make it possible to put print/printf + redirections into
- an expression.
-
? Add an optional base to strtonum, allowing 2-36.
? Optional third argument for index indicating where to start the
@@ -63,8 +60,6 @@ Major New Features
Also needed:
- Indirect calls of built-ins
- Indirect calls of extension functions
Indirect through array elements, not just scalar variables
Some way to make regexp constants first class citizens:
@@ -127,8 +122,6 @@ Things To Think About That May Never Happen
Patch lexer for @include and @load to make quotes optional.
(Really needed?)
- ? Have strftime() pay attention to the value of ENVIRON["TZ"]
-
Add a lint check if the return value of a function is used but
the function did not supply a value.
diff --git a/aclocal.m4 b/aclocal.m4
index 8907206b..c150e9a8 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
+[am__api_version='1.15'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.15], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14.1])dnl
+[AM_AUTOMAKE_VERSION([1.15])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -103,15 +103,14 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -142,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -333,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -409,7 +408,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -499,8 +498,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
@@ -573,7 +572,11 @@ to "yes", and re-run configure.
END
AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
fi
-fi])
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
@@ -602,7 +605,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -613,7 +616,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -623,7 +626,7 @@ if test x"${install_sh}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -644,7 +647,7 @@ AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -694,7 +697,7 @@ rm -f confinc confmf
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -733,7 +736,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -762,7 +765,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -809,7 +812,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -828,7 +831,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -909,7 +912,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -969,7 +972,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -997,7 +1000,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1016,7 +1019,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/awk.h b/awk.h
index a932b54d..6f812e71 100644
--- a/awk.h
+++ b/awk.h
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc.
+ * Copyright (C) 1986, 1988, 1989, 1991-2015 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Programming Language.
@@ -530,6 +530,11 @@ typedef struct exp_node {
#define adepth sub.nodep.l.ll
#define alevel sub.nodep.x.xl
+/* Op_comment */
+#define comment_type sub.val.idx
+#define EOL_COMMENT 1
+#define FULL_COMMENT 2
+
/* --------------------------------lint warning types----------------------------*/
typedef enum lintvals {
LINT_illegal,
@@ -1324,7 +1329,6 @@ extern void shadow_funcs(void);
extern int check_special(const char *name);
extern SRCFILE *add_srcfile(enum srctype stype, char *src, SRCFILE *curr, bool *already_included, int *errcode);
extern void free_srcfile(SRCFILE *thisfile);
-extern void register_deferred_variable(const char *name, NODE *(*load_func)(void));
extern int files_are_same(char *path, SRCFILE *src);
extern void valinfo(NODE *n, Func_print print_func, FILE *fp);
extern void negate_num(NODE *n);
@@ -1334,6 +1338,7 @@ extern void install_builtins(void);
extern bool is_alpha(int c);
extern bool is_alnum(int c);
extern bool is_identchar(int c);
+extern NODE *make_regnode(int type, NODE *exp);
/* builtin.c */
extern double double_to_int(double d);
extern NODE *do_exp(int nargs);
@@ -1363,6 +1368,9 @@ extern NODE *do_rand(int nargs);
extern NODE *do_srand(int nargs);
extern NODE *do_match(int nargs);
extern NODE *do_sub(int nargs, unsigned int flags);
+extern NODE *call_sub(const char *name, int nargs);
+extern NODE *call_match(int nargs);
+extern NODE *call_split_func(const char *name, int nargs);
extern NODE *format_tree(const char *, size_t, NODE **, long);
extern NODE *do_lshift(int nargs);
extern NODE *do_rshift(int nargs);
@@ -1375,7 +1383,7 @@ extern AWKNUM nondec2awknum(char *str, size_t len);
extern NODE *do_dcgettext(int nargs);
extern NODE *do_dcngettext(int nargs);
extern NODE *do_bindtextdomain(int nargs);
-extern NODE *do_div(int nargs);
+extern NODE *do_intdiv(int nargs);
extern int strncasecmpmbs(const unsigned char *,
const unsigned char *, size_t);
/* eval.c */
@@ -1410,6 +1418,7 @@ extern NODE **r_get_lhs(NODE *n, bool reference);
extern STACK_ITEM *grow_stack(void);
extern void dump_fcall_stack(FILE *fp);
extern int register_exec_hook(Func_pre_exec preh, Func_post_exec posth);
+extern NODE **r_get_field(NODE *n, Func_ptr *assign, bool reference);
/* ext.c */
extern NODE *do_ext(int nargs);
void load_ext(const char *lib_name); /* temporary */
@@ -1478,7 +1487,10 @@ extern void register_two_way_processor(awk_two_way_processor_t *processor);
extern void set_FNR(void);
extern void set_NR(void);
-extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
+extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg, bool failure_fatal);
+extern struct redirect *redirect_string(const char *redir_exp_str,
+ size_t redir_exp_len, bool not_string_flag, int redirtype,
+ int *errflg, int extfd, bool failure_fatal);
extern NODE *do_close(int nargs);
extern int flush_io(void);
extern int close_io(bool *stdio_problem);
@@ -1490,6 +1502,8 @@ extern NODE *do_getline(int intovar, IOBUF *iop);
extern struct redirect *getredirect(const char *str, int len);
extern bool inrec(IOBUF *iop, int *errcode);
extern int nextfile(IOBUF **curfile, bool skipping);
+extern bool is_non_fatal_std(FILE *fp);
+extern bool is_non_fatal_redirect(const char *str);
/* main.c */
extern int arg_assign(char *arg, bool initing);
extern int is_std_var(const char *var);
@@ -1497,6 +1511,7 @@ extern int is_off_limits_var(const char *var);
extern char *estrdup(const char *str, size_t len);
extern void update_global_values();
extern long getenv_long(const char *name);
+extern void after_beginfile(IOBUF **curfile);
/* mpfr.c */
extern void set_PREC(void);
@@ -1511,9 +1526,9 @@ extern NODE *do_mpfr_and(int);
extern NODE *do_mpfr_atan2(int);
extern NODE *do_mpfr_compl(int);
extern NODE *do_mpfr_cos(int);
-extern NODE *do_mpfr_div(int);
extern NODE *do_mpfr_exp(int);
extern NODE *do_mpfr_int(int);
+extern NODE *do_mpfr_intdiv(int);
extern NODE *do_mpfr_log(int);
extern NODE *do_mpfr_lshift(int);
extern NODE *do_mpfr_or(int);
@@ -1612,6 +1627,7 @@ extern void free_context(AWK_CONTEXT *ctxt, bool keep_globals);
extern NODE **variable_list();
extern NODE **function_list(bool sort);
extern void print_vars(NODE **table, Func_print print_func, FILE *fp);
+extern bool check_param_names(void);
/* floatcomp.c */
#ifdef HAVE_UINTMAX_T
diff --git a/awkgram.c b/awkgram.c
index ddd41d5b..52a17cb0 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2. */
+/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.0.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -97,7 +97,6 @@ static int include_source(INSTRUCTION *file);
static int load_library(INSTRUCTION *file);
static void next_sourcefile(void);
static char *tokexpand(void);
-static bool is_deferred_variable(const char *name);
#define instruction(t) bcalloc(t, 1, 0)
@@ -114,13 +113,10 @@ static INSTRUCTION *mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION *op)
static INSTRUCTION *mk_boolean(INSTRUCTION *left, INSTRUCTION *right, INSTRUCTION *op);
static INSTRUCTION *mk_assignment(INSTRUCTION *lhs, INSTRUCTION *rhs, INSTRUCTION *op);
static INSTRUCTION *mk_getline(INSTRUCTION *op, INSTRUCTION *opt_var, INSTRUCTION *redir, int redirtype);
-static NODE *make_regnode(int type, NODE *exp);
static int count_expressions(INSTRUCTION **list, bool isarg);
static INSTRUCTION *optimize_assignment(INSTRUCTION *exp);
static void add_lint(INSTRUCTION *list, LINTTYPE linttype);
-static void process_deferred();
-
enum defref { FUNC_DEFINE, FUNC_USE, FUNC_EXT };
static void func_use(const char *name, enum defref how);
static void check_funcs(void);
@@ -128,11 +124,12 @@ static void check_funcs(void);
static ssize_t read_one_line(int fd, void *buffer, size_t count);
static int one_line_close(int fd);
static void split_comment(void);
+static void check_comment(void);
+static bool at_seen = false;
static bool want_source = false;
static bool want_regexp = false; /* lexical scanning kludge */
static char *in_function; /* parsing kludge */
-static bool symtab_used = false; /* program used SYMTAB */
static int rule = 0;
const char *const ruletab[] = {
@@ -186,12 +183,15 @@ static INSTRUCTION *ip_atexit = NULL;
static INSTRUCTION *ip_end;
static INSTRUCTION *ip_endfile;
static INSTRUCTION *ip_beginfile;
+INSTRUCTION *main_beginfile;
static INSTRUCTION *comment = NULL;
static INSTRUCTION *program_comment = NULL;
static INSTRUCTION *function_comment = NULL;
+static INSTRUCTION *block_comment = NULL;
static bool func_first = true;
+static bool first_rule = true;
static inline INSTRUCTION *list_create(INSTRUCTION *x);
static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
@@ -658,25 +658,25 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 205, 205, 207, 212, 213, 219, 231, 235, 246,
- 252, 257, 265, 273, 275, 280, 288, 290, 296, 304,
- 314, 340, 353, 366, 373, 383, 395, 397, 399, 405,
- 410, 411, 415, 450, 449, 483, 485, 490, 496, 524,
- 529, 530, 534, 536, 538, 545, 635, 677, 719, 832,
- 839, 846, 856, 865, 874, 883, 894, 910, 909, 933,
- 945, 945, 1043, 1043, 1076, 1106, 1112, 1113, 1119, 1120,
- 1127, 1132, 1144, 1158, 1160, 1168, 1173, 1175, 1183, 1185,
- 1194, 1195, 1203, 1208, 1208, 1219, 1223, 1231, 1232, 1235,
- 1237, 1242, 1243, 1252, 1253, 1258, 1263, 1269, 1271, 1273,
- 1280, 1281, 1287, 1288, 1293, 1295, 1300, 1302, 1310, 1315,
- 1324, 1331, 1333, 1335, 1351, 1361, 1368, 1370, 1375, 1377,
- 1379, 1387, 1389, 1394, 1396, 1401, 1403, 1405, 1455, 1457,
- 1459, 1461, 1463, 1465, 1467, 1469, 1483, 1488, 1493, 1518,
- 1524, 1526, 1528, 1530, 1532, 1534, 1539, 1543, 1575, 1577,
- 1583, 1589, 1602, 1603, 1604, 1609, 1614, 1618, 1622, 1637,
- 1650, 1655, 1691, 1709, 1710, 1716, 1717, 1722, 1724, 1731,
- 1748, 1765, 1767, 1774, 1779, 1787, 1797, 1809, 1818, 1822,
- 1826, 1830, 1834, 1838, 1841, 1843, 1847, 1851, 1855
+ 0, 205, 205, 207, 212, 213, 217, 229, 234, 245,
+ 251, 257, 266, 274, 276, 281, 289, 291, 297, 305,
+ 315, 345, 359, 373, 381, 392, 404, 406, 408, 414,
+ 422, 423, 427, 462, 461, 495, 497, 502, 508, 536,
+ 541, 542, 546, 548, 550, 557, 647, 689, 731, 844,
+ 851, 858, 868, 877, 886, 895, 906, 922, 921, 945,
+ 957, 957, 1055, 1055, 1088, 1118, 1124, 1125, 1131, 1132,
+ 1139, 1144, 1156, 1170, 1172, 1180, 1185, 1187, 1195, 1197,
+ 1206, 1207, 1215, 1220, 1220, 1231, 1235, 1243, 1244, 1247,
+ 1249, 1254, 1255, 1264, 1265, 1270, 1275, 1281, 1283, 1285,
+ 1292, 1293, 1299, 1300, 1305, 1307, 1312, 1314, 1322, 1327,
+ 1336, 1343, 1345, 1347, 1363, 1373, 1380, 1382, 1387, 1389,
+ 1391, 1399, 1401, 1406, 1408, 1413, 1415, 1417, 1467, 1469,
+ 1471, 1473, 1475, 1477, 1479, 1481, 1495, 1500, 1505, 1530,
+ 1536, 1538, 1540, 1542, 1544, 1546, 1551, 1555, 1587, 1589,
+ 1595, 1601, 1614, 1615, 1616, 1621, 1626, 1630, 1634, 1649,
+ 1662, 1667, 1704, 1733, 1734, 1740, 1741, 1746, 1748, 1755,
+ 1772, 1789, 1791, 1798, 1803, 1811, 1821, 1833, 1842, 1846,
+ 1850, 1854, 1858, 1862, 1865, 1867, 1871, 1875, 1879
};
#endif
@@ -1861,14 +1861,12 @@ yyreduce:
#line 214 "awkgram.y" /* yacc.c:1646 */
{
next_sourcefile();
- if (sourcefile == srcfiles)
- process_deferred();
}
-#line 1868 "awkgram.c" /* yacc.c:1646 */
+#line 1866 "awkgram.c" /* yacc.c:1646 */
break;
case 6:
-#line 220 "awkgram.y" /* yacc.c:1646 */
+#line 218 "awkgram.y" /* yacc.c:1646 */
{
rule = 0;
/*
@@ -1877,19 +1875,20 @@ yyreduce:
*/
/* yyerrok; */
}
-#line 1881 "awkgram.c" /* yacc.c:1646 */
+#line 1879 "awkgram.c" /* yacc.c:1646 */
break;
case 7:
-#line 232 "awkgram.y" /* yacc.c:1646 */
+#line 230 "awkgram.y" /* yacc.c:1646 */
{
(void) append_rule((yyvsp[-1]), (yyvsp[0]));
+ first_rule = false;
}
-#line 1889 "awkgram.c" /* yacc.c:1646 */
+#line 1888 "awkgram.c" /* yacc.c:1646 */
break;
case 8:
-#line 236 "awkgram.y" /* yacc.c:1646 */
+#line 235 "awkgram.y" /* yacc.c:1646 */
{
if (rule != Rule) {
msg(_("%s blocks must have an action part"), ruletab[rule]);
@@ -1900,23 +1899,24 @@ yyreduce:
} else /* pattern rule with non-empty pattern */
(void) append_rule((yyvsp[-1]), NULL);
}
-#line 1904 "awkgram.c" /* yacc.c:1646 */
+#line 1903 "awkgram.c" /* yacc.c:1646 */
break;
case 9:
-#line 247 "awkgram.y" /* yacc.c:1646 */
+#line 246 "awkgram.y" /* yacc.c:1646 */
{
in_function = NULL;
(void) mk_function((yyvsp[-1]), (yyvsp[0]));
yyerrok;
}
-#line 1914 "awkgram.c" /* yacc.c:1646 */
+#line 1913 "awkgram.c" /* yacc.c:1646 */
break;
case 10:
-#line 253 "awkgram.y" /* yacc.c:1646 */
+#line 252 "awkgram.y" /* yacc.c:1646 */
{
want_source = false;
+ at_seen = false;
yyerrok;
}
#line 1923 "awkgram.c" /* yacc.c:1646 */
@@ -1926,13 +1926,14 @@ yyreduce:
#line 258 "awkgram.y" /* yacc.c:1646 */
{
want_source = false;
+ at_seen = false;
yyerrok;
}
-#line 1932 "awkgram.c" /* yacc.c:1646 */
+#line 1933 "awkgram.c" /* yacc.c:1646 */
break;
case 12:
-#line 266 "awkgram.y" /* yacc.c:1646 */
+#line 267 "awkgram.y" /* yacc.c:1646 */
{
if (include_source((yyvsp[0])) < 0)
YYABORT;
@@ -1940,23 +1941,23 @@ yyreduce:
bcfree((yyvsp[0]));
(yyval) = NULL;
}
-#line 1944 "awkgram.c" /* yacc.c:1646 */
+#line 1945 "awkgram.c" /* yacc.c:1646 */
break;
case 13:
-#line 274 "awkgram.y" /* yacc.c:1646 */
+#line 275 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 1950 "awkgram.c" /* yacc.c:1646 */
+#line 1951 "awkgram.c" /* yacc.c:1646 */
break;
case 14:
-#line 276 "awkgram.y" /* yacc.c:1646 */
+#line 277 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 1956 "awkgram.c" /* yacc.c:1646 */
+#line 1957 "awkgram.c" /* yacc.c:1646 */
break;
case 15:
-#line 281 "awkgram.y" /* yacc.c:1646 */
+#line 282 "awkgram.y" /* yacc.c:1646 */
{
if (load_library((yyvsp[0])) < 0)
YYABORT;
@@ -1964,23 +1965,23 @@ yyreduce:
bcfree((yyvsp[0]));
(yyval) = NULL;
}
-#line 1968 "awkgram.c" /* yacc.c:1646 */
+#line 1969 "awkgram.c" /* yacc.c:1646 */
break;
case 16:
-#line 289 "awkgram.y" /* yacc.c:1646 */
+#line 290 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 1974 "awkgram.c" /* yacc.c:1646 */
+#line 1975 "awkgram.c" /* yacc.c:1646 */
break;
case 17:
-#line 291 "awkgram.y" /* yacc.c:1646 */
+#line 292 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 1980 "awkgram.c" /* yacc.c:1646 */
+#line 1981 "awkgram.c" /* yacc.c:1646 */
break;
case 18:
-#line 296 "awkgram.y" /* yacc.c:1646 */
+#line 297 "awkgram.y" /* yacc.c:1646 */
{
rule = Rule;
if (comment != NULL) {
@@ -1989,11 +1990,11 @@ yyreduce:
} else
(yyval) = NULL;
}
-#line 1993 "awkgram.c" /* yacc.c:1646 */
+#line 1994 "awkgram.c" /* yacc.c:1646 */
break;
case 19:
-#line 305 "awkgram.y" /* yacc.c:1646 */
+#line 306 "awkgram.y" /* yacc.c:1646 */
{
rule = Rule;
if (comment != NULL) {
@@ -2002,11 +2003,11 @@ yyreduce:
} else
(yyval) = (yyvsp[0]);
}
-#line 2006 "awkgram.c" /* yacc.c:1646 */
+#line 2007 "awkgram.c" /* yacc.c:1646 */
break;
case 20:
-#line 315 "awkgram.y" /* yacc.c:1646 */
+#line 316 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *tp;
@@ -2029,14 +2030,18 @@ yyreduce:
((yyvsp[-3])->nexti + 1)->condpair_left = (yyvsp[-3])->lasti;
((yyvsp[-3])->nexti + 1)->condpair_right = (yyvsp[0])->lasti;
}
- (yyval) = list_append(list_merge((yyvsp[-3]), (yyvsp[0])), tp);
+ if (comment != NULL) {
+ (yyval) = list_append(list_merge(list_prepend((yyvsp[-3]), comment), (yyvsp[0])), tp);
+ comment = NULL;
+ } else
+ (yyval) = list_append(list_merge((yyvsp[-3]), (yyvsp[0])), tp);
rule = Rule;
}
-#line 2036 "awkgram.c" /* yacc.c:1646 */
+#line 2041 "awkgram.c" /* yacc.c:1646 */
break;
case 21:
-#line 341 "awkgram.y" /* yacc.c:1646 */
+#line 346 "awkgram.y" /* yacc.c:1646 */
{
static int begin_seen = 0;
@@ -2047,13 +2052,14 @@ yyreduce:
(yyvsp[0])->in_rule = rule = BEGIN;
(yyvsp[0])->source_file = source;
+ check_comment();
(yyval) = (yyvsp[0]);
}
-#line 2053 "awkgram.c" /* yacc.c:1646 */
+#line 2059 "awkgram.c" /* yacc.c:1646 */
break;
case 22:
-#line 354 "awkgram.y" /* yacc.c:1646 */
+#line 360 "awkgram.y" /* yacc.c:1646 */
{
static int end_seen = 0;
@@ -2064,35 +2070,38 @@ yyreduce:
(yyvsp[0])->in_rule = rule = END;
(yyvsp[0])->source_file = source;
+ check_comment();
(yyval) = (yyvsp[0]);
}
-#line 2070 "awkgram.c" /* yacc.c:1646 */
+#line 2077 "awkgram.c" /* yacc.c:1646 */
break;
case 23:
-#line 367 "awkgram.y" /* yacc.c:1646 */
+#line 374 "awkgram.y" /* yacc.c:1646 */
{
func_first = false;
(yyvsp[0])->in_rule = rule = BEGINFILE;
(yyvsp[0])->source_file = source;
+ check_comment();
(yyval) = (yyvsp[0]);
}
-#line 2081 "awkgram.c" /* yacc.c:1646 */
+#line 2089 "awkgram.c" /* yacc.c:1646 */
break;
case 24:
-#line 374 "awkgram.y" /* yacc.c:1646 */
+#line 382 "awkgram.y" /* yacc.c:1646 */
{
func_first = false;
(yyvsp[0])->in_rule = rule = ENDFILE;
(yyvsp[0])->source_file = source;
+ check_comment();
(yyval) = (yyvsp[0]);
}
-#line 2092 "awkgram.c" /* yacc.c:1646 */
+#line 2101 "awkgram.c" /* yacc.c:1646 */
break;
case 25:
-#line 384 "awkgram.y" /* yacc.c:1646 */
+#line 393 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *ip;
if ((yyvsp[-3]) == NULL)
@@ -2101,39 +2110,42 @@ yyreduce:
ip = (yyvsp[-3]);
(yyval) = ip;
}
-#line 2105 "awkgram.c" /* yacc.c:1646 */
+#line 2114 "awkgram.c" /* yacc.c:1646 */
break;
case 26:
-#line 396 "awkgram.y" /* yacc.c:1646 */
+#line 405 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 2111 "awkgram.c" /* yacc.c:1646 */
+#line 2120 "awkgram.c" /* yacc.c:1646 */
break;
case 27:
-#line 398 "awkgram.y" /* yacc.c:1646 */
+#line 407 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 2117 "awkgram.c" /* yacc.c:1646 */
+#line 2126 "awkgram.c" /* yacc.c:1646 */
break;
case 28:
-#line 400 "awkgram.y" /* yacc.c:1646 */
+#line 409 "awkgram.y" /* yacc.c:1646 */
{
yyerror(_("`%s' is a built-in function, it cannot be redefined"),
tokstart);
YYABORT;
}
-#line 2127 "awkgram.c" /* yacc.c:1646 */
+#line 2136 "awkgram.c" /* yacc.c:1646 */
break;
case 29:
-#line 406 "awkgram.y" /* yacc.c:1646 */
- { (yyval) = (yyvsp[0]); }
-#line 2133 "awkgram.c" /* yacc.c:1646 */
+#line 415 "awkgram.y" /* yacc.c:1646 */
+ {
+ (yyval) = (yyvsp[0]);
+ at_seen = false;
+ }
+#line 2145 "awkgram.c" /* yacc.c:1646 */
break;
case 32:
-#line 416 "awkgram.y" /* yacc.c:1646 */
+#line 428 "awkgram.y" /* yacc.c:1646 */
{
/*
* treat any comments between BOF and the first function
@@ -2160,17 +2172,17 @@ yyreduce:
/* $4 already free'd in install_function */
(yyval) = (yyvsp[-5]);
}
-#line 2164 "awkgram.c" /* yacc.c:1646 */
+#line 2176 "awkgram.c" /* yacc.c:1646 */
break;
case 33:
-#line 450 "awkgram.y" /* yacc.c:1646 */
+#line 462 "awkgram.y" /* yacc.c:1646 */
{ want_regexp = true; }
-#line 2170 "awkgram.c" /* yacc.c:1646 */
+#line 2182 "awkgram.c" /* yacc.c:1646 */
break;
case 34:
-#line 452 "awkgram.y" /* yacc.c:1646 */
+#line 464 "awkgram.y" /* yacc.c:1646 */
{
NODE *n, *exp;
char *re;
@@ -2199,28 +2211,28 @@ yyreduce:
(yyval)->opcode = Op_match_rec;
(yyval)->memory = n;
}
-#line 2203 "awkgram.c" /* yacc.c:1646 */
+#line 2215 "awkgram.c" /* yacc.c:1646 */
break;
case 35:
-#line 484 "awkgram.y" /* yacc.c:1646 */
+#line 496 "awkgram.y" /* yacc.c:1646 */
{ bcfree((yyvsp[0])); }
-#line 2209 "awkgram.c" /* yacc.c:1646 */
+#line 2221 "awkgram.c" /* yacc.c:1646 */
break;
case 37:
-#line 490 "awkgram.y" /* yacc.c:1646 */
+#line 502 "awkgram.y" /* yacc.c:1646 */
{
if (comment != NULL) {
(yyval) = list_create(comment);
comment = NULL;
} else (yyval) = NULL;
}
-#line 2220 "awkgram.c" /* yacc.c:1646 */
+#line 2232 "awkgram.c" /* yacc.c:1646 */
break;
case 38:
-#line 497 "awkgram.y" /* yacc.c:1646 */
+#line 509 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[0]) == NULL) {
if (comment == NULL)
@@ -2248,40 +2260,40 @@ yyreduce:
}
yyerrok;
}
-#line 2252 "awkgram.c" /* yacc.c:1646 */
+#line 2264 "awkgram.c" /* yacc.c:1646 */
break;
case 39:
-#line 525 "awkgram.y" /* yacc.c:1646 */
+#line 537 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 2258 "awkgram.c" /* yacc.c:1646 */
+#line 2270 "awkgram.c" /* yacc.c:1646 */
break;
case 42:
-#line 535 "awkgram.y" /* yacc.c:1646 */
+#line 547 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 2264 "awkgram.c" /* yacc.c:1646 */
+#line 2276 "awkgram.c" /* yacc.c:1646 */
break;
case 43:
-#line 537 "awkgram.y" /* yacc.c:1646 */
+#line 549 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 2270 "awkgram.c" /* yacc.c:1646 */
+#line 2282 "awkgram.c" /* yacc.c:1646 */
break;
case 44:
-#line 539 "awkgram.y" /* yacc.c:1646 */
+#line 551 "awkgram.y" /* yacc.c:1646 */
{
if (do_pretty_print)
(yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count));
else
(yyval) = (yyvsp[0]);
}
-#line 2281 "awkgram.c" /* yacc.c:1646 */
+#line 2293 "awkgram.c" /* yacc.c:1646 */
break;
case 45:
-#line 546 "awkgram.y" /* yacc.c:1646 */
+#line 558 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
INSTRUCTION *ip, *nextc, *tbreak;
@@ -2371,11 +2383,11 @@ yyreduce:
break_allowed--;
fix_break_continue(ip, tbreak, NULL);
}
-#line 2375 "awkgram.c" /* yacc.c:1646 */
+#line 2387 "awkgram.c" /* yacc.c:1646 */
break;
case 46:
-#line 636 "awkgram.y" /* yacc.c:1646 */
+#line 648 "awkgram.y" /* yacc.c:1646 */
{
/*
* -----------------
@@ -2417,11 +2429,11 @@ yyreduce:
continue_allowed--;
fix_break_continue(ip, tbreak, tcont);
}
-#line 2421 "awkgram.c" /* yacc.c:1646 */
+#line 2433 "awkgram.c" /* yacc.c:1646 */
break;
case 47:
-#line 678 "awkgram.y" /* yacc.c:1646 */
+#line 690 "awkgram.y" /* yacc.c:1646 */
{
/*
* -----------------
@@ -2463,11 +2475,11 @@ yyreduce:
} /* else
$1 and $4 are NULLs */
}
-#line 2467 "awkgram.c" /* yacc.c:1646 */
+#line 2479 "awkgram.c" /* yacc.c:1646 */
break;
case 48:
-#line 720 "awkgram.y" /* yacc.c:1646 */
+#line 732 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *ip;
char *var_name = (yyvsp[-5])->lextok;
@@ -2580,44 +2592,44 @@ regular_loop:
break_allowed--;
continue_allowed--;
}
-#line 2584 "awkgram.c" /* yacc.c:1646 */
+#line 2596 "awkgram.c" /* yacc.c:1646 */
break;
case 49:
-#line 833 "awkgram.y" /* yacc.c:1646 */
+#line 845 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_for_loop((yyvsp[-11]), (yyvsp[-9]), (yyvsp[-6]), (yyvsp[-3]), (yyvsp[0]));
break_allowed--;
continue_allowed--;
}
-#line 2595 "awkgram.c" /* yacc.c:1646 */
+#line 2607 "awkgram.c" /* yacc.c:1646 */
break;
case 50:
-#line 840 "awkgram.y" /* yacc.c:1646 */
+#line 852 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_for_loop((yyvsp[-10]), (yyvsp[-8]), (INSTRUCTION *) NULL, (yyvsp[-3]), (yyvsp[0]));
break_allowed--;
continue_allowed--;
}
-#line 2606 "awkgram.c" /* yacc.c:1646 */
+#line 2618 "awkgram.c" /* yacc.c:1646 */
break;
case 51:
-#line 847 "awkgram.y" /* yacc.c:1646 */
+#line 859 "awkgram.y" /* yacc.c:1646 */
{
if (do_pretty_print)
(yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count));
else
(yyval) = (yyvsp[0]);
}
-#line 2617 "awkgram.c" /* yacc.c:1646 */
+#line 2629 "awkgram.c" /* yacc.c:1646 */
break;
case 52:
-#line 857 "awkgram.y" /* yacc.c:1646 */
+#line 869 "awkgram.y" /* yacc.c:1646 */
{
if (! break_allowed)
error_ln((yyvsp[-1])->source_line,
@@ -2626,11 +2638,11 @@ regular_loop:
(yyval) = list_create((yyvsp[-1]));
}
-#line 2630 "awkgram.c" /* yacc.c:1646 */
+#line 2642 "awkgram.c" /* yacc.c:1646 */
break;
case 53:
-#line 866 "awkgram.y" /* yacc.c:1646 */
+#line 878 "awkgram.y" /* yacc.c:1646 */
{
if (! continue_allowed)
error_ln((yyvsp[-1])->source_line,
@@ -2639,11 +2651,11 @@ regular_loop:
(yyval) = list_create((yyvsp[-1]));
}
-#line 2643 "awkgram.c" /* yacc.c:1646 */
+#line 2655 "awkgram.c" /* yacc.c:1646 */
break;
case 54:
-#line 875 "awkgram.y" /* yacc.c:1646 */
+#line 887 "awkgram.y" /* yacc.c:1646 */
{
/* if inside function (rule = 0), resolve context at run-time */
if (rule && rule != Rule)
@@ -2652,11 +2664,11 @@ regular_loop:
(yyvsp[-1])->target_jmp = ip_rec;
(yyval) = list_create((yyvsp[-1]));
}
-#line 2656 "awkgram.c" /* yacc.c:1646 */
+#line 2668 "awkgram.c" /* yacc.c:1646 */
break;
case 55:
-#line 884 "awkgram.y" /* yacc.c:1646 */
+#line 896 "awkgram.y" /* yacc.c:1646 */
{
/* if inside function (rule = 0), resolve context at run-time */
if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2667,11 +2679,11 @@ regular_loop:
(yyvsp[-1])->target_endfile = ip_endfile;
(yyval) = list_create((yyvsp[-1]));
}
-#line 2671 "awkgram.c" /* yacc.c:1646 */
+#line 2683 "awkgram.c" /* yacc.c:1646 */
break;
case 56:
-#line 895 "awkgram.y" /* yacc.c:1646 */
+#line 907 "awkgram.y" /* yacc.c:1646 */
{
/* Initialize the two possible jump targets, the actual target
* is resolved at run-time.
@@ -2686,20 +2698,20 @@ regular_loop:
} else
(yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
}
-#line 2690 "awkgram.c" /* yacc.c:1646 */
+#line 2702 "awkgram.c" /* yacc.c:1646 */
break;
case 57:
-#line 910 "awkgram.y" /* yacc.c:1646 */
+#line 922 "awkgram.y" /* yacc.c:1646 */
{
if (! in_function)
yyerror(_("`return' used outside function context"));
}
-#line 2699 "awkgram.c" /* yacc.c:1646 */
+#line 2711 "awkgram.c" /* yacc.c:1646 */
break;
case 58:
-#line 913 "awkgram.y" /* yacc.c:1646 */
+#line 925 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[-1]) == NULL) {
(yyval) = list_create((yyvsp[-3]));
@@ -2720,17 +2732,17 @@ regular_loop:
(yyval) = list_append((yyvsp[-1]), (yyvsp[-3]));
}
}
-#line 2724 "awkgram.c" /* yacc.c:1646 */
+#line 2736 "awkgram.c" /* yacc.c:1646 */
break;
case 60:
-#line 945 "awkgram.y" /* yacc.c:1646 */
+#line 957 "awkgram.y" /* yacc.c:1646 */
{ in_print = true; in_parens = 0; }
-#line 2730 "awkgram.c" /* yacc.c:1646 */
+#line 2742 "awkgram.c" /* yacc.c:1646 */
break;
case 61:
-#line 946 "awkgram.y" /* yacc.c:1646 */
+#line 958 "awkgram.y" /* yacc.c:1646 */
{
/*
* Optimization: plain `print' has no expression list, so $3 is null.
@@ -2827,17 +2839,17 @@ regular_print:
}
}
}
-#line 2831 "awkgram.c" /* yacc.c:1646 */
+#line 2843 "awkgram.c" /* yacc.c:1646 */
break;
case 62:
-#line 1043 "awkgram.y" /* yacc.c:1646 */
+#line 1055 "awkgram.y" /* yacc.c:1646 */
{ sub_counter = 0; }
-#line 2837 "awkgram.c" /* yacc.c:1646 */
+#line 2849 "awkgram.c" /* yacc.c:1646 */
break;
case 63:
-#line 1044 "awkgram.y" /* yacc.c:1646 */
+#line 1056 "awkgram.y" /* yacc.c:1646 */
{
char *arr = (yyvsp[-2])->lextok;
@@ -2870,11 +2882,11 @@ regular_print:
(yyval) = list_append(list_append((yyvsp[0]), (yyvsp[-2])), (yyvsp[-3]));
}
}
-#line 2874 "awkgram.c" /* yacc.c:1646 */
+#line 2886 "awkgram.c" /* yacc.c:1646 */
break;
case 64:
-#line 1081 "awkgram.y" /* yacc.c:1646 */
+#line 1093 "awkgram.y" /* yacc.c:1646 */
{
static bool warned = false;
char *arr = (yyvsp[-1])->lextok;
@@ -2900,52 +2912,52 @@ regular_print:
fatal(_("`delete' is not allowed with FUNCTAB"));
}
}
-#line 2904 "awkgram.c" /* yacc.c:1646 */
+#line 2916 "awkgram.c" /* yacc.c:1646 */
break;
case 65:
-#line 1107 "awkgram.y" /* yacc.c:1646 */
+#line 1119 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = optimize_assignment((yyvsp[0])); }
-#line 2910 "awkgram.c" /* yacc.c:1646 */
+#line 2922 "awkgram.c" /* yacc.c:1646 */
break;
case 66:
-#line 1112 "awkgram.y" /* yacc.c:1646 */
+#line 1124 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 2916 "awkgram.c" /* yacc.c:1646 */
+#line 2928 "awkgram.c" /* yacc.c:1646 */
break;
case 67:
-#line 1114 "awkgram.y" /* yacc.c:1646 */
+#line 1126 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 2922 "awkgram.c" /* yacc.c:1646 */
+#line 2934 "awkgram.c" /* yacc.c:1646 */
break;
case 68:
-#line 1119 "awkgram.y" /* yacc.c:1646 */
+#line 1131 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 2928 "awkgram.c" /* yacc.c:1646 */
+#line 2940 "awkgram.c" /* yacc.c:1646 */
break;
case 69:
-#line 1121 "awkgram.y" /* yacc.c:1646 */
+#line 1133 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[-1]) == NULL)
(yyval) = list_create((yyvsp[0]));
else
(yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
}
-#line 2939 "awkgram.c" /* yacc.c:1646 */
+#line 2951 "awkgram.c" /* yacc.c:1646 */
break;
case 70:
-#line 1128 "awkgram.y" /* yacc.c:1646 */
+#line 1140 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 2945 "awkgram.c" /* yacc.c:1646 */
+#line 2957 "awkgram.c" /* yacc.c:1646 */
break;
case 71:
-#line 1133 "awkgram.y" /* yacc.c:1646 */
+#line 1145 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *casestmt = (yyvsp[0]);
if ((yyvsp[0]) == NULL)
@@ -2957,11 +2969,11 @@ regular_print:
bcfree((yyvsp[-2]));
(yyval) = (yyvsp[-4]);
}
-#line 2961 "awkgram.c" /* yacc.c:1646 */
+#line 2973 "awkgram.c" /* yacc.c:1646 */
break;
case 72:
-#line 1145 "awkgram.y" /* yacc.c:1646 */
+#line 1157 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *casestmt = (yyvsp[0]);
if ((yyvsp[0]) == NULL)
@@ -2972,17 +2984,17 @@ regular_print:
(yyvsp[-3])->case_stmt = casestmt;
(yyval) = (yyvsp[-3]);
}
-#line 2976 "awkgram.c" /* yacc.c:1646 */
+#line 2988 "awkgram.c" /* yacc.c:1646 */
break;
case 73:
-#line 1159 "awkgram.y" /* yacc.c:1646 */
+#line 1171 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 2982 "awkgram.c" /* yacc.c:1646 */
+#line 2994 "awkgram.c" /* yacc.c:1646 */
break;
case 74:
-#line 1161 "awkgram.y" /* yacc.c:1646 */
+#line 1173 "awkgram.y" /* yacc.c:1646 */
{
NODE *n = (yyvsp[0])->memory;
(void) force_number(n);
@@ -2990,71 +3002,71 @@ regular_print:
bcfree((yyvsp[-1]));
(yyval) = (yyvsp[0]);
}
-#line 2994 "awkgram.c" /* yacc.c:1646 */
+#line 3006 "awkgram.c" /* yacc.c:1646 */
break;
case 75:
-#line 1169 "awkgram.y" /* yacc.c:1646 */
+#line 1181 "awkgram.y" /* yacc.c:1646 */
{
bcfree((yyvsp[-1]));
(yyval) = (yyvsp[0]);
}
-#line 3003 "awkgram.c" /* yacc.c:1646 */
+#line 3015 "awkgram.c" /* yacc.c:1646 */
break;
case 76:
-#line 1174 "awkgram.y" /* yacc.c:1646 */
+#line 1186 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3009 "awkgram.c" /* yacc.c:1646 */
+#line 3021 "awkgram.c" /* yacc.c:1646 */
break;
case 77:
-#line 1176 "awkgram.y" /* yacc.c:1646 */
+#line 1188 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_push_re;
(yyval) = (yyvsp[0]);
}
-#line 3018 "awkgram.c" /* yacc.c:1646 */
+#line 3030 "awkgram.c" /* yacc.c:1646 */
break;
case 78:
-#line 1184 "awkgram.y" /* yacc.c:1646 */
+#line 1196 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3024 "awkgram.c" /* yacc.c:1646 */
+#line 3036 "awkgram.c" /* yacc.c:1646 */
break;
case 79:
-#line 1186 "awkgram.y" /* yacc.c:1646 */
+#line 1198 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3030 "awkgram.c" /* yacc.c:1646 */
+#line 3042 "awkgram.c" /* yacc.c:1646 */
break;
case 81:
-#line 1196 "awkgram.y" /* yacc.c:1646 */
+#line 1208 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = (yyvsp[-1]);
}
-#line 3038 "awkgram.c" /* yacc.c:1646 */
+#line 3050 "awkgram.c" /* yacc.c:1646 */
break;
case 82:
-#line 1203 "awkgram.y" /* yacc.c:1646 */
+#line 1215 "awkgram.y" /* yacc.c:1646 */
{
in_print = false;
in_parens = 0;
(yyval) = NULL;
}
-#line 3048 "awkgram.c" /* yacc.c:1646 */
+#line 3060 "awkgram.c" /* yacc.c:1646 */
break;
case 83:
-#line 1208 "awkgram.y" /* yacc.c:1646 */
+#line 1220 "awkgram.y" /* yacc.c:1646 */
{ in_print = false; in_parens = 0; }
-#line 3054 "awkgram.c" /* yacc.c:1646 */
+#line 3066 "awkgram.c" /* yacc.c:1646 */
break;
case 84:
-#line 1209 "awkgram.y" /* yacc.c:1646 */
+#line 1221 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[-2])->redir_type == redirect_twoway
&& (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3062,136 +3074,136 @@ regular_print:
yyerror(_("multistage two-way pipelines don't work"));
(yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
}
-#line 3066 "awkgram.c" /* yacc.c:1646 */
+#line 3078 "awkgram.c" /* yacc.c:1646 */
break;
case 85:
-#line 1220 "awkgram.y" /* yacc.c:1646 */
+#line 1232 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), NULL, NULL);
}
-#line 3074 "awkgram.c" /* yacc.c:1646 */
+#line 3086 "awkgram.c" /* yacc.c:1646 */
break;
case 86:
-#line 1225 "awkgram.y" /* yacc.c:1646 */
+#line 1237 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[0]));
}
-#line 3082 "awkgram.c" /* yacc.c:1646 */
+#line 3094 "awkgram.c" /* yacc.c:1646 */
break;
case 91:
-#line 1242 "awkgram.y" /* yacc.c:1646 */
+#line 1254 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3088 "awkgram.c" /* yacc.c:1646 */
+#line 3100 "awkgram.c" /* yacc.c:1646 */
break;
case 92:
-#line 1244 "awkgram.y" /* yacc.c:1646 */
+#line 1256 "awkgram.y" /* yacc.c:1646 */
{
bcfree((yyvsp[-1]));
(yyval) = (yyvsp[0]);
}
-#line 3097 "awkgram.c" /* yacc.c:1646 */
+#line 3109 "awkgram.c" /* yacc.c:1646 */
break;
case 93:
-#line 1252 "awkgram.y" /* yacc.c:1646 */
+#line 1264 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3103 "awkgram.c" /* yacc.c:1646 */
+#line 3115 "awkgram.c" /* yacc.c:1646 */
break;
case 94:
-#line 1254 "awkgram.y" /* yacc.c:1646 */
+#line 1266 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3109 "awkgram.c" /* yacc.c:1646 */
+#line 3121 "awkgram.c" /* yacc.c:1646 */
break;
case 95:
-#line 1259 "awkgram.y" /* yacc.c:1646 */
+#line 1271 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->param_count = 0;
(yyval) = list_create((yyvsp[0]));
}
-#line 3118 "awkgram.c" /* yacc.c:1646 */
+#line 3130 "awkgram.c" /* yacc.c:1646 */
break;
case 96:
-#line 1264 "awkgram.y" /* yacc.c:1646 */
+#line 1276 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->param_count = (yyvsp[-2])->lasti->param_count + 1;
(yyval) = list_append((yyvsp[-2]), (yyvsp[0]));
yyerrok;
}
-#line 3128 "awkgram.c" /* yacc.c:1646 */
+#line 3140 "awkgram.c" /* yacc.c:1646 */
break;
case 97:
-#line 1270 "awkgram.y" /* yacc.c:1646 */
+#line 1282 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3134 "awkgram.c" /* yacc.c:1646 */
+#line 3146 "awkgram.c" /* yacc.c:1646 */
break;
case 98:
-#line 1272 "awkgram.y" /* yacc.c:1646 */
+#line 1284 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 3140 "awkgram.c" /* yacc.c:1646 */
+#line 3152 "awkgram.c" /* yacc.c:1646 */
break;
case 99:
-#line 1274 "awkgram.y" /* yacc.c:1646 */
+#line 1286 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-2]); }
-#line 3146 "awkgram.c" /* yacc.c:1646 */
+#line 3158 "awkgram.c" /* yacc.c:1646 */
break;
case 100:
-#line 1280 "awkgram.y" /* yacc.c:1646 */
+#line 1292 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3152 "awkgram.c" /* yacc.c:1646 */
+#line 3164 "awkgram.c" /* yacc.c:1646 */
break;
case 101:
-#line 1282 "awkgram.y" /* yacc.c:1646 */
+#line 1294 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3158 "awkgram.c" /* yacc.c:1646 */
+#line 3170 "awkgram.c" /* yacc.c:1646 */
break;
case 102:
-#line 1287 "awkgram.y" /* yacc.c:1646 */
+#line 1299 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3164 "awkgram.c" /* yacc.c:1646 */
+#line 3176 "awkgram.c" /* yacc.c:1646 */
break;
case 103:
-#line 1289 "awkgram.y" /* yacc.c:1646 */
+#line 1301 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3170 "awkgram.c" /* yacc.c:1646 */
+#line 3182 "awkgram.c" /* yacc.c:1646 */
break;
case 104:
-#line 1294 "awkgram.y" /* yacc.c:1646 */
+#line 1306 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3176 "awkgram.c" /* yacc.c:1646 */
+#line 3188 "awkgram.c" /* yacc.c:1646 */
break;
case 105:
-#line 1296 "awkgram.y" /* yacc.c:1646 */
+#line 1308 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
yyerrok;
}
-#line 3185 "awkgram.c" /* yacc.c:1646 */
+#line 3197 "awkgram.c" /* yacc.c:1646 */
break;
case 106:
-#line 1301 "awkgram.y" /* yacc.c:1646 */
+#line 1313 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3191 "awkgram.c" /* yacc.c:1646 */
+#line 3203 "awkgram.c" /* yacc.c:1646 */
break;
case 107:
-#line 1303 "awkgram.y" /* yacc.c:1646 */
+#line 1315 "awkgram.y" /* yacc.c:1646 */
{
/*
* Returning the expression list instead of NULL lets
@@ -3199,52 +3211,52 @@ regular_print:
*/
(yyval) = (yyvsp[-1]);
}
-#line 3203 "awkgram.c" /* yacc.c:1646 */
+#line 3215 "awkgram.c" /* yacc.c:1646 */
break;
case 108:
-#line 1311 "awkgram.y" /* yacc.c:1646 */
+#line 1323 "awkgram.y" /* yacc.c:1646 */
{
/* Ditto */
(yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
}
-#line 3212 "awkgram.c" /* yacc.c:1646 */
+#line 3224 "awkgram.c" /* yacc.c:1646 */
break;
case 109:
-#line 1316 "awkgram.y" /* yacc.c:1646 */
+#line 1328 "awkgram.y" /* yacc.c:1646 */
{
/* Ditto */
(yyval) = (yyvsp[-2]);
}
-#line 3221 "awkgram.c" /* yacc.c:1646 */
+#line 3233 "awkgram.c" /* yacc.c:1646 */
break;
case 110:
-#line 1325 "awkgram.y" /* yacc.c:1646 */
+#line 1337 "awkgram.y" /* yacc.c:1646 */
{
if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
lintwarn_ln((yyvsp[-1])->source_line,
_("regular expression on right of assignment"));
(yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1]));
}
-#line 3232 "awkgram.c" /* yacc.c:1646 */
+#line 3244 "awkgram.c" /* yacc.c:1646 */
break;
case 111:
-#line 1332 "awkgram.y" /* yacc.c:1646 */
+#line 1344 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3238 "awkgram.c" /* yacc.c:1646 */
+#line 3250 "awkgram.c" /* yacc.c:1646 */
break;
case 112:
-#line 1334 "awkgram.y" /* yacc.c:1646 */
+#line 1346 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3244 "awkgram.c" /* yacc.c:1646 */
+#line 3256 "awkgram.c" /* yacc.c:1646 */
break;
case 113:
-#line 1336 "awkgram.y" /* yacc.c:1646 */
+#line 1348 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
warning_ln((yyvsp[-1])->source_line,
@@ -3260,11 +3272,11 @@ regular_print:
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1]));
}
}
-#line 3264 "awkgram.c" /* yacc.c:1646 */
+#line 3276 "awkgram.c" /* yacc.c:1646 */
break;
case 114:
-#line 1352 "awkgram.y" /* yacc.c:1646 */
+#line 1364 "awkgram.y" /* yacc.c:1646 */
{
if (do_lint_old)
warning_ln((yyvsp[-1])->source_line,
@@ -3274,91 +3286,91 @@ regular_print:
(yyvsp[-1])->expr_count = 1;
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1]));
}
-#line 3278 "awkgram.c" /* yacc.c:1646 */
+#line 3290 "awkgram.c" /* yacc.c:1646 */
break;
case 115:
-#line 1362 "awkgram.y" /* yacc.c:1646 */
+#line 1374 "awkgram.y" /* yacc.c:1646 */
{
if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
lintwarn_ln((yyvsp[-1])->source_line,
_("regular expression on right of comparison"));
(yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1]));
}
-#line 3289 "awkgram.c" /* yacc.c:1646 */
+#line 3301 "awkgram.c" /* yacc.c:1646 */
break;
case 116:
-#line 1369 "awkgram.y" /* yacc.c:1646 */
+#line 1381 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); }
-#line 3295 "awkgram.c" /* yacc.c:1646 */
+#line 3307 "awkgram.c" /* yacc.c:1646 */
break;
case 117:
-#line 1371 "awkgram.y" /* yacc.c:1646 */
+#line 1383 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3301 "awkgram.c" /* yacc.c:1646 */
+#line 3313 "awkgram.c" /* yacc.c:1646 */
break;
case 118:
-#line 1376 "awkgram.y" /* yacc.c:1646 */
+#line 1388 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3307 "awkgram.c" /* yacc.c:1646 */
+#line 3319 "awkgram.c" /* yacc.c:1646 */
break;
case 119:
-#line 1378 "awkgram.y" /* yacc.c:1646 */
+#line 1390 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3313 "awkgram.c" /* yacc.c:1646 */
+#line 3325 "awkgram.c" /* yacc.c:1646 */
break;
case 120:
-#line 1380 "awkgram.y" /* yacc.c:1646 */
+#line 1392 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_assign_quotient;
(yyval) = (yyvsp[0]);
}
-#line 3322 "awkgram.c" /* yacc.c:1646 */
+#line 3334 "awkgram.c" /* yacc.c:1646 */
break;
case 121:
-#line 1388 "awkgram.y" /* yacc.c:1646 */
+#line 1400 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3328 "awkgram.c" /* yacc.c:1646 */
+#line 3340 "awkgram.c" /* yacc.c:1646 */
break;
case 122:
-#line 1390 "awkgram.y" /* yacc.c:1646 */
+#line 1402 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3334 "awkgram.c" /* yacc.c:1646 */
+#line 3346 "awkgram.c" /* yacc.c:1646 */
break;
case 123:
-#line 1395 "awkgram.y" /* yacc.c:1646 */
+#line 1407 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3340 "awkgram.c" /* yacc.c:1646 */
+#line 3352 "awkgram.c" /* yacc.c:1646 */
break;
case 124:
-#line 1397 "awkgram.y" /* yacc.c:1646 */
+#line 1409 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3346 "awkgram.c" /* yacc.c:1646 */
+#line 3358 "awkgram.c" /* yacc.c:1646 */
break;
case 125:
-#line 1402 "awkgram.y" /* yacc.c:1646 */
+#line 1414 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3352 "awkgram.c" /* yacc.c:1646 */
+#line 3364 "awkgram.c" /* yacc.c:1646 */
break;
case 126:
-#line 1404 "awkgram.y" /* yacc.c:1646 */
+#line 1416 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3358 "awkgram.c" /* yacc.c:1646 */
+#line 3370 "awkgram.c" /* yacc.c:1646 */
break;
case 127:
-#line 1406 "awkgram.y" /* yacc.c:1646 */
+#line 1418 "awkgram.y" /* yacc.c:1646 */
{
int count = 2;
bool is_simple_var = false;
@@ -3405,47 +3417,47 @@ regular_print:
max_args = count;
}
}
-#line 3409 "awkgram.c" /* yacc.c:1646 */
+#line 3421 "awkgram.c" /* yacc.c:1646 */
break;
case 129:
-#line 1458 "awkgram.y" /* yacc.c:1646 */
+#line 1470 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3415 "awkgram.c" /* yacc.c:1646 */
+#line 3427 "awkgram.c" /* yacc.c:1646 */
break;
case 130:
-#line 1460 "awkgram.y" /* yacc.c:1646 */
+#line 1472 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3421 "awkgram.c" /* yacc.c:1646 */
+#line 3433 "awkgram.c" /* yacc.c:1646 */
break;
case 131:
-#line 1462 "awkgram.y" /* yacc.c:1646 */
+#line 1474 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3427 "awkgram.c" /* yacc.c:1646 */
+#line 3439 "awkgram.c" /* yacc.c:1646 */
break;
case 132:
-#line 1464 "awkgram.y" /* yacc.c:1646 */
+#line 1476 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3433 "awkgram.c" /* yacc.c:1646 */
+#line 3445 "awkgram.c" /* yacc.c:1646 */
break;
case 133:
-#line 1466 "awkgram.y" /* yacc.c:1646 */
+#line 1478 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3439 "awkgram.c" /* yacc.c:1646 */
+#line 3451 "awkgram.c" /* yacc.c:1646 */
break;
case 134:
-#line 1468 "awkgram.y" /* yacc.c:1646 */
+#line 1480 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3445 "awkgram.c" /* yacc.c:1646 */
+#line 3457 "awkgram.c" /* yacc.c:1646 */
break;
case 135:
-#line 1470 "awkgram.y" /* yacc.c:1646 */
+#line 1482 "awkgram.y" /* yacc.c:1646 */
{
/*
* In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3459,29 +3471,29 @@ regular_print:
_("non-redirected `getline' undefined inside END action"));
(yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), redirect_input);
}
-#line 3463 "awkgram.c" /* yacc.c:1646 */
+#line 3475 "awkgram.c" /* yacc.c:1646 */
break;
case 136:
-#line 1484 "awkgram.y" /* yacc.c:1646 */
+#line 1496 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postincrement;
(yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3472 "awkgram.c" /* yacc.c:1646 */
+#line 3484 "awkgram.c" /* yacc.c:1646 */
break;
case 137:
-#line 1489 "awkgram.y" /* yacc.c:1646 */
+#line 1501 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postdecrement;
(yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3481 "awkgram.c" /* yacc.c:1646 */
+#line 3493 "awkgram.c" /* yacc.c:1646 */
break;
case 138:
-#line 1494 "awkgram.y" /* yacc.c:1646 */
+#line 1506 "awkgram.y" /* yacc.c:1646 */
{
if (do_lint_old) {
warning_ln((yyvsp[-1])->source_line,
@@ -3501,64 +3513,64 @@ regular_print:
(yyval) = list_append(list_merge(t, (yyvsp[0])), (yyvsp[-1]));
}
}
-#line 3505 "awkgram.c" /* yacc.c:1646 */
+#line 3517 "awkgram.c" /* yacc.c:1646 */
break;
case 139:
-#line 1519 "awkgram.y" /* yacc.c:1646 */
+#line 1531 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), (yyvsp[-2])->redir_type);
bcfree((yyvsp[-2]));
}
-#line 3514 "awkgram.c" /* yacc.c:1646 */
+#line 3526 "awkgram.c" /* yacc.c:1646 */
break;
case 140:
-#line 1525 "awkgram.y" /* yacc.c:1646 */
+#line 1537 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3520 "awkgram.c" /* yacc.c:1646 */
+#line 3532 "awkgram.c" /* yacc.c:1646 */
break;
case 141:
-#line 1527 "awkgram.y" /* yacc.c:1646 */
+#line 1539 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3526 "awkgram.c" /* yacc.c:1646 */
+#line 3538 "awkgram.c" /* yacc.c:1646 */
break;
case 142:
-#line 1529 "awkgram.y" /* yacc.c:1646 */
+#line 1541 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3532 "awkgram.c" /* yacc.c:1646 */
+#line 3544 "awkgram.c" /* yacc.c:1646 */
break;
case 143:
-#line 1531 "awkgram.y" /* yacc.c:1646 */
+#line 1543 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3538 "awkgram.c" /* yacc.c:1646 */
+#line 3550 "awkgram.c" /* yacc.c:1646 */
break;
case 144:
-#line 1533 "awkgram.y" /* yacc.c:1646 */
+#line 1545 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3544 "awkgram.c" /* yacc.c:1646 */
+#line 3556 "awkgram.c" /* yacc.c:1646 */
break;
case 145:
-#line 1535 "awkgram.y" /* yacc.c:1646 */
+#line 1547 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3550 "awkgram.c" /* yacc.c:1646 */
+#line 3562 "awkgram.c" /* yacc.c:1646 */
break;
case 146:
-#line 1540 "awkgram.y" /* yacc.c:1646 */
+#line 1552 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3558 "awkgram.c" /* yacc.c:1646 */
+#line 3570 "awkgram.c" /* yacc.c:1646 */
break;
case 147:
-#line 1544 "awkgram.y" /* yacc.c:1646 */
+#line 1556 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[0])->opcode == Op_match_rec) {
(yyvsp[0])->opcode = Op_nomatch;
@@ -3590,37 +3602,37 @@ regular_print:
}
}
}
-#line 3594 "awkgram.c" /* yacc.c:1646 */
+#line 3606 "awkgram.c" /* yacc.c:1646 */
break;
case 148:
-#line 1576 "awkgram.y" /* yacc.c:1646 */
+#line 1588 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 3600 "awkgram.c" /* yacc.c:1646 */
+#line 3612 "awkgram.c" /* yacc.c:1646 */
break;
case 149:
-#line 1578 "awkgram.y" /* yacc.c:1646 */
+#line 1590 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
if ((yyval) == NULL)
YYABORT;
}
-#line 3610 "awkgram.c" /* yacc.c:1646 */
+#line 3622 "awkgram.c" /* yacc.c:1646 */
break;
case 150:
-#line 1584 "awkgram.y" /* yacc.c:1646 */
+#line 1596 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
if ((yyval) == NULL)
YYABORT;
}
-#line 3620 "awkgram.c" /* yacc.c:1646 */
+#line 3632 "awkgram.c" /* yacc.c:1646 */
break;
case 151:
-#line 1590 "awkgram.y" /* yacc.c:1646 */
+#line 1602 "awkgram.y" /* yacc.c:1646 */
{
static bool warned = false;
@@ -3633,45 +3645,45 @@ regular_print:
if ((yyval) == NULL)
YYABORT;
}
-#line 3637 "awkgram.c" /* yacc.c:1646 */
+#line 3649 "awkgram.c" /* yacc.c:1646 */
break;
case 154:
-#line 1605 "awkgram.y" /* yacc.c:1646 */
+#line 1617 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[-1])->opcode = Op_preincrement;
(yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
}
-#line 3646 "awkgram.c" /* yacc.c:1646 */
+#line 3658 "awkgram.c" /* yacc.c:1646 */
break;
case 155:
-#line 1610 "awkgram.y" /* yacc.c:1646 */
+#line 1622 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[-1])->opcode = Op_predecrement;
(yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
}
-#line 3655 "awkgram.c" /* yacc.c:1646 */
+#line 3667 "awkgram.c" /* yacc.c:1646 */
break;
case 156:
-#line 1615 "awkgram.y" /* yacc.c:1646 */
+#line 1627 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3663 "awkgram.c" /* yacc.c:1646 */
+#line 3675 "awkgram.c" /* yacc.c:1646 */
break;
case 157:
-#line 1619 "awkgram.y" /* yacc.c:1646 */
+#line 1631 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_create((yyvsp[0]));
}
-#line 3671 "awkgram.c" /* yacc.c:1646 */
+#line 3683 "awkgram.c" /* yacc.c:1646 */
break;
case 158:
-#line 1623 "awkgram.y" /* yacc.c:1646 */
+#line 1635 "awkgram.y" /* yacc.c:1646 */
{
if ((yyvsp[0])->lasti->opcode == Op_push_i
&& ((yyvsp[0])->lasti->memory->flags & (STRCUR|STRING)) == 0
@@ -3686,11 +3698,11 @@ regular_print:
(yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
}
}
-#line 3690 "awkgram.c" /* yacc.c:1646 */
+#line 3702 "awkgram.c" /* yacc.c:1646 */
break;
case 159:
-#line 1638 "awkgram.y" /* yacc.c:1646 */
+#line 1650 "awkgram.y" /* yacc.c:1646 */
{
/*
* was: $$ = $2
@@ -3700,20 +3712,20 @@ regular_print:
(yyvsp[-1])->memory = make_number(0.0);
(yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
}
-#line 3704 "awkgram.c" /* yacc.c:1646 */
+#line 3716 "awkgram.c" /* yacc.c:1646 */
break;
case 160:
-#line 1651 "awkgram.y" /* yacc.c:1646 */
+#line 1663 "awkgram.y" /* yacc.c:1646 */
{
func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
(yyval) = (yyvsp[0]);
}
-#line 3713 "awkgram.c" /* yacc.c:1646 */
+#line 3725 "awkgram.c" /* yacc.c:1646 */
break;
case 161:
-#line 1656 "awkgram.y" /* yacc.c:1646 */
+#line 1668 "awkgram.y" /* yacc.c:1646 */
{
/* indirect function call */
INSTRUCTION *f, *t;
@@ -3745,13 +3757,25 @@ regular_print:
*/
(yyval) = list_prepend((yyvsp[0]), t);
+ at_seen = false;
}
-#line 3750 "awkgram.c" /* yacc.c:1646 */
+#line 3763 "awkgram.c" /* yacc.c:1646 */
break;
case 162:
-#line 1692 "awkgram.y" /* yacc.c:1646 */
+#line 1705 "awkgram.y" /* yacc.c:1646 */
{
+ NODE *n;
+
+ if (! at_seen) {
+ n = lookup((yyvsp[-3])->func_name);
+ if (n != NULL && n->type != Node_func
+ && n->type != Node_ext_func && n->type != Node_old_ext_func) {
+ error_ln((yyvsp[-3])->source_line,
+ _("attempt to use non-function `%s' in function call"),
+ (yyvsp[-3])->func_name);
+ }
+ }
param_sanity((yyvsp[-1]));
(yyvsp[-3])->opcode = Op_func_call;
(yyvsp[-3])->func_body = NULL;
@@ -3764,49 +3788,49 @@ regular_print:
(yyval) = list_append(t, (yyvsp[-3]));
}
}
-#line 3768 "awkgram.c" /* yacc.c:1646 */
+#line 3792 "awkgram.c" /* yacc.c:1646 */
break;
case 163:
-#line 1709 "awkgram.y" /* yacc.c:1646 */
+#line 1733 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3774 "awkgram.c" /* yacc.c:1646 */
+#line 3798 "awkgram.c" /* yacc.c:1646 */
break;
case 164:
-#line 1711 "awkgram.y" /* yacc.c:1646 */
+#line 1735 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3780 "awkgram.c" /* yacc.c:1646 */
+#line 3804 "awkgram.c" /* yacc.c:1646 */
break;
case 165:
-#line 1716 "awkgram.y" /* yacc.c:1646 */
+#line 1740 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3786 "awkgram.c" /* yacc.c:1646 */
+#line 3810 "awkgram.c" /* yacc.c:1646 */
break;
case 166:
-#line 1718 "awkgram.y" /* yacc.c:1646 */
+#line 1742 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 3792 "awkgram.c" /* yacc.c:1646 */
+#line 3816 "awkgram.c" /* yacc.c:1646 */
break;
case 167:
-#line 1723 "awkgram.y" /* yacc.c:1646 */
+#line 1747 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3798 "awkgram.c" /* yacc.c:1646 */
+#line 3822 "awkgram.c" /* yacc.c:1646 */
break;
case 168:
-#line 1725 "awkgram.y" /* yacc.c:1646 */
+#line 1749 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
}
-#line 3806 "awkgram.c" /* yacc.c:1646 */
+#line 3830 "awkgram.c" /* yacc.c:1646 */
break;
case 169:
-#line 1732 "awkgram.y" /* yacc.c:1646 */
+#line 1756 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *ip = (yyvsp[0])->lasti;
int count = ip->sub_count; /* # of SUBSEP-seperated expressions */
@@ -3820,11 +3844,11 @@ regular_print:
sub_counter++; /* count # of dimensions */
(yyval) = (yyvsp[0]);
}
-#line 3824 "awkgram.c" /* yacc.c:1646 */
+#line 3848 "awkgram.c" /* yacc.c:1646 */
break;
case 170:
-#line 1749 "awkgram.y" /* yacc.c:1646 */
+#line 1773 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *t = (yyvsp[-1]);
if ((yyvsp[-1]) == NULL) {
@@ -3838,31 +3862,31 @@ regular_print:
(yyvsp[0])->sub_count = count_expressions(&t, false);
(yyval) = list_append(t, (yyvsp[0]));
}
-#line 3842 "awkgram.c" /* yacc.c:1646 */
+#line 3866 "awkgram.c" /* yacc.c:1646 */
break;
case 171:
-#line 1766 "awkgram.y" /* yacc.c:1646 */
+#line 1790 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); }
-#line 3848 "awkgram.c" /* yacc.c:1646 */
+#line 3872 "awkgram.c" /* yacc.c:1646 */
break;
case 172:
-#line 1768 "awkgram.y" /* yacc.c:1646 */
+#line 1792 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
}
-#line 3856 "awkgram.c" /* yacc.c:1646 */
+#line 3880 "awkgram.c" /* yacc.c:1646 */
break;
case 173:
-#line 1775 "awkgram.y" /* yacc.c:1646 */
+#line 1799 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[-1]); }
-#line 3862 "awkgram.c" /* yacc.c:1646 */
+#line 3886 "awkgram.c" /* yacc.c:1646 */
break;
case 174:
-#line 1780 "awkgram.y" /* yacc.c:1646 */
+#line 1804 "awkgram.y" /* yacc.c:1646 */
{
char *var_name = (yyvsp[0])->lextok;
@@ -3870,22 +3894,22 @@ regular_print:
(yyvsp[0])->memory = variable((yyvsp[0])->source_line, var_name, Node_var_new);
(yyval) = list_create((yyvsp[0]));
}
-#line 3874 "awkgram.c" /* yacc.c:1646 */
+#line 3898 "awkgram.c" /* yacc.c:1646 */
break;
case 175:
-#line 1788 "awkgram.y" /* yacc.c:1646 */
+#line 1812 "awkgram.y" /* yacc.c:1646 */
{
char *arr = (yyvsp[-1])->lextok;
(yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, Node_var_new);
(yyvsp[-1])->opcode = Op_push_array;
(yyval) = list_prepend((yyvsp[0]), (yyvsp[-1]));
}
-#line 3885 "awkgram.c" /* yacc.c:1646 */
+#line 3909 "awkgram.c" /* yacc.c:1646 */
break;
case 176:
-#line 1798 "awkgram.y" /* yacc.c:1646 */
+#line 1822 "awkgram.y" /* yacc.c:1646 */
{
INSTRUCTION *ip = (yyvsp[0])->nexti;
if (ip->opcode == Op_push
@@ -3897,73 +3921,73 @@ regular_print:
} else
(yyval) = (yyvsp[0]);
}
-#line 3901 "awkgram.c" /* yacc.c:1646 */
+#line 3925 "awkgram.c" /* yacc.c:1646 */
break;
case 177:
-#line 1810 "awkgram.y" /* yacc.c:1646 */
+#line 1834 "awkgram.y" /* yacc.c:1646 */
{
(yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
if ((yyvsp[0]) != NULL)
mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
}
-#line 3911 "awkgram.c" /* yacc.c:1646 */
+#line 3935 "awkgram.c" /* yacc.c:1646 */
break;
case 178:
-#line 1819 "awkgram.y" /* yacc.c:1646 */
+#line 1843 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postincrement;
}
-#line 3919 "awkgram.c" /* yacc.c:1646 */
+#line 3943 "awkgram.c" /* yacc.c:1646 */
break;
case 179:
-#line 1823 "awkgram.y" /* yacc.c:1646 */
+#line 1847 "awkgram.y" /* yacc.c:1646 */
{
(yyvsp[0])->opcode = Op_postdecrement;
}
-#line 3927 "awkgram.c" /* yacc.c:1646 */
+#line 3951 "awkgram.c" /* yacc.c:1646 */
break;
case 180:
-#line 1826 "awkgram.y" /* yacc.c:1646 */
+#line 1850 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = NULL; }
-#line 3933 "awkgram.c" /* yacc.c:1646 */
+#line 3957 "awkgram.c" /* yacc.c:1646 */
break;
case 182:
-#line 1834 "awkgram.y" /* yacc.c:1646 */
+#line 1858 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 3939 "awkgram.c" /* yacc.c:1646 */
+#line 3963 "awkgram.c" /* yacc.c:1646 */
break;
case 183:
-#line 1838 "awkgram.y" /* yacc.c:1646 */
+#line 1862 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 3945 "awkgram.c" /* yacc.c:1646 */
+#line 3969 "awkgram.c" /* yacc.c:1646 */
break;
case 186:
-#line 1847 "awkgram.y" /* yacc.c:1646 */
+#line 1871 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 3951 "awkgram.c" /* yacc.c:1646 */
+#line 3975 "awkgram.c" /* yacc.c:1646 */
break;
case 187:
-#line 1851 "awkgram.y" /* yacc.c:1646 */
+#line 1875 "awkgram.y" /* yacc.c:1646 */
{ (yyval) = (yyvsp[0]); yyerrok; }
-#line 3957 "awkgram.c" /* yacc.c:1646 */
+#line 3981 "awkgram.c" /* yacc.c:1646 */
break;
case 188:
-#line 1855 "awkgram.y" /* yacc.c:1646 */
+#line 1879 "awkgram.y" /* yacc.c:1646 */
{ yyerrok; }
-#line 3963 "awkgram.c" /* yacc.c:1646 */
+#line 3987 "awkgram.c" /* yacc.c:1646 */
break;
-#line 3967 "awkgram.c" /* yacc.c:1646 */
+#line 3991 "awkgram.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -4191,7 +4215,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 1857 "awkgram.y" /* yacc.c:1906 */
+#line 1881 "awkgram.y" /* yacc.c:1906 */
struct token {
@@ -4263,7 +4287,6 @@ static const struct token tokentab[] = {
{"dcngettext", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3)|A(4)|A(5), do_dcngettext, 0},
{"default", Op_K_default, LEX_DEFAULT, GAWKX, 0, 0},
{"delete", Op_K_delete, LEX_DELETE, NOT_OLD, 0, 0},
-{"div", Op_builtin, LEX_BUILTIN, GAWKX|A(3), do_div, MPF(div)},
{"do", Op_K_do, LEX_DO, NOT_OLD|BREAK|CONTINUE, 0, 0},
{"else", Op_K_else, LEX_ELSE, 0, 0, 0},
{"eval", Op_symbol, LEX_EVAL, 0, 0, 0},
@@ -4284,6 +4307,7 @@ static const struct token tokentab[] = {
{"include", Op_symbol, LEX_INCLUDE, GAWKX, 0, 0},
{"index", Op_builtin, LEX_BUILTIN, A(2), do_index, 0},
{"int", Op_builtin, LEX_BUILTIN, A(1), do_int, MPF(int)},
+{"intdiv", Op_builtin, LEX_BUILTIN, GAWKX|A(3), do_intdiv, MPF(intdiv)},
{"isarray", Op_builtin, LEX_BUILTIN, GAWKX|A(1), do_isarray, 0},
{"length", Op_builtin, LEX_LENGTH, A(0)|A(1), do_length, 0},
{"load", Op_symbol, LEX_LOAD, GAWKX, 0, 0},
@@ -4620,11 +4644,9 @@ mk_program()
cp = end_block;
else
cp = list_merge(begin_block, end_block);
- /*
- * We don't need to clear the comment variables
- * since they're not used anymore after this
- * function is called.
- */
+ if (program_comment != NULL) {
+ (void) list_prepend(cp, program_comment);
+ }
if (comment != NULL)
(void) list_append(cp, comment);
(void) list_append(cp, ip_atexit);
@@ -4672,6 +4694,10 @@ out:
/* delete the Op_list, not needed */
tmp = cp->nexti;
bcfree(cp);
+ /* these variables are not used again but zap them anyway. */
+ comment = NULL;
+ function_comment = NULL;
+ program_comment = NULL;
return tmp;
#undef begin_block
@@ -4698,7 +4724,7 @@ parse_program(INSTRUCTION **pcode)
ip_newfile = ip_rec = ip_atexit = ip_beginfile = ip_endfile = NULL;
else {
ip_endfile = instruction(Op_no_op);
- ip_beginfile = instruction(Op_no_op);
+ main_beginfile = ip_beginfile = instruction(Op_no_op);
ip_rec = instruction(Op_get_record); /* target for `next', also ip_newfile */
ip_newfile = bcalloc(Op_newfile, 2, 0); /* target for `nextfile' */
ip_newfile->target_jmp = ip_end;
@@ -4728,6 +4754,9 @@ parse_program(INSTRUCTION **pcode)
if (ret == 0) /* avoid spurious warning if parser aborted with YYABORT */
check_funcs();
+ if (do_posix && ! check_param_names())
+ errcount++;
+
if (args_array == NULL)
emalloc(args_array, NODE **, (max_args + 2) * sizeof(NODE *), "parse_program");
else
@@ -5314,11 +5343,29 @@ pushback(void)
(! lexeof && lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr);
}
+/* check_comment --- check for block comment */
-/* get_comment --- collect comment text */
+void
+check_comment(void)
+{
+ if (comment != NULL) {
+ if (first_rule) {
+ program_comment = comment;
+ } else
+ block_comment = comment;
+ comment = NULL;
+ }
+ first_rule = false;
+}
+
+/*
+ * get_comment --- collect comment text.
+ * Flag = EOL_COMMENT for end-of-line comments.
+ * Flag = FULL_COMMENT for self-contained comments.
+ */
int
-get_comment(void)
+get_comment(int flag)
{
int c;
int sl;
@@ -5330,6 +5377,12 @@ get_comment(void)
while ((c = nextc(false)) != '\n' && c != END_FILE) {
tokadd(c);
}
+ if (flag == EOL_COMMENT) {
+ /* comment at end of line. */
+ if (c == '\n')
+ tokadd(c);
+ break;
+ }
if (c == '\n') {
tokadd(c);
sourceline++;
@@ -5344,6 +5397,7 @@ get_comment(void)
break;
else if (c != '#') {
pushback();
+ sourceline--;
break;
} else
tokadd(c);
@@ -5353,6 +5407,7 @@ get_comment(void)
comment = bcalloc(Op_comment, 1, sl);
comment->source_file = source;
comment->memory = make_str_node(tokstart, tok - tokstart, 0);
+ comment->memory->comment_type = flag;
return c;
}
@@ -5404,7 +5459,7 @@ allow_newline(void)
if (c == '#') {
if (do_pretty_print && ! do_profile) {
/* collect comment byte code iff doing pretty print but not profiling. */
- c = get_comment();
+ c = get_comment(EOL_COMMENT);
} else {
while ((c = nextc(false)) != '\n' && c != END_FILE)
continue;
@@ -5480,7 +5535,7 @@ yylex(void)
if (lasttok == LEX_EOF) /* error earlier in current source, must give up !! */
return 0;
- c = nextc(true);
+ c = nextc(! want_regexp);
if (c == END_SRC)
return 0;
if (c == END_FILE)
@@ -5522,30 +5577,31 @@ yylex(void)
want_regexp = false;
tok = tokstart;
for (;;) {
- c = nextc(true);
+ c = nextc(false);
if (gawk_mb_cur_max == 1 || nextc_is_1stbyte) switch (c) {
case '[':
/* one day check for `.' and `=' too */
- if (nextc(true) == ':' || in_brack == 0)
+ if (nextc(false) == ':' || in_brack == 0)
in_brack++;
pushback();
break;
case ']':
- if (tokstart[0] == '['
- && (tok == tokstart + 1
- || (tok == tokstart + 2
- && tokstart[1] == '^')))
+ if (tok[-1] == '['
+ || (tok[-2] == '[' && tok[-1] == '^'))
/* do nothing */;
else
in_brack--;
break;
case '\\':
- if ((c = nextc(true)) == END_FILE) {
+ if ((c = nextc(false)) == END_FILE) {
pushback();
yyerror(_("unterminated regexp ends with `\\' at end of file"));
goto end_regexp; /* kludge */
- } else if (c == '\n') {
+ }
+ if (c == '\r') /* allow MS-DOS files. bleah */
+ c = nextc(true);
+ if (c == '\n') {
sourceline++;
continue;
} else {
@@ -5616,7 +5672,10 @@ retry:
* Collect comment byte code iff doing pretty print
* but not profiling.
*/
- c = get_comment();
+ if (lasttok == NEWLINE || lasttok == 0)
+ c = get_comment(FULL_COMMENT);
+ else
+ c = get_comment(EOL_COMMENT);
if (c == END_FILE)
return lasttok = NEWLINE_EOF;
@@ -5630,6 +5689,7 @@ retry:
return lasttok = NEWLINE;
case '@':
+ at_seen = true;
return lasttok = '@';
case '\\':
@@ -5653,7 +5713,7 @@ retry:
_("use of `\\ #...' line continuation is not portable"));
}
if (do_pretty_print && ! do_profile)
- c = get_comment();
+ c = get_comment(EOL_COMMENT);
else {
while ((c = nextc(false)) != '\n')
if (c == END_FILE)
@@ -5755,7 +5815,7 @@ retry:
return lasttok = '*';
case '/':
- if (nextc(true) == '=') {
+ if (nextc(false) == '=') {
pushback();
return lasttok = SLASH_BEFORE_EQUAL;
}
@@ -5890,6 +5950,8 @@ retry:
if ((gawk_mb_cur_max == 1 || nextc_is_1stbyte) &&
c == '\\') {
c = nextc(true);
+ if (c == '\r') /* allow MS-DOS files. bleah */
+ c = nextc(true);
if (c == '\n') {
sourceline++;
continue;
@@ -6419,9 +6481,9 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
arg = subn->nexti;
if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
arg->nexti->opcode = Op_push_arg; /* argument may be array */
- } else if (r->builtin == do_div
+ } else if (r->builtin == do_intdiv
#ifdef HAVE_MPFR
- || r->builtin == MPF(div)
+ || r->builtin == MPF(intdiv)
#endif
) {
arg = subn->nexti->lasti->nexti->lasti->nexti; /* 3rd arg list */
@@ -6773,7 +6835,7 @@ install_function(char *fname, INSTRUCTION *fi, INSTRUCTION *plist)
int pcount = 0;
r = lookup(fname);
- if (r != NULL || is_deferred_variable(fname)) {
+ if (r != NULL) {
error_ln(fi->source_line, _("function name `%s' previously defined"), fname);
return -1;
}
@@ -6966,50 +7028,6 @@ param_sanity(INSTRUCTION *arglist)
}
}
-/* deferred variables --- those that are only defined if needed. */
-
-/*
- * Is there any reason to use a hash table for deferred variables? At the
- * moment, there are only 1 to 3 such variables, so it may not be worth
- * the overhead. If more modules start using this facility, it should
- * probably be converted into a hash table.
- */
-
-static struct deferred_variable {
- NODE *(*load_func)(void);
- struct deferred_variable *next;
- char name[1]; /* variable-length array */
-} *deferred_variables;
-
-/* register_deferred_variable --- add a var name and loading function to the list */
-
-void
-register_deferred_variable(const char *name, NODE *(*load_func)(void))
-{
- struct deferred_variable *dv;
- size_t sl = strlen(name);
-
- emalloc(dv, struct deferred_variable *, sizeof(*dv)+sl,
- "register_deferred_variable");
- dv->load_func = load_func;
- dv->next = deferred_variables;
- memcpy(dv->name, name, sl+1);
- deferred_variables = dv;
-}
-
-/* is_deferred_variable --- check if NAME is a deferred variable */
-
-static bool
-is_deferred_variable(const char *name)
-{
- struct deferred_variable *dv;
- for (dv = deferred_variables; dv != NULL; dv = dv->next)
- if (strcmp(name, dv->name) == 0)
- return true;
- return false;
-}
-
-
/* variable --- make sure NAME is in the symbol table */
NODE *
@@ -7021,47 +7039,17 @@ variable(int location, char *name, NODETYPE type)
if (r->type == Node_func || r->type == Node_ext_func )
error_ln(location, _("function `%s' called with space between name and `(',\nor used as a variable or an array"),
r->vname);
- if (r == symbol_table)
- symtab_used = true;
} else {
/* not found */
- struct deferred_variable *dv;
-
- for (dv = deferred_variables; true; dv = dv->next) {
- if (dv == NULL) {
- /*
- * This is the only case in which we may not free the string.
- */
- return install_symbol(name, type);
- }
- if (strcmp(name, dv->name) == 0) {
- r = (*dv->load_func)();
- break;
- }
- }
+ return install_symbol(name, type);
}
efree(name);
return r;
}
-/* process_deferred --- if the program uses SYMTAB, load deferred variables */
-
-static void
-process_deferred()
-{
- struct deferred_variable *dv;
-
- if (! symtab_used)
- return;
-
- for (dv = deferred_variables; dv != NULL; dv = dv->next) {
- (void) dv->load_func();
- }
-}
-
/* make_regnode --- make a regular expression node */
-static NODE *
+NODE *
make_regnode(int type, NODE *exp)
{
NODE *n;
@@ -7508,7 +7496,11 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
(rp + 1)->lasti = action->lasti;
(rp + 2)->first_line = pattern->source_line;
(rp + 2)->last_line = lastline;
- ip = list_prepend(action, rp);
+ if (block_comment != NULL) {
+ ip = list_prepend(list_prepend(action, block_comment), rp);
+ block_comment = NULL;
+ } else
+ ip = list_prepend(action, rp);
} else {
rp = bcalloc(Op_rule, 3, 0);
@@ -8213,13 +8205,26 @@ lookup_builtin(const char *name)
{
int mid = check_special(name);
- if (mid == -1 || tokentab[mid].class != LEX_BUILTIN)
+ if (mid == -1)
+ return NULL;
+
+ switch (tokentab[mid].class) {
+ case LEX_BUILTIN:
+ case LEX_LENGTH:
+ break;
+ default:
return NULL;
+ }
+
#ifdef HAVE_MPFR
if (do_mpfr)
return tokentab[mid].ptr2;
#endif
+ /* And another special case... */
+ if (tokentab[mid].value == Op_sub_builtin)
+ return (builtin_func_t) do_sub;
+
return tokentab[mid].ptr;
}
@@ -8229,11 +8234,20 @@ void
install_builtins(void)
{
int i, j;
+ int flags_that_must_be_clear = DEBUG_USE;
+
+ if (do_traditional)
+ flags_that_must_be_clear |= GAWKX;
+
+ if (do_posix)
+ flags_that_must_be_clear |= NOT_POSIX;
+
j = sizeof(tokentab) / sizeof(tokentab[0]);
for (i = 0; i < j; i++) {
- if ( tokentab[i].class == LEX_BUILTIN
- && (tokentab[i].flags & DEBUG_USE) == 0) {
+ if ( (tokentab[i].class == LEX_BUILTIN
+ || tokentab[i].class == LEX_LENGTH)
+ && (tokentab[i].flags & flags_that_must_be_clear) == 0) {
(void) install_symbol(tokentab[i].operator, Node_builtin_func);
}
}
diff --git a/awkgram.y b/awkgram.y
index 85825cb9..d429c9cd 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc.
+ * Copyright (C) 1986, 1988, 1989, 1991-2015 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Programming Language.
@@ -57,7 +57,6 @@ static int include_source(INSTRUCTION *file);
static int load_library(INSTRUCTION *file);
static void next_sourcefile(void);
static char *tokexpand(void);
-static bool is_deferred_variable(const char *name);
#define instruction(t) bcalloc(t, 1, 0)
@@ -74,13 +73,10 @@ static INSTRUCTION *mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION *op)
static INSTRUCTION *mk_boolean(INSTRUCTION *left, INSTRUCTION *right, INSTRUCTION *op);
static INSTRUCTION *mk_assignment(INSTRUCTION *lhs, INSTRUCTION *rhs, INSTRUCTION *op);
static INSTRUCTION *mk_getline(INSTRUCTION *op, INSTRUCTION *opt_var, INSTRUCTION *redir, int redirtype);
-static NODE *make_regnode(int type, NODE *exp);
static int count_expressions(INSTRUCTION **list, bool isarg);
static INSTRUCTION *optimize_assignment(INSTRUCTION *exp);
static void add_lint(INSTRUCTION *list, LINTTYPE linttype);
-static void process_deferred();
-
enum defref { FUNC_DEFINE, FUNC_USE, FUNC_EXT };
static void func_use(const char *name, enum defref how);
static void check_funcs(void);
@@ -88,11 +84,12 @@ static void check_funcs(void);
static ssize_t read_one_line(int fd, void *buffer, size_t count);
static int one_line_close(int fd);
static void split_comment(void);
+static void check_comment(void);
+static bool at_seen = false;
static bool want_source = false;
static bool want_regexp = false; /* lexical scanning kludge */
static char *in_function; /* parsing kludge */
-static bool symtab_used = false; /* program used SYMTAB */
static int rule = 0;
const char *const ruletab[] = {
@@ -146,12 +143,15 @@ static INSTRUCTION *ip_atexit = NULL;
static INSTRUCTION *ip_end;
static INSTRUCTION *ip_endfile;
static INSTRUCTION *ip_beginfile;
+INSTRUCTION *main_beginfile;
static INSTRUCTION *comment = NULL;
static INSTRUCTION *program_comment = NULL;
static INSTRUCTION *function_comment = NULL;
+static INSTRUCTION *block_comment = NULL;
static bool func_first = true;
+static bool first_rule = true;
static inline INSTRUCTION *list_create(INSTRUCTION *x);
static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
@@ -213,8 +213,6 @@ program
| program LEX_EOF
{
next_sourcefile();
- if (sourcefile == srcfiles)
- process_deferred();
}
| program error
{
@@ -231,6 +229,7 @@ rule
: pattern action
{
(void) append_rule($1, $2);
+ first_rule = false;
}
| pattern statement_term
{
@@ -252,11 +251,13 @@ rule
| '@' LEX_INCLUDE source statement_term
{
want_source = false;
+ at_seen = false;
yyerrok;
}
| '@' LEX_LOAD library statement_term
{
want_source = false;
+ at_seen = false;
yyerrok;
}
;
@@ -334,7 +335,11 @@ pattern
($1->nexti + 1)->condpair_left = $1->lasti;
($1->nexti + 1)->condpair_right = $4->lasti;
}
- $$ = list_append(list_merge($1, $4), tp);
+ if (comment != NULL) {
+ $$ = list_append(list_merge(list_prepend($1, comment), $4), tp);
+ comment = NULL;
+ } else
+ $$ = list_append(list_merge($1, $4), tp);
rule = Rule;
}
| LEX_BEGIN
@@ -348,6 +353,7 @@ pattern
$1->in_rule = rule = BEGIN;
$1->source_file = source;
+ check_comment();
$$ = $1;
}
| LEX_END
@@ -361,6 +367,7 @@ pattern
$1->in_rule = rule = END;
$1->source_file = source;
+ check_comment();
$$ = $1;
}
| LEX_BEGINFILE
@@ -368,6 +375,7 @@ pattern
func_first = false;
$1->in_rule = rule = BEGINFILE;
$1->source_file = source;
+ check_comment();
$$ = $1;
}
| LEX_ENDFILE
@@ -375,6 +383,7 @@ pattern
func_first = false;
$1->in_rule = rule = ENDFILE;
$1->source_file = source;
+ check_comment();
$$ = $1;
}
;
@@ -403,7 +412,10 @@ func_name
YYABORT;
}
| '@' LEX_EVAL
- { $$ = $2; }
+ {
+ $$ = $2;
+ at_seen = false;
+ }
;
lex_builtin
@@ -1684,12 +1696,24 @@ func_call
*/
$$ = list_prepend($2, t);
+ at_seen = false;
}
;
direct_func_call
: FUNC_CALL '(' opt_expression_list r_paren
{
+ NODE *n;
+
+ if (! at_seen) {
+ n = lookup($1->func_name);
+ if (n != NULL && n->type != Node_func
+ && n->type != Node_ext_func && n->type != Node_old_ext_func) {
+ error_ln($1->source_line,
+ _("attempt to use non-function `%s' in function call"),
+ $1->func_name);
+ }
+ }
param_sanity($3);
$1->opcode = Op_func_call;
$1->func_body = NULL;
@@ -1925,7 +1949,6 @@ static const struct token tokentab[] = {
{"dcngettext", Op_builtin, LEX_BUILTIN, GAWKX|A(1)|A(2)|A(3)|A(4)|A(5), do_dcngettext, 0},
{"default", Op_K_default, LEX_DEFAULT, GAWKX, 0, 0},
{"delete", Op_K_delete, LEX_DELETE, NOT_OLD, 0, 0},
-{"div", Op_builtin, LEX_BUILTIN, GAWKX|A(3), do_div, MPF(div)},
{"do", Op_K_do, LEX_DO, NOT_OLD|BREAK|CONTINUE, 0, 0},
{"else", Op_K_else, LEX_ELSE, 0, 0, 0},
{"eval", Op_symbol, LEX_EVAL, 0, 0, 0},
@@ -1946,6 +1969,7 @@ static const struct token tokentab[] = {
{"include", Op_symbol, LEX_INCLUDE, GAWKX, 0, 0},
{"index", Op_builtin, LEX_BUILTIN, A(2), do_index, 0},
{"int", Op_builtin, LEX_BUILTIN, A(1), do_int, MPF(int)},
+{"intdiv", Op_builtin, LEX_BUILTIN, GAWKX|A(3), do_intdiv, MPF(intdiv)},
{"isarray", Op_builtin, LEX_BUILTIN, GAWKX|A(1), do_isarray, 0},
{"length", Op_builtin, LEX_LENGTH, A(0)|A(1), do_length, 0},
{"load", Op_symbol, LEX_LOAD, GAWKX, 0, 0},
@@ -2282,11 +2306,9 @@ mk_program()
cp = end_block;
else
cp = list_merge(begin_block, end_block);
- /*
- * We don't need to clear the comment variables
- * since they're not used anymore after this
- * function is called.
- */
+ if (program_comment != NULL) {
+ (void) list_prepend(cp, program_comment);
+ }
if (comment != NULL)
(void) list_append(cp, comment);
(void) list_append(cp, ip_atexit);
@@ -2334,6 +2356,10 @@ out:
/* delete the Op_list, not needed */
tmp = cp->nexti;
bcfree(cp);
+ /* these variables are not used again but zap them anyway. */
+ comment = NULL;
+ function_comment = NULL;
+ program_comment = NULL;
return tmp;
#undef begin_block
@@ -2360,7 +2386,7 @@ parse_program(INSTRUCTION **pcode)
ip_newfile = ip_rec = ip_atexit = ip_beginfile = ip_endfile = NULL;
else {
ip_endfile = instruction(Op_no_op);
- ip_beginfile = instruction(Op_no_op);
+ main_beginfile = ip_beginfile = instruction(Op_no_op);
ip_rec = instruction(Op_get_record); /* target for `next', also ip_newfile */
ip_newfile = bcalloc(Op_newfile, 2, 0); /* target for `nextfile' */
ip_newfile->target_jmp = ip_end;
@@ -2390,6 +2416,9 @@ parse_program(INSTRUCTION **pcode)
if (ret == 0) /* avoid spurious warning if parser aborted with YYABORT */
check_funcs();
+ if (do_posix && ! check_param_names())
+ errcount++;
+
if (args_array == NULL)
emalloc(args_array, NODE **, (max_args + 2) * sizeof(NODE *), "parse_program");
else
@@ -2976,11 +3005,29 @@ pushback(void)
(! lexeof && lexptr && lexptr > lexptr_begin ? lexptr-- : lexptr);
}
+/* check_comment --- check for block comment */
+
+void
+check_comment(void)
+{
+ if (comment != NULL) {
+ if (first_rule) {
+ program_comment = comment;
+ } else
+ block_comment = comment;
+ comment = NULL;
+ }
+ first_rule = false;
+}
-/* get_comment --- collect comment text */
+/*
+ * get_comment --- collect comment text.
+ * Flag = EOL_COMMENT for end-of-line comments.
+ * Flag = FULL_COMMENT for self-contained comments.
+ */
int
-get_comment(void)
+get_comment(int flag)
{
int c;
int sl;
@@ -2992,6 +3039,12 @@ get_comment(void)
while ((c = nextc(false)) != '\n' && c != END_FILE) {
tokadd(c);
}
+ if (flag == EOL_COMMENT) {
+ /* comment at end of line. */
+ if (c == '\n')
+ tokadd(c);
+ break;
+ }
if (c == '\n') {
tokadd(c);
sourceline++;
@@ -3006,6 +3059,7 @@ get_comment(void)
break;
else if (c != '#') {
pushback();
+ sourceline--;
break;
} else
tokadd(c);
@@ -3015,6 +3069,7 @@ get_comment(void)
comment = bcalloc(Op_comment, 1, sl);
comment->source_file = source;
comment->memory = make_str_node(tokstart, tok - tokstart, 0);
+ comment->memory->comment_type = flag;
return c;
}
@@ -3066,7 +3121,7 @@ allow_newline(void)
if (c == '#') {
if (do_pretty_print && ! do_profile) {
/* collect comment byte code iff doing pretty print but not profiling. */
- c = get_comment();
+ c = get_comment(EOL_COMMENT);
} else {
while ((c = nextc(false)) != '\n' && c != END_FILE)
continue;
@@ -3142,7 +3197,7 @@ yylex(void)
if (lasttok == LEX_EOF) /* error earlier in current source, must give up !! */
return 0;
- c = nextc(true);
+ c = nextc(! want_regexp);
if (c == END_SRC)
return 0;
if (c == END_FILE)
@@ -3184,30 +3239,31 @@ yylex(void)
want_regexp = false;
tok = tokstart;
for (;;) {
- c = nextc(true);
+ c = nextc(false);
if (gawk_mb_cur_max == 1 || nextc_is_1stbyte) switch (c) {
case '[':
/* one day check for `.' and `=' too */
- if (nextc(true) == ':' || in_brack == 0)
+ if (nextc(false) == ':' || in_brack == 0)
in_brack++;
pushback();
break;
case ']':
- if (tokstart[0] == '['
- && (tok == tokstart + 1
- || (tok == tokstart + 2
- && tokstart[1] == '^')))
+ if (tok[-1] == '['
+ || (tok[-2] == '[' && tok[-1] == '^'))
/* do nothing */;
else
in_brack--;
break;
case '\\':
- if ((c = nextc(true)) == END_FILE) {
+ if ((c = nextc(false)) == END_FILE) {
pushback();
yyerror(_("unterminated regexp ends with `\\' at end of file"));
goto end_regexp; /* kludge */
- } else if (c == '\n') {
+ }
+ if (c == '\r') /* allow MS-DOS files. bleah */
+ c = nextc(true);
+ if (c == '\n') {
sourceline++;
continue;
} else {
@@ -3278,7 +3334,10 @@ retry:
* Collect comment byte code iff doing pretty print
* but not profiling.
*/
- c = get_comment();
+ if (lasttok == NEWLINE || lasttok == 0)
+ c = get_comment(FULL_COMMENT);
+ else
+ c = get_comment(EOL_COMMENT);
if (c == END_FILE)
return lasttok = NEWLINE_EOF;
@@ -3292,6 +3351,7 @@ retry:
return lasttok = NEWLINE;
case '@':
+ at_seen = true;
return lasttok = '@';
case '\\':
@@ -3315,7 +3375,7 @@ retry:
_("use of `\\ #...' line continuation is not portable"));
}
if (do_pretty_print && ! do_profile)
- c = get_comment();
+ c = get_comment(EOL_COMMENT);
else {
while ((c = nextc(false)) != '\n')
if (c == END_FILE)
@@ -3417,7 +3477,7 @@ retry:
return lasttok = '*';
case '/':
- if (nextc(true) == '=') {
+ if (nextc(false) == '=') {
pushback();
return lasttok = SLASH_BEFORE_EQUAL;
}
@@ -3552,6 +3612,8 @@ retry:
if ((gawk_mb_cur_max == 1 || nextc_is_1stbyte) &&
c == '\\') {
c = nextc(true);
+ if (c == '\r') /* allow MS-DOS files. bleah */
+ c = nextc(true);
if (c == '\n') {
sourceline++;
continue;
@@ -4081,9 +4143,9 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
arg = subn->nexti;
if (arg->nexti == arg->lasti && arg->nexti->opcode == Op_push)
arg->nexti->opcode = Op_push_arg; /* argument may be array */
- } else if (r->builtin == do_div
+ } else if (r->builtin == do_intdiv
#ifdef HAVE_MPFR
- || r->builtin == MPF(div)
+ || r->builtin == MPF(intdiv)
#endif
) {
arg = subn->nexti->lasti->nexti->lasti->nexti; /* 3rd arg list */
@@ -4435,7 +4497,7 @@ install_function(char *fname, INSTRUCTION *fi, INSTRUCTION *plist)
int pcount = 0;
r = lookup(fname);
- if (r != NULL || is_deferred_variable(fname)) {
+ if (r != NULL) {
error_ln(fi->source_line, _("function name `%s' previously defined"), fname);
return -1;
}
@@ -4628,50 +4690,6 @@ param_sanity(INSTRUCTION *arglist)
}
}
-/* deferred variables --- those that are only defined if needed. */
-
-/*
- * Is there any reason to use a hash table for deferred variables? At the
- * moment, there are only 1 to 3 such variables, so it may not be worth
- * the overhead. If more modules start using this facility, it should
- * probably be converted into a hash table.
- */
-
-static struct deferred_variable {
- NODE *(*load_func)(void);
- struct deferred_variable *next;
- char name[1]; /* variable-length array */
-} *deferred_variables;
-
-/* register_deferred_variable --- add a var name and loading function to the list */
-
-void
-register_deferred_variable(const char *name, NODE *(*load_func)(void))
-{
- struct deferred_variable *dv;
- size_t sl = strlen(name);
-
- emalloc(dv, struct deferred_variable *, sizeof(*dv)+sl,
- "register_deferred_variable");
- dv->load_func = load_func;
- dv->next = deferred_variables;
- memcpy(dv->name, name, sl+1);
- deferred_variables = dv;
-}
-
-/* is_deferred_variable --- check if NAME is a deferred variable */
-
-static bool
-is_deferred_variable(const char *name)
-{
- struct deferred_variable *dv;
- for (dv = deferred_variables; dv != NULL; dv = dv->next)
- if (strcmp(name, dv->name) == 0)
- return true;
- return false;
-}
-
-
/* variable --- make sure NAME is in the symbol table */
NODE *
@@ -4683,47 +4701,17 @@ variable(int location, char *name, NODETYPE type)
if (r->type == Node_func || r->type == Node_ext_func )
error_ln(location, _("function `%s' called with space between name and `(',\nor used as a variable or an array"),
r->vname);
- if (r == symbol_table)
- symtab_used = true;
} else {
/* not found */
- struct deferred_variable *dv;
-
- for (dv = deferred_variables; true; dv = dv->next) {
- if (dv == NULL) {
- /*
- * This is the only case in which we may not free the string.
- */
- return install_symbol(name, type);
- }
- if (strcmp(name, dv->name) == 0) {
- r = (*dv->load_func)();
- break;
- }
- }
+ return install_symbol(name, type);
}
efree(name);
return r;
}
-/* process_deferred --- if the program uses SYMTAB, load deferred variables */
-
-static void
-process_deferred()
-{
- struct deferred_variable *dv;
-
- if (! symtab_used)
- return;
-
- for (dv = deferred_variables; dv != NULL; dv = dv->next) {
- (void) dv->load_func();
- }
-}
-
/* make_regnode --- make a regular expression node */
-static NODE *
+NODE *
make_regnode(int type, NODE *exp)
{
NODE *n;
@@ -5170,7 +5158,11 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
(rp + 1)->lasti = action->lasti;
(rp + 2)->first_line = pattern->source_line;
(rp + 2)->last_line = lastline;
- ip = list_prepend(action, rp);
+ if (block_comment != NULL) {
+ ip = list_prepend(list_prepend(action, block_comment), rp);
+ block_comment = NULL;
+ } else
+ ip = list_prepend(action, rp);
} else {
rp = bcalloc(Op_rule, 3, 0);
@@ -5875,13 +5867,26 @@ lookup_builtin(const char *name)
{
int mid = check_special(name);
- if (mid == -1 || tokentab[mid].class != LEX_BUILTIN)
+ if (mid == -1)
return NULL;
+
+ switch (tokentab[mid].class) {
+ case LEX_BUILTIN:
+ case LEX_LENGTH:
+ break;
+ default:
+ return NULL;
+ }
+
#ifdef HAVE_MPFR
if (do_mpfr)
return tokentab[mid].ptr2;
#endif
+ /* And another special case... */
+ if (tokentab[mid].value == Op_sub_builtin)
+ return (builtin_func_t) do_sub;
+
return tokentab[mid].ptr;
}
@@ -5891,11 +5896,20 @@ void
install_builtins(void)
{
int i, j;
+ int flags_that_must_be_clear = DEBUG_USE;
+
+ if (do_traditional)
+ flags_that_must_be_clear |= GAWKX;
+
+ if (do_posix)
+ flags_that_must_be_clear |= NOT_POSIX;
+
j = sizeof(tokentab) / sizeof(tokentab[0]);
for (i = 0; i < j; i++) {
- if ( tokentab[i].class == LEX_BUILTIN
- && (tokentab[i].flags & DEBUG_USE) == 0) {
+ if ( (tokentab[i].class == LEX_BUILTIN
+ || tokentab[i].class == LEX_LENGTH)
+ && (tokentab[i].flags & flags_that_must_be_clear) == 0) {
(void) install_symbol(tokentab[i].operator, Node_builtin_func);
}
}
diff --git a/awklib/Makefile.in b/awklib/Makefile.in
index b4b887a1..6dc8ea81 100644
--- a/awklib/Makefile.in
+++ b/awklib/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -38,7 +38,17 @@
#
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -101,8 +111,6 @@ build_triplet = @build@
host_triplet = @host@
pkglibexec_PROGRAMS = pwcat$(EXEEXT) grcat$(EXEEXT)
subdir = awklib
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/mkinstalldirs $(top_srcdir)/depcomp ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/gettext.m4 \
@@ -117,6 +125,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -183,6 +192,8 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \
+ $(top_srcdir)/mkinstalldirs ChangeLog
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = $(datadir)/awk
pkglibexecdir = $(libexecdir)/awk
@@ -340,7 +351,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu awklib/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu awklib/Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -631,6 +641,8 @@ uninstall-am: uninstall-local uninstall-pkglibexecPROGRAMS
tags tags-am uninstall uninstall-am uninstall-local \
uninstall-pkglibexecPROGRAMS
+.PRECIOUS: Makefile
+
all: $(srcdir)/stamp-eg $(AUXPROGS) $(AUXAWK)
diff --git a/awklib/eg/lib/assert.awk b/awklib/eg/lib/assert.awk
index 75fd8853..c8e13490 100644
--- a/awklib/eg/lib/assert.awk
+++ b/awklib/eg/lib/assert.awk
@@ -1,4 +1,4 @@
-# assert --- assert that a condition is true. Otherwise exit.
+# assert --- assert that a condition is true. Otherwise, exit.
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
diff --git a/awklib/eg/lib/bits2str.awk b/awklib/eg/lib/bits2str.awk
index 9725ee8f..a10ffad1 100644
--- a/awklib/eg/lib/bits2str.awk
+++ b/awklib/eg/lib/bits2str.awk
@@ -1,4 +1,4 @@
-# bits2str --- turn a byte into readable 1's and 0's
+# bits2str --- turn a byte into readable ones and zeros
function bits2str(bits, data, mask)
{
diff --git a/awklib/eg/lib/inplace.awk b/awklib/eg/lib/inplace.awk
index 6403a228..d1574654 100644
--- a/awklib/eg/lib/inplace.awk
+++ b/awklib/eg/lib/inplace.awk
@@ -5,10 +5,15 @@
# Please set INPLACE_SUFFIX to make a backup copy. For example, you may
# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# actions in an ENDFILE rule will be redirected as expected.
+
BEGINFILE {
- inplace_begin(FILENAME, INPLACE_SUFFIX)
+ if (_inplace_filename != "")
+ inplace_end(_inplace_filename, INPLACE_SUFFIX)
+ inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
}
-ENDFILE {
+END {
inplace_end(FILENAME, INPLACE_SUFFIX)
}
diff --git a/awklib/eg/lib/div.awk b/awklib/eg/lib/intdiv.awk
index 5939024d..dbc553b0 100644
--- a/awklib/eg/lib/div.awk
+++ b/awklib/eg/lib/intdiv.awk
@@ -1,10 +1,13 @@
-# div --- do integer division
+# intdiv --- do integer division
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
# July, 2014
+#
+# Name changed from div() to intdiv()
+# April, 2015
-function div(numerator, denominator, result)
+function intdiv(numerator, denominator, result)
{
split("", result)
diff --git a/awklib/eg/lib/quicksort.awk b/awklib/eg/lib/quicksort.awk
index 3ba2d6e3..e0ed8bc7 100644
--- a/awklib/eg/lib/quicksort.awk
+++ b/awklib/eg/lib/quicksort.awk
@@ -4,8 +4,9 @@
# Arnold Robbins, arnold@skeeve.com, Public Domain
# January 2009
-# quicksort --- C.A.R. Hoare's quick sort algorithm. See Wikipedia
-# or almost any algorithms or computer science text
+
+# quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia
+# or almost any algorithms or computer science text.
#
# Adapted from K&R-II, page 110
diff --git a/awklib/eg/prog/anagram.awk b/awklib/eg/prog/anagram.awk
index 7ca14559..df2768d9 100644
--- a/awklib/eg/prog/anagram.awk
+++ b/awklib/eg/prog/anagram.awk
@@ -1,5 +1,5 @@
-# anagram.awk --- An implementation of the anagram finding algorithm
-# from Jon Bentley's "Programming Pearls", 2nd edition.
+# anagram.awk --- An implementation of the anagram-finding algorithm
+# from Jon Bentley's "Programming Pearls," 2nd edition.
# Addison Wesley, 2000, ISBN 0-201-65788-0.
# Column 2, Problem C, section 2.8, pp 18-20.
#
@@ -21,7 +21,7 @@
key = word2key($1) # Build signature
data[key][$1] = $1 # Store word with signature
}
-# word2key --- split word apart into letters, sort, joining back together
+# word2key --- split word apart into letters, sort, and join back together
function word2key(word, a, i, n, result)
{
diff --git a/awklib/eg/prog/extract.awk b/awklib/eg/prog/extract.awk
index 24f40ce5..f5dfcf40 100644
--- a/awklib/eg/prog/extract.awk
+++ b/awklib/eg/prog/extract.awk
@@ -1,4 +1,4 @@
-# extract.awk --- extract files and run programs from texinfo files
+# extract.awk --- extract files and run programs from Texinfo files
#
# Arnold Robbins, arnold@skeeve.com, Public Domain
# May 1993
diff --git a/awklib/eg/prog/pi.awk b/awklib/eg/prog/pi.awk
index 3297beff..e1b5bc4f 100644
--- a/awklib/eg/prog/pi.awk
+++ b/awklib/eg/prog/pi.awk
@@ -10,7 +10,7 @@ BEGIN {
for (m = digits * 4; m > 0; --m) {
d = m * 2 + 1
x = pi * m
- div(x, d, result)
+ intdiv(x, d, result)
pi = result["quotient"]
pi = pi + two
}
diff --git a/awklib/eg/prog/translate.awk b/awklib/eg/prog/translate.awk
index cf7f3897..e7403717 100644
--- a/awklib/eg/prog/translate.awk
+++ b/awklib/eg/prog/translate.awk
@@ -4,7 +4,7 @@
# August 1989
# February 2009 - bug fix
-# Bugs: does not handle things like: tr A-Z a-z, it has
+# Bugs: does not handle things like tr A-Z a-z; it has
# to be spelled out. However, if `to' is shorter than `from',
# the last character in `to' is used for the rest of `from'.
diff --git a/builtin.c b/builtin.c
index 21c6ed5c..b70176dc 100644
--- a/builtin.c
+++ b/builtin.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc.
+ * Copyright (C) 1986, 1988, 1989, 1991-2015 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Programming Language.
@@ -129,10 +129,14 @@ wrerror:
if (fp == stdout && errno == EPIPE)
gawk_exit(EXIT_FATAL);
+
/* otherwise die verbosely */
- fatal(_("%s to \"%s\" failed (%s)"), from,
- rp ? rp->value : _("standard output"),
- errno ? strerror(errno) : _("reason unknown"));
+ if ((rp != NULL) ? is_non_fatal_redirect(rp->value) : is_non_fatal_std(fp))
+ update_ERRNO_int(errno);
+ else
+ fatal(_("%s to \"%s\" failed (%s)"), from,
+ rp ? rp->value : _("standard output"),
+ errno ? strerror(errno) : _("reason unknown"));
}
/* do_exp --- exponential function */
@@ -510,6 +514,9 @@ do_length(int nargs)
* Support for deferred loading of array elements requires that
* we use the array length interface even though it isn't
* necessary for the built-in array types.
+ *
+ * 1/2015: The deferred arrays are gone, but this is probably
+ * still a good idea.
*/
size = assoc_length(tmp);
@@ -904,7 +911,10 @@ check_pos:
case '*':
if (cur == NULL)
break;
- if (! do_traditional && isdigit((unsigned char) *s1)) {
+ if (! do_traditional && used_dollar && ! isdigit((unsigned char) *s1)) {
+ fatal(_("fatal: must use `count$' on all formats or none"));
+ break; /* silence warnings */
+ } else if (! do_traditional && isdigit((unsigned char) *s1)) {
int val = 0;
for (; n0 > 0 && *s1 && isdigit((unsigned char) *s1); s1++, n0--) {
@@ -1633,7 +1643,7 @@ do_printf(int nargs, int redirtype)
FILE *fp = NULL;
NODE *tmp;
struct redirect *rp = NULL;
- int errflg; /* not used, sigh */
+ int errflg = 0;
NODE *redir_exp = NULL;
if (nargs == 0) {
@@ -1644,7 +1654,7 @@ do_printf(int nargs, int redirtype)
redir_exp = TOP();
if (redir_exp->type != Node_val)
fatal(_("attempt to use array `%s' in a scalar context"), array_vname(redir_exp));
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
DEREF(redir_exp);
decr_sp();
}
@@ -1657,9 +1667,13 @@ do_printf(int nargs, int redirtype)
redir_exp = PEEK(nargs);
if (redir_exp->type != Node_val)
fatal(_("attempt to use array `%s' in a scalar context"), array_vname(redir_exp));
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
if (rp != NULL)
fp = rp->output.fp;
+ else if (errflg) {
+ update_ERRNO_int(errflg);
+ return;
+ }
} else if (do_debug) /* only the debugger can change the default output */
fp = output_fp;
else
@@ -2072,7 +2086,7 @@ void
do_print(int nargs, int redirtype)
{
struct redirect *rp = NULL;
- int errflg; /* not used, sigh */
+ int errflg = 0;
FILE *fp = NULL;
int i;
NODE *redir_exp = NULL;
@@ -2084,9 +2098,13 @@ do_print(int nargs, int redirtype)
redir_exp = PEEK(nargs);
if (redir_exp->type != Node_val)
fatal(_("attempt to use array `%s' in a scalar context"), array_vname(redir_exp));
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
if (rp != NULL)
fp = rp->output.fp;
+ else if (errflg) {
+ update_ERRNO_int(errflg);
+ return;
+ }
} else if (do_debug) /* only the debugger can change the default output */
fp = output_fp;
else
@@ -2142,13 +2160,13 @@ do_print_rec(int nargs, int redirtype)
FILE *fp = NULL;
NODE *f0;
struct redirect *rp = NULL;
- int errflg; /* not used, sigh */
+ int errflg = 0;
NODE *redir_exp = NULL;
assert(nargs == 0);
if (redirtype != 0) {
redir_exp = TOP();
- rp = redirect(redir_exp, redirtype, & errflg);
+ rp = redirect(redir_exp, redirtype, & errflg, true);
if (rp != NULL)
fp = rp->output.fp;
DEREF(redir_exp);
@@ -2156,6 +2174,11 @@ do_print_rec(int nargs, int redirtype)
} else
fp = output_fp;
+ if (errflg) {
+ update_ERRNO_int(errflg);
+ return;
+ }
+
if (fp == NULL)
return;
@@ -3049,6 +3072,146 @@ done:
return make_number((AWKNUM) matches);
}
+/* call_sub --- call do_sub indirectly */
+
+NODE *
+call_sub(const char *name, int nargs)
+{
+ unsigned int flags = 0;
+ NODE *regex, *replace, *glob_flag;
+ NODE **lhs, *rhs;
+ NODE *zero = make_number(0.0);
+ NODE *result;
+
+ if (name[0] == 'g') {
+ if (name[1] == 'e')
+ flags = GENSUB;
+ else
+ flags = GSUB;
+ }
+
+ if (flags == 0 || flags == GSUB) {
+ /* sub or gsub */
+ if (nargs != 2)
+ fatal(_("%s: can be called indirectly only with two arguments"), name);
+
+ replace = POP_STRING();
+ regex = POP(); /* the regex */
+ /*
+ * push regex
+ * push replace
+ * push $0
+ */
+ regex = make_regnode(Node_regex, regex);
+ PUSH(regex);
+ PUSH(replace);
+ lhs = r_get_field(zero, (Func_ptr *) 0, true);
+ nargs++;
+ PUSH_ADDRESS(lhs);
+ } else {
+ /* gensub */
+ if (nargs == 4)
+ rhs = POP();
+ else
+ rhs = NULL;
+ glob_flag = POP_STRING();
+ replace = POP_STRING();
+ regex = POP(); /* the regex */
+ /*
+ * push regex
+ * push replace
+ * push glob_flag
+ * if (nargs = 3) {
+ * push $0
+ * nargs++
+ * }
+ */
+ regex = make_regnode(Node_regex, regex);
+ PUSH(regex);
+ PUSH(replace);
+ PUSH(glob_flag);
+ if (rhs == NULL) {
+ lhs = r_get_field(zero, (Func_ptr *) 0, true);
+ rhs = *lhs;
+ UPREF(rhs);
+ PUSH(rhs);
+ nargs++;
+ }
+ PUSH(rhs);
+ }
+
+
+ unref(zero);
+ result = do_sub(nargs, flags);
+ if (flags != GENSUB)
+ reset_record();
+ return result;
+}
+
+/* call_match --- call do_match indirectly */
+
+NODE *
+call_match(int nargs)
+{
+ NODE *regex, *text, *array;
+ NODE *result;
+
+ regex = text = array = NULL;
+ if (nargs == 3)
+ array = POP();
+ regex = POP();
+
+ /* Don't need to pop the string just to push it back ... */
+
+ regex = make_regnode(Node_regex, regex);
+ PUSH(regex);
+
+ if (array)
+ PUSH(array);
+
+ result = do_match(nargs);
+ return result;
+}
+
+/* call_split_func --- call do_split or do_pat_split indirectly */
+
+NODE *
+call_split_func(const char *name, int nargs)
+{
+ NODE *regex, *seps;
+ NODE *result;
+
+ regex = seps = NULL;
+ if (nargs < 2)
+ fatal(_("indirect call to %s requires at least two arguments"),
+ name);
+
+ if (nargs == 4)
+ seps = POP();
+
+ if (nargs >= 3) {
+ regex = POP_STRING();
+ regex = make_regnode(Node_regex, regex);
+ } else {
+ if (name[0] == 's') {
+ regex = make_regnode(Node_regex, FS_node->var_value);
+ regex->re_flags |= FS_DFLT;
+ } else
+ regex = make_regnode(Node_regex, FPAT_node->var_value);
+ nargs++;
+ }
+
+ /* Don't need to pop the string or the data array */
+
+ PUSH(regex);
+
+ if (seps)
+ PUSH(seps);
+
+ result = (name[0] == 's') ? do_split(nargs) : do_patsplit(nargs);
+
+ return result;
+}
/* make_integer - Convert an integer to a number node. */
@@ -3589,7 +3752,7 @@ do_bindtextdomain(int nargs)
return make_string(the_result, strlen(the_result));
}
-/* do_div --- do integer division, return quotient and remainder in dest array */
+/* do_intdiv --- do integer division, return quotient and remainder in dest array */
/*
* We define the semantics as:
@@ -3600,7 +3763,7 @@ do_bindtextdomain(int nargs)
*/
NODE *
-do_div(int nargs)
+do_intdiv(int nargs)
{
NODE *numerator, *denominator, *result;
double num, denom, quotient, remainder;
@@ -3608,7 +3771,7 @@ do_div(int nargs)
result = POP_PARAM();
if (result->type != Node_var_array)
- fatal(_("div: third argument is not an array"));
+ fatal(_("intdiv: third argument is not an array"));
assoc_clear(result);
denominator = POP_SCALAR();
@@ -3616,9 +3779,9 @@ do_div(int nargs)
if (do_lint) {
if ((numerator->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("div: received non-numeric first argument"));
+ lintwarn(_("intdiv: received non-numeric first argument"));
if ((denominator->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("div: received non-numeric second argument"));
+ lintwarn(_("intdiv: received non-numeric second argument"));
}
(void) force_number(numerator);
@@ -3627,7 +3790,7 @@ do_div(int nargs)
denom = double_to_int(get_number_d(denominator));
if (denom == 0.0)
- fatal(_("div: division by zero attempted"));
+ fatal(_("intdiv: division by zero attempted"));
quotient = double_to_int(num / denom);
/*
diff --git a/command.c b/command.c
index 2d4bc814..04d5e5f3 100644
--- a/command.c
+++ b/command.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2. */
+/* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.0.4"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
diff --git a/compile b/compile
index 531136b0..a85b723c 100755
--- a/compile
+++ b/compile
@@ -3,7 +3,7 @@
scriptversion=2012-10-14.11; # UTC
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
diff --git a/config.guess b/config.guess
index 4438cd70..dbfb9786 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-01-01'
+timestamp='2015-01-01'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -24,12 +24,12 @@ timestamp='2014-01-01'
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
#
-# Originally written by Per Bothner.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -149,7 +149,7 @@ Linux|GNU|GNU/*)
LIBC=gnu
#endif
EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
;;
esac
@@ -579,8 +579,9 @@ EOF
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
@@ -826,7 +827,7 @@ EOF
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
- i*:MSYS*:*)
+ *:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys
exit ;;
i*:windows32*:*)
@@ -969,10 +970,10 @@ EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
- or1k:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
exit ;;
- or32:Linux:*:*)
+ or32:Linux:*:* | or1k*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
@@ -1371,154 +1372,6 @@ EOF
exit ;;
esac
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
cat >&2 <<EOF
$0: unable to guess system type
diff --git a/config.sub b/config.sub
index 092cff00..6d2e94c8 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-01-01'
+timestamp='2015-01-01'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ timestamp='2014-01-01'
# of the GNU General Public License, version 3 ("GPLv3").
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -260,7 +260,7 @@ case $basic_machine in
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| epiphany \
- | fido | fr30 | frv \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -283,8 +283,10 @@ case $basic_machine in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
@@ -296,11 +298,11 @@ case $basic_machine in
| nds32 | nds32le | nds32be \
| nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
- | open8 \
- | or1k | or32 \
+ | open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
+ | riscv32 | riscv64 \
| rl78 | rx \
| score \
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
@@ -311,6 +313,7 @@ case $basic_machine in
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
| ubicom32 \
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
| we32k \
| x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
@@ -325,6 +328,9 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
@@ -402,8 +408,10 @@ case $basic_machine in
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
@@ -415,6 +423,7 @@ case $basic_machine in
| nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
+ | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -432,6 +441,7 @@ case $basic_machine in
| ubicom32-* \
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
| vax-* \
+ | visium-* \
| we32k-* \
| x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
@@ -769,6 +779,9 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+ ;;
m68knommu)
basic_machine=m68k-unknown
os=-linux
@@ -824,6 +837,10 @@ case $basic_machine in
basic_machine=powerpc-unknown
os=-morphos
;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
msdos)
basic_machine=i386-pc
os=-msdos
@@ -1369,14 +1386,14 @@ case $os in
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1594,9 +1611,6 @@ case $basic_machine in
mips*-*)
os=-elf
;;
- or1k-*)
- os=-elf
- ;;
or32-*)
os=-coff
;;
diff --git a/configh.in b/configh.in
index 301fa21a..f4309812 100644
--- a/configh.in
+++ b/configh.in
@@ -96,9 +96,6 @@
/* Define to 1 if you have the <libintl.h> header file. */
#undef HAVE_LIBINTL_H
-/* Define to 1 if you have the `m' library (-lm). */
-#undef HAVE_LIBM
-
/* Define to 1 if you have a fully functional readline library. */
#undef HAVE_LIBREADLINE
@@ -171,6 +168,9 @@
/* Define to 1 if you have the `setsid' function. */
#undef HAVE_SETSID
+/* Define to 1 if you have the `sigprocmask' function. */
+#undef HAVE_SIGPROCMASK
+
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
@@ -296,6 +296,9 @@
/* Define to 1 if you have the `usleep' function. */
#undef HAVE_USLEEP
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
/* Define to 1 if you have the <wchar.h> header file. */
#undef HAVE_WCHAR_H
diff --git a/configure b/configure
index d8b5e31f..def8a041 100755
--- a/configure
+++ b/configure
@@ -2592,7 +2592,7 @@ then
fi
-am__api_version='1.14'
+am__api_version='1.15'
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2793,8 +2793,8 @@ test "$program_suffix" != NONE &&
ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
@@ -2813,7 +2813,7 @@ else
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -3141,8 +3141,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)'
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}'
@@ -3203,6 +3203,7 @@ fi
+
# Check whether --with-whiny-user-strftime was given.
if test "${with_whiny_user_strftime+set}" = set; then :
withval=$with_whiny_user_strftime; if test "$withval" = yes
@@ -5836,16 +5837,12 @@ if test -f $srcdir/.developing
then
# add other debug flags as appropriate, save GAWKDEBUG for emergencies
CFLAGS="$CFLAGS -DARRAYDEBUG -DYYDEBUG -DLOCALEDEBUG"
- if grep dbug $srcdir/.developing
- then
- CFLAGS="$CFLAGS -DDBUG"
- LIBS="$LIBS dbug/libdbug.a"
- fi
+
# turn on compiler warnings if we're doing development
# enable debugging using macros also
if test "$GCC" = yes
then
- CFLAGS="$CFLAGS -Wall -fno-builtin -g3 -gdwarf-2"
+ CFLAGS="$CFLAGS -Wall -fno-builtin -g3"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -7515,36 +7512,42 @@ else
if test $am_cv_lib_iconv = yes; then
LIBS="$LIBS $LIBICONV"
fi
- if test "$cross_compiling" = yes; then :
-
- case "$host_os" in
- aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
- *) am_cv_func_iconv_works="guessing yes" ;;
- esac
-
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ if test "$cross_compiling" = yes; then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <iconv.h>
#include <string.h>
-int main ()
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+
+int
+main ()
{
- int result = 0;
+int result = 0;
/* Test against AIX 5.1 bug: Failures are not distinguishable from successful
returns. */
{
iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
if (cd_utf8_to_88591 != (iconv_t)(-1))
{
- static const char input[] = "\342\202\254"; /* EURO SIGN */
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
char buf[10];
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_utf8_to_88591,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res == 0)
result |= 1;
@@ -7557,14 +7560,14 @@ int main ()
iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
if (cd_ascii_to_88591 != (iconv_t)(-1))
{
- static const char input[] = "\263";
+ static ICONV_CONST char input[] = "\263";
char buf[10];
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_ascii_to_88591,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res == 0)
result |= 2;
@@ -7576,14 +7579,14 @@ int main ()
iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
if (cd_88591_to_utf8 != (iconv_t)(-1))
{
- static const char input[] = "\304";
+ static ICONV_CONST char input[] = "\304";
static char buf[2] = { (char)0xDE, (char)0xAD };
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = 1;
char *outptr = buf;
size_t outbytesleft = 1;
size_t res = iconv (cd_88591_to_utf8,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
result |= 4;
@@ -7596,14 +7599,14 @@ int main ()
iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
if (cd_88591_to_utf8 != (iconv_t)(-1))
{
- static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
char buf[50];
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_88591_to_utf8,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if ((int)res > 0)
result |= 8;
@@ -7623,17 +7626,20 @@ int main ()
&& iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
result |= 16;
return result;
+
+ ;
+ return 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
am_cv_func_iconv_works=yes
-else
- am_cv_func_iconv_works=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
+ test "$am_cv_func_iconv_works" = no || break
+ done
LIBS="$am_save_LIBS"
fi
@@ -9586,13 +9592,12 @@ fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmod in -lm" >&5
-$as_echo_n "checking for fmod in -lm... " >&6; }
-if ${ac_cv_lib_m_fmod+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fmod" >&5
+$as_echo_n "checking for library containing fmod... " >&6; }
+if ${ac_cv_search_fmod+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9611,33 +9616,44 @@ return fmod ();
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_fmod=yes
-else
- ac_cv_lib_m_fmod=no
+for ac_lib in '' m; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_fmod=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ conftest$ac_exeext
+ if ${ac_cv_search_fmod+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_fmod" >&5
-$as_echo "$ac_cv_lib_m_fmod" >&6; }
-if test "x$ac_cv_lib_m_fmod" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
+done
+if ${ac_cv_search_fmod+:} false; then :
- LIBS="-lm $LIBS"
+else
+ ac_cv_search_fmod=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fmod" >&5
+$as_echo "$ac_cv_search_fmod" >&6; }
+ac_res=$ac_cv_search_fmod
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for isinf in -lm" >&5
-$as_echo_n "checking for isinf in -lm... " >&6; }
-if ${ac_cv_lib_m_isinf+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing isinf" >&5
+$as_echo_n "checking for library containing isinf... " >&6; }
+if ${ac_cv_search_isinf+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9656,33 +9672,44 @@ return isinf ();
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_isinf=yes
-else
- ac_cv_lib_m_isinf=no
+for ac_lib in '' m; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_isinf=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ conftest$ac_exeext
+ if ${ac_cv_search_isinf+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_isinf" >&5
-$as_echo "$ac_cv_lib_m_isinf" >&6; }
-if test "x$ac_cv_lib_m_isinf" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
+done
+if ${ac_cv_search_isinf+:} false; then :
- LIBS="-lm $LIBS"
+else
+ ac_cv_search_isinf=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_isinf" >&5
+$as_echo "$ac_cv_search_isinf" >&6; }
+ac_res=$ac_cv_search_isinf
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ismod in -lm" >&5
-$as_echo_n "checking for ismod in -lm... " >&6; }
-if ${ac_cv_lib_m_ismod+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ismod" >&5
+$as_echo_n "checking for library containing ismod... " >&6; }
+if ${ac_cv_search_ismod+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9701,23 +9728,35 @@ return ismod ();
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_m_ismod=yes
-else
- ac_cv_lib_m_ismod=no
+for ac_lib in '' m; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_ismod=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ conftest$ac_exeext
+ if ${ac_cv_search_ismod+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_ismod" >&5
-$as_echo "$ac_cv_lib_m_ismod" >&6; }
-if test "x$ac_cv_lib_m_ismod" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
+done
+if ${ac_cv_search_ismod+:} false; then :
- LIBS="-lm $LIBS"
+else
+ ac_cv_search_ismod=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ismod" >&5
+$as_echo "$ac_cv_search_ismod" >&6; }
+ac_res=$ac_cv_search_ismod
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
fi
@@ -10284,9 +10323,10 @@ esac
for ac_func in atexit btowc fmod getgrent getgroups grantpt \
isascii iswctype iswlower iswupper mbrlen \
memcmp memcpy memcpy_ulong memmove memset \
- memset_ulong mkstemp posix_openpt setenv setlocale setsid snprintf strchr \
+ memset_ulong mkstemp posix_openpt setenv setlocale setsid sigprocmask \
+ snprintf strchr \
strerror strftime strcasecmp strncasecmp strcoll strtod strtoul \
- system tmpfile towlower towupper tzset usleep wcrtomb \
+ system tmpfile towlower towupper tzset usleep waitpid wcrtomb \
wcscoll wctype
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
diff --git a/configure.ac b/configure.ac
index 0b33b966..a6972ab2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
dnl
dnl configure.ac --- autoconf input file for gawk
dnl
-dnl Copyright (C) 1995-2014 the Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2015 the Free Software Foundation, Inc.
dnl
dnl This file is part of GAWK, the GNU implementation of the
dnl AWK Programming Language.
@@ -40,7 +40,7 @@ then
fi
AC_PREREQ(2.69)
-AM_INIT_AUTOMAKE([1.14 dist-xz dist-lzip])
+AM_INIT_AUTOMAKE([1.15 dist-xz dist-lzip])
AC_CONFIG_MACRO_DIR([m4])
@@ -88,16 +88,12 @@ if test -f $srcdir/.developing
then
# add other debug flags as appropriate, save GAWKDEBUG for emergencies
CFLAGS="$CFLAGS -DARRAYDEBUG -DYYDEBUG -DLOCALEDEBUG"
- if grep dbug $srcdir/.developing
- then
- CFLAGS="$CFLAGS -DDBUG"
- LIBS="$LIBS dbug/libdbug.a"
- fi
+
# turn on compiler warnings if we're doing development
# enable debugging using macros also
if test "$GCC" = yes
then
- CFLAGS="$CFLAGS -Wall -fno-builtin -g3 -gdwarf-2"
+ CFLAGS="$CFLAGS -Wall -fno-builtin -g3"
fi
AC_MSG_RESULT([yes])
else
@@ -131,7 +127,7 @@ AC_LANG([C])
dnl initialize GNU gettext
AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.19.3])
+AM_GNU_GETTEXT_VERSION([0.19.4])
AM_LANGINFO_CODESET
gt_LC_MESSAGES
@@ -258,9 +254,9 @@ AC_CHECK_FUNC(getaddrinfo, [AC_DEFINE(HAVE_GETADDRINFO, 1, [have getaddrinfo])],
[AC_DEFINE(HAVE_GETADDRINFO, 1,
[have getaddrinfo])])])
-AC_CHECK_LIB(m, fmod)
-AC_CHECK_LIB(m, isinf)
-AC_CHECK_LIB(m, ismod)
+AC_SEARCH_LIBS(fmod, m)
+AC_SEARCH_LIBS(isinf, m)
+AC_SEARCH_LIBS(ismod, m)
dnl Don't look for libsigsegv on OSF/1, gives us severe headaches
case $host_os in
osf1) : ;;
@@ -273,9 +269,10 @@ esac
AC_CHECK_FUNCS(atexit btowc fmod getgrent getgroups grantpt \
isascii iswctype iswlower iswupper mbrlen \
memcmp memcpy memcpy_ulong memmove memset \
- memset_ulong mkstemp posix_openpt setenv setlocale setsid snprintf strchr \
+ memset_ulong mkstemp posix_openpt setenv setlocale setsid sigprocmask \
+ snprintf strchr \
strerror strftime strcasecmp strncasecmp strcoll strtod strtoul \
- system tmpfile towlower towupper tzset usleep wcrtomb \
+ system tmpfile towlower towupper tzset usleep waitpid wcrtomb \
wcscoll wctype)
dnl this check is for both mbrtowc and the mbstate_t type, which is good
AC_FUNC_MBRTOWC
diff --git a/depcomp b/depcomp
index 31788017..fc98710e 100755
--- a/depcomp
+++ b/depcomp
@@ -3,7 +3,7 @@
scriptversion=2013-05-30.07; # UTC
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -251,6 +251,41 @@ hp)
exit 1
;;
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
xlc)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
diff --git a/dfa.c b/dfa.c
index 6d63acf8..2cfd30b6 100644
--- a/dfa.c
+++ b/dfa.c
@@ -1,5 +1,5 @@
/* dfa.c - deterministic extended regexp routines for GNU
- Copyright (C) 1988, 1998, 2000, 2002, 2004-2005, 2007-2014 Free Software
+ Copyright (C) 1988, 1998, 2000, 2002, 2004-2005, 2007-2015 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
diff --git a/dfa.h b/dfa.h
index 4eb42968..79027810 100644
--- a/dfa.h
+++ b/dfa.h
@@ -1,5 +1,5 @@
/* dfa.h - declarations for GNU deterministic regexp compiler
- Copyright (C) 1988, 1998, 2007, 2009-2014 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1998, 2007, 2009-2015 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 3f140317..0e88c869 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,205 @@
+2015-04-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in, gawk.1, awkcard.in: Name change: div() --> intdiv().
+
+2015-03-31 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Update discussion of calling built-in functions
+ indirectly. Small additional fix relating to rand(). Thanks
+ to Antonio Colombo.
+
+2015-03-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Minor edits.
+
+2015-03-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Minor fixes from Antonio Colombo and new exercise
+ in chapter 16.
+ * gawk.1: Minor edits.
+ * gawktexi.in: Edits in material on errno and retryable and get_file
+ API.
+
+2015-03-17 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawktexi.in: Modify inplace.awk to call inplace_end in BEGINFILE
+ and END instead of in ENDFILE. This way, actions in ENDFILE rules
+ will be redirected as expected.
+
+2015-03-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Turn "positive" into non-negative as appropriate.
+ Thanks to Nicholas Mills <nlmills@clemson.edu> for pointing out
+ the issue.
+
+2015-03-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Briefly describe that nonfatal I/O overrides
+ GAWK_SOCK_RETRIES, in the env var part and in the nonfatal I/O
+ part.
+
+2015-03-01 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Change quotes to @dfn for pseudorandom.
+ A last-minute O'Reilly fix.
+
+2015-02-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Update UPDATE-MONTH and copyright year.
+ Note that "the guide is definitive" quote is really
+ from "The Restaurant at the End of the Universe". Thanks
+ to Antonio Colombo for pointing this out.
+
+2015-02-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * texinfo.tex: Update to most current version.
+ * gawktexi.in: Minor edit to match an O'Reilly fix.
+ Add some FIXMEs to one day use @sup.
+
+2015-02-22 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Change 'div' to 'divisor' in some examples.
+ This future-proofs against a new function in master.
+ Thanks to Antonio Giovanni Colombo for the report.
+
+2015-02-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: More O'Reilly fixes. I think it's done!
+
+2015-02-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: More O'Reilly fixes.
+
+2015-02-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: A few minor formatting fixes to sync with O'Reilly
+ version.
+
+2015-02-13 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes. Through QC1 review.
+
+2015-02-11 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+
+2015-02-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Minor fixes, O'Reilly fixes.
+
+2015-02-09 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Restore a lost sentence. O'Reilly fixes.
+
+2015-02-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+ Make non-fatal i/o use "NONFATAL".
+
+2015-02-06 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+
+2015-02-04 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+ * gawktexi.in: Update various version-related bits of info.
+
+2015-02-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+
+2015-02-01 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: POSIX requirement that function parameters cannot
+ have the same name as a function is now --posix.
+ Restore indirectcall example.
+
+ More O'Reilly fixes.
+
+2015-01-30 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Document POSIX requirement that function parameters
+ cannot have the same name as a function. Fix indirectcall example.
+
+2015-01-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+ And still more. Also, fix @code --> @command in a number of places.
+
+2015-01-26 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+
+2015-01-25 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Fix a bad URL. And another one.
+ More O'Reilly fixes.
+
+2015-01-23 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+ (Glossary): Many new entries from Antonio Giovanni Colombo.
+
+2015-01-21 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+ Remove obsolete start/end of range indexing comments.
+
+2015-01-20 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: O'Reilly fixes.
+
+2015-01-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawkinet.texi: Fix capitalization in document title.
+ * gawktexi.in: Here we go again: Starting on more O'Reilly fixes.
+
+2014-12-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Add info that nonfatal I/O works with stdout and
+ stderr. Revise version info and what was added when.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawktexi.in: Improve get_file documentation.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawktexi.in: Replace "Retrying I/O" with "Retrying Input", since this
+ feature pertains to input, not output.
+
+2015-01-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawktexi.in: Document the get_file API function.
+
+2015-01-04 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawk.1: Document new features PROCINFO["errno"] and
+ PROCINFO["input", "RETRY"], and new getline return value of -2.
+ * gawktexi.in: Ditto.
+
+2014-12-26 Antonio Giovanni Colombo <azc100@gmail.com>
+
+ * gawktexi.in (Glossary): Really sort the items.
+
+2014-12-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Start documenting nonfatal output.
+
+2014-12-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Add one more paragraph to new foreword.
+ * gawktexi.in: Fix exponentiation in TeX mode. Thanks to
+ Marco Curreli by way of Antonio Giovanni Colombo.
+
+ * texinfo.tex: Updated.
+
+2014-12-12 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gawktexi.in: Minor fix.
+ Thanks to Teri Price <tjp212@lehigh.edu>.
+
2014-12-10 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: More minor fixes.
@@ -59,7 +261,7 @@
2014-10-17 Arnold D. Robbins <arnold@skeeve.com>
* gawktexi.in: Fix date in docbook attribution for new Foreword;
- thanks to Antonio Columbo for the catch. Update latest version
+ thanks to Antonio Colombo for the catch. Update latest version
of gettext.
2014-10-15 Arnold D. Robbins <arnold@skeeve.com>
diff --git a/doc/Makefile.in b/doc/Makefile.in
index a17000bc..68aacf48 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -38,7 +38,17 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -102,8 +112,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/mkinstalldirs texinfo.tex ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/gettext.m4 \
@@ -118,6 +126,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -213,6 +222,8 @@ man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(man_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \
+ ChangeLog texinfo.tex
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -394,7 +405,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -856,6 +866,8 @@ uninstall-man: uninstall-man1
uninstall-info-am uninstall-man uninstall-man1 \
uninstall-pdf-am uninstall-ps-am
+.PRECIOUS: Makefile
+
# Uncomment the following definition of AWKCARD if your troff can produce
# Postscript but still has troubles with macros from 'colors'. As this
diff --git a/doc/awkcard.in b/doc/awkcard.in
index 556bdc1e..2e455b2d 100644
--- a/doc/awkcard.in
+++ b/doc/awkcard.in
@@ -1609,11 +1609,11 @@ expand;
l lw(2i).
\*(CD\*(FCatan2(\*(FIy\*(FC, \*(FIx\*(FC)\*(FR The arctangent of \*(FIy/x\fP in radians.
\*(FCcos(\*(FIexpr\*(FC)\*(FR The cosine of \*(FIexpr\fP, which is in radians.
-\*(CB\*(FCdiv(\*(FIn\*(FR\*(FC,\*(FI d\*(FR\*(FC,\*(FI res\*(FR\*(FC)\*(FR T{
-Return the result of integer division in \*(FIres\*(FR.\*(CD
-T}
\*(FCexp(\*(FIexpr\*(FC)\*(FR The exponential function (\*(FIe \*(FC^ \*(FIx\*(FR).
\*(FCint(\*(FIexpr\*(FC)\*(FR Truncate to integer.
+\*(CB\*(FCintdiv(\*(FIn\*(FR\*(FC,\*(FI d\*(FR\*(FC,\*(FI res\*(FR\*(FC)\*(FR T{
+Return the result of integer division in \*(FIres\*(FR.\*(CD
+T}
\*(FClog(\*(FIexpr\*(FC)\*(FR The natural logarithm function (base \*(FIe\^\*(FR).
\*(FCrand()\fP A random number \*(FIN\fP such that 0 \(<= \*(FIN\fP < 1.
\*(FCsin(\*(FIexpr\*(FC)\*(FR The sine of \*(FIexpr\fP, which is in radians.
diff --git a/doc/gawk.1 b/doc/gawk.1
index 3d5d1812..cbc15d15 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -13,7 +13,7 @@
. if \w'\(rq' .ds rq "\(rq
. \}
.\}
-.TH GAWK 1 "Aug 03 2014" "Free Software Foundation" "Utility Commands"
+.TH GAWK 1 "Apr 02 2015" "Free Software Foundation" "Utility Commands"
.SH NAME
gawk \- pattern scanning and processing language
.SH SYNOPSIS
@@ -942,6 +942,15 @@ then
will contain
a string describing the error.
The value is subject to translation in non-English locales.
+If the string in
+.B ERRNO
+corresponds to a system error in the
+.IR errno (3)
+variable, then the numeric value can be found in
+.B PROCINFO["errno"].
+For non-system errors,
+.B PROCINFO["errno"]
+will be zero.
.TP
.B FIELDWIDTHS
A whitespace separated list of field widths. When set,
@@ -1103,6 +1112,13 @@ system call.
The default time format string for
.BR strftime() .
.TP
+\fBPROCINFO["errno"]\fP
+The value of
+.IR errno (3)
+when
+.BR ERRNO
+is set to the associated error message.
+.TP
\fBPROCINFO["euid"]\fP
The value of the
.IR geteuid (2)
@@ -1221,6 +1237,28 @@ where
is a redirection string or a filename. A value of zero or
less than zero means no timeout.
.TP
+\fBPROCINFO["input", "RETRY"]\fP
+If an I/O error that may be retried occurs when reading data from
+.IR input ,
+and this array entry exists, then
+.B getline
+will return \-2 instead of following the default behavior of returning \-1
+and configuring
+.IR input
+to return no further data.
+An I/O error that may be retried is one where
+.IR errno (3)
+has the value
+.IR EAGAIN ,
+.IR EWOULDBLOCK ,
+.IR EINTR ,
+or
+.IR ETIMEDOUT .
+This may be useful in conjunction with
+\fBPROCINFO["input", "READ_TIMEOUT"]\fP
+or situations where a file descriptor has been configured to behave in a
+non-blocking fashion.
+.TP
\fBPROCINFO["mpfr_version"]\fP
The version of the GNU MPFR library used for arbitrary precision
number support in
@@ -2289,6 +2327,13 @@ below.)
The
.B getline
command returns 1 on success, 0 on end of file, and \-1 on an error.
+If the
+.IR errno (3)
+value indicates that the I/O operation may be retried,
+and \fBPROCINFO["input", "RETRY"]\fP
+is set, then \-2 will be returned instead of \-1, and further calls to
+.B getline
+may be attempted.
Upon an error,
.B ERRNO
is set to a string describing the problem.
@@ -2635,7 +2680,13 @@ Return the cosine of
.IR expr ,
which is in radians.
.TP
-.BI div( num ", " denom ", " result )
+.BI exp( expr )
+The exponential function.
+.TP
+.BI int( expr )
+Truncate to integer.
+.TP
+.BI intdiv( num ", " denom ", " result )
Truncate
.I num
and
@@ -2652,12 +2703,6 @@ This is a
extension, primarily of value when working with
arbitrarily large integers.
.TP
-.BI exp( expr )
-The exponential function.
-.TP
-.BI int( expr )
-Truncate to integer.
-.TP
.BI log( expr )
The natural logarithm function.
.TP
diff --git a/doc/gawk.info b/doc/gawk.info
index bac9b228..685df45b 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -9,7 +9,7 @@ START-INFO-DIR-ENTRY
* awk: (gawk)Invoking gawk. Text scanning and processing.
END-INFO-DIR-ENTRY
- Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2014
+ Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2015
Free Software Foundation, Inc.
@@ -37,7 +37,7 @@ General Introduction
This file documents `awk', a program that you can use to select
particular records in a file and perform operations upon them.
- Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2014
+ Copyright (C) 1989, 1991, 1992, 1993, 1996-2005, 2007, 2009-2015
Free Software Foundation, Inc.
@@ -217,6 +217,7 @@ entitled "GNU Free Documentation License".
`getline'.
* Getline Summary:: Summary of `getline' Variants.
* Read Timeout:: Reading input with a timeout.
+* Retrying Input:: Retrying input after certain errors.
* Command-line directories:: What happens if you put a directory on
the command line.
* Input Summary:: Input summary.
@@ -246,6 +247,7 @@ entitled "GNU Free Documentation License".
* Special Caveats:: Things to watch out for.
* Close Files And Pipes:: Closing Input and Output Files and
Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -557,6 +559,7 @@ entitled "GNU Free Documentation License".
* Array Functions:: Functions for working with arrays.
* Flattening Arrays:: How to flatten arrays.
* Creating Arrays:: How to create and populate arrays.
+* Redirection API:: How to access and manipulate redirections.
* Extension API Variables:: Variables provided by the API.
* Extension Versioning:: API Version information.
* Extension API Informational Variables:: Variables providing information about
@@ -748,10 +751,10 @@ and associative arrays. Those looking for something new can try out
The programs in this book make clear that an AWK program is
typically much smaller and faster to develop than a counterpart written
-in C. Consequently, there is often a payoff to prototype an algorithm
-or design in AWK to get it running quickly and expose problems early.
-Often, the interpreted performance is adequate and the AWK prototype
-becomes the product.
+in C. Consequently, there is often a payoff to prototyping an
+algorithm or design in AWK to get it running quickly and expose
+problems early. Often, the interpreted performance is adequate and the
+AWK prototype becomes the product.
The new `pgawk' (profiling `gawk'), produces program execution
counts. I recently experimented with an algorithm that for n lines of
@@ -775,16 +778,16 @@ 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
+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
+ Learning to use a programming language is about 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
+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.
@@ -793,11 +796,14 @@ fast enough.
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'
+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
+Extensions::, has all the details, and, as expected, many examples to
help you learn the ins and outs.
+ I enjoy programming in AWK and had fun (re)reading this book. I
+think you will too.
+
Michael Brennan
Author of `mawk'
October 2014
@@ -831,7 +837,7 @@ So most of the time, we don't distinguish between `gawk' and other
* Validate data
- * Produce indexes and perform other document preparation tasks
+ * Produce indexes and perform other document-preparation tasks
* Experiment with algorithms that you can adapt later to other
computer languages
@@ -923,7 +929,7 @@ advice from Richard Stallman. John Woods contributed parts of the code
as well. In 1988 and 1989, David Trueman, with help from me,
thoroughly reworked `gawk' for compatibility with the newer `awk'.
Circa 1994, I became the primary maintainer. Current development
-focuses on bug fixes, performance improvements, standards compliance
+focuses on bug fixes, performance improvements, standards compliance,
and, occasionally, new features.
In May 1997, Ju"rgen Kahrs felt the need for network access from
@@ -935,10 +941,10 @@ the `gawk' distribution). His code finally became part of the main
John Haque rewrote the `gawk' internals, in the process providing an
`awk'-level debugger. This version became available as `gawk' version
-4.0, in 2011.
+4.0 in 2011.
- *Note Contributors::, for a full list of those who made important
-contributions to `gawk'.
+ *Note Contributors::, for a full list of those who have made
+important contributions to `gawk'.

File: gawk.info, Node: Names, Next: This Manual, Prev: History, Up: Preface
@@ -951,7 +957,7 @@ provided in *note Language History::. The language described in this
Info file is often referred to as "new `awk'." By analogy, the
original version of `awk' is referred to as "old `awk'."
- Today, on most systems, when you run the `awk' utility, you get some
+ On most current systems, when you run the `awk' utility you get some
version of new `awk'.(1) If your system's standard `awk' is the old
one, you will see something like this if you try the test program:
@@ -1011,9 +1017,9 @@ in *note Sample Programs::, should be of interest.
This Info file is split into several parts, as follows:
- * Part I describes the `awk' language and `gawk' program in detail.
- It starts with the basics, and continues through all of the
- features of `awk'. It contains the following chapters:
+ * Part I describes the `awk' language and the `gawk' program in
+ detail. It starts with the basics, and continues through all of
+ the features of `awk'. It contains the following chapters:
- *note Getting Started::, provides the essentials you need to
know to begin using `awk'.
@@ -1044,9 +1050,10 @@ in *note Sample Programs::, should be of interest.
`gawk' use.
- *note Arrays::, covers `awk''s one-and-only data structure:
- associative arrays. Deleting array elements and whole arrays
- is also described, as well as sorting arrays in `gawk'. It
- also describes how `gawk' provides arrays of arrays.
+ the associative array. Deleting array elements and whole
+ arrays is described, as well as sorting arrays in `gawk'.
+ The major node also describes how `gawk' provides arrays of
+ arrays.
- *note Functions::, describes the built-in functions `awk' and
`gawk' provide, as well as how to define your own functions.
@@ -1054,14 +1061,13 @@ in *note Sample Programs::, should be of interest.
indirectly.
* Part II shows how to use `awk' and `gawk' for problem solving.
- There is lots of code here for you to read and learn from. It
- contains the following chapters:
+ There is lots of code here for you to read and learn from. This
+ part contains the following chapters:
- - *note Library Functions::, which provides a number of
- functions meant to be used from main `awk' programs.
+ - *note Library Functions::, provides a number of functions
+ meant to be used from main `awk' programs.
- - *note Sample Programs::, which provides many sample `awk'
- programs.
+ - *note Sample Programs::, provides many sample `awk' programs.
Reading these two chapters allows you to see `awk' solving real
problems.
@@ -1093,7 +1099,7 @@ in *note Sample Programs::, should be of interest.
It contains the following appendices:
- *note Language History::, describes how the `awk' language
- has evolved since its first release to present. It also
+ has evolved since its first release to the present. It also
describes how `gawk' has acquired features over time.
- *note Installation::, describes how to get `gawk', how to
@@ -1110,7 +1116,7 @@ in *note Sample Programs::, should be of interest.
material for those who are completely unfamiliar with
computer programming.
- The *note Glossary::, defines most, if not all of, the
+ The *note Glossary::, defines most, if not all, of the
significant terms used throughout the Info file. If you find
terms that you aren't familiar with, try looking them up here.
@@ -1139,8 +1145,8 @@ node briefly documents the typographical conventions used in Texinfo.
common shell primary and secondary prompts, `$' and `>'. Input that
you type is shown `like this'. Output from the command is preceded by
the glyph "-|". This typically represents the command's standard
-output. Error messages, and other output on the command's standard
-error, are preceded by the glyph "error-->". For example:
+output. Error messages and other output on the command's standard
+error are preceded by the glyph "error-->". For example:
$ echo hi on stdout
-| hi on stdout
@@ -1152,7 +1158,7 @@ particular, there are special characters called "control characters."
These are characters that you type by holding down both the `CONTROL'
key and another key, at the same time. For example, a `Ctrl-d' is typed
by first pressing and holding the `CONTROL' key, next pressing the `d'
-key and finally releasing both keys.
+key, and finally releasing both keys.
For the sake of brevity, throughout this Info file, we refer to
Brian Kernighan's version of `awk' as "BWK `awk'." (*Note Other
@@ -1168,7 +1174,7 @@ Dark Corners
Until the POSIX standard (and `GAWK: Effective AWK Programming'),
many features of `awk' were either poorly documented or not documented
at all. Descriptions of such features (often called "dark corners")
-are noted in this Info file with "(d.c.)". They also appear in the
+are noted in this Info file with "(d.c.)." They also appear in the
index under the heading "dark corner."
But, as noted by the opening quote, any coverage of dark corners is
@@ -1191,8 +1197,8 @@ editor. GNU Emacs is the most widely used version of Emacs today.
The GNU(1) Project is an ongoing effort on the part of the Free
Software Foundation to create a complete, freely distributable,
-POSIX-compliant computing environment. The FSF uses the "GNU General
-Public License" (GPL) to ensure that their software's source code is
+POSIX-compliant computing environment. The FSF uses the GNU General
+Public License (GPL) to ensure that its software's source code is
always available to the end user. A copy of the GPL is included for
your reference (*note Copying::). The GPL applies to the C language
source code for `gawk'. To find out more about the FSF and the GNU
@@ -1220,26 +1226,26 @@ original, "old" version of `awk'.
I started working with that version in the fall of 1988. As work on
it progressed, the FSF published several preliminary versions (numbered
-0.X). In 1996, Edition 1.0 was released with `gawk' 3.0.0. The FSF
+0.X). In 1996, edition 1.0 was released with `gawk' 3.0.0. The FSF
published the first two editions under the title `The GNU Awk User's
Guide'.
This edition maintains the basic structure of the previous editions.
For FSF edition 4.0, the content was thoroughly reviewed and updated.
All references to `gawk' versions prior to 4.0 were removed. Of
-significant note for that edition was *note Debugger::.
+significant note for that edition was the addition of *note Debugger::.
For FSF edition 4.1, the content has been reorganized into parts,
and the major new additions are *note Arbitrary Precision Arithmetic::,
and *note Dynamic Extensions::.
This Info file will undoubtedly continue to evolve. If you find an
-error in this Info file, please report it! *Note Bugs::, for
+error in the Info file, please report it! *Note Bugs::, for
information on submitting problem reports electronically.
---------- Footnotes ----------
- (1) GNU stands for "GNU's not Unix."
+ (1) GNU stands for "GNU's Not Unix."
(2) The terminology "GNU/Linux" is explained in the *note Glossary::.
@@ -1283,7 +1289,7 @@ acknowledgments:
this manual. Jay Fenlason contributed many ideas and sample
programs. Richard Mlynarik and Robert Chassell gave helpful
comments on drafts of this manual. The paper `A Supplemental
- Document for `awk'' by John W. Pierce of the Chemistry Department
+ Document for AWK' by John W. Pierce of the Chemistry Department
at UC San Diego, pinpointed several issues relevant both to `awk'
implementation and to this manual, that would otherwise have
escaped us.
@@ -1296,7 +1302,7 @@ GNU Project.
acknowledgements:
The following people (in alphabetical order) provided helpful
- comments on various versions of this book, Rick Adams, Dr. Nelson
+ comments on various versions of this book: Rick Adams, Dr. Nelson
H.F. Beebe, Karl Berry, Dr. Michael Brennan, Rich Burridge, Claire
Cloutier, Diane Close, Scott Deifik, Christopher ("Topher") Eliot,
Jeffrey Friedl, Dr. Darrel Hankerson, Michal Jaegermann, Dr.
@@ -1305,7 +1311,7 @@ acknowledgements:
Robert J. Chassell provided much valuable advice on the use of
Texinfo. He also deserves special thanks for convincing me _not_
- to title this Info file `How To Gawk Politely'. Karl Berry helped
+ to title this Info file `How to Gawk Politely'. Karl Berry helped
significantly with the TeX part of Texinfo.
I would like to thank Marshall and Elaine Hartholz of Seattle and
@@ -1345,18 +1351,18 @@ of people. *Note Contributors::, for the full list.
Thanks to Michael Brennan for the Forewords.
Thanks to Patrice Dumas for the new `makeinfo' program. Thanks to
-Karl Berry who continues to work to keep the Texinfo markup language
+Karl Berry, who continues to work to keep the Texinfo markup language
sane.
Robert P.J. Day, Michael Brennan, and Brian Kernighan kindly acted as
reviewers for the 2015 edition of this Info file. Their feedback helped
improve the final work.
- I would like to thank Brian Kernighan for invaluable assistance
-during the testing and debugging of `gawk', and for ongoing help and
-advice in clarifying numerous points about the language. We could not
-have done nearly as good a job on either `gawk' or its documentation
-without his help.
+ I would also like to thank Brian Kernighan for his invaluable
+assistance during the testing and debugging of `gawk', and for his
+ongoing help and advice in clarifying numerous points about the
+language. We could not have done nearly as good a job on either `gawk'
+or its documentation without his help.
Brian is in a class by himself as a programmer and technical author.
I have to thank him (yet again) for his ongoing friendship and for
@@ -1372,6 +1378,12 @@ also must acknowledge my gratitude to G-d, for the many opportunities
He has sent my way, as well as for the gifts He has given me with which
to take advantage of those opportunities.
+
+Arnold Robbins
+Nof Ayalon
+Israel
+February 2015
+

File: gawk.info, Node: Getting Started, Next: Invoking Gawk, Prev: Preface, Up: Top
@@ -1399,10 +1411,10 @@ contain "function definitions", an advanced feature that we will ignore
for now; *note User-defined::). Each rule specifies one pattern to
search for and one action to perform upon finding the pattern.
- Syntactically, a rule consists of a pattern followed by an action.
-The action is enclosed in braces to separate it from the pattern.
-Newlines usually separate rules. Therefore, an `awk' program looks
-like this:
+ Syntactically, a rule consists of a "pattern" followed by an
+"action". The action is enclosed in braces to separate it from the
+pattern. Newlines usually separate rules. Therefore, an `awk' program
+looks like this:
PATTERN { ACTION }
PATTERN { ACTION }
@@ -1470,7 +1482,7 @@ program as the first argument of the `awk' command, like this:
awk 'PROGRAM' INPUT-FILE1 INPUT-FILE2 ...
-where PROGRAM consists of a series of PATTERNS and ACTIONS, as
+where PROGRAM consists of a series of patterns and actions, as
described earlier.
This command format instructs the "shell", or command interpreter,
@@ -1485,8 +1497,8 @@ programs from shell scripts, because it avoids the need for a separate
file for the `awk' program. A self-contained shell script is more
reliable because there are no other files to misplace.
- Later in this chapter, *note Very Simple::, presents several short,
-self-contained programs.
+ Later in this chapter, in *note Very Simple::, we'll see examples of
+several short, self-contained programs.

File: gawk.info, Node: Read Terminal, Next: Long, Prev: One-shot, Up: Running gawk
@@ -1501,7 +1513,7 @@ following command line:
`awk' applies the PROGRAM to the "standard input", which usually means
whatever you type on the keyboard. This continues until you indicate
-end-of-file by typing `Ctrl-d'. (On other operating systems, the
+end-of-file by typing `Ctrl-d'. (On non-POSIX operating systems, the
end-of-file character may be different. For example, on OS/2, it is
`Ctrl-z'.)
@@ -1576,10 +1588,9 @@ that are provided on the `awk' command line. (Also, placing the
program in a file allows us to use a literal single quote in the program
text, instead of the magic `\47'.)
- If you want to clearly identify your `awk' program files as such,
-you can add the extension `.awk' to the file name. This doesn't affect
-the execution of the `awk' program but it does make "housekeeping"
-easier.
+ If you want to clearly identify an `awk' program file as such, you
+can add the extension `.awk' to the file name. This doesn't affect the
+execution of the `awk' program but it does make "housekeeping" easier.

File: gawk.info, Node: Executable Scripts, Next: Comments, Prev: Long, Up: Running gawk
@@ -1708,7 +1719,7 @@ at a later time.

File: gawk.info, Node: Quoting, Prev: Comments, Up: Running gawk
-1.1.6 Shell-Quoting Issues
+1.1.6 Shell Quoting Issues
--------------------------
* Menu:
@@ -1803,7 +1814,7 @@ shell quoting tricks, like this:
-| Here is a single quote <'>
This program consists of three concatenated quoted strings. The first
-and the third are single quoted, the second is double quoted.
+and the third are single-quoted, and the second is double-quoted.
This can be "simplified" to:
@@ -1830,8 +1841,7 @@ like so:
$ awk 'BEGIN { print "Here is a double quote <\42>" }'
-| Here is a double quote <">
-This works nicely, except that you should comment clearly what the
-escapes mean.
+This works nicely, but you should comment clearly what the escapes mean.
A fourth option is to use command-line variable assignment, like
this:
@@ -1840,11 +1850,11 @@ this:
-| Here is a single quote <'>
(Here, the two string constants and the value of `sq' are
-concatenated into a single string which is printed by `print'.)
+concatenated into a single string that is printed by `print'.)
If you really need both single and double quotes in your `awk'
program, it is probably best to move it into a separate file, where the
-shell won't be part of the picture, and you can say what you mean.
+shell won't be part of the picture and you can say what you mean.

File: gawk.info, Node: DOS Quoting, Up: Quoting
@@ -1867,7 +1877,7 @@ file surrounded by double quotes:

File: gawk.info, Node: Sample Data Files, Next: Very Simple, Prev: Running gawk, Up: Getting Started
-1.2 Data Files for the Examples
+1.2 Data files for the Examples
===============================
Many of the examples in this Info file take their input from two sample
@@ -1902,7 +1912,7 @@ of green crates shipped, the number of red boxes shipped, the number of
orange bags shipped, and the number of blue packages shipped,
respectively. There are 16 entries, covering the 12 months of last year
and the first four months of the current year. An empty line separates
-the data for the two years.
+the data for the two years:
Jan 13 25 15 115
Feb 15 32 24 226
@@ -1934,7 +1944,7 @@ File: gawk.info, Node: Very Simple, Next: Two Rules, Prev: Sample Data Files,
The following command runs a simple `awk' program that searches the
input file `mail-list' for the character string `li' (a grouping of
characters is usually called a "string"; the term "string" is based on
-similar usage in English, such as "a string of pearls," or "a string of
+similar usage in English, such as "a string of pearls" or "a string of
cars in a train"):
awk '/li/ { print $0 }' mail-list
@@ -1970,24 +1980,25 @@ prints all lines matching the pattern `li'. By comparison, omitting
the `print' statement but retaining the braces makes an empty action
that does nothing (i.e., no lines are printed).
- Many practical `awk' programs are just a line or two. Following is a
-collection of useful, short programs to get you started. Some of these
-programs contain constructs that haven't been covered yet. (The
-description of the program will give you a good idea of what is going
-on, but you'll need to read the rest of the Info file to become an
-`awk' expert!) Most of the examples use a data file named `data'.
-This is just a placeholder; if you use these programs yourself,
-substitute your own file names for `data'. For future reference, note
-that there is often more than one way to do things in `awk'. At some
-point, you may want to look back at these examples and see if you can
-come up with different ways to do the same things shown here:
+ Many practical `awk' programs are just a line or two long.
+Following is a collection of useful, short programs to get you started.
+Some of these programs contain constructs that haven't been covered
+yet. (The description of the program will give you a good idea of what
+is going on, but you'll need to read the rest of the Info file to
+become an `awk' expert!) Most of the examples use a data file named
+`data'. This is just a placeholder; if you use these programs
+yourself, substitute your own file names for `data'. For future
+reference, note that there is often more than one way to do things in
+`awk'. At some point, you may want to look back at these examples and
+see if you can come up with different ways to do the same things shown
+here:
* Print every line that is longer than 80 characters:
awk 'length($0) > 80' data
- The sole rule has a relational expression as its pattern and it
- has no action--so it uses the default action, printing the record.
+ The sole rule has a relational expression as its pattern and has no
+ action--so it uses the default action, printing the record.
* Print the length of the longest input line:
@@ -2042,8 +2053,8 @@ come up with different ways to do the same things shown here:
awk 'NR % 2 == 0' data
- If you use the expression `NR % 2 == 1' instead, the program would
- print the odd-numbered lines.
+ If you used the expression `NR % 2 == 1' instead, the program
+ would print the odd-numbered lines.

File: gawk.info, Node: Two Rules, Next: More Complex, Prev: Very Simple, Up: Getting Started
@@ -2276,9 +2287,10 @@ built-in functions for working with timestamps, performing bit
manipulation, for runtime string translation (internationalization),
determining the type of a variable, and array sorting.
- As we develop our presentation of the `awk' language, we introduce
-most of the variables and many of the functions. They are described
-systematically in *note Built-in Variables::, and in *note Built-in::.
+ As we develop our presentation of the `awk' language, we will
+introduce most of the variables and many of the functions. They are
+described systematically in *note Built-in Variables::, and in *note
+Built-in::.

File: gawk.info, Node: When, Next: Intro Summary, Prev: Other Features, Up: Getting Started
@@ -2343,7 +2355,7 @@ File: gawk.info, Node: Intro Summary, Prev: When, Up: Getting Started
* You may use backslash continuation to continue a source line.
Lines are automatically continued after a comma, open brace,
- question mark, colon, `||', `&&', `do' and `else'.
+ question mark, colon, `||', `&&', `do', and `else'.

File: gawk.info, Node: Invoking Gawk, Next: Regexp, Prev: Getting Started, Up: Top
@@ -2410,8 +2422,8 @@ File: gawk.info, Node: Options, Next: Other Arguments, Prev: Command Line, U
Options begin with a dash and consist of a single character. GNU-style
long options consist of two dashes and a keyword. The keyword can be
abbreviated, as long as the abbreviation allows the option to be
-uniquely identified. If the option takes an argument, then the keyword
-is either immediately followed by an equals sign (`=') and the
+uniquely identified. If the option takes an argument, either the
+keyword is immediately followed by an equals sign (`=') and the
argument's value, or the keyword and the argument's value are separated
by whitespace. If a particular option with a value is given more than
once, it is the last value that counts.
@@ -2426,10 +2438,10 @@ The following list describes options mandated by the POSIX standard:
`-f SOURCE-FILE'
`--file SOURCE-FILE'
- Read `awk' program source from SOURCE-FILE instead of in the first
- nonoption argument. This option may be given multiple times; the
- `awk' program consists of the concatenation of the contents of
- each specified SOURCE-FILE.
+ Read the `awk' program source from SOURCE-FILE instead of in the
+ first nonoption argument. This option may be given multiple
+ times; the `awk' program consists of the concatenation of the
+ contents of each specified SOURCE-FILE.
`-v VAR=VAL'
`--assign VAR=VAL'
@@ -2470,7 +2482,7 @@ The following list describes options mandated by the POSIX standard:
`-b'
`--characters-as-bytes'
Cause `gawk' to treat all input data as single-byte characters.
- In addition, all output written with `print' or `printf' are
+ In addition, all output written with `print' or `printf' is
treated as single-byte characters.
Normally, `gawk' follows the POSIX standard and attempts to process
@@ -2478,7 +2490,7 @@ The following list describes options mandated by the POSIX standard:
This can often involve converting multibyte characters into wide
characters (internally), and can lead to problems or confusion if
the input data does not contain valid multibyte characters. This
- option is an easy way to tell `gawk': "hands off my data!".
+ option is an easy way to tell `gawk', "Hands off my data!"
`-c'
`--traditional'
@@ -2513,7 +2525,7 @@ The following list describes options mandated by the POSIX standard:
default, the debugger reads commands interactively from the
keyboard (standard input). The optional FILE argument allows you
to specify a file with a list of commands for the debugger to
- execute non-interactively. No space is allowed between the `-D'
+ execute noninteractively. No space is allowed between the `-D'
and FILE, if FILE is supplied.
`-e' PROGRAM-TEXT
@@ -2548,23 +2560,23 @@ The following list describes options mandated by the POSIX standard:
`-g'
`--gen-pot'
- Analyze the source program and generate a GNU `gettext' Portable
- Object Template file on standard output for all string constants
+ Analyze the source program and generate a GNU `gettext' portable
+ object template file on standard output for all string constants
that have been marked for translation. *Note
Internationalization::, for information about this option.
`-h'
`--help'
- Print a "usage" message summarizing the short and long style
+ Print a "usage" message summarizing the short- and long-style
options that `gawk' accepts and then exit.
`-i' SOURCE-FILE
`--include' SOURCE-FILE
Read an `awk' source library from SOURCE-FILE. This option is
completely equivalent to using the `@include' directive inside
- your program. This option is very similar to the `-f' option, but
- there are two important differences. First, when `-i' is used,
- the program source is not loaded if it has been previously loaded,
+ your program. It is very similar to the `-f' option, but there
+ are two important differences. First, when `-i' is used, the
+ program source is not loaded if it has been previously loaded,
whereas with `-f', `gawk' always loads the file. Second, because
this option is intended to be used with code libraries, `gawk'
does not recognize such files as constituting main program input.
@@ -2626,7 +2638,7 @@ The following list describes options mandated by the POSIX standard:
`-o'[FILE]
`--pretty-print'[`='FILE]
- Enable pretty-printing of `awk' programs. By default, output
+ Enable pretty-printing of `awk' programs. By default, the output
program is created in a file named `awkprof.out' (*note
Profiling::). The optional FILE argument allows you to specify a
different file name for the output. No space is allowed between
@@ -2732,7 +2744,7 @@ input as a source of data.)
Because it is clumsy using the standard `awk' mechanisms to mix
source file and command-line `awk' programs, `gawk' provides the `-e'
-option. This does not require you to pre-empt the standard input for
+option. This does not require you to preempt the standard input for
your source code; it allows you to easily mix command-line and library
source code (*note AWKPATH Variable::). As with `-f', the `-e' and `-i'
options may also be used multiple times on the command line.
@@ -2891,7 +2903,7 @@ implementations, you must supply a precise pathname for each program
file, unless the file is in the current directory. But with `gawk', if
the file name supplied to the `-f' or `-i' options does not contain a
directory separator `/', then `gawk' searches a list of directories
-(called the "search path"), one by one, looking for a file with the
+(called the "search path") one by one, looking for a file with the
specified name.
The search path is a string consisting of directory names separated by
@@ -2924,9 +2936,9 @@ or by placing two colons next to each other [`::'].)
Different past versions of `gawk' would also look explicitly in
the current directory, either before or after the path search. As
- of version 4.1.2, this no longer happens, and if you wish to look
- in the current directory, you must include `.' either as a separate
- entry, or as a null entry in the search path.
+ of version 4.1.2, this no longer happens; if you wish to look in
+ the current directory, you must include `.' either as a separate
+ entry or as a null entry in the search path.
The default value for `AWKPATH' is `.:/usr/local/share/awk'.(2)
Since `.' is included at the beginning, `gawk' searches first in the
@@ -3004,7 +3016,8 @@ used by regular users:
`GAWK_SOCK_RETRIES'
Controls the number of times `gawk' attempts to retry a two-way
TCP/IP (socket) connection before giving up. *Note TCP/IP
- Networking::.
+ Networking::. Note that when nonfatal I/O is enabled (*note
+ Nonfatal::), `gawk' only tries to open a TCP/IP socket once.
`POSIXLY_CORRECT'
Causes `gawk' to switch to POSIX-compatibility mode, disabling all
@@ -3038,7 +3051,7 @@ change. The variables are:
If this variable exists, `gawk' includes the file name and line
number within the `gawk' source code from which warning and/or
fatal messages are generated. Its purpose is to help isolate the
- source of a message, as there are multiple places which produce the
+ source of a message, as there are multiple places that produce the
same warning or error message.
`GAWK_NO_DFA'
@@ -3054,16 +3067,16 @@ change. The variables are:
evaluation stack, when needed.
`INT_CHAIN_MAX'
- The intended maximum number of items `gawk' will maintain on a
- hash chain for managing arrays indexed by integers.
+ This specifies intended maximum number of items `gawk' will
+ maintain on a hash chain for managing arrays indexed by integers.
`STR_CHAIN_MAX'
- The intended maximum number of items `gawk' will maintain on a
- hash chain for managing arrays indexed by strings.
+ This specifies intended maximum number of items `gawk' will
+ maintain on a hash chain for managing arrays indexed by strings.
`TIDYMEM'
If this variable exists, `gawk' uses the `mtrace()' library calls
- from GNU LIBC to help track down possible memory leaks.
+ from the GNU C library to help track down possible memory leaks.

File: gawk.info, Node: Exit Status, Next: Include Files, Prev: Environment Variables, Up: Invoking Gawk
@@ -3095,11 +3108,11 @@ This minor node describes a feature that is specific to `gawk'.
files. This gives you the ability to split large `awk' source files
into smaller, more manageable pieces, and also lets you reuse common
`awk' code from various `awk' scripts. In other words, you can group
-together `awk' functions, used to carry out specific tasks, into
-external files. These files can be used just like function libraries,
-using the `@include' keyword in conjunction with the `AWKPATH'
-environment variable. Note that source files may also be included
-using the `-i' option.
+together `awk' functions used to carry out specific tasks into external
+files. These files can be used just like function libraries, using the
+`@include' keyword in conjunction with the `AWKPATH' environment
+variable. Note that source files may also be included using the `-i'
+option.
Let's see an example. We'll start with two (trivial) `awk' scripts,
namely `test1' and `test2'. Here is the `test1' script:
@@ -3161,11 +3174,11 @@ Variable::) apply to `@include' also.
This is very helpful in constructing `gawk' function libraries. If
you have a large script with useful, general-purpose `awk' functions,
you can break it down into library files and put those files in a
-special directory. You can then include those "libraries," using
-either the full pathnames of the files, or by setting the `AWKPATH'
+special directory. You can then include those "libraries," either by
+using the full pathnames of the files, or by setting the `AWKPATH'
environment variable accordingly and then using `@include' with just
-the file part of the full pathname. Of course, you can have more than
-one directory to keep library files; the more complex the working
+the file part of the full pathname. Of course, you can keep library
+files in more than one directory; the more complex the working
environment is, the more directories you may need to organize the files
to be included.
@@ -3177,8 +3190,8 @@ particular, `@include' is very useful for writing CGI scripts to be run
from web pages.
As mentioned in *note AWKPATH Variable::, the current directory is
-always searched first for source files, before searching in `AWKPATH',
-and this also applies to files named with `@include'.
+always searched first for source files, before searching in `AWKPATH';
+this also applies to files named with `@include'.

File: gawk.info, Node: Loading Shared Libraries, Next: Obsolete, Prev: Include Files, Up: Invoking Gawk
@@ -3223,8 +3236,8 @@ File: gawk.info, Node: Obsolete, Next: Undocumented, Prev: Loading Shared Lib
====================================
This minor node describes features and/or command-line options from
-previous releases of `gawk' that are either not available in the
-current version or that are still supported but deprecated (meaning that
+previous releases of `gawk' that either are not available in the
+current version or are still supported but deprecated (meaning that
they will _not_ be in the next release).
The process-related special files `/dev/pid', `/dev/ppid',
@@ -3252,7 +3265,7 @@ File: gawk.info, Node: Invoking Summary, Prev: Undocumented, Up: Invoking Gaw
run `awk'.
* The three standard options for all versions of `awk' are `-f',
- `-F' and `-v'. `gawk' supplies these and many others, as well as
+ `-F', and `-v'. `gawk' supplies these and many others, as well as
corresponding GNU-style long options.
* Nonoption command-line arguments are usually treated as file names,
@@ -3282,7 +3295,7 @@ File: gawk.info, Node: Invoking Summary, Prev: Undocumented, Up: Invoking Gaw
* `gawk' allows you to load additional functions written in C or C++
using the `@load' statement and/or the `-l' option. (This
- advanced feature is described later on in *note Dynamic
+ advanced feature is described later, in *note Dynamic
Extensions::.)

@@ -3431,7 +3444,7 @@ sequences apply to both string constants and regexp constants:
Horizontal TAB, `Ctrl-i', ASCII code 9 (HT).
`\v'
- Vertical tab, `Ctrl-k', ASCII code 11 (VT).
+ Vertical TAB, `Ctrl-k', ASCII code 11 (VT).
`\NNN'
The octal value NNN, where NNN stands for 1 to 3 digits between
@@ -3450,8 +3463,8 @@ sequences apply to both string constants and regexp constants:
would continue incorporating hexadecimal digits into the
value until a non-hexadecimal digit or the end of the string
was encountered. However, using more than two hexadecimal
- digits produced undefined results. As of version *FIXME:*
- 4.3.0, only two digits are processed.
+ digits produced undefined results. As of version 4.2, only
+ two digits are processed.
`\/'
A literal slash (necessary for regexp constants only). This
@@ -3481,7 +3494,7 @@ normally be a regexp operator. For example, `/a\+b/' matches the three
characters `a+b'.
For complete portability, do not use a backslash before any
-character not shown in the previous list and that is not an operator.
+character not shown in the previous list or that is not an operator.
Backslash Before Regular Characters
@@ -3543,7 +3556,7 @@ and converted into corresponding real characters as the very first step
in processing regexps.
Here is a list of metacharacters. All characters that are not escape
-sequences and that are not listed in the following stand for themselves:
+sequences and that are not listed here stand for themselves:
`\'
This suppresses the special meaning of a character when matching.
@@ -3626,7 +3639,7 @@ sequences and that are not listed in the following stand for themselves:
There are two subtle points to understand about how `*' works.
First, the `*' applies only to the single preceding regular
expression component (e.g., in `ph*', it applies just to the `h').
- To cause `*' to apply to a larger sub-expression, use parentheses:
+ To cause `*' to apply to a larger subexpression, use parentheses:
`(ph)*' matches `ph', `phph', `phphph', and so on.
Second, `*' finds as many repetitions as possible. If the text to
@@ -3657,10 +3670,10 @@ sequences and that are not listed in the following stand for themselves:
Matches `whhhy', but not `why' or `whhhhy'.
`wh{3,5}y'
- Matches `whhhy', `whhhhy', or `whhhhhy', only.
+ Matches `whhhy', `whhhhy', or `whhhhhy' only.
`wh{2,}y'
- Matches `whhy' or `whhhy', and so on.
+ Matches `whhy', `whhhy', and so on.
Interval expressions were not traditionally available in `awk'.
They were added as part of the POSIX standard to make `awk' and
@@ -3762,7 +3775,7 @@ Class Meaning
`[:print:]' Printable characters (characters that are not control
characters)
`[:punct:]' Punctuation characters (characters that are not letters,
- digits control characters, or space characters)
+ digits, control characters, or space characters)
`[:space:]' Space characters (such as space, TAB, and formfeed, to name
a few)
`[:upper:]' Uppercase alphabetic characters
@@ -3800,8 +3813,9 @@ Collating symbols
Equivalence classes
Locale-specific names for a list of characters that are equal. The
name is enclosed between `[=' and `=]'. For example, the name `e'
- might be used to represent all of "e," "e`," and "e'." In this
- case, `[[=e=]]' is a regexp that matches any of `e', `e'', or `e`'.
+ might be used to represent all of "e," "e^," "e`," and "e'." In
+ this case, `[[=e=]]' is a regexp that matches any of `e', `e^',
+ `e'', or `e`'.
These features are very valuable in non-English-speaking locales.
@@ -3823,7 +3837,7 @@ Consider the following:
This example uses the `sub()' function to make a change to the input
record. (`sub()' replaces the first instance of any text matched by
the first argument with the string provided as the second argument;
-*note String Functions::). Here, the regexp `/a+/' indicates "one or
+*note String Functions::.) Here, the regexp `/a+/' indicates "one or
more `a' characters," and the replacement text is `<A>'.
The input contains four `a' characters. `awk' (and POSIX) regular
@@ -3860,15 +3874,16 @@ regexp":
This sets `digits_regexp' to a regexp that describes one or more digits,
and tests whether the input record matches this regexp.
- NOTE: When using the `~' and `!~' operators, there is a difference
- between a regexp constant enclosed in slashes and a string
- constant enclosed in double quotes. If you are going to use a
- string constant, you have to understand that the string is, in
- essence, scanned _twice_: the first time when `awk' reads your
+ NOTE: When using the `~' and `!~' operators, be aware that there
+ is a difference between a regexp constant enclosed in slashes and
+ a string constant enclosed in double quotes. If you are going to
+ use a string constant, you have to understand that the string is,
+ in essence, scanned _twice_: the first time when `awk' reads your
program, and the second time when it goes to match the string on
the lefthand side of the operator with the pattern on the right.
This is true of any string-valued expression (such as
- `digits_regexp', shown previously), not just string constants.
+ `digits_regexp', shown in the previous example), not just string
+ constants.
What difference does it make if the string is scanned twice? The
answer has to do with escape sequences, and particularly with
@@ -3965,7 +3980,7 @@ letters, digits, or underscores (`_'):
`\B'
Matches the empty string that occurs between two word-constituent
- characters. For example, `/\Brat\B/' matches `crate' but it does
+ characters. For example, `/\Brat\B/' matches `crate', but it does
not match `dirty rat'. `\B' is essentially the opposite of `\y'.
There are two other operators that work on buffers. In Emacs, a
@@ -3974,10 +3989,10 @@ letters, digits, or underscores (`_'):
operators are:
`\`'
- Matches the empty string at the beginning of a buffer (string).
+ Matches the empty string at the beginning of a buffer (string)
`\''
- Matches the empty string at the end of a buffer (string).
+ Matches the empty string at the end of a buffer (string)
Because `^' and `$' always work in terms of the beginning and end of
strings, these operators don't add any new capabilities for `awk'.
@@ -4148,7 +4163,7 @@ one line. Each record is automatically split into chunks called
parts of a record.
On rare occasions, you may need to use the `getline' command. The
-`getline' command is valuable, both because it can do explicit input
+`getline' command is valuable both because it can do explicit input
from any number of files, and because the files used with it do not
have to be named on the `awk' command line (*note Getline::).
@@ -4165,6 +4180,7 @@ have to be named on the `awk' command line (*note Getline::).
* Getline:: Reading files under explicit program control
using the `getline' function.
* Read Timeout:: Reading input with a timeout.
+* Retrying Input:: Retrying input after certain errors.
* Command-line directories:: What happens if you put a directory on the
command line.
* Input Summary:: Input summary.
@@ -4197,8 +4213,8 @@ File: gawk.info, Node: awk split records, Next: gawk split records, Up: Recor
Records are separated by a character called the "record separator". By
default, the record separator is the newline character. This is why
-records are, by default, single lines. A different character can be
-used for the record separator by assigning the character to the
+records are, by default, single lines. To use a different character
+for the record separator, simply assign that character to the
predefined variable `RS'.
Like any other variable, the value of `RS' can be changed in the
@@ -4213,14 +4229,14 @@ BEGIN/END::). For example:
awk 'BEGIN { RS = "u" }
{ print $0 }' mail-list
-changes the value of `RS' to `u', before reading any input. This is a
-string whose first character is the letter "u"; as a result, records
-are separated by the letter "u." Then the input file is read, and the
-second rule in the `awk' program (the action with no pattern) prints
-each record. Because each `print' statement adds a newline at the end
-of its output, this `awk' program copies the input with each `u'
-changed to a newline. Here are the results of running the program on
-`mail-list':
+changes the value of `RS' to `u', before reading any input. The new
+value is a string whose first character is the letter "u"; as a result,
+records are separated by the letter "u". Then the input file is read,
+and the second rule in the `awk' program (the action with no pattern)
+prints each record. Because each `print' statement adds a newline at
+the end of its output, this `awk' program copies the input with each
+`u' changed to a newline. Here are the results of running the program
+on `mail-list':
$ awk 'BEGIN { RS = "u" }
> { print $0 }' mail-list
@@ -4268,11 +4284,11 @@ data file (*note Sample Data Files::), the line looks like this:
Bill 555-1675 bill.drowning@hotmail.com A
-It contains no `u' so there is no reason to split the record, unlike
-the others which have one or more occurrences of the `u'. In fact,
-this record is treated as part of the previous record; the newline
-separating them in the output is the original newline in the data file,
-not the one added by `awk' when it printed the record!
+It contains no `u', so there is no reason to split the record, unlike
+the others, which each have one or more occurrences of the `u'. In
+fact, this record is treated as part of the previous record; the
+newline separating them in the output is the original newline in the
+data file, not the one added by `awk' when it printed the record!
Another way to change the record separator is on the command line,
using the variable-assignment feature (*note Other Arguments::):
@@ -4338,8 +4354,8 @@ part of either record.
character. However, when `RS' is a regular expression, `RT' contains
the actual input text that matched the regular expression.
- If the input file ended without any text that matches `RS', `gawk'
-sets `RT' to the null string.
+ If the input file ends without any text matching `RS', `gawk' sets
+`RT' to the null string.
The following example illustrates both of these features. It sets
`RS' equal to a regular expression that matches either a newline or a
@@ -4437,12 +4453,12 @@ to these pieces of the record. You don't have to use them--you can
operate on the whole record if you want--but fields are what make
simple `awk' programs so powerful.
- You use a dollar-sign (`$') to refer to a field in an `awk' program,
+ You use a dollar sign (`$') to refer to a field in an `awk' program,
followed by the number of the field you want. Thus, `$1' refers to the
-first field, `$2' to the second, and so on. (Unlike the Unix shells,
-the field numbers are not limited to single digits. `$127' is the
-127th field in the record.) For example, suppose the following is a
-line of input:
+first field, `$2' to the second, and so on. (Unlike in the Unix
+shells, the field numbers are not limited to single digits. `$127' is
+the 127th field in the record.) For example, suppose the following is
+a line of input:
This seems like a pretty nice example.
@@ -4459,10 +4475,9 @@ as `$7', which is `example.'. If you try to reference a field beyond
the last one (such as `$8' when the record has only seven fields), you
get the empty string. (If used in a numeric operation, you get zero.)
- The use of `$0', which looks like a reference to the "zero-th"
-field, is a special case: it represents the whole input record. Use it
-when you are not interested in specific fields. Here are some more
-examples:
+ The use of `$0', which looks like a reference to the "zeroth" field,
+is a special case: it represents the whole input record. Use it when
+you are not interested in specific fields. Here are some more examples:
$ awk '$1 ~ /li/ { print $0 }' mail-list
-| Amelia 555-5553 amelia.zodiacusque@gmail.com F
@@ -4510,8 +4525,8 @@ is another example of using expressions as field numbers:
awk '{ print $(2*2) }' mail-list
`awk' evaluates the expression `(2*2)' and uses its value as the
-number of the field to print. The `*' sign represents multiplication,
-so the expression `2*2' evaluates to four. The parentheses are used so
+number of the field to print. The `*' represents multiplication, so
+the expression `2*2' evaluates to four. The parentheses are used so
that the multiplication is done before the `$' operation; they are
necessary whenever there is a binary operator(1) in the field-number
expression. This example, then, prints the type of relationship (the
@@ -4535,7 +4550,7 @@ field number.
---------- Footnotes ----------
(1) A "binary operator", such as `*' for multiplication, is one that
-takes two operands. The distinction is required, because `awk' also has
+takes two operands. The distinction is required because `awk' also has
unary (one-operand) and ternary (three-operand) operators.

@@ -4657,7 +4672,7 @@ value of `NF' and recomputes `$0'. (d.c.) Here is an example:
decremented.
Finally, there are times when it is convenient to force `awk' to
-rebuild the entire record, using the current value of the fields and
+rebuild the entire record, using the current values of the fields and
`OFS'. To do this, use the seemingly innocuous assignment:
$1 = $1 # force record to be reconstituted
@@ -4677,7 +4692,7 @@ built-in function that updates `$0', such as `sub()' and `gsub()'
It is important to remember that `$0' is the _full_ record, exactly
as it was read from the input. This includes any leading or trailing
whitespace, and the exact whitespace (or other characters) that
-separate the fields.
+separates the fields.
It is a common error to try to change the field separators in a
record simply by setting `FS' and `OFS', and then expecting a plain
@@ -4745,7 +4760,7 @@ attached, such as:
John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
-The same program would extract `*LXIX', instead of `*29*Oak*St.'. If
+The same program would extract `*LXIX' instead of `*29*Oak*St.'. If
you were expecting the program to print the address, you would be
surprised. The moral is to choose your data layout and separator
characters carefully to prevent such problems. (If the data is not in
@@ -4944,11 +4959,11 @@ your field and record separators.
Perhaps the most common use of a single character as the field
separator occurs when processing the Unix system password file. On
many Unix systems, each user has a separate entry in the system
-password file, one line per user. The information in these lines is
-separated by colons. The first field is the user's login name and the
-second is the user's encrypted or shadow password. (A shadow password
-is indicated by the presence of a single `x' in the second field.) A
-password file entry might look like this:
+password file, with one line per user. The information in these lines
+is separated by colons. The first field is the user's login name and
+the second is the user's encrypted or shadow password. (A shadow
+password is indicated by the presence of a single `x' in the second
+field.) A password file entry might look like this:
arnold:x:2076:10:Arnold Robbins:/home/arnold:/bin/bash
@@ -4976,15 +4991,14 @@ When you do this, `$1' is the same as `$0'.
According to the POSIX standard, `awk' is supposed to behave as if
each record is split into fields at the time it is read. In
particular, this means that if you change the value of `FS' after a
-record is read, the value of the fields (i.e., how they were split)
+record is read, the values of the fields (i.e., how they were split)
should reflect the old value of `FS', not the new one.
However, many older implementations of `awk' do not work this way.
Instead, they defer splitting the fields until a field is actually
referenced. The fields are split using the _current_ value of `FS'!
(d.c.) This behavior can be difficult to diagnose. The following
-example illustrates the difference between the two methods. (The
-`sed'(2) command prints just the first line of `/etc/passwd'.)
+example illustrates the difference between the two methods:
sed 1q /etc/passwd | awk '{ FS = ":" ; print $1 }'
@@ -4997,6 +5011,8 @@ first line of the file, something like:
root:x:0:0:Root:/:
+ (The `sed'(2) command prints just the first line of `/etc/passwd'.)
+
---------- Footnotes ----------
(1) Thanks to Andrew Schorr for this tip.
@@ -5087,9 +5103,9 @@ the built-in variable `FIELDWIDTHS'. Each number specifies the width
of the field, _including_ columns between fields. If you want to
ignore the columns between fields, you can specify the width as a
separate field that is subsequently ignored. It is a fatal error to
-supply a field width that is not a positive number. The following data
-is the output of the Unix `w' utility. It is useful to illustrate the
-use of `FIELDWIDTHS':
+supply a field width that has a negative value. The following data is
+the output of the Unix `w' utility. It is useful to illustrate the use
+of `FIELDWIDTHS':
10:06pm up 21 days, 14:04, 23 users
User tty login idle JCPU PCPU what
@@ -5150,7 +5166,7 @@ run on a system with card readers is another story!)
splitting again. Use `FS = FS' to make this happen, without having to
know the current value of `FS'. In order to tell which kind of field
splitting is in effect, use `PROCINFO["FS"]' (*note Auto-set::). The
-value is `"FS"' if regular field splitting is being used, or it is
+value is `"FS"' if regular field splitting is being used, or
`"FIELDWIDTHS"' if fixed-width field splitting is being used:
if (PROCINFO["FS"] == "FS")
@@ -5183,10 +5199,10 @@ what they are, and not by what they are not.
The most notorious such case is so-called "comma-separated values"
(CSV) data. Many spreadsheet programs, for example, can export their
data into text files, where each record is terminated with a newline,
-and fields are separated by commas. If only commas separated the data,
+and fields are separated by commas. If commas only separated the data,
there wouldn't be an issue. The problem comes when one of the fields
contains an _embedded_ comma. In such cases, most programs embed the
-field in double quotes.(1) So we might have data like this:
+field in double quotes.(1) So, we might have data like this:
Robbins,Arnold,"1234 A Pretty Street, NE",MyTown,MyState,12345-6789,USA
@@ -5253,9 +5269,9 @@ being used.
provides an elegant solution for the majority of cases, and the
`gawk' developers are satisfied with that.
- As written, the regexp used for `FPAT' requires that each field have
-a least one character. A straightforward modification (changing
-changed the first `+' to `*') allows fields to be empty:
+ As written, the regexp used for `FPAT' requires that each field
+contain at least one character. A straightforward modification
+(changing the first `+' to `*') allows fields to be empty:
FPAT = "([^,]*)|(\"[^\"]+\")"
@@ -5263,9 +5279,8 @@ changed the first `+' to `*') allows fields to be empty:
available for splitting regular strings (*note String Functions::).
To recap, `gawk' provides three independent methods to split input
-records into fields. `gawk' uses whichever mechanism was last chosen
-based on which of the three variables--`FS', `FIELDWIDTHS', and
-`FPAT'--was last assigned to.
+records into fields. The mechanism used is based on which of the three
+variables--`FS', `FIELDWIDTHS', or `FPAT'--was last assigned to.
---------- Footnotes ----------
@@ -5303,7 +5318,7 @@ empty; lines that contain only whitespace do not count.)
`"\n\n+"' to `RS'. This regexp matches the newline at the end of the
record and one or more blank lines after the record. In addition, a
regular expression always matches the longest possible sequence when
-there is a choice (*note Leftmost Longest::). So the next record
+there is a choice (*note Leftmost Longest::). So, the next record
doesn't start until the first nonblank line that follows--no matter how
many blank lines appear in a row, they are considered one record
separator.
@@ -5315,12 +5330,12 @@ last record, the final newline is removed from the record. In the
second case, this special processing is not done. (d.c.)
Now that the input is separated into records, the second step is to
-separate the fields in the record. One way to do this is to divide each
-of the lines into fields in the normal manner. This happens by default
-as the result of a special feature. When `RS' is set to the empty
-string, _and_ `FS' is set to a single character, the newline character
-_always_ acts as a field separator. This is in addition to whatever
-field separations result from `FS'.(1)
+separate the fields in the records. One way to do this is to divide
+each of the lines into fields in the normal manner. This happens by
+default as the result of a special feature. When `RS' is set to the
+empty string _and_ `FS' is set to a single character, the newline
+character _always_ acts as a field separator. This is in addition to
+whatever field separations result from `FS'.(1)
The original motivation for this special exception was probably to
provide useful behavior in the default case (i.e., `FS' is equal to
@@ -5328,17 +5343,17 @@ provide useful behavior in the default case (i.e., `FS' is equal to
newline character to separate fields, because there is no way to
prevent it. However, you can work around this by using the `split()'
function to break up the record manually (*note String Functions::).
-If you have a single character field separator, you can work around the
+If you have a single-character field separator, you can work around the
special feature in a different way, by making `FS' into a regexp for
that single character. For example, if the field separator is a
percent character, instead of `FS = "%"', use `FS = "[%]"'.
Another way to separate fields is to put each field on a separate
line: to do this, just set the variable `FS' to the string `"\n"'.
-(This single character separator matches a single newline.) A
+(This single-character separator matches a single newline.) A
practical example of a data file organized this way might be a mailing
-list, where each entry is separated by blank lines. Consider a mailing
-list in a file named `addresses', which looks like this:
+list, where blank lines separate the entries. Consider a mailing list
+in a file named `addresses', which looks like this:
Jane Doe
123 Main Street
@@ -5421,7 +5436,7 @@ File: gawk.info, Node: Getline, Next: Read Timeout, Prev: Multiple Line, Up:
So far we have been getting our input data from `awk''s main input
stream--either the standard input (usually your keyboard, sometimes the
-output from another program) or from the files specified on the command
+output from another program) or the files specified on the command
line. The `awk' language has a special built-in command called
`getline' that can be used to read input under your explicit control.
@@ -5438,6 +5453,11 @@ record, such as a file that cannot be opened, then `getline' returns
-1. In this case, `gawk' sets the variable `ERRNO' to a string
describing the error that occurred.
+ If `ERRNO' indicates that the I/O operation may be retried, and
+`PROCINFO["INPUT", "RETRY"]' is set, then `getline' returns -2 instead
+of -1, and further calls to `getline' may be attemped. *Note Retrying
+Input::, for further information about this feature.
+
In the following examples, COMMAND stands for a string value that
represents a shell command.
@@ -5559,7 +5579,7 @@ and produces these results:
free
The `getline' command used in this way sets only the variables `NR',
-`FNR', and `RT' (and of course, VAR). The record is not split into
+`FNR', and `RT' (and, of course, VAR). The record is not split into
fields, so the values of the fields (including `$0') and the value of
`NF' do not change.
@@ -5569,8 +5589,8 @@ File: gawk.info, Node: Getline/File, Next: Getline/Variable/File, Prev: Getli
4.9.3 Using `getline' from a File
---------------------------------
-Use `getline < FILE' to read the next record from FILE. Here FILE is a
-string-valued expression that specifies the file name. `< FILE' is
+Use `getline < FILE' to read the next record from FILE. Here, FILE is
+a string-valued expression that specifies the file name. `< FILE' is
called a "redirection" because it directs input to come from a
different place. For example, the following program reads its input
record from the file `secondary.input' when it encounters a first field
@@ -5706,8 +5726,8 @@ all `awk' implementations.
treatment of a construct like `"echo " "date" | getline'. Most
versions, including the current version, treat it at as `("echo "
"date") | getline'. (This is also how BWK `awk' behaves.) Some
- versions changed and treated it as `"echo " ("date" | getline)'.
- (This is how `mawk' behaves.) In short, _always_ use explicit
+ versions instead treat it as `"echo " ("date" | getline)'. (This
+ is how `mawk' behaves.) In short, _always_ use explicit
parentheses, and then you won't have to worry.

@@ -5743,15 +5763,16 @@ File: gawk.info, Node: Getline/Coprocess, Next: Getline/Variable/Coprocess, P
4.9.7 Using `getline' from a Coprocess
--------------------------------------
-Input into `getline' from a pipe is a one-way operation. The command
-that is started with `COMMAND | getline' only sends data _to_ your
-`awk' program.
+Reading input into `getline' from a pipe is a one-way operation. The
+command that is started with `COMMAND | getline' only sends data _to_
+your `awk' program.
On occasion, you might want to send data to another program for
processing and then read the results back. `gawk' allows you to start
a "coprocess", with which two-way communications are possible. This is
done with the `|&' operator. Typically, you write data to the
-coprocess first and then read results back, as shown in the following:
+coprocess first and then read the results back, as shown in the
+following:
print "SOME QUERY" |& "db_server"
"db_server" |& getline
@@ -5813,7 +5834,7 @@ in mind:
files. (d.c.) (See *note BEGIN/END::; also *note Auto-set::.)
* Using `FILENAME' with `getline' (`getline < FILENAME') is likely
- to be a source for confusion. `awk' opens a separate input stream
+ to be a source of confusion. `awk' opens a separate input stream
from the current input file. However, by not using a variable,
`$0' and `NF' are still updated. If you're doing this, it's
probably by accident, and you should reconsider what it is you're
@@ -5821,15 +5842,15 @@ in mind:
* *note Getline Summary::, presents a table summarizing the
`getline' variants and which variables they can affect. It is
- worth noting that those variants which do not use redirection can
+ worth noting that those variants that do not use redirection can
cause `FILENAME' to be updated if they cause `awk' to start
reading a new input file.
* If the variable being assigned is an expression with side effects,
different versions of `awk' behave differently upon encountering
end-of-file. Some versions don't evaluate the expression; many
- versions (including `gawk') do. Here is an example, due to Duncan
- Moore:
+ versions (including `gawk') do. Here is an example, courtesy of
+ Duncan Moore:
BEGIN {
system("echo 1 > f")
@@ -5837,8 +5858,8 @@ in mind:
print c
}
- Here, the side effect is the `++c'. Is `c' incremented if end of
- file is encountered, before the element in `a' is assigned?
+ Here, the side effect is the `++c'. Is `c' incremented if
+ end-of-file is encountered before the element in `a' is assigned?
`gawk' treats `getline' like a function call, and evaluates the
expression `a[++c]' before attempting to read from `f'. However,
@@ -5873,7 +5894,7 @@ VAR
Table 4.1: `getline' variants and what they set

-File: gawk.info, Node: Read Timeout, Next: Command-line directories, Prev: Getline, Up: Reading Files
+File: gawk.info, Node: Read Timeout, Next: Retrying Input, Prev: Getline, Up: Reading Files
4.10 Reading Input with a Timeout
=================================
@@ -5882,8 +5903,8 @@ This minor node describes a feature that is specific to `gawk'.
You may specify a timeout in milliseconds for reading input from the
keyboard, a pipe, or two-way communication, including TCP/IP sockets.
-This can be done on a per input, command, or connection basis, by
-setting a special element in the `PROCINFO' array (*note Auto-set::):
+This can be done on a per-input, per-command, or per-connection basis,
+by setting a special element in the `PROCINFO' array (*note Auto-set::):
PROCINFO["input_name", "READ_TIMEOUT"] = TIMEOUT IN MILLISECONDS
@@ -5907,7 +5928,7 @@ for more than five seconds:
print $0
`gawk' terminates the read operation if input does not arrive after
-waiting for the timeout period, returns failure and sets `ERRNO' to an
+waiting for the timeout period, returns failure, and sets `ERRNO' to an
appropriate string value. A negative or zero value for the timeout is
the same as specifying no timeout at all.
@@ -5915,7 +5936,7 @@ the same as specifying no timeout at all.
implicit loop that reads input records and matches them against
patterns, like so:
- $ gawk 'BEGIN { PROCINFO["-", "READ_TIMEOUT"] = 5000 }
+ $ gawk 'BEGIN { PROCINFO["-", "READ_TIMEOUT"] = 5000 }
> { print "You entered: " $0 }'
gawk
-| You entered: gawk
@@ -5947,12 +5968,13 @@ input to arrive:
environment variable exists, `gawk' uses its value to initialize the
timeout value. The exclusive use of the environment variable to
specify timeout has the disadvantage of not being able to control it on
-a per command or connection basis.
+a per-command or per-connection basis.
`gawk' considers a timeout event to be an error even though the
attempt to read from the underlying device may succeed in a later
attempt. This is a limitation, and it also means that you cannot use
-this to multiplex input from two or more sources.
+this to multiplex input from two or more sources. *Note Retrying
+Input::, for a way to enable later I/O attempts to succeed.
Assigning a timeout value prevents read operations from blocking
indefinitely. But bear in mind that there are other ways `gawk' can
@@ -5967,9 +5989,36 @@ writing.
(1) This assumes that standard input is the keyboard.

-File: gawk.info, Node: Command-line directories, Next: Input Summary, Prev: Read Timeout, Up: Reading Files
+File: gawk.info, Node: Retrying Input, Next: Command-line directories, Prev: Read Timeout, Up: Reading Files
+
+4.11 Retrying Reads After Certain Input Errors
+==============================================
+
+This minor node describes a feature that is specific to `gawk'.
+
+ When `gawk' encounters an error while reading input, by default
+`getline' returns -1, and subsequent attempts to read from that file
+result in an end-of-file indication. However, you may optionally
+instruct `gawk' to allow I/O to be retried when certain errors are
+encountered by setting a special element in the `PROCINFO' array (*note
+Auto-set::):
+
+ PROCINFO["INPUT_NAME", "RETRY"] = 1
+
+ When this element exists, `gawk' checks the value of the system (C
+language) `errno' variable when an I/O error occurs. If `errno'
+indicates a subsequent I/O attempt may succeed, `getline' instead
+returns -2 and further calls to `getline' may succeed. This applies to
+the `errno' values `EAGAIN', `EWOULDBLOCK', `EINTR', or `ETIMEDOUT'.
+
+ This feature is useful in conjunction with `PROCINFO["INPUT_NAME",
+"READ_TIMEOUT"]' or situations where a file descriptor has been
+configured to behave in a non-blocking fashion.
+
+
+File: gawk.info, Node: Command-line directories, Next: Input Summary, Prev: Retrying Input, Up: Reading Files
-4.11 Directories on the Command Line
+4.12 Directories on the Command Line
====================================
According to the POSIX standard, files named on the `awk' command line
@@ -5992,7 +6041,7 @@ usable data from an `awk' program.

File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command-line directories, Up: Reading Files
-4.12 Summary
+4.13 Summary
============
* Input is split into records based on the value of `RS'. The
@@ -6015,7 +6064,7 @@ File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command-li
* `gawk' sets `RT' to the text matched by `RS'.
* After splitting the input into records, `awk' further splits the
- record into individual fields, named `$1', `$2', and so on. `$0'
+ records into individual fields, named `$1', `$2', and so on. `$0'
is the whole record, and `NF' indicates how many fields there are.
The default way to split fields is between whitespace characters.
@@ -6029,19 +6078,21 @@ File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command-li
* Field splitting is more complicated than record splitting:
- Field separator value Fields are split ... `awk' /
- `gawk'
+ Field separator value Fields are split ... `awk' /
+ `gawk'
----------------------------------------------------------------------
- `FS == " "' On runs of whitespace `awk'
- `FS == ANY SINGLE On that character `awk'
- CHARACTER'
- `FS == REGEXP' On text matching the regexp `awk'
- `FS == ""' Each individual character is `gawk'
- a separate field
- `FIELDWIDTHS == LIST OF Based on character position `gawk'
- COLUMNS'
- `FPAT == REGEXP' On the text surrounding text `gawk'
- matching the regexp
+ `FS == " "' On runs of whitespace `awk'
+ `FS == ANY SINGLE On that character `awk'
+ CHARACTER'
+ `FS == REGEXP' On text matching the `awk'
+ regexp
+ `FS == ""' Such that each individual `gawk'
+ character is a separate
+ field
+ `FIELDWIDTHS == LIST OF Based on character `gawk'
+ COLUMNS' position
+ `FPAT == REGEXP' On the text surrounding `gawk'
+ text matching the regexp
* Using `FS = "\n"' causes the entire record to be a single field
(assuming that newlines separate records).
@@ -6051,12 +6102,11 @@ File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command-li
* Use `PROCINFO["FS"]' to see how fields are being split.
- * Use `getline' in its various forms to read additional records,
- from the default input stream, from a file, or from a pipe or
- coprocess.
+ * Use `getline' in its various forms to read additional records from
+ the default input stream, from a file, or from a pipe or coprocess.
- * Use `PROCINFO[FILE, "READ_TIMEOUT"]' to cause reads to timeout for
- FILE.
+ * Use `PROCINFO[FILE, "READ_TIMEOUT"]' to cause reads to time out
+ for FILE.
* Directories on the command line are fatal for standard `awk';
`gawk' ignores them if not in POSIX mode.
@@ -6065,7 +6115,7 @@ File: gawk.info, Node: Input Summary, Next: Input Exercises, Prev: Command-li

File: gawk.info, Node: Input Exercises, Prev: Input Summary, Up: Reading Files
-4.13 Exercises
+4.14 Exercises
==============
1. Using the `FIELDWIDTHS' variable (*note Constant Size::), write a
@@ -6116,6 +6166,7 @@ function.
`gawk' allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@@ -6150,7 +6201,7 @@ you will probably get an error. Keep in mind that a space is printed
between any two items.
Note that the `print' statement is a statement and not an
-expression--you can't use it in the pattern part of a PATTERN-ACTION
+expression--you can't use it in the pattern part of a pattern-action
statement, for example.

@@ -6298,7 +6349,7 @@ File: gawk.info, Node: OFMT, Next: Printf, Prev: Output Separators, Up: Prin
===========================================
When printing numeric values with the `print' statement, `awk'
-internally converts the number to a string of characters and prints
+internally converts each number to a string of characters and prints
that string. `awk' uses the `sprintf()' function to do this conversion
(*note String Functions::). For now, it suffices to say that the
`sprintf()' function accepts a "format specification" that tells it how
@@ -6353,7 +6404,7 @@ A simple `printf' statement looks like this:
As for `print', the entire list of arguments may optionally be enclosed
in parentheses. Here too, the parentheses are necessary if any of the
-item expressions use the `>' relational operator; otherwise, it can be
+item expressions uses the `>' relational operator; otherwise, it can be
confused with an output redirection (*note Redirection::).
The difference between `printf' and `print' is the FORMAT argument.
@@ -6380,7 +6431,7 @@ statements. For example:
> }'
-| Don't Panic!
-Here, neither the `+' nor the `OUCH!' appear in the output message.
+Here, neither the `+' nor the `OUCH!' appears in the output message.

File: gawk.info, Node: Control Letters, Next: Format Modifiers, Prev: Basic Printf, Up: Printf
@@ -6419,7 +6470,7 @@ width. Here is a list of the format-control letters:
(The `%i' specification is for compatibility with ISO C.)
`%e', `%E'
- Print a number in scientific (exponential) notation; for example:
+ Print a number in scientific (exponential) notation. For example:
printf "%4.3e\n", 1950
@@ -6444,7 +6495,7 @@ width. Here is a list of the format-control letters:
Math Definitions::).
`%F'
- Like `%f' but the infinity and "not a number" values are spelled
+ Like `%f', but the infinity and "not a number" values are spelled
using uppercase letters.
The `%F' format is a POSIX extension to ISO C; not all systems
@@ -6513,7 +6564,7 @@ which they may appear:
messages at runtime. *Note Printf Ordering::, which describes how
and why to use positional specifiers. For now, we ignore them.
-`- (Minus)'
+`-' (Minus)
The minus sign, used before the width modifier (see later on in
this list), says to left-justify the argument within its specified
width. Normally, the argument is printed right-justified in the
@@ -6523,7 +6574,7 @@ which they may appear:
prints `foo*'.
-`SPACE'
+SPACE
For numeric conversions, prefix positive values with a space and
negative values with a minus sign.
@@ -6568,7 +6619,7 @@ which they may appear:
programs. For information on appropriate quoting tricks, see
*note Quoting::.
-`WIDTH'
+WIDTH
This is a number specifying the desired minimum width of a field.
Inserting any number between the `%' sign and the format-control
character forces the field to expand to this width. The default
@@ -6638,7 +6689,7 @@ string, like so:
s = "abcdefg"
printf "%" w "." p "s\n", s
-This is not particularly easy to read but it does work.
+This is not particularly easy to read, but it does work.
C programmers may be used to supplying additional modifiers (`h',
`j', `l', `L', `t', and `z') in `printf' format strings. These are not
@@ -6677,7 +6728,7 @@ an aligned two-column table of names and phone numbers, as shown here:
-| Jean-Paul 555-2127
In this case, the phone numbers had to be printed as strings because
-the numbers are separated by a dash. Printing the phone numbers as
+the numbers are separated by dashes. Printing the phone numbers as
numbers would have produced just the first three digits: `555'. This
would have been pretty confusing.
@@ -6725,7 +6776,7 @@ output, usually the screen. Both `print' and `printf' can also send
their output to other places. This is called "redirection".
NOTE: When `--sandbox' is specified (*note Options::), redirecting
- output to files, pipes and coprocesses is disabled.
+ output to files, pipes, and coprocesses is disabled.
A redirection appears after the `print' or `printf' statement.
Redirections in `awk' are written just like redirections in shell
@@ -6765,7 +6816,7 @@ work identically for `printf':
Each output file contains one name or number per line.
`print ITEMS >> OUTPUT-FILE'
- This redirection prints the items into the pre-existing output file
+ This redirection prints the items into the preexisting output file
named OUTPUT-FILE. The difference between this and the single-`>'
redirection is that the old contents (if any) of OUTPUT-FILE are
not erased. Instead, the `awk' output is appended to the file.
@@ -6813,8 +6864,8 @@ work identically for `printf':
`print ITEMS |& COMMAND'
This redirection prints the items to the input of COMMAND. The
difference between this and the single-`|' redirection is that the
- output from COMMAND can be read with `getline'. Thus COMMAND is a
- "coprocess", which works together with, but subsidiary to, the
+ output from COMMAND can be read with `getline'. Thus, COMMAND is
+ a "coprocess", which works together with but is subsidiary to the
`awk' program.
This feature is a `gawk' extension, and is not available in POSIX
@@ -6838,7 +6889,7 @@ a file, and then to use `>>' for subsequent output:
This is indeed how redirections must be used from the shell. But in
`awk', it isn't necessary. In this kind of case, a program should use
`>' for all the `print' statements, because the output file is only
-opened once. (It happens that if you mix `>' and `>>' that output is
+opened once. (It happens that if you mix `>' and `>>' output is
produced in the expected order. However, mixing the operators for the
same file is definitely poor style, and is confusing to readers of your
program.)
@@ -6871,14 +6922,14 @@ command lines to be fed to the shell.

File: gawk.info, Node: Special FD, Next: Special Files, Prev: Redirection, Up: Printing
-5.7 Special Files for Standard Pre-Opened Data Streams
-======================================================
+5.7 Special Files for Standard Preopened Data Streams
+=====================================================
Running programs conventionally have three input and output streams
already available to them for reading and writing. These are known as
the "standard input", "standard output", and "standard error output".
-These open streams (and any other open file or pipe) are often referred
-to by the technical term "file descriptors".
+These open streams (and any other open files or pipes) are often
+referred to by the technical term "file descriptors".
These streams are, by default, connected to your keyboard and
screen, but they are often redirected with the shell, via the `<', `<<',
@@ -6903,7 +6954,7 @@ error messages to the screen, like this:
(`/dev/tty' is a special file supplied by the operating system that is
connected to your keyboard and screen. It represents the "terminal,"(1)
which on modern systems is a keyboard and screen, not a serial console.)
-This generally has the same effect but not always: although the
+This generally has the same effect, but not always: although the
standard error stream is usually the screen, it can be redirected; when
that happens, writing to the screen is not correct. In fact, if `awk'
is run from a background job, it may not have a terminal at all. Then
@@ -6930,7 +6981,7 @@ becomes:
print "Serious error detected!" > "/dev/stderr"
- Note the use of quotes around the file name. Like any other
+ Note the use of quotes around the file name. Like with any other
redirection, the value must be a string. It is a common error to omit
the quotes, which leads to confusing results.
@@ -6946,7 +6997,7 @@ option (*note Options::).

File: gawk.info, Node: Special Files, Next: Close Files And Pipes, Prev: Special FD, Up: Printing
-5.8 Special File Names in `gawk'
+5.8 Special File names in `gawk'
================================
Besides access to standard input, standard output, and standard error,
@@ -6963,7 +7014,7 @@ there are special file names reserved for TCP/IP networking.

File: gawk.info, Node: Other Inherited Files, Next: Special Network, Up: Special Files
-5.8.1 Accessing Other Open Files With `gawk'
+5.8.1 Accessing Other Open Files with `gawk'
--------------------------------------------
Besides the `/dev/stdin', `/dev/stdout', and `/dev/stderr' special file
@@ -7007,13 +7058,13 @@ mentioned here only for completeness. Full discussion is delayed until

File: gawk.info, Node: Special Caveats, Prev: Special Network, Up: Special Files
-5.8.3 Special File Name Caveats
+5.8.3 Special File name Caveats
-------------------------------
Here are some things to bear in mind when using the special file names
that `gawk' provides:
- * Recognition of the file names for the three standard pre-opened
+ * Recognition of the file names for the three standard preopened
files is disabled only in POSIX mode.
* Recognition of the other special file names is disabled if `gawk'
@@ -7022,14 +7073,14 @@ that `gawk' provides:
* `gawk' _always_ interprets these special file names. For example,
using `/dev/fd/4' for output actually writes on file descriptor 4,
- and not on a new file descriptor that is `dup()''ed from file
+ and not on a new file descriptor that is `dup()'ed from file
descriptor 4. Most of the time this does not matter; however, it
is important to _not_ close any of the files related to file
descriptors 0, 1, and 2. Doing so results in unpredictable
behavior.

-File: gawk.info, Node: Close Files And Pipes, Next: Output Summary, Prev: Special Files, Up: Printing
+File: gawk.info, Node: Close Files And Pipes, Next: Nonfatal, Prev: Special Files, Up: Printing
5.9 Closing Input and Output Redirections
=========================================
@@ -7182,8 +7233,8 @@ closing input or output files, respectively. This value is zero if the
close succeeds, or -1 if it fails.
The POSIX standard is very vague; it says that `close()' returns
-zero on success and nonzero otherwise. In general, different
-implementations vary in what they report when closing pipes; thus the
+zero on success and a nonzero value otherwise. In general, different
+implementations vary in what they report when closing pipes; thus, the
return value cannot be used portably. (d.c.) In POSIX mode (*note
Options::), `gawk' just returns zero when closing a pipe.
@@ -7198,9 +7249,68 @@ call. See the system manual pages for information on how to decode this
value.

-File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Close Files And Pipes, Up: Printing
+File: gawk.info, Node: Nonfatal, Next: Output Summary, Prev: Close Files And Pipes, Up: Printing
-5.10 Summary
+5.10 Enabling Nonfatal Output
+=============================
+
+This minor node describes a `gawk'-specific feature.
+
+ In standard `awk', output with `print' or `printf' to a nonexistent
+file, or some other I/O error (such as filling up the disk) is a fatal
+error.
+
+ $ gawk 'BEGIN { print "hi" > "/no/such/file" }'
+ error--> gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No such file or directory)
+
+ `gawk' makes it possible to detect that an error has occurred,
+allowing you to possibly recover from the error, or at least print an
+error message of your choosing before exiting. You can do this in one
+of two ways:
+
+ * For all output files, by assigning any value to
+ `PROCINFO["NONFATAL"]'.
+
+ * On a per-file basis, by assigning any value to `PROCINFO[FILENAME,
+ "NONFATAL"]'. Here, FILENAME is the name of the file to which you
+ wish output to be nonfatal.
+
+ Once you have enabled nonfatal output, you must check `ERRNO' after
+every relevant `print' or `printf' statement to see if something went
+wrong. It is also a good idea to initialize `ERRNO' to zero before
+attempting the output. For example:
+
+ $ gawk '
+ > BEGIN {
+ > PROCINFO["NONFATAL"] = 1
+ > ERRNO = 0
+ > print "hi" > "/no/such/file"
+ > if (ERRNO) {
+ > print("Output failed:", ERRNO) > "/dev/stderr"
+ > exit 1
+ > }
+ > }'
+ error--> Output failed: No such file or directory
+
+ Here, `gawk' did not produce a fatal error; instead it let the `awk'
+program code detect the problem and handle it.
+
+ This mechanism works also for standard output and standard error.
+For standard output, you may use `PROCINFO["-", "NONFATAL"]' or
+`PROCINFO["/dev/stdout", "NONFATAL"]'. For standard error, use
+`PROCINFO["/dev/stderr", "NONFATAL"]'.
+
+ When attempting to open a TCP/IP socket (*note TCP/IP Networking::),
+`gawk' tries multiple times. The `GAWK_SOCK_RETRIES' environment
+variable (*note Other Environment Variables::) allows you to override
+`gawk''s builtin default number of attempts. However, once nonfatal
+I/O is enabled for a given socket, `gawk' only retries once, relying on
+`awk'-level code to notice that there was a problem.
+
+
+File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Nonfatal, Up: Printing
+
+5.11 Summary
============
* The `print' statement prints comma-separated expressions. Each
@@ -7209,8 +7319,8 @@ File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Close Fi
numeric values for the `print' statement.
* The `printf' statement provides finer-grained control over output,
- with format control letters for different data types and various
- flags that modify the behavior of the format control letters.
+ with format-control letters for different data types and various
+ flags that modify the behavior of the format-control letters.
* Output from both `print' and `printf' may be redirected to files,
pipes, and coprocesses.
@@ -7222,11 +7332,16 @@ File: gawk.info, Node: Output Summary, Next: Output Exercises, Prev: Close Fi
For coprocesses, it is possible to close only one direction of the
communications.
+ * Normally errors with `print' or `printf' are fatal. `gawk' lets
+ you make output errors be nonfatal either for all files or on a
+ per-file basis. You must then check for errors after every
+ relevant output statement.
+

File: gawk.info, Node: Output Exercises, Prev: Output Summary, Up: Printing
-5.11 Exercises
+5.12 Exercises
==============
1. Rewrite the program:
@@ -7261,9 +7376,9 @@ value to a variable or a field by using an assignment operator.
An expression can serve as a pattern or action statement on its own.
Most other kinds of statements contain one or more expressions that
specify the data on which to operate. As in other languages,
-expressions in `awk' include variables, array references, constants,
-and function calls, as well as combinations of these with various
-operators.
+expressions in `awk' can include variables, array references,
+constants, and function calls, as well as combinations of these with
+various operators.
* Menu:
@@ -7282,8 +7397,8 @@ File: gawk.info, Node: Values, Next: All Operators, Up: Expressions
=========================================
Expressions are built up from values and the operations performed upon
-them. This minor node describes the elementary objects which provide
-the values used in expressions.
+them. This minor node describes the elementary objects that provide the
+values used in expressions.
* Menu:
@@ -7328,14 +7443,14 @@ the same value:
1.05e+2
1050e-1
- A string constant consists of a sequence of characters enclosed in
+ A "string constant" consists of a sequence of characters enclosed in
double quotation marks. For example:
"parrot"
represents the string whose contents are `parrot'. Strings in `gawk'
can be of any length, and they can contain any of the possible
-eight-bit ASCII characters including ASCII NUL (character code zero).
+eight-bit ASCII characters, including ASCII NUL (character code zero).
Other `awk' implementations may have difficulty with some character
codes.
@@ -7355,14 +7470,14 @@ File: gawk.info, Node: Nondecimal-numbers, Next: Regexp Constants, Prev: Scal
In `awk', all numbers are in decimal (i.e., base 10). Many other
programming languages allow you to specify numbers in other bases, often
octal (base 8) and hexadecimal (base 16). In octal, the numbers go 0,
-1, 2, 3, 4, 5, 6, 7, 10, 11, 12, and so on. Just as `11', in decimal,
-is 1 times 10 plus 1, so `11', in octal, is 1 times 8, plus 1. This
-equals 9 in decimal. In hexadecimal, there are 16 digits. Because the
-everyday decimal number system only has ten digits (`0'-`9'), the
-letters `a' through `f' are used to represent the rest. (Case in the
-letters is usually irrelevant; hexadecimal `a' and `A' have the same
-value.) Thus, `11', in hexadecimal, is 1 times 16 plus 1, which equals
-17 in decimal.
+1, 2, 3, 4, 5, 6, 7, 10, 11, 12, and so on. Just as `11' in decimal is
+1 times 10 plus 1, so `11' in octal is 1 times 8 plus 1. This equals 9
+in decimal. In hexadecimal, there are 16 digits. Because the everyday
+decimal number system only has ten digits (`0'-`9'), the letters `a'
+through `f' are used to represent the rest. (Case in the letters is
+usually irrelevant; hexadecimal `a' and `A' have the same value.)
+Thus, `11' in hexadecimal is 1 times 16 plus 1, which equals 17 in
+decimal.
Just by looking at plain `11', you can't tell what base it's in.
So, in C, C++, and other languages derived from C, there is a special
@@ -7370,13 +7485,13 @@ notation to signify the base. Octal numbers start with a leading `0',
and hexadecimal numbers start with a leading `0x' or `0X':
`11'
- Decimal value 11.
+ Decimal value 11
`011'
- Octal 11, decimal value 9.
+ Octal 11, decimal value 9
`0x11'
- Hexadecimal 11, decimal value 17.
+ Hexadecimal 11, decimal value 17
This example shows the difference:
@@ -7395,11 +7510,11 @@ really need to do this, use the `--non-decimal-data' command-line
option; *note Nondecimal Data::.) If you have octal or hexadecimal
data, you can use the `strtonum()' function (*note String Functions::)
to convert the data into a number. Most of the time, you will want to
-use octal or hexadecimal constants when working with the built-in bit
-manipulation functions; see *note Bitwise Functions::, for more
+use octal or hexadecimal constants when working with the built-in
+bit-manipulation functions; see *note Bitwise Functions::, for more
information.
- Unlike some early C implementations, `8' and `9' are not valid in
+ Unlike in some early C implementations, `8' and `9' are not valid in
octal constants. For example, `gawk' treats `018' as decimal 18:
$ gawk 'BEGIN { print "021 is", 021 ; print 018 }'
@@ -7426,12 +7541,12 @@ File: gawk.info, Node: Regexp Constants, Prev: Nondecimal-numbers, Up: Consta
6.1.1.3 Regular Expression Constants
....................................
-A regexp constant is a regular expression description enclosed in
+A "regexp constant" is a regular expression description enclosed in
slashes, such as `/^beginning and end$/'. Most regexps used in `awk'
programs are constant, but the `~' and `!~' matching operators can also
match computed or dynamic regexps (which are typically just ordinary
-strings or variables that contain a regexp, but could be a more complex
-expression).
+strings or variables that contain a regexp, but could be more complex
+expressions).

File: gawk.info, Node: Using Constant Regexps, Next: Variables, Prev: Constants, Up: Values
@@ -7483,7 +7598,7 @@ and `patsplit()' functions (*note String Functions::). Modern
implementations of `awk', including `gawk', allow the third argument of
`split()' to be a regexp constant, but some older implementations do
not. (d.c.) Because some built-in functions accept regexp constants
-as arguments, it can be confusing when attempting to use regexp
+as arguments, confusion can arise when attempting to use regexp
constants as arguments to user-defined functions (*note
User-defined::). For example:
@@ -7506,10 +7621,11 @@ User-defined::). For example:
In this example, the programmer wants to pass a regexp constant to
the user-defined function `mysub()', which in turn passes it on to
either `sub()' or `gsub()'. However, what really happens is that the
-`pat' parameter is either one or zero, depending upon whether or not
-`$0' matches `/hi/'. `gawk' issues a warning when it sees a regexp
-constant used as a parameter to a user-defined function, because
-passing a truth value in this way is probably not what was intended.
+`pat' parameter is assigned a value of either one or zero, depending
+upon whether or not `$0' matches `/hi/'. `gawk' issues a warning when
+it sees a regexp constant used as a parameter to a user-defined
+function, because passing a truth value in this way is probably not
+what was intended.

File: gawk.info, Node: Variables, Next: Conversion, Prev: Using Constant Regexps, Up: Values
@@ -7517,7 +7633,7 @@ File: gawk.info, Node: Variables, Next: Conversion, Prev: Using Constant Rege
6.1.3 Variables
---------------
-Variables are ways of storing values at one point in your program for
+"Variables" are ways of storing values at one point in your program for
use later in another part of your program. They can be manipulated
entirely within the program text, and they can also be assigned values
on the `awk' command line.
@@ -7546,14 +7662,14 @@ variables.
A variable name is a valid expression by itself; it represents the
variable's current value. Variables are given new values with
-"assignment operators", "increment operators", and "decrement
-operators". *Note Assignment Ops::. In addition, the `sub()' and
-`gsub()' functions can change a variable's value, and the `match()',
-`split()', and `patsplit()' functions can change the contents of their
-array parameters. *Note String Functions::.
+"assignment operators", "increment operators", and "decrement operators"
+(*note Assignment Ops::). In addition, the `sub()' and `gsub()'
+functions can change a variable's value, and the `match()', `split()',
+and `patsplit()' functions can change the contents of their array
+parameters (*note String Functions::).
A few variables have special built-in meanings, such as `FS' (the
-field separator), and `NF' (the number of fields in the current input
+field separator) and `NF' (the number of fields in the current input
record). *Note Built-in Variables::, for a list of the predefined
variables. These predefined variables can be used and assigned just
like all other variables, but their values are also used or changed
@@ -7750,7 +7866,7 @@ point, so the default behavior was restored to use a period as the
decimal point character. You can use the `--use-lc-numeric' option
(*note Options::) to force `gawk' to use the locale's decimal point
character. (`gawk' also uses the locale's decimal point character when
-in POSIX mode, either via `--posix', or the `POSIXLY_CORRECT'
+in POSIX mode, either via `--posix' or the `POSIXLY_CORRECT'
environment variable, as shown previously.)
*note table-locale-affects:: describes the cases in which the
@@ -7766,10 +7882,10 @@ Input Use period Use locale
Table 6.1: Locale decimal point versus a period
- Finally, modern day formal standards and IEEE standard floating-point
-representation can have an unusual but important effect on the way
-`gawk' converts some special string values to numbers. The details are
-presented in *note POSIX Floating Point Problems::.
+ Finally, modern-day formal standards and the IEEE standard
+floating-point representation can have an unusual but important effect
+on the way `gawk' converts some special string values to numbers. The
+details are presented in *note POSIX Floating Point Problems::.

File: gawk.info, Node: All Operators, Next: Truth Values and Conditions, Prev: Values, Up: Expressions
@@ -7777,7 +7893,7 @@ File: gawk.info, Node: All Operators, Next: Truth Values and Conditions, Prev
6.2 Operators: Doing Something with Values
==========================================
-This minor node introduces the "operators" which make use of the values
+This minor node introduces the "operators" that make use of the values
provided by constants and variables.
* Menu:
@@ -7958,7 +8074,7 @@ you'll get.
---------- Footnotes ----------
- (1) It happens that BWK `awk', `gawk' and `mawk' all "get it right,"
+ (1) It happens that BWK `awk', `gawk', and `mawk' all "get it right,"
but you should not rely on this.

@@ -8075,7 +8191,7 @@ righthand expression. For example:
The indices of `bar' are practically guaranteed to be different, because
`rand()' returns different values each time it is called. (Arrays and
the `rand()' function haven't been covered yet. *Note Arrays::, and
-*note Numeric Functions::, for more information). This example
+*note Numeric Functions::, for more information.) This example
illustrates an important fact about assignment operators: the lefthand
expression is only evaluated _once_.
@@ -8093,14 +8209,14 @@ converted to a number.
Operator Effect
--------------------------------------------------------------------------
-LVALUE `+=' INCREMENT Add INCREMENT to the value of LVALUE
-LVALUE `-=' DECREMENT Subtract DECREMENT from the value of LVALUE
-LVALUE `*=' Multiply the value of LVALUE by COEFFICIENT
+LVALUE `+=' INCREMENT Add INCREMENT to the value of LVALUE.
+LVALUE `-=' DECREMENT Subtract DECREMENT from the value of LVALUE.
+LVALUE `*=' Multiply the value of LVALUE by COEFFICIENT.
COEFFICIENT
-LVALUE `/=' DIVISOR Divide the value of LVALUE by DIVISOR
-LVALUE `%=' MODULUS Set LVALUE to its remainder by MODULUS
-LVALUE `^=' POWER
-LVALUE `**=' POWER Raise LVALUE to the power POWER (c.e.)
+LVALUE `/=' DIVISOR Divide the value of LVALUE by DIVISOR.
+LVALUE `%=' MODULUS Set LVALUE to its remainder by MODULUS.
+LVALUE `^=' POWER Raise LVALUE to the power POWER.
+LVALUE `**=' POWER Raise LVALUE to the power POWER. (c.e.)
Table 6.2: Arithmetic assignment operators
@@ -8185,8 +8301,8 @@ is a summary of increment and decrement expressions:
Operator Evaluation Order
- Doctor, doctor! It hurts when I do this!
- So don't do that! -- Groucho Marx
+ Doctor, it hurts when I do this!
+ Then don't do that! -- Groucho Marx
What happens for something like the following?
@@ -8201,7 +8317,7 @@ Or something even stranger?
In other words, when do the various side effects prescribed by the
postfix operators (`b++') take effect? When side effects happen is
-"implementation defined". In other words, it is up to the particular
+"implementation-defined". In other words, it is up to the particular
version of `awk'. The result for the first example may be 12 or 13,
and for the second, it may be 22 or 23.
@@ -8216,7 +8332,7 @@ File: gawk.info, Node: Truth Values and Conditions, Next: Function Calls, Pre
===============================
In certain contexts, expression values also serve as "truth values";
-(i.e., they determine what should happen next as the program runs). This
+i.e., they determine what should happen next as the program runs. This
minor node describes how `awk' defines "true" and "false" and how
values are compared.
@@ -8270,10 +8386,10 @@ File: gawk.info, Node: Typing and Comparison, Next: Boolean Ops, Prev: Truth
The Guide is definitive. Reality is frequently inaccurate. --
Douglas Adams, `The Hitchhiker's Guide to the Galaxy'
- Unlike other programming languages, `awk' variables do not have a
-fixed type. Instead, they can be either a number or a string, depending
-upon the value that is assigned to them. We look now at how variables
-are typed, and how `awk' compares variables.
+ Unlike in other programming languages, in `awk' variables do not
+have a fixed type. Instead, they can be either a number or a string,
+depending upon the value that is assigned to them. We look now at how
+variables are typed, and how `awk' compares variables.
* Menu:
@@ -8294,16 +8410,16 @@ of the variable is important because the types of two variables
determine how they are compared. Variable typing follows these rules:
* A numeric constant or the result of a numeric operation has the
- NUMERIC attribute.
+ "numeric" attribute.
* A string constant or the result of a string operation has the
- STRING attribute.
+ "string" attribute.
* Fields, `getline' input, `FILENAME', `ARGV' elements, `ENVIRON'
elements, and the elements of an array created by `match()',
`split()', and `patsplit()' that are numeric strings have the
- STRNUM attribute. Otherwise, they have the STRING attribute.
- Uninitialized variables also have the STRNUM attribute.
+ "strnum" attribute. Otherwise, they have the "string" attribute.
+ Uninitialized variables also have the "strnum" attribute.
* Attributes propagate across assignments but are not changed by any
use.
@@ -8345,12 +8461,13 @@ constant, then a string comparison is performed. Otherwise, a numeric
comparison is performed.
This point bears additional emphasis: All user input is made of
-characters, and so is first and foremost of STRING type; input strings
-that look numeric are additionally given the STRNUM attribute. Thus,
-the six-character input string ` +3.14' receives the STRNUM attribute.
+characters, and so is first and foremost of string type; input strings
+that look numeric are additionally given the strnum attribute. Thus,
+the six-character input string ` +3.14' receives the strnum attribute.
In contrast, the eight characters `" +3.14"' appearing in program text
comprise a string constant. The following examples print `1' when the
-comparison between the two different constants is true, `0' otherwise:
+comparison between the two different constants is true, and `0'
+otherwise:
$ echo ' +3.14' | awk '{ print($0 == " +3.14") }' True
-| 1
@@ -8449,7 +8566,7 @@ comparison is:
-| false
the result is `false' because both `$1' and `$2' are user input. They
-are numeric strings--therefore both have the STRNUM attribute,
+are numeric strings--therefore both have the strnum attribute,
dictating a numeric comparison. The purpose of the comparison rules
and the use of numeric strings is to attempt to produce the behavior
that is "least surprising," while still "doing the right thing."
@@ -8508,7 +8625,7 @@ is an example to illustrate the difference, in an `en_US.UTF-8' locale:
---------- Footnotes ----------
(1) Technically, string comparison is supposed to behave the same
-way as if the strings are compared with the C `strcoll()' function.
+way as if the strings were compared with the C `strcoll()' function.

File: gawk.info, Node: Boolean Ops, Next: Conditional Exp, Prev: Typing and Comparison, Up: Truth Values and Conditions
@@ -8571,7 +8688,7 @@ Boolean operators are:
The `&&' and `||' operators are called "short-circuit" operators
because of the way they work. Evaluation of the full expression is
-"short-circuited" if the result can be determined part way through its
+"short-circuited" if the result can be determined partway through its
evaluation.
Statements that end with `&&' or `||' can be continued simply by
@@ -8624,15 +8741,15 @@ File: gawk.info, Node: Conditional Exp, Prev: Boolean Ops, Up: Truth Values a
A "conditional expression" is a special kind of expression that has
three operands. It allows you to use one expression's value to select
-one of two other expressions. The conditional expression is the same
-as in the C language, as shown here:
+one of two other expressions. The conditional expression in `awk' is
+the same as in the C language, as shown here:
SELECTOR ? IF-TRUE-EXP : IF-FALSE-EXP
There are three subexpressions. The first, SELECTOR, is always
computed first. If it is "true" (not zero or not null), then
-IF-TRUE-EXP is computed next and its value becomes the value of the
-whole expression. Otherwise, IF-FALSE-EXP is computed next and its
+IF-TRUE-EXP is computed next, and its value becomes the value of the
+whole expression. Otherwise, IF-FALSE-EXP is computed next, and its
value becomes the value of the whole expression. For example, the
following expression produces the absolute value of `x':
@@ -8666,7 +8783,7 @@ A "function" is a name for a particular calculation. This enables you
to ask for it by name at any point in the program. For example, the
function `sqrt()' computes the square root of a number.
- A fixed set of functions are "built-in", which means they are
+ A fixed set of functions are "built in", which means they are
available in every `awk' program. The `sqrt()' function is one of
these. *Note Built-in::, for a list of built-in functions and their
descriptions. In addition, you can define functions for use in your
@@ -8801,7 +8918,7 @@ precedence:
Increment, decrement.
`^ **'
- Exponentiation. These operators group right-to-left.
+ Exponentiation. These operators group right to left.
`+ - !'
Unary plus, minus, logical "not."
@@ -8828,7 +8945,7 @@ String concatenation
operand of another operator. As a result, it does not make sense
to use a redirection operator near another operator of lower
precedence without parentheses. Such combinations (e.g., `print
- foo > a ? b : c'), result in syntax errors. The correct way to
+ foo > a ? b : c') result in syntax errors. The correct way to
write this statement is `print foo > (a ? b : c)'.
`~ !~'
@@ -8838,16 +8955,16 @@ String concatenation
Array membership.
`&&'
- Logical "and".
+ Logical "and."
`||'
- Logical "or".
+ Logical "or."
`?:'
- Conditional. This operator groups right-to-left.
+ Conditional. This operator groups right to left.
`= += -= *= /= %= ^= **='
- Assignment. These operators group right-to-left.
+ Assignment. These operators group right to left.
NOTE: The `|&', `**', and `**=' operators are not specified by
POSIX. For maximum portability, do not use them.
@@ -8915,24 +9032,24 @@ File: gawk.info, Node: Expressions Summary, Prev: Locales, Up: Expressions
* `awk' provides the usual arithmetic operators (addition,
subtraction, multiplication, division, modulus), and unary plus
- and minus. It also provides comparison operators, boolean
- operators, array membership testing, and regexp matching
- operators. String concatenation is accomplished by placing two
- expressions next to each other; there is no explicit operator.
- The three-operand `?:' operator provides an "if-else" test within
- expressions.
+ and minus. It also provides comparison operators, Boolean
+ operators, an array membership testing operator, and regexp
+ matching operators. String concatenation is accomplished by
+ placing two expressions next to each other; there is no explicit
+ operator. The three-operand `?:' operator provides an "if-else"
+ test within expressions.
* Assignment operators provide convenient shorthands for common
arithmetic operations.
- * In `awk', a value is considered to be true if it is non-zero _or_
+ * In `awk', a value is considered to be true if it is nonzero _or_
non-null. Otherwise, the value is false.
* A variable's type is set upon each assignment and may change over
its lifetime. The type determines how it behaves in comparisons
(string or numeric).
- * Function calls return a value which may be used as part of a larger
+ * Function calls return a value that may be used as part of a larger
expression. Expressions used to pass parameter values are fully
evaluated before the function is called. `awk' provides built-in
and user-defined functions; this is described in *note Functions::.
@@ -9064,9 +9181,10 @@ accepts any record with a first field that contains `li':
-| 555-5553
-| 555-6699
- pattern. The expression `/li/' has the value one if `li' appears in
-the current input record. Thus, as a pattern, `/li/' matches any record
-containing `li'.
+ A regexp constant as a pattern is also a special case of an
+expression pattern. The expression `/li/' has the value one if `li'
+appears in the current input record. Thus, as a pattern, `/li/' matches
+any record containing `li'.
Boolean expressions are also commonly used as patterns. Whether the
pattern matches an input record depends on whether its subexpressions
@@ -9106,7 +9224,7 @@ inside Boolean patterns. Likewise, the special patterns `BEGIN', `END',
`BEGINFILE', and `ENDFILE', which never match any input record, are not
expressions and cannot appear inside Boolean patterns.
- The precedence of the different operators which can appear in
+ The precedence of the different operators that can appear in
patterns is described in *note Precedence::.

@@ -9126,8 +9244,8 @@ following:
prints every record in `myfile' between `on'/`off' pairs, inclusive.
A range pattern starts out by matching BEGPAT against every input
-record. When a record matches BEGPAT, the range pattern is "turned on"
-and the range pattern matches this record as well. As long as the
+record. When a record matches BEGPAT, the range pattern is "turned
+on", and the range pattern matches this record as well. As long as the
range pattern stays turned on, it automatically matches every input
record read. The range pattern also matches ENDPAT against every input
record; when this succeeds, the range pattern is "turned off" again for
@@ -9245,7 +9363,7 @@ for more information on using library functions. *Note Library
Functions::, for a number of useful library functions.
If an `awk' program has only `BEGIN' rules and no other rules, then
-the program exits after the `BEGIN' rule is run.(1) However, if an
+the program exits after the `BEGIN' rules are run.(1) However, if an
`END' rule exists, then the input is read, even if there are no other
rules in the program. This is necessary in case the `END' rule checks
the `FNR' and `NR' variables.
@@ -9271,7 +9389,7 @@ give `$0' a real value is to execute a `getline' command without a
variable (*note Getline::). Another way is simply to assign a value to
`$0'.
- The second point is similar to the first but from the other
+ The second point is similar to the first, but from the other
direction. Traditionally, due largely to implementation issues, `$0'
and `NF' were _undefined_ inside an `END' rule. The POSIX standard
specifies that `NF' is available in an `END' rule. It contains the
@@ -9332,7 +9450,7 @@ tasks that would otherwise be difficult or impossible to perform:
entirely. Otherwise, `gawk' exits with the usual fatal error.
* If you have written extensions that modify the record handling (by
- inserting an "input parser," *note Input Parsers::), you can invoke
+ inserting an "input parser"; *note Input Parsers::), you can invoke
them at this point, before `gawk' has started processing the file.
(This is a _very_ advanced feature, currently used only by the
`gawkextlib' project (http://gawkextlib.sourceforge.net).)
@@ -9342,16 +9460,15 @@ last record in an input file. For the last input file, it will be
called before any `END' rules. The `ENDFILE' rule is executed even for
empty input files.
- Normally, when an error occurs when reading input in the normal input
-processing loop, the error is fatal. However, if an `ENDFILE' rule is
-present, the error becomes non-fatal, and instead `ERRNO' is set. This
-makes it possible to catch and process I/O errors at the level of the
-`awk' program.
+ Normally, when an error occurs when reading input in the normal
+input-processing loop, the error is fatal. However, if an `ENDFILE'
+rule is present, the error becomes non-fatal, and instead `ERRNO' is
+set. This makes it possible to catch and process I/O errors at the
+level of the `awk' program.
The `next' statement (*note Next Statement::) is not allowed inside
either a `BEGINFILE' or an `ENDFILE' rule. The `nextfile' statement is
-allowed only inside a `BEGINFILE' rule, but not inside an `ENDFILE'
-rule.
+allowed only inside a `BEGINFILE' rule, not inside an `ENDFILE' rule.
The `getline' statement (*note Getline::) is restricted inside both
`BEGINFILE' and `ENDFILE': only redirected forms of `getline' are
@@ -9396,11 +9513,11 @@ following program:
END { print nmatches, "found" }' /path/to/data
The `awk' program consists of two pieces of quoted text that are
-concatenated together to form the program. The first part is double
-quoted, which allows substitution of the `pattern' shell variable
-inside the quotes. The second part is single quoted.
+concatenated together to form the program. The first part is
+double-quoted, which allows substitution of the `pattern' shell
+variable inside the quotes. The second part is single-quoted.
- Variable substitution via quoting works, but can be potentially
+ Variable substitution via quoting works, but can potentially be
messy. It requires a good understanding of the shell's quoting rules
(*note Quoting::), and it's often difficult to correctly match up the
quotes when reading the program.
@@ -9597,15 +9714,15 @@ The body of this loop is a compound statement enclosed in braces,
containing two statements. The loop works in the following manner:
first, the value of `i' is set to one. Then, the `while' statement
tests whether `i' is less than or equal to three. This is true when
-`i' equals one, so the `i'-th field is printed. Then the `i++'
+`i' equals one, so the `i'th field is printed. Then the `i++'
increments the value of `i' and the loop repeats. The loop terminates
when `i' reaches four.
A newline is not required between the condition and the body;
however, using one makes the program clearer unless the body is a
-compound statement or else is very simple. The newline after the
-open-brace that begins the compound statement is not required either,
-but the program is harder to read without it.
+compound statement or else is very simple. The newline after the open
+brace that begins the compound statement is not required either, but the
+program is harder to read without it.

File: gawk.info, Node: Do Statement, Next: For Statement, Prev: While Statement, Up: Statements
@@ -9628,7 +9745,7 @@ Contrast this with the corresponding `while' statement:
while (CONDITION)
BODY
-This statement does not execute BODY even once if the CONDITION is
+This statement does not execute the BODY even once if the CONDITION is
false to begin with. The following is an example of a `do' statement:
{
@@ -9684,7 +9801,7 @@ loop.)
The same is true of the INCREMENT part. Incrementing additional
variables requires separate statements at the end of the loop. The C
compound expression, using C's comma operator, is useful in this
-context but it is not supported in `awk'.
+context, but it is not supported in `awk'.
Most often, INCREMENT is an increment expression, as in the previous
example. But this is not required; it can be any expression
@@ -9760,7 +9877,7 @@ statement looks like this:
Control flow in the `switch' statement works as it does in C. Once a
match to a given case is made, the case statement bodies execute until
-a `break', `continue', `next', `nextfile' or `exit' is encountered, or
+a `break', `continue', `next', `nextfile', or `exit' is encountered, or
the end of the `switch' statement itself. For example:
while ((c = getopt(ARGC, ARGV, "aksx")) != -1) {
@@ -9807,12 +9924,12 @@ divisor of any integer, and also identifies prime numbers:
# find smallest divisor of num
{
num = $1
- for (div = 2; div * div <= num; div++) {
- if (num % div == 0)
+ for (divisor = 2; divisor * divisor <= num; divisor++) {
+ if (num % divisor == 0)
break
}
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
+ if (num % divisor == 0)
+ printf "Smallest divisor of %d is %d\n", num, divisor
else
printf "%d is prime\n", num
}
@@ -9830,12 +9947,12 @@ Statement::.)
# find smallest divisor of num
{
num = $1
- for (div = 2; ; div++) {
- if (num % div == 0) {
- printf "Smallest divisor of %d is %d\n", num, div
+ for (divisor = 2; ; divisor++) {
+ if (num % divisor == 0) {
+ printf "Smallest divisor of %d is %d\n", num, divisor
break
}
- if (div * div > num) {
+ if (divisor * divisor > num) {
printf "%d is prime\n", num
break
}
@@ -10003,12 +10120,11 @@ listed in `ARGV'.
standard. See the Austin Group website
(http://austingroupbugs.net/view.php?id=607).
- The current version of BWK `awk', and `mawk' also support
-`nextfile'. However, they don't allow the `nextfile' statement inside
-function bodies (*note User-defined::). `gawk' does; a `nextfile'
-inside a function body reads the next record and starts processing it
-with the first rule in the program, just as any other `nextfile'
-statement.
+ The current version of BWK `awk' and `mawk' also support `nextfile'.
+However, they don't allow the `nextfile' statement inside function
+bodies (*note User-defined::). `gawk' does; a `nextfile' inside a
+function body reads the next record and starts processing it with the
+first rule in the program, just as any other `nextfile' statement.

File: gawk.info, Node: Exit Statement, Prev: Nextfile Statement, Up: Statements
@@ -10036,9 +10152,9 @@ record, skips reading any remaining input records, and executes the
they do not execute.
In such a case, if you don't want the `END' rule to do its job, set
-a variable to nonzero before the `exit' statement and check that
-variable in the `END' rule. *Note Assert Function::, for an example
-that does this.
+a variable to a nonzero value before the `exit' statement and check
+that variable in the `END' rule. *Note Assert Function::, for an
+example that does this.
If an argument is supplied to `exit', its value is used as the exit
status code for the `awk' process. If no argument is supplied, `exit'
@@ -10096,7 +10212,7 @@ of activity.

File: gawk.info, Node: User-modified, Next: Auto-set, Up: Built-in Variables
-7.5.1 Built-In Variables That Control `awk'
+7.5.1 Built-in Variables That Control `awk'
-------------------------------------------
The following is an alphabetical list of variables that you can change
@@ -10120,11 +10236,11 @@ description of each variable.)
use binary I/O. Any other string value is treated the same as
`"rw"', but causes `gawk' to generate a warning message.
`BINMODE' is described in more detail in *note PC Using::. `mawk'
- (*note Other Versions::), also supports this variable, but only
+ (*note Other Versions::) also supports this variable, but only
using numeric values.
``CONVFMT''
- This string controls conversion of numbers to strings (*note
+ A string that controls the conversion of numbers to strings (*note
Conversion::). It works by being passed, in effect, as the first
argument to the `sprintf()' function (*note String Functions::).
Its default value is `"%.6g"'. `CONVFMT' was introduced by the
@@ -10171,15 +10287,14 @@ description of each variable.)
`IGNORECASE #'
If `IGNORECASE' is nonzero or non-null, then all string comparisons
- and all regular expression matching are case independent. Thus,
- regexp matching with `~' and `!~', as well as the `gensub()',
+ and all regular expression matching are case-independent. This
+ applies to regexp matching with `~' and `!~', the `gensub()',
`gsub()', `index()', `match()', `patsplit()', `split()', and
`sub()' functions, record termination with `RS', and field
- splitting with `FS' and `FPAT', all ignore case when doing their
- particular regexp operations. However, the value of `IGNORECASE'
- does _not_ affect array subscripting and it does not affect field
- splitting when using a single-character field separator. *Note
- Case-sensitivity::.
+ splitting with `FS' and `FPAT'. However, the value of
+ `IGNORECASE' does _not_ affect array subscripting and it does not
+ affect field splitting when using a single-character field
+ separator. *Note Case-sensitivity::.
`LINT #'
When this variable is true (nonzero or non-null), `gawk' behaves
@@ -10191,7 +10306,7 @@ description of each variable.)
Assigning a false value to `LINT' turns off the lint warnings.
This variable is a `gawk' extension. It is not special in other
- `awk' implementations. Unlike the other special variables,
+ `awk' implementations. Unlike with the other special variables,
changing `LINT' does affect the production of lint warnings, even
if `gawk' is in compatibility mode. Much as the `--lint' and
`--traditional' options independently control different aspects of
@@ -10199,17 +10314,18 @@ description of each variable.)
execution is independent of the flavor of `awk' being executed.
`OFMT'
- Controls conversion of numbers to strings (*note Conversion::) for
- printing with the `print' statement. It works by being passed as
- the first argument to the `sprintf()' function (*note String
- Functions::). Its default value is `"%.6g"'. Earlier versions of
- `awk' used `OFMT' to specify the format for converting numbers to
- strings in general expressions; this is now done by `CONVFMT'.
+ A string that controls conversion of numbers to strings (*note
+ Conversion::) for printing with the `print' statement. It works
+ by being passed as the first argument to the `sprintf()' function
+ (*note String Functions::). Its default value is `"%.6g"'.
+ Earlier versions of `awk' used `OFMT' to specify the format for
+ converting numbers to strings in general expressions; this is now
+ done by `CONVFMT'.
`OFS'
- This is the output field separator (*note Output Separators::).
- It is output between the fields printed by a `print' statement.
- Its default value is `" "', a string consisting of a single space.
+ The output field separator (*note Output Separators::). It is
+ output between the fields printed by a `print' statement. Its
+ default value is `" "', a string consisting of a single space.
`ORS'
The output record separator. It is output at the end of every
@@ -10259,7 +10375,7 @@ description of each variable.)

File: gawk.info, Node: Auto-set, Next: ARGC and ARGV, Prev: User-modified, Up: Built-in Variables
-7.5.2 Built-In Variables That Convey Information
+7.5.2 Built-in Variables That Convey Information
------------------------------------------------
The following is an alphabetical list of variables that `awk' sets
@@ -10360,6 +10476,11 @@ Options::), they are not special:
`getline' returning -1. You are, of course, free to clear it
yourself before doing an I/O operation.
+ If the value of `ERRNO' corresponds to a system error in the C
+ `errno' variable, then `PROCINFO["errno"]' will be set to the value
+ of `errno'. For non-system errors, `PROCINFO["errno"]' will be
+ zero.
+
`FILENAME'
The name of the current input file. When no data files are listed
on the command line, `awk' reads from the standard input and
@@ -10377,14 +10498,14 @@ Options::), they are not special:
`NF'
The number of fields in the current input record. `NF' is set
- each time a new record is read, when a new field is created or
+ each time a new record is read, when a new field is created, or
when `$0' changes (*note Fields::).
Unlike most of the variables described in this node, assigning a
value to `NF' has the potential to affect `awk''s internal
workings. In particular, assignments to `NF' can be used to
- create or remove fields from the current record. *Note Changing
- Fields::.
+ create fields in or remove fields from the current record. *Note
+ Changing Fields::.
`FUNCTAB #'
An array whose indices and corresponding values are the names of
@@ -10408,6 +10529,10 @@ Options::), they are not special:
`PROCINFO["egid"]'
The value of the `getegid()' system call.
+ `PROCINFO["errno"]'
+ The value of the C `errno' variable when `ERRNO' is set to
+ the associated error message.
+
`PROCINFO["euid"]'
The value of the `geteuid()' system call.
@@ -10419,7 +10544,7 @@ Options::), they are not special:
`PROCINFO["identifiers"]'
A subarray, indexed by the names of all identifiers used in
- the text of the AWK program. An "identifier" is simply the
+ the text of the `awk' program. An "identifier" is simply the
name of a variable (be it scalar or array), built-in
function, user-defined function, or extension function. For
each identifier, the value of the element is one of the
@@ -10440,7 +10565,7 @@ Options::), they are not special:
`"untyped"'
The identifier is untyped (could be used as a scalar or
- array, `gawk' doesn't know yet).
+ an array; `gawk' doesn't know yet).
`"user"'
The identifier is a user-defined function.
@@ -10518,6 +10643,10 @@ Options::), they are not special:
open input file, pipe, or coprocess. *Note Read Timeout::,
for more information.
+ * It may be used to indicate that input may be retried when it
+ fails due to certain errors. *Note Retrying Input::, for
+ more information.
+
* It may be used to cause coprocesses to communicate over
pseudo-ttys instead of through two-way pipes; this is
discussed further in *note Two-way I/O::.
@@ -10529,7 +10658,7 @@ Options::), they are not special:
string, or -1 if no match is found.
`RSTART'
- The start-index in characters of the substring that is matched by
+ The start index in characters of the substring that is matched by
the `match()' function (*note String Functions::). `RSTART' is
set by invoking the `match()' function. Its value is the position
of the string where the matched substring starts, or zero if no
@@ -10579,7 +10708,7 @@ Options::), they are not special:
}
NOTE: In order to avoid severe time-travel paradoxes,(2)
- neither `FUNCTAB' nor `SYMTAB' are available as elements
+ neither `FUNCTAB' nor `SYMTAB' is available as an element
within the `SYMTAB' array.
Changing `NR' and `FNR'
@@ -10718,7 +10847,7 @@ are passed on to the `awk' program. (*Note Getopt Function::, for an
When designing your program, you should choose options that don't
conflict with `gawk''s, because it will process any options that it
accepts before passing the rest of the command line on to your program.
-Using `#!' with the `-E' option may help (*Note Executable Scripts::,
+Using `#!' with the `-E' option may help (*note Executable Scripts::,
and *note Options::,).

@@ -10729,14 +10858,14 @@ File: gawk.info, Node: Pattern Action Summary, Prev: Built-in Variables, Up:
* Pattern-action pairs make up the basic elements of an `awk'
program. Patterns are either normal expressions, range
- expressions, regexp constants, one of the special keywords
- `BEGIN', `END', `BEGINFILE', `ENDFILE', or empty. The action
+ expressions, or regexp constants; one of the special keywords
+ `BEGIN', `END', `BEGINFILE', or `ENDFILE'; or empty. The action
executes if the current record matches the pattern. Empty
(missing) patterns match all records.
- * I/O from `BEGIN' and `END' rules have certain constraints. This
- is also true, only more so, for `BEGINFILE' and `ENDFILE' rules.
- The latter two give you "hooks" into `gawk''s file processing,
+ * I/O from `BEGIN' and `END' rules has certain constraints. This is
+ also true, only more so, for `BEGINFILE' and `ENDFILE' rules. The
+ latter two give you "hooks" into `gawk''s file processing,
allowing you to recover from a file that otherwise would cause a
fatal error (such as a file that cannot be opened).
@@ -10757,11 +10886,11 @@ File: gawk.info, Node: Pattern Action Summary, Prev: Built-in Variables, Up:
iteration of a loop (or get out of a `switch').
* `next' and `nextfile' let you read the next record and start over
- at the top of your program, or skip to the next input file and
+ at the top of your program or skip to the next input file and
start over, respectively.
* The `exit' statement terminates your program. When executed from
- an action (or function body) it transfers control to the `END'
+ an action (or function body), it transfers control to the `END'
statements. From an `END' statement body, it exits immediately.
You may pass an optional numeric value to be used as `awk''s exit
status.
@@ -10853,7 +10982,7 @@ be used as an array index.
including a specification of how many elements or components they
contain. In such languages, the declaration causes a contiguous block
of memory to be allocated for that many elements. Usually, an index in
-the array must be a positive integer. For example, the index zero
+the array must be a nonnegative integer. For example, the index zero
specifies the first element in the array, which is actually stored at
the beginning of the block of memory. Index one specifies the second
element, which is stored in memory right after the first element, and
@@ -10863,9 +10992,9 @@ languages allow arbitrary starting and ending indices--e.g., `15 ..
27'--but the size of the array is still fixed when the array is
declared.)
- A contiguous array of four elements might look like the following
-example, conceptually, if the element values are 8, `"foo"', `""', and
-30 as shown in *note figure-array-elements:::
+ A contiguous array of four elements might look like *note
+figure-array-elements::, conceptually, if the element values are eight,
+`"foo"', `""', and 30.
+---------+---------+--------+---------+
| 8 | "foo" | "" | 30 | @r{Value}
@@ -10874,17 +11003,19 @@ example, conceptually, if the element values are 8, `"foo"', `""', and
Figure 8.1: A contiguous array
Only the values are stored; the indices are implicit from the order of
-the values. Here, 8 is the value at index zero, because 8 appears in the
-position with zero elements before it.
+the values. Here, eight is the value at index zero, because eight
+appears in the position with zero elements before it.
Arrays in `awk' are different--they are "associative". This means
that each array is a collection of pairs--an index and its corresponding
array element value:
- Index 3 Value 30
- Index 1 Value "foo"
- Index 0 Value 8
- Index 2 Value ""
+ Index Value
+------------------------
+ `3' `30'
+ `1' `"foo"'
+ `0' `8'
+ `2' `""'
The pairs are shown in jumbled order because their order is
irrelevant.(1)
@@ -10893,32 +11024,36 @@ irrelevant.(1)
at any time. For example, suppose a tenth element is added to the array
whose value is `"number ten"'. The result is:
- Index 10 Value "number ten"
- Index 3 Value 30
- Index 1 Value "foo"
- Index 0 Value 8
- Index 2 Value ""
+ Index Value
+-------------------------------
+ `10' `"number ten"'
+ `3' `30'
+ `1' `"foo"'
+ `0' `8'
+ `2' `""'
Now the array is "sparse", which just means some indices are missing.
It has elements 0-3 and 10, but doesn't have elements 4, 5, 6, 7, 8, or
9.
Another consequence of associative arrays is that the indices don't
-have to be positive integers. Any number, or even a string, can be an
-index. For example, the following is an array that translates words
+have to be nonnegative integers. Any number, or even a string, can be
+an index. For example, the following is an array that translates words
from English to French:
- Index "dog" Value "chien"
- Index "cat" Value "chat"
- Index "one" Value "un"
- Index 1 Value "un"
+ Index Value
+------------------------
+ `"dog"' `"chien"'
+ `"cat"' `"chat"'
+ `"one"' `"un"'
+ `1' `"un"'
Here we decided to translate the number one in both spelled-out and
numeric form--thus illustrating that a single array can have both
numbers and strings as indices. (In fact, array subscripts are always
strings. There are some subtleties to how numbers work when used as
array subscripts; this is discussed in more detail in *note Numeric
-Array Subscripts::.) Here, the number `1' isn't double quoted, because
+Array Subscripts::.) Here, the number `1' isn't double-quoted, because
`awk' automatically converts it to a string.
The value of `IGNORECASE' has no effect upon array subscripting.
@@ -10942,7 +11077,7 @@ File: gawk.info, Node: Reference to Elements, Next: Assigning Elements, Prev:
-----------------------------------
The principal way to use an array is to refer to one of its elements.
-An array reference is an expression as follows:
+An "array reference" is an expression as follows:
ARRAY[INDEX-EXPRESSION]
@@ -10950,8 +11085,8 @@ Here, ARRAY is the name of an array. The expression INDEX-EXPRESSION is
the index of the desired element of the array.
The value of the array reference is the current value of that array
-element. For example, `foo[4.3]' is an expression for the element of
-array `foo' at index `4.3'.
+element. For example, `foo[4.3]' is an expression referencing the
+element of array `foo' at index `4.3'.
A reference to an array element that has no recorded value yields a
value of `""', the null string. This includes elements that have not
@@ -11018,7 +11153,7 @@ File: gawk.info, Node: Array Example, Next: Scanning an Array, Prev: Assignin
The following program takes a list of lines, each beginning with a line
number, and prints them out in order of line number. The line numbers
-are not in order when they are first read--instead they are scrambled.
+are not in order when they are first read--instead, they are scrambled.
This program sorts the lines by making an array using the line numbers
as subscripts. The program then prints out the lines in sorted order
of their numbers. It is a very simple program and gets confused upon
@@ -11074,7 +11209,7 @@ File: gawk.info, Node: Scanning an Array, Next: Controlling Scanning, Prev: A
In programs that use arrays, it is often necessary to use a loop that
executes once for each element of an array. In other languages, where
-arrays are contiguous and indices are limited to positive integers,
+arrays are contiguous and indices are limited to nonnegative integers,
this is easy: all the valid indices can be found by counting from the
lowest index up to the highest. This technique won't do the job in
`awk', because any number or string can be an array index. So `awk'
@@ -11089,7 +11224,7 @@ has previously used, with the variable VAR set to that index.
The following program uses this form of the `for' statement. The
first rule scans the input records and notes which words appear (at
least once) in the input, by storing a one into the array `used' with
-the word as index. The second rule scans the elements of `used' to
+the word as the index. The second rule scans the elements of `used' to
find all the distinct words that appear in the input. It prints each
word that is more than 10 characters long and also prints the number of
such words. *Note String Functions::, for more information on the
@@ -11172,7 +11307,7 @@ internal implementation of arrays and will vary from one version of
Often, though, you may wish to do something simple, such as
"traverse the array by comparing the indices in ascending order," or
"traverse the array by comparing the values in descending order."
-`gawk' provides two mechanisms which give you this control.
+`gawk' provides two mechanisms that give you this control:
* Set `PROCINFO["sorted_in"]' to one of a set of predefined values.
We describe this now.
@@ -11220,22 +11355,26 @@ available:
which `gawk' uses internally to perform the sorting.
`"@ind_str_desc"'
- String indices ordered from high to low.
+ Like `"@ind_str_asc"', but the string indices are ordered from
+ high to low.
`"@ind_num_desc"'
- Numeric indices ordered from high to low.
+ Like `"@ind_num_asc"', but the numeric indices are ordered from
+ high to low.
`"@val_type_desc"'
- Element values, based on type, ordered from high to low.
- Subarrays, if present, come out first.
+ Like `"@val_type_asc"', but the element values, based on type, are
+ ordered from high to low. Subarrays, if present, come out first.
`"@val_str_desc"'
- Element values, treated as strings, ordered from high to low.
- Subarrays, if present, come out first.
+ Like `"@val_str_asc"', but the element values, treated as strings,
+ are ordered from high to low. Subarrays, if present, come out
+ first.
`"@val_num_desc"'
- Element values, treated as numbers, ordered from high to low.
- Subarrays, if present, come out first.
+ Like `"@val_num_asc"', but the element values, treated as numbers,
+ are ordered from high to low. Subarrays, if present, come out
+ first.
The array traversal order is determined before the `for' loop starts
to run. Changing `PROCINFO["sorted_in"]' in the loop body does not
@@ -11421,8 +11560,8 @@ deleting elements in an array:
This example removes all the elements from the array `frequencies'.
Once an element is deleted, a subsequent `for' statement to scan the
-array does not report that element and the `in' operator to check for
-the presence of that element returns zero (i.e., false):
+array does not report that element and using the `in' operator to check
+for the presence of that element returns zero (i.e., false):
delete foo[4]
if (4 in foo)
@@ -11625,7 +11764,7 @@ two-element subarray at index `1' of the main array `a':
This simulates a true two-dimensional array. Each subarray element
can contain another subarray as a value, which in turn can hold other
arrays as well. In this way, you can create arrays of three or more
-dimensions. The indices can be any `awk' expression, including scalars
+dimensions. The indices can be any `awk' expressions, including scalars
separated by commas (i.e., a regular `awk' simulated multidimensional
subscript). So the following is valid in `gawk':
@@ -11634,7 +11773,7 @@ subscript). So the following is valid in `gawk':
Each subarray and the main array can be of different length. In
fact, the elements of an array or its subarray do not all have to have
the same type. This means that the main array and any of its subarrays
-can be non-rectangular, or jagged in structure. You can assign a scalar
+can be nonrectangular, or jagged in structure. You can assign a scalar
value to the index `4' of the main array `a', even though `a[1]' is
itself an array and not a scalar:
@@ -11652,8 +11791,8 @@ the element at that index:
a[4][5][6][7] = "An element in a four-dimensional array"
This removes the scalar value from index `4' and then inserts a
-subarray of subarray of subarray containing a scalar. You can also
-delete an entire subarray or subarray of subarrays:
+three-level nested subarray containing a scalar. You can also delete an
+entire subarray or subarray of subarrays:
delete a[4][5]
a[4][5] = "An element in subarray a[4]"
@@ -11661,7 +11800,7 @@ delete an entire subarray or subarray of subarrays:
But recall that you can not delete the main array `a' and then use it
as a scalar.
- The built-in functions which take array arguments can also be used
+ The built-in functions that take array arguments can also be used
with subarrays. For example, the following code fragment uses `length()'
(*note String Functions::) to determine the number of elements in the
main array `a' and its subarrays:
@@ -11682,7 +11821,7 @@ be nested to scan all the elements of an array of arrays if it is
rectangular in structure. In order to print the contents (scalar
values) of a two-dimensional array of arrays (i.e., in which each
first-level element is itself an array, not necessarily of the same
-length) you could use the following code:
+length), you could use the following code:
for (i in array)
for (j in array[i])
@@ -11764,9 +11903,9 @@ File: gawk.info, Node: Arrays Summary, Prev: Arrays of Arrays, Up: Arrays
of `awk'.
* Standard `awk' simulates multidimensional arrays by separating
- subscript values with a comma. The values are concatenated into a
+ subscript values with commas. The values are concatenated into a
single string, separated by the value of `SUBSEP'. The fact that
- such a subscript was created in this way is not retained; thus
+ such a subscript was created in this way is not retained; thus,
changing `SUBSEP' may have unexpected consequences. You can use
`(SUB1, SUB2, ...) in ARRAY' to see if such a multidimensional
subscript exists in ARRAY.
@@ -11774,7 +11913,7 @@ File: gawk.info, Node: Arrays Summary, Prev: Arrays of Arrays, Up: Arrays
* `gawk' provides true arrays of arrays. You use a separate set of
square brackets for each dimension in such an array:
`data[row][col]', for example. Array elements may thus be either
- scalar values (number or string) or another array.
+ scalar values (number or string) or other arrays.
* Use the `isarray()' built-in function to determine if an array
element is itself a subarray.
@@ -11794,7 +11933,9 @@ internationalize and localize programs.
Besides the built-in functions, `awk' has provisions for writing new
functions that the rest of a program can use. The second half of this
-major node describes these "user-defined" functions.
+major node describes these "user-defined" functions. Finally, we
+explore indirect function calls, a `gawk'-specific extension that lets
+you determine at runtime what function is to be called.
* Menu:
@@ -11806,7 +11947,7 @@ major node describes these "user-defined" functions.

File: gawk.info, Node: Built-in, Next: User-defined, Up: Functions
-9.1 Built-In Functions
+9.1 Built-in Functions
======================
"Built-in" functions are always available for your `awk' program to
@@ -11831,7 +11972,7 @@ for your convenience.

File: gawk.info, Node: Calling Built-in, Next: Numeric Functions, Up: Built-in
-9.1.1 Calling Built-In Functions
+9.1.1 Calling Built-in Functions
--------------------------------
To call one of `awk''s built-in functions, write the name of the
@@ -11865,12 +12006,13 @@ undefined. Thus, avoid writing programs that assume that parameters
are evaluated from left to right or from right to left. For example:
i = 5
- j = atan2(i++, i *= 2)
+ j = atan2(++i, i *= 2)
If the order of evaluation is left to right, then `i' first becomes
-6, and then 12, and `atan2()' is called with the two arguments 6 and
-12. But if the order of evaluation is right to left, `i' first becomes
-10, then 11, and `atan2()' is called with the two arguments 11 and 10.
+six, and then 12, and `atan2()' is called with the two arguments six
+and 12. But if the order of evaluation is right to left, `i' first
+becomes 10, then 11, and `atan2()' is called with the two arguments 11
+and 10.

File: gawk.info, Node: Numeric Functions, Next: String Functions, Prev: Calling Built-in, Up: Built-in
@@ -11889,7 +12031,17 @@ brackets ([ ]):
`cos(X)'
Return the cosine of X, with X in radians.
-`div(NUMERATOR, DENOMINATOR, RESULT)'
+`exp(X)'
+ Return the exponential of X (`e ^ X') or report an error if X is
+ out of range. The range of values X can have depends on your
+ machine's floating-point representation.
+
+`int(X)'
+ Return the nearest integer to X, located between X and zero and
+ truncated toward zero. For example, `int(3)' is 3, `int(3.9)' is
+ 3, `int(-3.9)' is -3, and `int(-3)' is -3 as well.
+
+`intdiv(NUMERATOR, DENOMINATOR, RESULT)'
Perform integer division, similar to the standard C function of the
same name. First, truncate `numerator' and `denominator' towards
zero, creating integer values. Clear the `result' array, and then
@@ -11904,16 +12056,6 @@ brackets ([ ]):
This function is a `gawk' extension. It is not available in
compatibility mode (*note Options::).
-`exp(X)'
- Return the exponential of X (`e ^ X') or report an error if X is
- out of range. The range of values X can have depends on your
- machine's floating-point representation.
-
-`int(X)'
- Return the nearest integer to X, located between X and zero and
- truncated toward zero. For example, `int(3)' is 3, `int(3.9)' is
- 3, `int(-3.9)' is -3, and `int(-3)' is -3 as well.
-
`log(X)'
Return the natural logarithm of X, if X is positive; otherwise,
return `NaN' ("not a number") on IEEE 754 systems. Additionally,
@@ -11926,16 +12068,16 @@ brackets ([ ]):
Often random integers are needed instead. Following is a
user-defined function that can be used to obtain a random
- non-negative integer less than N:
+ nonnegative integer less than N:
function randint(n)
{
return int(n * rand())
}
- The multiplication produces a random number greater than zero and
- less than `n'. Using `int()', this result is made into an integer
- between zero and `n' - 1, inclusive.
+ The multiplication produces a random number greater than or equal
+ to zero and less than `n'. Using `int()', this result is made into
+ an integer between zero and `n' - 1, inclusive.
The following example uses a similar function to produce random
integers between one and N. This program prints a new random
@@ -12003,7 +12145,7 @@ numbers.
(2) `mawk' uses a different seed each time.
(3) Computer-generated random numbers really are not truly random.
-They are technically known as "pseudorandom." This means that although
+They are technically known as "pseudorandom". This means that although
the numbers in a sequence appear to be random, you can in fact generate
the same sequence of random numbers over and over again.
@@ -12016,7 +12158,7 @@ File: gawk.info, Node: String Functions, Next: I/O Functions, Prev: Numeric F
The functions in this minor node look at or change the text of one or
more strings.
- `gawk' understands locales (*note Locales::), and does all string
+ `gawk' understands locales (*note Locales::) and does all string
processing in terms of _characters_, not _bytes_. This distinction is
particularly important to understand for locales where one character
may be represented by multiple bytes. Thus, for example, `length()'
@@ -12087,7 +12229,7 @@ Options::):
a[2] = "de"
a[3] = "sac"
- The `asorti()' function works similarly to `asort()', however, the
+ The `asorti()' function works similarly to `asort()'; however, the
_indices_ are sorted, instead of the values. Thus, in the previous
example, starting with the same initial set of indices and values
in `a', calling `asorti(a)' would yield:
@@ -12175,7 +12317,7 @@ Options::):
With BWK `awk' and `gawk', it is a fatal error to use a regexp
constant for FIND. Other implementations allow it, simply
treating the regexp constant as an expression meaning `$0 ~
- /regexp/'. (d.c.).
+ /regexp/'. (d.c.)
`length('[STRING]`)'
Return the number of characters in STRING. If STRING is a number,
@@ -12219,9 +12361,9 @@ Options::):
`match(STRING, REGEXP' [`, ARRAY']`)'
Search STRING for the longest, leftmost substring matched by the
- regular expression, REGEXP and return the character position
- (index) at which that substring begins (one, if it starts at the
- beginning of STRING). If no match is found, return zero.
+ regular expression REGEXP and return the character position (index)
+ at which that substring begins (one, if it starts at the beginning
+ of STRING). If no match is found, return zero.
The REGEXP argument may be either a regexp constant (`/'...`/') or
a string constant (`"'...`"'). In the latter case, the string is
@@ -12229,7 +12371,7 @@ Options::):
discussion of the difference between the two forms, and the
implications for writing your program correctly.
- The order of the first two arguments is backwards from most other
+ The order of the first two arguments is the opposite of most other
string functions that work with regular expressions, such as
`sub()' and `gsub()'. It might help to remember that for
`match()', the order is the same as for the `~' operator: `STRING
@@ -12296,8 +12438,8 @@ Options::):
There may not be subscripts for the start and index for every
parenthesized subexpression, because they may not all have matched
- text; thus they should be tested for with the `in' operator (*note
- Reference to Elements::).
+ text; thus, they should be tested for with the `in' operator
+ (*note Reference to Elements::).
The ARRAY argument to `match()' is a `gawk' extension. In
compatibility mode (*note Options::), using a third argument is a
@@ -12330,19 +12472,19 @@ Options::):
FIELDSEP, is a regexp describing where to split STRING (much as
`FS' can be a regexp describing where to split input records). If
FIELDSEP is omitted, the value of `FS' is used. `split()' returns
- the number of elements created. SEPS is a `gawk' extension with
+ the number of elements created. SEPS is a `gawk' extension, with
`SEPS[I]' being the separator string between `ARRAY[I]' and
- `ARRAY[I+1]'. If FIELDSEP is a single space then any leading
+ `ARRAY[I+1]'. If FIELDSEP is a single space, then any leading
whitespace goes into `SEPS[0]' and any trailing whitespace goes
- into `SEPS[N]' where N is the return value of `split()' (i.e., the
- number of elements in ARRAY).
+ into `SEPS[N]', where N is the return value of `split()' (i.e.,
+ the number of elements in ARRAY).
The `split()' function splits strings into pieces in a manner
similar to the way input lines are split into fields. For example:
split("cul-de-sac", a, "-", seps)
- splits the string `cul-de-sac' into three fields using `-' as the
+ splits the string `"cul-de-sac"' into three fields using `-' as the
separator. It sets the contents of the array `a' as follows:
a[1] = "cul"
@@ -12359,17 +12501,18 @@ Options::):
As with input field-splitting, when the value of FIELDSEP is
`" "', leading and trailing whitespace is ignored in values
assigned to the elements of ARRAY but not in SEPS, and the elements
- are separated by runs of whitespace. Also, as with input
- field-splitting, if FIELDSEP is the null string, each individual
+ are separated by runs of whitespace. Also, as with input field
+ splitting, if FIELDSEP is the null string, each individual
character in the string is split into its own array element.
(c.e.)
Note, however, that `RS' has no effect on the way `split()' works.
- Even though `RS = ""' causes newline to also be an input field
- separator, this does not affect how `split()' splits strings.
+ Even though `RS = ""' causes the newline character to also be an
+ input field separator, this does not affect how `split()' splits
+ strings.
Modern implementations of `awk', including `gawk', allow the third
- argument to be a regexp constant (`/abc/') as well as a string.
+ argument to be a regexp constant (`/'...`/') as well as a string.
(d.c.) The POSIX standard allows this as well. *Note Computed
Regexps::, for a discussion of the difference between using a
string constant or a regexp constant, and the implications for
@@ -12470,7 +12613,7 @@ Options::):
{ sub(/\|/, "\\&"); print }
As mentioned, the third argument to `sub()' must be a variable,
- field or array element. Some versions of `awk' allow the third
+ field, or array element. Some versions of `awk' allow the third
argument to be an expression that is not an lvalue. In such a
case, `sub()' still searches for the pattern and returns zero or
one, but the result of the substitution (if any) is thrown away
@@ -12595,11 +12738,11 @@ example, `"a\qb"' is treated as `"aqb"'.
At the runtime level, the various functions handle sequences of `\'
and `&' differently. The situation is (sadly) somewhat complex.
-Historically, the `sub()' and `gsub()' functions treated the two
-character sequence `\&' specially; this sequence was replaced in the
-generated text with a single `&'. Any other `\' within the REPLACEMENT
-string that did not precede an `&' was passed through unchanged. This
-is illustrated in *note table-sub-escapes::.
+Historically, the `sub()' and `gsub()' functions treated the
+two-character sequence `\&' specially; this sequence was replaced in
+the generated text with a single `&'. Any other `\' within the
+REPLACEMENT string that did not precede an `&' was passed through
+unchanged. This is illustrated in *note table-sub-escapes::.
You type `sub()' sees `sub()' generates
------- --------- --------------
@@ -12614,10 +12757,10 @@ is illustrated in *note table-sub-escapes::.
Table 9.1: Historical escape sequence processing for `sub()' and
`gsub()'
-This table shows both the lexical-level processing, where an odd number
-of backslashes becomes an even number at the runtime level, as well as
-the runtime processing done by `sub()'. (For the sake of simplicity,
-the rest of the following tables only show the case of even numbers of
+This table shows the lexical-level processing, where an odd number of
+backslashes becomes an even number at the runtime level, as well as the
+runtime processing done by `sub()'. (For the sake of simplicity, the
+rest of the following tables only show the case of even numbers of
backslashes entered at the lexical level.)
The problem with the historical approach is that there is no way to
@@ -12641,10 +12784,10 @@ This is shown in *note table-sub-proposed::.
`\\q' `\q' A literal `\q'
`\\\\' `\\' `\\'
-Table 9.2: GNU `awk' rules for `sub()' and backslash
+Table 9.2: `gawk' rules for `sub()' and backslash
In a nutshell, at the runtime level, there are now three special
-sequences of characters (`\\\&', `\\&' and `\&') whereas historically
+sequences of characters (`\\\&', `\\&', and `\&') whereas historically
there was only one. However, as in the historical case, any `\' that
is not part of one of these three sequences is not special and appears
in the output literally.
@@ -12674,7 +12817,7 @@ Table 9.3: POSIX rules for `sub()' and `gsub()'
`\\\\' is seen as `\\' and produces `\' instead of `\\'.
Starting with version 3.1.4, `gawk' followed the POSIX rules when
-`--posix' is specified (*note Options::). Otherwise, it continued to
+`--posix' was specified (*note Options::). Otherwise, it continued to
follow the proposed rules, as that had been its behavior for many years.
When version 4.0.0 was released, the `gawk' maintainer made the
@@ -12701,9 +12844,9 @@ the `\' does not, as shown in *note table-gensub-escapes::.
Table 9.4: Escape sequence processing for `gensub()'
- Because of the complexity of the lexical and runtime level processing
-and the special cases for `sub()' and `gsub()', we recommend the use of
-`gawk' and `gensub()' when you have to do substitutions.
+ Because of the complexity of the lexical- and runtime-level
+processing and the special cases for `sub()' and `gsub()', we recommend
+the use of `gawk' and `gensub()' when you have to do substitutions.
---------- Footnotes ----------
@@ -12730,10 +12873,10 @@ parameters are enclosed in square brackets ([ ]):
When closing a coprocess, it is occasionally useful to first close
one end of the two-way pipe and then to close the other. This is
done by providing a second argument to `close()'. This second
- argument should be one of the two string values `"to"' or `"from"',
- indicating which end of the pipe to close. Case in the string does
- not matter. *Note Two-way I/O::, which discusses this feature in
- more detail and gives an example.
+ argument (HOW) should be one of the two string values `"to"' or
+ `"from"', indicating which end of the pipe to close. Case in the
+ string does not matter. *Note Two-way I/O::, which discusses this
+ feature in more detail and gives an example.
Note that the second argument to `close()' is a `gawk' extension;
it is not available in compatibility mode (*note Options::).
@@ -12751,7 +12894,7 @@ parameters are enclosed in square brackets ([ ]):
sometimes it is necessary to force a program to "flush" its
buffers (i.e., write the information to its destination, even if a
buffer is not full). This is the purpose of the `fflush()'
- function--`gawk' also buffers its output and the `fflush()'
+ function--`gawk' also buffers its output, and the `fflush()'
function forces `gawk' to flush its buffers.
Brian Kernighan added `fflush()' to his `awk' in April 1992. For
@@ -12768,16 +12911,17 @@ parameters are enclosed in square brackets ([ ]):
output files and pipes if the argument was the null string.
This was changed in order to be compatible with Brian
Kernighan's `awk', in the hope that standardizing this
- feature in POSIX would then be easier (which indeed helped).
+ feature in POSIX would then be easier (which indeed proved to
+ be the case).
With `gawk', you can use `fflush("/dev/stdout")' if you wish
to flush only the standard output.
`fflush()' returns zero if the buffer is successfully flushed;
- otherwise, it returns non-zero. (`gawk' returns -1.) In the case
- where all buffers are flushed, the return value is zero only if
- all buffers were flushed successfully. Otherwise, it is -1, and
- `gawk' warns about the problem FILENAME.
+ otherwise, it returns a nonzero value. (`gawk' returns -1.) In
+ the case where all buffers are flushed, the return value is zero
+ only if all buffers were flushed successfully. Otherwise, it is
+ -1, and `gawk' warns about the problem FILENAME.
`gawk' also issues a warning message if you attempt to flush a
file or pipe that was opened for reading (such as with `getline'),
@@ -12786,9 +12930,9 @@ parameters are enclosed in square brackets ([ ]):
Interactive Versus Noninteractive Buffering
- As a side point, buffering issues can be even more confusing,
- depending upon whether your program is "interactive" (i.e.,
- communicating with a user sitting at a keyboard).(1)
+ As a side point, buffering issues can be even more confusing if
+ your program is "interactive" (i.e., communicating with a user
+ sitting at a keyboard).(1)
Interactive programs generally "line buffer" their output (i.e.,
they write out every line). Noninteractive programs wait until
@@ -12817,7 +12961,7 @@ parameters are enclosed in square brackets ([ ]):
shot.
`system(COMMAND)'
- Execute the operating-system command COMMAND and then return to
+ Execute the operating system command COMMAND and then return to
the `awk' program. Return COMMAND's exit status.
For example, if the following fragment of code is put in your `awk'
@@ -12906,14 +13050,14 @@ File: gawk.info, Node: Time Functions, Next: Bitwise Functions, Prev: I/O Fun
`awk' programs are commonly used to process log files containing
timestamp information, indicating when a particular log record was
-written. Many programs log their timestamp in the form returned by the
-`time()' system call, which is the number of seconds since a particular
-epoch. On POSIX-compliant systems, it is the number of seconds since
-1970-01-01 00:00:00 UTC, not counting leap seconds.(1) All known
-POSIX-compliant systems support timestamps from 0 through 2^31 - 1,
-which is sufficient to represent times through 2038-01-19 03:14:07 UTC.
-Many systems support a wider range of timestamps, including negative
-timestamps that represent times before the epoch.
+written. Many programs log their timestamps in the form returned by
+the `time()' system call, which is the number of seconds since a
+particular epoch. On POSIX-compliant systems, it is the number of
+seconds since 1970-01-01 00:00:00 UTC, not counting leap seconds.(1)
+All known POSIX-compliant systems support timestamps from 0 through
+2^31 - 1, which is sufficient to represent times through 2038-01-19
+03:14:07 UTC. Many systems support a wider range of timestamps,
+including negative timestamps that represent times before the epoch.
In order to make it easier to process such log files and to produce
useful reports, `gawk' provides the following functions for working
@@ -12936,9 +13080,9 @@ enclosed in square brackets ([ ]):
specified; for example, an hour of -1 means 1 hour before midnight.
The origin-zero Gregorian calendar is assumed, with year 0
preceding year 1 and year -1 preceding year 0. The time is
- assumed to be in the local timezone. If the daylight-savings flag
- is positive, the time is assumed to be daylight savings time; if
- zero, the time is assumed to be standard time; and if negative
+ assumed to be in the local time zone. If the daylight-savings
+ flag is positive, the time is assumed to be daylight savings time;
+ if zero, the time is assumed to be standard time; and if negative
(the default), `mktime()' attempts to determine whether daylight
savings time is in effect for the specified time.
@@ -13079,23 +13223,23 @@ the following date format specifications:
The weekday as a decimal number (1-7). Monday is day one.
`%U'
- The week number of the year (the first Sunday as the first day of
- week one) as a decimal number (00-53).
+ The week number of the year (with the first Sunday as the first
+ day of week one) as a decimal number (00-53).
`%V'
- The week number of the year (the first Monday as the first day of
- week one) as a decimal number (01-53). The method for determining
- the week number is as specified by ISO 8601. (To wit: if the week
- containing January 1 has four or more days in the new year, then
- it is week one; otherwise it is week 53 of the previous year and
- the next week is week one.)
+ The week number of the year (with the first Monday as the first
+ day of week one) as a decimal number (01-53). The method for
+ determining the week number is as specified by ISO 8601. (To wit:
+ if the week containing January 1 has four or more days in the new
+ year, then it is week one; otherwise it is week 53 of the previous
+ year and the next week is week one.)
`%w'
The weekday as a decimal number (0-6). Sunday is day zero.
`%W'
- The week number of the year (the first Monday as the first day of
- week one) as a decimal number (00-53).
+ The week number of the year (with the first Monday as the first
+ day of week one) as a decimal number (00-53).
`%x'
The locale's "appropriate" date representation. (This is `%A %B
@@ -13112,8 +13256,8 @@ the following date format specifications:
The full year as a decimal number (e.g., 2015).
`%z'
- The timezone offset in a +HHMM format (e.g., the format necessary
- to produce RFC 822/RFC 1036 date headers).
+ The time zone offset in a `+HHMM' format (e.g., the format
+ necessary to produce RFC 822/RFC 1036 date headers).
`%Z'
The time zone name or abbreviation; no characters if no time zone
@@ -13230,7 +13374,7 @@ each successive pair of bits in the operands. Three common operations
are bitwise AND, OR, and XOR. The operations are described in *note
table-bitwise-ops::.
- Bit Operator
+ Bit operator
| AND | OR | XOR
|--+--+--+--+--+--
Operands | 0 | 1 | 0 | 1 | 0 | 1
@@ -13286,7 +13430,7 @@ paragraph, don't worry about it.)
Here is a user-defined function (*note User-defined::) that
illustrates the use of these functions:
- # bits2str --- turn a byte into readable 1's and 0's
+ # bits2str --- turn a byte into readable ones and zeros
function bits2str(bits, data, mask)
{
@@ -13325,13 +13469,14 @@ This program produces the following output when run:
-| lshift(0x99, 2) = 0x264 = 0000001001100100
-| rshift(0x99, 2) = 0x26 = 00100110
- The `bits2str()' function turns a binary number into a string. The
-number `1' represents a binary value where the rightmost bit is set to
-1. Using this mask, the function repeatedly checks the rightmost bit.
-ANDing the mask with the value indicates whether the rightmost bit is 1
-or not. If so, a `"1"' is concatenated onto the front of the string.
-Otherwise, a `"0"' is added. The value is then shifted right by one
-bit and the loop continues until there are no more 1 bits.
+ The `bits2str()' function turns a binary number into a string.
+Initializing `mask' to one creates a binary value where the rightmost
+bit is set to one. Using this mask, the function repeatedly checks the
+rightmost bit. ANDing the mask with the value indicates whether the
+rightmost bit is one or not. If so, a `"1"' is concatenated onto the
+front of the string. Otherwise, a `"0"' is added. The value is then
+shifted right by one bit and the loop continues until there are no more
+one bits.
If the initial value is zero, it returns a simple `"0"'. Otherwise,
at the end, it pads the value with zeros to represent multiples of
@@ -13344,9 +13489,9 @@ Nondecimal-numbers::), and then demonstrates the results of the
---------- Footnotes ----------
- (1) This example shows that 0's come in on the left side. For
+ (1) This example shows that zeros come in on the left side. For
`gawk', this is always true, but in some languages, it's possible to
-have the left side fill with 1's.
+have the left side fill with ones.

File: gawk.info, Node: Type Functions, Next: I18N Functions, Prev: Bitwise Functions, Up: Built-in
@@ -13360,7 +13505,7 @@ traverses every element of an array of arrays (*note Arrays of
Arrays::).
`isarray(X)'
- Return a true value if X is an array. Otherwise return false.
+ Return a true value if X is an array. Otherwise, return false.
`isarray()' is meant for use in two circumstances. The first is when
traversing a multidimensional array: you can test if an element is
@@ -13407,8 +13552,8 @@ brackets ([ ]):
Return the plural form used for NUMBER of the translation of
STRING1 and STRING2 in text domain DOMAIN for locale category
CATEGORY. STRING1 is the English singular variant of a message,
- and STRING2 the English plural variant of the same message. The
- default value for DOMAIN is the current value of `TEXTDOMAIN'.
+ and STRING2 is the English plural variant of the same message.
+ The default value for DOMAIN is the current value of `TEXTDOMAIN'.
The default value for CATEGORY is `"LC_MESSAGES"'.

@@ -13437,7 +13582,7 @@ File: gawk.info, Node: Definition Syntax, Next: Function Example, Up: User-de
9.2.1 Function Definition Syntax
--------------------------------
- It's entirely fair to say that the `awk' syntax for local variable
+ It's entirely fair to say that the awk syntax for local variable
definitions is appallingly awful. -- Brian Kernighan
Definitions of functions can appear anywhere between the rules of an
@@ -13467,17 +13612,22 @@ the argument names are used to hold the argument values given in the
call.
A function cannot have two parameters with the same name, nor may it
-have a parameter with the same name as the function itself. In
-addition, according to the POSIX standard, function parameters cannot
-have the same name as one of the special predefined variables (*note
-Built-in Variables::). Not all versions of `awk' enforce this
-restriction.
+have a parameter with the same name as the function itself.
+
+ CAUTION: According to the POSIX standard, function parameters
+ cannot have the same name as one of the special predefined
+ variables (*note Built-in Variables::), nor may a function
+ parameter have the same name as another function.
+
+ Not all versions of `awk' enforce these restrictions. `gawk'
+ always enforces the first restriction. With `--posix' (*note
+ Options::), it also enforces the second restriction.
Local variables act like the empty string if referenced where a
string value is required, and like zero if referenced where a numeric
-value is required. This is the same as regular variables that have
-never been assigned a value. (There is more to understand about local
-variables; *note Dynamic Typing::.)
+value is required. This is the same as the behavior of regular
+variables that have never been assigned a value. (There is more to
+understand about local variables; *note Dynamic Typing::.)
The BODY-OF-FUNCTION consists of `awk' statements. It is the most
important part of the definition, because it says what the function
@@ -13506,9 +13656,9 @@ function is supposed to be used.
variable values hide, or "shadow", any variables of the same names used
in the rest of the program. The shadowed variables are not accessible
in the function definition, because there is no way to name them while
-their names have been taken away for the local variables. All other
-variables used in the `awk' program can be referenced or set normally
-in the function's body.
+their names have been taken away for the arguments and local variables.
+All other variables used in the `awk' program can be referenced or set
+normally in the function's body.
The arguments and local variables last only as long as the function
body is executing. Once the body finishes, you can once again access
@@ -13561,7 +13711,7 @@ takes a number and prints it in a specific format:
printf "%6.3g\n", num
}
-To illustrate, here is an `awk' rule that uses our `myprint' function:
+To illustrate, here is an `awk' rule that uses our `myprint()' function:
$3 > 0 { myprint($3) }
@@ -13590,13 +13740,13 @@ extra whitespace signifies the start of the local variable list):
When working with arrays, it is often necessary to delete all the
elements in an array and start over with a new list of elements (*note
Delete::). Instead of having to repeat this loop everywhere that you
-need to clear out an array, your program can just call `delarray'.
+need to clear out an array, your program can just call `delarray()'.
(This guarantees portability. The use of `delete ARRAY' to delete the
contents of an entire array is a relatively recent(1) addition to the
POSIX standard.)
The following is an example of a recursive function. It takes a
-string as an input parameter and returns the string in backwards order.
+string as an input parameter and returns the string in reverse order.
Recursive functions must always have a test that stops the recursion.
In this case, the recursion terminates when the input string is already
empty:
@@ -13687,14 +13837,14 @@ File: gawk.info, Node: Variable Scope, Next: Pass By Value/Reference, Prev: C
9.2.3.2 Controlling Variable Scope
..................................
-Unlike many languages, there is no way to make a variable local to a
+Unlike in many languages, there is no way to make a variable local to a
`{' ... `}' block in `awk', but you can make a variable local to a
function. It is good practice to do so whenever a variable is needed
only in that function.
To make a variable local to a function, simply declare the variable
as an argument after the actual function arguments (*note Definition
-Syntax::). Look at the following example where variable `i' is a
+Syntax::). Look at the following example, where variable `i' is a
global variable used by both functions `foo()' and `bar()':
function bar()
@@ -13730,7 +13880,7 @@ variable instance:
foo's i=3
top's i=3
- If you want `i' to be local to both `foo()' and `bar()' do as
+ If you want `i' to be local to both `foo()' and `bar()', do as
follows (the extra space before `i' is a coding convention to indicate
that `i' is a local variable, not an argument):
@@ -13812,7 +13962,7 @@ explicitly whether the arguments are passed "by value" or "by
reference".
Instead, the passing convention is determined at runtime when the
-function is called according to the following rule: if the argument is
+function is called, according to the following rule: if the argument is
an array variable, then it is passed by reference. Otherwise, the
argument is passed by value.
@@ -13870,7 +14020,7 @@ function _are_ visible outside that function.
stores `"two"' in the second element of `a'.
Some `awk' implementations allow you to call a function that has not
-been defined. They only report a problem at runtime when the program
+been defined. They only report a problem at runtime, when the program
actually tries to call the function. For example:
BEGIN {
@@ -13915,15 +14065,15 @@ undefined, and therefore, unpredictable. In practice, though, all
versions of `awk' simply return the null string, which acts like zero
if used in a numeric context.
- A `return' statement with no value expression is assumed at the end
-of every function definition. So if control reaches the end of the
-function body, then technically, the function returns an unpredictable
+ A `return' statement without an EXPRESSION is assumed at the end of
+every function definition. So, if control reaches the end of the
+function body, then technically the function returns an unpredictable
value. In practice, it returns the empty string. `awk' does _not_
warn you if you use the return value of such a function.
Sometimes, you want to write a function for what it does, not for
what it returns. Such a function corresponds to a `void' function in
-C, C++ or Java, or to a `procedure' in Ada. Thus, it may be
+C, C++, or Java, or to a `procedure' in Ada. Thus, it may be
appropriate to not return any value; simply bear in mind that you
should not be using the return value of such a function.
@@ -14029,13 +14179,13 @@ you can specify the name of the function to call as a string variable,
and then call the function. Let's look at an example.
Suppose you have a file with your test scores for the classes you
-are taking. The first field is the class name. The following fields
-are the functions to call to process the data, up to a "marker" field
+are taking, and you wish to get the sum and the average of your test
+scores. The first field is the class name. The following fields are
+the functions to call to process the data, up to a "marker" field
`data:'. Following the marker, to the end of the record, are the
various numeric test scores.
- Here is the initial file; you wish to get the sum and the average of
-your test scores:
+ Here is the initial file:
Biology_101 sum average data: 87.0 92.4 78.5 94.9
Chemistry_305 sum average data: 75.2 98.3 94.7 88.2
@@ -14093,9 +14243,9 @@ using indirect function calls:
return ret
}
- These two functions expect to work on fields; thus the parameters
+ These two functions expect to work on fields; thus, the parameters
`first' and `last' indicate where in the fields to start and end.
-Otherwise they perform the expected computations and are not unusual:
+Otherwise, they perform the expected computations and are not unusual:
# For each record, print the class name and the requested statistics
{
@@ -14148,18 +14298,19 @@ to force it to be a string value.)
may think at first. The C and C++ languages provide "function
pointers," which are a mechanism for calling a function chosen at
runtime. One of the most well-known uses of this ability is the C
-`qsort()' function, which sorts an array using the famous "quick sort"
+`qsort()' function, which sorts an array using the famous "quicksort"
algorithm (see the Wikipedia article
-(http://en.wikipedia.org/wiki/Quick_sort) for more information). To
-use this function, you supply a pointer to a comparison function. This
+(http://en.wikipedia.org/wiki/Quicksort) for more information). To use
+this function, you supply a pointer to a comparison function. This
mechanism allows you to sort arbitrary data in an arbitrary fashion.
We can do something similar using `gawk', like this:
# quicksort.awk --- Quicksort algorithm, with user-supplied
# comparison function
- # quicksort --- C.A.R. Hoare's quick sort algorithm. See Wikipedia
- # or almost any algorithms or computer science text
+
+ # quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia
+ # or almost any algorithms or computer science text.
function quicksort(data, left, right, less_than, i, last)
{
@@ -14188,7 +14339,7 @@ mechanism allows you to sort arbitrary data in an arbitrary fashion.
The `quicksort()' function receives the `data' array, the starting
and ending indices to sort (`left' and `right'), and the name of a
function that performs a "less than" comparison. It then implements
-the quick sort algorithm.
+the quicksort algorithm.
To make use of the sorting function, we return to our previous
example. The first thing to do is write some comparison functions:
@@ -14282,70 +14433,24 @@ names of the two comparison functions:
-| rsort: <100.0 95.6 93.4 87.1>
Another example where indirect functions calls are useful can be
-found in processing arrays. *note Walking Arrays::, presented a simple
-function for "walking" an array of arrays. That function simply
-printed the name and value of each scalar array element. However, it is
-easy to generalize that function, by passing in the name of a function
-to call when walking an array. The modified function looks like this:
-
- function process_array(arr, name, process, do_arrays, i, new_name)
- {
- for (i in arr) {
- new_name = (name "[" i "]")
- if (isarray(arr[i])) {
- if (do_arrays)
- @process(new_name, arr[i])
- process_array(arr[i], new_name, process, do_arrays)
- } else
- @process(new_name, arr[i])
- }
- }
-
- The arguments are as follows:
-
-`arr'
- The array.
-
-`name'
- The name of the array (a string).
-
-`process'
- The name of the function to call.
-
-`do_arrays'
- If this is true, the function can handle elements that are
- subarrays.
-
- If subarrays are to be processed, that is done before walking them
-further.
-
- When run with the following scaffolding, the function produces the
-same results as does the earlier `walk_array()' function:
-
- BEGIN {
- a[1] = 1
- a[2][1] = 21
- a[2][2] = 22
- a[3] = 3
- a[4][1][1] = 411
- a[4][2] = 42
-
- process_array(a, "a", "do_print", 0)
- }
-
- function do_print(name, element)
- {
- printf "%s = %s\n", name, element
- }
+found in processing arrays. This is described in *note Walking Arrays::.
Remember that you must supply a leading `@' in front of an indirect
function call.
Starting with version 4.1.2 of `gawk', indirect function calls may
also be used with built-in functions and with extension functions
-(*note Dynamic Extensions::). The only thing you cannot do is pass a
-regular expression constant to a built-in function through an indirect
-function call.(1)
+(*note Dynamic Extensions::). There are some limitations when calling
+built-in functions indirectly, as follows.
+
+ * You cannot pass a regular expression constant to a built-in
+ function through an indirect function call.(1) This applies to the
+ `sub()', `gsub()', `gensub()', `match()', `split()' and
+ `patsplit()' functions.
+
+ * If calling `sub()' or `gsub()', you may only pass two arguments,
+ since those functions are unusual in that they update their third
+ argument. This means that `$0' will be updated.
`gawk' does its best to make indirect function calls efficient. For
example, in the following case:
@@ -14428,7 +14533,7 @@ File: gawk.info, Node: Library Functions, Next: Sample Programs, Prev: Functi
*note User-defined::, describes how to write your own `awk' functions.
Writing functions is important, because it allows you to encapsulate
algorithms and program tasks in a single place. It simplifies
-programming, making program development more manageable, and making
+programming, making program development more manageable and making
programs more readable.
In their seminal 1976 book, `Software Tools',(1) Brian Kernighan and
@@ -14533,7 +14638,7 @@ often use variable names like these for their own purposes.
The example programs shown in this major node all start the names of
their private variables with an underscore (`_'). Users generally
don't use leading underscores in their variable names, so this
-convention immediately decreases the chances that the variable name
+convention immediately decreases the chances that the variable names
will be accidentally shared with the user's program.
In addition, several of the library functions use a prefix that helps
@@ -14546,7 +14651,7 @@ for private function names.(1)
As a final note on variable naming, if a function makes global
variables available for use by a main program, it is a good convention
-to start that variable's name with a capital letter--for example,
+to start those variables' names with a capital letter--for example,
`getopt()''s `Opterr' and `Optind' variables (*note Getopt Function::).
The leading capital letter indicates that it is global, while the fact
that the variable name is not all capital letters indicates that the
@@ -14554,7 +14659,7 @@ variable is not one of `awk''s predefined variables, such as `FS'.
It is also important that _all_ variables in library functions that
do not need to save state are, in fact, declared local.(2) If this is
-not done, the variable could accidentally be used in the user's
+not done, the variables could accidentally be used in the user's
program, leading to bugs that are very difficult to track down:
function lib_func(x, y, l1, l2)
@@ -14732,7 +14837,7 @@ for use in printing the diagnostic message. This is not possible in
`awk', so this `assert()' function also requires a string version of
the condition that is being tested. Following is the function:
- # assert --- assert that a condition is true. Otherwise exit.
+ # assert --- assert that a condition is true. Otherwise, exit.
function assert(condition, string)
{
@@ -14753,7 +14858,7 @@ the condition that is being tested. Following is the function:
false, it prints a message to standard error, using the `string'
parameter to describe the failed condition. It then sets the variable
`_assert_exit' to one and executes the `exit' statement. The `exit'
-statement jumps to the `END' rule. If the `END' rules finds
+statement jumps to the `END' rule. If the `END' rule finds
`_assert_exit' to be true, it exits immediately.
The purpose of the test in the `END' rule is to keep any other `END'
@@ -14968,9 +15073,9 @@ the strings in an array into one long string. The following function,
`join()', accomplishes this task. It is used later in several of the
application programs (*note Sample Programs::).
- Good function design is important; this function needs to be general
-but it should also have a reasonable default behavior. It is called
-with an array as well as the beginning and ending indices of the
+ Good function design is important; this function needs to be
+general, but it should also have a reasonable default behavior. It is
+called with an array as well as the beginning and ending indices of the
elements in the array to be merged. This assumes that the array
indices are numeric--a reasonable assumption, as the array was likely
created with `split()' (*note String Functions::):
@@ -15089,7 +15194,7 @@ optional timestamp value to use instead of the current time.

File: gawk.info, Node: Readfile Function, Next: Shell Quoting, Prev: Getlocaltime Function, Up: General Functions
-10.2.8 Reading a Whole File At Once
+10.2.8 Reading a Whole File at Once
-----------------------------------
Often, it is convenient to have the entire contents of a file available
@@ -15131,13 +15236,13 @@ reads the entire contents of the named file in one shot:
It works by setting `RS' to `^$', a regular expression that will
never match if the file has contents. `gawk' reads data from the file
-into `tmp' attempting to match `RS'. The match fails after each read,
+into `tmp', attempting to match `RS'. The match fails after each read,
but fails quickly, such that `gawk' fills `tmp' with the entire
contents of the file. (*Note Records::, for information on `RT' and
`RS'.)
In the case that `file' is empty, the return value is the null
-string. Thus calling code may use something like:
+string. Thus, calling code may use something like:
contents = readfile("/some/path")
if (length(contents) == 0)
@@ -15204,7 +15309,7 @@ three-character string `"\"'\""':

File: gawk.info, Node: Data File Management, Next: Getopt Function, Prev: General Functions, Up: Library Functions
-10.3 Data File Management
+10.3 Data file Management
=========================
This minor node presents functions that are useful for managing
@@ -15221,14 +15326,15 @@ command-line data files.

File: gawk.info, Node: Filetrans Function, Next: Rewind Function, Up: Data File Management
-10.3.1 Noting Data File Boundaries
+10.3.1 Noting Data file Boundaries
----------------------------------
The `BEGIN' and `END' rules are each executed exactly once, at the
beginning and end of your `awk' program, respectively (*note
BEGIN/END::). We (the `gawk' authors) once had a user who mistakenly
-thought that the `BEGIN' rule is executed at the beginning of each data
-file and the `END' rule is executed at the end of each data file.
+thought that the `BEGIN' rules were executed at the beginning of each
+data file and the `END' rules were executed at the end of each data
+file.
When informed that this was not the case, the user requested that we
add new special patterns to `gawk', named `BEGIN_FILE' and `END_FILE',
@@ -15262,7 +15368,7 @@ does so _portably_; this works with any implementation of `awk':
This file must be loaded before the user's "main" program, so that
the rule it supplies is executed first.
- This rule relies on `awk''s `FILENAME' variable that automatically
+ This rule relies on `awk''s `FILENAME' variable, which automatically
changes for each new data file. The current file name is saved in a
private variable, `_oldfilename'. If `FILENAME' does not equal
`_oldfilename', then a new data file is being processed and it is
@@ -15277,7 +15383,7 @@ correctly even for the first data file.
The program also supplies an `END' rule to do the final processing
for the last file. Because this `END' rule comes before any `END' rules
supplied in the "main" program, `endfile()' is called first. Once
-again the value of multiple `BEGIN' and `END' rules should be clear.
+again, the value of multiple `BEGIN' and `END' rules should be clear.
If the same data file occurs twice in a row on the command line, then
`endfile()' and `beginfile()' are not executed at the end of the first
@@ -15304,7 +15410,7 @@ how it simplifies writing the main program.
You are probably wondering, if `beginfile()' and `endfile()'
functions can do the job, why does `gawk' have `BEGINFILE' and
-`ENDFILE' patterns (*note BEGINFILE/ENDFILE::)?
+`ENDFILE' patterns?
Good question. Normally, if `awk' cannot open a file, this causes
an immediate fatal error. In this case, there is no way for a
@@ -15312,7 +15418,8 @@ user-defined function to deal with the problem, as the mechanism for
calling it relies on the file being open and at the first record. Thus,
the main reason for `BEGINFILE' is to give you a "hook" to catch files
that cannot be processed. `ENDFILE' exists for symmetry, and because
-it provides an easy way to do per-file cleanup processing.
+it provides an easy way to do per-file cleanup processing. For more
+information, refer to *note BEGINFILE/ENDFILE::.

File: gawk.info, Node: Rewind Function, Next: File Checking, Prev: Filetrans Function, Up: Data File Management
@@ -15320,15 +15427,14 @@ File: gawk.info, Node: Rewind Function, Next: File Checking, Prev: Filetrans
10.3.2 Rereading the Current File
---------------------------------
-Another request for a new built-in function was for a `rewind()'
-function that would make it possible to reread the current file. The
-requesting user didn't want to have to use `getline' (*note Getline::)
-inside a loop.
+Another request for a new built-in function was for a function that
+would make it possible to reread the current file. The requesting user
+didn't want to have to use `getline' (*note Getline::) inside a loop.
However, as long as you are not in the `END' rule, it is quite easy
to arrange to immediately close the current input file and then start
-over with it from the top. For lack of a better name, we'll call it
-`rewind()':
+over with it from the top. For lack of a better name, we'll call the
+function `rewind()':
# rewind.awk --- rewind the current file and start over
@@ -15358,7 +15464,7 @@ rule finishes!)

File: gawk.info, Node: File Checking, Next: Empty Files, Prev: Rewind Function, Up: Data File Management
-10.3.3 Checking for Readable Data Files
+10.3.3 Checking for Readable Data files
---------------------------------------
Normally, if you give `awk' a data file that isn't readable, it stops
@@ -15386,7 +15492,7 @@ longer in the list). See also *note ARGC and ARGV::.
Because `awk' variable names only allow the English letters, the
regular expression check purposely does not use character classes such
-as `[:alpha:]' and `[:alnum:]' (*note Bracket Expressions::)
+as `[:alpha:]' and `[:alnum:]' (*note Bracket Expressions::).
---------- Footnotes ----------
@@ -15397,14 +15503,14 @@ opened. However, the code here provides a portable solution.

File: gawk.info, Node: Empty Files, Next: Ignoring Assigns, Prev: File Checking, Up: Data File Management
-10.3.4 Checking for Zero-length Files
+10.3.4 Checking for Zero-Length Files
-------------------------------------
All known `awk' implementations silently skip over zero-length files.
This is a by-product of `awk''s implicit
read-a-record-and-match-against-the-rules loop: when `awk' tries to
-read a record from an empty file, it immediately receives an end of
-file indication, closes the file, and proceeds on to the next
+read a record from an empty file, it immediately receives an
+end-of-file indication, closes the file, and proceeds on to the next
command-line data file, _without_ executing any user-level `awk'
program code.
@@ -15448,13 +15554,13 @@ of the `for' loop uses the `<=' operator, not `<'.

File: gawk.info, Node: Ignoring Assigns, Prev: Empty Files, Up: Data File Management
-10.3.5 Treating Assignments as File Names
+10.3.5 Treating Assignments as File names
-----------------------------------------
Occasionally, you might not want `awk' to process command-line variable
assignments (*note Assignment Options::). In particular, if you have a
file name that contains an `=' character, `awk' treats the file name as
-an assignment, and does not process it.
+an assignment and does not process it.
Some users have suggested an additional command-line option for
`gawk' to disable command-line assignments. However, some simple
@@ -15744,8 +15850,8 @@ which is in `ARGV[0]':
}
}
- The rest of the `BEGIN' rule is a simple test program. Here is the
-result of two sample runs of the test program:
+ The rest of the `BEGIN' rule is a simple test program. Here are the
+results of two sample runs of the test program:
$ awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x
-| c = <a>, Optarg = <>
@@ -15791,10 +15897,10 @@ File: gawk.info, Node: Passwd Functions, Next: Group Functions, Prev: Getopt
==============================
The `PROCINFO' array (*note Built-in Variables::) provides access to
-the current user's real and effective user and group ID numbers, and if
-available, the user's supplementary group set. However, because these
-are numbers, they do not provide very useful information to the average
-user. There needs to be some way to find the user information
+the current user's real and effective user and group ID numbers, and,
+if available, the user's supplementary group set. However, because
+these are numbers, they do not provide very useful information to the
+average user. There needs to be some way to find the user information
associated with the user and group ID numbers. This minor node
presents a suite of functions for retrieving information from the user
database. *Note Group Functions::, for a similar suite that retrieves
@@ -15805,7 +15911,7 @@ kept. Instead, it provides the `<pwd.h>' header file and several C
language subroutines for obtaining user information. The primary
function is `getpwent()', for "get password entry." The "password"
comes from the original user database file, `/etc/passwd', which stores
-user information, along with the encrypted passwords (hence the name).
+user information along with the encrypted passwords (hence the name).
Although an `awk' program could simply read `/etc/passwd' directly,
this file may not contain complete information about the system's set
@@ -15853,7 +15959,7 @@ Encrypted password
User-ID
The user's numeric user ID number. (On some systems, it's a C
- `long', and not an `int'. Thus we cast it to `long' for all
+ `long', and not an `int'. Thus, we cast it to `long' for all
cases.)
Group-ID
@@ -15952,8 +16058,8 @@ or on some other `awk' implementation.
`PROCINFO["FS"]', is similar.
The main part of the function uses a loop to read database lines,
-split the line into fields, and then store the line into each array as
-necessary. When the loop is done, `_pw_init()' cleans up by closing
+split the lines into fields, and then store the lines into each array
+as necessary. When the loop is done, `_pw_init()' cleans up by closing
the pipeline, setting `_pw_inited' to one, and restoring `FS' (and
`FIELDWIDTHS' or `FPAT' if necessary), `RS', and `$0'. The use of
`_pw_count' is explained shortly.
@@ -16081,7 +16187,7 @@ Group Password
Group ID Number
The group's numeric group ID number; the association of name to
number must be unique within the file. (On some systems it's a C
- `long', and not an `int'. Thus we cast it to `long' for all
+ `long', and not an `int'. Thus, we cast it to `long' for all
cases.)
Group Member List
@@ -16171,29 +16277,30 @@ to ensure that the database is scanned no more than once. The
`_gr_init()' function first saves `FS', `RS', and `$0', and then sets
`FS' and `RS' to the correct values for scanning the group information.
It also takes care to note whether `FIELDWIDTHS' or `FPAT' is being
-used, and to restore the appropriate field splitting mechanism.
+used, and to restore the appropriate field-splitting mechanism.
- The group information is stored is several associative arrays. The
+ The group information is stored in several associative arrays. The
arrays are indexed by group name (`_gr_byname'), by group ID number
(`_gr_bygid'), and by position in the database (`_gr_bycount'). There
is an additional array indexed by username (`_gr_groupsbyuser'), which
is a space-separated list of groups to which each user belongs.
- Unlike the user database, it is possible to have multiple records in
-the database for the same group. This is common when a group has a
+ Unlike in the user database, it is possible to have multiple records
+in the database for the same group. This is common when a group has a
large number of members. A pair of such entries might look like the
following:
- tvpeople:*:101:johny,jay,arsenio
+ tvpeople:*:101:johnny,jay,arsenio
tvpeople:*:101:david,conan,tom,joan
For this reason, `_gr_init()' looks to see if a group name or group
-ID number is already seen. If it is, the usernames are simply
+ID number is already seen. If so, the usernames are simply
concatenated onto the previous list of users.(1)
Finally, `_gr_init()' closes the pipeline to `grcat', restores `FS'
-(and `FIELDWIDTHS' or `FPAT' if necessary), `RS', and `$0', initializes
-`_gr_count' to zero (it is used later), and makes `_gr_inited' nonzero.
+(and `FIELDWIDTHS' or `FPAT', if necessary), `RS', and `$0',
+initializes `_gr_count' to zero (it is used later), and makes
+`_gr_inited' nonzero.
The `getgrnam()' function takes a group name as its argument, and if
that group exists, it is returned. Otherwise, it relies on the array
@@ -16256,9 +16363,9 @@ very simple, relying on `awk''s associative arrays to do work.
---------- Footnotes ----------
- (1) There is actually a subtle problem with the code just presented.
-Suppose that the first time there were no names. This code adds the
-names with a leading comma. It also doesn't check that there is a `$4'.
+ (1) There is a subtle problem with the code just presented. Suppose
+that the first time there were no names. This code adds the names with
+a leading comma. It also doesn't check that there is a `$4'.

File: gawk.info, Node: Walking Arrays, Next: Library Functions Summary, Prev: Group Functions, Up: Library Functions
@@ -16267,11 +16374,11 @@ File: gawk.info, Node: Walking Arrays, Next: Library Functions Summary, Prev:
================================
*note Arrays of Arrays::, described how `gawk' provides arrays of
-arrays. In particular, any element of an array may be either a scalar,
+arrays. In particular, any element of an array may be either a scalar
or another array. The `isarray()' function (*note Type Functions::)
lets you distinguish an array from a scalar. The following function,
-`walk_array()', recursively traverses an array, printing each element's
-indices and value. You call it with the array and a string
+`walk_array()', recursively traverses an array, printing the element
+indices and values. You call it with the array and a string
representing the name of the array:
function walk_array(arr, name, i)
@@ -16311,6 +16418,61 @@ value. Here is a main program to demonstrate:
-| a[4][1][1] = 411
-| a[4][2] = 42
+ The function just presented simply prints the name and value of each
+scalar array element. However, it is easy to generalize it, by passing
+in the name of a function to call when walking an array. The modified
+function looks like this:
+
+ function process_array(arr, name, process, do_arrays, i, new_name)
+ {
+ for (i in arr) {
+ new_name = (name "[" i "]")
+ if (isarray(arr[i])) {
+ if (do_arrays)
+ @process(new_name, arr[i])
+ process_array(arr[i], new_name, process, do_arrays)
+ } else
+ @process(new_name, arr[i])
+ }
+ }
+
+ The arguments are as follows:
+
+`arr'
+ The array.
+
+`name'
+ The name of the array (a string).
+
+`process'
+ The name of the function to call.
+
+`do_arrays'
+ If this is true, the function can handle elements that are
+ subarrays.
+
+ If subarrays are to be processed, that is done before walking them
+further.
+
+ When run with the following scaffolding, the function produces the
+same results as does the earlier version of `walk_array()':
+
+ BEGIN {
+ a[1] = 1
+ a[2][1] = 21
+ a[2][2] = 22
+ a[3] = 3
+ a[4][1][1] = 411
+ a[4][2] = 42
+
+ process_array(a, "a", "do_print", 0)
+ }
+
+ function do_print(name, element)
+ {
+ printf "%s = %s\n", name, element
+ }
+

File: gawk.info, Node: Library Functions Summary, Next: Library Exercises, Prev: Walking Arrays, Up: Library Functions
@@ -16328,24 +16490,24 @@ File: gawk.info, Node: Library Functions Summary, Next: Library Exercises, Pr
* The functions presented here fit into the following categories:
General problems
- Number-to-string conversion, assertions, rounding, random
- number generation, converting characters to numbers, joining
- strings, getting easily usable time-of-day information, and
- reading a whole file in one shot.
+ Number-to-string conversion, testing assertions, rounding,
+ random number generation, converting characters to numbers,
+ joining strings, getting easily usable time-of-day
+ information, and reading a whole file in one shot
Managing data files
Noting data file boundaries, rereading the current file,
checking for readable files, checking for zero-length files,
- and treating assignments as file names.
+ and treating assignments as file names
Processing command-line options
- An `awk' version of the standard C `getopt()' function.
+ An `awk' version of the standard C `getopt()' function
Reading the user and group databases
- Two sets of routines that parallel the C library versions.
+ Two sets of routines that parallel the C library versions
Traversing arrays of arrays
- A simple function to traverse an array of arrays to any depth.
+ Two functions that traverse an array of arrays to any depth

@@ -16440,7 +16602,7 @@ you.
to replace the installed versions on your system. Nor may all of these
programs be fully compliant with the most recent POSIX standard. This
is not a problem; their purpose is to illustrate `awk' language
-programming for "real world" tasks.
+programming for "real-world" tasks.
The programs are presented in alphabetical order.
@@ -16466,7 +16628,7 @@ separated by TABs by default, but you may supply a command-line option
to change the field "delimiter" (i.e., the field-separator character).
`cut''s definition of fields is less general than `awk''s.
- A common use of `cut' might be to pull out just the login name of
+ A common use of `cut' might be to pull out just the login names of
logged-on users from the output of `who'. For example, the following
pipeline generates a sorted, unique list of the logged-on users:
@@ -16875,7 +17037,7 @@ unsuccessful match. If the line does not match, the `next' statement
just moves on to the next record.
A number of additional tests are made, but they are only done if we
-are not counting lines. First, if the user only wants exit status
+are not counting lines. First, if the user only wants the exit status
(`no_print' is true), then it is enough to know that _one_ line in this
file matched, and we can skip on to the next file with `nextfile'.
Similarly, if we are only printing file names, we can print the file
@@ -16909,7 +17071,7 @@ line is printed, with a leading file name and colon if necessary:
}
The `END' rule takes care of producing the correct exit status. If
-there are no matches, the exit status is one; otherwise it is zero:
+there are no matches, the exit status is one; otherwise, it is zero:
END {
exit (total == 0)
@@ -16951,7 +17113,8 @@ a more palatable output than just individual numbers.
Here is a simple version of `id' written in `awk'. It uses the user
database library functions (*note Passwd Functions::) and the group
-database library functions (*note Group Functions::):
+database library functions (*note Group Functions::) from *note Library
+Functions::.
The program is fairly straightforward. All the work is done in the
`BEGIN' rule. The user and group ID numbers are obtained from
@@ -17048,8 +17211,8 @@ is as follows:(1)
By default, the output files are named `xaa', `xab', and so on. Each
file has 1,000 lines in it, with the likely exception of the last file.
To change the number of lines in each file, supply a number on the
-command line preceded with a minus (e.g., `-500' for files with 500
-lines in them instead of 1,000). To change the name of the output
+command line preceded with a minus sign (e.g., `-500' for files with
+500 lines in them instead of 1,000). To change the names of the output
files to something like `myfileaa', `myfileab', and so on, supply an
additional argument that specifies the file name prefix.
@@ -17686,7 +17849,7 @@ checking and setting of defaults: the delay, the count, and the message
to print. If the user supplied a message without the ASCII BEL
character (known as the "alert" character, `"\a"'), then it is added to
the message. (On many systems, printing the ASCII BEL generates an
-audible alert. Thus when the alarm goes off, the system calls attention
+audible alert. Thus, when the alarm goes off, the system calls attention
to itself in case the user is not looking at the computer.) Just for a
change, this program uses a `switch' statement (*note Switch
Statement::), but the processing could be done with a series of
@@ -17818,7 +17981,7 @@ the "from" list.
Once upon a time, a user proposed adding a transliteration function
to `gawk'. The following program was written to prove that character
transliteration could be done with a user-level function. This program
-is not as complete as the system `tr' utility but it does most of the
+is not as complete as the system `tr' utility, but it does most of the
job.
The `translate' program was written long before `gawk' acquired the
@@ -17828,13 +17991,13 @@ and `gsub()' built-in functions (*note String Functions::). There are
two functions. The first, `stranslate()', takes three arguments:
`from'
- A list of characters from which to translate.
+ A list of characters from which to translate
`to'
- A list of characters to which to translate.
+ A list of characters to which to translate
`target'
- The string on which to do the translation.
+ The string on which to do the translation
Associative arrays make the translation part fairly easy. `t_ar'
holds the "to" characters, indexed by the "from" characters. Then a
@@ -17842,7 +18005,7 @@ simple loop goes through `from', one character at a time. For each
character in `from', if the character appears in `target', it is
replaced with the corresponding `to' character.
- The `translate()' function calls `stranslate()' using `$0' as the
+ The `translate()' function calls `stranslate()', using `$0' as the
target. The main program sets two global variables, `FROM' and `TO',
from the command line, and then changes `ARGV' so that `awk' reads from
the standard input.
@@ -17851,7 +18014,7 @@ the standard input.
record:
# translate.awk --- do tr-like stuff
- # Bugs: does not handle things like: tr A-Z a-z, it has
+ # Bugs: does not handle things like tr A-Z a-z; it has
# to be spelled out. However, if `to' is shorter than `from',
# the last character in `to' is used for the rest of `from'.
@@ -17929,13 +18092,13 @@ File: gawk.info, Node: Labels Program, Next: Word Sorting, Prev: Translate Pr
11.3.4 Printing Mailing Labels
------------------------------
-Here is a "real world"(1) program. This script reads lists of names and
+Here is a "real-world"(1) program. This script reads lists of names and
addresses and generates mailing labels. Each page of labels has 20
labels on it, two across and 10 down. The addresses are guaranteed to
be no more than five lines of data. Each address is separated from the
next by a blank line.
- The basic idea is to read 20 labels worth of data. Each line of
+ The basic idea is to read 20 labels' worth of data. Each line of
each label is stored in the `line' array. The single rule takes care
of filling the `line' array and printing the page when 20 labels have
been read.
@@ -17947,13 +18110,13 @@ splits records at blank lines (*note Records::). It sets `MAXLINES' to
Most of the work is done in the `printpage()' function. The label
lines are stored sequentially in the `line' array. But they have to
-print horizontally; `line[1]' next to `line[6]', `line[2]' next to
+print horizontally: `line[1]' next to `line[6]', `line[2]' next to
`line[7]', and so on. Two loops accomplish this. The outer loop,
controlled by `i', steps through every 10 lines of data; this is each
row of labels. The inner loop, controlled by `j', goes through the
-lines within the row. As `j' goes from 0 to 4, `i+j' is the `j'-th
-line in the row, and `i+j+5' is the entry next to it. The output ends
-up looking something like this:
+lines within the row. As `j' goes from 0 to 4, `i+j' is the `j'th line
+in the row, and `i+j+5' is the entry next to it. The output ends up
+looking something like this:
line 1 line 6
line 2 line 7
@@ -18056,8 +18219,8 @@ a useful format.
printf "%s\t%d\n", word, freq[word]
}
- The program relies on `awk''s default field splitting mechanism to
-break each line up into "words," and uses an associative array named
+ The program relies on `awk''s default field-splitting mechanism to
+break each line up into "words" and uses an associative array named
`freq', indexed by each word, to count the number of times the word
occurs. In the `END' rule, it prints the counts.
@@ -18143,7 +18306,7 @@ File: gawk.info, Node: History Sorting, Next: Extract Program, Prev: Word Sor
11.3.6 Removing Duplicates from Unsorted Text
---------------------------------------------
-The `uniq' program (*note Uniq Program::), removes duplicate lines from
+The `uniq' program (*note Uniq Program::) removes duplicate lines from
_sorted_ data.
Suppose, however, you need to remove duplicate lines from a data
@@ -18196,7 +18359,7 @@ hand. Here we present a program that can extract parts of a Texinfo
input file into separate files.
This Info file is written in Texinfo
-(http://www.gnu.org/software/texinfo/), the GNU project's document
+(http://www.gnu.org/software/texinfo/), the GNU Project's document
formatting language. A single Texinfo source file can be used to
produce both printed documentation, with TeX, and online documentation.
(The Texinfo language is described fully, starting with *note
@@ -18237,7 +18400,7 @@ them in a standard directory where `gawk' can find them. The Texinfo
file looks something like this:
...
- This program has a @code{BEGIN} rule,
+ This program has a @code{BEGIN} rule
that prints a nice message:
@example
@@ -18262,7 +18425,7 @@ upper- and lowercase letters in the directives won't matter.
given (`NF' is at least three) and also checking that the command exits
with a zero exit status, signifying OK:
- # extract.awk --- extract files and run programs from texinfo files
+ # extract.awk --- extract files and run programs from Texinfo files
BEGIN { IGNORECASE = 1 }
@@ -18289,11 +18452,11 @@ The variable `e' is used so that the rule fits nicely on the screen.
file name is given in the directive. If the file named is not the
current file, then the current file is closed. Keeping the current file
open until a new file is encountered allows the use of the `>'
-redirection for printing the contents, keeping open file management
+redirection for printing the contents, keeping open-file management
simple.
The `for' loop does the work. It reads lines using `getline' (*note
-Getline::). For an unexpected end of file, it calls the
+Getline::). For an unexpected end-of-file, it calls the
`unexpected_eof()' function. If the line is an "endfile" line, then it
breaks out of the loop. If the line is an `@group' or `@end group'
line, then it ignores it and goes on to the next line. Similarly,
@@ -18383,10 +18546,10 @@ File: gawk.info, Node: Simple Sed, Next: Igawk Program, Prev: Extract Program
11.3.8 A Simple Stream Editor
-----------------------------
-The `sed' utility is a stream editor, a program that reads a stream of
-data, makes changes to it, and passes it on. It is often used to make
-global changes to a large file or to a stream of data generated by a
-pipeline of commands. Although `sed' is a complicated program in its
+The `sed' utility is a "stream editor", a program that reads a stream
+of data, makes changes to it, and passes it on. It is often used to
+make global changes to a large file or to a stream of data generated by
+a pipeline of commands. Although `sed' is a complicated program in its
own right, its most common use is to perform global substitutions in
the middle of a pipeline:
@@ -18500,7 +18663,7 @@ include a library function twice.
`igawk' should behave just like `gawk' externally. This means it
should accept all of `gawk''s command-line arguments, including the
-ability to have multiple source files specified via `-f', and the
+ability to have multiple source files specified via `-f' and the
ability to mix command-line and library source files.
The program is written using the POSIX Shell (`sh') command
@@ -18530,8 +18693,8 @@ language.(1) It works as follows:
file names).
This program uses shell variables extensively: for storing
-command-line arguments, the text of the `awk' program that will expand
-the user's program, for the user's original program, and for the
+command-line arguments and the text of the `awk' program that will
+expand the user's program, for the user's original program, and for the
expanded program. Doing so removes some potential problems that might
arise were we to use temporary files instead, at the cost of making the
script somewhat more complicated.
@@ -18789,7 +18952,7 @@ It's done in these steps:
The last step is to call `gawk' with the expanded program, along
with the original options and command-line arguments that the user
-supplied.
+supplied:
eval gawk $opts -- '"$processed_program"' '"$@"'
@@ -18852,15 +19015,15 @@ One word is an anagram of another if both words contain the same letters
Column 2, Problem C, of Jon Bentley's `Programming Pearls', Second
Edition, presents an elegant algorithm. The idea is to give words that
are anagrams a common signature, sort all the words together by their
-signature, and then print them. Dr. Bentley observes that taking the
-letters in each word and sorting them produces that common signature.
+signatures, and then print them. Dr. Bentley observes that taking the
+letters in each word and sorting them produces those common signatures.
The following program uses arrays of arrays to bring together words
with the same signature and array sorting to print the words in sorted
order:
- # anagram.awk --- An implementation of the anagram finding algorithm
- # from Jon Bentley's "Programming Pearls", 2nd edition.
+ # anagram.awk --- An implementation of the anagram-finding algorithm
+ # from Jon Bentley's "Programming Pearls," 2nd edition.
# Addison Wesley, 2000, ISBN 0-201-65788-0.
# Column 2, Problem C, section 2.8, pp 18-20.
@@ -18880,7 +19043,7 @@ signature; the second dimension is the word itself:
apart into individual letters, sorts the letters, and then joins them
back together:
- # word2key --- split word apart into letters, sort, joining back together
+ # word2key --- split word apart into letters, sort, and join back together
function word2key(word, a, i, n, result)
{
@@ -18978,12 +19141,13 @@ File: gawk.info, Node: Programs Summary, Next: Programs Exercises, Prev: Misc
characters. The ability to use `split()' with the empty string as
the separator can considerably simplify such tasks.
- * The library functions from *note Library Functions::, proved their
- usefulness for a number of real (if small) programs.
+ * The examples here demonstrate the usefulness of the library
+ functions from *note Library Functions::, for a number of real (if
+ small) programs.
* Besides reinventing POSIX wheels, other programs solved a
- selection of interesting problems, such as finding duplicates
- words in text, printing mailing labels, and finding anagrams.
+ selection of interesting problems, such as finding duplicate words
+ in text, printing mailing labels, and finding anagrams.

@@ -19100,16 +19264,16 @@ File: gawk.info, Node: Advanced Features, Next: Internationalization, Prev: S
This major node discusses advanced features in `gawk'. It's a bit
of a "grab bag" of items that are otherwise unrelated to each other.
-First, a command-line option allows `gawk' to recognize nondecimal
-numbers in input data, not just in `awk' programs. Then, `gawk''s
-special features for sorting arrays are presented. Next, two-way I/O,
-discussed briefly in earlier parts of this Info file, is described in
-full detail, along with the basics of TCP/IP networking. Finally,
-`gawk' can "profile" an `awk' program, making it possible to tune it
-for performance.
+First, we look at a command-line option that allows `gawk' to recognize
+nondecimal numbers in input data, not just in `awk' programs. Then,
+`gawk''s special features for sorting arrays are presented. Next,
+two-way I/O, discussed briefly in earlier parts of this Info file, is
+described in full detail, along with the basics of TCP/IP networking.
+Finally, we see how `gawk' can "profile" an `awk' program, making it
+possible to tune it for performance.
- A number of advanced features require separate major nodes of their
-own:
+ Additional advanced features are discussed in separate major nodes
+of their own:
* *note Internationalization::, discusses how to internationalize
your `awk' programs, so that they can speak multiple national
@@ -19183,7 +19347,7 @@ File: gawk.info, Node: Array Sorting, Next: Two-way I/O, Prev: Nondecimal Dat
12.2 Controlling Array Traversal and Array Sorting
==================================================
-`gawk' lets you control the order in which a `for (i in array)' loop
+`gawk' lets you control the order in which a `for (INDX in ARRAY)' loop
traverses an array.
In addition, two built-in functions, `asort()' and `asorti()', let
@@ -19202,9 +19366,9 @@ File: gawk.info, Node: Controlling Array Traversal, Next: Array Sorting Functi
12.2.1 Controlling Array Traversal
----------------------------------
-By default, the order in which a `for (i in array)' loop scans an array
-is not defined; it is generally based upon the internal implementation
-of arrays inside `awk'.
+By default, the order in which a `for (INDX in ARRAY)' loop scans an
+array is not defined; it is generally based upon the internal
+implementation of arrays inside `awk'.
Often, though, it is desirable to be able to loop over the elements
in a particular order that you, the programmer, choose. `gawk' lets
@@ -19226,21 +19390,22 @@ arguments:
RETURN < 0; 0; OR > 0
}
- Here, I1 and I2 are the indices, and V1 and V2 are the corresponding
-values of the two elements being compared. Either V1 or V2, or both,
-can be arrays if the array being traversed contains subarrays as values.
-(*Note Arrays of Arrays::, for more information about subarrays.) The
-three possible return values are interpreted as follows:
+ Here, `i1' and `i2' are the indices, and `v1' and `v2' are the
+corresponding values of the two elements being compared. Either `v1'
+or `v2', or both, can be arrays if the array being traversed contains
+subarrays as values. (*Note Arrays of Arrays::, for more information
+about subarrays.) The three possible return values are interpreted as
+follows:
`comp_func(i1, v1, i2, v2) < 0'
- Index I1 comes before index I2 during loop traversal.
+ Index `i1' comes before index `i2' during loop traversal.
`comp_func(i1, v1, i2, v2) == 0'
- Indices I1 and I2 come together but the relative order with
+ Indices `i1' and `i2' come together, but the relative order with
respect to each other is undefined.
`comp_func(i1, v1, i2, v2) > 0'
- Index I1 comes after index I2 during loop traversal.
+ Index `i1' comes after index `i2' during loop traversal.
Our first comparison function can be used to scan an array in
numerical order of the indices:
@@ -19383,7 +19548,7 @@ elements compare equal. This is usually not a problem, but letting the
tied elements come out in arbitrary order can be an issue, especially
when comparing item values. The partial ordering of the equal elements
may change the next time the array is traversed, if other elements are
-added or removed from the array. One way to resolve ties when
+added to or removed from the array. One way to resolve ties when
comparing elements with otherwise equal values is to include the
indices in the comparison rules. Note that doing this may make the
loop traversal less efficient, so consider it only if necessary. The
@@ -19417,14 +19582,14 @@ lowercase letters as equivalent or distinct.
Another point to keep in mind is that in the case of subarrays, the
element values can themselves be arrays; a production comparison
-function should use the `isarray()' function (*note Type Functions::),
+function should use the `isarray()' function (*note Type Functions::)
to check for this, and choose a defined sorting order for subarrays.
All sorting based on `PROCINFO["sorted_in"]' is disabled in POSIX
mode, because the `PROCINFO' array is not special in that case.
As a side note, sorting the array indices before traversing the
-array has been reported to add 15% to 20% overhead to the execution
+array has been reported to add a 15% to 20% overhead to the execution
time of `awk' programs. For this reason, sorted array traversal is not
the default.
@@ -19473,8 +19638,8 @@ array is not affected.
Often, what's needed is to sort on the values of the _indices_
instead of the values of the elements. To do that, use the `asorti()'
function. The interface and behavior are identical to that of
-`asort()', except that the index values are used for sorting, and
-become the values of the result array:
+`asort()', except that the index values are used for sorting and become
+the values of the result array:
{ source[$0] = some_func($0) }
@@ -19506,8 +19671,8 @@ chooses_, taking into account just the indices, just the values, or
both. This is extremely powerful.
Once the array is sorted, `asort()' takes the _values_ in their
-final order, and uses them to fill in the result array, whereas
-`asorti()' takes the _indices_ in their final order, and uses them to
+final order and uses them to fill in the result array, whereas
+`asorti()' takes the _indices_ in their final order and uses them to
fill in the result array.
NOTE: Copying array indices and elements isn't expensive in terms
@@ -19705,7 +19870,7 @@ REMOTE-PORT
name.
NOTE: Failure in opening a two-way socket will result in a
- non-fatal error being returned to the calling code. The value of
+ nonfatal error being returned to the calling code. The value of
`ERRNO' indicates the error (*note Auto-set::).
Consider the following very simple example:
@@ -19786,8 +19951,8 @@ First, the `awk' program:
junk
Here is the `awkprof.out' that results from running the `gawk'
-profiler on this program and data. (This example also illustrates that
-`awk' programmers sometimes get up very early in the morning to work.)
+profiler on this program and data (this example also illustrates that
+`awk' programmers sometimes get up very early in the morning to work):
# gawk profile, created Mon Sep 29 05:16:21 2014
@@ -19840,7 +20005,7 @@ profiler on this program and data. (This example also illustrates that
output. They are as follows:
* The program is printed in the order `BEGIN' rules, `BEGINFILE'
- rules, pattern/action rules, `ENDFILE' rules, `END' rules and
+ rules, pattern-action rules, `ENDFILE' rules, `END' rules, and
functions, listed alphabetically. Multiple `BEGIN' and `END'
rules retain their separate identities, as do multiple `BEGINFILE'
and `ENDFILE' rules.
@@ -19885,13 +20050,13 @@ output. They are as follows:
scalar, it gets parenthesized.
* `gawk' supplies leading comments in front of the `BEGIN' and `END'
- rules, the `BEGINFILE' and `ENDFILE' rules, the pattern/action
+ rules, the `BEGINFILE' and `ENDFILE' rules, the pattern-action
rules, and the functions.
The profiled version of your program may not look exactly like what
you typed when you wrote it. This is because `gawk' creates the
-profiled version by "pretty printing" its internal representation of
+profiled version by "pretty-printing" its internal representation of
the program. The advantage to this is that `gawk' can produce a
standard representation. Also, things such as:
@@ -19941,15 +20106,15 @@ output profile file.
produces the profile and the function call trace and then exits.
When `gawk' runs on MS-Windows systems, it uses the `INT' and `QUIT'
-signals for producing the profile and, in the case of the `INT' signal,
+signals for producing the profile, and in the case of the `INT' signal,
`gawk' exits. This is because these systems don't support the `kill'
command, so the only signals you can deliver to a program are those
generated by the keyboard. The `INT' signal is generated by the
-`Ctrl-<C>' or `Ctrl-<BREAK>' key, while the `QUIT' signal is generated
-by the `Ctrl-<\>' key.
+`Ctrl-c' or `Ctrl-BREAK' key, while the `QUIT' signal is generated by
+the `Ctrl-\' key.
Finally, `gawk' also accepts another option, `--pretty-print'. When
-called this way, `gawk' "pretty prints" the program into `awkprof.out',
+called this way, `gawk' "pretty-prints" the program into `awkprof.out',
without any execution counts.
NOTE: Once upon a time, the `--pretty-print' option would also run
@@ -20001,7 +20166,7 @@ File: gawk.info, Node: Advanced Features Summary, Prev: Profiling, Up: Advanc
two-way communications.
* By using special file names with the `|&' operator, you can open a
- TCP/IP (or UDP/IP) connection to remote hosts in the Internet.
+ TCP/IP (or UDP/IP) connection to remote hosts on the Internet.
`gawk' supports both IPv4 and IPv6.
* You can generate statement count profiles of your program. This
@@ -20010,7 +20175,7 @@ File: gawk.info, Node: Advanced Features Summary, Prev: Profiling, Up: Advanc
`USR1' signal while profiling causes `gawk' to dump the profile
and keep going, including a function call stack.
- * You can also just "pretty print" the program. This currently also
+ * You can also just "pretty-print" the program. This currently also
runs the program, but that will change in the next major release.
@@ -20054,7 +20219,7 @@ File: gawk.info, Node: I18N and L10N, Next: Explaining gettext, Up: Internati
"Internationalization" means writing (or modifying) a program once, in
such a way that it can use multiple languages without requiring further
-source-code changes. "Localization" means providing the data necessary
+source code changes. "Localization" means providing the data necessary
for an internationalized program to work in a particular language.
Most typically, these terms refer to features such as the language used
for printing error messages, the language used to read responses, and
@@ -20068,7 +20233,7 @@ File: gawk.info, Node: Explaining gettext, Next: Programmer i18n, Prev: I18N
==================
`gawk' uses GNU `gettext' to provide its internationalization features.
-The facilities in GNU `gettext' focus on messages; strings printed by a
+The facilities in GNU `gettext' focus on messages: strings printed by a
program, either directly or via formatting with `printf' or
`sprintf()'.(1)
@@ -20197,8 +20362,7 @@ File: gawk.info, Node: Programmer i18n, Next: Translator i18n, Prev: Explaini
13.3 Internationalizing `awk' Programs
======================================
-`gawk' provides the following variables and functions for
-internationalization:
+`gawk' provides the following variables for internationalization:
`TEXTDOMAIN'
This variable indicates the application's text domain. For
@@ -20210,6 +20374,8 @@ internationalization:
for translation at runtime. String constants without a leading
underscore are not translated.
+ `gawk' provides the following functions for internationalization:
+
``dcgettext(STRING' [`,' DOMAIN [`,' CATEGORY]]`)''
Return the translation of STRING in text domain DOMAIN for locale
category CATEGORY. The default value for DOMAIN is the current
@@ -20248,8 +20414,7 @@ internationalization:
the null string (`""'), then `bindtextdomain()' returns the
current binding for the given DOMAIN.
- To use these facilities in your `awk' program, follow the steps
-outlined in *note Explaining gettext::, like so:
+ To use these facilities in your `awk' program, follow these steps:
1. Set the variable `TEXTDOMAIN' to the text domain of your program.
This is best done in a `BEGIN' rule (*note BEGIN/END::), or it can
@@ -20471,7 +20636,7 @@ actually almost portable, requiring very little change:
its value, leaving the original string constant as the result.
* By defining "dummy" functions to replace `dcgettext()',
- `dcngettext()' and `bindtextdomain()', the `awk' program can be
+ `dcngettext()', and `bindtextdomain()', the `awk' program can be
made to run, but all the messages are output in the original
language. For example:
@@ -20606,9 +20771,9 @@ File: gawk.info, Node: Gawk I18N, Next: I18N Summary, Prev: I18N Example, Up
`gawk' itself has been internationalized using the GNU `gettext'
package. (GNU `gettext' is described in complete detail in *note (GNU
-`gettext' utilities)Top:: gettext, GNU gettext tools.) As of this
-writing, the latest version of GNU `gettext' is version 0.19.3
-(ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.3.tar.gz).
+`gettext' utilities)Top:: gettext, GNU `gettext' utilities.) As of
+this writing, the latest version of GNU `gettext' is version 0.19.4
+(ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.4.tar.gz).
If a translation of `gawk''s messages exists, then `gawk' produces
usage messages, warnings, and fatal errors in the local language.
@@ -20620,7 +20785,7 @@ File: gawk.info, Node: I18N Summary, Prev: Gawk I18N, Up: Internationalizatio
============
* Internationalization means writing a program such that it can use
- multiple languages without requiring source-code changes.
+ multiple languages without requiring source code changes.
Localization means providing the data necessary for an
internationalized program to work in a particular language.
@@ -20634,10 +20799,10 @@ File: gawk.info, Node: I18N Summary, Prev: Gawk I18N, Up: Internationalizatio
file, and the `.po' files are compiled into `.gmo' files for use
at runtime.
- * You can use position specifications with `sprintf()' and `printf'
- to rearrange the placement of argument values in formatted strings
- and output. This is useful for the translations of format control
- strings.
+ * You can use positional specifications with `sprintf()' and
+ `printf' to rearrange the placement of argument values in formatted
+ strings and output. This is useful for the translation of format
+ control strings.
* The internationalization features have been designed so that they
can be easily worked around in a standard `awk'.
@@ -20693,8 +20858,7 @@ File: gawk.info, Node: Debugging Concepts, Next: Debugging Terms, Up: Debuggi
---------------------------
(If you have used debuggers in other languages, you may want to skip
-ahead to the next section on the specific features of the `gawk'
-debugger.)
+ahead to *note Awk Debugging::.)
Of course, a debugging program cannot remove bugs for you, because
it has no way of knowing what you or your users consider a "bug" versus
@@ -20781,11 +20945,11 @@ defines terms used throughout the rest of this major node:

File: gawk.info, Node: Awk Debugging, Prev: Debugging Terms, Up: Debugging
-14.1.3 Awk Debugging
---------------------
+14.1.3 `awk' Debugging
+----------------------
Debugging an `awk' program has some specific aspects that are not
-shared with other programming languages.
+shared with programs written in other languages.
First of all, the fact that `awk' programs usually take input line
by line from a file or files and operate on those lines using specific
@@ -20803,8 +20967,8 @@ commands.

File: gawk.info, Node: Sample Debugging Session, Next: List of Debugger Commands, Prev: Debugging, Up: Debugger
-14.2 Sample Debugging Session
-=============================
+14.2 Sample `gawk' Debugging Session
+====================================
In order to illustrate the use of `gawk' as a debugger, let's look at a
sample debugging session. We will use the `awk' implementation of the
@@ -20823,8 +20987,8 @@ File: gawk.info, Node: Debugger Invocation, Next: Finding The Bug, Up: Sample
--------------------------------
Starting the debugger is almost exactly like running `gawk' normally,
-except you have to pass an additional option `--debug', or the
-corresponding short option `-D'. The file(s) containing the program
+except you have to pass an additional option, `--debug', or the
+corresponding short option, `-D'. The file(s) containing the program
and any supporting code are given on the command line as arguments to
one or more `-f' options. (`gawk' is not designed to debug command-line
programs, only programs contained in files.) In our case, we invoke
@@ -20834,7 +20998,7 @@ the debugger like this:
where both `getopt.awk' and `uniq.awk' are in `$AWKPATH'. (Experienced
users of GDB or similar debuggers should note that this syntax is
-slightly different from what they are used to. With the `gawk'
+slightly different from what you are used to. With the `gawk'
debugger, you give the arguments for running the program in the command
line to the debugger rather than as part of the `run' command at the
debugger prompt.) The `-1' is an option to `uniq.awk'.
@@ -20958,10 +21122,10 @@ typing `n' (for "next"):
-| 66 if (fcount > 0) {
This tells us that `gawk' is now ready to execute line 66, which
-decides whether to give the lines the special "field skipping" treatment
+decides whether to give the lines the special "field-skipping" treatment
indicated by the `-1' command-line option. (Notice that we skipped
-from where we were before at line 63 to here, because the condition in
-line 63 `if (fcount == 0 && charcount == 0)' was false.)
+from where we were before, at line 63, to here, because the condition
+in line 63, `if (fcount == 0 && charcount == 0)', was false.)
Continuing to step, we now get to the splitting of the current and
last records:
@@ -21019,15 +21183,15 @@ mentioned):
Well, here we are at our error (sorry to spoil the suspense). What
we had in mind was to join the fields starting from the second one to
-make the virtual record to compare, and if the first field was numbered
-zero, this would work. Let's look at what we've got:
+make the virtual record to compare, and if the first field were
+numbered zero, this would work. Let's look at what we've got:
gawk> p cline clast
-| cline = "gawk is a wonderful program!"
-| clast = "awk is a wonderful program!"
Hey, those look pretty familiar! They're just our original,
-unaltered, input records. A little thinking (the human brain is still
+unaltered input records. A little thinking (the human brain is still
the best debugging tool), and we realize that we were off by one!
We get out of the debugger:
@@ -21064,11 +21228,11 @@ categories:
* Miscellaneous
Each of these are discussed in the following subsections. In the
-following descriptions, commands which may be abbreviated show the
+following descriptions, commands that may be abbreviated show the
abbreviation on a second description line. A debugger command name may
also be truncated if that partial name is unambiguous. The debugger has
the built-in capability to automatically repeat the previous command
-just by hitting <Enter>. This works for the commands `list', `next',
+just by hitting `Enter'. This works for the commands `list', `next',
`nexti', `step', `stepi', and `continue' executed without any argument.
* Menu:
@@ -21108,8 +21272,8 @@ The commands for controlling breakpoints are:
Set a breakpoint at entry to (the first instruction of)
function FUNCTION.
- Each breakpoint is assigned a number which can be used to delete
- it from the breakpoint list using the `delete' command.
+ Each breakpoint is assigned a number that can be used to delete it
+ from the breakpoint list using the `delete' command.
With a breakpoint, you may also supply a condition. This is an
`awk' expression (enclosed in double quotes) that the debugger
@@ -21147,26 +21311,26 @@ The commands for controlling breakpoints are:
`delete' [N1 N2 ...] [N-M]
`d' [N1 N2 ...] [N-M]
- Delete specified breakpoints or a range of breakpoints. Deletes
- all defined breakpoints if no argument is supplied.
+ Delete specified breakpoints or a range of breakpoints. Delete all
+ defined breakpoints if no argument is supplied.
`disable' [N1 N2 ... | N-M]
Disable specified breakpoints or a range of breakpoints. Without
- any argument, disables all breakpoints.
+ any argument, disable all breakpoints.
`enable' [`del' | `once'] [N1 N2 ...] [N-M]
`e' [`del' | `once'] [N1 N2 ...] [N-M]
Enable specified breakpoints or a range of breakpoints. Without
- any argument, enables all breakpoints. Optionally, you can
- specify how to enable the breakpoint:
+ any argument, enable all breakpoints. Optionally, you can specify
+ how to enable the breakpoints:
`del'
- Enable the breakpoint(s) temporarily, then delete it when the
- program stops at the breakpoint.
+ Enable the breakpoints temporarily, then delete each one when
+ the program stops at it.
`once'
- Enable the breakpoint(s) temporarily, then disable it when
- the program stops at the breakpoint.
+ Enable the breakpoints temporarily, then disable each one when
+ the program stops at it.
`ignore' N COUNT
Ignore breakpoint number N the next COUNT times it is hit.
@@ -21212,7 +21376,7 @@ execution of the program than we saw in our earlier example:
`continue' [COUNT]
`c' [COUNT]
Resume program execution. If continued from a breakpoint and COUNT
- is specified, ignores the breakpoint at that location the next
+ is specified, ignore the breakpoint at that location the next
COUNT times before stopping.
`finish'
@@ -21247,10 +21411,10 @@ execution of the program than we saw in our earlier example:
`step' [COUNT]
`s' [COUNT]
Continue execution until control reaches a different source line
- in the current stack frame. `step' steps inside any function
- called within the line. If the argument COUNT is supplied, steps
- that many times before stopping, unless it encounters a breakpoint
- or watchpoint.
+ in the current stack frame, stepping inside any function called
+ within the line. If the argument COUNT is supplied, steps that
+ many times before stopping, unless it encounters a breakpoint or
+ watchpoint.
`stepi' [COUNT]
`si' [COUNT]
@@ -21331,13 +21495,13 @@ AWK STATEMENTS
(`"'...`"').
You can also set special `awk' variables, such as `FS', `NF',
- `NR', and son on.
+ `NR', and so on.
`watch' VAR | `$'N [`"EXPRESSION"']
`w' VAR | `$'N [`"EXPRESSION"']
Add variable VAR (or field `$N') to the watch list. The debugger
then stops whenever the value of the variable or field changes.
- Each watched item is assigned a number which can be used to delete
+ Each watched item is assigned a number that can be used to delete
it from the watch list using the `unwatch' command.
With a watchpoint, you may also supply a condition. This is an
@@ -21361,11 +21525,11 @@ File: gawk.info, Node: Execution Stack, Next: Debugger Info, Prev: Viewing An
14.3.4 Working with the Stack
-----------------------------
-Whenever you run a program which contains any function calls, `gawk'
+Whenever you run a program that contains any function calls, `gawk'
maintains a stack of all of the function calls leading up to where the
program is right now. You can see how you got to where you are, and
also move around in the stack to see what the state of things was in the
-functions which called the one you are in. The commands for doing this
+functions that called the one you are in. The commands for doing this
are:
`backtrace' [COUNT]
@@ -21385,8 +21549,8 @@ are:
`frame' [N]
`f' [N]
Select and print stack frame N. Frame 0 is the currently
- executing, or "innermost", frame (function call), frame 1 is the
- frame that called the innermost one. The highest numbered frame is
+ executing, or "innermost", frame (function call); frame 1 is the
+ frame that called the innermost one. The highest-numbered frame is
the one for the main program. The printed information consists of
the frame number, function and argument names, source file, and
the source line.
@@ -21403,7 +21567,7 @@ File: gawk.info, Node: Debugger Info, Next: Miscellaneous Debugger Commands,
Besides looking at the values of variables, there is often a need to get
other sorts of information about the state of your program and of the
-debugging environment itself. The `gawk' debugger has one command which
+debugging environment itself. The `gawk' debugger has one command that
provides this information, appropriately called `info'. `info' is used
with one of a number of arguments that tell it exactly what you want to
know:
@@ -21460,11 +21624,12 @@ from a file. The commands are:
option. The available options are:
`history_size'
- The maximum number of lines to keep in the history file
+ Set the maximum number of lines to keep in the history file
`./.gawk_history'. The default is 100.
`listsize'
- The number of lines that `list' prints. The default is 15.
+ Specify the number of lines that `list' prints. The default
+ is 15.
`outfile'
Send `gawk' output to a file; debugger output still goes to
@@ -21472,7 +21637,7 @@ from a file. The commands are:
standard output.
`prompt'
- The debugger prompt. The default is `gawk> '.
+ Change the debugger prompt. The default is `gawk> '.
`save_history' [`on' | `off']
Save command history to file `./.gawk_history'. The default
@@ -21480,8 +21645,8 @@ from a file. The commands are:
`save_options' [`on' | `off']
Save current options to file `./.gawkrc' upon exit. The
- default is `on'. Options are read back in to the next
- session upon startup.
+ default is `on'. Options are read back into the next session
+ upon startup.
`trace' [`on' | `off']
Turn instruction tracing on or off. The default is `off'.
@@ -21500,7 +21665,7 @@ from a file. The commands are:
commands; however, the `gawk' debugger will not source the same
file more than once in order to avoid infinite recursion.
- In addition to, or instead of the `source' command, you can use
+ In addition to, or instead of, the `source' command, you can use
the `-D FILE' or `--debug=FILE' command-line options to execute
commands from a file non-interactively (*note Options::).
@@ -21510,13 +21675,13 @@ File: gawk.info, Node: Miscellaneous Debugger Commands, Prev: Debugger Info,
14.3.6 Miscellaneous Commands
-----------------------------
-There are a few more commands which do not fit into the previous
+There are a few more commands that do not fit into the previous
categories, as follows:
`dump' [FILENAME]
- Dump bytecode of the program to standard output or to the file
+ Dump byte code of the program to standard output or to the file
named in FILENAME. This prints a representation of the internal
- instructions which `gawk' executes to implement the `awk' commands
+ instructions that `gawk' executes to implement the `awk' commands
in a program. This can be very enlightening, as the following
partial dump of Davide Brini's obfuscated code (*note Signature
Program::) demonstrates:
@@ -21600,22 +21765,21 @@ categories, as follows:
FILENAME. This command may change the current source file.
FUNCTION
- Print lines centered around beginning of the function
+ Print lines centered around the beginning of the function
FUNCTION. This command may change the current source file.
`quit'
`q'
Exit the debugger. Debugging is great fun, but sometimes we all
have to tend to other obligations in life, and sometimes we find
- the bug, and are free to go on to the next one! As we saw
- earlier, if you are running a program, the debugger warns you if
- you accidentally type `q' or `quit', to make sure you really want
- to quit.
+ the bug and are free to go on to the next one! As we saw earlier,
+ if you are running a program, the debugger warns you when you type
+ `q' or `quit', to make sure you really want to quit.
`trace' [`on' | `off']
- Turn on or off a continuous printing of instructions which are
- about to be executed, along with printing the `awk' line which they
- implement. The default is `off'.
+ Turn on or off continuous printing of the instructions that are
+ about to be executed, along with the `awk' lines they implement.
+ The default is `off'.
It is to be hoped that most of the "opcodes" in these instructions
are fairly self-explanatory, and using `stepi' and `nexti' while
@@ -21628,7 +21792,7 @@ File: gawk.info, Node: Readline Support, Next: Limitations, Prev: List of Deb
14.4 Readline Support
=====================
-If `gawk' is compiled with the `readline' library
+If `gawk' is compiled with the GNU Readline library
(http://cnswww.cns.cwru.edu/php/chet/readline/readline.html), you can
take advantage of that library's command completion and history
expansion features. The following types of completion are available:
@@ -21658,7 +21822,7 @@ File: gawk.info, Node: Limitations, Next: Debugging Summary, Prev: Readline S
We hope you find the `gawk' debugger useful and enjoyable to work with,
but as with any program, especially in its early releases, it still has
-some limitations. A few which are worth being aware of are:
+some limitations. A few that it's worth being aware of are:
* At this point, the debugger does not give a detailed explanation of
what you did wrong when you type in something it doesn't like.
@@ -21669,13 +21833,13 @@ some limitations. A few which are worth being aware of are:
Commands:: (or if you are already familiar with `gawk' internals),
you will realize that much of the internal manipulation of data in
`gawk', as in many interpreters, is done on a stack. `Op_push',
- `Op_pop', and the like, are the "bread and butter" of most `gawk'
+ `Op_pop', and the like are the "bread and butter" of most `gawk'
code.
Unfortunately, as of now, the `gawk' debugger does not allow you
to examine the stack's contents. That is, the intermediate
results of expression evaluation are on the stack, but cannot be
- printed. Rather, only variables which are defined in the program
+ printed. Rather, only variables that are defined in the program
can be printed. Of course, a workaround for this is to use more
explicit variables at the debugging stage and then change back to
obscure, perhaps more optimal code later.
@@ -21687,12 +21851,12 @@ some limitations. A few which are worth being aware of are:
* The `gawk' debugger is designed to be used by running a program
(with all its parameters) on the command line, as described in
*note Debugger Invocation::. There is no way (as of now) to
- attach or "break in" to a running program. This seems reasonable
- for a language which is used mainly for quickly executing, short
+ attach or "break into" a running program. This seems reasonable
+ for a language that is used mainly for quickly executing, short
programs.
- * The `gawk' debugger only accepts source supplied with the `-f'
- option.
+ * The `gawk' debugger only accepts source code supplied with the
+ `-f' option.

File: gawk.info, Node: Debugging Summary, Prev: Limitations, Up: Debugger
@@ -21701,8 +21865,8 @@ File: gawk.info, Node: Debugging Summary, Prev: Limitations, Up: Debugger
============
* Programs rarely work correctly the first time. Finding bugs is
- "debugging" and a program that helps you find bugs is a
- "debugger". `gawk' has a built-in debugger that works very
+ called debugging, and a program that helps you find bugs is a
+ debugger. `gawk' has a built-in debugger that works very
similarly to the GNU Debugger, GDB.
* Debuggers let you step through your program one statement at a
@@ -21718,8 +21882,8 @@ File: gawk.info, Node: Debugging Summary, Prev: Limitations, Up: Debugger
breakpoints, execution, viewing and changing data, working with
the stack, getting information, and other tasks.
- * If the `readline' library is available when `gawk' is compiled, it
- is used by the debugger to provide command-line history and
+ * If the GNU Readline library is available when `gawk' is compiled,
+ it is used by the debugger to provide command-line history and
editing.
@@ -21780,7 +21944,7 @@ Decimal arithmetic
sides) of the decimal point, and the results of a computation are
always exact.
- Some modern system can do decimal arithmetic in hardware, but
+ Some modern systems can do decimal arithmetic in hardware, but
usually you need a special software library to provide access to
these instructions. There are also libraries that do decimal
arithmetic entirely in software.
@@ -21796,8 +21960,7 @@ Integer arithmetic
In computers, integer values come in two flavors: "signed" and
"unsigned". Signed values may be negative or positive, whereas
- unsigned values are always positive (i.e., greater than or equal
- to zero).
+ unsigned values are always greater than or equal to zero.
In computer systems, integer arithmetic is exact, but the possible
range of values is limited. Integer arithmetic is generally
@@ -21834,12 +21997,6 @@ Numeric representation Minimum value Maximum value
32-bit unsigned integer 0 4,294,967,295
64-bit signed integer -9,223,372,036,854,775,8089,223,372,036,854,775,807
64-bit unsigned integer 0 18,446,744,073,709,551,615
-Single-precision `1.175494e-38' `3.402823e+38'
-floating point
-(approximate)
-Double-precision `2.225074e-308' `1.797693e+308'
-floating point
-(approximate)
Table 15.1: Value ranges for different numeric representations
@@ -21855,7 +22012,7 @@ File: gawk.info, Node: Math Definitions, Next: MPFR features, Prev: Computer
The rest of this major node uses a number of terms. Here are some
informal definitions that should help you work your way through the
-material here.
+material here:
"Accuracy"
A floating-point calculation's accuracy is how close it comes to
@@ -21875,7 +22032,7 @@ material here.
number and infinity produce infinity.
"NaN"
- "Not A Number."(1) A special value that results from attempting a
+ "Not a number."(1) A special value that results from attempting a
calculation that has no answer as a real number. In such a case,
programs can either receive a floating-point exception, or get
`NaN' back as the result. The IEEE 754 standard recommends that
@@ -21901,15 +22058,15 @@ material here.
PREC = 3.322 * DPS
- Here, PREC denotes the binary precision (measured in bits) and DPS
- (short for decimal places) is the decimal digits.
+ Here, _prec_ denotes the binary precision (measured in bits) and
+ _dps_ (short for decimal places) is the decimal digits.
"Rounding mode"
How numbers are rounded up or down when necessary. More details
are provided later.
"Significand"
- A floating-point value consists the significand multiplied by 10
+ A floating-point value consists of the significand multiplied by 10
to the power of the exponent. For example, in `1.2345e67', the
significand is `1.2345'.
@@ -21931,7 +22088,7 @@ precision formats to allow greater precisions and larger exponent
ranges. (`awk' uses only the 64-bit double-precision format.)
*note table-ieee-formats:: lists the precision and exponent field
-values for the basic IEEE 754 binary formats:
+values for the basic IEEE 754 binary formats.
Name Total bits Precision Minimum Maximum
exponent exponent
@@ -21965,7 +22122,7 @@ so:
$ gawk --version
-| GNU Awk 4.1.2, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2)
- -| Copyright (C) 1989, 1991-2014 Free Software Foundation.
+ -| Copyright (C) 1989, 1991-2015 Free Software Foundation.
...
(You may see different version numbers than what's shown here. That's
@@ -21996,7 +22153,7 @@ File: gawk.info, Node: FP Math Caution, Next: Arbitrary Precision Integers, P
Math class is tough! -- Teen Talk Barbie, July 1992
- This minor node provides a high level overview of the issues
+ This minor node provides a high-level overview of the issues
involved when doing lots of floating-point arithmetic.(1) The
discussion applies to both hardware and arbitrary-precision
floating-point arithmetic.
@@ -22017,8 +22174,8 @@ floating-point arithmetic.
(1) There is a very nice paper on floating-point arithmetic
(http://www.validlab.com/goldberg/paper.pdf) by David Goldberg, "What
-Every Computer Scientist Should Know About Floating-point Arithmetic,"
-`ACM Computing Surveys' *23*, 1 (1991-03), 5-48. This is worth reading
+Every Computer Scientist Should Know About Floating-Point Arithmetic,"
+`ACM Computing Surveys' *23*, 1 (1991-03): 5-48. This is worth reading
if you are interested in the details, but it does require a background
in computer science.
@@ -22072,7 +22229,7 @@ number as you assigned to it:
Often the error is so small you do not even notice it, and if you do,
you can always specify how much precision you would like in your output.
-Usually this is a format string like `"%.15g"', which when used in the
+Usually this is a format string like `"%.15g"', which, when used in the
previous example, produces an output identical to the input.

@@ -22112,7 +22269,7 @@ File: gawk.info, Node: Errors accumulate, Prev: Comparing FP Values, Up: Inex
The loss of accuracy during a single computation with floating-point
numbers usually isn't enough to worry about. However, if you compute a
-value which is the result of a sequence of floating-point operations,
+value that is the result of a sequence of floating-point operations,
the error can accumulate and greatly affect the computation itself.
Here is an attempt to compute the value of pi using one of its many
series representations:
@@ -22163,7 +22320,7 @@ easy answers. The standard rules of algebra often do not apply when
using floating-point arithmetic. Among other things, the distributive
and associative laws do not hold completely, and order of operation may
be important for your computation. Rounding error, cumulative precision
-loss and underflow are often troublesome.
+loss, and underflow are often troublesome.
When `gawk' tests the expressions `0.1 + 12.2' and `12.3' for
equality using the machine double-precision arithmetic, it decides that
@@ -22198,8 +22355,9 @@ illustrated by our earlier attempt to compute the value of pi. Extra
precision can greatly enhance the stability and the accuracy of your
computation in such cases.
- Repeated addition is not necessarily equivalent to multiplication in
-floating-point arithmetic. In the example in *note Errors accumulate:::
+ Additionally, you should understand that repeated addition is not
+necessarily equivalent to multiplication in floating-point arithmetic.
+In the example in *note Errors accumulate:::
$ gawk 'BEGIN {
> for (d = 1.1; d <= 1.5; d += 0.1) # loop five times (?)
@@ -22254,7 +22412,7 @@ set the value to one of the predefined case-insensitive strings shown
in *note table-predefined-precision-strings::, to emulate an IEEE 754
binary format.
-`PREC' IEEE 754 Binary Format
+`PREC' IEEE 754 binary format
---------------------------------------------------
`"half"' 16-bit half-precision
`"single"' Basic 32-bit single precision
@@ -22287,14 +22445,14 @@ on arithmetic operations:
example illustrates the differences among various ways to print a
floating-point constant:
- $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 0.1) }'
- -| 0.1000000000000000055511151
- $ gawk -M -v PREC=113 'BEGIN { printf("%0.25f\n", 0.1) }'
- -| 0.1000000000000000000000000
- $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", "0.1") }'
- -| 0.1000000000000000000000000
- $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 1/10) }'
- -| 0.1000000000000000000000000
+ $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 0.1) }'
+ -| 0.1000000000000000055511151
+ $ gawk -M -v PREC=113 'BEGIN { printf("%0.25f\n", 0.1) }'
+ -| 0.1000000000000000000000000
+ $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", "0.1") }'
+ -| 0.1000000000000000000000000
+ $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 1/10) }'
+ -| 0.1000000000000000000000000

File: gawk.info, Node: Setting the rounding mode, Prev: Setting precision, Up: FP Math Caution
@@ -22302,15 +22460,15 @@ File: gawk.info, Node: Setting the rounding mode, Prev: Setting precision, Up
15.4.5 Setting the Rounding Mode
--------------------------------
-The `ROUNDMODE' variable provides program level control over the
+The `ROUNDMODE' variable provides program-level control over the
rounding mode. The correspondence between `ROUNDMODE' and the IEEE
rounding modes is shown in *note table-gawk-rounding-modes::.
-Rounding Mode IEEE Name `ROUNDMODE'
+Rounding mode IEEE name `ROUNDMODE'
---------------------------------------------------------------------------
Round to nearest, ties to even `roundTiesToEven' `"N"' or `"n"'
-Round toward plus Infinity `roundTowardPositive' `"U"' or `"u"'
-Round toward negative Infinity `roundTowardNegative' `"D"' or `"d"'
+Round toward positive infinity `roundTowardPositive' `"U"' or `"u"'
+Round toward negative infinity `roundTowardNegative' `"D"' or `"d"'
Round toward zero `roundTowardZero' `"Z"' or `"z"'
Round to nearest, ties away `roundTiesToAway' `"A"' or `"a"'
from zero
@@ -22361,8 +22519,8 @@ distributes upward and downward rounds of exact halves, which might
cause any accumulating round-off error to cancel itself out. This is the
default rounding mode for IEEE 754 computing functions and operators.
- The other rounding modes are rarely used. Round toward positive
-infinity (`roundTowardPositive') and round toward negative infinity
+ The other rounding modes are rarely used. Rounding toward positive
+infinity (`roundTowardPositive') and toward negative infinity
(`roundTowardNegative') are often used to implement interval
arithmetic, where you adjust the rounding mode to calculate upper and
lower bounds for the range of output. The `roundTowardZero' mode can be
@@ -22410,7 +22568,7 @@ floating-point values:
If instead you were to compute the same value using
arbitrary-precision floating-point values, the precision needed for
-correct output (using the formula `prec = 3.322 * dps'), would be 3.322
+correct output (using the formula `prec = 3.322 * dps') would be 3.322
x 183231, or 608693.
The result from an arithmetic operation with an integer and a
@@ -22441,7 +22599,7 @@ interface to process arbitrary-precision integers or mixed-mode numbers
as needed by an operation or function. In such a case, the precision is
set to the minimum value necessary for exact conversion, and the working
precision is not used for this purpose. If this is not what you need or
-want, you can employ a subterfuge, and convert the integer to floating
+want, you can employ a subterfuge and convert the integer to floating
point first, like this:
gawk -M 'BEGIN { n = 13; print (n + 0.0) % 2.0 }'
@@ -22460,14 +22618,15 @@ the following:
`%', the result is typically an arbitrary precision floating point
value (unless the denominator evenly divides into the numerator). In
order to do integer division or remainder with arbitrary precision
-integers, use the built-in `div()' function (*note Numeric Functions::).
+integers, use the built-in `intdiv()' function (*note Numeric
+Functions::).
- You can simulate the `div()' function in standard `awk' using this
-user-defined function:
+ You can simulate the `intdiv()' function in standard `awk' using
+this user-defined function:
- # div --- do integer division
+ # intdiv --- do integer division
- function div(numerator, denominator, result)
+ function intdiv(numerator, denominator, result)
{
split("", result)
@@ -22480,8 +22639,8 @@ user-defined function:
}
The following example program, contributed by Katie Wasserman, uses
-`div()' to compute the digits of pi to as many places as you choose to
-set:
+`intdiv()' to compute the digits of pi to as many places as you choose
+to set:
# pi.awk --- compute the digits of pi
@@ -22492,7 +22651,7 @@ set:
for (m = digits * 4; m > 0; --m) {
d = m * 2 + 1
x = pi * m
- div(x, d, result)
+ intdiv(x, d, result)
pi = result["quotient"]
pi = pi + two
}
@@ -22504,7 +22663,7 @@ set:
It's not that well known but it's not that obscure either. It's
Euler's modification to Newton's method for calculating pi. Take
a look at lines (23) - (25) here:
- `http://mathworld.wolfram.com/PiFormulas.htm'.
+ `http://mathworld.wolfram.com/PiFormulas.html'.
The algorithm I wrote simply expands the multiply by 2 and works
from the innermost expression outwards. I used this to program HP
@@ -22524,7 +22683,7 @@ File: gawk.info, Node: POSIX Floating Point Problems, Next: Floating point sum
15.6 Standards Versus Existing Practice
=======================================
-Historically, `awk' has converted any non-numeric looking string to the
+Historically, `awk' has converted any nonnumeric-looking string to the
numeric value zero, when required. Furthermore, the original
definition of the language and the original POSIX standards specified
that `awk' only understands decimal numbers (base 10), and not octal
@@ -22538,8 +22697,8 @@ These features are:
hexadecimal notation (e.g., `0xDEADBEEF'). (Note: data values,
_not_ source code constants.)
- * Support for the special IEEE 754 floating-point values "Not A
- Number" (NaN), positive Infinity ("inf"), and negative Infinity
+ * Support for the special IEEE 754 floating-point values "not a
+ number" (NaN), positive infinity ("inf"), and negative infinity
("-inf"). In particular, the format for these values is as
specified by the ISO 1999 C standard, which ignores case and can
allow implementation-dependent additional characters after the
@@ -22556,21 +22715,21 @@ historical practice:
values is also a very severe departure from historical practice.
The second problem is that the `gawk' maintainer feels that this
-interpretation of the standard, which requires a certain amount of
+interpretation of the standard, which required a certain amount of
"language lawyering" to arrive at in the first place, was not even
-intended by the standard developers. In other words, "we see how you
+intended by the standard developers. In other words, "We see how you
got where you are, but we don't think that that's where you want to be."
Recognizing these issues, but attempting to provide compatibility
with the earlier versions of the standard, the 2008 POSIX standard
added explicit wording to allow, but not require, that `awk' support
-hexadecimal floating-point values and special values for "Not A Number"
+hexadecimal floating-point values and special values for "not a number"
and infinity.
Although the `gawk' maintainer continues to feel that providing
those features is inadvisable, nevertheless, on systems that support
IEEE floating point, it seems reasonable to provide _some_ way to
-support NaN and Infinity values. The solution implemented in `gawk' is
+support NaN and infinity values. The solution implemented in `gawk' is
as follows:
* With the `--posix' command-line option, `gawk' becomes "hands
@@ -22585,7 +22744,7 @@ as follows:
$ echo 0xDeadBeef | gawk --posix '{ print $1 + 0 }'
-| 3735928559
- * Without `--posix', `gawk' interprets the four strings `+inf',
+ * Without `--posix', `gawk' interprets the four string values `+inf',
`-inf', `+nan', and `-nan' specially, producing the corresponding
special numeric values. The leading sign acts a signal to `gawk'
(and the user) that the value is really numeric. Hexadecimal
@@ -22599,7 +22758,7 @@ as follows:
$ echo 0xDeadBeef | gawk '{ print $1 + 0 }'
-| 0
- `gawk' ignores case in the four special values. Thus `+nan' and
+ `gawk' ignores case in the four special values. Thus, `+nan' and
`+NaN' are the same.
---------- Footnotes ----------
@@ -22616,9 +22775,9 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob
floating-point values. Standard `awk' uses double-precision
floating-point values.
- * In the early 1990s, Barbie mistakenly said "Math class is tough!"
+ * In the early 1990s Barbie mistakenly said, "Math class is tough!"
Although math isn't tough, floating-point arithmetic isn't the same
- as pencil and paper math, and care must be taken:
+ as pencil-and-paper math, and care must be taken:
- Not all numbers can be represented exactly.
@@ -22639,18 +22798,18 @@ File: gawk.info, Node: Floating point summary, Prev: POSIX Floating Point Prob
rounding mode.
* With `-M', `gawk' performs arbitrary-precision integer arithmetic
- using the GMP library. This is faster and more space efficient
+ using the GMP library. This is faster and more space-efficient
than using MPFR for the same calculations.
- * There are several "dark corners" with respect to floating-point
- numbers where `gawk' disagrees with the POSIX standard. It pays
- to be aware of them.
+ * There are several areas with respect to floating-point numbers
+ where `gawk' disagrees with the POSIX standard. It pays to be
+ aware of them.
* Overall, there is no need to be unduly suspicious about the
results from floating-point arithmetic. The lesson to remember is
that floating-point arithmetic is always more complex than
arithmetic using pencil and paper. In order to take advantage of
- the power of computer floating point, you need to know its
+ the power of floating-point arithmetic, you need to know its
limitations and work within them. For most casual use of
floating-point arithmetic, you will often get the expected result
if you simply round the display of your final results to the
@@ -22709,7 +22868,7 @@ the rest of this Info file.
`gawk''s functionality. For example, they can provide access to system
calls (such as `chdir()' to change directory) and to other C library
routines that could be of use. As with most software, "the sky is the
-limit;" if you can imagine something that you might want to do and can
+limit"; if you can imagine something that you might want to do and can
write in C or C++, you can write an extension to do it!
Extensions are written in C or C++, using the "application
@@ -22717,7 +22876,7 @@ programming interface" (API) defined for this purpose by the `gawk'
developers. The rest of this major node explains the facilities that
the API provides and how to use them, and presents a small example
extension. In addition, it documents the sample extensions included in
-the `gawk' distribution, and describes the `gawkextlib' project. *Note
+the `gawk' distribution and describes the `gawkextlib' project. *Note
Extension Design::, for a discussion of the extension mechanism goals
and design.
@@ -22835,7 +22994,7 @@ Example::) and also in the `testext.c' code for testing the APIs.
Some other bits and pieces:
* The API provides access to `gawk''s `do_XXX' values, reflecting
- command-line options, like `do_lint', `do_profiling' and so on
+ command-line options, like `do_lint', `do_profiling', and so on
(*note Extension API Variables::). These are informational: an
extension cannot affect their values inside `gawk'. In addition,
attempting to assign to them produces a compile-time error.
@@ -22872,6 +23031,7 @@ describes the API in detail.
* Symbol Table Access:: Functions for accessing global
variables.
* Array Manipulation:: Functions for working with arrays.
+* Redirection API:: How to access and manipulate redirections.
* Extension API Variables:: Variables provided by the API.
* Extension API Boilerplate:: Boilerplate code for using the API.
@@ -22881,8 +23041,8 @@ File: gawk.info, Node: Extension API Functions Introduction, Next: General Dat
16.4.1 Introduction
-------------------
-Access to facilities within `gawk' are made available by calling
-through function pointers passed into your extension.
+Access to facilities within `gawk' is achieved by calling through
+function pointers passed into your extension.
API function pointers are provided for the following kinds of
operations:
@@ -22903,7 +23063,7 @@ operations:
- Two-way processors
- All of these are discussed in detail, later in this major node.
+ All of these are discussed in detail later in this major node.
* Printing fatal, warning, and "lint" warning messages.
@@ -22929,16 +23089,19 @@ operations:
- Clearing an array
- - Flattening an array for easy C style looping over all its
+ - Flattening an array for easy C-style looping over all its
indices and elements
+ * Accessing and manipulating redirections.
+
+
Some points about using the API:
* The following types, macros, and/or functions are referenced in
`gawkapi.h'. For correct use, you must therefore include the
corresponding standard header file _before_ including `gawkapi.h':
- C Entity Header File
+ C entity Header file
-------------------------------------------
`EOF' `<stdio.h>'
Values for `errno' `<errno.h>'
@@ -22962,13 +23125,13 @@ operations:
* Although the API only uses ISO C 90 features, there is an
exception; the "constructor" functions use the `inline' keyword.
If your compiler does not support this keyword, you should either
- place `-Dinline=''' on your command line, or use the GNU Autotools
+ place `-Dinline=''' on your command line or use the GNU Autotools
and include a `config.h' file in your extensions.
* All pointers filled in by `gawk' point to memory managed by `gawk'
and should be treated by the extension as read-only. Memory for
_all_ strings passed into `gawk' from the extension _must_ come
- from calling one of `gawk_malloc()', `gawk_calloc()' or
+ from calling one of `gawk_malloc()', `gawk_calloc()', or
`gawk_realloc()', and is managed by `gawk' from then on.
* The API defines several simple `struct's that map values as seen
@@ -22981,7 +23144,7 @@ operations:
multibyte encoding (as defined by `LC_XXX' environment
variables) and not using wide characters. This matches how
`gawk' stores strings internally and also how characters are
- likely to be input and output from files.
+ likely to be input into and output from files.
* When retrieving a value (such as a parameter or that of a global
variable or array element), the extension requests a specific type
@@ -23018,6 +23181,8 @@ general-purpose use. Additional, more specialized, data structures are
introduced in subsequent minor nodes, together with the functions that
use them.
+ The general-purpose types and structures are as follows:
+
`typedef void *awk_ext_id_t;'
A value of this type is received from `gawk' when an extension is
loaded. That value must then be passed back to `gawk' as the
@@ -23033,7 +23198,7 @@ use them.
` awk_false = 0,'
` awk_true'
`} awk_bool_t;'
- A simple boolean type.
+ A simple Boolean type.
`typedef struct awk_string {'
` char *str; /* data */'
@@ -23077,8 +23242,8 @@ use them.
`#define array_cookie u.a'
`#define scalar_cookie u.scl'
`#define value_cookie u.vc'
- These macros make accessing the fields of the `awk_value_t' more
- readable.
+ Using these macros makes accessing the fields of the `awk_value_t'
+ more readable.
`typedef void *awk_scalar_t;'
Scalars can be represented as an opaque type. These values are
@@ -23098,8 +23263,8 @@ indicates what is in the `union'.
Representing numbers is easy--the API uses a C `double'. Strings
require more work. Because `gawk' allows embedded NUL bytes in string
-values, a string must be represented as a pair containing a
-data-pointer and length. This is the `awk_string_t' type.
+values, a string must be represented as a pair containing a data
+pointer and length. This is the `awk_string_t' type.
Identifiers (i.e., the names of global variables) can be associated
with either scalar values or with arrays. In addition, `gawk' provides
@@ -23111,12 +23276,12 @@ Manipulation::.
of the `union' as if they were fields in a `struct'; this is a common
coding practice in C. Such code is easier to write and to read, but it
remains _your_ responsibility to make sure that the `val_type' member
-correctly reflects the type of the value in the `awk_value_t'.
+correctly reflects the type of the value in the `awk_value_t' struct.
Conceptually, the first three members of the `union' (number, string,
and array) are all that is needed for working with `awk' values.
However, because the API provides routines for accessing and changing
-the value of global scalar variables only by using the variable's name,
+the value of a global scalar variable only by using the variable's name,
there is a performance penalty: `gawk' must find the variable each time
it is accessed and changed. This turns out to be a real issue, not
just a theoretical one.
@@ -23125,17 +23290,19 @@ just a theoretical one.
reading and/or changing the value of one or more scalar variables, you
can obtain a "scalar cookie"(1) object for that variable, and then use
the cookie for getting the variable's value or for changing the
-variable's value. This is the `awk_scalar_t' type and `scalar_cookie'
-macro. Given a scalar cookie, `gawk' can directly retrieve or modify
-the value, as required, without having to find it first.
+variable's value. The `awk_scalar_t' type holds a scalar cookie, and
+the `scalar_cookie' macro provides access to the value of that type in
+the `awk_value_t' struct. Given a scalar cookie, `gawk' can directly
+retrieve or modify the value, as required, without having to find it
+first.
The `awk_value_cookie_t' type and `value_cookie' macro are similar.
If you know that you wish to use the same numeric or string _value_ for
one or more variables, you can create the value once, retaining a
"value cookie" for it, and then pass in that value cookie whenever you
-wish to set the value of a variable. This saves both storage space
-within the running `gawk' process as well as the time needed to create
-the value.
+wish to set the value of a variable. This saves storage space within
+the running `gawk' process and reduces the time needed to create the
+value.
---------- Footnotes ----------
@@ -23170,7 +23337,7 @@ prototypes, in the way that extension code would use them:
`void gawk_free(void *ptr);'
Call the correct version of `free()' to release storage that was
- allocated with `gawk_malloc()', `gawk_calloc()' or
+ allocated with `gawk_malloc()', `gawk_calloc()', or
`gawk_realloc()'.
The API has to provide these functions because it is possible for an
@@ -23182,7 +23349,7 @@ version of `malloc()', unexpected behavior would likely result.
Two convenience macros may be used for allocating storage from
`gawk_malloc()' and `gawk_realloc()'. If the allocation fails, they
cause `gawk' to exit with a fatal error message. They should be used
-as if they were procedure calls that do not return a value.
+as if they were procedure calls that do not return a value:
`#define emalloc(pointer, type, size, message) ...'
The arguments to this macro are as follows:
@@ -23212,13 +23379,13 @@ as if they were procedure calls that do not return a value.
make_malloced_string(message, strlen(message), & result);
`#define erealloc(pointer, type, size, message) ...'
- This is like `emalloc()', but it calls `gawk_realloc()', instead
- of `gawk_malloc()'. The arguments are the same as for the
+ This is like `emalloc()', but it calls `gawk_realloc()' instead of
+ `gawk_malloc()'. The arguments are the same as for the
`emalloc()' macro.
---------- Footnotes ----------
- (1) This is more common on MS-Windows systems, but can happen on
+ (1) This is more common on MS-Windows systems, but it can happen on
Unix-like systems as well.

@@ -23233,29 +23400,29 @@ This node presents them all as function prototypes, in the way that
extension code would use them:
`static inline awk_value_t *'
-`make_const_string(const char *string, size_t length, awk_value_t *result)'
+`make_const_string(const char *string, size_t length, awk_value_t *result);'
This function creates a string value in the `awk_value_t' variable
pointed to by `result'. It expects `string' to be a C string
constant (or other string data), and automatically creates a
_copy_ of the data for storage in `result'. It returns `result'.
`static inline awk_value_t *'
-`make_malloced_string(const char *string, size_t length, awk_value_t *result)'
+`make_malloced_string(const char *string, size_t length, awk_value_t *result);'
This function creates a string value in the `awk_value_t' variable
pointed to by `result'. It expects `string' to be a `char *' value
pointing to data previously obtained from `gawk_malloc()',
- `gawk_calloc()' or `gawk_realloc()'. The idea here is that the
+ `gawk_calloc()', or `gawk_realloc()'. The idea here is that the
data is passed directly to `gawk', which assumes responsibility
for it. It returns `result'.
`static inline awk_value_t *'
-`make_null_string(awk_value_t *result)'
+`make_null_string(awk_value_t *result);'
This specialized function creates a null string (the "undefined"
value) in the `awk_value_t' variable pointed to by `result'. It
returns `result'.
`static inline awk_value_t *'
-`make_number(double num, awk_value_t *result)'
+`make_number(double num, awk_value_t *result);'
This function simply creates a numeric value in the `awk_value_t'
variable pointed to by `result'.
@@ -23294,7 +23461,7 @@ Extension functions are described by the following record:
The fields are:
`const char *name;'
- The name of the new function. `awk' level code calls the function
+ The name of the new function. `awk'-level code calls the function
by this name. This is a regular C string.
Function names must obey the rules for `awk' identifiers. That is,
@@ -23306,7 +23473,7 @@ Extension functions are described by the following record:
This is a pointer to the C function that provides the extension's
functionality. The function must fill in `*result' with either a
number or a string. `gawk' takes ownership of any string memory.
- As mentioned earlier, string memory *must* come from one of
+ As mentioned earlier, string memory _must_ come from one of
`gawk_malloc()', `gawk_calloc()', or `gawk_realloc()'.
The `num_actual_args' argument tells the C function how many
@@ -23353,10 +23520,10 @@ function with `gawk' using the following function:
`gawk' intends to pass to the `exit()' system call.
`arg0'
- A pointer to private data which `gawk' saves in order to pass
+ A pointer to private data that `gawk' saves in order to pass
to the function pointed to by `funcp'.
- Exit callback functions are called in last-in-first-out (LIFO)
+ Exit callback functions are called in last-in, first-out (LIFO)
order--that is, in the reverse order in which they are registered with
`gawk'.
@@ -23366,8 +23533,8 @@ File: gawk.info, Node: Extension Version String, Next: Input Parsers, Prev: E
16.4.5.3 Registering An Extension Version String
................................................
-You can register a version string which indicates the name and version
-of your extension, with `gawk', as follows:
+You can register a version string that indicates the name and version
+of your extension with `gawk', as follows:
`void register_ext_version(const char *version);'
Register the string pointed to by `version' with `gawk'. Note
@@ -23390,7 +23557,7 @@ Files::). Additionally, it sets the value of `RT' (*note Built-in
Variables::).
If you want, you can provide your own custom input parser. An input
-parser's job is to return a record to the `gawk' record processing
+parser's job is to return a record to the `gawk' record-processing
code, along with indicators for the value and length of the data to be
used for `RT', if any.
@@ -23407,10 +23574,10 @@ used for `RT', if any.
`awk_bool_t XXX_take_control_of(awk_input_buf_t *iobuf);'
When `gawk' decides to hand control of the file over to the input
parser, it calls this function. This function in turn must fill
- in certain fields in the `awk_input_buf_t' structure, and ensure
+ in certain fields in the `awk_input_buf_t' structure and ensure
that certain conditions are true. It should then return true. If
- an error of some kind occurs, it should not fill in any fields,
- and should return false; then `gawk' will not use the input parser.
+ an error of some kind occurs, it should not fill in any fields and
+ should return false; then `gawk' will not use the input parser.
The details are presented shortly.
Your extension should package these functions inside an
@@ -23487,10 +23654,10 @@ the `struct stat', or any combination of these factors.
Once `XXX_can_take_file()' has returned true, and `gawk' has decided
to use your input parser, it calls `XXX_take_control_of()'. That
-function then fills one of either the `get_record' field or the
-`read_func' field in the `awk_input_buf_t'. It must also ensure that
-`fd' is _not_ set to `INVALID_HANDLE'. The following list describes
-the fields that may be filled by `XXX_take_control_of()':
+function then fills either the `get_record' field or the `read_func'
+field in the `awk_input_buf_t'. It must also ensure that `fd' is _not_
+set to `INVALID_HANDLE'. The following list describes the fields that
+may be filled by `XXX_take_control_of()':
`void *opaque;'
This is used to hold any state information needed by the input
@@ -23507,22 +23674,22 @@ the fields that may be filled by `XXX_take_control_of()':
Its behavior is described in the text following this list.
`ssize_t (*read_func)();'
- This function pointer should point to function that has the same
+ This function pointer should point to a function that has the same
behavior as the standard POSIX `read()' system call. It is an
alternative to the `get_record' pointer. Its behavior is also
described in the text following this list.
`void (*close_func)(struct awk_input *iobuf);'
This function pointer should point to a function that does the
- "tear down." It should release any resources allocated by
+ "teardown." It should release any resources allocated by
`XXX_take_control_of()'. It may also close the file. If it does
so, it should set the `fd' field to `INVALID_HANDLE'.
If `fd' is still not `INVALID_HANDLE' after the call to this
function, `gawk' calls the regular `close()' system call.
- Having a "tear down" function is optional. If your input parser
- does not need it, do not set this field. Then, `gawk' calls the
+ Having a "teardown" function is optional. If your input parser does
+ not need it, do not set this field. Then, `gawk' calls the
regular `close()' system call on the file descriptor, so it should
be valid.
@@ -23530,7 +23697,7 @@ the fields that may be filled by `XXX_take_control_of()':
records. The parameters are as follows:
`char **out'
- This is a pointer to a `char *' variable which is set to point to
+ This is a pointer to a `char *' variable that is set to point to
the record. `gawk' makes its own copy of the data, so the
extension must manage this storage.
@@ -23579,16 +23746,16 @@ explicitly.
NOTE: You must choose one method or the other: either a function
that returns a record, or one that returns raw data. In
particular, if you supply a function to get a record, `gawk' will
- call it, and never call the raw read function.
+ call it, and will never call the raw read function.
`gawk' ships with a sample extension that reads directories,
-returning records for each entry in the directory (*note Extension
-Sample Readdir::). You may wish to use that code as a guide for writing
-your own input parser.
+returning records for each entry in a directory (*note Extension Sample
+Readdir::). You may wish to use that code as a guide for writing your
+own input parser.
When writing an input parser, you should think about (and document)
how it is expected to interact with `awk' code. You may want it to
-always be called, and take effect as appropriate (as the `readdir'
+always be called, and to take effect as appropriate (as the `readdir'
extension does). Or you may want it to take effect based upon the
value of an `awk' variable, as the XML extension from the `gawkextlib'
project does (*note gawkextlib::). In the latter case, code in a
@@ -23688,17 +23855,17 @@ in the `awk_output_buf_t'. The data members are as follows:
These pointers should be set to point to functions that perform
the equivalent function as the `<stdio.h>' functions do, if
appropriate. `gawk' uses these function pointers for all output.
- `gawk' initializes the pointers to point to internal, "pass
- through" functions that just call the regular `<stdio.h>'
- functions, so an extension only needs to redefine those functions
- that are appropriate for what it does.
+ `gawk' initializes the pointers to point to internal "pass-through"
+ functions that just call the regular `<stdio.h>' functions, so an
+ extension only needs to redefine those functions that are
+ appropriate for what it does.
The `XXX_can_take_file()' function should make a decision based upon
the `name' and `mode' fields, and any additional state (such as `awk'
variable values) that is appropriate.
When `gawk' calls `XXX_take_control_of()', that function should fill
-in the other fields, as appropriate, except for `fp', which it should
+in the other fields as appropriate, except for `fp', which it should
just use normally.
You register your output wrapper with the following function:
@@ -23735,16 +23902,17 @@ structures as described earlier.
The name of the two-way processor.
`awk_bool_t (*can_take_two_way)(const char *name);'
- This function returns true if it wants to take over two-way I/O
- for this file name. It should not change any state (variable
- values, etc.) within `gawk'.
+ The function pointed to by this field should return true if it
+ wants to take over two-way I/O for this file name. It should not
+ change any state (variable values, etc.) within `gawk'.
`awk_bool_t (*take_control_of)(const char *name,'
` awk_input_buf_t *inbuf,'
` awk_output_buf_t *outbuf);'
- This function should fill in the `awk_input_buf_t' and
- `awk_outut_buf_t' structures pointed to by `inbuf' and `outbuf',
- respectively. These structures were described earlier.
+ The function pointed to by this field should fill in the
+ `awk_input_buf_t' and `awk_outut_buf_t' structures pointed to by
+ `inbuf' and `outbuf', respectively. These structures were
+ described earlier.
`awk_const struct two_way_processor *awk_const next;'
This is for use by `gawk'; therefore it is marked `awk_const' so
@@ -23768,7 +23936,7 @@ File: gawk.info, Node: Printing Messages, Next: Updating `ERRNO', Prev: Regis
You can print different kinds of warning messages from your extension,
as described here. Note that for these functions, you must pass in the
-extension id received from `gawk' when the extension was loaded:(1)
+extension ID received from `gawk' when the extension was loaded:(1)
`void fatal(awk_ext_id_t id, const char *format, ...);'
Print a message and then cause `gawk' to exit immediately.
@@ -23824,7 +23992,7 @@ value you expect. If the actual value matches what you requested, the
function returns true and fills in the `awk_value_t' result.
Otherwise, the function returns false, and the `val_type' member
indicates the type of the actual value. You may then print an error
-message, or reissue the request for the actual value type, as
+message or reissue the request for the actual value type, as
appropriate. This behavior is summarized in *note
table-value-types-returned::.
@@ -23833,15 +24001,15 @@ table-value-types-returned::.
String Number Array Undefined
------------------------------------------------------------------------------
- String String String false false
- Number Number if can Number false false
+ String String String False False
+ Number Number if can Number False False
be converted,
else false
-Type Array false false Array false
-Requested Scalar Scalar Scalar false false
+Type Array False False Array False
+Requested Scalar Scalar Scalar False False
Undefined String Number Array Undefined
- Value false false false false
- Cookie
+ Value False False False False
+ cookie
Table 16.1: API value types returned
@@ -23858,16 +24026,16 @@ your extension function. They are:
` awk_valtype_t wanted,'
` awk_value_t *result);'
Fill in the `awk_value_t' structure pointed to by `result' with
- the `count''th argument. Return true if the actual type matches
- `wanted', false otherwise. In the latter case, `result->val_type'
- indicates the actual type (*note Table 16.1:
- table-value-types-returned.). Counts are zero based--the first
+ the `count'th argument. Return true if the actual type matches
+ `wanted', and false otherwise. In the latter case,
+ `result->val_type' indicates the actual type (*note Table 16.1:
+ table-value-types-returned.). Counts are zero-based--the first
argument is numbered zero, the second one, and so on. `wanted'
indicates the type of value expected.
`awk_bool_t set_argument(size_t count, awk_array_t array);'
Convert a parameter that was undefined into an array; this provides
- call-by-reference for arrays. Return false if `count' is too big,
+ call by reference for arrays. Return false if `count' is too big,
or if the argument's type is not undefined. *Note Array
Manipulation::, for more information on creating arrays.
@@ -23895,8 +24063,8 @@ File: gawk.info, Node: Symbol table by name, Next: Symbol table by cookie, Up
The following routines provide the ability to access and update global
`awk'-level variables by name. In compiler terminology, identifiers of
different kinds are termed "symbols", thus the "sym" in the routines'
-names. The data structure which stores information about symbols is
-termed a "symbol table".
+names. The data structure that stores information about symbols is
+termed a "symbol table". The functions are as follows:
`awk_bool_t sym_lookup(const char *name,'
` awk_valtype_t wanted,'
@@ -23904,14 +24072,14 @@ termed a "symbol table".
Fill in the `awk_value_t' structure pointed to by `result' with
the value of the variable named by the string `name', which is a
regular C string. `wanted' indicates the type of value expected.
- Return true if the actual type matches `wanted', false otherwise.
- In the latter case, `result->val_type' indicates the actual type
- (*note Table 16.1: table-value-types-returned.).
+ Return true if the actual type matches `wanted', and false
+ otherwise. In the latter case, `result->val_type' indicates the
+ actual type (*note Table 16.1: table-value-types-returned.).
`awk_bool_t sym_update(const char *name, awk_value_t *value);'
Update the variable named by the string `name', which is a regular
C string. The variable is added to `gawk''s symbol table if it is
- not there. Return true if everything worked, false otherwise.
+ not there. Return true if everything worked, and false otherwise.
Changing types (scalar to array or vice versa) of an existing
variable is _not_ allowed, nor may this routine be used to update
@@ -23936,7 +24104,7 @@ File: gawk.info, Node: Symbol table by cookie, Next: Cached values, Prev: Sym
A "scalar cookie" is an opaque handle that provides access to a global
variable or array. It is an optimization that avoids looking up
variables in `gawk''s symbol table every time access is needed. This
-was discussed earlier in *note General Data Types::.
+was discussed earlier, in *note General Data Types::.
The following functions let you work with scalar cookies:
@@ -24047,7 +24215,7 @@ File: gawk.info, Node: Cached values, Prev: Symbol table by cookie, Up: Symbo
..........................................
The routines in this section allow you to create and release cached
-values. As with scalar cookies, in theory, cached values are not
+values. Like scalar cookies, in theory, cached values are not
necessary. You can create numbers and strings using the functions in
*note Constructor Functions::. You can then assign those values to
variables using `sym_update()' or `sym_update_scalar()', as you like.
@@ -24118,7 +24286,7 @@ Using value cookies in this way saves considerable storage, as all of
`VAR1' through `VAR100' share the same value.
You might be wondering, "Is this sharing problematic? What happens
-if `awk' code assigns a new value to `VAR1', are all the others changed
+if `awk' code assigns a new value to `VAR1'; are all the others changed
too?"
That's a great question. The answer is that no, it's not a problem.
@@ -24138,7 +24306,7 @@ using `release_value()'.
`double' to store.

-File: gawk.info, Node: Array Manipulation, Next: Extension API Variables, Prev: Symbol Table Access, Up: Extension API Description
+File: gawk.info, Node: Array Manipulation, Next: Redirection API, Prev: Symbol Table Access, Up: Extension API Description
16.4.11 Array Manipulation
--------------------------
@@ -24237,7 +24405,7 @@ File: gawk.info, Node: Array Functions, Next: Flattening Arrays, Prev: Array
16.4.11.2 Array Functions
.........................
-The following functions relate to individual array elements.
+The following functions relate to individual array elements:
`awk_bool_t get_element_count(awk_array_t a_cookie, size_t *count);'
For the array represented by `a_cookie', place in `*count' the
@@ -24255,13 +24423,14 @@ The following functions relate to individual array elements.
(*note Table 16.1: table-value-types-returned.).
The value for `index' can be numeric, in which case `gawk'
- converts it to a string. Using non-integral values is possible, but
+ converts it to a string. Using nonintegral values is possible, but
requires that you understand how such values are converted to
- strings (*note Conversion::); thus using integral values is safest.
+ strings (*note Conversion::); thus, using integral values is
+ safest.
As with _all_ strings passed into `gawk' from an extension, the
string value of `index' must come from `gawk_malloc()',
- `gawk_calloc()' or `gawk_realloc()', and `gawk' releases the
+ `gawk_calloc()', or `gawk_realloc()', and `gawk' releases the
storage.
`awk_bool_t set_array_element(awk_array_t a_cookie,'
@@ -24305,9 +24474,9 @@ The following functions relate to individual array elements.
`awk_bool_t release_flattened_array(awk_array_t a_cookie,'
` awk_flat_array_t *data);'
When done with a flattened array, release the storage using this
- function. You must pass in both the original array cookie, and
- the address of the created `awk_flat_array_t' structure. The
- function returns true upon success, false otherwise.
+ function. You must pass in both the original array cookie and the
+ address of the created `awk_flat_array_t' structure. The function
+ returns true upon success, false otherwise.

File: gawk.info, Node: Flattening Arrays, Next: Creating Arrays, Prev: Array Functions, Up: Array Manipulation
@@ -24317,8 +24486,8 @@ File: gawk.info, Node: Flattening Arrays, Next: Creating Arrays, Prev: Array
To "flatten" an array is to create a structure that represents the full
array in a fashion that makes it easy for C code to traverse the entire
-array. Test code in `extension/testext.c' does this, and also serves
-as a nice example showing how to use the APIs.
+array. Some of the code in `extension/testext.c' does this, and also
+serves as a nice example showing how to use the APIs.
We walk through that part of the code one step at a time. First,
the `gawk' script that drives the test extension:
@@ -24367,9 +24536,8 @@ number of arguments:
}
The function then proceeds in steps, as follows. First, retrieve the
-name of the array, passed as the first argument. Then retrieve the
-array itself. If either operation fails, print error messages and
-return:
+name of the array, passed as the first argument, followed by the array
+itself. If either operation fails, print an error message and return:
/* get argument named array as flat array and print it */
if (get_argument(0, AWK_STRING, & value)) {
@@ -24399,9 +24567,9 @@ count of elements in the array and print it:
printf("dump_array_and_delete: incoming size is %lu\n",
(unsigned long) count);
- The third step is to actually flatten the array, and then to double
-check that the count in the `awk_flat_array_t' is the same as the count
-just retrieved:
+ The third step is to actually flatten the array, and then to
+double-check that the count in the `awk_flat_array_t' is the same as
+the count just retrieved:
if (! flatten_array(value2.array_cookie, & flat_array)) {
printf("dump_array_and_delete: could not flatten array\n");
@@ -24418,7 +24586,7 @@ just retrieved:
The fourth step is to retrieve the index of the element to be
deleted, which was passed as the second argument. Remember that
-argument counts passed to `get_argument()' are zero-based, thus the
+argument counts passed to `get_argument()' are zero-based, and thus the
second argument is numbered one:
if (! get_argument(1, AWK_STRING, & value3)) {
@@ -24431,7 +24599,7 @@ over every element in the array, printing the index and element values.
In addition, upon finding the element with the index that is supposed
to be deleted, the function sets the `AWK_ELEMENT_DELETE' bit in the
`flags' field of the element. When the array is released, `gawk'
-traverses the flattened array, and deletes any elements which have this
+traverses the flattened array, and deletes any elements that have this
flag bit set:
for (i = 0; i < flat_array->count; i++) {
@@ -24623,9 +24791,78 @@ array:
environment variable.)

-File: gawk.info, Node: Extension API Variables, Next: Extension API Boilerplate, Prev: Array Manipulation, Up: Extension API Description
+File: gawk.info, Node: Redirection API, Next: Extension API Variables, Prev: Array Manipulation, Up: Extension API Description
+
+16.4.12 Accessing and Manipulating Redirections
+-----------------------------------------------
+
+The following function allows extensions to access and manipulate
+redirections.
+
+`awk_bool_t get_file(const char *name,'
+` size_t name_len,'
+` const char *filetype,'
+` int fd,'
+` const awk_input_buf_t **ibufp,'
+` const awk_output_buf_t **obufp);'
+ Look up a file in `gawk''s internal redirection table. If `name'
+ is `NULL' or `name_len' is zero, return data for the currently
+ open input file corresponding to `FILENAME'. (This does not
+ access the `filetype' argument, so that may be undefined). If the
+ file is not already open, attempt to open it. The `filetype'
+ argument must be zero-terminated and should be one of:
+
+ `">"'
+ A file opened for output.
+
+ `">>"'
+ A file opened for append.
-16.4.12 API Variables
+ `"<"'
+ A file opened for input.
+
+ `"|>"'
+ A pipe opened for output.
+
+ `"|<"'
+ A pipe opened for input.
+
+ `"|&"'
+ A two-way coprocess.
+
+ On error, return a `false' value. Otherwise, return `true', and
+ return additional information about the redirection in the `ibufp'
+ and `obufp' pointers. For input redirections, the `*ibufp' value
+ should be non-`NULL', and `*obufp' should be `NULL'. For output
+ redirections, the `*obufp' value should be non-`NULL', and `*ibufp'
+ should be `NULL'. For two-way coprocesses, both values should be
+ non-`NULL'.
+
+ In the usual case, the extension is interested in `(*ibufp)->fd'
+ and/or `fileno((*obufp)->fp)'. If the file is not already open,
+ and the `fd' argument is non-negative, `gawk' will use that file
+ descriptor instead of opening the file in the usual way. If `fd'
+ is non-negative, but the file exists already, `gawk' ignores `fd'
+ and returns the existing file. It is the caller's responsibility
+ to notice that neither the `fd' in the returned `awk_input_buf_t'
+ nor the `fd' in the returned `awk_output_buf_t' matches the
+ requested value.
+
+ Note that supplying a file descriptor is currently _not_ supported
+ for pipes. However, supplying a file descriptor should work for
+ input, output, append, and two-way (coprocess) sockets. If
+ `filetype' is two-way, `gawk' assumes that it is a socket! Note
+ that in the two-way case, the input and output file descriptors
+ may differ. To check for success, you must check whether either
+ matches.
+
+ It is anticipated that this API function will be used to implement
+I/O multiplexing and a socket library.
+
+
+File: gawk.info, Node: Extension API Variables, Next: Extension API Boilerplate, Prev: Redirection API, Up: Extension API Description
+
+16.4.13 API Variables
---------------------
The API provides two sets of variables. The first provides information
@@ -24642,17 +24879,17 @@ information about how `gawk' was invoked.

File: gawk.info, Node: Extension Versioning, Next: Extension API Informational Variables, Up: Extension API Variables
-16.4.12.1 API Version Constants and Variables
+16.4.13.1 API Version Constants and Variables
.............................................
The API provides both a "major" and a "minor" version number. The API
versions are available at compile time as constants:
`GAWK_API_MAJOR_VERSION'
- The major version of the API.
+ The major version of the API
`GAWK_API_MINOR_VERSION'
- The minor version of the API.
+ The minor version of the API
The minor version increases when new functions are added to the API.
Such new functions are always added to the end of the API `struct'.
@@ -24667,13 +24904,13 @@ For this reason, the major and minor API versions of the running `gawk'
are included in the API `struct' as read-only constant integers:
`api->major_version'
- The major version of the running `gawk'.
+ The major version of the running `gawk'
`api->minor_version'
- The minor version of the running `gawk'.
+ The minor version of the running `gawk'
It is up to the extension to decide if there are API
-incompatibilities. Typically a check like this is enough:
+incompatibilities. Typically, a check like this is enough:
if (api->major_version != GAWK_API_MAJOR_VERSION
|| api->minor_version < GAWK_API_MINOR_VERSION) {
@@ -24685,13 +24922,13 @@ incompatibilities. Typically a check like this is enough:
}
Such code is included in the boilerplate `dl_load_func()' macro
-provided in `gawkapi.h' (discussed later, in *note Extension API
+provided in `gawkapi.h' (discussed in *note Extension API
Boilerplate::).

File: gawk.info, Node: Extension API Informational Variables, Prev: Extension Versioning, Up: Extension API Variables
-16.4.12.2 Informational Variables
+16.4.13.2 Informational Variables
.................................
The API provides access to several variables that describe whether the
@@ -24726,7 +24963,7 @@ not change during execution.

File: gawk.info, Node: Extension API Boilerplate, Prev: Extension API Variables, Up: Extension API Description
-16.4.13 Boilerplate Code
+16.4.14 Boilerplate Code
------------------------
As mentioned earlier (*note Extension Mechanism Outline::), the function
@@ -24736,7 +24973,7 @@ functions) toward the top of your source file, using predefined names
as described here. The boilerplate needed is also provided in comments
in the `gawkapi.h' header file:
- /* Boiler plate code: */
+ /* Boilerplate code: */
int plugin_is_GPL_compatible;
static gawk_api_t *const api;
@@ -24786,7 +25023,7 @@ in the `gawkapi.h' header file:
to point to a string giving the name and version of your extension.
`static awk_ext_func_t func_table[] = { ... };'
- This is an array of one or more `awk_ext_func_t' structures as
+ This is an array of one or more `awk_ext_func_t' structures, as
described earlier (*note Extension Functions::). It can then be
looped over for multiple calls to `add_ext_func()'.
@@ -24899,7 +25136,7 @@ appropriate information:
`stat()' fails. It fills in the following elements:
`"name"'
- The name of the file that was `stat()''ed.
+ The name of the file that was `stat()'ed.
`"dev"'
`"ino"'
@@ -24947,7 +25184,7 @@ appropriate information:
The file is a directory.
`"fifo"'
- The file is a named-pipe (also known as a FIFO).
+ The file is a named pipe (also known as a FIFO).
`"file"'
The file is just a regular file.
@@ -24967,7 +25204,7 @@ appropriate information:
systems, "a priori" knowledge is used to provide a value. Where no
value can be determined, it defaults to 512.
- Several additional elements may be present depending upon the
+ Several additional elements may be present, depending upon the
operating system and the type of the file. You can test for them in
your `awk' program by using the `in' operator (*note Reference to
Elements::):
@@ -24996,9 +25233,9 @@ File: gawk.info, Node: Internal File Ops, Next: Using Internal File Ops, Prev
Here is the C code for these extensions.(1)
The file includes a number of standard header files, and then
-includes the `gawkapi.h' header file which provides the API definitions.
-Those are followed by the necessary variable declarations to make use
-of the API macros and boilerplate code (*note Extension API
+includes the `gawkapi.h' header file, which provides the API
+definitions. Those are followed by the necessary variable declarations
+to make use of the API macros and boilerplate code (*note Extension API
Boilerplate::):
#ifdef HAVE_CONFIG_H
@@ -25034,9 +25271,9 @@ Boilerplate::):
By convention, for an `awk' function `foo()', the C function that
implements it is called `do_foo()'. The function should have two
-arguments: the first is an `int' usually called `nargs', that
+arguments. The first is an `int', usually called `nargs', that
represents the number of actual arguments for the function. The second
-is a pointer to an `awk_value_t', usually named `result':
+is a pointer to an `awk_value_t' structure, usually named `result':
/* do_chdir --- provide dynamically loaded chdir() function for gawk */
@@ -25072,8 +25309,8 @@ is numbered zero.
}
The `stat()' extension is more involved. First comes a function
-that turns a numeric mode into a printable representation (e.g., 644
-becomes `-rw-r--r--'). This is omitted here for brevity:
+that turns a numeric mode into a printable representation (e.g., octal
+`0644' becomes `-rw-r--r--'). This is omitted here for brevity:
/* format_mode --- turn a stat mode field into something readable */
@@ -25123,8 +25360,8 @@ contain the result of the `stat()':
The following function does most of the work to fill in the
`awk_array_t' result array with values obtained from a valid `struct
-stat'. It is done in a separate function to support the `stat()'
-function for `gawk' and also to support the `fts()' extension which is
+stat'. This work is done in a separate function to support the `stat()'
+function for `gawk' and also to support the `fts()' extension, which is
included in the same file but whose code is not shown here (*note
Extension Sample File Functions::).
@@ -25236,8 +25473,8 @@ argument is optional. If present, it causes `do_stat()' to use the
`stat()' system call instead of the `lstat()' system call. This is
done by using a function pointer: `statfunc'. `statfunc' is
initialized to point to `lstat()' (instead of `stat()') to get the file
-information, in case the file is a symbolic link. However, if there
-were three arguments, `statfunc' is set point to `stat()', instead.
+information, in case the file is a symbolic link. However, if the third
+argument is included, `statfunc' is set to point to `stat()', instead.
Here is the `do_stat()' function, which starts with variable
declarations and argument checking:
@@ -25286,7 +25523,7 @@ returns:
/* always empty out the array */
clear_array(array);
- /* stat the file, if error, set ERRNO and return */
+ /* stat the file; if error, set ERRNO and return */
ret = statfunc(name, & sbuf);
if (ret < 0) {
update_ERRNO_int(errno);
@@ -25305,7 +25542,8 @@ When done, the function returns the result from `fill_stat_array()':
function(s) into `gawk'.
The `filefuncs' extension also provides an `fts()' function, which
-we omit here. For its sake there is an initialization function:
+we omit here (*note Extension Sample File Functions::). For its sake,
+there is an initialization function:
/* init_filefuncs --- initialization routine */
@@ -25429,9 +25667,9 @@ File: gawk.info, Node: Extension Samples, Next: gawkextlib, Prev: Extension E
16.7 The Sample Extensions in the `gawk' Distribution
=====================================================
-This minor node provides brief overviews of the sample extensions that
+This minor node provides a brief overview of the sample extensions that
come in the `gawk' distribution. Some of them are intended for
-production use (e.g., the `filefuncs', `readdir' and `inplace'
+production use (e.g., the `filefuncs', `readdir', and `inplace'
extensions). Others mainly provide example code that shows how to use
the extension API.
@@ -25468,13 +25706,13 @@ follows. The usage is:
`result = chdir("/some/directory")'
The `chdir()' function is a direct hook to the `chdir()' system
call to change the current directory. It returns zero upon
- success or less than zero upon error. In the latter case, it
- updates `ERRNO'.
+ success or a value less than zero upon error. In the latter case,
+ it updates `ERRNO'.
`result = stat("/some/path", statdata' [`, follow']`)'
The `stat()' function provides a hook into the `stat()' system
- call. It returns zero upon success or less than zero upon error.
- In the latter case, it updates `ERRNO'.
+ call. It returns zero upon success or a value less than zero upon
+ error. In the latter case, it updates `ERRNO'.
By default, it uses the `lstat()' system call. However, if passed
a third argument, it uses `stat()' instead.
@@ -25501,23 +25739,23 @@ follows. The usage is:
`"minor"' `st_minor' Device files
`"blksize"'`st_blksize' All
`"pmode"' A human-readable version of the All
- mode value, such as printed by
- `ls'. For example,
- `"-rwxr-xr-x"'
+ mode value, like that printed by
+ `ls' (for example,
+ `"-rwxr-xr-x"')
`"linkval"'The value of the symbolic link Symbolic
links
- `"type"' The type of the file as a string. All
- One of `"file"', `"blockdev"',
- `"chardev"', `"directory"',
- `"socket"', `"fifo"', `"symlink"',
- `"door"', or `"unknown"'. Not
- all systems support all file
- types.
+ `"type"' The type of the file as a All
+ string--one of `"file"',
+ `"blockdev"', `"chardev"',
+ `"directory"', `"socket"',
+ `"fifo"', `"symlink"', `"door"',
+ or `"unknown"' (not all systems
+ support all file types)
`flags = or(FTS_PHYSICAL, ...)'
`result = fts(pathlist, flags, filedata)'
Walk the file trees provided in `pathlist' and fill in the
- `filedata' array as described next. `flags' is the bitwise OR of
+ `filedata' array, as described next. `flags' is the bitwise OR of
several predefined values, also described in a moment. Return
zero if there were no errors, otherwise return -1.
@@ -25570,10 +25808,11 @@ requested hierarchies.
filesystem.
`filedata'
- The `filedata' array is first cleared. Then, `fts()' creates an
- element in `filedata' for every element in `pathlist'. The index
- is the name of the directory or file given in `pathlist'. The
- element for this index is itself an array. There are two cases:
+ The `filedata' array holds the results. `fts()' first clears it.
+ Then it creates an element in `filedata' for every element in
+ `pathlist'. The index is the name of the directory or file given
+ in `pathlist'. The element for this index is itself an array.
+ There are two cases:
_The path is a file_
In this case, the array contains two or three elements:
@@ -25609,7 +25848,7 @@ requested hierarchies.
elements as for a file: `"path"', `"stat"', and `"error"'.
The `fts()' function returns zero if there were no errors.
-Otherwise it returns -1.
+Otherwise, it returns -1.
NOTE: The `fts()' extension does not exactly mimic the interface
of the C library `fts()' routines, choosing instead to provide an
@@ -25648,14 +25887,14 @@ adds one constant (`FNM_NOMATCH'), and an array of flag values named
The arguments to `fnmatch()' are:
`pattern'
- The file name wildcard to match.
+ The file name wildcard to match
`string'
- The file name string.
+ The file name string
`flag'
Either zero, or the bitwise OR of one or more of the flags in the
- `FNM' array.
+ `FNM' array
The flags are as follows:
@@ -25689,13 +25928,13 @@ The `fork' extension adds three functions, as follows:
`pid = fork()'
This function creates a new process. The return value is zero in
- the child and the process-ID number of the child in the parent, or
+ the child and the process ID number of the child in the parent, or
-1 upon error. In the latter case, `ERRNO' indicates the problem.
In the child, `PROCINFO["pid"]' and `PROCINFO["ppid"]' are updated
to reflect the correct values.
`ret = waitpid(pid)'
- This function takes a numeric argument, which is the process-ID to
+ This function takes a numeric argument, which is the process ID to
wait for. The return value is that of the `waitpid()' system call.
`ret = wait()'
@@ -25719,8 +25958,8 @@ File: gawk.info, Node: Extension Sample Inplace, Next: Extension Sample Ord,
16.7.4 Enabling In-Place File Editing
-------------------------------------
-The `inplace' extension emulates GNU `sed''s `-i' option which performs
-"in place" editing of each input file. It uses the bundled
+The `inplace' extension emulates GNU `sed''s `-i' option, which
+performs "in-place" editing of each input file. It uses the bundled
`inplace.awk' include file to invoke the extension properly:
# inplace --- load and invoke the inplace extension.
@@ -25730,11 +25969,16 @@ The `inplace' extension emulates GNU `sed''s `-i' option which performs
# Please set INPLACE_SUFFIX to make a backup copy. For example, you may
# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+ # N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+ # actions in an ENDFILE rule will be redirected as expected.
+
BEGINFILE {
- inplace_begin(FILENAME, INPLACE_SUFFIX)
+ if (_inplace_filename != "")
+ inplace_end(_inplace_filename, INPLACE_SUFFIX)
+ inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
}
- ENDFILE {
+ END {
inplace_end(FILENAME, INPLACE_SUFFIX)
}
@@ -25746,6 +25990,10 @@ the extension restores standard output to its original destination. If
a backup file name created by appending that suffix. Finally, the
temporary file is renamed to the original file name.
+ The `_inplace_filename' variable serves to keep track of the current
+filename so as to not invoke `inplace_end()' before processing the
+first file.
+
If any error occurs, the extension issues a fatal error to terminate
processing immediately without damaging the original file.
@@ -25803,11 +26051,11 @@ returned as a record.
The record consists of three fields. The first two are the inode
number and the file name, separated by a forward slash character. On
systems where the directory entry contains the file type, the record
-has a third field (also separated by a slash) which is a single letter
+has a third field (also separated by a slash), which is a single letter
indicating the type of the file. The letters and their corresponding
file types are shown in *note table-readdir-file-types::.
-Letter File Type
+Letter File type
--------------------------------------------------------------------------
`b' Block device
`c' Character device
@@ -25854,7 +26102,7 @@ unwary. Here is an example:
print "don't panic" > "/dev/stdout"
}
- The output from this program is: `cinap t'nod'.
+ The output from this program is `cinap t'nod'.

File: gawk.info, Node: Extension Sample Rev2way, Next: Extension Sample Read write array, Prev: Extension Sample Revout, Up: Extension Samples
@@ -25902,7 +26150,7 @@ The `rwarray' extension adds two functions, named `writea()' and
`reada()' is the inverse of `writea()'; it reads the file named as
its first argument, filling in the array named as the second
argument. It clears the array first. Here too, the return value
- is one on success and zero upon failure.
+ is one on success, or zero upon failure.
The array created by `reada()' is identical to that written by
`writea()' in the sense that the contents are the same. However, due to
@@ -25986,7 +26234,7 @@ The `time' extension adds two functions, named `gettimeofday()' and
Attempt to sleep for SECONDS seconds. If SECONDS is negative, or
the attempt to sleep fails, return -1 and set `ERRNO'. Otherwise,
return zero after sleeping for the indicated amount of time. Note
- that SECONDS may be a floating-point (non-integral) value.
+ that SECONDS may be a floating-point (nonintegral) value.
Implementation details: depending on platform availability, this
function tries to use `nanosleep()' or `select()' to implement the
delay.
@@ -26014,19 +26262,23 @@ provides a number of `gawk' extensions, including one for processing
XML files. This is the evolution of the original `xgawk' (XML `gawk')
project.
- As of this writing, there are six extensions:
+ As of this writing, there are seven extensions:
+
+ * `errno' extension
* GD graphics library extension
+ * MPFR library extension (this provides access to a number of MPFR
+ functions that `gawk''s native MPFR support does not)
+
* PDF extension
* PostgreSQL extension
- * MPFR library extension (this provides access to a number of MPFR
- functions which `gawk''s native MPFR support does not)
-
* Redis extension
+ * Select extension
+
* XML parser extension, using the Expat
(http://expat.sourceforge.net) XML parsing library
@@ -26064,7 +26316,7 @@ follows. First, build and install `gawk':
If you have installed `gawk' in the standard way, then you will
likely not need the `--with-gawk' option when configuring `gawkextlib'.
-You may also need to use the `sudo' utility to install both `gawk' and
+You may need to use the `sudo' utility to install both `gawk' and
`gawkextlib', depending upon how your system works.
If you write an extension that you wish to share with other `gawk'
@@ -26086,7 +26338,7 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga
a variable named `plugin_is_GPL_compatible'.
* Communication between `gawk' and an extension is two-way. `gawk'
- passes a `struct' to the extension which contains various data
+ passes a `struct' to the extension that contains various data
fields and function pointers. The extension can then call into
`gawk' via the supplied function pointers to accomplish certain
tasks.
@@ -26097,7 +26349,7 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga
convention, implementation functions are named `do_XXXX()' for
some `awk'-level function `XXXX()'.
- * The API is defined in a header file named `gawkpi.h'. You must
+ * The API is defined in a header file named `gawkapi.h'. You must
include a number of standard header files _before_ including it in
your source file.
@@ -26127,16 +26379,16 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga
* Manipulating arrays (retrieving, adding, deleting, and
modifying elements; getting the count of elements in an array;
creating a new array; clearing an array; and flattening an
- array for easy C style looping over all its indices and
+ array for easy C-style looping over all its indices and
elements)
* The API defines a number of standard data types for representing
`awk' values, array elements, and arrays.
- * The API provide convenience functions for constructing values. It
- also provides memory management functions to ensure compatibility
- between memory allocated by `gawk' and memory allocated by an
- extension.
+ * The API provides convenience functions for constructing values.
+ It also provides memory management functions to ensure
+ compatibility between memory allocated by `gawk' and memory
+ allocated by an extension.
* _All_ memory passed from `gawk' to an extension must be treated as
read-only by the extension.
@@ -26154,8 +26406,8 @@ File: gawk.info, Node: Extension summary, Next: Extension Exercises, Prev: ga
header file make this easier to do.
* The `gawk' distribution includes a number of small but useful
- sample extensions. The `gawkextlib' project includes several more,
- larger, extensions. If you wish to write an extension and
+ sample extensions. The `gawkextlib' project includes several more
+ (larger) extensions. If you wish to write an extension and
contribute it to the community of `gawk' users, the `gawkextlib'
project is the place to do so.
@@ -26170,12 +26422,26 @@ File: gawk.info, Node: Extension Exercises, Prev: Extension summary, Up: Dyna
`chmod()', and `umask()' to the file operations extension
presented in *note Internal File Ops::.
- 2. (Hard.) How would you provide namespaces in `gawk', so that the
+ 2. Write an input parser that prints a prompt if the input is a from
+ a "terminal" device. You can use the `isatty()' function to tell
+ if the input file is a terminal. (Hint: this function is usually
+ expensive to call; try to call it just once.) The content of the
+ prompt should come from a variable settable by `awk'-level code.
+ You can write the prompt to stanard error. However, for best
+ results, open a new file descriptor (or file pointer) on
+ `/dev/tty' and print the prompt there, in case standard error has
+ been redirected.
+
+ Why is standard error a better choice than standard output for
+ writing the prompt? Which reading mechanism should you replace,
+ the one to get a record, or the one to read raw bytes?
+
+ 3. (Hard.) How would you provide namespaces in `gawk', so that the
names of functions in different extensions don't conflict with
each other? If you come up with a really good scheme, contact the
`gawk' maintainer to tell him about it.
- 3. Write a wrapper script that provides an interface similar to `sed
+ 4. Write a wrapper script that provides an interface similar to `sed
-i' for the "inplace" extension presented in *note Extension
Sample Inplace::.
@@ -26225,56 +26491,56 @@ available in System V Release 3.1 (1987). This minor node summarizes
the changes, with cross-references to further details:
* The requirement for `;' to separate rules on a line (*note
- Statements/Lines::).
+ Statements/Lines::)
* User-defined functions and the `return' statement (*note
- User-defined::).
+ User-defined::)
* The `delete' statement (*note Delete::).
- * The `do'-`while' statement (*note Do Statement::).
+ * The `do'-`while' statement (*note Do Statement::)
* The built-in functions `atan2()', `cos()', `sin()', `rand()', and
- `srand()' (*note Numeric Functions::).
+ `srand()' (*note Numeric Functions::)
* The built-in functions `gsub()', `sub()', and `match()' (*note
- String Functions::).
+ String Functions::)
* The built-in functions `close()' and `system()' (*note I/O
- Functions::).
+ Functions::)
* The `ARGC', `ARGV', `FNR', `RLENGTH', `RSTART', and `SUBSEP'
- predefined variables (*note Built-in Variables::).
+ predefined variables (*note Built-in Variables::)
- * Assignable `$0' (*note Changing Fields::).
+ * Assignable `$0' (*note Changing Fields::)
* The conditional expression using the ternary operator `?:' (*note
- Conditional Exp::).
+ Conditional Exp::)
- * The expression `INDEX-VARIABLE in ARRAY' outside of `for'
- statements (*note Reference to Elements::).
+ * The expression `INDX in ARRAY' outside of `for' statements (*note
+ Reference to Elements::)
* The exponentiation operator `^' (*note Arithmetic Ops::) and its
- assignment operator form `^=' (*note Assignment Ops::).
+ assignment operator form `^=' (*note Assignment Ops::)
* C-compatible operator precedence, which breaks some old `awk'
- programs (*note Precedence::).
+ programs (*note Precedence::)
* Regexps as the value of `FS' (*note Field Separators::) and as the
third argument to the `split()' function (*note String
- Functions::), rather than using only the first character of `FS'.
+ Functions::), rather than using only the first character of `FS'
* Dynamic regexps as operands of the `~' and `!~' operators (*note
- Computed Regexps::).
+ Computed Regexps::)
* The escape sequences `\b', `\f', and `\r' (*note Escape
- Sequences::).
+ Sequences::)
- * Redirection of input for the `getline' function (*note Getline::).
+ * Redirection of input for the `getline' function (*note Getline::)
- * Multiple `BEGIN' and `END' rules (*note BEGIN/END::).
+ * Multiple `BEGIN' and `END' rules (*note BEGIN/END::)
- * Multidimensional arrays (*note Multidimensional::).
+ * Multidimensional arrays (*note Multidimensional::)

File: gawk.info, Node: SVR4, Next: POSIX, Prev: V7/SVR3.1, Up: Language History
@@ -26285,37 +26551,37 @@ A.2 Changes Between SVR3.1 and SVR4
The System V Release 4 (1989) version of Unix `awk' added these features
(some of which originated in `gawk'):
- * The `ENVIRON' array (*note Built-in Variables::).
+ * The `ENVIRON' array (*note Built-in Variables::)
- * Multiple `-f' options on the command line (*note Options::).
+ * Multiple `-f' options on the command line (*note Options::)
* The `-v' option for assigning variables before program execution
- begins (*note Options::).
+ begins (*note Options::)
- * The `--' signal for terminating command-line options.
+ * The `--' signal for terminating command-line options
* The `\a', `\v', and `\x' escape sequences (*note Escape
- Sequences::).
+ Sequences::)
* A defined return value for the `srand()' built-in function (*note
- Numeric Functions::).
+ Numeric Functions::)
* The `toupper()' and `tolower()' built-in string functions for case
- translation (*note String Functions::).
+ translation (*note String Functions::)
* A cleaner specification for the `%c' format-control letter in the
- `printf' function (*note Control Letters::).
+ `printf' function (*note Control Letters::)
* The ability to dynamically pass the field width and precision
(`"%*.*d"') in the argument list of `printf' and `sprintf()'
- (*note Control Letters::).
+ (*note Control Letters::)
* The use of regexp constants, such as `/foo/', as expressions, where
they are equivalent to using the matching operator, as in `$0 ~
- /foo/' (*note Using Constant Regexps::).
+ /foo/' (*note Using Constant Regexps::)
* Processing of escape sequences inside command-line variable
- assignments (*note Assignment Options::).
+ assignments (*note Assignment Options::)

File: gawk.info, Node: POSIX, Next: BTL, Prev: SVR4, Up: Language History
@@ -26327,30 +26593,30 @@ The POSIX Command Language and Utilities standard for `awk' (1992)
introduced the following changes into the language:
* The use of `-W' for implementation-specific options (*note
- Options::).
+ Options::)
* The use of `CONVFMT' for controlling the conversion of numbers to
- strings (*note Conversion::).
+ strings (*note Conversion::)
* The concept of a numeric string and tighter comparison rules to go
- with it (*note Typing and Comparison::).
+ with it (*note Typing and Comparison::)
* The use of predefined variables as function parameter names is
- forbidden (*note Definition Syntax::).
+ forbidden (*note Definition Syntax::)
* More complete documentation of many of the previously undocumented
- features of the language.
+ features of the language
In 2012, a number of extensions that had been commonly available for
many years were finally added to POSIX. They are:
* The `fflush()' built-in function for flushing buffered output
- (*note I/O Functions::).
+ (*note I/O Functions::)
- * The `nextfile' statement (*note Nextfile Statement::).
+ * The `nextfile' statement (*note Nextfile Statement::)
* The ability to delete all of an array at once with `delete ARRAY'
- (*note Delete::).
+ (*note Delete::)
*Note Common Extensions::, for a list of common extensions not
@@ -26372,13 +26638,13 @@ Other Versions::).
in his version of `awk':
* The `**' and `**=' operators (*note Arithmetic Ops:: and *note
- Assignment Ops::).
+ Assignment Ops::)
* The use of `func' as an abbreviation for `function' (*note
- Definition Syntax::).
+ Definition Syntax::)
* The `fflush()' built-in function for flushing buffered output
- (*note I/O Functions::).
+ (*note I/O Functions::)
*Note Common Extensions::, for a full list of the extensions
@@ -26400,104 +26666,108 @@ the current version of `gawk'.
* Additional predefined variables:
- - The `ARGIND' `BINMODE', `ERRNO', `FIELDWIDTHS', `FPAT',
+ - The `ARGIND', `BINMODE', `ERRNO', `FIELDWIDTHS', `FPAT',
`IGNORECASE', `LINT', `PROCINFO', `RT', and `TEXTDOMAIN'
- variables (*note Built-in Variables::).
+ variables (*note Built-in Variables::)
* Special files in I/O redirections:
- - The `/dev/stdin', `/dev/stdout', `/dev/stderr' and
- `/dev/fd/N' special file names (*note Special Files::).
+ - The `/dev/stdin', `/dev/stdout', `/dev/stderr', and
+ `/dev/fd/N' special file names (*note Special Files::)
- The `/inet', `/inet4', and `/inet6' special files for TCP/IP
networking using `|&' to specify which version of the IP
- protocol to use (*note TCP/IP Networking::).
+ protocol to use (*note TCP/IP Networking::)
* Changes and/or additions to the language:
- - The `\x' escape sequence (*note Escape Sequences::).
+ - The `\x' escape sequence (*note Escape Sequences::)
- - Full support for both POSIX and GNU regexps (*note Regexp::).
+ - Full support for both POSIX and GNU regexps (*note Regexp::)
- The ability for `FS' and for the third argument to `split()'
- to be null strings (*note Single Character Fields::).
+ to be null strings (*note Single Character Fields::)
- - The ability for `RS' to be a regexp (*note Records::).
+ - The ability for `RS' to be a regexp (*note Records::)
- The ability to use octal and hexadecimal constants in `awk'
- program source code (*note Nondecimal-numbers::).
+ program source code (*note Nondecimal-numbers::)
- The `|&' operator for two-way I/O to a coprocess (*note
- Two-way I/O::).
+ Two-way I/O::)
- - Indirect function calls (*note Indirect Calls::).
+ - Indirect function calls (*note Indirect Calls::)
- Directories on the command line produce a warning and are
- skipped (*note Command-line directories::).
+ skipped (*note Command-line directories::)
+
+ - Output with `print' and `printf' need not be fatal (*note
+ Nonfatal::)
* New keywords:
- The `BEGINFILE' and `ENDFILE' special patterns (*note
- BEGINFILE/ENDFILE::).
+ BEGINFILE/ENDFILE::)
- - The `switch' statement (*note Switch Statement::).
+ - The `switch' statement (*note Switch Statement::)
* Changes to standard `awk' functions:
- The optional second argument to `close()' that allows closing
- one end of a two-way pipe to a coprocess (*note Two-way
- I/O::).
+ one end of a two-way pipe to a coprocess (*note Two-way I/O::)
- - POSIX compliance for `gsub()' and `sub()' with `--posix'.
+ - POSIX compliance for `gsub()' and `sub()' with `--posix'
- The `length()' function accepts an array argument and returns
- the number of elements in the array (*note String
- Functions::).
+ the number of elements in the array (*note String Functions::)
- The optional third argument to the `match()' function for
capturing text-matching subexpressions within a regexp (*note
- String Functions::).
+ String Functions::)
- Positional specifiers in `printf' formats for making
- translations easier (*note Printf Ordering::).
+ translations easier (*note Printf Ordering::)
- - The `split()' function's additional optional fourth argument
+ - The `split()' function's additional optional fourth argument,
which is an array to hold the text of the field separators
- (*note String Functions::).
+ (*note String Functions::)
* Additional functions only in `gawk':
- The `gensub()', `patsplit()', and `strtonum()' functions for
- more powerful text manipulation (*note String Functions::).
+ more powerful text manipulation (*note String Functions::)
- The `asort()' and `asorti()' functions for sorting arrays
- (*note Array Sorting::).
+ (*note Array Sorting::)
- The `mktime()', `systime()', and `strftime()' functions for
- working with timestamps (*note Time Functions::).
+ working with timestamps (*note Time Functions::)
- The `and()', `compl()', `lshift()', `or()', `rshift()', and
`xor()' functions for bit manipulation (*note Bitwise
- Functions::).
+ Functions::)
- The `isarray()' function to check if a variable is an array
- or not (*note Type Functions::).
+ or not (*note Type Functions::)
- - The `bindtextdomain()', `dcgettext()' and `dcngettext()'
- functions for internationalization (*note Programmer i18n::).
+ - The `bindtextdomain()', `dcgettext()', and `dcngettext()'
+ functions for internationalization (*note Programmer i18n::)
+
+ - The `intdiv()' function for doing integer division and
+ remainder (*note Numeric Functions::)
* Changes and/or additions in the command-line options:
- The `AWKPATH' environment variable for specifying a path
- search for the `-f' command-line option (*note Options::).
+ search for the `-f' command-line option (*note Options::)
- The `AWKLIBPATH' environment variable for specifying a path
- search for the `-l' command-line option (*note Options::).
+ search for the `-l' command-line option (*note Options::)
- The `-b', `-c', `-C', `-d', `-D', `-e', `-E', `-g', `-h',
`-i', `-l', `-L', `-M', `-n', `-N', `-o', `-O', `-p', `-P',
`-r', `-S', `-t', and `-V' short options. Also, the ability
- to use GNU-style long-named options that start with `--' and
+ to use GNU-style long-named options that start with `--', and
the `--assign', `--bignum', `--characters-as-bytes',
`--copyright', `--debug', `--dump-variables', `--exec',
`--field-separator', `--file', `--gen-pot', `--help',
@@ -26535,12 +26805,15 @@ the current version of `gawk'.
- GCC for VAX and Alpha has not been tested for a while.
- * Support for the following obsolete systems was removed from the
- code for `gawk' version 4.1:
+ * Support for the following obsolete system was removed from the code
+ for `gawk' version 4.1:
- Ultrix
- * Support for MirBSD was removed at `gawk' version 4.2.
+ * Support for the following systems was removed from the code for
+ `gawk' version 4.2:
+
+ - MirBSD

@@ -26927,6 +27200,28 @@ in POSIX `awk', in the order they were added to `gawk'.
* The dynamic extension interface was completely redone (*note
Dynamic Extensions::).
+ * Support for Ultrix was removed.
+
+
+ Version 4.2 introduced the following changes:
+
+ * Changes to `ENVIRON' are reflected into `gawk''s environment and
+ that of programs that it runs. *Note Auto-set::.
+
+ * The `--pretty-print' option no longer runs the `awk' program too.
+ *Note Options::.
+
+ * The `igawk' program and its manual page are no longer installed
+ when `gawk' is built. *Note Igawk Program::.
+
+ * The `intdiv()' function. *Note Numeric Functions::.
+
+ * The maximum number of hexdecimal digits in `\x' escapes is now two.
+ *Note Escape Sequences::.
+
+ * Nonfatal output with `print' and `printf'. *Note Nonfatal::.
+
+ * Support for MirBSD was removed.

File: gawk.info, Node: Common Extensions, Next: Ranges and Locales, Prev: Feature History, Up: Language History
@@ -26938,22 +27233,22 @@ The following table summarizes the common extensions supported by
`gawk', Brian Kernighan's `awk', and `mawk', the three most widely used
freely available versions of `awk' (*note Other Versions::).
-Feature BWK Awk Mawk GNU Awk Now standard
------------------------------------------------------------------------
-`\x' Escape sequence X X X
-`FS' as null string X X X
-`/dev/stdin' special file X X X
-`/dev/stdout' special file X X X
-`/dev/stderr' special file X X X
-`delete' without subscript X X X X
-`fflush()' function X X X X
-`length()' of an array X X X
-`nextfile' statement X X X X
-`**' and `**=' operators X X
-`func' keyword X X
-`BINMODE' variable X X
-`RS' as regexp X X
-Time-related functions X X
+Feature BWK `awk' `mawk' `gawk' Now standard
+--------------------------------------------------------------------------
+`\x' escape sequence X X X
+`FS' as null string X X X
+`/dev/stdin' special file X X X
+`/dev/stdout' special file X X X
+`/dev/stderr' special file X X X
+`delete' without subscript X X X X
+`fflush()' function X X X X
+`length()' of an array X X X
+`nextfile' statement X X X X
+`**' and `**=' operators X X
+`func' keyword X X
+`BINMODE' variable X X
+`RS' as regexp X X
+Time-related functions X X

File: gawk.info, Node: Ranges and Locales, Next: Contributors, Prev: Common Extensions, Up: Language History
@@ -26973,7 +27268,7 @@ in the machine's native character set. Thus, on ASCII-based systems,
`[a-z]' matched all the lowercase letters, and only the lowercase
letters, as the numeric values for the letters from `a' through `z'
were contiguous. (On an EBCDIC system, the range `[a-z]' includes
-additional, non-alphabetic characters as well.)
+additional nonalphabetic characters as well.)
Almost all introductory Unix literature explained range expressions
as working in this fashion, and in particular, would teach that the
@@ -26997,7 +27292,7 @@ outside those locales, the ordering was defined to be based on
What does that mean? In many locales, `A' and `a' are both less
than `B'. In other words, these locales sort characters in dictionary
order, and `[a-dx-z]' is typically not equivalent to `[abcdxyz]';
-instead it might be equivalent to `[ABCXYabcdxyz]', for example.
+instead, it might be equivalent to `[ABCXYabcdxyz]', for example.
This point needs to be emphasized: much literature teaches that you
should use `[a-z]' to match a lowercase character. But on systems with
@@ -27021,17 +27316,17 @@ is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as `en_US.UTF-8'.
Early versions of `gawk' used regexp matching code that was not
-locale aware, so ranges had their traditional interpretation.
+locale-aware, so ranges had their traditional interpretation.
When `gawk' switched to using locale-aware regexp matchers, the
problems began; especially as both GNU/Linux and commercial Unix
vendors started implementing non-ASCII locales, _and making them the
default_. Perhaps the most frequently asked question became something
-like "why does `[A-Z]' match lowercase letters?!?"
+like, "Why does `[A-Z]' match lowercase letters?!?"
This situation existed for close to 10 years, if not more, and the
`gawk' maintainer grew weary of trying to explain that `gawk' was being
-nicely standards compliant, and that the issue was in the user's
+nicely standards-compliant, and that the issue was in the user's
locale. During the development of version 4.0, he modified `gawk' to
always treat ranges in the original, pre-POSIX fashion, unless
`--posix' was used (*note Options::).(2)
@@ -27043,18 +27338,18 @@ of range expressions was _undefined_.(3)
By using this lovely technical term, the standard gives license to
implementors to implement ranges in whatever way they choose. The
-`gawk' maintainer chose to apply the pre-POSIX meaning in all cases:
-the default regexp matching; with `--traditional' and with `--posix';
-in all cases, `gawk' remains POSIX compliant.
+`gawk' maintainer chose to apply the pre-POSIX meaning both with the
+default regexp matching and when `--traditional' or `--posix' are used.
+In all cases `gawk' remains POSIX-compliant.
---------- Footnotes ----------
(1) And Life was good.
(2) And thus was born the Campaign for Rational Range Interpretation
-(or RRI). A number of GNU tools have either implemented this change, or
-will soon. Thanks to Karl Berry for coining the phrase "Rational Range
-Interpretation."
+(or RRI). A number of GNU tools have already implemented this change,
+or will soon. Thanks to Karl Berry for coining the phrase "Rational
+Range Interpretation."
(3) See the standard
(http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05)
@@ -27086,7 +27381,7 @@ Info file, in approximate chronological order:
* Richard Stallman helped finish the implementation and the initial
draft of this Info file. He is also the founder of the FSF and
- the GNU project.
+ the GNU Project.
* John Woods contributed parts of the code (mostly fixes) in the
initial version of `gawk'.
@@ -27172,22 +27467,22 @@ Info file, in approximate chronological order:
* John Haque made the following contributions:
- The modifications to convert `gawk' into a byte-code
- interpreter, including the debugger.
+ interpreter, including the debugger
- - The addition of true arrays of arrays.
+ - The addition of true arrays of arrays
- The additional modifications for support of
- arbitrary-precision arithmetic.
+ arbitrary-precision arithmetic
- - The initial text of *note Arbitrary Precision Arithmetic::.
+ - The initial text of *note Arbitrary Precision Arithmetic::
- The work to merge the three versions of `gawk' into one, for
- the 4.1 release.
+ the 4.1 release
- - Improved array internals for arrays indexed by integers.
+ - Improved array internals for arrays indexed by integers
- - The improved array sorting features were driven by John
- together with Pat Rankin.
+ - The improved array sorting features were also driven by John,
+ together with Pat Rankin
* Panos Papadopoulos contributed the original text for *note Include
Files::.
@@ -27216,11 +27511,11 @@ A.10 Summary
============
* The `awk' language has evolved over time. The first release was
- with V7 Unix circa 1978. In 1987, for System V Release 3.1, major
- additions, including user-defined functions, were made to the
- language. Additional changes were made for System V Release 4, in
- 1989. Since then, further minor changes happen under the auspices
- of the POSIX standard.
+ with V7 Unix, circa 1978. In 1987, for System V Release 3.1,
+ major additions, including user-defined functions, were made to
+ the language. Additional changes were made for System V Release
+ 4, in 1989. Since then, further minor changes have happened under
+ the auspices of the POSIX standard.
* Brian Kernighan's `awk' provides a small number of extensions that
are implemented in common with other versions of `awk'.
@@ -27233,7 +27528,7 @@ A.10 Summary
been confusing over the years. Today, `gawk' implements Rational
Range Interpretation, where ranges of the form `[a-z]' match
_only_ the characters numerically between `a' through `z' in the
- machine's native character set. Usually this is ASCII but it can
+ machine's native character set. Usually this is ASCII, but it can
be EBCDIC on IBM S/390 systems.
* Many people have contributed to `gawk' development over the years.
@@ -27311,7 +27606,7 @@ B.1.2 Extracting the Distribution
`gawk' is distributed as several `tar' files compressed with different
compression programs: `gzip', `bzip2', and `xz'. For simplicity, the
rest of these instructions assume you are using the one compressed with
-the GNU Zip program, `gzip'.
+the GNU Gzip program (`gzip').
Once you have the distribution (e.g., `gawk-4.1.2.tar.gz'), use
`gzip' to expand the file and then use `tar' to extract it. You can
@@ -27351,10 +27646,10 @@ files, subdirectories, and files related to the configuration process
to different non-Unix operating systems:
Various `.c', `.y', and `.h' files
- The actual `gawk' source code.
+ These files contain the actual `gawk' source code.
`ABOUT-NLS'
- Information about GNU `gettext' and translations.
+ A file containing information about GNU `gettext' and translations.
`AUTHORS'
A file with some information about the authorship of `gawk'. It
@@ -27386,7 +27681,7 @@ Various `.c', `.y', and `.h' files
The GNU General Public License.
`POSIX.STD'
- A description of behaviors in the POSIX standard for `awk' which
+ A description of behaviors in the POSIX standard for `awk' that
are left undefined, or where `gawk' may not comply fully, as well
as a list of things that the POSIX standard should describe but
does not.
@@ -27650,14 +27945,16 @@ command line when compiling `gawk' from scratch, including:
do nothing. Similarly, setting the `LINT' variable (*note
User-modified::) has no effect on the running `awk' program.
- When used with GCC's automatic dead-code-elimination, this option
- cuts almost 23K bytes off the size of the `gawk' executable on
- GNU/Linux x86_64 systems. Results on other systems and with other
- compilers are likely to vary. Using this option may bring you
- some slight performance improvement.
+ When used with the GNU Compiler Collection's (GCC's) automatic
+ dead-code-elimination, this option cuts almost 23K bytes off the
+ size of the `gawk' executable on GNU/Linux x86_64 systems.
+ Results on other systems and with other compilers are likely to
+ vary. Using this option may bring you some slight performance
+ improvement.
- Using this option will cause some of the tests in the test suite
- to fail. This option may be removed at a later date.
+ CAUTION: Using this option will cause some of the tests in
+ the test suite to fail. This option may be removed at a
+ later date.
`--disable-nls'
Disable all message-translation facilities. This is usually not
@@ -27741,10 +28038,10 @@ B.3.1 Installation on PC Operating Systems
This minor node covers installation and usage of `gawk' on Intel
architecture machines running MS-DOS, any version of MS-Windows, or
OS/2. In this minor node, the term "Windows32" refers to any of
-Microsoft Windows-95/98/ME/NT/2000/XP/Vista/7/8.
+Microsoft Windows 95/98/ME/NT/2000/XP/Vista/7/8.
The limitations of MS-DOS (and MS-DOS shells under the other
-operating systems) has meant that various "DOS extenders" are often
+operating systems) have meant that various "DOS extenders" are often
used with programs such as `gawk'. The varying capabilities of
Microsoft Windows 3.1 and Windows32 can add to the confusion. For an
overview of the considerations, refer to `README_d/README.pc' in the
@@ -27939,7 +28236,7 @@ The DJGPP collection of tools includes an MS-DOS port of Bash, and
several shells are available for OS/2, including `ksh'.
Under MS-Windows, OS/2 and MS-DOS, `gawk' (and many other text
-programs) silently translate end-of-line `\r\n' to `\n' on input and
+programs) silently translates end-of-line `\r\n' to `\n' on input and
`\n' to `\r\n' on output. A special `BINMODE' variable (c.e.) allows
control over these translations and is interpreted as follows:
@@ -27961,7 +28258,7 @@ The modes for standard input and standard output are set one time only
program). Setting `BINMODE' for standard input or standard output is
accomplished by using an appropriate `-v BINMODE=N' option on the
command line. `BINMODE' is set at the time a file or pipe is opened
-and cannot be changed mid-stream.
+and cannot be changed midstream.
The name `BINMODE' was chosen to match `mawk' (*note Other
Versions::). `mawk' and `gawk' handle `BINMODE' similarly; however,
@@ -28005,10 +28302,9 @@ B.3.1.5 Using `gawk' In The Cygwin Environment
`gawk' can be built and used "out of the box" under MS-Windows if you
are using the Cygwin environment (http://www.cygwin.com). This
-environment provides an excellent simulation of GNU/Linux, using the
-GNU tools, such as Bash, the GNU Compiler Collection (GCC), GNU Make,
-and other GNU programs. Compilation and installation for Cygwin is the
-same as for a Unix system:
+environment provides an excellent simulation of GNU/Linux, using Bash,
+GCC, GNU Make, and other GNU programs. Compilation and installation
+for Cygwin is the same as for a Unix system:
tar -xvpzf gawk-4.1.2.tar.gz
cd gawk-4.1.2
@@ -28026,7 +28322,7 @@ B.3.1.6 Using `gawk' In The MSYS Environment
............................................
In the MSYS environment under MS-Windows, `gawk' automatically uses
-binary mode for reading and writing files. Thus there is no need to
+binary mode for reading and writing files. Thus, there is no need to
use the `BINMODE' variable.
This can cause problems with other Unix-like components that have
@@ -28081,9 +28377,9 @@ available from `https://github.com/endlesssoftware/mmk'.
target parameter may need to be exact.
`gawk' has been tested under VAX/VMS 7.3 and Alpha/VMS 7.3-1 using
-Compaq C V6.4, and Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.
-The most recent builds used HP C V7.3 on Alpha VMS 8.3 and both Alpha
-and IA64 VMS 8.4 used HP C 7.3.(1)
+Compaq C V6.4, and under Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS
+8.3. The most recent builds used HP C V7.3 on Alpha VMS 8.3 and both
+Alpha and IA64 VMS 8.4 used HP C 7.3.(1)
*Note VMS GNV::, for information on building `gawk' as a PCSI kit
that is compatible with the GNV product.
@@ -28126,7 +28422,7 @@ than 32 bits.
/name=(as_is,short)
- Compile time macros need to be defined before the first VMS-supplied
+ Compile-time macros need to be defined before the first VMS-supplied
header file is included, as follows:
#if (__CRTL_VER >= 70200000) && !defined (__VAX)
@@ -28170,14 +28466,14 @@ directory tree, the program will be known as
`GNV$GNU:[vms_help]gawk.hlp'.
The PCSI kit also installs a `GNV$GNU:[vms_bin]gawk_verb.cld' file
-which can be used to add `gawk' and `awk' as DCL commands.
+that can be used to add `gawk' and `awk' as DCL commands.
For just the current process you can use:
$ set command gnv$gnu:[vms_bin]gawk_verb.cld
Or the system manager can use `GNV$GNU:[vms_bin]gawk_verb.cld' to
-add the `gawk' and `awk' to the system wide `DCLTABLES'.
+add the `gawk' and `awk' to the system-wide `DCLTABLES'.
The DCL syntax is documented in the `gawk.hlp' file.
@@ -28237,14 +28533,14 @@ process) are present, there is no ambiguity and `--' can be omitted.
status value when the program exits.
The VMS severity bits will be set based on the `exit' value. A
-failure is indicated by 1 and VMS sets the `ERROR' status. A fatal
-error is indicated by 2 and VMS sets the `FATAL' status. All other
+failure is indicated by 1, and VMS sets the `ERROR' status. A fatal
+error is indicated by 2, and VMS sets the `FATAL' status. All other
values will have the `SUCCESS' status. The exit value is encoded to
comply with VMS coding standards and will have the `C_FACILITY_NO' of
`0x350000' with the constant `0xA000' added to the number shifted over
by 3 bits to make room for the severity codes.
- To extract the actual `gawk' exit code from the VMS status use:
+ To extract the actual `gawk' exit code from the VMS status, use:
unix_status = (vms_status .and. &x7f8) / 8
@@ -28260,7 +28556,7 @@ Function::.
VMS reports time values in GMT unless one of the `SYS$TIMEZONE_RULE'
or `TZ' logical names is set. Older versions of VMS, such as VAX/VMS
-7.3 do not set these logical names.
+7.3, do not set these logical names.
The default search path, when looking for `awk' program files
specified by the `-f' option, is `"SYS$DISK:[],AWK_LIBRARY:"'. The
@@ -28277,7 +28573,7 @@ B.3.2.5 The VMS GNV Project
The VMS GNV package provides a build environment similar to POSIX with
ports of a collection of open source tools. The `gawk' found in the GNV
-base kit is an older port. Currently the GNV project is being
+base kit is an older port. Currently, the GNV project is being
reorganized to supply individual PCSI packages for each component. See
`https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/'.
@@ -28311,7 +28607,7 @@ B.4 Reporting Problems and Bugs
Douglas Adams, `The Hitchhiker's Guide to the Galaxy'
If you have problems with `gawk' or think that you have found a bug,
-report it to the developers; we cannot promise to do anything but we
+report it to the developers; we cannot promise to do anything, but we
might well want to fix it.
Before reporting a bug, make sure you have really found a genuine
@@ -28322,7 +28618,7 @@ documentation!
Before reporting a bug or trying to fix it yourself, try to isolate
it to the smallest possible `awk' program and input data file that
-reproduces the problem. Then send us the program and data file, some
+reproduce the problem. Then send us the program and data file, some
idea of what kind of Unix system you're using, the compiler you used to
compile `gawk', and the exact results `gawk' gave you. Also say what
you expected to occur; this helps us decide whether the problem is
@@ -28334,7 +28630,7 @@ You can get this information with the command `gawk --version'.
Once you have a precise problem description, send email to
<bug-gawk@gnu.org>.
- The `gawk' maintainers subscribe to this address and thus they will
+ The `gawk' maintainers subscribe to this address, and thus they will
receive your bug report. Although you can send mail to the maintainers
directly, the bug reporting address is preferred because the email list
is archived at the GNU Project. _All email must be in English. This is
@@ -28355,8 +28651,8 @@ the only language understood in common by all the maintainers._
forward bug reports "upstream" to the GNU mailing list, many
don't, so there is a good chance that the `gawk' maintainers
won't even see the bug report! Second, mail to the GNU list is
- archived, and having everything at the GNU project keeps things
- self-contained and not dependant on other organizations.
+ archived, and having everything at the GNU Project keeps things
+ self-contained and not dependent on other organizations.
Non-bug suggestions are always welcome as well. If you have
questions about things that are unclear in the documentation or are
@@ -28365,18 +28661,19 @@ if we can.
If you find bugs in one of the non-Unix ports of `gawk', send an
email to the bug list, with a copy to the person who maintains that
-port. They are named in the following list, as well as in the `README'
-file in the `gawk' distribution. Information in the `README' file
-should be considered authoritative if it conflicts with this Info file.
+port. The maintainers are named in the following list, as well as in
+the `README' file in the `gawk' distribution. Information in the
+`README' file should be considered authoritative if it conflicts with
+this Info file.
The people maintaining the various `gawk' ports are:
-Unix and POSIX systems Arnold Robbins, <arnold@skeeve.com>.
-MS-DOS with DJGPP Scott Deifik, <scottd.mail@sbcglobal.net>.
-MS-Windows with MinGW Eli Zaretskii, <eliz@gnu.org>.
-OS/2 Andreas Buening, <andreas.buening@nexgo.de>.
-VMS John Malmberg, <wb8tyw@qsl.net>.
-z/OS (OS/390) Dave Pitts, <dpitts@cozx.com>.
+Unix and POSIX systems Arnold Robbins, <arnold@skeeve.com>
+MS-DOS with DJGPP Scott Deifik, <scottd.mail@sbcglobal.net>
+MS-Windows with MinGW Eli Zaretskii, <eliz@gnu.org>
+OS/2 Andreas Buening, <andreas.buening@nexgo.de>
+VMS John Malmberg, <wb8tyw@qsl.net>
+z/OS (OS/390) Dave Pitts, <dpitts@cozx.com>
If your bug is also reproducible under Unix, send a copy of your
report to the <bug-gawk@gnu.org> email list as well.
@@ -28387,7 +28684,7 @@ File: gawk.info, Node: Other Versions, Next: Installation summary, Prev: Bugs
B.5 Other Freely Available `awk' Implementations
================================================
- It's kind of fun to put comments like this in your awk code.
+ It's kind of fun to put comments like this in your awk code:
`// Do C++ comments work? answer: yes! of course' -- Michael
Brennan
@@ -28410,11 +28707,11 @@ Unix `awk'
Zip file
`http://www.cs.princeton.edu/~bwk/btl.mirror/awk.zip'
- You can also retrieve it from Git Hub:
+ You can also retrieve it from GitHub:
git clone git://github.com/onetrueawk/awk bwkawk
- This command creates a copy of the Git (http://www.git-scm.com)
+ This command creates a copy of the Git (http://git-scm.com)
repository in a directory named `bwkawk'. If you leave that
argument off the `git' command line, the repository copy is
created in a directory named `awk'.
@@ -28452,7 +28749,7 @@ Unix `awk'
`awka'
Written by Andrew Sumner, `awka' translates `awk' programs into C,
compiles them, and links them with a library of functions that
- provides the core `awk' functionality. It also has a number of
+ provide the core `awk' functionality. It also has a number of
extensions.
The `awk' translator is released under the GPL, and the library is
@@ -28461,19 +28758,19 @@ Unix `awk'
To get `awka', go to `http://sourceforge.net/projects/awka'.
The project seems to be frozen; no new code changes have been made
- since approximately 2003.
+ since approximately 2001.
`pawk'
Nelson H.F. Beebe at the University of Utah has modified BWK `awk'
to provide timing and profiling information. It is different from
- `gawk' with the `--profile' option (*note Profiling::), in that it
+ `gawk' with the `--profile' option (*note Profiling::) in that it
uses CPU-based profiling, not line-count profiling. You may find
it at either
`ftp://ftp.math.utah.edu/pub/pawk/pawk-20030606.tar.gz' or
`http://www.math.utah.edu/pub/pawk/pawk-20030606.tar.gz'.
-Busybox Awk
- Busybox is a GPL-licensed program providing small versions of many
+BusyBox `awk'
+ BusyBox is a GPL-licensed program providing small versions of many
applications within a single executable. It is aimed at embedded
systems. It includes a full implementation of POSIX `awk'. When
building it, be careful not to do `make install' as it will
@@ -28483,7 +28780,7 @@ Busybox Awk
The OpenSolaris POSIX `awk'
The versions of `awk' in `/usr/xpg4/bin' and `/usr/xpg6/bin' on
- Solaris are more-or-less POSIX-compliant. They are based on the
+ Solaris are more or less POSIX-compliant. They are based on the
`awk' from Mortice Kern Systems for PCs. We were able to make
this code compile and work under GNU/Linux with 1-2 hours of work.
Making it more generally portable (using GNU Autoconf and/or
@@ -28515,7 +28812,7 @@ Libmawk
information. (This is not related to Nelson Beebe's modified
version of BWK `awk', described earlier.)
-QSE Awk
+QSE `awk'
This is an embeddable `awk' interpreter. For more information, see
`http://code.google.com/p/qse/' and `http://awk.info/?tools/qse'.
@@ -28533,7 +28830,7 @@ Other versions
See also the "Versions and implementations" section of the
Wikipedia article
(http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations)
- for information on additional versions.
+ on `awk' for information on additional versions.

@@ -28542,7 +28839,7 @@ File: gawk.info, Node: Installation summary, Prev: Other Versions, Up: Instal
B.6 Summary
===========
- * The `gawk' distribution is available from GNU project's main
+ * The `gawk' distribution is available from the GNU Project's main
distribution site, `ftp.gnu.org'. The canonical build recipe is:
wget http://ftp.gnu.org/gnu/gawk/gawk-4.1.2.tar.gz
@@ -28551,17 +28848,17 @@ B.6 Summary
./configure && make && make check
* `gawk' may be built on non-POSIX systems as well. The currently
- supported systems are MS-Windows using DJGPP, MSYS, MinGW and
+ supported systems are MS-Windows using DJGPP, MSYS, MinGW, and
Cygwin, OS/2 using EMX, and both Vax/VMS and OpenVMS.
Instructions for each system are included in this major node.
* Bug reports should be sent via email to <bug-gawk@gnu.org>. Bug
- reports should be in English, and should include the version of
+ reports should be in English and should include the version of
`gawk', how it was compiled, and a short program and data file
- which demonstrate the problem.
+ that demonstrate the problem.
* There are a number of other freely available `awk'
- implementations. Many are POSIX compliant; others are less so.
+ implementations. Many are POSIX-compliant; others are less so.

@@ -28646,7 +28943,7 @@ released versions of `gawk'.
changes, you will probably wish to work with the development version.
To do so, you will need to access the `gawk' source code repository.
The code is maintained using the Git distributed version control system
-(http://git-scm.com/). You will need to install it if your system
+(http://git-scm.com). You will need to install it if your system
doesn't have it. Once you have done so, use the command:
git clone git://git.savannah.gnu.org/gawk.git
@@ -28701,7 +28998,7 @@ possible to include them:
document describes how GNU software should be written. If you
haven't read it, please do so, preferably _before_ starting to
modify `gawk'. (The `GNU Coding Standards' are available from the
- GNU Project's website (http://www.gnu.org/prep/standards_toc.html).
+ GNU Project's website (http://www.gnu.org/prep/standards/).
Texinfo, Info, and DVI versions are also available.)
5. Use the `gawk' coding style. The C code for `gawk' follows the
@@ -29583,6 +29880,21 @@ ANSI
C++ programming languages. These standards often become
international standards as well. See also "ISO."
+Argument
+ An argument can be two different things. It can be an option or a
+ file name passed to a command while invoking it from the command
+ line, or it can be something passed to a "function" inside a
+ program, e.g. inside `awk'.
+
+ In the latter case, an argument can be passed to a function in two
+ ways. Either it is given to the called function by value, i.e., a
+ copy of the value of the variable is made available to the called
+ function, but the original variable cannot be modified by the
+ function itself; or it is given by reference, i.e., a pointer to
+ the interested variable is passed to the function, which can then
+ directly modify it. In `awk' scalars are passed by value, and
+ arrays are passed by reference. See "Pass By Value/Reference."
+
Array
A grouping of multiple values under the same name. Most languages
just provide sequential arrays. `awk' provides associative arrays.
@@ -29618,6 +29930,26 @@ Bash
The GNU version of the standard shell (the Bourne-Again SHell).
See also "Bourne Shell."
+Binary
+ Base-two notation, where the digits are `0'-`1'. Since electronic
+ circuitry works "naturally" in base 2 (just think of Off/On),
+ everything inside a computer is calculated using base 2. Each digit
+ represents the presence (or absence) of a power of 2 and is called
+ a "bit". So, for example, the base-two number `10101' is the same
+ as decimal 21, ((1 x 16) + (1 x 4) + (1 x 1)).
+
+ Since base-two numbers quickly become very long to read and write,
+ they are usually grouped by 3 (i.e., they are read as octal
+ numbers), or by 4 (i.e., they are read as hexadecimal numbers).
+ There is no direct way to insert base 2 numbers in a C program.
+ If need arises, such numbers are usually inserted as octal or
+ hexadecimal numbers. The number of base-two digits that fit into
+ registers used for representing integer numbers in computers is a
+ rough indication of the computing power of the computer itself.
+ Most computers nowadays use 64 bits for representing integer
+ numbers in their registers, but 32-bit, 16-bit and 8-bit registers
+ have been widely used in the past. *Note Nondecimal-numbers::.
+
Bit
Short for "Binary Digit." All values in computer memory
ultimately reduce to binary digits: values that are either zero or
@@ -29646,6 +29978,19 @@ Braces
The characters `{' and `}'. Braces are used in `awk' for
delimiting actions, compound statements, and function bodies.
+Bracket Expression
+ Inside a "regular expression", an expression included in square
+ brackets, meant to designate a single character as belonging to a
+ specified character class. A bracket expression can contain a list
+ of one or more characters, like `[abc]', a range of characters,
+ like `[A-Z]', or a name, delimited by `:', that designates a known
+ set of characters, like `[:digit:]'. The form of bracket expression
+ enclosed between `:' is independent of the underlying
+ representation of the character themselves, which could utilize
+ the ASCII, ECBDIC, or Unicode codesets, depending on the
+ architecture of the computer system, and on localization. See
+ also "Regular Expression."
+
Built-in Function
The `awk' language provides built-in functions that perform various
numerical, I/O-related, and string computations. Examples are
@@ -29673,9 +30018,25 @@ C
In general, `gawk' attempts to be as similar to the 1990 version
of ISO C as makes sense.
+C Shell
+ The C Shell (`csh' or its improved version, `tcsh') is a Unix
+ shell that was created by Bill Joy in the late 1970s. The C shell
+ was differentiated from other shells by its interactive features
+ and overall style, which looks more like C. The C Shell is not
+ backward compatible with the Bourne Shell, so special attention is
+ required when converting scripts written for other Unix shells to
+ the C shell, especially with regard to the management of shell
+ variables. See also "Bourne Shell."
+
C++
A popular object-oriented programming language derived from C.
+Character Class
+ See "Bracket Expression."
+
+Character List
+ See "Bracket Expression."
+
Character Set
The set of numeric codes used by a computer system to represent the
characters (letters, numbers, punctuation, etc.) of a particular
@@ -29690,25 +30051,34 @@ CHEM
A preprocessor for `pic' that reads descriptions of molecules and
produces `pic' input for drawing them. It was written in `awk' by
Brian Kernighan and Jon Bentley, and is available from
- `http://netlib.sandia.gov/netlib/typesetting/chem.gz'.
+ `http://netlib.org/typesetting/chem'.
-Cookie
- A peculiar goodie, token, saying or remembrance produced by or
- presented to a program. (With thanks to Professor Doug McIlroy.)
-
-Coprocess
- A subordinate program with which two-way communications is
- possible.
+Comparison Expression
+ A relation that is either true or false, such as `a < b'.
+ Comparison expressions are used in `if', `while', `do', and `for'
+ statements, and in patterns to select which input records to
+ process. (*Note Typing and Comparison::.)
Compiler
A program that translates human-readable source code into
machine-executable object code. The object code is then executed
directly by the computer. See also "Interpreter."
+Complemented Bracket Expression
+ The negation of a "bracket expression". All that is _not_
+ described by a given bracket expression. The symbol `^' precedes
+ the negated bracket expression. E.g.: `[[^:digit:]' designates
+ whatever character is not a digit. `[^bad]' designates whatever
+ character is not one of the letters `b', `a', or `d'. See
+ "Bracket Expression."
+
Compound Statement
A series of `awk' statements, enclosed in curly braces. Compound
statements may be nested. (*Note Statements::.)
+Computed Regexps
+ See "Dynamic Regular Expressions."
+
Concatenation
Concatenating two strings means sticking them together, one after
another, producing a new string. For example, the string `foo'
@@ -29722,11 +30092,19 @@ Conditional Expression
otherwise the value is EXPR3. In either case, only one of EXPR2
and EXPR3 is evaluated. (*Note Conditional Exp::.)
-Comparison Expression
- A relation that is either true or false, such as `a < b'.
- Comparison expressions are used in `if', `while', `do', and `for'
- statements, and in patterns to select which input records to
- process. (*Note Typing and Comparison::.)
+Control Statement
+ A control statement is an instruction to perform a given operation
+ or a set of operations inside an `awk' program, if a given
+ condition is true. Control statements are: `if', `for', `while',
+ and `do' (*note Statements::).
+
+Cookie
+ A peculiar goodie, token, saying or remembrance produced by or
+ presented to a program. (With thanks to Professor Doug McIlroy.)
+
+Coprocess
+ A subordinate program with which two-way communications is
+ possible.
Curly Braces
See "Braces."
@@ -29768,15 +30146,15 @@ Dynamic Regular Expression
`"foo"', but it may also be an expression whose value can vary.
(*Note Computed Regexps::.)
+Empty String
+ See "Null String."
+
Environment
A collection of strings, of the form `NAME=VAL', that each program
has available to it. Users generally place values into the
environment in order to provide information to various programs.
Typical examples are the environment variables `HOME' and `PATH'.
-Empty String
- See "Null String."
-
Epoch
The date used as the "beginning of time" for timestamps. Time
values in most systems are represented as seconds since the epoch,
@@ -29826,25 +30204,38 @@ Format
are controlled by the format strings contained in the predefined
variables `CONVFMT' and `OFMT'. (*Note Control Letters::.)
+Fortran
+ Shorthand for FORmula TRANslator, one of the first programming
+ languages available for scientific calculations. It was created by
+ John Backus, and has been available since 1957. It is still in use
+ today.
+
Free Documentation License
This document describes the terms under which this Info file is
published and may be copied. (*Note GNU Free Documentation
License::.)
-Function
- A specialized group of statements used to encapsulate general or
- program-specific tasks. `awk' has a number of built-in functions,
- and also allows you to define your own. (*Note Functions::.)
-
-FSF
- See "Free Software Foundation."
-
Free Software Foundation
A nonprofit organization dedicated to the production and
distribution of freely distributable software. It was founded by
Richard M. Stallman, the author of the original Emacs editor. GNU
Emacs is the most widely used version of Emacs today.
+FSF
+ See "Free Software Foundation."
+
+Function
+ A part of an `awk' program that can be invoked from every point of
+ the program, to perform a task. `awk' has several built-in
+ functions. Users can define their own functions in every part of
+ the program. Function can be recursive, i.e., they may invoke
+ themselves. *Note Functions::. In `gawk' it is also possible to
+ have functions shared among different programs, and included where
+ required using the `@include' directive (*note Include Files::).
+ In `gawk' the name of the function that should be invoked can be
+ generated at run time, i.e., dynamically. The `gawk' extension
+ API provides constructor functions (*note Constructor Functions::).
+
`gawk'
The GNU implementation of `awk'.
@@ -29939,17 +30330,23 @@ Keyword
`else', `exit', `for...in', `for', `function', `func', `if',
`next', `nextfile', `switch', and `while'.
+Korn Shell
+ The Korn Shell (`ksh') is a Unix shell which was developed by
+ David Korn at Bell Laboratories in the early 1980s. The Korn Shell
+ is backward-compatible with the Bourne shell and includes many
+ features of the C shell. See also "Bourne Shell."
+
Lesser General Public License
This document describes the terms under which binary library
archives or shared objects, and their source code may be
distributed.
-Linux
- See "GNU/Linux."
-
LGPL
See "Lesser General Public License."
+Linux
+ See "GNU/Linux."
+
Localization
The process of providing the data necessary for an
internationalized program to work in a particular language.
@@ -29976,6 +30373,13 @@ Metacharacters
Instead, they denote regular expression operations, such as
repetition, grouping, or alternation.
+Nesting
+ Nesting is where information is organized in layers, or where
+ objects contain other similar objects. In `gawk' the `@include'
+ directive can be nested. The "natural" nesting of arithmetic and
+ logical operations can be changed using parentheses (*note
+ Precedence::).
+
No-op
An operation that does nothing.
@@ -29995,6 +30399,11 @@ Octal
are written in C using a leading `0', to indicate their base.
Thus, `013' is 11 ((1 x 8) + 3). *Note Nondecimal-numbers::.
+Output Record
+ A single chunk of data that is written out by `awk'. Usually, an
+ `awk' output record consists of one or more lines of text. *Note
+ Records::.
+
Pattern
Patterns tell `awk' which input records are interesting to which
rules.
@@ -30010,6 +30419,9 @@ PEBKAC
computer usage problems. (Problem Exists Between Keyboard And
Chair.)
+Plug-in
+ See "Extensions."
+
POSIX
The name for a series of standards that specify a Portable
Operating System interface. The "IX" denotes the Unix heritage of
@@ -30033,6 +30445,9 @@ Range (of input lines)
can specify ranges of input lines for `awk' to process or it can
specify single lines. (*Note Pattern Overview::.)
+Record
+ See "Input record" and "Output record."
+
Recursion
When a function calls itself, either directly or indirectly. If
this is clear, stop, and proceed to the next entry. Otherwise,
@@ -30049,6 +30464,16 @@ Redirection
using the `>', `>>', `|', and `|&' operators. (*Note Getline::,
and *note Redirection::.)
+Reference Counts
+ An internal mechanism in `gawk' to minimize the amount of memory
+ needed to store the value of string variables. If the value
+ assumed by a variable is used in more than one place, only one
+ copy of the value itself is kept, and the associated reference
+ count is increased when the same value is used by an additional
+ variable, and decresed when the related variable is no longer in
+ use. When the reference count goes to zero, the memory space used
+ to store the value of the variable is freed.
+
Regexp
See "Regular Expression."
@@ -30067,6 +30492,15 @@ Regular Expression Constant
when you write the `awk' program and cannot be changed during its
execution. (*Note Regexp Usage::.)
+Regular Expression Operators
+ See "Metacharacters."
+
+Rounding
+ Rounding the result of an arithmetic operation can be tricky.
+ More than one way of rounding exists, and in `gawk' it is possible
+ to choose which method should be used in a program. *Note Setting
+ the rounding mode::.
+
Rule
A segment of an `awk' program that specifies how to process single
input records. A rule consists of a "pattern" and an "action".
@@ -30088,13 +30522,13 @@ Search Path
source files. In the shell, a list of directories to search for
executable programs.
+`sed'
+ See "Stream Editor."
+
Seed
The initial value, or starting point, for a sequence of random
numbers.
-`sed'
- See "Stream Editor."
-
Shell
The command interpreter for Unix and POSIX-compliant systems. The
shell works both interactively, and as a programming language for
@@ -30128,6 +30562,11 @@ Special File
handed directly to the underlying operating system--for example,
`/dev/stderr'. (*Note Special Files::.)
+Statement
+ An expression inside an `awk' program in the action part of a
+ pattern-action rule, or inside an `awk' function. A statement can
+ be a variable assignment, an array operation, a loop, etc.
+
Stream Editor
A program that reads records from an input stream and processes
them one or more at a time. This is in contrast with batch
@@ -30170,10 +30609,15 @@ UTC
reference time for day and date calculations. See also "Epoch"
and "GMT."
+Variable
+ A name for a value. In `awk', variables may be either scalars or
+ arrays.
+
Whitespace
A sequence of space, TAB, or newline characters occurring inside
an input record or a string.
+

File: gawk.info, Node: Copying, Next: GNU Free Documentation License, Prev: Glossary, Up: Top
@@ -31406,7 +31850,7 @@ Index
* ! (exclamation point), !~ operator <5>: Case-sensitivity. (line 26)
* ! (exclamation point), !~ operator <6>: Computed Regexps. (line 6)
* ! (exclamation point), !~ operator: Regexp Usage. (line 19)
-* " (double quote), in regexp constants: Computed Regexps. (line 29)
+* " (double quote), in regexp constants: Computed Regexps. (line 30)
* " (double quote), in shell commands: Quoting. (line 54)
* # (number sign), #! (executable scripts): Executable Scripts.
(line 6)
@@ -31435,7 +31879,7 @@ Index
* * (asterisk), * operator, as regexp operator: Regexp Operators.
(line 89)
* * (asterisk), * operator, null strings, matching: String Functions.
- (line 536)
+ (line 537)
* * (asterisk), ** operator <1>: Precedence. (line 49)
* * (asterisk), ** operator: Arithmetic Ops. (line 81)
* * (asterisk), **= operator <1>: Precedence. (line 95)
@@ -31466,7 +31910,7 @@ Index
* --disable-lint configuration option: Additional Configuration Options.
(line 15)
* --disable-nls configuration option: Additional Configuration Options.
- (line 30)
+ (line 32)
* --dump-variables option: Options. (line 93)
* --dump-variables option, using for library functions: Library Names.
(line 45)
@@ -31494,7 +31938,7 @@ Index
* --re-interval option: Options. (line 279)
* --sandbox option: Options. (line 286)
* --sandbox option, disabling system() function: I/O Functions.
- (line 128)
+ (line 129)
* --sandbox option, input redirection with getline: Getline. (line 19)
* --sandbox option, output redirection with print, printf: Redirection.
(line 6)
@@ -31504,7 +31948,7 @@ Index
* --use-lc-numeric option: Options. (line 220)
* --version option: Options. (line 300)
* --with-whiny-user-strftime configuration option: Additional Configuration Options.
- (line 35)
+ (line 37)
* -b option: Options. (line 68)
* -C option: Options. (line 88)
* -c option: Options. (line 81)
@@ -31540,7 +31984,7 @@ Index
* -W option: Options. (line 46)
* . (period), regexp operator: Regexp Operators. (line 44)
* .gmo files: Explaining gettext. (line 42)
-* .gmo files, specifying directory of <1>: Programmer i18n. (line 47)
+* .gmo files, specifying directory of <1>: Programmer i18n. (line 48)
* .gmo files, specifying directory of: Explaining gettext. (line 54)
* .mo files, converting from .po: I18N Example. (line 64)
* .po files <1>: Translator i18n. (line 6)
@@ -31641,7 +32085,7 @@ Index
* \ (backslash), in escape sequences: Escape Sequences. (line 6)
* \ (backslash), in escape sequences, POSIX and: Escape Sequences.
(line 108)
-* \ (backslash), in regexp constants: Computed Regexps. (line 29)
+* \ (backslash), in regexp constants: Computed Regexps. (line 30)
* \ (backslash), in shell commands: Quoting. (line 48)
* \ (backslash), regexp operator: Regexp Operators. (line 18)
* ^ (caret), ^ operator: Precedence. (line 49)
@@ -31735,7 +32179,7 @@ Index
* arrays: Arrays. (line 6)
* arrays of arrays: Arrays of Arrays. (line 6)
* arrays, an example of using: Array Example. (line 6)
-* arrays, and IGNORECASE variable: Array Intro. (line 94)
+* arrays, and IGNORECASE variable: Array Intro. (line 100)
* arrays, as parameters to functions: Pass By Value/Reference.
(line 44)
* arrays, associative: Array Intro. (line 50)
@@ -31762,14 +32206,14 @@ Index
(line 6)
* arrays, sorting, and IGNORECASE variable: Array Sorting Functions.
(line 83)
-* arrays, sparse: Array Intro. (line 72)
+* arrays, sparse: Array Intro. (line 76)
* arrays, subscripts, uninitialized variables as: Uninitialized Subscripts.
(line 6)
* arrays, unassigned elements: Reference to Elements.
(line 18)
* artificial intelligence, gawk and: Distribution contents.
(line 52)
-* ASCII <1>: Glossary. (line 133)
+* ASCII <1>: Glossary. (line 197)
* ASCII: Ordinal Functions. (line 45)
* asort <1>: Array Sorting Functions.
(line 6)
@@ -31796,7 +32240,7 @@ Index
* asterisk (*), * operator, as regexp operator: Regexp Operators.
(line 89)
* asterisk (*), * operator, null strings, matching: String Functions.
- (line 536)
+ (line 537)
* asterisk (*), ** operator <1>: Precedence. (line 49)
* asterisk (*), ** operator: Arithmetic Ops. (line 81)
* asterisk (*), **= operator <1>: Precedence. (line 95)
@@ -31910,7 +32354,7 @@ Index
* backslash (\), in escape sequences: Escape Sequences. (line 6)
* backslash (\), in escape sequences, POSIX and: Escape Sequences.
(line 108)
-* backslash (\), in regexp constants: Computed Regexps. (line 29)
+* backslash (\), in regexp constants: Computed Regexps. (line 30)
* backslash (\), in shell commands: Quoting. (line 48)
* backslash (\), regexp operator: Regexp Operators. (line 18)
* backtrace debugger command: Execution Stack. (line 13)
@@ -31922,7 +32366,7 @@ Index
* BEGIN pattern, and profiling: Profiling. (line 62)
* BEGIN pattern, assert() user-defined function and: Assert Function.
(line 83)
-* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 69)
+* BEGIN pattern, Boolean patterns and: Expression Patterns. (line 70)
* BEGIN pattern, exit statement and: Exit Statement. (line 12)
* BEGIN pattern, getline and: Getline Notes. (line 19)
* BEGIN pattern, headings, adding: Print Examples. (line 43)
@@ -31939,14 +32383,14 @@ Index
* BEGIN pattern, TEXTDOMAIN variable and: Programmer i18n. (line 60)
* BEGINFILE pattern: BEGINFILE/ENDFILE. (line 6)
* BEGINFILE pattern, Boolean patterns and: Expression Patterns.
- (line 69)
-* beginfile() user-defined function: Filetrans Function. (line 61)
-* Bentley, Jon: Glossary. (line 143)
+ (line 70)
+* beginfile() user-defined function: Filetrans Function. (line 62)
+* Bentley, Jon: Glossary. (line 207)
* Benzinger, Michael: Contributors. (line 97)
* Berry, Karl <1>: Ranges and Locales. (line 74)
* Berry, Karl: Acknowledgments. (line 33)
* binary input/output: User-modified. (line 15)
-* bindtextdomain <1>: Programmer i18n. (line 47)
+* bindtextdomain <1>: Programmer i18n. (line 48)
* bindtextdomain: I18N Functions. (line 12)
* bindtextdomain() function (C library): Explaining gettext. (line 50)
* bindtextdomain() function (gawk), portability and: I18N Portability.
@@ -31965,7 +32409,7 @@ Index
* body, in actions: Statements. (line 10)
* body, in loops: While Statement. (line 14)
* Boolean expressions: Boolean Ops. (line 6)
-* Boolean expressions, as patterns: Expression Patterns. (line 38)
+* Boolean expressions, as patterns: Expression Patterns. (line 39)
* Boolean operators, See Boolean expressions: Boolean Ops. (line 6)
* Bourne shell, quoting rules for: Quoting. (line 18)
* braces ({}): Profiling. (line 142)
@@ -31999,11 +32443,11 @@ Index
* Brennan, Michael <2>: Simple Sed. (line 25)
* Brennan, Michael <3>: Delete. (line 56)
* Brennan, Michael <4>: Acknowledgments. (line 78)
-* Brennan, Michael <5>: Foreword4. (line 30)
+* Brennan, Michael <5>: Foreword4. (line 33)
* Brennan, Michael: Foreword3. (line 84)
* 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 492)
+* Brian Kernighan's awk <3>: String Functions. (line 493)
* Brian Kernighan's awk <4>: Delete. (line 51)
* Brian Kernighan's awk <5>: Nextfile Statement. (line 47)
* Brian Kernighan's awk <6>: Continue Statement. (line 44)
@@ -32023,14 +32467,14 @@ Index
* Brink, Jeroen: DOS Quoting. (line 10)
* Broder, Alan J.: Contributors. (line 88)
* Brown, Martin: Contributors. (line 82)
-* BSD-based operating systems: Glossary. (line 611)
+* BSD-based operating systems: Glossary. (line 753)
* bt debugger command (alias for backtrace): Execution Stack. (line 13)
-* Buening, Andreas <1>: Bugs. (line 70)
+* Buening, Andreas <1>: Bugs. (line 71)
* Buening, Andreas <2>: Contributors. (line 92)
* Buening, Andreas: Acknowledgments. (line 60)
* buffering, input/output <1>: Two-way I/O. (line 52)
-* buffering, input/output: I/O Functions. (line 140)
-* buffering, interactive vs. noninteractive: I/O Functions. (line 75)
+* buffering, input/output: I/O Functions. (line 141)
+* buffering, interactive vs. noninteractive: I/O Functions. (line 76)
* buffers, flushing: I/O Functions. (line 32)
* buffers, operators for: GNU Regexp Operators.
(line 48)
@@ -32038,7 +32482,7 @@ Index
* bug-gawk@gnu.org bug reporting address: Bugs. (line 30)
* built-in functions: Functions. (line 6)
* built-in functions, evaluation order: Calling Built-in. (line 30)
-* Busybox Awk: Other Versions. (line 92)
+* BusyBox Awk: Other Versions. (line 92)
* c.e., See common extensions: Conventions. (line 51)
* call by reference: Pass By Value/Reference.
(line 44)
@@ -32055,8 +32499,8 @@ Index
* case keyword: Switch Statement. (line 6)
* case sensitivity, and regexps: User-modified. (line 76)
* case sensitivity, and string comparisons: User-modified. (line 76)
-* case sensitivity, array indices and: Array Intro. (line 94)
-* case sensitivity, converting case: String Functions. (line 522)
+* case sensitivity, array indices and: Array Intro. (line 100)
+* case sensitivity, converting case: String Functions. (line 523)
* case sensitivity, example programs: Library Functions. (line 53)
* case sensitivity, gawk: Case-sensitivity. (line 26)
* case sensitivity, regexps and: Case-sensitivity. (line 6)
@@ -32065,7 +32509,7 @@ Index
(line 56)
* character lists in regular expression: Bracket Expressions. (line 6)
* character lists, See bracket expressions: Regexp Operators. (line 56)
-* character sets (machine character encodings) <1>: Glossary. (line 133)
+* character sets (machine character encodings) <1>: Glossary. (line 197)
* character sets (machine character encodings): Ordinal Functions.
(line 45)
* character sets, See Also bracket expressions: Regexp Operators.
@@ -32076,7 +32520,7 @@ Index
* Chassell, Robert J.: Acknowledgments. (line 33)
* chdir() extension function: Extension Sample File Functions.
(line 12)
-* chem utility: Glossary. (line 143)
+* chem utility: Glossary. (line 207)
* chr() extension function: Extension Sample Ord.
(line 15)
* chr() user-defined function: Ordinal Functions. (line 16)
@@ -32134,7 +32578,7 @@ Index
* common extensions, \x escape sequence: Escape Sequences. (line 61)
* common extensions, BINMODE variable: PC Using. (line 33)
* common extensions, delete to delete entire arrays: Delete. (line 39)
-* common extensions, func keyword: Definition Syntax. (line 93)
+* common extensions, func keyword: Definition Syntax. (line 98)
* common extensions, length() applied to an array: String Functions.
(line 201)
* common extensions, RS as a regexp: gawk split records. (line 6)
@@ -32153,7 +32597,7 @@ Index
* compatibility mode (gawk), octal numbers: Nondecimal-numbers.
(line 60)
* compatibility mode (gawk), specifying: Options. (line 81)
-* compiled programs <1>: Glossary. (line 157)
+* compiled programs <1>: Glossary. (line 219)
* compiled programs: Basic High Level. (line 15)
* compiling gawk for Cygwin: Cygwin. (line 6)
* compiling gawk for MS-DOS and MS-Windows: PC Compiling. (line 13)
@@ -32170,9 +32614,9 @@ Index
* configuration option, --disable-lint: Additional Configuration Options.
(line 15)
* configuration option, --disable-nls: Additional Configuration Options.
- (line 30)
+ (line 32)
* configuration option, --with-whiny-user-strftime: Additional Configuration Options.
- (line 35)
+ (line 37)
* configuration options, gawk: Additional Configuration Options.
(line 6)
* constant regexps: Regexp Usage. (line 57)
@@ -32185,9 +32629,9 @@ Index
* control statements: Statements. (line 6)
* controlling array scanning order: Controlling Scanning.
(line 14)
-* convert string to lower case: String Functions. (line 523)
-* convert string to number: String Functions. (line 390)
-* convert string to upper case: String Functions. (line 529)
+* convert string to lower case: String Functions. (line 524)
+* convert string to number: String Functions. (line 391)
+* convert string to upper case: String Functions. (line 530)
* converting integer array subscripts: Numeric Array Subscripts.
(line 31)
* converting, dates to timestamps: Time Functions. (line 76)
@@ -32199,7 +32643,7 @@ Index
* CONVFMT variable: Strings And Numbers. (line 29)
* CONVFMT variable, and array subscripts: Numeric Array Subscripts.
(line 6)
-* cookie: Glossary. (line 149)
+* cookie: Glossary. (line 258)
* coprocesses <1>: Two-way I/O. (line 25)
* coprocesses: Redirection. (line 96)
* coprocesses, closing: Close Files And Pipes.
@@ -32223,7 +32667,7 @@ Index
* cut.awk program: Cut Program. (line 45)
* d debugger command (alias for delete): Breakpoint Control. (line 64)
* d.c., See dark corner: Conventions. (line 42)
-* dark corner <1>: Glossary. (line 188)
+* dark corner <1>: Glossary. (line 269)
* dark corner: Conventions. (line 42)
* dark corner, "0" is actually true: Truth Values. (line 24)
* dark corner, /= operator vs. /=.../ regexp constant: Assignment Ops.
@@ -32243,9 +32687,9 @@ Index
(line 143)
* dark corner, exit statement: Exit Statement. (line 30)
* dark corner, field separators: Full Line Fields. (line 22)
-* dark corner, FILENAME variable <1>: Auto-set. (line 104)
+* dark corner, FILENAME variable <1>: Auto-set. (line 109)
* dark corner, FILENAME variable: Getline Notes. (line 19)
-* dark corner, FNR/NR variables: Auto-set. (line 328)
+* dark corner, FNR/NR variables: Auto-set. (line 341)
* dark corner, format-control characters: Control Letters. (line 18)
* dark corner, FS as null string: Single Character Fields.
(line 20)
@@ -32265,7 +32709,7 @@ Index
(line 148)
* dark corner, regexp constants, as arguments to user-defined functions: Using Constant Regexps.
(line 43)
-* dark corner, split() function: String Functions. (line 361)
+* dark corner, split() function: String Functions. (line 362)
* dark corner, strings, storing: gawk split records. (line 83)
* dark corner, value of ARGV[0]: Auto-set. (line 39)
* data, fixed-width: Constant Size. (line 6)
@@ -32280,11 +32724,11 @@ Index
* Davies, Stephen <1>: Contributors. (line 74)
* Davies, Stephen: Acknowledgments. (line 60)
* Day, Robert P.J.: Acknowledgments. (line 78)
-* dcgettext <1>: Programmer i18n. (line 19)
+* dcgettext <1>: Programmer i18n. (line 20)
* dcgettext: I18N Functions. (line 22)
* dcgettext() function (gawk), portability and: I18N Portability.
(line 33)
-* dcngettext <1>: Programmer i18n. (line 36)
+* dcngettext <1>: Programmer i18n. (line 37)
* dcngettext: I18N Functions. (line 28)
* dcngettext() function (gawk), portability and: I18N Portability.
(line 33)
@@ -32371,7 +32815,7 @@ Index
* debugger commands, t (tbreak): Breakpoint Control. (line 90)
* debugger commands, tbreak: Breakpoint Control. (line 90)
* debugger commands, trace: Miscellaneous Debugger Commands.
- (line 108)
+ (line 107)
* debugger commands, u (until): Debugger Execution Control.
(line 83)
* debugger commands, undisplay: Viewing And Changing Data.
@@ -32387,18 +32831,18 @@ Index
(line 67)
* debugger commands, where (backtrace): Execution Stack. (line 13)
* debugger default list amount: Debugger Info. (line 69)
-* debugger history file: Debugger Info. (line 80)
+* debugger history file: Debugger Info. (line 81)
* debugger history size: Debugger Info. (line 65)
* debugger options: Debugger Info. (line 57)
-* debugger prompt: Debugger Info. (line 77)
+* debugger prompt: Debugger Info. (line 78)
* debugger, how to start: Debugger Invocation. (line 6)
-* debugger, read commands from a file: Debugger Info. (line 96)
+* debugger, read commands from a file: Debugger Info. (line 97)
* debugging awk programs: Debugger. (line 6)
* debugging gawk, bug reports: Bugs. (line 9)
* decimal point character, locale specific: Options. (line 270)
* decrement operators: Increment Ops. (line 35)
* default keyword: Switch Statement. (line 6)
-* Deifik, Scott <1>: Bugs. (line 70)
+* Deifik, Scott <1>: Bugs. (line 71)
* Deifik, Scott <2>: Contributors. (line 53)
* Deifik, Scott: Acknowledgments. (line 60)
* delete ARRAY: Delete. (line 39)
@@ -32439,7 +32883,7 @@ Index
* differences in awk and gawk, FIELDWIDTHS variable: User-modified.
(line 37)
* differences in awk and gawk, FPAT variable: User-modified. (line 43)
-* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 130)
+* differences in awk and gawk, FUNCTAB variable: Auto-set. (line 135)
* differences in awk and gawk, function arguments (gawk): Calling Built-in.
(line 16)
* differences in awk and gawk, getline command: Getline. (line 19)
@@ -32457,12 +32901,12 @@ Index
(line 6)
* differences in awk and gawk, line continuations: Conditional Exp.
(line 34)
-* differences in awk and gawk, LINT variable: User-modified. (line 88)
+* differences in awk and gawk, LINT variable: User-modified. (line 87)
* differences in awk and gawk, match() function: String Functions.
(line 263)
* differences in awk and gawk, print/printf statements: Format Modifiers.
(line 13)
-* differences in awk and gawk, PROCINFO array: Auto-set. (line 144)
+* differences in awk and gawk, PROCINFO array: Auto-set. (line 149)
* differences in awk and gawk, read timeouts: Read Timeout. (line 6)
* differences in awk and gawk, record separators: awk split records.
(line 125)
@@ -32470,9 +32914,11 @@ Index
(line 43)
* differences in awk and gawk, regular expressions: Case-sensitivity.
(line 26)
+* differences in awk and gawk, retrying input: Retrying Input.
+ (line 6)
* differences in awk and gawk, RS/RT variables: gawk split records.
(line 58)
-* differences in awk and gawk, RT variable: Auto-set. (line 279)
+* differences in awk and gawk, RT variable: Auto-set. (line 292)
* differences in awk and gawk, single-character fields: Single Character Fields.
(line 6)
* differences in awk and gawk, split() function: String Functions.
@@ -32480,7 +32926,7 @@ Index
* differences in awk and gawk, strings: Scalar Constants. (line 20)
* differences in awk and gawk, strings, storing: gawk split records.
(line 77)
-* differences in awk and gawk, SYMTAB variable: Auto-set. (line 283)
+* differences in awk and gawk, SYMTAB variable: Auto-set. (line 296)
* differences in awk and gawk, TEXTDOMAIN variable: User-modified.
(line 151)
* differences in awk and gawk, trunc-mod operation: Arithmetic Ops.
@@ -32496,7 +32942,6 @@ Index
* display debugger command: Viewing And Changing Data.
(line 8)
* display debugger options: Debugger Info. (line 57)
-* div: Numeric Functions. (line 18)
* division: Arithmetic Ops. (line 44)
* do-while statement: Do Statement. (line 6)
* do-while statement, use of regexps in: Regexp Usage. (line 19)
@@ -32508,7 +32953,7 @@ Index
* dollar sign ($), incrementing fields and arrays: Increment Ops.
(line 30)
* dollar sign ($), regexp operator: Regexp Operators. (line 35)
-* double quote ("), in regexp constants: Computed Regexps. (line 29)
+* double quote ("), in regexp constants: Computed Regexps. (line 30)
* double quote ("), in shell commands: Quoting. (line 54)
* down debugger command: Execution Stack. (line 23)
* Drepper, Ulrich: Acknowledgments. (line 52)
@@ -32521,8 +32966,8 @@ Index
* dynamically loaded extensions: Dynamic Extensions. (line 6)
* e debugger command (alias for enable): Breakpoint Control. (line 73)
* EBCDIC: Ordinal Functions. (line 45)
-* effective group ID of gawk user: Auto-set. (line 149)
-* effective user ID of gawk user: Auto-set. (line 153)
+* effective group ID of gawk user: Auto-set. (line 154)
+* effective user ID of gawk user: Auto-set. (line 162)
* egrep utility <1>: Egrep Program. (line 6)
* egrep utility: Bracket Expressions. (line 26)
* egrep.awk program: Egrep Program. (line 54)
@@ -32550,7 +32995,7 @@ Index
* END pattern, and profiling: Profiling. (line 62)
* END pattern, assert() user-defined function and: Assert Function.
(line 75)
-* END pattern, Boolean patterns and: Expression Patterns. (line 69)
+* END pattern, Boolean patterns and: Expression Patterns. (line 70)
* END pattern, exit statement and: Exit Statement. (line 12)
* END pattern, next/nextfile statements and <1>: Next Statement.
(line 44)
@@ -32559,10 +33004,10 @@ Index
* END pattern, operators and: Using BEGIN/END. (line 17)
* END pattern, print statement and: I/O And BEGIN/END. (line 16)
* ENDFILE pattern: BEGINFILE/ENDFILE. (line 6)
-* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 69)
-* endfile() user-defined function: Filetrans Function. (line 61)
-* endgrent() function (C library): Group Functions. (line 211)
-* endgrent() user-defined function: Group Functions. (line 214)
+* ENDFILE pattern, Boolean patterns and: Expression Patterns. (line 70)
+* endfile() user-defined function: Filetrans Function. (line 62)
+* endgrent() function (C library): Group Functions. (line 212)
+* endgrent() user-defined function: Group Functions. (line 215)
* endpwent() function (C library): Passwd Functions. (line 207)
* endpwent() user-defined function: Passwd Functions. (line 210)
* English, Steve: Advanced Features. (line 6)
@@ -32570,7 +33015,7 @@ Index
* environment variables used by gawk: Environment Variables.
(line 6)
* environment variables, in ENVIRON array: Auto-set. (line 60)
-* epoch, definition of: Glossary. (line 234)
+* epoch, definition of: Glossary. (line 315)
* equals sign (=), = operator: Assignment Ops. (line 6)
* equals sign (=), == operator <1>: Precedence. (line 65)
* equals sign (=), == operator: Comparison Operators.
@@ -32616,10 +33061,10 @@ Index
* exit status, of VMS: VMS Running. (line 28)
* exit the debugger: Miscellaneous Debugger Commands.
(line 99)
-* exp: Numeric Functions. (line 33)
-* expand utility: Very Simple. (line 72)
-* Expat XML parser library: gawkextlib. (line 33)
-* exponent: Numeric Functions. (line 33)
+* exp: Numeric Functions. (line 18)
+* expand utility: Very Simple. (line 73)
+* Expat XML parser library: gawkextlib. (line 37)
+* exponent: Numeric Functions. (line 18)
* expressions: Expressions. (line 6)
* expressions, as patterns: Expression Patterns. (line 6)
* expressions, assignment: Assignment Ops. (line 6)
@@ -32637,7 +33082,7 @@ Index
(line 6)
* extension API version: Extension Versioning.
(line 6)
-* extension API, version number: Auto-set. (line 246)
+* extension API, version number: Auto-set. (line 255)
* extension example: Extension Example. (line 6)
* extension registration: Registration Functions.
(line 6)
@@ -32656,7 +33101,7 @@ Index
* extensions, common, BINMODE variable: PC Using. (line 33)
* extensions, common, delete to delete entire arrays: Delete. (line 39)
* extensions, common, fflush() function: I/O Functions. (line 43)
-* extensions, common, func keyword: Definition Syntax. (line 93)
+* extensions, common, func keyword: Definition Syntax. (line 98)
* extensions, common, length() applied to an array: String Functions.
(line 201)
* extensions, common, RS as a regexp: gawk split records. (line 6)
@@ -32718,12 +33163,12 @@ Index
* file names, distinguishing: Auto-set. (line 56)
* file names, in compatibility mode: Special Caveats. (line 9)
* file names, standard streams in gawk: Special FD. (line 48)
-* FILENAME variable <1>: Auto-set. (line 104)
+* FILENAME variable <1>: Auto-set. (line 109)
* FILENAME variable: Reading Files. (line 6)
* FILENAME variable, getline, setting with: Getline Notes. (line 19)
* filenames, assignments as: Ignoring Assigns. (line 6)
* files, .gmo: Explaining gettext. (line 42)
-* files, .gmo, specifying directory of <1>: Programmer i18n. (line 47)
+* files, .gmo, specifying directory of <1>: Programmer i18n. (line 48)
* files, .gmo, specifying directory of: Explaining gettext. (line 54)
* files, .mo, converting from .po: I18N Example. (line 64)
* files, .po <1>: Translator i18n. (line 6)
@@ -32750,7 +33195,7 @@ Index
* files, message object, converting from portable object files: I18N Example.
(line 64)
* files, message object, specifying directory of <1>: Programmer i18n.
- (line 47)
+ (line 48)
* files, message object, specifying directory of: Explaining gettext.
(line 54)
* files, multiple passes over: Other Arguments. (line 56)
@@ -32786,9 +33231,9 @@ Index
* flush buffered output: I/O Functions. (line 28)
* fnmatch() extension function: Extension Sample Fnmatch.
(line 12)
-* FNR variable <1>: Auto-set. (line 114)
+* FNR variable <1>: Auto-set. (line 119)
* FNR variable: Records. (line 6)
-* FNR variable, changing: Auto-set. (line 328)
+* FNR variable, changing: Auto-set. (line 341)
* for statement: For Statement. (line 6)
* for statement, looping over arrays: Scanning an Array. (line 20)
* fork() extension function: Extension Sample Fork.
@@ -32802,7 +33247,7 @@ Index
* format time string: Time Functions. (line 48)
* formats, numeric output: OFMT. (line 6)
* formatting output: Printf. (line 6)
-* formatting strings: String Functions. (line 383)
+* formatting strings: String Functions. (line 384)
* forward slash (/) to enclose regular expressions: Regexp. (line 10)
* forward slash (/), / operator: Precedence. (line 55)
* forward slash (/), /= operator <1>: Precedence. (line 95)
@@ -32816,10 +33261,10 @@ Index
* frame debugger command: Execution Stack. (line 27)
* Free Documentation License (FDL): GNU Free Documentation License.
(line 7)
-* Free Software Foundation (FSF) <1>: Glossary. (line 296)
+* Free Software Foundation (FSF) <1>: Glossary. (line 375)
* Free Software Foundation (FSF) <2>: Getting. (line 10)
* Free Software Foundation (FSF): Manual History. (line 6)
-* FreeBSD: Glossary. (line 611)
+* FreeBSD: Glossary. (line 753)
* FS variable <1>: User-modified. (line 50)
* FS variable: Field Separators. (line 15)
* FS variable, --field-separator option and: Options. (line 21)
@@ -32833,12 +33278,12 @@ Index
* FS, containing ^: Regexp Field Splitting.
(line 59)
* FS, in multiline records: Multiple Line. (line 41)
-* FSF (Free Software Foundation) <1>: Glossary. (line 296)
+* FSF (Free Software Foundation) <1>: Glossary. (line 375)
* FSF (Free Software Foundation) <2>: Getting. (line 10)
* FSF (Free Software Foundation): Manual History. (line 6)
* fts() extension function: Extension Sample File Functions.
(line 61)
-* FUNCTAB array: Auto-set. (line 130)
+* FUNCTAB array: Auto-set. (line 135)
* function calls: Function Calls. (line 6)
* function calls, indirect: Indirect Calls. (line 6)
* function calls, indirect, @-notation for: Indirect Calls. (line 47)
@@ -32873,7 +33318,7 @@ Index
* functions, library, user database, reading: Passwd Functions.
(line 6)
* functions, names of: Definition Syntax. (line 23)
-* functions, recursive: Definition Syntax. (line 83)
+* functions, recursive: Definition Syntax. (line 88)
* functions, string-translation: I18N Functions. (line 6)
* functions, undefined: Pass By Value/Reference.
(line 68)
@@ -32888,13 +33333,13 @@ Index
* G-d: Acknowledgments. (line 94)
* Garfinkle, Scott: Contributors. (line 34)
* gawk program, dynamic profiling: Profiling. (line 178)
-* gawk version: Auto-set. (line 221)
+* gawk version: Auto-set. (line 230)
* gawk, ARGIND variable in: Other Arguments. (line 15)
* gawk, awk and <1>: This Manual. (line 14)
* gawk, awk and: Preface. (line 21)
* gawk, bitwise operations in: Bitwise Functions. (line 40)
* gawk, break statement in: Break Statement. (line 51)
-* gawk, character classes and: Bracket Expressions. (line 100)
+* gawk, character classes and: Bracket Expressions. (line 101)
* gawk, coding style in: Adding Code. (line 38)
* gawk, command-line options, and regular expressions: GNU Regexp Operators.
(line 70)
@@ -32923,13 +33368,13 @@ Index
* gawk, FPAT variable in <1>: User-modified. (line 43)
* gawk, FPAT variable in: Splitting By Content.
(line 25)
-* gawk, FUNCTAB array in: Auto-set. (line 130)
+* gawk, FUNCTAB array in: Auto-set. (line 135)
* gawk, function arguments and: Calling Built-in. (line 16)
* gawk, hexadecimal numbers and: Nondecimal-numbers. (line 42)
* gawk, IGNORECASE variable in <1>: Array Sorting Functions.
(line 83)
* gawk, IGNORECASE variable in <2>: String Functions. (line 58)
-* gawk, IGNORECASE variable in <3>: Array Intro. (line 94)
+* gawk, IGNORECASE variable in <3>: Array Intro. (line 100)
* gawk, IGNORECASE variable in <4>: User-modified. (line 76)
* gawk, IGNORECASE variable in: Case-sensitivity. (line 26)
* gawk, implementation issues: Notes. (line 6)
@@ -32945,7 +33390,7 @@ Index
(line 6)
* gawk, interval expressions and: Regexp Operators. (line 139)
* gawk, line continuation in: Conditional Exp. (line 34)
-* gawk, LINT variable in: User-modified. (line 88)
+* gawk, LINT variable in: User-modified. (line 87)
* gawk, list of contributors to: Contributors. (line 6)
* gawk, MS-DOS version of: PC Using. (line 10)
* gawk, MS-Windows version of: PC Using. (line 10)
@@ -32955,7 +33400,7 @@ Index
* gawk, predefined variables and: Built-in Variables. (line 14)
* gawk, PROCINFO array in <1>: Two-way I/O. (line 99)
* gawk, PROCINFO array in <2>: Time Functions. (line 47)
-* gawk, PROCINFO array in: Auto-set. (line 144)
+* gawk, PROCINFO array in: Auto-set. (line 149)
* gawk, regexp constants and: Using Constant Regexps.
(line 28)
* gawk, regular expressions, case sensitivity: Case-sensitivity.
@@ -32963,14 +33408,14 @@ Index
* gawk, regular expressions, operators: GNU Regexp Operators.
(line 6)
* gawk, regular expressions, precedence: Regexp Operators. (line 161)
-* gawk, RT variable in <1>: Auto-set. (line 279)
+* gawk, RT variable in <1>: Auto-set. (line 292)
* gawk, RT variable in <2>: Multiple Line. (line 129)
* gawk, RT variable in: awk split records. (line 125)
* gawk, See Also awk: Preface. (line 34)
* gawk, source code, obtaining: Getting. (line 6)
* gawk, splitting fields and: Constant Size. (line 87)
* gawk, string-translation functions: I18N Functions. (line 6)
-* gawk, SYMTAB array in: Auto-set. (line 283)
+* gawk, SYMTAB array in: Auto-set. (line 296)
* gawk, TEXTDOMAIN variable in: User-modified. (line 151)
* gawk, timestamps: Time Functions. (line 6)
* gawk, uses for: Preface. (line 34)
@@ -32986,7 +33431,7 @@ Index
* gawkpath_append shell function: Shell Startup Files. (line 19)
* gawkpath_default shell function: Shell Startup Files. (line 12)
* gawkpath_prepend shell function: Shell Startup Files. (line 15)
-* General Public License (GPL): Glossary. (line 305)
+* General Public License (GPL): Glossary. (line 399)
* General Public License, See GPL: Manual History. (line 11)
* generate time values: Time Functions. (line 25)
* gensub <1>: String Functions. (line 90)
@@ -32996,12 +33441,12 @@ Index
* getaddrinfo() function (C library): TCP/IP Networking. (line 38)
* getgrent() function (C library): Group Functions. (line 6)
* getgrent() user-defined function: Group Functions. (line 6)
-* getgrgid() function (C library): Group Functions. (line 182)
-* getgrgid() user-defined function: Group Functions. (line 185)
-* getgrnam() function (C library): Group Functions. (line 171)
-* getgrnam() user-defined function: Group Functions. (line 176)
-* getgruser() function (C library): Group Functions. (line 191)
-* getgruser() function, user-defined: Group Functions. (line 194)
+* getgrgid() function (C library): Group Functions. (line 183)
+* getgrgid() user-defined function: Group Functions. (line 186)
+* getgrnam() function (C library): Group Functions. (line 172)
+* getgrnam() user-defined function: Group Functions. (line 177)
+* getgruser() function (C library): Group Functions. (line 192)
+* getgruser() function, user-defined: Group Functions. (line 195)
* getline command: Reading Files. (line 20)
* getline command, _gr_init() user-defined function: Group Functions.
(line 83)
@@ -33018,7 +33463,7 @@ Index
* getline from a file: Getline/File. (line 6)
* getline into a variable: Getline/Variable. (line 6)
* getline statement, BEGINFILE/ENDFILE patterns and: BEGINFILE/ENDFILE.
- (line 54)
+ (line 53)
* getlocaltime() user-defined function: Getlocaltime Function.
(line 16)
* getopt() function (C library): Getopt Function. (line 15)
@@ -33038,36 +33483,36 @@ Index
* git utility <2>: Accessing The Source.
(line 10)
* git utility <3>: Other Versions. (line 29)
-* git utility: gawkextlib. (line 27)
+* git utility: gawkextlib. (line 31)
* Git, use of for gawk source code: Derived Files. (line 6)
* GNITS mailing list: Acknowledgments. (line 52)
* GNU awk, See gawk: Preface. (line 51)
* GNU Free Documentation License: GNU Free Documentation License.
(line 7)
-* GNU General Public License: Glossary. (line 305)
-* GNU Lesser General Public License: Glossary. (line 396)
+* GNU General Public License: Glossary. (line 399)
+* GNU Lesser General Public License: Glossary. (line 496)
* GNU long options <1>: Options. (line 6)
* GNU long options: Command Line. (line 13)
* GNU long options, printing list of: Options. (line 154)
-* GNU Project <1>: Glossary. (line 314)
+* GNU Project <1>: Glossary. (line 408)
* GNU Project: Manual History. (line 11)
-* GNU/Linux <1>: Glossary. (line 611)
+* GNU/Linux <1>: Glossary. (line 753)
* GNU/Linux <2>: I18N Example. (line 55)
* GNU/Linux: Manual History. (line 28)
* Gordon, Assaf: Contributors. (line 105)
-* GPL (General Public License) <1>: Glossary. (line 305)
+* GPL (General Public License) <1>: Glossary. (line 399)
* GPL (General Public License): Manual History. (line 11)
* GPL (General Public License), printing: Options. (line 88)
* grcat program: Group Functions. (line 16)
* Grigera, Juan: Contributors. (line 57)
* group database, reading: Group Functions. (line 6)
* group file: Group Functions. (line 6)
-* group ID of gawk user: Auto-set. (line 194)
+* group ID of gawk user: Auto-set. (line 203)
* groups, information about: Group Functions. (line 6)
* gsub <1>: String Functions. (line 140)
* gsub: Using Constant Regexps.
(line 43)
-* gsub() function, arguments of: String Functions. (line 462)
+* gsub() function, arguments of: String Functions. (line 463)
* gsub() function, escape processing: Gory Details. (line 6)
* h debugger command (alias for help): Miscellaneous Debugger Commands.
(line 66)
@@ -33094,7 +33539,7 @@ Index
* hyphen (-), in bracket expressions: Bracket Expressions. (line 17)
* i debugger command (alias for info): Debugger Info. (line 13)
* id utility: Id Program. (line 6)
-* id.awk program: Id Program. (line 30)
+* id.awk program: Id Program. (line 31)
* if statement: If Statement. (line 6)
* if statement, actions, changing: Ranges. (line 25)
* if statement, use of regexps in: Regexp Usage. (line 19)
@@ -33102,7 +33547,7 @@ Index
* ignore breakpoint: Breakpoint Control. (line 87)
* ignore debugger command: Breakpoint Control. (line 87)
* IGNORECASE variable: User-modified. (line 76)
-* IGNORECASE variable, and array indices: Array Intro. (line 94)
+* IGNORECASE variable, and array indices: Array Intro. (line 100)
* IGNORECASE variable, and array sorting functions: Array Sorting Functions.
(line 83)
* IGNORECASE variable, in example programs: Library Functions.
@@ -33162,45 +33607,46 @@ Index
* insomnia, cure for: Alarm Program. (line 6)
* installation, VMS: VMS Installation. (line 6)
* installing gawk: Installation. (line 6)
-* instruction tracing, in debugger: Debugger Info. (line 89)
-* int: Numeric Functions. (line 38)
+* instruction tracing, in debugger: Debugger Info. (line 90)
+* int: Numeric Functions. (line 23)
* INT signal (MS-Windows): Profiling. (line 213)
+* intdiv: Numeric Functions. (line 28)
* integer array indices: Numeric Array Subscripts.
(line 31)
* integers, arbitrary precision: Arbitrary Precision Integers.
(line 6)
* integers, unsigned: Computer Arithmetic. (line 41)
-* interacting with other programs: I/O Functions. (line 106)
+* interacting with other programs: I/O Functions. (line 107)
* internationalization <1>: I18N and L10N. (line 6)
* internationalization: I18N Functions. (line 6)
* internationalization, localization <1>: Internationalization.
(line 13)
* internationalization, localization: User-modified. (line 151)
* internationalization, localization, character classes: Bracket Expressions.
- (line 100)
+ (line 101)
* internationalization, localization, gawk and: Internationalization.
(line 13)
* internationalization, localization, locale categories: Explaining gettext.
(line 81)
* internationalization, localization, marked strings: Programmer i18n.
- (line 14)
+ (line 13)
* internationalization, localization, portability and: I18N Portability.
(line 6)
* internationalizing a program: Explaining gettext. (line 6)
-* interpreted programs <1>: Glossary. (line 356)
+* interpreted programs <1>: Glossary. (line 450)
* interpreted programs: Basic High Level. (line 15)
* interval expressions, regexp operator: Regexp Operators. (line 116)
* inventory-shipped file: Sample Data Files. (line 32)
-* invoke shell command: I/O Functions. (line 106)
+* invoke shell command: I/O Functions. (line 107)
* isarray: Type Functions. (line 11)
-* ISO: Glossary. (line 367)
-* ISO 8859-1: Glossary. (line 133)
-* ISO Latin-1: Glossary. (line 133)
+* ISO: Glossary. (line 461)
+* ISO 8859-1: Glossary. (line 197)
+* ISO Latin-1: Glossary. (line 197)
* Jacobs, Andrew: Passwd Functions. (line 90)
* Jaegermann, Michal <1>: Contributors. (line 45)
* Jaegermann, Michal: Acknowledgments. (line 60)
* Java implementation of awk: Other Versions. (line 117)
-* Java programming language: Glossary. (line 379)
+* Java programming language: Glossary. (line 473)
* jawk: Other Versions. (line 117)
* Jedi knights: Undocumented. (line 6)
* Johansen, Chris: Signature Program. (line 25)
@@ -33209,7 +33655,7 @@ Index
* Kahrs, Ju"rgen: Acknowledgments. (line 60)
* Kasal, Stepan: Acknowledgments. (line 60)
* Kenobi, Obi-Wan: Undocumented. (line 6)
-* Kernighan, Brian <1>: Glossary. (line 143)
+* Kernighan, Brian <1>: Glossary. (line 207)
* Kernighan, Brian <2>: Basic Data Typing. (line 54)
* Kernighan, Brian <3>: Other Versions. (line 13)
* Kernighan, Brian <4>: Contributors. (line 11)
@@ -33250,8 +33696,8 @@ Index
* length: String Functions. (line 171)
* length of input record: String Functions. (line 178)
* length of string: String Functions. (line 171)
-* Lesser General Public License (LGPL): Glossary. (line 396)
-* LGPL (Lesser General Public License): Glossary. (line 396)
+* Lesser General Public License (LGPL): Glossary. (line 496)
+* LGPL (Lesser General Public License): Glossary. (line 496)
* libmawk: Other Versions. (line 125)
* libraries of awk functions: Library Functions. (line 6)
* libraries of awk functions, assertions: Assert Function. (line 6)
@@ -33285,7 +33731,7 @@ Index
* lines, duplicate, removing: History Sorting. (line 6)
* lines, matching ranges of: Ranges. (line 6)
* lines, skipping between markers: Ranges. (line 43)
-* lint checking: User-modified. (line 88)
+* lint checking: User-modified. (line 87)
* lint checking, array elements: Delete. (line 34)
* lint checking, array subscripts: Uninitialized Subscripts.
(line 43)
@@ -33295,8 +33741,8 @@ Index
(line 339)
* lint checking, undefined functions: Pass By Value/Reference.
(line 85)
-* LINT variable: User-modified. (line 88)
-* Linux <1>: Glossary. (line 611)
+* LINT variable: User-modified. (line 87)
+* Linux <1>: Glossary. (line 753)
* Linux <2>: I18N Example. (line 55)
* Linux: Manual History. (line 28)
* list all global variables, in debugger: Debugger Info. (line 48)
@@ -33336,7 +33782,7 @@ Index
* mail-list file: Sample Data Files. (line 6)
* mailing labels, printing: Labels Program. (line 6)
* mailing list, GNITS: Acknowledgments. (line 52)
-* Malmberg, John <1>: Bugs. (line 70)
+* Malmberg, John <1>: Bugs. (line 71)
* Malmberg, John: Acknowledgments. (line 60)
* Malmberg, John E.: Contributors. (line 137)
* mark parity: Ordinal Functions. (line 45)
@@ -33351,26 +33797,26 @@ Index
* matching, expressions, See comparison expressions: Typing and Comparison.
(line 9)
* matching, leftmost longest: Multiple Line. (line 26)
-* matching, null strings: String Functions. (line 536)
+* matching, null strings: String Functions. (line 537)
* mawk utility <1>: Other Versions. (line 48)
* mawk utility <2>: Nextfile Statement. (line 47)
* mawk utility <3>: Concatenation. (line 36)
* mawk utility <4>: Getline/Pipe. (line 62)
* mawk utility: Escape Sequences. (line 120)
-* maximum precision supported by MPFR library: Auto-set. (line 235)
-* McIlroy, Doug: Glossary. (line 149)
+* maximum precision supported by MPFR library: Auto-set. (line 244)
+* McIlroy, Doug: Glossary. (line 258)
* McPhee, Patrick: Contributors. (line 100)
* message object files: Explaining gettext. (line 42)
* message object files, converting from portable object files: I18N Example.
(line 64)
* message object files, specifying directory of <1>: Programmer i18n.
- (line 47)
+ (line 48)
* message object files, specifying directory of: Explaining gettext.
(line 54)
* messages from extensions: Printing Messages. (line 6)
* metacharacters in regular expressions: Regexp Operators. (line 6)
* metacharacters, escape sequences for: Escape Sequences. (line 139)
-* minimum precision supported by MPFR library: Auto-set. (line 238)
+* minimum precision required by MPFR library: Auto-set. (line 247)
* mktime: Time Functions. (line 25)
* modifiers, in format specifiers: Format Modifiers. (line 6)
* monetary information, localization: Explaining gettext. (line 104)
@@ -33386,7 +33832,7 @@ Index
* names, functions: Definition Syntax. (line 23)
* namespace issues: Library Names. (line 6)
* namespace issues, functions: Definition Syntax. (line 23)
-* NetBSD: Glossary. (line 611)
+* NetBSD: Glossary. (line 753)
* networks, programming: TCP/IP Networking. (line 6)
* networks, support for: Special Network. (line 6)
* newlines <1>: Boolean Ops. (line 69)
@@ -33395,8 +33841,8 @@ Index
* newlines, as field separators: Default Field Splitting.
(line 6)
* newlines, as record separators: awk split records. (line 12)
-* newlines, in dynamic regexps: Computed Regexps. (line 59)
-* newlines, in regexp constants: Computed Regexps. (line 69)
+* newlines, in dynamic regexps: Computed Regexps. (line 60)
+* newlines, in regexp constants: Computed Regexps. (line 70)
* newlines, printing: Print Examples. (line 12)
* newlines, separating statements in actions <1>: Statements. (line 10)
* newlines, separating statements in actions: Action Overview.
@@ -33419,7 +33865,7 @@ Index
(line 47)
* nexti debugger command: Debugger Execution Control.
(line 49)
-* NF variable <1>: Auto-set. (line 119)
+* NF variable <1>: Auto-set. (line 124)
* NF variable: Fields. (line 33)
* NF variable, decrementing: Changing Fields. (line 107)
* ni debugger command (alias for nexti): Debugger Execution Control.
@@ -33428,9 +33874,9 @@ Index
* non-existent array elements: Reference to Elements.
(line 23)
* not Boolean-logic operator: Boolean Ops. (line 6)
-* NR variable <1>: Auto-set. (line 139)
+* NR variable <1>: Auto-set. (line 144)
* NR variable: Records. (line 6)
-* NR variable, changing: Auto-set. (line 328)
+* NR variable, changing: Auto-set. (line 341)
* null strings <1>: Basic Data Typing. (line 26)
* null strings <2>: Truth Values. (line 6)
* null strings <3>: Regexp Field Splitting.
@@ -33442,7 +33888,7 @@ Index
(line 43)
* null strings, converting numbers to strings: Strings And Numbers.
(line 21)
-* null strings, matching: String Functions. (line 536)
+* null strings, matching: String Functions. (line 537)
* number as string of bits: Bitwise Functions. (line 110)
* number of array elements: String Functions. (line 201)
* number sign (#), #! (executable scripts): Executable Scripts.
@@ -33467,14 +33913,14 @@ Index
* obsolete features: Obsolete. (line 6)
* octal numbers: Nondecimal-numbers. (line 6)
* octal values, enabling interpretation of: Options. (line 211)
-* OFMT variable <1>: User-modified. (line 105)
+* OFMT variable <1>: User-modified. (line 104)
* OFMT variable <2>: Strings And Numbers. (line 57)
* OFMT variable: OFMT. (line 15)
* OFMT variable, POSIX awk and: OFMT. (line 27)
* OFS variable <1>: User-modified. (line 113)
* OFS variable <2>: Output Separators. (line 6)
* OFS variable: Changing Fields. (line 64)
-* OpenBSD: Glossary. (line 611)
+* OpenBSD: Glossary. (line 753)
* OpenSolaris: Other Versions. (line 100)
* operating systems, BSD-based: Manual History. (line 28)
* operating systems, PC, gawk on: PC Using. (line 6)
@@ -33544,7 +33990,7 @@ Index
* p debugger command (alias for print): Viewing And Changing Data.
(line 36)
* Papadopoulos, Panos: Contributors. (line 128)
-* parent process ID of gawk process: Auto-set. (line 203)
+* parent process ID of gawk process: Auto-set. (line 212)
* parentheses (), in a profile: Profiling. (line 146)
* parentheses (), regexp operator: Regexp Operators. (line 81)
* password file: Passwd Functions. (line 16)
@@ -33575,7 +34021,7 @@ Index
(line 6)
* pipe, input: Getline/Pipe. (line 9)
* pipe, output: Redirection. (line 57)
-* Pitts, Dave <1>: Bugs. (line 70)
+* Pitts, Dave <1>: Bugs. (line 71)
* Pitts, Dave: Acknowledgments. (line 60)
* Plauger, P.J.: Library Functions. (line 12)
* plug-in: Extension Intro. (line 6)
@@ -33600,7 +34046,7 @@ Index
(line 65)
* portability, deleting array elements: Delete. (line 56)
* portability, example programs: Library Functions. (line 42)
-* portability, functions, defining: Definition Syntax. (line 109)
+* portability, functions, defining: Definition Syntax. (line 114)
* portability, gawk: New Ports. (line 6)
* portability, gettext library and: Explaining gettext. (line 11)
* portability, internationalization and: I18N Portability. (line 6)
@@ -33612,7 +34058,7 @@ Index
* portability, operators: Increment Ops. (line 60)
* portability, operators, not in POSIX awk: Precedence. (line 98)
* portability, POSIXLY_CORRECT environment variable: Options. (line 359)
-* portability, substr() function: String Functions. (line 512)
+* portability, substr() function: String Functions. (line 513)
* portable object files <1>: Translator i18n. (line 6)
* portable object files: Explaining gettext. (line 37)
* portable object files, converting to message object files: I18N Example.
@@ -33645,7 +34091,7 @@ Index
* POSIX awk, field separators and <1>: Full Line Fields. (line 16)
* POSIX awk, field separators and: Fields. (line 6)
* POSIX awk, FS variable and: User-modified. (line 60)
-* POSIX awk, function keyword in: Definition Syntax. (line 93)
+* POSIX awk, function keyword in: Definition Syntax. (line 98)
* POSIX awk, functions and, gsub()/sub(): Gory Details. (line 90)
* POSIX awk, functions and, length(): String Functions. (line 180)
* POSIX awk, GNU long options and: Options. (line 15)
@@ -33710,24 +34156,24 @@ Index
* printing, unduplicated lines of text: Uniq Program. (line 6)
* printing, user information: Id Program. (line 6)
* private variables: Library Names. (line 11)
-* process group idIDof gawk process: Auto-set. (line 197)
-* process ID of gawk process: Auto-set. (line 200)
+* process group ID of gawk process: Auto-set. (line 206)
+* process ID of gawk process: Auto-set. (line 209)
* processes, two-way communications with: Two-way I/O. (line 6)
* processing data: Basic High Level. (line 6)
* PROCINFO array <1>: Passwd Functions. (line 6)
* PROCINFO array <2>: Time Functions. (line 47)
-* PROCINFO array: Auto-set. (line 144)
+* PROCINFO array: Auto-set. (line 149)
* PROCINFO array, and communications via ptys: Two-way I/O. (line 99)
* PROCINFO array, and group membership: Group Functions. (line 6)
* PROCINFO array, and user and group ID numbers: Id Program. (line 15)
* PROCINFO array, testing the field splitting: Passwd Functions.
(line 154)
-* PROCINFO array, uses: Auto-set. (line 256)
+* PROCINFO array, uses: Auto-set. (line 265)
* PROCINFO, values of sorted_in: Controlling Scanning.
(line 26)
* profiling awk programs: Profiling. (line 6)
* profiling awk programs, dynamically: Profiling. (line 178)
-* program identifiers: Auto-set. (line 162)
+* program identifiers: Auto-set. (line 171)
* program, definition of: Getting Started. (line 21)
* programming conventions, --non-decimal-data option: Nondecimal Data.
(line 35)
@@ -33738,7 +34184,7 @@ Index
* programming conventions, functions, calling: Calling Built-in.
(line 10)
* programming conventions, functions, writing: Definition Syntax.
- (line 65)
+ (line 70)
* programming conventions, gawk extensions: Internal File Ops.
(line 45)
* programming conventions, private variable names: Library Names.
@@ -33747,13 +34193,13 @@ Index
* programming languages, Ada: Glossary. (line 11)
* programming languages, data-driven vs. procedural: Getting Started.
(line 12)
-* programming languages, Java: Glossary. (line 379)
+* programming languages, Java: Glossary. (line 473)
* programming, basic steps: Basic High Level. (line 20)
* programming, concepts: Basic Concepts. (line 6)
* pwcat program: Passwd Functions. (line 23)
* q debugger command (alias for quit): Miscellaneous Debugger Commands.
(line 99)
-* QSE Awk: Other Versions. (line 135)
+* QSE awk: Other Versions. (line 135)
* Quanstrom, Erik: Alarm Program. (line 8)
* question mark (?), ?: operator: Precedence. (line 92)
* question mark (?), regexp operator <1>: GNU Regexp Operators.
@@ -33807,8 +34253,8 @@ Index
* records, splitting input into: Records. (line 6)
* records, terminating: awk split records. (line 125)
* records, treating files as: gawk split records. (line 93)
-* recursive functions: Definition Syntax. (line 83)
-* redirect gawk output, in debugger: Debugger Info. (line 72)
+* recursive functions: Definition Syntax. (line 88)
+* redirect gawk output, in debugger: Debugger Info. (line 73)
* redirection of input: Getline/File. (line 6)
* redirection of output: Redirection. (line 6)
* reference counting, sorting arrays: Array Sorting Functions.
@@ -33822,8 +34268,8 @@ Index
* regexp constants, as patterns: Expression Patterns. (line 34)
* regexp constants, in gawk: Using Constant Regexps.
(line 28)
-* regexp constants, slashes vs. quotes: Computed Regexps. (line 29)
-* regexp constants, vs. string constants: Computed Regexps. (line 39)
+* regexp constants, slashes vs. quotes: Computed Regexps. (line 30)
+* regexp constants, vs. string constants: Computed Regexps. (line 40)
* register extension: Registration Functions.
(line 6)
* regular expressions: Regexp. (line 6)
@@ -33842,7 +34288,7 @@ Index
(line 57)
* regular expressions, dynamic: Computed Regexps. (line 6)
* regular expressions, dynamic, with embedded newlines: Computed Regexps.
- (line 59)
+ (line 60)
* regular expressions, gawk, command-line options: GNU Regexp Operators.
(line 70)
* regular expressions, interval expressions and: Options. (line 279)
@@ -33861,7 +34307,8 @@ Index
* regular expressions, searching for: Egrep Program. (line 6)
* relational operators, See comparison operators: Typing and Comparison.
(line 9)
-* replace in string: String Functions. (line 408)
+* replace in string: String Functions. (line 409)
+* retrying input: Retrying Input. (line 6)
* return debugger command: Debugger Execution Control.
(line 54)
* return statement, user-defined functions: Return Statement. (line 6)
@@ -33872,7 +34319,7 @@ Index
(line 11)
* revtwoway extension: Extension Sample Rev2way.
(line 12)
-* rewind() user-defined function: Rewind Function. (line 16)
+* rewind() user-defined function: Rewind Function. (line 15)
* right angle bracket (>), > operator <1>: Precedence. (line 65)
* right angle bracket (>), > operator: Comparison Operators.
(line 11)
@@ -33885,10 +34332,10 @@ Index
* right shift: Bitwise Functions. (line 53)
* right shift, bitwise: Bitwise Functions. (line 32)
* Ritchie, Dennis: Basic Data Typing. (line 54)
-* RLENGTH variable: Auto-set. (line 266)
+* RLENGTH variable: Auto-set. (line 279)
* RLENGTH variable, match() function and: String Functions. (line 228)
* Robbins, Arnold <1>: Future Extensions. (line 6)
-* Robbins, Arnold <2>: Bugs. (line 70)
+* Robbins, Arnold <2>: Bugs. (line 71)
* Robbins, Arnold <3>: Contributors. (line 144)
* Robbins, Arnold <4>: General Data Types. (line 6)
* Robbins, Arnold <5>: Alarm Program. (line 6)
@@ -33903,7 +34350,7 @@ Index
* Robbins, Miriam <2>: Getline/Pipe. (line 39)
* Robbins, Miriam: Acknowledgments. (line 94)
* Rommel, Kai Uwe: Contributors. (line 42)
-* round to nearest integer: Numeric Functions. (line 38)
+* round to nearest integer: Numeric Functions. (line 23)
* round() user-defined function: Round Function. (line 16)
* rounding numbers: Round Function. (line 6)
* ROUNDMODE variable: User-modified. (line 127)
@@ -33911,9 +34358,9 @@ Index
* RS variable: awk split records. (line 12)
* RS variable, multiline records and: Multiple Line. (line 17)
* rshift: Bitwise Functions. (line 53)
-* RSTART variable: Auto-set. (line 272)
+* RSTART variable: Auto-set. (line 285)
* RSTART variable, match() function and: String Functions. (line 228)
-* RT variable <1>: Auto-set. (line 279)
+* RT variable <1>: Auto-set. (line 292)
* RT variable <2>: Multiple Line. (line 129)
* RT variable: awk split records. (line 125)
* Rubin, Paul <1>: Contributors. (line 15)
@@ -33927,13 +34374,13 @@ Index
* sample debugging session: Sample Debugging Session.
(line 6)
* sandbox mode: Options. (line 286)
-* save debugger options: Debugger Info. (line 84)
+* save debugger options: Debugger Info. (line 85)
* scalar or array: Type Functions. (line 11)
* scalar values: Basic Data Typing. (line 13)
* scanning arrays: Scanning an Array. (line 6)
* scanning multidimensional arrays: Multiscanning. (line 11)
* Schorr, Andrew <1>: Contributors. (line 133)
-* Schorr, Andrew <2>: Auto-set. (line 311)
+* Schorr, Andrew <2>: Auto-set. (line 324)
* Schorr, Andrew: Acknowledgments. (line 60)
* Schreiber, Bert: Acknowledgments. (line 38)
* Schreiber, Rita: Acknowledgments. (line 38)
@@ -33976,7 +34423,7 @@ Index
* set directory of message catalogs: I18N Functions. (line 12)
* set watchpoint: Viewing And Changing Data.
(line 67)
-* shadowing of variable values: Definition Syntax. (line 71)
+* shadowing of variable values: Definition Syntax. (line 76)
* shell quoting, rules for: Quoting. (line 6)
* shells, piping commands into: Redirection. (line 136)
* shells, quoting: Using Shell Variables.
@@ -34016,16 +34463,16 @@ Index
(line 106)
* sidebar, Changing FS Does Not Affect the Fields: Full Line Fields.
(line 14)
-* sidebar, Changing NR and FNR: Auto-set. (line 326)
+* sidebar, Changing NR and FNR: Auto-set. (line 339)
* sidebar, Controlling Output Buffering with system(): I/O Functions.
- (line 138)
+ (line 139)
* sidebar, Escape Sequences for Metacharacters: Escape Sequences.
(line 137)
* sidebar, FS and IGNORECASE: Field Splitting Summary.
(line 38)
* sidebar, Interactive Versus Noninteractive Buffering: I/O Functions.
- (line 73)
-* sidebar, Matching the Null String: String Functions. (line 534)
+ (line 74)
+* sidebar, Matching the Null String: String Functions. (line 535)
* sidebar, Operator Evaluation Order: Increment Ops. (line 58)
* sidebar, Piping into sh: Redirection. (line 134)
* sidebar, Pre-POSIX awk Used OFMT for String Conversion: Strings And Numbers.
@@ -34033,13 +34480,13 @@ Index
* sidebar, Recipe for a Programming Language: History. (line 6)
* sidebar, RS = "\0" Is Not Portable: gawk split records. (line 63)
* sidebar, So Why Does gawk Have BEGINFILE and ENDFILE?: Filetrans Function.
- (line 82)
+ (line 83)
* sidebar, Syntactic Ambiguities Between /= and Regular Expressions: Assignment Ops.
(line 146)
* sidebar, Understanding #!: Executable Scripts. (line 31)
* sidebar, Understanding $0: Changing Fields. (line 134)
* sidebar, Using \n in Bracket Expressions of Dynamic Regexps: Computed Regexps.
- (line 57)
+ (line 58)
* sidebar, Using close()'s Return Value: Close Files And Pipes.
(line 131)
* SIGHUP signal, for dynamic profiling: Profiling. (line 210)
@@ -34079,7 +34526,7 @@ Index
(line 94)
* source code, awka: Other Versions. (line 68)
* source code, Brian Kernighan's awk: Other Versions. (line 13)
-* source code, Busybox Awk: Other Versions. (line 92)
+* source code, BusyBox Awk: Other Versions. (line 92)
* source code, gawk: Gawk Distribution. (line 6)
* source code, Illumos awk: Other Versions. (line 109)
* source code, jawk: Other Versions. (line 117)
@@ -34088,18 +34535,18 @@ Index
* source code, mixing: Options. (line 117)
* source code, pawk: Other Versions. (line 82)
* source code, pawk (Python version): Other Versions. (line 129)
-* source code, QSE Awk: Other Versions. (line 135)
+* source code, QSE awk: Other Versions. (line 135)
* source code, QuikTrim Awk: Other Versions. (line 139)
* source code, Solaris awk: Other Versions. (line 100)
* source files, search path for: Programs Exercises. (line 70)
-* sparse arrays: Array Intro. (line 72)
+* sparse arrays: Array Intro. (line 76)
* Spencer, Henry: Glossary. (line 16)
* split: String Functions. (line 316)
* split string into array: String Functions. (line 297)
* split utility: Split Program. (line 6)
* split() function, array elements, deleting: Delete. (line 61)
* split.awk program: Split Program. (line 30)
-* sprintf <1>: String Functions. (line 383)
+* sprintf <1>: String Functions. (line 384)
* sprintf: OFMT. (line 15)
* sprintf() function, OFMT variable and: User-modified. (line 113)
* sprintf() function, print/printf statements and: Round Function.
@@ -34109,7 +34556,7 @@ Index
* square root: Numeric Functions. (line 92)
* srand: Numeric Functions. (line 96)
* stack frame: Debugging Terms. (line 10)
-* Stallman, Richard <1>: Glossary. (line 296)
+* Stallman, Richard <1>: Glossary. (line 375)
* Stallman, Richard <2>: Contributors. (line 23)
* Stallman, Richard <3>: Acknowledgments. (line 18)
* Stallman, Richard: Manual History. (line 6)
@@ -34133,7 +34580,7 @@ Index
* stream editors: Full Line Fields. (line 22)
* strftime: Time Functions. (line 48)
* string constants: Scalar Constants. (line 15)
-* string constants, vs. regexp constants: Computed Regexps. (line 39)
+* string constants, vs. regexp constants: Computed Regexps. (line 40)
* string extraction (internationalization): String Extraction.
(line 6)
* string length: String Functions. (line 171)
@@ -34145,23 +34592,23 @@ Index
* strings splitting, example: String Functions. (line 335)
* strings, converting <1>: Bitwise Functions. (line 110)
* strings, converting: Strings And Numbers. (line 6)
-* strings, converting letter case: String Functions. (line 522)
+* strings, converting letter case: String Functions. (line 523)
* strings, converting, numbers to: User-modified. (line 30)
* strings, empty, See null strings: awk split records. (line 115)
* strings, extracting: String Extraction. (line 6)
-* strings, for localization: Programmer i18n. (line 14)
+* strings, for localization: Programmer i18n. (line 13)
* strings, length limitations: Scalar Constants. (line 20)
* strings, merging arrays into: Join Function. (line 6)
* strings, null: Regexp Field Splitting.
(line 43)
* strings, numeric: Variable Typing. (line 6)
-* strtonum: String Functions. (line 390)
+* strtonum: String Functions. (line 391)
* strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
(line 35)
-* sub <1>: String Functions. (line 408)
+* sub <1>: String Functions. (line 409)
* sub: Using Constant Regexps.
(line 43)
-* sub() function, arguments of: String Functions. (line 462)
+* sub() function, arguments of: String Functions. (line 463)
* sub() function, escape processing: Gory Details. (line 6)
* subscript separators: User-modified. (line 145)
* subscripts in arrays, multidimensional: Multidimensional. (line 10)
@@ -34175,15 +34622,15 @@ Index
* SUBSEP variable, and multidimensional arrays: Multidimensional.
(line 16)
* substitute in string: String Functions. (line 90)
-* substr: String Functions. (line 481)
-* substring: String Functions. (line 481)
+* substr: String Functions. (line 482)
+* substring: String Functions. (line 482)
* Sumner, Andrew: Other Versions. (line 68)
-* supplementary groups of gawk process: Auto-set. (line 251)
+* supplementary groups of gawk process: Auto-set. (line 260)
* switch statement: Switch Statement. (line 6)
-* SYMTAB array: Auto-set. (line 283)
+* SYMTAB array: Auto-set. (line 296)
* syntactic ambiguity: /= operator vs. /=.../ regexp constant: Assignment Ops.
(line 148)
-* system: I/O Functions. (line 106)
+* system: I/O Functions. (line 107)
* systime: Time Functions. (line 66)
* t debugger command (alias for tbreak): Breakpoint Control. (line 90)
* tbreak debugger command: Breakpoint Control. (line 90)
@@ -34209,7 +34656,7 @@ Index
(line 6)
* text, printing: Print. (line 22)
* text, printing, unduplicated lines of: Uniq Program. (line 6)
-* TEXTDOMAIN variable <1>: Programmer i18n. (line 9)
+* TEXTDOMAIN variable <1>: Programmer i18n. (line 8)
* TEXTDOMAIN variable: User-modified. (line 151)
* TEXTDOMAIN variable, BEGIN pattern and: Programmer i18n. (line 60)
* TEXTDOMAIN variable, portability and: I18N Portability. (line 20)
@@ -34233,11 +34680,11 @@ Index
* timestamps, converting dates to: Time Functions. (line 76)
* timestamps, formatted: Getlocaltime Function.
(line 6)
-* tolower: String Functions. (line 523)
-* toupper: String Functions. (line 529)
+* tolower: String Functions. (line 524)
+* toupper: String Functions. (line 530)
* tr utility: Translate Program. (line 6)
* trace debugger command: Miscellaneous Debugger Commands.
- (line 108)
+ (line 107)
* traceback, display in debugger: Execution Stack. (line 13)
* translate string: I18N Functions. (line 22)
* translate.awk program: Translate Program. (line 55)
@@ -34253,14 +34700,14 @@ Index
(line 22)
* troubleshooting, fatal errors, printf format strings: Format Modifiers.
(line 158)
-* troubleshooting, fflush() function: I/O Functions. (line 62)
+* troubleshooting, fflush() function: I/O Functions. (line 63)
* troubleshooting, function call syntax: Function Calls. (line 30)
* troubleshooting, gawk: Compatibility Mode. (line 6)
* troubleshooting, gawk, bug reports: Bugs. (line 9)
* troubleshooting, gawk, fatal errors, function arguments: Calling Built-in.
(line 16)
* troubleshooting, getline function: File Checking. (line 25)
-* troubleshooting, gsub()/sub() functions: String Functions. (line 472)
+* troubleshooting, gsub()/sub() functions: String Functions. (line 473)
* troubleshooting, match() function: String Functions. (line 292)
* troubleshooting, print statement, omitting commas: Print Examples.
(line 31)
@@ -34268,10 +34715,10 @@ Index
* troubleshooting, quotes with file names: Special FD. (line 62)
* troubleshooting, readable data files: File Checking. (line 6)
* troubleshooting, regexp constants vs. string constants: Computed Regexps.
- (line 39)
+ (line 40)
* troubleshooting, string concatenation: Concatenation. (line 26)
-* troubleshooting, substr() function: String Functions. (line 499)
-* troubleshooting, system() function: I/O Functions. (line 128)
+* troubleshooting, substr() function: String Functions. (line 500)
+* troubleshooting, system() function: I/O Functions. (line 129)
* troubleshooting, typographical errors, global variables: Options.
(line 98)
* true, logical: Truth Values. (line 6)
@@ -34294,14 +34741,14 @@ Index
* undisplay debugger command: Viewing And Changing Data.
(line 80)
* undocumented features: Undocumented. (line 6)
-* Unicode <1>: Glossary. (line 133)
+* Unicode <1>: Glossary. (line 197)
* Unicode <2>: Ranges and Locales. (line 61)
* Unicode: Ordinal Functions. (line 45)
* uninitialized variables, as array subscripts: Uninitialized Subscripts.
(line 6)
* uniq utility: Uniq Program. (line 6)
* uniq.awk program: Uniq Program. (line 65)
-* Unix: Glossary. (line 611)
+* Unix: Glossary. (line 753)
* Unix awk, backslashes in escape sequences: Escape Sequences.
(line 120)
* Unix awk, close() function and: Close Files And Pipes.
@@ -34350,17 +34797,17 @@ Index
* variables, predefined conveying information: Auto-set. (line 6)
* variables, private: Library Names. (line 11)
* variables, setting: Options. (line 32)
-* variables, shadowing: Definition Syntax. (line 71)
+* variables, shadowing: Definition Syntax. (line 76)
* variables, types of: Assignment Ops. (line 40)
* variables, types of, comparison expressions and: Typing and Comparison.
(line 9)
* variables, uninitialized, as array subscripts: Uninitialized Subscripts.
(line 6)
* variables, user-defined: Variables. (line 6)
-* version of gawk: Auto-set. (line 221)
-* version of gawk extension API: Auto-set. (line 246)
-* version of GNU MP library: Auto-set. (line 232)
-* version of GNU MPFR library: Auto-set. (line 228)
+* version of gawk: Auto-set. (line 230)
+* version of gawk extension API: Auto-set. (line 255)
+* version of GNU MP library: Auto-set. (line 241)
+* version of GNU MPFR library: Auto-set. (line 237)
* vertical bar (|): Regexp Operators. (line 70)
* vertical bar (|), | operator (I/O) <1>: Precedence. (line 65)
* vertical bar (|), | operator (I/O): Getline/Pipe. (line 9)
@@ -34417,7 +34864,7 @@ Index
* xor: Bitwise Functions. (line 56)
* XOR bitwise operation: Bitwise Functions. (line 6)
* Yawitz, Efraim: Contributors. (line 131)
-* Zaretskii, Eli <1>: Bugs. (line 70)
+* Zaretskii, Eli <1>: Bugs. (line 71)
* Zaretskii, Eli <2>: Contributors. (line 55)
* Zaretskii, Eli: Acknowledgments. (line 60)
* zerofile.awk program: Empty Files. (line 21)
@@ -34450,560 +34897,563 @@ Index

Tag Table:
Node: Top1204
-Node: Foreword342225
-Node: Foreword446667
-Node: Preface48100
-Ref: Preface-Footnote-150971
-Ref: Preface-Footnote-251078
-Ref: Preface-Footnote-351311
-Node: History51453
-Node: Names53799
-Ref: Names-Footnote-154893
-Node: This Manual55039
-Ref: This Manual-Footnote-161526
-Node: Conventions61626
-Node: Manual History63964
-Ref: Manual History-Footnote-166946
-Ref: Manual History-Footnote-266987
-Node: How To Contribute67061
-Node: Acknowledgments68190
-Node: Getting Started72995
-Node: Running gawk75428
-Node: One-shot76618
-Node: Read Terminal77866
-Node: Long79893
-Node: Executable Scripts81409
-Ref: Executable Scripts-Footnote-184198
-Node: Comments84301
-Node: Quoting86783
-Node: DOS Quoting92307
-Node: Sample Data Files92982
-Node: Very Simple95577
-Node: Two Rules100475
-Node: More Complex102361
-Node: Statements/Lines105223
-Ref: Statements/Lines-Footnote-1109678
-Node: Other Features109943
-Node: When110874
-Ref: When-Footnote-1112628
-Node: Intro Summary112693
-Node: Invoking Gawk113576
-Node: Command Line115090
-Node: Options115888
-Ref: Options-Footnote-1131692
-Ref: Options-Footnote-2131921
-Node: Other Arguments131946
-Node: Naming Standard Input134894
-Node: Environment Variables135987
-Node: AWKPATH Variable136545
-Ref: AWKPATH Variable-Footnote-1139958
-Ref: AWKPATH Variable-Footnote-2140003
-Node: AWKLIBPATH Variable140263
-Node: Other Environment Variables141519
-Node: Exit Status145007
-Node: Include Files145683
-Node: Loading Shared Libraries149280
-Node: Obsolete150707
-Node: Undocumented151404
-Node: Invoking Summary151671
-Node: Regexp153335
-Node: Regexp Usage154789
-Node: Escape Sequences156826
-Node: Regexp Operators163067
-Ref: Regexp Operators-Footnote-1170493
-Ref: Regexp Operators-Footnote-2170640
-Node: Bracket Expressions170738
-Ref: table-char-classes172753
-Node: Leftmost Longest175677
-Node: Computed Regexps176979
-Node: GNU Regexp Operators180376
-Node: Case-sensitivity184049
-Ref: Case-sensitivity-Footnote-1186934
-Ref: Case-sensitivity-Footnote-2187169
-Node: Regexp Summary187277
-Node: Reading Files188744
-Node: Records190838
-Node: awk split records191571
-Node: gawk split records196486
-Ref: gawk split records-Footnote-1201030
-Node: Fields201067
-Ref: Fields-Footnote-1203843
-Node: Nonconstant Fields203929
-Ref: Nonconstant Fields-Footnote-1206172
-Node: Changing Fields206376
-Node: Field Separators212305
-Node: Default Field Splitting215010
-Node: Regexp Field Splitting216127
-Node: Single Character Fields219477
-Node: Command Line Field Separator220536
-Node: Full Line Fields223748
-Ref: Full Line Fields-Footnote-1225265
-Ref: Full Line Fields-Footnote-2225311
-Node: Field Splitting Summary225412
-Node: Constant Size227486
-Node: Splitting By Content232075
-Ref: Splitting By Content-Footnote-1236069
-Node: Multiple Line236232
-Ref: Multiple Line-Footnote-1242118
-Node: Getline242297
-Node: Plain Getline244509
-Node: Getline/Variable247149
-Node: Getline/File248297
-Node: Getline/Variable/File249681
-Ref: Getline/Variable/File-Footnote-1251284
-Node: Getline/Pipe251371
-Node: Getline/Variable/Pipe254054
-Node: Getline/Coprocess255185
-Node: Getline/Variable/Coprocess256437
-Node: Getline Notes257176
-Node: Getline Summary259968
-Ref: table-getline-variants260380
-Node: Read Timeout261209
-Ref: Read Timeout-Footnote-1265034
-Node: Command-line directories265092
-Node: Input Summary265997
-Node: Input Exercises269298
-Node: Printing270026
-Node: Print271803
-Node: Print Examples273260
-Node: Output Separators276039
-Node: OFMT278057
-Node: Printf279411
-Node: Basic Printf280196
-Node: Control Letters281766
-Node: Format Modifiers285749
-Node: Printf Examples291758
-Node: Redirection294244
-Node: Special FD301085
-Ref: Special FD-Footnote-1304245
-Node: Special Files304319
-Node: Other Inherited Files304936
-Node: Special Network305936
-Node: Special Caveats306798
-Node: Close Files And Pipes307749
-Ref: Close Files And Pipes-Footnote-1314931
-Ref: Close Files And Pipes-Footnote-2315079
-Node: Output Summary315229
-Node: Output Exercises316227
-Node: Expressions316907
-Node: Values318092
-Node: Constants318770
-Node: Scalar Constants319461
-Ref: Scalar Constants-Footnote-1320320
-Node: Nondecimal-numbers320570
-Node: Regexp Constants323588
-Node: Using Constant Regexps324113
-Node: Variables327256
-Node: Using Variables327911
-Node: Assignment Options329822
-Node: Conversion331697
-Node: Strings And Numbers332221
-Ref: Strings And Numbers-Footnote-1335286
-Node: Locale influences conversions335395
-Ref: table-locale-affects338142
-Node: All Operators338730
-Node: Arithmetic Ops339360
-Node: Concatenation341865
-Ref: Concatenation-Footnote-1344684
-Node: Assignment Ops344790
-Ref: table-assign-ops349769
-Node: Increment Ops351041
-Node: Truth Values and Conditions354479
-Node: Truth Values355564
-Node: Typing and Comparison356613
-Node: Variable Typing357423
-Node: Comparison Operators361076
-Ref: table-relational-ops361486
-Node: POSIX String Comparison364981
-Ref: POSIX String Comparison-Footnote-1366053
-Node: Boolean Ops366191
-Ref: Boolean Ops-Footnote-1370670
-Node: Conditional Exp370761
-Node: Function Calls372488
-Node: Precedence376368
-Node: Locales380029
-Node: Expressions Summary381661
-Node: Patterns and Actions384221
-Node: Pattern Overview385341
-Node: Regexp Patterns387020
-Node: Expression Patterns387563
-Node: Ranges391273
-Node: BEGIN/END394379
-Node: Using BEGIN/END395140
-Ref: Using BEGIN/END-Footnote-1397874
-Node: I/O And BEGIN/END397980
-Node: BEGINFILE/ENDFILE400294
-Node: Empty403195
-Node: Using Shell Variables403512
-Node: Action Overview405785
-Node: Statements408111
-Node: If Statement409959
-Node: While Statement411454
-Node: Do Statement413483
-Node: For Statement414627
-Node: Switch Statement417784
-Node: Break Statement420166
-Node: Continue Statement422207
-Node: Next Statement424034
-Node: Nextfile Statement426415
-Node: Exit Statement429045
-Node: Built-in Variables431448
-Node: User-modified432581
-Ref: User-modified-Footnote-1440262
-Node: Auto-set440324
-Ref: Auto-set-Footnote-1454016
-Ref: Auto-set-Footnote-2454221
-Node: ARGC and ARGV454277
-Node: Pattern Action Summary458495
-Node: Arrays460922
-Node: Array Basics462251
-Node: Array Intro463095
-Ref: figure-array-elements465059
-Ref: Array Intro-Footnote-1467585
-Node: Reference to Elements467713
-Node: Assigning Elements470165
-Node: Array Example470656
-Node: Scanning an Array472414
-Node: Controlling Scanning475430
-Ref: Controlling Scanning-Footnote-1480626
-Node: Numeric Array Subscripts480942
-Node: Uninitialized Subscripts483127
-Node: Delete484744
-Ref: Delete-Footnote-1487487
-Node: Multidimensional487544
-Node: Multiscanning490641
-Node: Arrays of Arrays492230
-Node: Arrays Summary496989
-Node: Functions499081
-Node: Built-in499980
-Node: Calling Built-in501058
-Node: Numeric Functions503049
-Ref: Numeric Functions-Footnote-1507868
-Ref: Numeric Functions-Footnote-2508225
-Ref: Numeric Functions-Footnote-3508273
-Node: String Functions508545
-Ref: String Functions-Footnote-1532020
-Ref: String Functions-Footnote-2532149
-Ref: String Functions-Footnote-3532397
-Node: Gory Details532484
-Ref: table-sub-escapes534265
-Ref: table-sub-proposed535785
-Ref: table-posix-sub537149
-Ref: table-gensub-escapes538685
-Ref: Gory Details-Footnote-1539517
-Node: I/O Functions539668
-Ref: I/O Functions-Footnote-1546886
-Node: Time Functions547033
-Ref: Time Functions-Footnote-1557521
-Ref: Time Functions-Footnote-2557589
-Ref: Time Functions-Footnote-3557747
-Ref: Time Functions-Footnote-4557858
-Ref: Time Functions-Footnote-5557970
-Ref: Time Functions-Footnote-6558197
-Node: Bitwise Functions558463
-Ref: table-bitwise-ops559025
-Ref: Bitwise Functions-Footnote-1563334
-Node: Type Functions563503
-Node: I18N Functions564654
-Node: User-defined566299
-Node: Definition Syntax567104
-Ref: Definition Syntax-Footnote-1572511
-Node: Function Example572582
-Ref: Function Example-Footnote-1575501
-Node: Function Caveats575523
-Node: Calling A Function576041
-Node: Variable Scope576999
-Node: Pass By Value/Reference579987
-Node: Return Statement583482
-Node: Dynamic Typing586463
-Node: Indirect Calls587392
-Ref: Indirect Calls-Footnote-1598694
-Node: Functions Summary598822
-Node: Library Functions601524
-Ref: Library Functions-Footnote-1605133
-Ref: Library Functions-Footnote-2605276
-Node: Library Names605447
-Ref: Library Names-Footnote-1608901
-Ref: Library Names-Footnote-2609124
-Node: General Functions609210
-Node: Strtonum Function610313
-Node: Assert Function613335
-Node: Round Function616659
-Node: Cliff Random Function618200
-Node: Ordinal Functions619216
-Ref: Ordinal Functions-Footnote-1622279
-Ref: Ordinal Functions-Footnote-2622531
-Node: Join Function622742
-Ref: Join Function-Footnote-1624511
-Node: Getlocaltime Function624711
-Node: Readfile Function628455
-Node: Shell Quoting630425
-Node: Data File Management631826
-Node: Filetrans Function632458
-Node: Rewind Function636514
-Node: File Checking637901
-Ref: File Checking-Footnote-1639233
-Node: Empty Files639434
-Node: Ignoring Assigns641413
-Node: Getopt Function642964
-Ref: Getopt Function-Footnote-1654426
-Node: Passwd Functions654626
-Ref: Passwd Functions-Footnote-1663463
-Node: Group Functions663551
-Ref: Group Functions-Footnote-1671445
-Node: Walking Arrays671658
-Node: Library Functions Summary673261
-Node: Library Exercises674662
-Node: Sample Programs675942
-Node: Running Examples676712
-Node: Clones677440
-Node: Cut Program678664
-Node: Egrep Program688383
-Ref: Egrep Program-Footnote-1695881
-Node: Id Program695991
-Node: Split Program699636
-Ref: Split Program-Footnote-1703084
-Node: Tee Program703212
-Node: Uniq Program706001
-Node: Wc Program713420
-Ref: Wc Program-Footnote-1717670
-Node: Miscellaneous Programs717764
-Node: Dupword Program718977
-Node: Alarm Program721008
-Node: Translate Program725812
-Ref: Translate Program-Footnote-1730377
-Node: Labels Program730647
-Ref: Labels Program-Footnote-1733998
-Node: Word Sorting734082
-Node: History Sorting738153
-Node: Extract Program739989
-Node: Simple Sed747514
-Node: Igawk Program750582
-Ref: Igawk Program-Footnote-1764906
-Ref: Igawk Program-Footnote-2765107
-Ref: Igawk Program-Footnote-3765229
-Node: Anagram Program765344
-Node: Signature Program768401
-Node: Programs Summary769648
-Node: Programs Exercises770841
-Ref: Programs Exercises-Footnote-1774972
-Node: Advanced Features775063
-Node: Nondecimal Data777011
-Node: Array Sorting778601
-Node: Controlling Array Traversal779298
-Ref: Controlling Array Traversal-Footnote-1787631
-Node: Array Sorting Functions787749
-Ref: Array Sorting Functions-Footnote-1791638
-Node: Two-way I/O791834
-Ref: Two-way I/O-Footnote-1796779
-Ref: Two-way I/O-Footnote-2796965
-Node: TCP/IP Networking797047
-Node: Profiling799920
-Node: Advanced Features Summary808197
-Node: Internationalization810130
-Node: I18N and L10N811610
-Node: Explaining gettext812296
-Ref: Explaining gettext-Footnote-1817321
-Ref: Explaining gettext-Footnote-2817505
-Node: Programmer i18n817670
-Ref: Programmer i18n-Footnote-1822536
-Node: Translator i18n822585
-Node: String Extraction823379
-Ref: String Extraction-Footnote-1824510
-Node: Printf Ordering824596
-Ref: Printf Ordering-Footnote-1827382
-Node: I18N Portability827446
-Ref: I18N Portability-Footnote-1829901
-Node: I18N Example829964
-Ref: I18N Example-Footnote-1832767
-Node: Gawk I18N832839
-Node: I18N Summary833477
-Node: Debugger834816
-Node: Debugging835838
-Node: Debugging Concepts836279
-Node: Debugging Terms838132
-Node: Awk Debugging840704
-Node: Sample Debugging Session841598
-Node: Debugger Invocation842118
-Node: Finding The Bug843502
-Node: List of Debugger Commands849977
-Node: Breakpoint Control851310
-Node: Debugger Execution Control855006
-Node: Viewing And Changing Data858370
-Node: Execution Stack861748
-Node: Debugger Info863385
-Node: Miscellaneous Debugger Commands867402
-Node: Readline Support872431
-Node: Limitations873323
-Node: Debugging Summary875437
-Node: Arbitrary Precision Arithmetic876605
-Node: Computer Arithmetic878021
-Ref: table-numeric-ranges881619
-Ref: Computer Arithmetic-Footnote-1882478
-Node: Math Definitions882535
-Ref: table-ieee-formats885823
-Ref: Math Definitions-Footnote-1886427
-Node: MPFR features886532
-Node: FP Math Caution888203
-Ref: FP Math Caution-Footnote-1889253
-Node: Inexactness of computations889622
-Node: Inexact representation890581
-Node: Comparing FP Values891938
-Node: Errors accumulate893020
-Node: Getting Accuracy894453
-Node: Try To Round897115
-Node: Setting precision898014
-Ref: table-predefined-precision-strings898698
-Node: Setting the rounding mode900487
-Ref: table-gawk-rounding-modes900851
-Ref: Setting the rounding mode-Footnote-1904306
-Node: Arbitrary Precision Integers904485
-Ref: Arbitrary Precision Integers-Footnote-1909384
-Node: POSIX Floating Point Problems909533
-Ref: POSIX Floating Point Problems-Footnote-1913406
-Node: Floating point summary913444
-Node: Dynamic Extensions915638
-Node: Extension Intro917190
-Node: Plugin License918456
-Node: Extension Mechanism Outline919253
-Ref: figure-load-extension919681
-Ref: figure-register-new-function921161
-Ref: figure-call-new-function922165
-Node: Extension API Description924151
-Node: Extension API Functions Introduction925601
-Node: General Data Types930425
-Ref: General Data Types-Footnote-1936164
-Node: Memory Allocation Functions936463
-Ref: Memory Allocation Functions-Footnote-1939302
-Node: Constructor Functions939398
-Node: Registration Functions941132
-Node: Extension Functions941817
-Node: Exit Callback Functions944114
-Node: Extension Version String945362
-Node: Input Parsers946027
-Node: Output Wrappers955906
-Node: Two-way processors960421
-Node: Printing Messages962625
-Ref: Printing Messages-Footnote-1963701
-Node: Updating `ERRNO'963853
-Node: Requesting Values964593
-Ref: table-value-types-returned965321
-Node: Accessing Parameters966278
-Node: Symbol Table Access967509
-Node: Symbol table by name968023
-Node: Symbol table by cookie970004
-Ref: Symbol table by cookie-Footnote-1974148
-Node: Cached values974211
-Ref: Cached values-Footnote-1977710
-Node: Array Manipulation977801
-Ref: Array Manipulation-Footnote-1978899
-Node: Array Data Types978936
-Ref: Array Data Types-Footnote-1981591
-Node: Array Functions981683
-Node: Flattening Arrays985537
-Node: Creating Arrays992429
-Node: Extension API Variables997200
-Node: Extension Versioning997836
-Node: Extension API Informational Variables999737
-Node: Extension API Boilerplate1000802
-Node: Finding Extensions1004611
-Node: Extension Example1005171
-Node: Internal File Description1005943
-Node: Internal File Ops1010010
-Ref: Internal File Ops-Footnote-11021680
-Node: Using Internal File Ops1021820
-Ref: Using Internal File Ops-Footnote-11024203
-Node: Extension Samples1024476
-Node: Extension Sample File Functions1026002
-Node: Extension Sample Fnmatch1033640
-Node: Extension Sample Fork1035131
-Node: Extension Sample Inplace1036346
-Node: Extension Sample Ord1038021
-Node: Extension Sample Readdir1038857
-Ref: table-readdir-file-types1039733
-Node: Extension Sample Revout1040544
-Node: Extension Sample Rev2way1041134
-Node: Extension Sample Read write array1041874
-Node: Extension Sample Readfile1043814
-Node: Extension Sample Time1044909
-Node: Extension Sample API Tests1046258
-Node: gawkextlib1046749
-Node: Extension summary1049407
-Node: Extension Exercises1053096
-Node: Language History1053818
-Node: V7/SVR3.11055474
-Node: SVR41057655
-Node: POSIX1059100
-Node: BTL1060489
-Node: POSIX/GNU1061223
-Node: Feature History1066847
-Node: Common Extensions1079945
-Node: Ranges and Locales1081269
-Ref: Ranges and Locales-Footnote-11085887
-Ref: Ranges and Locales-Footnote-21085914
-Ref: Ranges and Locales-Footnote-31086148
-Node: Contributors1086369
-Node: History summary1091910
-Node: Installation1093280
-Node: Gawk Distribution1094226
-Node: Getting1094710
-Node: Extracting1095533
-Node: Distribution contents1097168
-Node: Unix Installation1103233
-Node: Quick Installation1103916
-Node: Shell Startup Files1106327
-Node: Additional Configuration Options1107406
-Node: Configuration Philosophy1109145
-Node: Non-Unix Installation1111514
-Node: PC Installation1111972
-Node: PC Binary Installation1113291
-Node: PC Compiling1115139
-Ref: PC Compiling-Footnote-11118160
-Node: PC Testing1118269
-Node: PC Using1119445
-Node: Cygwin1123560
-Node: MSYS1124383
-Node: VMS Installation1124883
-Node: VMS Compilation1125675
-Ref: VMS Compilation-Footnote-11126897
-Node: VMS Dynamic Extensions1126955
-Node: VMS Installation Details1128639
-Node: VMS Running1130891
-Node: VMS GNV1133727
-Node: VMS Old Gawk1134461
-Node: Bugs1134931
-Node: Other Versions1138814
-Node: Installation summary1145242
-Node: Notes1146298
-Node: Compatibility Mode1147163
-Node: Additions1147945
-Node: Accessing The Source1148870
-Node: Adding Code1150306
-Node: New Ports1156471
-Node: Derived Files1160953
-Ref: Derived Files-Footnote-11166428
-Ref: Derived Files-Footnote-21166462
-Ref: Derived Files-Footnote-31167058
-Node: Future Extensions1167172
-Node: Implementation Limitations1167778
-Node: Extension Design1169026
-Node: Old Extension Problems1170180
-Ref: Old Extension Problems-Footnote-11171697
-Node: Extension New Mechanism Goals1171754
-Ref: Extension New Mechanism Goals-Footnote-11175114
-Node: Extension Other Design Decisions1175303
-Node: Extension Future Growth1177411
-Node: Old Extension Mechanism1178247
-Node: Notes summary1180009
-Node: Basic Concepts1181195
-Node: Basic High Level1181876
-Ref: figure-general-flow1182148
-Ref: figure-process-flow1182747
-Ref: Basic High Level-Footnote-11185976
-Node: Basic Data Typing1186161
-Node: Glossary1189489
-Node: Copying1214647
-Node: GNU Free Documentation License1252203
-Node: Index1277339
+Node: Foreword342451
+Node: Foreword446895
+Node: Preface48426
+Ref: Preface-Footnote-151297
+Ref: Preface-Footnote-251404
+Ref: Preface-Footnote-351637
+Node: History51779
+Node: Names54130
+Ref: Names-Footnote-155224
+Node: This Manual55370
+Ref: This Manual-Footnote-161870
+Node: Conventions61970
+Node: Manual History64307
+Ref: Manual History-Footnote-167300
+Ref: Manual History-Footnote-267341
+Node: How To Contribute67415
+Node: Acknowledgments68544
+Node: Getting Started73410
+Node: Running gawk75849
+Node: One-shot77039
+Node: Read Terminal78303
+Node: Long80334
+Node: Executable Scripts81847
+Ref: Executable Scripts-Footnote-184636
+Node: Comments84739
+Node: Quoting87221
+Node: DOS Quoting92739
+Node: Sample Data Files93414
+Node: Very Simple96009
+Node: Two Rules100908
+Node: More Complex102794
+Node: Statements/Lines105656
+Ref: Statements/Lines-Footnote-1110111
+Node: Other Features110376
+Node: When111312
+Ref: When-Footnote-1113066
+Node: Intro Summary113131
+Node: Invoking Gawk114015
+Node: Command Line115529
+Node: Options116327
+Ref: Options-Footnote-1132122
+Ref: Options-Footnote-2132351
+Node: Other Arguments132376
+Node: Naming Standard Input135324
+Node: Environment Variables136417
+Node: AWKPATH Variable136975
+Ref: AWKPATH Variable-Footnote-1140382
+Ref: AWKPATH Variable-Footnote-2140427
+Node: AWKLIBPATH Variable140687
+Node: Other Environment Variables141943
+Node: Exit Status145574
+Node: Include Files146250
+Node: Loading Shared Libraries149839
+Node: Obsolete151266
+Node: Undocumented151958
+Node: Invoking Summary152225
+Node: Regexp153888
+Node: Regexp Usage155342
+Node: Escape Sequences157379
+Node: Regexp Operators163608
+Ref: Regexp Operators-Footnote-1171018
+Ref: Regexp Operators-Footnote-2171165
+Node: Bracket Expressions171263
+Ref: table-char-classes173278
+Node: Leftmost Longest176220
+Node: Computed Regexps177522
+Node: GNU Regexp Operators180951
+Node: Case-sensitivity184623
+Ref: Case-sensitivity-Footnote-1187508
+Ref: Case-sensitivity-Footnote-2187743
+Node: Regexp Summary187851
+Node: Reading Files189318
+Node: Records191480
+Node: awk split records192213
+Node: gawk split records197142
+Ref: gawk split records-Footnote-1201681
+Node: Fields201718
+Ref: Fields-Footnote-1204496
+Node: Nonconstant Fields204582
+Ref: Nonconstant Fields-Footnote-1206820
+Node: Changing Fields207023
+Node: Field Separators212954
+Node: Default Field Splitting215658
+Node: Regexp Field Splitting216775
+Node: Single Character Fields220125
+Node: Command Line Field Separator221184
+Node: Full Line Fields224401
+Ref: Full Line Fields-Footnote-1225922
+Ref: Full Line Fields-Footnote-2225968
+Node: Field Splitting Summary226069
+Node: Constant Size228143
+Node: Splitting By Content232722
+Ref: Splitting By Content-Footnote-1236687
+Node: Multiple Line236850
+Ref: Multiple Line-Footnote-1242731
+Node: Getline242910
+Node: Plain Getline245380
+Node: Getline/Variable248020
+Node: Getline/File249169
+Node: Getline/Variable/File250554
+Ref: Getline/Variable/File-Footnote-1252157
+Node: Getline/Pipe252244
+Node: Getline/Variable/Pipe254922
+Node: Getline/Coprocess256053
+Node: Getline/Variable/Coprocess257317
+Node: Getline Notes258056
+Node: Getline Summary260850
+Ref: table-getline-variants261262
+Node: Read Timeout262091
+Ref: Read Timeout-Footnote-1265994
+Node: Retrying Input266052
+Node: Command-line directories267251
+Node: Input Summary268158
+Node: Input Exercises271543
+Node: Printing272271
+Node: Print274106
+Node: Print Examples275563
+Node: Output Separators278342
+Node: OFMT280360
+Node: Printf281715
+Node: Basic Printf282500
+Node: Control Letters284072
+Node: Format Modifiers288057
+Node: Printf Examples294063
+Node: Redirection296549
+Node: Special FD303387
+Ref: Special FD-Footnote-1306553
+Node: Special Files306627
+Node: Other Inherited Files307244
+Node: Special Network308244
+Node: Special Caveats309106
+Node: Close Files And Pipes310055
+Ref: Close Files And Pipes-Footnote-1317240
+Ref: Close Files And Pipes-Footnote-2317388
+Node: Nonfatal317538
+Node: Output Summary319863
+Node: Output Exercises321084
+Node: Expressions321764
+Node: Values322953
+Node: Constants323630
+Node: Scalar Constants324321
+Ref: Scalar Constants-Footnote-1325183
+Node: Nondecimal-numbers325433
+Node: Regexp Constants328443
+Node: Using Constant Regexps328969
+Node: Variables332132
+Node: Using Variables332789
+Node: Assignment Options334700
+Node: Conversion336575
+Node: Strings And Numbers337099
+Ref: Strings And Numbers-Footnote-1340164
+Node: Locale influences conversions340273
+Ref: table-locale-affects343019
+Node: All Operators343611
+Node: Arithmetic Ops344240
+Node: Concatenation346745
+Ref: Concatenation-Footnote-1349564
+Node: Assignment Ops349671
+Ref: table-assign-ops354650
+Node: Increment Ops355960
+Node: Truth Values and Conditions359391
+Node: Truth Values360474
+Node: Typing and Comparison361523
+Node: Variable Typing362339
+Node: Comparison Operators366006
+Ref: table-relational-ops366416
+Node: POSIX String Comparison369911
+Ref: POSIX String Comparison-Footnote-1370983
+Node: Boolean Ops371122
+Ref: Boolean Ops-Footnote-1375600
+Node: Conditional Exp375691
+Node: Function Calls377429
+Node: Precedence381309
+Node: Locales384969
+Node: Expressions Summary386601
+Node: Patterns and Actions389172
+Node: Pattern Overview390292
+Node: Regexp Patterns391971
+Node: Expression Patterns392514
+Node: Ranges396294
+Node: BEGIN/END399401
+Node: Using BEGIN/END400162
+Ref: Using BEGIN/END-Footnote-1402898
+Node: I/O And BEGIN/END403004
+Node: BEGINFILE/ENDFILE405319
+Node: Empty408216
+Node: Using Shell Variables408533
+Node: Action Overview410806
+Node: Statements413132
+Node: If Statement414980
+Node: While Statement416475
+Node: Do Statement418503
+Node: For Statement419651
+Node: Switch Statement422809
+Node: Break Statement425191
+Node: Continue Statement427284
+Node: Next Statement429111
+Node: Nextfile Statement431492
+Node: Exit Statement434120
+Node: Built-in Variables436531
+Node: User-modified437664
+Ref: User-modified-Footnote-1445298
+Node: Auto-set445360
+Ref: Auto-set-Footnote-1459593
+Ref: Auto-set-Footnote-2459798
+Node: ARGC and ARGV459854
+Node: Pattern Action Summary464072
+Node: Arrays466505
+Node: Array Basics467834
+Node: Array Intro468678
+Ref: figure-array-elements470615
+Ref: Array Intro-Footnote-1473238
+Node: Reference to Elements473366
+Node: Assigning Elements475828
+Node: Array Example476319
+Node: Scanning an Array478078
+Node: Controlling Scanning481101
+Ref: Controlling Scanning-Footnote-1486495
+Node: Numeric Array Subscripts486811
+Node: Uninitialized Subscripts488996
+Node: Delete490613
+Ref: Delete-Footnote-1493362
+Node: Multidimensional493419
+Node: Multiscanning496516
+Node: Arrays of Arrays498105
+Node: Arrays Summary502859
+Node: Functions504950
+Node: Built-in505989
+Node: Calling Built-in507067
+Node: Numeric Functions509062
+Ref: Numeric Functions-Footnote-1513895
+Ref: Numeric Functions-Footnote-2514252
+Ref: Numeric Functions-Footnote-3514300
+Node: String Functions514572
+Ref: String Functions-Footnote-1538073
+Ref: String Functions-Footnote-2538202
+Ref: String Functions-Footnote-3538450
+Node: Gory Details538537
+Ref: table-sub-escapes540318
+Ref: table-sub-proposed541833
+Ref: table-posix-sub543195
+Ref: table-gensub-escapes544732
+Ref: Gory Details-Footnote-1545565
+Node: I/O Functions545716
+Ref: I/O Functions-Footnote-1552952
+Node: Time Functions553099
+Ref: Time Functions-Footnote-1563608
+Ref: Time Functions-Footnote-2563676
+Ref: Time Functions-Footnote-3563834
+Ref: Time Functions-Footnote-4563945
+Ref: Time Functions-Footnote-5564057
+Ref: Time Functions-Footnote-6564284
+Node: Bitwise Functions564550
+Ref: table-bitwise-ops565112
+Ref: Bitwise Functions-Footnote-1569440
+Node: Type Functions569612
+Node: I18N Functions570764
+Node: User-defined572411
+Node: Definition Syntax573216
+Ref: Definition Syntax-Footnote-1578875
+Node: Function Example578946
+Ref: Function Example-Footnote-1581867
+Node: Function Caveats581889
+Node: Calling A Function582407
+Node: Variable Scope583365
+Node: Pass By Value/Reference586358
+Node: Return Statement589855
+Node: Dynamic Typing592834
+Node: Indirect Calls593763
+Ref: Indirect Calls-Footnote-1604006
+Node: Functions Summary604134
+Node: Library Functions606836
+Ref: Library Functions-Footnote-1610444
+Ref: Library Functions-Footnote-2610587
+Node: Library Names610758
+Ref: Library Names-Footnote-1614216
+Ref: Library Names-Footnote-2614439
+Node: General Functions614525
+Node: Strtonum Function615628
+Node: Assert Function618650
+Node: Round Function621974
+Node: Cliff Random Function623515
+Node: Ordinal Functions624531
+Ref: Ordinal Functions-Footnote-1627594
+Ref: Ordinal Functions-Footnote-2627846
+Node: Join Function628057
+Ref: Join Function-Footnote-1629827
+Node: Getlocaltime Function630027
+Node: Readfile Function633771
+Node: Shell Quoting635743
+Node: Data File Management637144
+Node: Filetrans Function637776
+Node: Rewind Function641872
+Node: File Checking643258
+Ref: File Checking-Footnote-1644591
+Node: Empty Files644792
+Node: Ignoring Assigns646771
+Node: Getopt Function648321
+Ref: Getopt Function-Footnote-1659785
+Node: Passwd Functions659985
+Ref: Passwd Functions-Footnote-1668825
+Node: Group Functions668913
+Ref: Group Functions-Footnote-1676810
+Node: Walking Arrays677015
+Node: Library Functions Summary680021
+Node: Library Exercises681423
+Node: Sample Programs682703
+Node: Running Examples683473
+Node: Clones684201
+Node: Cut Program685425
+Node: Egrep Program695145
+Ref: Egrep Program-Footnote-1702648
+Node: Id Program702758
+Node: Split Program706434
+Ref: Split Program-Footnote-1709888
+Node: Tee Program710016
+Node: Uniq Program712805
+Node: Wc Program720224
+Ref: Wc Program-Footnote-1724474
+Node: Miscellaneous Programs724568
+Node: Dupword Program725781
+Node: Alarm Program727812
+Node: Translate Program732617
+Ref: Translate Program-Footnote-1737180
+Node: Labels Program737450
+Ref: Labels Program-Footnote-1740801
+Node: Word Sorting740885
+Node: History Sorting744955
+Node: Extract Program746790
+Node: Simple Sed754314
+Node: Igawk Program757384
+Ref: Igawk Program-Footnote-1771710
+Ref: Igawk Program-Footnote-2771911
+Ref: Igawk Program-Footnote-3772033
+Node: Anagram Program772148
+Node: Signature Program775209
+Node: Programs Summary776456
+Node: Programs Exercises777677
+Ref: Programs Exercises-Footnote-1781808
+Node: Advanced Features781899
+Node: Nondecimal Data783881
+Node: Array Sorting785471
+Node: Controlling Array Traversal786171
+Ref: Controlling Array Traversal-Footnote-1794537
+Node: Array Sorting Functions794655
+Ref: Array Sorting Functions-Footnote-1798541
+Node: Two-way I/O798737
+Ref: Two-way I/O-Footnote-1803682
+Ref: Two-way I/O-Footnote-2803868
+Node: TCP/IP Networking803950
+Node: Profiling806822
+Node: Advanced Features Summary815093
+Node: Internationalization817026
+Node: I18N and L10N818506
+Node: Explaining gettext819192
+Ref: Explaining gettext-Footnote-1824217
+Ref: Explaining gettext-Footnote-2824401
+Node: Programmer i18n824566
+Ref: Programmer i18n-Footnote-1829442
+Node: Translator i18n829491
+Node: String Extraction830285
+Ref: String Extraction-Footnote-1831416
+Node: Printf Ordering831502
+Ref: Printf Ordering-Footnote-1834288
+Node: I18N Portability834352
+Ref: I18N Portability-Footnote-1836808
+Node: I18N Example836871
+Ref: I18N Example-Footnote-1839674
+Node: Gawk I18N839746
+Node: I18N Summary840390
+Node: Debugger841730
+Node: Debugging842752
+Node: Debugging Concepts843193
+Node: Debugging Terms845003
+Node: Awk Debugging847575
+Node: Sample Debugging Session848481
+Node: Debugger Invocation849015
+Node: Finding The Bug850400
+Node: List of Debugger Commands856879
+Node: Breakpoint Control858211
+Node: Debugger Execution Control861888
+Node: Viewing And Changing Data865247
+Node: Execution Stack868623
+Node: Debugger Info870258
+Node: Miscellaneous Debugger Commands874303
+Node: Readline Support879304
+Node: Limitations880198
+Node: Debugging Summary882313
+Node: Arbitrary Precision Arithmetic883487
+Node: Computer Arithmetic884903
+Ref: table-numeric-ranges888480
+Ref: Computer Arithmetic-Footnote-1889004
+Node: Math Definitions889061
+Ref: table-ieee-formats892356
+Ref: Math Definitions-Footnote-1892960
+Node: MPFR features893065
+Node: FP Math Caution894736
+Ref: FP Math Caution-Footnote-1895786
+Node: Inexactness of computations896155
+Node: Inexact representation897114
+Node: Comparing FP Values898472
+Node: Errors accumulate899554
+Node: Getting Accuracy900986
+Node: Try To Round903690
+Node: Setting precision904589
+Ref: table-predefined-precision-strings905273
+Node: Setting the rounding mode907102
+Ref: table-gawk-rounding-modes907466
+Ref: Setting the rounding mode-Footnote-1910918
+Node: Arbitrary Precision Integers911097
+Ref: Arbitrary Precision Integers-Footnote-1916013
+Node: POSIX Floating Point Problems916162
+Ref: POSIX Floating Point Problems-Footnote-1920041
+Node: Floating point summary920079
+Node: Dynamic Extensions922266
+Node: Extension Intro923818
+Node: Plugin License925083
+Node: Extension Mechanism Outline925880
+Ref: figure-load-extension926308
+Ref: figure-register-new-function927788
+Ref: figure-call-new-function928792
+Node: Extension API Description930779
+Node: Extension API Functions Introduction932313
+Node: General Data Types937182
+Ref: General Data Types-Footnote-1943082
+Node: Memory Allocation Functions943381
+Ref: Memory Allocation Functions-Footnote-1946220
+Node: Constructor Functions946319
+Node: Registration Functions948058
+Node: Extension Functions948743
+Node: Exit Callback Functions951040
+Node: Extension Version String952288
+Node: Input Parsers952951
+Node: Output Wrappers962826
+Node: Two-way processors967339
+Node: Printing Messages969602
+Ref: Printing Messages-Footnote-1970678
+Node: Updating `ERRNO'970830
+Node: Requesting Values971570
+Ref: table-value-types-returned972297
+Node: Accessing Parameters973254
+Node: Symbol Table Access974488
+Node: Symbol table by name975002
+Node: Symbol table by cookie977022
+Ref: Symbol table by cookie-Footnote-1981167
+Node: Cached values981230
+Ref: Cached values-Footnote-1984726
+Node: Array Manipulation984817
+Ref: Array Manipulation-Footnote-1985907
+Node: Array Data Types985944
+Ref: Array Data Types-Footnote-1988599
+Node: Array Functions988691
+Node: Flattening Arrays992550
+Node: Creating Arrays999452
+Node: Redirection API1004223
+Node: Extension API Variables1007048
+Node: Extension Versioning1007681
+Node: Extension API Informational Variables1009572
+Node: Extension API Boilerplate1010637
+Node: Finding Extensions1014446
+Node: Extension Example1015006
+Node: Internal File Description1015778
+Node: Internal File Ops1019845
+Ref: Internal File Ops-Footnote-11031596
+Node: Using Internal File Ops1031736
+Ref: Using Internal File Ops-Footnote-11034119
+Node: Extension Samples1034392
+Node: Extension Sample File Functions1035920
+Node: Extension Sample Fnmatch1043601
+Node: Extension Sample Fork1045089
+Node: Extension Sample Inplace1046304
+Node: Extension Sample Ord1048390
+Node: Extension Sample Readdir1049226
+Ref: table-readdir-file-types1050103
+Node: Extension Sample Revout1050914
+Node: Extension Sample Rev2way1051503
+Node: Extension Sample Read write array1052243
+Node: Extension Sample Readfile1054183
+Node: Extension Sample Time1055278
+Node: Extension Sample API Tests1056626
+Node: gawkextlib1057117
+Node: Extension summary1059818
+Node: Extension Exercises1063507
+Node: Language History1065003
+Node: V7/SVR3.11066659
+Node: SVR41068812
+Node: POSIX1070246
+Node: BTL1071627
+Node: POSIX/GNU1072358
+Node: Feature History1078197
+Node: Common Extensions1091994
+Node: Ranges and Locales1093366
+Ref: Ranges and Locales-Footnote-11097985
+Ref: Ranges and Locales-Footnote-21098012
+Ref: Ranges and Locales-Footnote-31098247
+Node: Contributors1098468
+Node: History summary1104008
+Node: Installation1105387
+Node: Gawk Distribution1106333
+Node: Getting1106817
+Node: Extracting1107640
+Node: Distribution contents1109277
+Node: Unix Installation1115379
+Node: Quick Installation1116062
+Node: Shell Startup Files1118473
+Node: Additional Configuration Options1119552
+Node: Configuration Philosophy1121356
+Node: Non-Unix Installation1123725
+Node: PC Installation1124183
+Node: PC Binary Installation1125503
+Node: PC Compiling1127351
+Ref: PC Compiling-Footnote-11130372
+Node: PC Testing1130481
+Node: PC Using1131657
+Node: Cygwin1135772
+Node: MSYS1136542
+Node: VMS Installation1137043
+Node: VMS Compilation1137835
+Ref: VMS Compilation-Footnote-11139064
+Node: VMS Dynamic Extensions1139122
+Node: VMS Installation Details1140806
+Node: VMS Running1143057
+Node: VMS GNV1145897
+Node: VMS Old Gawk1146632
+Node: Bugs1147102
+Node: Other Versions1150991
+Node: Installation summary1157425
+Node: Notes1158484
+Node: Compatibility Mode1159349
+Node: Additions1160131
+Node: Accessing The Source1161056
+Node: Adding Code1162491
+Node: New Ports1168648
+Node: Derived Files1173130
+Ref: Derived Files-Footnote-11178605
+Ref: Derived Files-Footnote-21178639
+Ref: Derived Files-Footnote-31179235
+Node: Future Extensions1179349
+Node: Implementation Limitations1179955
+Node: Extension Design1181203
+Node: Old Extension Problems1182357
+Ref: Old Extension Problems-Footnote-11183874
+Node: Extension New Mechanism Goals1183931
+Ref: Extension New Mechanism Goals-Footnote-11187291
+Node: Extension Other Design Decisions1187480
+Node: Extension Future Growth1189588
+Node: Old Extension Mechanism1190424
+Node: Notes summary1192186
+Node: Basic Concepts1193372
+Node: Basic High Level1194053
+Ref: figure-general-flow1194325
+Ref: figure-process-flow1194924
+Ref: Basic High Level-Footnote-11198153
+Node: Basic Data Typing1198338
+Node: Glossary1201666
+Node: Copying1233595
+Node: GNU Free Documentation License1271151
+Node: Index1296287

End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 710a3c4f..ca378cca 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -51,12 +51,13 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH September, 2014
+@set UPDATE-MONTH February, 2015
@set VERSION 4.1
@set PATCHLEVEL 2
+@set GAWKINETTITLE TCP/IP Internetworking with @command{gawk}
@ifset FOR_PRINT
-@set TITLE Effective Awk Programming
+@set TITLE Effective awk Programming
@end ifset
@ifclear FOR_PRINT
@set TITLE GAWK: Effective AWK Programming
@@ -197,9 +198,9 @@
@ifclear FOR_PRINT
@set FN file name
-@set FFN File Name
+@set FFN File name
@set DF data file
-@set DDF Data File
+@set DDF Data file
@set PVERSION version
@end ifclear
@ifset FOR_PRINT
@@ -207,7 +208,7 @@
@set FFN Filename
@set DF datafile
@set DDF Datafile
-@set PVERSION Version
+@set PVERSION version
@end ifset
@c For HTML, spell out email addresses, to avoid problems with
@@ -298,13 +299,13 @@ Fax: +1-617-542-2652
Email: <email>gnu@@gnu.org</email>
URL: <ulink url="http://www.gnu.org">http://www.gnu.org/</ulink></literallayout>
-<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2014
+<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2015
Free Software Foundation, Inc.
All Rights Reserved.</literallayout>
@end docbook
@ifnotdocbook
-Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2014 @*
+Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2015 @*
Free Software Foundation, Inc.
@end ifnotdocbook
@sp 2
@@ -472,7 +473,7 @@ particular records in a file and perform operations upon them.
@command{gawk}.
* Internationalization:: Getting @command{gawk} to speak your
language.
-* Debugger:: The @code{gawk} debugger.
+* Debugger:: The @command{gawk} debugger.
* Arbitrary Precision Arithmetic:: Arbitrary precision arithmetic with
@command{gawk}.
* Dynamic Extensions:: Adding new built-in functions to
@@ -603,6 +604,7 @@ particular records in a file and perform operations upon them.
@code{getline}.
* Getline Summary:: Summary of @code{getline} Variants.
* Read Timeout:: Reading input with a timeout.
+* Retrying Input:: Retrying input after certain errors.
* Command-line directories:: What happens if you put a directory on
the command line.
* Input Summary:: Input summary.
@@ -632,6 +634,7 @@ particular records in a file and perform operations upon them.
* Special Caveats:: Things to watch out for.
* Close Files And Pipes:: Closing Input and Output Files and
Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -943,6 +946,7 @@ particular records in a file and perform operations upon them.
* Array Functions:: Functions for working with arrays.
* Flattening Arrays:: How to flatten arrays.
* Creating Arrays:: How to create and populate arrays.
+* Redirection API:: How to access and manipulate redirections.
* Extension API Variables:: Variables provided by the API.
* Extension Versioning:: API Version information.
* Extension API Informational Variables:: Variables providing information about
@@ -955,7 +959,7 @@ particular records in a file and perform operations upon them.
* Internal File Ops:: The code for internal file operations.
* Using Internal File Ops:: How to use an external extension.
* Extension Samples:: The sample extensions that ship with
- @code{gawk}.
+ @command{gawk}.
* Extension Sample File Functions:: The file functions sample.
* Extension Sample Fnmatch:: An interface to @code{fnmatch()}.
* Extension Sample Fork:: An interface to @code{fork()} and
@@ -1170,7 +1174,7 @@ interface to network protocols via special @file{/inet} files.
The programs in this book make clear that an AWK program is
typically much smaller and faster to develop than
a counterpart written in C.
-Consequently, there is often a payoff to prototype an
+Consequently, there is often a payoff to prototyping an
algorithm or design in AWK to get it running quickly and expose
problems early. Often, the interpreted performance is adequate
and the AWK prototype becomes the product.
@@ -1247,15 +1251,15 @@ March 2001
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.
+True then, and still true today.
-Learning to use a programming language is more than mastering the
+Learning to use a programming language is about 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
+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.
@@ -1263,12 +1267,15 @@ 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
+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.
+details, and, as expected, many examples to help you learn the ins and outs.
+
+I enjoy programming in AWK and had fun (re)reading this book.
+I think you will too.
@ifnotdocbook
@cindex Brennan, Michael
@@ -1297,7 +1304,7 @@ October 2014
<affiliation><jobtitle>Nof Ayalon</jobtitle></affiliation>
<affiliation><jobtitle>Israel</jobtitle></affiliation>
</author>
- <date>December 2014</date>
+ <date>February 2015</date>
</prefaceinfo>
@end docbook
@@ -1340,7 +1347,7 @@ Generate reports
Validate data
@item
-Produce indexes and perform other document preparation tasks
+Produce indexes and perform other document-preparation tasks
@item
Experiment with algorithms that you can adapt later to other computer
@@ -1487,23 +1494,23 @@ help from me, thoroughly reworked @command{gawk} for compatibility
with the newer @command{awk}.
Circa 1994, I became the primary maintainer.
Current development focuses on bug fixes,
-performance improvements, standards compliance and, occasionally, new features.
+performance improvements, standards compliance, and, occasionally, new features.
In May 1997, J@"urgen Kahrs felt the need for network access
from @command{awk}, and with a little help from me, set about adding
features to do this for @command{gawk}. At that time, he also
wrote the bulk of
-@cite{TCP/IP Internetworking with @command{gawk}}
+@cite{@value{GAWKINETTITLE}}
(a separate document, available as part of the @command{gawk} distribution).
His code finally became part of the main @command{gawk} distribution
with @command{gawk} @value{PVERSION} 3.1.
John Haque rewrote the @command{gawk} internals, in the process providing
an @command{awk}-level debugger. This version became available as
-@command{gawk} @value{PVERSION} 4.0, in 2011.
+@command{gawk} @value{PVERSION} 4.0 in 2011.
@DBXREF{Contributors}
-for a full list of those who made important contributions to @command{gawk}.
+for a full list of those who have made important contributions to @command{gawk}.
@node Names
@unnumberedsec A Rose by Any Other Name
@@ -1516,7 +1523,7 @@ is often referred to as ``new @command{awk}.''
By analogy, the original version of @command{awk} is
referred to as ``old @command{awk}.''
-Today, on most systems, when you run the @command{awk} utility,
+On most current systems, when you run the @command{awk} utility
you get some version of new @command{awk}.@footnote{Only
Solaris systems still use an old @command{awk} for the
default @command{awk} utility. A more modern @command{awk} lives in
@@ -1576,7 +1583,9 @@ the POSIX standard for @command{awk}.
This @value{DOCUMENT} has the difficult task of being both a tutorial and a reference.
If you are a novice, feel free to skip over details that seem too complex.
You should also ignore the many cross-references; they are for the
-expert user and for the online Info and HTML versions of the @value{DOCUMENT}.
+expert user and for the Info and
+@uref{http://www.gnu.org/software/gawk/manual/, HTML}
+versions of the @value{DOCUMENT}.
@end ifnotinfo
There are sidebars
@@ -1609,7 +1618,7 @@ This @value{DOCUMENT} is split into several parts, as follows:
@itemize @value{BULLET}
@item
-Part I describes the @command{awk} language and @command{gawk} program in detail.
+Part I describes the @command{awk} language and the @command{gawk} program in detail.
It starts with the basics, and continues through all of the features of @command{awk}.
It contains the following chapters:
@@ -1656,10 +1665,10 @@ doing something when a record is matched, and the predefined variables
@item
@ref{Arrays},
-covers @command{awk}'s one-and-only data structure: associative arrays.
-Deleting array elements and whole arrays is also described, as well as
-sorting arrays in @command{gawk}. It also describes how @command{gawk}
-provides arrays of arrays.
+covers @command{awk}'s one-and-only data structure: the associative array.
+Deleting array elements and whole arrays is described, as well as
+sorting arrays in @command{gawk}. The @value{CHAPTER} also describes how
+@command{gawk} provides arrays of arrays.
@item
@ref{Functions},
@@ -1671,17 +1680,17 @@ as well as how to define your own functions. It also discusses how
@item
Part II shows how to use @command{awk} and @command{gawk} for problem solving.
There is lots of code here for you to read and learn from.
-It contains the following chapters:
+This part contains the following chapters:
@c nested
@itemize @value{MINUS}
@item
-@ref{Library Functions}, which provides a number of functions meant to
+@ref{Library Functions}, provides a number of functions meant to
be used from main @command{awk} programs.
@item
@ref{Sample Programs},
-which provides many sample @command{awk} programs.
+provides many sample @command{awk} programs.
@end itemize
Reading these two chapters allows you to see @command{awk}
@@ -1734,7 +1743,7 @@ including the GNU General Public License:
@item
@ref{Language History},
describes how the @command{awk} language has evolved since
-its first release to present. It also describes how @command{gawk}
+its first release to the present. It also describes how @command{gawk}
has acquired features over time.
@item
@@ -1745,15 +1754,39 @@ and how to compile and use it on different
non-POSIX systems. It also describes how to report bugs
in @command{gawk} and where to get other freely
available @command{awk} implementations.
-@end itemize
@ifset FOR_PRINT
-@itemize @value{MINUS}
@item
@ref{Copying},
presents the license that covers the @command{gawk} source code.
+@end ifset
+
+@ifclear FOR_PRINT
+@item
+@ref{Notes},
+describes how to disable @command{gawk}'s extensions, as
+well as how to contribute new code to @command{gawk},
+and some possible future directions for @command{gawk} development.
+
+@item
+@ref{Basic Concepts},
+provides some very cursory background material for those who
+are completely unfamiliar with computer programming.
+
+The @ref{Glossary}, defines most, if not all, of the significant terms used
+throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
+try looking them up here.
+
+@item
+@ref{Copying}, and
+@ref{GNU Free Documentation License},
+present the licenses that cover the @command{gawk} source code
+and this @value{DOCUMENT}, respectively.
+@end ifclear
+@end itemize
@end itemize
+@ifset FOR_PRINT
The version of this @value{DOCUMENT} distributed with @command{gawk}
contains additional appendices and other end material.
To save space, we have omitted them from the
@@ -1777,7 +1810,7 @@ are completely unfamiliar with computer programming.
@item
@uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html,
The Glossary}
-defines most, if not all of, the significant terms used
+defines most, if not all, of the significant terms used
throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
try looking them up here.
@@ -1791,32 +1824,6 @@ Some of the chapters have exercise sections; these have also been
omitted from the print edition but are available online.
@end ifset
-@ifclear FOR_PRINT
-@itemize @value{MINUS}
-@item
-@ref{Notes},
-describes how to disable @command{gawk}'s extensions, as
-well as how to contribute new code to @command{gawk},
-and some possible future directions for @command{gawk} development.
-
-@item
-@ref{Basic Concepts},
-provides some very cursory background material for those who
-are completely unfamiliar with computer programming.
-
-The @ref{Glossary}, defines most, if not all of, the significant terms used
-throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
-try looking them up here.
-
-@item
-@ref{Copying}, and
-@ref{GNU Free Documentation License},
-present the licenses that cover the @command{gawk} source code
-and this @value{DOCUMENT}, respectively.
-@end itemize
-@end ifclear
-@end itemize
-
@c FULLXREF OFF
@node Conventions
@@ -1847,7 +1854,7 @@ This typically represents the command's standard output.
Output from the command, usually its standard output, appears
@code{like this}.
@end ifset
-Error messages, and other output on the command's standard error, are preceded
+Error messages and other output on the command's standard error are preceded
by the glyph ``@error{}''. For example:
@example
@@ -1858,15 +1865,23 @@ $ @kbd{echo hello on stderr 1>&2}
@end example
@ifnotinfo
-In the text, command names appear in @code{this font}, while code segments
+In the text, almost anything related to programming, such as
+command names,
+variable and function names, and string, numeric and regexp constants
+appear in @code{this font}. Code fragments
appear in the same font and quoted, @samp{like this}.
+Things that are replaced by the user or programmer
+appear in @var{this font}.
Options look like this: @option{-f}.
+@value{FFN}s are indicated like this: @file{/path/to/ourfile}.
+@ifclear FOR_PRINT
Some things are
emphasized @emph{like this}, and if a point needs to be made
-strongly, it is done @strong{like this}. The first occurrence of
+strongly, it is done @strong{like this}.
+@end ifclear
+The first occurrence of
a new term is usually its @dfn{definition} and appears in the same
font as the previous occurrence of ``definition'' in this sentence.
-Finally, @value{FN}s are indicated like this: @file{/path/to/ourfile}.
@end ifnotinfo
Characters that you type at the keyboard look @kbd{like this}. In particular,
@@ -1874,7 +1889,7 @@ there are special characters called ``control characters.'' These are
characters that you type by holding down both the @kbd{CONTROL} key and
another key, at the same time. For example, a @kbd{Ctrl-d} is typed
by first pressing and holding the @kbd{CONTROL} key, next
-pressing the @kbd{d} key and finally releasing both keys.
+pressing the @kbd{d} key, and finally releasing both keys.
For the sake of brevity, throughout this @value{DOCUMENT}, we refer to
Brian Kernighan's version of @command{awk} as ``BWK @command{awk}.''
@@ -1910,7 +1925,7 @@ the picture of a flashlight in the margin, as shown here.
@value{DARKCORNER}
@end iftex
@ifnottex
-``(d.c.)''.
+``(d.c.).''
@end ifnottex
@ifclear FOR_PRINT
They also appear in the index under the heading ``dark corner.''
@@ -1945,12 +1960,12 @@ Emacs editor. GNU Emacs is the most widely used version of Emacs today.
@cindex GPL (General Public License)
@cindex General Public License, See GPL
@cindex documentation, online
-The GNU@footnote{GNU stands for ``GNU's not Unix.''}
+The GNU@footnote{GNU stands for ``GNU's Not Unix.''}
Project is an ongoing effort on the part of the Free Software
Foundation to create a complete, freely distributable, POSIX-compliant
computing environment.
-The FSF uses the ``GNU General Public License'' (GPL) to ensure that
-their software's
+The FSF uses the GNU General Public License (GPL) to ensure that
+its software's
source code is always available to the end user.
@ifclear FOR_PRINT
A copy of the GPL is included
@@ -2010,7 +2025,7 @@ version of @command{awk}.
I started working with that version in the fall of 1988.
As work on it progressed,
the FSF published several preliminary versions (numbered 0.@var{x}).
-In 1996, Edition 1.0 was released with @command{gawk} 3.0.0.
+In 1996, edition 1.0 was released with @command{gawk} 3.0.0.
The FSF published the first two editions under
the title @cite{The GNU Awk User's Guide}.
@ifset FOR_PRINT
@@ -2022,7 +2037,7 @@ the third edition in 2001.
This edition maintains the basic structure of the previous editions.
For FSF edition 4.0, the content was thoroughly reviewed and updated. All
references to @command{gawk} versions prior to 4.0 were removed.
-Of significant note for that edition was @ref{Debugger}.
+Of significant note for that edition was the addition of @ref{Debugger}.
For FSF edition
@ifclear FOR_PRINT
@@ -2037,7 +2052,7 @@ and the major new additions are @ref{Arbitrary Precision Arithmetic},
and @ref{Dynamic Extensions}.
This @value{DOCUMENT} will undoubtedly continue to evolve. If you
-find an error in this @value{DOCUMENT}, please report it! @DBXREF{Bugs}
+find an error in the @value{DOCUMENT}, please report it! @DBXREF{Bugs}
for information on submitting problem reports electronically.
@ifset FOR_PRINT
@@ -2047,7 +2062,7 @@ for information on submitting problem reports electronically.
You may have a newer version of @command{gawk} than the
one described here. To find out what has changed,
you should first look at the @file{NEWS} file in the @command{gawk}
-distribution, which provides a high-level summary of what changed in
+distribution, which provides a high-level summary of the changes in
each release.
You can then look at the @uref{http://www.gnu.org/software/gawk/manual/,
@@ -2101,7 +2116,7 @@ The initial draft of @cite{The GAWK Manual} had the following acknowledgments:
Many people need to be thanked for their assistance in producing this
manual. Jay Fenlason contributed many ideas and sample programs. Richard
Mlynarik and Robert Chassell gave helpful comments on drafts of this
-manual. The paper @cite{A Supplemental Document for @command{awk}} by John W.@:
+manual. The paper @cite{A Supplemental Document for AWK} by John W.@:
Pierce of the Chemistry Department at UC San Diego, pinpointed several
issues relevant both to @command{awk} implementation and to this manual, that
would otherwise have escaped us.
@@ -2112,12 +2127,18 @@ I would like to acknowledge Richard M.@: Stallman, for his vision of a
better world and for his courage in founding the FSF and starting the
GNU Project.
+@ifclear FOR_PRINT
Earlier editions of this @value{DOCUMENT} had the following acknowledgements:
+@end ifclear
+@ifset FOR_PRINT
+The previous edition of this @value{DOCUMENT} had
+the following acknowledgements:
+@end ifset
@quotation
The following people (in alphabetical order)
provided helpful comments on various
-versions of this book,
+versions of this book:
Rick Adams,
Dr.@: Nelson H.F. Beebe,
Karl Berry,
@@ -2145,7 +2166,7 @@ Robert J.@: Chassell provided much valuable advice on
the use of Texinfo.
He also deserves special thanks for
convincing me @emph{not} to title this @value{DOCUMENT}
-@cite{How To Gawk Politely}.
+@cite{How to Gawk Politely}.
Karl Berry helped significantly with the @TeX{} part of Texinfo.
@cindex Hartholz, Marshall
@@ -2229,9 +2250,9 @@ a number of people. @DBXREF{Contributors} for the full list.
@ifset FOR_PRINT
@cindex Oram, Andy
-Thanks to Andy Oram, of O'Reilly Media, for initiating
+Thanks to Andy Oram of O'Reilly Media for initiating
the fourth edition and for his support during the work.
-Thanks to Jasmine Kwityn for her copy-editing work.
+Thanks to Jasmine Kwityn for her copyediting work.
@end ifset
Thanks to Michael Brennan for the Forewords.
@@ -2239,7 +2260,7 @@ Thanks to Michael Brennan for the Forewords.
@cindex Duman, Patrice
@cindex Berry, Karl
Thanks to Patrice Dumas for the new @command{makeinfo} program.
-Thanks to Karl Berry who continues to work to keep
+Thanks to Karl Berry, who continues to work to keep
the Texinfo markup language sane.
@cindex Kernighan, Brian
@@ -2249,8 +2270,8 @@ Robert P.J.@: Day, Michael Brennan, and Brian Kernighan kindly acted as
reviewers for the 2015 edition of this @value{DOCUMENT}. Their feedback
helped improve the final work.
-I would like to thank Brian Kernighan for invaluable assistance during the
-testing and debugging of @command{gawk}, and for ongoing
+I would also like to thank Brian Kernighan for his invaluable assistance during the
+testing and debugging of @command{gawk}, and for his ongoing
help and advice in clarifying numerous points about the language.
We could not have done nearly as good a job on either @command{gawk}
or its documentation without his help.
@@ -2273,14 +2294,14 @@ which they raised and educated me.
Finally, I also must acknowledge my gratitude to G-d, for the many opportunities
He has sent my way, as well as for the gifts He has given me with which to
take advantage of those opportunities.
-@iftex
+@ifnotdocbook
@sp 2
@noindent
Arnold Robbins @*
Nof Ayalon @*
Israel @*
-December 2014
-@end iftex
+February 2015
+@end ifnotdocbook
@ifnotinfo
@part @value{PART1}The @command{awk} Language
@@ -2361,9 +2382,9 @@ an advanced feature that we will ignore for now;
pattern to search for and one action to perform
upon finding the pattern.
-Syntactically, a rule consists of a pattern followed by an action. The
-action is enclosed in braces to separate it from the pattern.
-Newlines usually separate rules. Therefore, an @command{awk}
+Syntactically, a rule consists of a @dfn{pattern} followed by an
+@dfn{action}. The action is enclosed in braces to separate it from the
+pattern. Newlines usually separate rules. Therefore, an @command{awk}
program looks like this:
@example
@@ -2437,8 +2458,8 @@ awk '@var{program}' @var{input-file1} @var{input-file2} @dots{}
@end example
@noindent
-where @var{program} consists of a series of @var{patterns} and
-@var{actions}, as described earlier.
+where @var{program} consists of a series of patterns and
+actions, as described earlier.
@cindex single quote (@code{'})
@cindex @code{'} (single quote)
@@ -2457,12 +2478,12 @@ programs from shell scripts, because it avoids the need for a separate
file for the @command{awk} program. A self-contained shell script is more
reliable because there are no other files to misplace.
-Later in this chapter,
+Later in this chapter, in
@ifdocbook
the section
@end ifdocbook
@ref{Very Simple},
-presents several short,
+we'll see examples of several short,
self-contained programs.
@node Read Terminal
@@ -2483,10 +2504,10 @@ awk '@var{program}'
which usually means whatever you type on the keyboard. This continues
until you indicate end-of-file by typing @kbd{Ctrl-d}.
@ifset FOR_PRINT
-(On other operating systems, the end-of-file character may be different.)
+(On non-POSIX operating systems, the end-of-file character may be different.)
@end ifset
@ifclear FOR_PRINT
-(On other operating systems, the end-of-file character may be different.
+(On non-POSIX operating systems, the end-of-file character may be different.
For example, on OS/2, it is @kbd{Ctrl-z}.)
@end ifclear
@@ -2586,11 +2607,9 @@ for programs that are provided on the @command{awk} command line.
(Also, placing the program in a file allows us to use a literal single quote in the program
text, instead of the magic @samp{\47}.)
-@c STARTOFRANGE sq1x
@cindex single quote (@code{'}) in @command{gawk} command lines
-@c STARTOFRANGE qs2x
@cindex @code{'} (single quote) in @command{gawk} command lines
-If you want to clearly identify your @command{awk} program files as such,
+If you want to clearly identify an @command{awk} program file as such,
you can add the extension @file{.awk} to the @value{FN}. This doesn't
affect the execution of the @command{awk} program but it does make
``housekeeping'' easier.
@@ -2804,7 +2823,7 @@ The next @value{SUBSECTION} describes the shell's quoting rules.
@end quotation
@node Quoting
-@subsection Shell-Quoting Issues
+@subsection Shell Quoting Issues
@cindex shell quoting, rules for
@menu
@@ -2941,7 +2960,7 @@ $ @kbd{awk 'BEGIN @{ print "Here is a single quote <'"'"'>" @}'}
@noindent
This program consists of three concatenated quoted strings. The first and the
-third are single quoted, the second is double quoted.
+third are single-quoted, and the second is double-quoted.
This can be ``simplified'' to:
@@ -2962,8 +2981,6 @@ $ @kbd{awk "BEGIN @{ print \"Here is a single quote <'>\" @}"}
@end example
@noindent
-@c ENDOFRANGE sq1x
-@c ENDOFRANGE qs2x
This option is also painful, because double quotes, backslashes, and dollar signs
are very common in more advanced @command{awk} programs.
@@ -2980,7 +2997,7 @@ $ @kbd{awk 'BEGIN @{ print "Here is a double quote <\42>" @}'}
@end example
@noindent
-This works nicely, except that you should comment clearly what the
+This works nicely, but you should comment clearly what the
escapes mean.
A fourth option is to use command-line variable assignment, like this:
@@ -2991,11 +3008,11 @@ $ @kbd{awk -v sq="'" 'BEGIN @{ print "Here is a single quote <" sq ">" @}'}
@end example
(Here, the two string constants and the value of @code{sq} are concatenated
-into a single string which is printed by @code{print}.)
+into a single string that is printed by @code{print}.)
If you really need both single and double quotes in your @command{awk}
program, it is probably best to move it into a separate file, where
-the shell won't be part of the picture, and you can say what you mean.
+the shell won't be part of the picture and you can say what you mean.
@node DOS Quoting
@subsubsection Quoting in MS-Windows Batch Files
@@ -3094,7 +3111,7 @@ of green crates shipped, the number of red boxes shipped, the number of
orange bags shipped, and the number of blue packages shipped,
respectively. There are 16 entries, covering the 12 months of last year
and the first four months of the current year.
-An empty line separates the data for the two years.
+An empty line separates the data for the two years:
@example
@c file eg/data/inventory-shipped
@@ -3128,7 +3145,7 @@ The following command runs a simple @command{awk} program that searches the
input file @file{mail-list} for the character string @samp{li} (a
grouping of characters is usually called a @dfn{string};
the term @dfn{string} is based on similar usage in English, such
-as ``a string of pearls,'' or ``a string of cars in a train''):
+as ``a string of pearls'' or ``a string of cars in a train''):
@example
awk '/li/ @{ print $0 @}' mail-list
@@ -3175,7 +3192,7 @@ omitting the @code{print} statement but retaining the braces makes an
empty action that does nothing (i.e., no lines are printed).
@cindex @command{awk} programs, one-line examples
-Many practical @command{awk} programs are just a line or two. Following is a
+Many practical @command{awk} programs are just a line or two long. Following is a
collection of useful, short programs to get you started. Some of these
programs contain constructs that haven't been covered yet. (The description
of the program will give you a good idea of what is going on, but you'll
@@ -3196,7 +3213,7 @@ Print every line that is longer than 80 characters:
awk 'length($0) > 80' data
@end example
-The sole rule has a relational expression as its pattern and it has no
+The sole rule has a relational expression as its pattern and has no
action---so it uses the default action, printing the record.
@item
@@ -3283,7 +3300,7 @@ Print the even-numbered lines in the @value{DF}:
awk 'NR % 2 == 0' data
@end example
-If you use the expression @samp{NR % 2 == 1} instead,
+If you used the expression @samp{NR % 2 == 1} instead,
the program would print the odd-numbered lines.
@end itemize
@@ -3299,8 +3316,13 @@ no actions run.
After processing all the rules that match the line (and perhaps there are none),
@command{awk} reads the next line. (However,
-@pxref{Next Statement},
+@DBPXREF{Next Statement}
+@ifdocbook
+and @DBREF{Nextfile Statement}.)
+@end ifdocbook
+@ifnotdocbook
and also @pxref{Nextfile Statement}.)
+@end ifnotdocbook
This continues until the program reaches the end of the file.
For example, the following @command{awk} program contains two rules:
@@ -3565,7 +3587,7 @@ performing bit manipulation, for runtime string translation (internationalizatio
determining the type of a variable,
and array sorting.
-As we develop our presentation of the @command{awk} language, we introduce
+As we develop our presentation of the @command{awk} language, we will introduce
most of the variables and many of the functions. They are described
systematically in @DBREF{Built-in Variables} and in
@ref{Built-in}.
@@ -3619,7 +3641,7 @@ and Perl.}
@c FIXME: Review this chapter for summary of builtin functions called.
@itemize @value{BULLET}
@item
-Programs in @command{awk} consist of @var{pattern}-@var{action} pairs.
+Programs in @command{awk} consist of @var{pattern}--@var{action} pairs.
@item
An @var{action} without a @var{pattern} always runs. The default
@@ -3648,7 +3670,7 @@ part of a larger shell script (or MS-Windows batch file).
You may use backslash continuation to continue a source line.
Lines are automatically continued after
a comma, open brace, question mark, colon,
-@samp{||}, @samp{&&}, @code{do} and @code{else}.
+@samp{||}, @samp{&&}, @code{do}, and @code{else}.
@end itemize
@node Invoking Gawk
@@ -3723,20 +3745,16 @@ warning that the program is empty.
@node Options
@section Command-Line Options
-@c STARTOFRANGE ocl
@cindex options, command-line
-@c STARTOFRANGE clo
@cindex command line, options
-@c STARTOFRANGE gnulo
@cindex GNU long options
-@c STARTOFRANGE longo
@cindex options, long
Options begin with a dash and consist of a single character.
GNU-style long options consist of two dashes and a keyword.
The keyword can be abbreviated, as long as the abbreviation allows the option
-to be uniquely identified. If the option takes an argument, then the
-keyword is either immediately followed by an equals sign (@samp{=}) and the
+to be uniquely identified. If the option takes an argument, either the
+keyword is immediately followed by an equals sign (@samp{=}) and the
argument's value, or the keyword and the argument's value are separated
by whitespace.
If a particular option with a value is given more than once, it is the
@@ -3763,7 +3781,7 @@ Set the @code{FS} variable to @var{fs}
@cindex @option{-f} option
@cindex @option{--file} option
@cindex @command{awk} programs, location of
-Read @command{awk} program source from @var{source-file}
+Read the @command{awk} program source from @var{source-file}
instead of in the first nonoption argument.
This option may be given multiple times; the @command{awk}
program consists of the concatenation of the contents of
@@ -3818,8 +3836,6 @@ by the user that could start with @samp{-}.
It is also useful for passing options on to the @command{awk}
program; see @ref{Getopt Function}.
@end table
-@c ENDOFRANGE gnulo
-@c ENDOFRANGE longo
The following list describes @command{gawk}-specific options:
@@ -3831,14 +3847,14 @@ The following list describes @command{gawk}-specific options:
@cindex @option{--characters-as-bytes} option
Cause @command{gawk} to treat all input data as single-byte characters.
In addition, all output written with @code{print} or @code{printf}
-are treated as single-byte characters.
+is treated as single-byte characters.
Normally, @command{gawk} follows the POSIX standard and attempts to process
its input data according to the current locale (@pxref{Locales}). This can often involve
converting multibyte characters into wide characters (internally), and
can lead to problems or confusion if the input data does not contain valid
-multibyte characters. This option is an easy way to tell @command{gawk}:
-``hands off my data!''.
+multibyte characters. This option is an easy way to tell @command{gawk},
+``Hands off my data!''
@item @option{-c}
@itemx @option{--traditional}
@@ -3895,7 +3911,7 @@ Enable debugging of @command{awk} programs
By default, the debugger reads commands interactively from the keyboard
(standard input).
The optional @var{file} argument allows you to specify a file with a list
-of commands for the debugger to execute non-interactively.
+of commands for the debugger to execute noninteractively.
No space is allowed between the @option{-D} and @var{file}, if
@var{file} is supplied.
@@ -3955,7 +3971,7 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like so:
@cindex portable object files, generating
@cindex files, portable object, generating
Analyze the source program and
-generate a GNU @command{gettext} Portable Object Template file on standard
+generate a GNU @command{gettext} portable object template file on standard
output for all string constants that have been marked for translation.
@xref{Internationalization},
for information about this option.
@@ -3967,7 +3983,7 @@ for information about this option.
@cindex GNU long options, printing list of
@cindex options, printing list of
@cindex printing, list of options
-Print a ``usage'' message summarizing the short and long style options
+Print a ``usage'' message summarizing the short- and long-style options
that @command{gawk} accepts and then exit.
@item @option{-i} @var{source-file}
@@ -3977,7 +3993,7 @@ that @command{gawk} accepts and then exit.
@cindex @command{awk} programs, location of
Read an @command{awk} source library from @var{source-file}. This option
is completely equivalent to using the @code{@@include} directive inside
-your program. This option is very similar to the @option{-f} option,
+your program. It is very similar to the @option{-f} option,
but there are two important differences. First, when @option{-i} is
used, the program source is not loaded if it has been previously
loaded, whereas with @option{-f}, @command{gawk} always loads the file.
@@ -4062,7 +4078,7 @@ when parsing numeric input data (@pxref{Locales}).
@cindex @option{-o} option
@cindex @option{--pretty-print} option
Enable pretty-printing of @command{awk} programs.
-By default, output program is created in a file named @file{awkprof.out}
+By default, the output program is created in a file named @file{awkprof.out}
(@pxref{Profiling}).
The optional @var{file} argument allows you to specify a different
@value{FN} for the output.
@@ -4106,7 +4122,7 @@ in the left margin, and function call counts for each function.
Operate in strict POSIX mode. This disables all @command{gawk}
extensions (just like @option{--traditional}) and
disables all extensions not allowed by POSIX.
-@xref{Common Extensions}, for a summary of the extensions
+@DBXREF{Common Extensions} for a summary of the extensions
in @command{gawk} that are disabled by this option.
Also,
the following additional
@@ -4227,7 +4243,7 @@ source of data.)
Because it is clumsy using the standard @command{awk} mechanisms to mix
source file and command-line @command{awk} programs, @command{gawk}
provides the @option{-e} option. This does not require you to
-pre-empt the standard input for your source code; it allows you to easily
+preempt the standard input for your source code; it allows you to easily
mix command-line and library source code (@pxref{AWKPATH Variable}).
As with @option{-f}, the @option{-e} and @option{-i}
options may also be used multiple times on the command line.
@@ -4273,8 +4289,6 @@ setenv POSIXLY_CORRECT true
Having @env{POSIXLY_CORRECT} set is not recommended for daily use,
but it is good for testing the portability of your programs to other
environments.
-@c ENDOFRANGE ocl
-@c ENDOFRANGE clo
@node Other Arguments
@section Other Command-Line Arguments
@@ -4417,7 +4431,7 @@ file, unless the file is in the current directory.
But with @command{gawk}, if the @value{FN} supplied to the @option{-f}
or @option{-i} options
does not contain a directory separator @samp{/}, then @command{gawk} searches a list of
-directories (called the @dfn{search path}), one by one, looking for a
+directories (called the @dfn{search path}) one by one, looking for a
file with the specified name.
The search path is a string consisting of directory names
@@ -4458,9 +4472,9 @@ as an entry in the path or write a null entry in the path.
Different past versions of @command{gawk} would also look explicitly in
the current directory, either before or after the path search. As of
-@value{PVERSION} 4.1.2, this no longer happens, and if you wish to look
+@value{PVERSION} 4.1.2, this no longer happens; if you wish to look
in the current directory, you must include @file{.} either as a separate
-entry, or as a null entry in the search path.
+entry or as a null entry in the search path.
@end quotation
The default value for @env{AWKPATH} is
@@ -4538,6 +4552,8 @@ wait for input before returning with an error.
Controls the number of times @command{gawk} attempts to
retry a two-way TCP/IP (socket) connection before giving up.
@xref{TCP/IP Networking}.
+Note that when nonfatal I/O is enabled (@pxref{Nonfatal}),
+@command{gawk} only tries to open a TCP/IP socket once.
@item POSIXLY_CORRECT
Causes @command{gawk} to switch to POSIX-compatibility
@@ -4576,7 +4592,7 @@ If this variable exists, @command{gawk} includes the @value{FN}
and line number within the @command{gawk} source code
from which warning and/or fatal messages
are generated. Its purpose is to help isolate the source of a
-message, as there are multiple places which produce the
+message, as there are multiple places that produce the
same warning or error message.
@item GAWK_NO_DFA
@@ -4592,16 +4608,16 @@ This specifies the amount by which @command{gawk} should grow its
internal evaluation stack, when needed.
@item INT_CHAIN_MAX
-The intended maximum number of items @command{gawk} will maintain on a
+This specifies intended maximum number of items @command{gawk} will maintain on a
hash chain for managing arrays indexed by integers.
@item STR_CHAIN_MAX
-The intended maximum number of items @command{gawk} will maintain on a
+This specifies intended maximum number of items @command{gawk} will maintain on a
hash chain for managing arrays indexed by strings.
@item TIDYMEM
If this variable exists, @command{gawk} uses the @code{mtrace()} library
-calls from GNU LIBC to help track down possible memory leaks.
+calls from the GNU C library to help track down possible memory leaks.
@end table
@node Exit Status
@@ -4638,7 +4654,7 @@ The @code{@@include} keyword can be used to read external @command{awk} source
files. This gives you the ability to split large @command{awk} source files
into smaller, more manageable pieces, and also lets you reuse common @command{awk}
code from various @command{awk} scripts. In other words, you can group
-together @command{awk} functions, used to carry out specific tasks,
+together @command{awk} functions used to carry out specific tasks
into external files. These files can be used just like function libraries,
using the @code{@@include} keyword in conjunction with the @env{AWKPATH}
environment variable. Note that source files may also be included
@@ -4673,7 +4689,7 @@ $ @kbd{gawk -f test2}
@print{} This is script test2.
@end example
-@code{gawk} runs the @file{test2} script, which includes @file{test1}
+@command{gawk} runs the @file{test2} script, which includes @file{test1}
using the @code{@@include}
keyword. So, to include external @command{awk} source files, you just
use @code{@@include} followed by the name of the file to be included,
@@ -4728,11 +4744,12 @@ of the @env{AWKPATH} variable in command-line file searches
This is very helpful in constructing @command{gawk} function libraries.
If you have a large script with useful, general-purpose @command{awk}
functions, you can break it down into library files and put those files
-in a special directory. You can then include those ``libraries,'' using
-either the full pathnames of the files, or by setting the @env{AWKPATH}
+in a special directory. You can then include those ``libraries,''
+either by using the full pathnames of the files, or by setting the @env{AWKPATH}
environment variable accordingly and then using @code{@@include} with
-just the file part of the full pathname. Of course, you can have more
-than one directory to keep library files; the more complex the working
+just the file part of the full pathname. Of course,
+you can keep library files in more than one directory;
+the more complex the working
environment is, the more directories you may need to organize the files
to be included.
@@ -4745,8 +4762,8 @@ In particular, @code{@@include} is very useful for writing CGI scripts
to be run from web pages.
As mentioned in @ref{AWKPATH Variable}, the current directory is always
-searched first for source files, before searching in @env{AWKPATH},
-and this also applies to files named with @code{@@include}.
+searched first for source files, before searching in @env{AWKPATH};
+this also applies to files named with @code{@@include}.
@node Loading Shared Libraries
@section Loading Dynamic Extensions into Your Program
@@ -4800,8 +4817,8 @@ It also describes the @code{ordchr} extension.
@cindex features, deprecated
@cindex obsolete features
This @value{SECTION} describes features and/or command-line options from
-previous releases of @command{gawk} that are either not available in the
-current version or that are still supported but deprecated (meaning that
+previous releases of @command{gawk} that either are not available in the
+current version or are still supported but deprecated (meaning that
they will @emph{not} be in the next release).
The process-related special files @file{/dev/pid}, @file{/dev/ppid},
@@ -4881,7 +4898,7 @@ This seems to have been a long-undocumented feature in Unix @command{awk}.
Similarly, you may use @code{print} or @code{printf} statements in the
@var{init} and @var{increment} parts of a @code{for} loop. This is another
-long-undocumented ``feature'' of Unix @code{awk}.
+long-undocumented ``feature'' of Unix @command{awk}.
@end ignore
@@ -4898,7 +4915,7 @@ to run @command{awk}.
@item
The three standard options for all versions of @command{awk} are
-@option{-f}, @option{-F} and @option{-v}. @command{gawk} supplies these
+@option{-f}, @option{-F}, and @option{-v}. @command{gawk} supplies these
and many others, as well as corresponding GNU-style long options.
@item
@@ -4935,13 +4952,12 @@ and @option{-f} command-line options.
@item
@command{gawk} allows you to load additional functions written in C
or C++ using the @code{@@load} statement and/or the @option{-l} option.
-(This advanced feature is described later on in @ref{Dynamic Extensions}.)
+(This advanced feature is described later, in @ref{Dynamic Extensions}.)
@end itemize
@node Regexp
@chapter Regular Expressions
@cindex regexp
-@c STARTOFRANGE regexp
@cindex regular expressions
A @dfn{regular expression}, or @dfn{regexp}, is a way of describing a
@@ -5148,7 +5164,7 @@ Horizontal TAB, @kbd{Ctrl-i}, ASCII code 9 (HT).
@cindex @code{\} (backslash), @code{\v} escape sequence
@cindex backslash (@code{\}), @code{\v} escape sequence
@item \v
-Vertical tab, @kbd{Ctrl-k}, ASCII code 11 (VT).
+Vertical TAB, @kbd{Ctrl-k}, ASCII code 11 (VT).
@cindex @code{\} (backslash), @code{\}@var{nnn} escape sequence
@cindex backslash (@code{\}), @code{\}@var{nnn} escape sequence
@@ -5174,13 +5190,12 @@ letters or numbers. @value{COMMONEXT}
@quotation CAUTION
In ISO C, the escape sequence continues until the first nonhexadecimal
digit is seen.
-@c FIXME: Add exact version here.
For many years, @command{gawk} would continue incorporating
hexadecimal digits into the value until a non-hexadecimal digit
or the end of the string was encountered.
However, using more than two hexadecimal digits produced
undefined results.
-As of @value{PVERSION} @strong{FIXME:} 4.3.0, only two digits
+As of @value{PVERSION} 4.2, only two digits
are processed.
@end quotation
@@ -5223,7 +5238,7 @@ characters @samp{a+b}.
@cindex @code{\} (backslash), in escape sequences
@cindex portability
For complete portability, do not use a backslash before any character not
-shown in the previous list and that is not an operator.
+shown in the previous list or that is not an operator.
@c 11/2014: Moved so as to not stack sidebars
@cindex sidebar, Backslash Before Regular Characters
@@ -5385,7 +5400,6 @@ escape sequences literally when used in regexp constants. Thus,
@node Regexp Operators
@section Regular Expression Operators
-@c STARTOFRANGE regexpo
@cindex regular expressions, operators
@cindex metacharacters in regular expressions
@@ -5403,7 +5417,7 @@ are recognized and converted into corresponding real characters as
the very first step in processing regexps.
Here is a list of metacharacters. All characters that are not escape
-sequences and that are not listed in the following stand for themselves:
+sequences and that are not listed here stand for themselves:
@c Use @asis so the docbook comes out ok. Sigh.
@table @asis
@@ -5526,7 +5540,7 @@ just @samp{p} if no @samp{h}s are present.
There are two subtle points to understand about how @samp{*} works.
First, the @samp{*} applies only to the single preceding regular expression
component (e.g., in @samp{ph*}, it applies just to the @samp{h}).
-To cause @samp{*} to apply to a larger sub-expression, use parentheses:
+To cause @samp{*} to apply to a larger subexpression, use parentheses:
@samp{(ph)*} matches @samp{ph}, @samp{phph}, @samp{phphph}, and so on.
Second, @samp{*} finds as many repetitions as possible. If the text
@@ -5565,10 +5579,10 @@ is repeated at least @var{n} times:
Matches @samp{whhhy}, but not @samp{why} or @samp{whhhhy}.
@item wh@{3,5@}y
-Matches @samp{whhhy}, @samp{whhhhy}, or @samp{whhhhhy}, only.
+Matches @samp{whhhy}, @samp{whhhhy}, or @samp{whhhhhy} only.
@item wh@{2,@}y
-Matches @samp{whhy} or @samp{whhhy}, and so on.
+Matches @samp{whhy}, @samp{whhhy}, and so on.
@end table
@cindex POSIX @command{awk}, interval expressions in
@@ -5617,11 +5631,9 @@ usage as a syntax error.
If @command{gawk} is in compatibility mode (@pxref{Options}), interval
expressions are not available in regular expressions.
-@c ENDOFRANGE regexpo
@node Bracket Expressions
@section Using Bracket Expressions
-@c STARTOFRANGE charlist
@cindex bracket expressions
@cindex bracket expressions, range expressions
@cindex range expressions (regexps)
@@ -5697,7 +5709,7 @@ POSIX standard.
(a space is printable but not visible, whereas an @samp{a} is both)
@item @code{[:lower:]} @tab Lowercase alphabetic characters
@item @code{[:print:]} @tab Printable characters (characters that are not control characters)
-@item @code{[:punct:]} @tab Punctuation characters (characters that are not letters, digits
+@item @code{[:punct:]} @tab Punctuation characters (characters that are not letters, digits,
control characters, or space characters)
@item @code{[:space:]} @tab Space characters (such as space, TAB, and formfeed, to name a few)
@item @code{[:upper:]} @tab Uppercase alphabetic characters
@@ -5717,11 +5729,11 @@ and numeric characters in your character set.
@c Date: Tue, 01 Jul 2014 07:39:51 +0200
@c From: Hermann Peifer <peifer@gmx.eu>
Some utilities that match regular expressions provide a nonstandard
-@code{[:ascii:]} character class; @command{awk} does not. However, you
-can simulate such a construct using @code{[\x00-\x7F]}. This matches
+@samp{[:ascii:]} character class; @command{awk} does not. However, you
+can simulate such a construct using @samp{[\x00-\x7F]}. This matches
all values numerically between zero and 127, which is the defined
range of the ASCII character set. Use a complemented character list
-(@code{[^\x00-\x7F]}) to match any single-byte characters that are not
+(@samp{[^\x00-\x7F]}) to match any single-byte characters that are not
in the ASCII range.
@cindex bracket expressions, collating elements
@@ -5750,8 +5762,8 @@ Locale-specific names for a list of
characters that are equal. The name is enclosed between
@samp{[=} and @samp{=]}.
For example, the name @samp{e} might be used to represent all of
-``e,'' ``@`e,'' and ``@'e.'' In this case, @samp{[[=e=]]} is a regexp
-that matches any of @samp{e}, @samp{@'e}, or @samp{@`e}.
+``e,'' ``@^e,'' ``@`e,'' and ``@'e.'' In this case, @samp{[[=e=]]} is a regexp
+that matches any of @samp{e}, @samp{@^e}, @samp{@'e}, or @samp{@`e}.
@end table
These features are very valuable in non-English-speaking locales.
@@ -5765,7 +5777,6 @@ expression matching currently recognize only POSIX character classes;
they do not recognize collating symbols or equivalence classes.
@end quotation
@c maybe one day ...
-@c ENDOFRANGE charlist
@node Leftmost Longest
@section How Much Text Matches?
@@ -5781,7 +5792,7 @@ echo aaaabcd | awk '@{ sub(/a+/, "<A>"); print @}'
This example uses the @code{sub()} function to make a change to the input
record. (@code{sub()} replaces the first instance of any text matched
by the first argument with the string provided as the second argument;
-@pxref{String Functions}). Here, the regexp @code{/a+/} indicates ``one
+@pxref{String Functions}.) Here, the regexp @code{/a+/} indicates ``one
or more @samp{a} characters,'' and the replacement text is @samp{<A>}.
The input contains four @samp{a} characters.
@@ -5809,9 +5820,7 @@ and also @pxref{Field Separators}).
@node Computed Regexps
@section Using Dynamic Regexps
-@c STARTOFRANGE dregexp
@cindex regular expressions, computed
-@c STARTOFRANGE regexpd
@cindex regular expressions, dynamic
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
@@ -5837,14 +5846,14 @@ and tests whether the input record matches this regexp.
@quotation NOTE
When using the @samp{~} and @samp{!~}
-operators, there is a difference between a regexp constant
+operators, be aware that there is a difference between a regexp constant
enclosed in slashes and a string constant enclosed in double quotes.
If you are going to use a string constant, you have to understand that
the string is, in essence, scanned @emph{twice}: the first time when
@command{awk} reads your program, and the second time when it goes to
match the string on the lefthand side of the operator with the pattern
on the right. This is true of any string-valued expression (such as
-@code{digits_regexp}, shown previously), not just string constants.
+@code{digits_regexp}, shown in the previous example), not just string constants.
@end quotation
@cindex regexp constants, slashes vs.@: quotes
@@ -5962,17 +5971,13 @@ $ @kbd{awk '$0 ~ /[ \t\n]/'}
occur often in practice, but it's worth noting for future reference.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE dregexp
-@c ENDOFRANGE regexpd
@node GNU Regexp Operators
@section @command{gawk}-Specific Regexp Operators
@c This section adapted (long ago) from the regex-0.12 manual
-@c STARTOFRANGE regexpg
@cindex regular expressions, operators, @command{gawk}
-@c STARTOFRANGE gregexp
@cindex @command{gawk}, regular expressions, operators
@cindex operators, GNU-specific
@cindex regular expressions, operators, for words
@@ -6048,7 +6053,7 @@ matches either @samp{ball} or @samp{balls}, as a separate word.
@item \B
Matches the empty string that occurs between two
word-constituent characters. For example,
-@code{/\Brat\B/} matches @samp{crate} but it does not match @samp{dirty rat}.
+@code{/\Brat\B/} matches @samp{crate}, but it does not match @samp{dirty rat}.
@samp{\B} is essentially the opposite of @samp{\y}.
@end table
@@ -6067,14 +6072,14 @@ The operators are:
@cindex backslash (@code{\}), @code{\`} operator (@command{gawk})
@cindex @code{\} (backslash), @code{\`} operator (@command{gawk})
Matches the empty string at the
-beginning of a buffer (string).
+beginning of a buffer (string)
@c @cindex operators, @code{\'} (@command{gawk})
@cindex backslash (@code{\}), @code{\'} operator (@command{gawk})
@cindex @code{\} (backslash), @code{\'} operator (@command{gawk})
@item \'
Matches the empty string at the
-end of a buffer (string).
+end of a buffer (string)
@end table
@cindex @code{^} (caret), regexp operator
@@ -6137,15 +6142,11 @@ Allow interval expressions in regexps, if @option{--traditional}
has been provided.
Otherwise, interval expressions are available by default.
@end table
-@c ENDOFRANGE gregexp
-@c ENDOFRANGE regexpg
@node Case-sensitivity
@section Case Sensitivity in Matching
-@c STARTOFRANGE regexpcs
@cindex regular expressions, case sensitivity
-@c STARTOFRANGE csregexp
@cindex case sensitivity, regexps and
Case is normally significant in regular expressions, both when matching
ordinary characters (i.e., not metacharacters) and inside bracket
@@ -6237,8 +6238,6 @@ the right thing.}
The value of @code{IGNORECASE} has no effect if @command{gawk} is in
compatibility mode (@pxref{Options}).
Case is always significant in compatibility mode.
-@c ENDOFRANGE csregexp
-@c ENDOFRANGE regexpcs
@node Regexp Summary
@section Summary
@@ -6285,12 +6284,10 @@ versions, use @code{tolower()} or @code{toupper()}.
@end itemize
-@c ENDOFRANGE regexp
@node Reading Files
@chapter Reading Input Files
-@c STARTOFRANGE infir
@cindex reading input files
@cindex input files, reading
@cindex input files
@@ -6315,7 +6312,7 @@ This makes it more convenient for programs to work on the parts of a record.
@cindex @code{getline} command
On rare occasions, you may need to use the @code{getline} command.
-The @code{getline} command is valuable, both because it
+The @code{getline} command is valuable both because it
can do explicit input from any number of files, and because the files
used with it do not have to be named on the @command{awk} command line
(@pxref{Getline}).
@@ -6332,6 +6329,7 @@ used with it do not have to be named on the @command{awk} command line
* Getline:: Reading files under explicit program control
using the @code{getline} function.
* Read Timeout:: Reading input with a timeout.
+* Retrying Input:: Retrying input after certain errors.
* Command-line directories:: What happens if you put a directory on the
command line.
* Input Summary:: Input summary.
@@ -6341,9 +6339,7 @@ used with it do not have to be named on the @command{awk} command line
@node Records
@section How Input Is Split into Records
-@c STARTOFRANGE inspl
@cindex input, splitting into records
-@c STARTOFRANGE recspl
@cindex records, splitting input into
@cindex @code{NR} variable
@cindex @code{FNR} variable
@@ -6368,8 +6364,8 @@ never automatically reset to zero.
Records are separated by a character called the @dfn{record separator}.
By default, the record separator is the newline character.
This is why records are, by default, single lines.
-A different character can be used for the record separator by
-assigning the character to the predefined variable @code{RS}.
+To use a different character for the record separator,
+simply assign that character to the predefined variable @code{RS}.
@cindex newlines, as record separators
@cindex @code{RS} variable
@@ -6392,8 +6388,8 @@ awk 'BEGIN @{ RS = "u" @}
@noindent
changes the value of @code{RS} to @samp{u}, before reading any input.
-This is a string whose first character is the letter ``u''; as a result, records
-are separated by the letter ``u.'' Then the input file is read, and the second
+The new value is a string whose first character is the letter ``u''; as a result, records
+are separated by the letter ``u''. Then the input file is read, and the second
rule in the @command{awk} program (the action with no pattern) prints each
record. Because each @code{print} statement adds a newline at the end of
its output, this @command{awk} program copies the input
@@ -6454,8 +6450,8 @@ Bill 555-1675 bill.drowning@@hotmail.com A
@end example
@noindent
-It contains no @samp{u} so there is no reason to split the record,
-unlike the others which have one or more occurrences of the @samp{u}.
+It contains no @samp{u}, so there is no reason to split the record,
+unlike the others, which each have one or more occurrences of the @samp{u}.
In fact, this record is treated as part of the previous record;
the newline separating them in the output
is the original newline in the @value{DF}, not the one added by
@@ -6550,7 +6546,7 @@ contains the same single character. However, when @code{RS} is a
regular expression, @code{RT} contains
the actual input text that matched the regular expression.
-If the input file ended without any text that matches @code{RS},
+If the input file ends without any text matching @code{RS},
@command{gawk} sets @code{RT} to the null string.
The following example illustrates both of these features.
@@ -6700,8 +6696,6 @@ whole files. If you are using @command{gawk}, see @DBREF{Extension Sample
Readfile} for another option.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE inspl
-@c ENDOFRANGE recspl
@node Fields
@section Examining Fields
@@ -6709,7 +6703,6 @@ Readfile} for another option.
@cindex examining fields
@cindex fields
@cindex accessing fields
-@c STARTOFRANGE fiex
@cindex fields, examining
@cindex POSIX @command{awk}, field separators and
@cindex field separators, POSIX and
@@ -6734,11 +6727,11 @@ simple @command{awk} programs so powerful.
@cindex @code{$} (dollar sign), @code{$} field operator
@cindex dollar sign (@code{$}), @code{$} field operator
@cindex field operators@comma{} dollar sign as
-You use a dollar-sign (@samp{$})
+You use a dollar sign (@samp{$})
to refer to a field in an @command{awk} program,
followed by the number of the field you want. Thus, @code{$1}
refers to the first field, @code{$2} to the second, and so on.
-(Unlike the Unix shells, the field numbers are not limited to single digits.
+(Unlike in the Unix shells, the field numbers are not limited to single digits.
@code{$127} is the 127th field in the record.)
For example, suppose the following is a line of input:
@@ -6764,7 +6757,7 @@ If you try to reference a field beyond the last
one (such as @code{$8} when the record has only seven fields), you get
the empty string. (If used in a numeric operation, you get zero.)
-The use of @code{$0}, which looks like a reference to the ``zero-th'' field, is
+The use of @code{$0}, which looks like a reference to the ``zeroth'' field, is
a special case: it represents the whole input record. Use it
when you are not interested in specific fields.
Here are some more examples:
@@ -6790,7 +6783,6 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list}
@print{} Julie F
@print{} Samuel A
@end example
-@c ENDOFRANGE fiex
@node Nonconstant Fields
@section Nonconstant Field Numbers
@@ -6820,13 +6812,13 @@ awk '@{ print $(2*2) @}' mail-list
@end example
@command{awk} evaluates the expression @samp{(2*2)} and uses
-its value as the number of the field to print. The @samp{*} sign
+its value as the number of the field to print. The @samp{*}
represents multiplication, so the expression @samp{2*2} evaluates to four.
The parentheses are used so that the multiplication is done before the
@samp{$} operation; they are necessary whenever there is a binary
operator@footnote{A @dfn{binary operator}, such as @samp{*} for
multiplication, is one that takes two operands. The distinction
-is required, because @command{awk} also has unary (one-operand)
+is required because @command{awk} also has unary (one-operand)
and ternary (three-operand) operators.}
in the field-number expression. This example, then, prints the
type of relationship (the fourth field) for every line of the file
@@ -6851,7 +6843,6 @@ evaluating @code{NF} and using its value as a field number.
@node Changing Fields
@section Changing the Contents of a Field
-@c STARTOFRANGE ficon
@cindex fields, changing contents of
The contents of a field, as seen by @command{awk}, can be changed within an
@command{awk} program; this changes what @command{awk} perceives as the
@@ -7007,7 +6998,7 @@ rebuild @code{$0} when @code{NF} is decremented.
Finally, there are times when it is convenient to force
@command{awk} to rebuild the entire record, using the current
-value of the fields and @code{OFS}. To do this, use the
+values of the fields and @code{OFS}. To do this, use the
seemingly innocuous assignment:
@example
@@ -7036,7 +7027,7 @@ such as @code{sub()} and @code{gsub()}
It is important to remember that @code{$0} is the @emph{full}
record, exactly as it was read from the input. This includes
any leading or trailing whitespace, and the exact whitespace (or other
-characters) that separate the fields.
+characters) that separates the fields.
It is a common error to try to change the field separators
in a record simply by setting @code{FS} and @code{OFS}, and then
@@ -7061,7 +7052,7 @@ with a statement such as @samp{$1 = $1}, as described earlier.
It is important to remember that @code{$0} is the @emph{full}
record, exactly as it was read from the input. This includes
any leading or trailing whitespace, and the exact whitespace (or other
-characters) that separate the fields.
+characters) that separates the fields.
It is a common error to try to change the field separators
in a record simply by setting @code{FS} and @code{OFS}, and then
@@ -7074,7 +7065,6 @@ with a statement such as @samp{$1 = $1}, as described earlier.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE ficon
@node Field Separators
@section Specifying How Fields Are Separated
@@ -7090,9 +7080,7 @@ with a statement such as @samp{$1 = $1}, as described earlier.
@cindex @code{FS} variable
@cindex fields, separating
-@c STARTOFRANGE fisepr
@cindex field separators
-@c STARTOFRANGE fisepg
@cindex fields, separating
The @dfn{field separator}, which is either a single character or a regular
expression, controls the way @command{awk} splits an input record into fields.
@@ -7158,7 +7146,7 @@ John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
@end example
@noindent
-The same program would extract @samp{@bullet{}LXIX}, instead of
+The same program would extract @samp{@bullet{}LXIX} instead of
@samp{@bullet{}29@bullet{}Oak@bullet{}St.}.
If you were expecting the program to print the
address, you would be surprised. The moral is to choose your data layout and
@@ -7192,9 +7180,7 @@ rules.
@node Regexp Field Splitting
@subsection Using Regular Expressions to Separate Fields
-@c STARTOFRANGE regexpfs
@cindex regular expressions, as field separators
-@c STARTOFRANGE fsregexp
@cindex field separators, regular expressions as
The previous @value{SUBSECTION}
discussed the use of single characters or simple strings as the
@@ -7298,8 +7284,6 @@ $ @kbd{echo 'xxAA xxBxx C' |}
@print{} -->xxBxx<--
@print{} -->C<--
@end example
-@c ENDOFRANGE regexpfs
-@c ENDOFRANGE fsregexp
@node Single Character Fields
@subsection Making Each Character a Separate Field
@@ -7423,7 +7407,7 @@ choosing your field and record separators.
@cindex Unix @command{awk}, password files@comma{} field separators and
Perhaps the most common use of a single character as the field separator
occurs when processing the Unix system password file. On many Unix
-systems, each user has a separate entry in the system password file, one
+systems, each user has a separate entry in the system password file, with one
line per user. The information in these lines is separated by colons.
The first field is the user's login name and the second is the user's
encrypted or shadow password. (A shadow password is indicated by the
@@ -7469,7 +7453,7 @@ When you do this, @code{$1} is the same as @code{$0}.
According to the POSIX standard, @command{awk} is supposed to behave
as if each record is split into fields at the time it is read.
In particular, this means that if you change the value of @code{FS}
-after a record is read, the value of the fields (i.e., how they were split)
+after a record is read, the values of the fields (i.e., how they were split)
should reflect the old value of @code{FS}, not the new one.
@cindex dark corner, field separators
@@ -7482,10 +7466,7 @@ using the @emph{current} value of @code{FS}!
@value{DARKCORNER}
This behavior can be difficult
to diagnose. The following example illustrates the difference
-between the two methods.
-(The @command{sed}@footnote{The @command{sed} utility is a ``stream editor.''
-Its behavior is also defined by the POSIX standard.}
-command prints just the first line of @file{/etc/passwd}.)
+between the two methods:
@example
sed 1q /etc/passwd | awk '@{ FS = ":" ; print $1 @}'
@@ -7506,6 +7487,10 @@ prints the full first line of the file, something like:
root:x:0:0:Root:/:
@end example
+(The @command{sed}@footnote{The @command{sed} utility is a ``stream editor.''
+Its behavior is also defined by the POSIX standard.}
+command prints just the first line of @file{/etc/passwd}.)
+
@docbook
</sidebar>
@end docbook
@@ -7522,7 +7507,7 @@ root:x:0:0:Root:/:
According to the POSIX standard, @command{awk} is supposed to behave
as if each record is split into fields at the time it is read.
In particular, this means that if you change the value of @code{FS}
-after a record is read, the value of the fields (i.e., how they were split)
+after a record is read, the values of the fields (i.e., how they were split)
should reflect the old value of @code{FS}, not the new one.
@cindex dark corner, field separators
@@ -7535,10 +7520,7 @@ using the @emph{current} value of @code{FS}!
@value{DARKCORNER}
This behavior can be difficult
to diagnose. The following example illustrates the difference
-between the two methods.
-(The @command{sed}@footnote{The @command{sed} utility is a ``stream editor.''
-Its behavior is also defined by the POSIX standard.}
-command prints just the first line of @file{/etc/passwd}.)
+between the two methods:
@example
sed 1q /etc/passwd | awk '@{ FS = ":" ; print $1 @}'
@@ -7558,6 +7540,10 @@ prints the full first line of the file, something like:
@example
root:x:0:0:Root:/:
@end example
+
+(The @command{sed}@footnote{The @command{sed} utility is a ``stream editor.''
+Its behavior is also defined by the POSIX standard.}
+command prints just the first line of @file{/etc/passwd}.)
@end cartouche
@end ifnotdocbook
@@ -7655,8 +7641,6 @@ will take effect.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE fisepr
-@c ENDOFRANGE fisepg
@node Constant Size
@section Reading Fixed-Width Data
@@ -7694,7 +7678,7 @@ variable @code{FIELDWIDTHS}. Each number specifies the width of the field,
@emph{including} columns between fields. If you want to ignore the columns
between fields, you can specify the width as a separate field that is
subsequently ignored.
-It is a fatal error to supply a field width that is not a positive number.
+It is a fatal error to supply a field width that has a negative value.
The following data is the output of the Unix @command{w} utility. It is useful
to illustrate the use of @code{FIELDWIDTHS}:
@@ -7771,7 +7755,7 @@ In order to tell which kind of field splitting is in effect,
use @code{PROCINFO["FS"]}
(@pxref{Auto-set}).
The value is @code{"FS"} if regular field splitting is being used,
-or it is @code{"FIELDWIDTHS"} if fixed-width field splitting is being used:
+or @code{"FIELDWIDTHS"} if fixed-width field splitting is being used:
@example
if (PROCINFO["FS"] == "FS")
@@ -7807,14 +7791,14 @@ what they are, and not by what they are not.
The most notorious such case
is so-called @dfn{comma-separated values} (CSV) data. Many spreadsheet programs,
for example, can export their data into text files, where each record is
-terminated with a newline, and fields are separated by commas. If only
-commas separated the data, there wouldn't be an issue. The problem comes when
+terminated with a newline, and fields are separated by commas. If
+commas only separated the data, there wouldn't be an issue. The problem comes when
one of the fields contains an @emph{embedded} comma.
In such cases, most programs embed the field in double quotes.@footnote{The
CSV format lacked a formal standard definition for many years.
@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180}
standardizes the most common practices.}
-So we might have data like this:
+So, we might have data like this:
@example
@c file eg/misc/addresses.csv
@@ -7900,8 +7884,8 @@ of cases, and the @command{gawk} developers are satisfied with that.
@end quotation
As written, the regexp used for @code{FPAT} requires that each field
-have a least one character. A straightforward modification
-(changing changed the first @samp{+} to @samp{*}) allows fields to be empty:
+contain at least one character. A straightforward modification
+(changing the first @samp{+} to @samp{*}) allows fields to be empty:
@example
FPAT = "([^,]*)|(\"[^\"]+\")"
@@ -7911,20 +7895,17 @@ Finally, the @code{patsplit()} function makes the same functionality
available for splitting regular strings (@pxref{String Functions}).
To recap, @command{gawk} provides three independent methods
-to split input records into fields. @command{gawk} uses whichever
-mechanism was last chosen based on which of the three
-variables---@code{FS}, @code{FIELDWIDTHS}, and @code{FPAT}---was
+to split input records into fields.
+The mechanism used is based on which of the three
+variables---@code{FS}, @code{FIELDWIDTHS}, or @code{FPAT}---was
last assigned to.
@node Multiple Line
@section Multiple-Line Records
@cindex multiple-line records
-@c STARTOFRANGE recm
@cindex records, multiline
-@c STARTOFRANGE imr
@cindex input, multiline records
-@c STARTOFRANGE frm
@cindex files, reading, multiline records
@cindex input, files, See input files
In some databases, a single line cannot conveniently hold all the
@@ -7959,7 +7940,7 @@ at the end of the record and one or more blank lines after the record.
In addition, a regular expression always matches the longest possible
sequence when there is a choice
(@pxref{Leftmost Longest}).
-So the next record doesn't start until
+So, the next record doesn't start until
the first nonblank line that follows---no matter how many blank lines
appear in a row, they are considered one record separator.
@@ -7974,10 +7955,10 @@ In the second case, this special processing is not done.
@cindex field separator, in multiline records
@cindex @code{FS}, in multiline records
Now that the input is separated into records, the second step is to
-separate the fields in the record. One way to do this is to divide each
+separate the fields in the records. One way to do this is to divide each
of the lines into fields in the normal manner. This happens by default
as the result of a special feature. When @code{RS} is set to the empty
-string, @emph{and} @code{FS} is set to a single character,
+string @emph{and} @code{FS} is set to a single character,
the newline character @emph{always} acts as a field separator.
This is in addition to whatever field separations result from
@code{FS}.@footnote{When @code{FS} is the null string (@code{""})
@@ -7992,7 +7973,7 @@ want the newline character to separate fields, because there is no way to
prevent it. However, you can work around this by using the @code{split()}
function to break up the record manually
(@pxref{String Functions}).
-If you have a single character field separator, you can work around
+If you have a single-character field separator, you can work around
the special feature in a different way, by making @code{FS} into a
regexp for that single character. For example, if the field
separator is a percent character, instead of
@@ -8000,10 +7981,10 @@ separator is a percent character, instead of
Another way to separate fields is to
put each field on a separate line: to do this, just set the
-variable @code{FS} to the string @code{"\n"}. (This single
-character separator matches a single newline.)
+variable @code{FS} to the string @code{"\n"}.
+(This single-character separator matches a single newline.)
A practical example of a @value{DF} organized this way might be a mailing
-list, where each entry is separated by blank lines. Consider a mailing
+list, where blank lines separate the entries. Consider a mailing
list in a file named @file{addresses}, which looks like this:
@example
@@ -8091,20 +8072,15 @@ If not in compatibility mode (@pxref{Options}), @command{gawk} sets
@code{RT} to the input text that matched the value specified by @code{RS}.
But if the input file ended without any text that matches @code{RS},
then @command{gawk} sets @code{RT} to the null string.
-@c ENDOFRANGE recm
-@c ENDOFRANGE imr
-@c ENDOFRANGE frm
@node Getline
@section Explicit Input with @code{getline}
-@c STARTOFRANGE getl
@cindex @code{getline} command, explicit input with
-@c STARTOFRANGE inex
@cindex input, explicit
So far we have been getting our input data from @command{awk}'s main
input stream---either the standard input (usually your keyboard, sometimes
-the output from another program) or from the
+the output from another program) or the
files specified on the command line. The @command{awk} language has a
special built-in command called @code{getline} that
can be used to read input under your explicit control.
@@ -8140,6 +8116,13 @@ a record, such as a file that cannot be opened, then @code{getline}
returns @minus{}1. In this case, @command{gawk} sets the variable
@code{ERRNO} to a string describing the error that occurred.
+If @code{ERRNO} indicates that the I/O operation may be
+retried, and @code{PROCINFO["@var{input}", "RETRY"]} is set,
+then @code{getline} returns @minus{}2
+instead of @minus{}1, and further calls to @code{getline}
+may be attemped. @DBXREF{Retrying Input} for further information about
+this feature.
+
In the following examples, @var{command} stands for a string value that
represents a shell command.
@@ -8288,7 +8271,7 @@ free
@end example
The @code{getline} command used in this way sets only the variables
-@code{NR}, @code{FNR}, and @code{RT} (and of course, @var{var}).
+@code{NR}, @code{FNR}, and @code{RT} (and, of course, @var{var}).
The record is not
split into fields, so the values of the fields (including @code{$0}) and
the value of @code{NF} do not change.
@@ -8303,7 +8286,7 @@ the value of @code{NF} do not change.
@cindex left angle bracket (@code{<}), @code{<} operator (I/O)
@cindex operators, input/output
Use @samp{getline < @var{file}} to read the next record from @var{file}.
-Here @var{file} is a string-valued expression that
+Here, @var{file} is a string-valued expression that
specifies the @value{FN}. @samp{< @var{file}} is called a @dfn{redirection}
because it directs input to come from a different place.
For example, the following
@@ -8481,7 +8464,7 @@ of a construct like @samp{@w{"echo "} "date" | getline}.
Most versions, including the current version, treat it at as
@samp{@w{("echo "} "date") | getline}.
(This is also how BWK @command{awk} behaves.)
-Some versions changed and treated it as
+Some versions instead treat it as
@samp{@w{"echo "} ("date" | getline)}.
(This is how @command{mawk} behaves.)
In short, @emph{always} use explicit parentheses, and then you won't
@@ -8529,7 +8512,7 @@ program to be portable to other @command{awk} implementations.
@cindex operators, input/output
@cindex differences in @command{awk} and @command{gawk}, input/output operators
-Input into @code{getline} from a pipe is a one-way operation.
+Reading input into @code{getline} from a pipe is a one-way operation.
The command that is started with @samp{@var{command} | getline} only
sends data @emph{to} your @command{awk} program.
@@ -8539,7 +8522,7 @@ for processing and then read the results back.
communications are possible. This is done with the @samp{|&}
operator.
Typically, you write data to the coprocess first and then
-read results back, as shown in the following:
+read the results back, as shown in the following:
@example
print "@var{some query}" |& "db_server"
@@ -8622,7 +8605,7 @@ also @pxref{Auto-set}.)
@item
Using @code{FILENAME} with @code{getline}
(@samp{getline < FILENAME})
-is likely to be a source for
+is likely to be a source of
confusion. @command{awk} opens a separate input stream from the
current input file. However, by not using a variable, @code{$0}
and @code{NF} are still updated. If you're doing this, it's
@@ -8630,9 +8613,15 @@ probably by accident, and you should reconsider what it is you're
trying to accomplish.
@item
-@DBREF{Getline Summary} presents a table summarizing the
+@ifdocbook
+The next section
+@end ifdocbook
+@ifnotdocbook
+@ref{Getline Summary},
+@end ifnotdocbook
+presents a table summarizing the
@code{getline} variants and which variables they can affect.
-It is worth noting that those variants which do not use redirection
+It is worth noting that those variants that do not use redirection
can cause @code{FILENAME} to be updated if they cause
@command{awk} to start reading a new input file.
@@ -8641,7 +8630,7 @@ can cause @code{FILENAME} to be updated if they cause
If the variable being assigned is an expression with side effects,
different versions of @command{awk} behave differently upon encountering
end-of-file. Some versions don't evaluate the expression; many versions
-(including @command{gawk}) do. Here is an example, due to Duncan Moore:
+(including @command{gawk}) do. Here is an example, courtesy of Duncan Moore:
@ignore
Date: Sun, 01 Apr 2012 11:49:33 +0100
@@ -8658,7 +8647,7 @@ BEGIN @{
@noindent
Here, the side effect is the @samp{++c}. Is @code{c} incremented if
-end of file is encountered, before the element in @code{a} is assigned?
+end-of-file is encountered before the element in @code{a} is assigned?
@command{gawk} treats @code{getline} like a function call, and evaluates
the expression @samp{a[++c]} before attempting to read from @file{f}.
@@ -8690,9 +8679,6 @@ Note: for each variant, @command{gawk} sets the @code{RT} predefined variable.
@item @var{command} @code{|& getline} @var{var} @tab Sets @var{var} and @code{RT} @tab @command{gawk}
@end multitable
@end float
-@c ENDOFRANGE getl
-@c ENDOFRANGE inex
-@c ENDOFRANGE infir
@node Read Timeout
@section Reading Input with a Timeout
@@ -8703,8 +8689,8 @@ This @value{SECTION} describes a feature that is specific to @command{gawk}.
You may specify a timeout in milliseconds for reading input from the keyboard,
a pipe, or two-way communication, including TCP/IP sockets. This can be done
-on a per input, command, or connection basis, by setting a special element
-in the @code{PROCINFO} array (@pxref{Auto-set}):
+on a per-input, per-command, or per-connection basis, by setting a special
+element in the @code{PROCINFO} array (@pxref{Auto-set}):
@example
PROCINFO["input_name", "READ_TIMEOUT"] = @var{timeout in milliseconds}
@@ -8735,7 +8721,7 @@ while ((getline < "/dev/stdin") > 0)
@end example
@command{gawk} terminates the read operation if input does not
-arrive after waiting for the timeout period, returns failure
+arrive after waiting for the timeout period, returns failure,
and sets @code{ERRNO} to an appropriate string value.
A negative or zero value for the timeout is the same as specifying
no timeout at all.
@@ -8745,7 +8731,7 @@ loop that reads input records and matches them against patterns,
like so:
@example
-$ @kbd{ gawk 'BEGIN @{ PROCINFO["-", "READ_TIMEOUT"] = 5000 @}}
+$ @kbd{gawk 'BEGIN @{ PROCINFO["-", "READ_TIMEOUT"] = 5000 @}}
> @kbd{@{ print "You entered: " $0 @}'}
@kbd{gawk}
@print{} You entered: gawk
@@ -8785,13 +8771,14 @@ If the @code{PROCINFO} element is not present and the
@command{gawk} uses its value to initialize the timeout value.
The exclusive use of the environment variable to specify timeout
has the disadvantage of not being able to control it
-on a per command or connection basis.
+on a per-command or per-connection basis.
@command{gawk} considers a timeout event to be an error even though
the attempt to read from the underlying device may
succeed in a later attempt. This is a limitation, and it also
means that you cannot use this to multiplex input from
-two or more sources.
+two or more sources. @DBXREF{Retrying Input} for a way to enable
+later I/O attempts to succeed.
Assigning a timeout value prevents read operations from
blocking indefinitely. But bear in mind that there are other ways
@@ -8801,6 +8788,36 @@ a connection before it can start reading any data,
or the attempt to open a FIFO special file for reading can block
indefinitely until some other process opens it for writing.
+@node Retrying Input
+@section Retrying Reads After Certain Input Errors
+@cindex retrying input
+
+@cindex differences in @command{awk} and @command{gawk}, retrying input
+This @value{SECTION} describes a feature that is specific to @command{gawk}.
+
+When @command{gawk} encounters an error while reading input, by
+default @code{getline} returns @minus{}1, and subsequent attempts to
+read from that file result in an end-of-file indication. However, you
+may optionally instruct @command{gawk} to allow I/O to be retried when
+certain errors are encountered by setting a special element in
+the @code{PROCINFO} array (@pxref{Auto-set}):
+
+@example
+PROCINFO["@var{input_name}", "RETRY"] = 1
+@end example
+
+When this element exists, @command{gawk} checks the value of the system
+(C language)
+@code{errno} variable when an I/O error occurs. If @code{errno} indicates
+a subsequent I/O attempt may succeed, @code{getline} instead returns
+@minus{}2 and
+further calls to @code{getline} may succeed. This applies to the @code{errno}
+values @code{EAGAIN}, @code{EWOULDBLOCK}, @code{EINTR}, or @code{ETIMEDOUT}.
+
+This feature is useful in conjunction with
+@code{PROCINFO["@var{input_name}", "READ_TIMEOUT"]} or situations where a file
+descriptor has been configured to behave in a non-blocking fashion.
+
@node Command-line directories
@section Directories on the Command Line
@cindex differences in @command{awk} and @command{gawk}, command-line directories
@@ -8851,7 +8868,7 @@ The possibilities are as follows:
@item
After splitting the input into records, @command{awk} further splits
-the record into individual fields, named @code{$1}, @code{$2}, and so
+the records into individual fields, named @code{$1}, @code{$2}, and so
on. @code{$0} is the whole record, and @code{NF} indicates how many
fields there are. The default way to split fields is between whitespace
characters.
@@ -8867,12 +8884,12 @@ thing. Decrementing @code{NF} throws away fields and rebuilds the record.
@item
Field splitting is more complicated than record splitting:
-@multitable @columnfractions .40 .45 .15
+@multitable @columnfractions .40 .40 .20
@headitem Field separator value @tab Fields are split @dots{} @tab @command{awk} / @command{gawk}
@item @code{FS == " "} @tab On runs of whitespace @tab @command{awk}
@item @code{FS == @var{any single character}} @tab On that character @tab @command{awk}
@item @code{FS == @var{regexp}} @tab On text matching the regexp @tab @command{awk}
-@item @code{FS == ""} @tab Each individual character is a separate field @tab @command{gawk}
+@item @code{FS == ""} @tab Such that each individual character is a separate field @tab @command{gawk}
@item @code{FIELDWIDTHS == @var{list of columns}} @tab Based on character position @tab @command{gawk}
@item @code{FPAT == @var{regexp}} @tab On the text surrounding text matching the regexp @tab @command{gawk}
@end multitable
@@ -8889,11 +8906,11 @@ This can also be done using command-line variable assignment.
Use @code{PROCINFO["FS"]} to see how fields are being split.
@item
-Use @code{getline} in its various forms to read additional records,
+Use @code{getline} in its various forms to read additional records
from the default input stream, from a file, or from a pipe or coprocess.
@item
-Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to timeout
+Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to time out
for @var{file}.
@item
@@ -8927,7 +8944,6 @@ That can be fixed by making one simple change. What is it?
@node Printing
@chapter Printing Output
-@c STARTOFRANGE prnt
@cindex printing
@cindex output, printing, See printing
One of the most common programming actions is to @dfn{print}, or output,
@@ -8943,7 +8959,6 @@ columns, whether to use exponential notation or not, and so on.
For printing with specifications, you need the @code{printf} statement
(@pxref{Printf}).
-@c STARTOFRANGE prnts
@cindex @code{print} statement
@cindex @code{printf} statement
Besides basic and formatted printing, this @value{CHAPTER}
@@ -8964,6 +8979,7 @@ and discusses the @code{close()} built-in function.
@command{gawk} allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@end menu
@@ -9004,7 +9020,7 @@ space is printed between any two items.
Note that the @code{print} statement is a statement and not an
expression---you can't use it in the pattern part of a
-@var{pattern}-@var{action} statement, for example.
+pattern--action statement, for example.
@node Print Examples
@section @code{print} Statement Examples
@@ -9123,7 +9139,6 @@ You can continue either a @code{print} or
@code{printf} statement simply by putting a newline after any comma
(@pxref{Statements/Lines}).
@end quotation
-@c ENDOFRANGE prnts
@node Output Separators
@section Output Separators
@@ -9196,7 +9211,7 @@ runs together on a single line.
@cindex numeric, output format
@cindex formats@comma{} numeric output
When printing numeric values with the @code{print} statement,
-@command{awk} internally converts the number to a string of characters
+@command{awk} internally converts each number to a string of characters
and prints that string. @command{awk} uses the @code{sprintf()} function
to do this conversion
(@pxref{String Functions}).
@@ -9236,7 +9251,6 @@ if @code{OFMT} contains anything but a floating-point conversion specification.
@node Printf
@section Using @code{printf} Statements for Fancier Printing
-@c STARTOFRANGE printfs
@cindex @code{printf} statement
@cindex output, formatted
@cindex formatting output
@@ -9268,7 +9282,7 @@ printf @var{format}, @var{item1}, @var{item2}, @dots{}
@noindent
As for @code{print}, the entire list of arguments may optionally be
enclosed in parentheses. Here too, the parentheses are necessary if any
-of the item expressions use the @samp{>} relational operator; otherwise,
+of the item expressions uses the @samp{>} relational operator; otherwise,
it can be confused with an output redirection (@pxref{Redirection}).
@cindex format specifiers
@@ -9299,7 +9313,7 @@ $ @kbd{awk 'BEGIN @{}
@end example
@noindent
-Here, neither the @samp{+} nor the @samp{OUCH!} appear in
+Here, neither the @samp{+} nor the @samp{OUCH!} appears in
the output message.
@node Control Letters
@@ -9346,8 +9360,8 @@ The two control letters are equivalent.
(The @samp{%i} specification is for compatibility with ISO C.)
@item @code{%e}, @code{%E}
-Print a number in scientific (exponential) notation;
-for example:
+Print a number in scientific (exponential) notation.
+For example:
@example
printf "%4.3e\n", 1950
@@ -9384,7 +9398,7 @@ The special ``not a number'' value formats as @samp{-nan} or @samp{nan}
(@pxref{Math Definitions}).
@item @code{%F}
-Like @samp{%f} but the infinity and ``not a number'' values are spelled
+Like @samp{%f}, but the infinity and ``not a number'' values are spelled
using uppercase letters.
The @samp{%F} format is a POSIX extension to ISO C; not all systems
@@ -9434,7 +9448,6 @@ values or do something else entirely.
@node Format Modifiers
@subsection Modifiers for @code{printf} Formats
-@c STARTOFRANGE pfm
@cindex @code{printf} statement, modifiers
@cindex modifiers@comma{} in format specifiers
A format specification can also include @dfn{modifiers} that can control
@@ -9445,12 +9458,12 @@ represent
spaces in the output. Here are the possible modifiers, in the order in
which they may appear:
-@table @code
+@table @asis
@cindex differences in @command{awk} and @command{gawk}, @code{print}/@code{printf} statements
@cindex @code{printf} statement, positional specifiers
@c the code{} does NOT start a secondary
@cindex positional specifiers, @code{printf} statement
-@item @var{N}$
+@item @code{@var{N}$}
An integer constant followed by a @samp{$} is a @dfn{positional specifier}.
Normally, format specifications are applied to arguments in the order
given in the format string. With a positional specifier, the format
@@ -9473,7 +9486,7 @@ messages at runtime.
which describes how and why to use positional specifiers.
For now, we ignore them.
-@item - (Minus)
+@item @code{-} (Minus)
The minus sign, used before the width modifier (see later on in
this list),
says to left-justify
@@ -9491,13 +9504,13 @@ prints @samp{foo@bullet{}}.
For numeric conversions, prefix positive values with a space and
negative values with a minus sign.
-@item +
+@item @code{+}
The plus sign, used before the width modifier (see later on in
this list),
says to always supply a sign for numeric conversions, even if the data
to format is positive. The @samp{+} overrides the space modifier.
-@item #
+@item @code{#}
Use an ``alternative form'' for certain control letters.
For @samp{%o}, supply a leading zero.
For @samp{%x} and @samp{%X}, supply a leading @samp{0x} or @samp{0X} for
@@ -9506,14 +9519,14 @@ For @samp{%e}, @samp{%E}, @samp{%f}, and @samp{%F}, the result always
contains a decimal point.
For @samp{%g} and @samp{%G}, trailing zeros are not removed from the result.
-@item 0
+@item @code{0}
A leading @samp{0} (zero) acts as a flag indicating that output should be
padded with zeros instead of spaces.
This applies only to the numeric output formats.
This flag only has an effect when the field width is wider than the
value to print.
-@item '
+@item @code{'}
A single quote or apostrophe character is a POSIX extension to ISO C.
It indicates that the integer part of a floating-point value, or the
entire part of an integer decimal value, should have a thousands-separator
@@ -9566,7 +9579,7 @@ prints @samp{foobar}.
Preceding the @var{width} with a minus sign causes the output to be
padded with spaces on the right, instead of on the left.
-@item .@var{prec}
+@item @code{.@var{prec}}
A period followed by an integer constant
specifies the precision to use when printing.
The meaning of the precision varies by control letter:
@@ -9629,7 +9642,7 @@ printf "%" w "." p "s\n", s
@end example
@noindent
-This is not particularly easy to read but it does work.
+This is not particularly easy to read, but it does work.
@c @cindex lint checks
@cindex troubleshooting, fatal errors, @code{printf} format strings
@@ -9640,7 +9653,6 @@ format strings. These are not valid in @command{awk}. Most @command{awk}
implementations silently ignore them. If @option{--lint} is provided
on the command line (@pxref{Options}), @command{gawk} warns about their
use. If @option{--posix} is supplied, their use is a fatal error.
-@c ENDOFRANGE pfm
@node Printf Examples
@subsection Examples Using @code{printf}
@@ -9676,7 +9688,7 @@ $ @kbd{awk '@{ printf "%-10s %s\n", $1, $2 @}' mail-list}
@end example
In this case, the phone numbers had to be printed as strings because
-the numbers are separated by a dash. Printing the phone numbers as
+the numbers are separated by dashes. Printing the phone numbers as
numbers would have produced just the first three digits: @samp{555}.
This would have been pretty confusing.
@@ -9721,14 +9733,11 @@ awk 'BEGIN @{ format = "%-10s %s\n"
@{ printf format, $1, $2 @}' mail-list
@end example
-@c ENDOFRANGE printfs
@node Redirection
@section Redirecting Output of @code{print} and @code{printf}
-@c STARTOFRANGE outre
@cindex output redirection
-@c STARTOFRANGE reout
@cindex redirection of output
@cindex @option{--sandbox} option, output redirection with @code{print}, @code{printf}
So far, the output from @code{print} and @code{printf} has gone
@@ -9739,7 +9748,7 @@ This is called @dfn{redirection}.
@quotation NOTE
When @option{--sandbox} is specified (@pxref{Options}),
-redirecting output to files, pipes and coprocesses is disabled.
+redirecting output to files, pipes, and coprocesses is disabled.
@end quotation
A redirection appears after the @code{print} or @code{printf} statement.
@@ -9792,7 +9801,7 @@ Each output file contains one name or number per line.
@cindex @code{>} (right angle bracket), @code{>>} operator (I/O)
@cindex right angle bracket (@code{>}), @code{>>} operator (I/O)
@item print @var{items} >> @var{output-file}
-This redirection prints the items into the pre-existing output file
+This redirection prints the items into the preexisting output file
named @var{output-file}. The difference between this and the
single-@samp{>} redirection is that the old contents (if any) of
@var{output-file} are not erased. Instead, the @command{awk} output is
@@ -9831,7 +9840,7 @@ The unsorted list is written with an ordinary redirection, while
the sorted list is written by piping through the @command{sort} utility.
The next example uses redirection to mail a message to the mailing
-list @samp{bug-system}. This might be useful when trouble is encountered
+list @code{bug-system}. This might be useful when trouble is encountered
in an @command{awk} script run periodically for system maintenance:
@example
@@ -9862,15 +9871,23 @@ This redirection prints the items to the input of @var{command}.
The difference between this and the
single-@samp{|} redirection is that the output from @var{command}
can be read with @code{getline}.
-Thus @var{command} is a @dfn{coprocess}, which works together with,
-but subsidiary to, the @command{awk} program.
+Thus, @var{command} is a @dfn{coprocess}, which works together with
+but is subsidiary to the @command{awk} program.
This feature is a @command{gawk} extension, and is not available in
POSIX @command{awk}.
-@DBXREF{Getline/Coprocess}
+@ifnotdocbook
+@xref{Getline/Coprocess},
for a brief discussion.
-@DBXREF{Two-way I/O}
+@xref{Two-way I/O},
for a more complete discussion.
+@end ifnotdocbook
+@ifdocbook
+@DBXREF{Getline/Coprocess}
+for a brief discussion and
+@DBREF{Two-way I/O}
+for a more complete discussion.
+@end ifdocbook
@end table
Redirecting output using @samp{>}, @samp{>>}, @samp{|}, or @samp{|&}
@@ -9895,7 +9912,7 @@ This is indeed how redirections must be used from the shell. But in
@command{awk}, it isn't necessary. In this kind of case, a program should
use @samp{>} for all the @code{print} statements, because the output file
is only opened once. (It happens that if you mix @samp{>} and @samp{>>}
-that output is produced in the expected order. However, mixing the operators
+output is produced in the expected order. However, mixing the operators
for the same file is definitely poor style, and is confusing to readers
of your program.)
@@ -9986,11 +10003,9 @@ It then sends the list to the shell for execution.
command lines to be fed to the shell.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE outre
-@c ENDOFRANGE reout
@node Special FD
-@section Special Files for Standard Pre-Opened Data Streams
+@section Special Files for Standard Preopened Data Streams
@cindex standard input
@cindex input, standard
@cindex standard output
@@ -10003,7 +10018,7 @@ command lines to be fed to the shell.
Running programs conventionally have three input and output streams
already available to them for reading and writing. These are known
as the @dfn{standard input}, @dfn{standard output}, and @dfn{standard
-error output}. These open streams (and any other open file or pipe)
+error output}. These open streams (and any other open files or pipes)
are often referred to by the technical term @dfn{file descriptors}.
These streams are, by default, connected to your keyboard and screen, but
@@ -10041,7 +10056,7 @@ that is connected to your keyboard and screen. It represents the
``terminal,''@footnote{The ``tty'' in @file{/dev/tty} stands for
``Teletype,'' a serial terminal.} which on modern systems is a keyboard
and screen, not a serial console.)
-This generally has the same effect but not always: although the
+This generally has the same effect, but not always: although the
standard error stream is usually the screen, it can be redirected; when
that happens, writing to the screen is not correct. In fact, if
@command{awk} is run from a background job, it may not have a
@@ -10086,7 +10101,7 @@ print "Serious error detected!" > "/dev/stderr"
@cindex troubleshooting, quotes with file names
Note the use of quotes around the @value{FN}.
-Like any other redirection, the value must be a string.
+Like with any other redirection, the value must be a string.
It is a common error to omit the quotes, which leads
to confusing results.
@@ -10097,7 +10112,6 @@ invoked with the @option{--traditional} option (@pxref{Options}).
@node Special Files
@section Special @value{FFN}s in @command{gawk}
-@c STARTOFRANGE gfn
@cindex @command{gawk}, file names in
Besides access to standard input, standard output, and standard error,
@@ -10113,7 +10127,7 @@ TCP/IP networking.
@end menu
@node Other Inherited Files
-@subsection Accessing Other Open Files With @command{gawk}
+@subsection Accessing Other Open Files with @command{gawk}
Besides the @code{/dev/stdin}, @code{/dev/stdout}, and @code{/dev/stderr}
special @value{FN}s mentioned earlier, @command{gawk} provides syntax
@@ -10170,7 +10184,7 @@ special @value{FN}s that @command{gawk} provides:
@cindex compatibility mode (@command{gawk}), file names
@cindex file names, in compatibility mode
@item
-Recognition of the @value{FN}s for the three standard pre-opened
+Recognition of the @value{FN}s for the three standard preopened
files is disabled only in POSIX mode.
@item
@@ -10183,23 +10197,18 @@ compatibility mode (either @option{--traditional} or @option{--posix};
interprets these special @value{FN}s.
For example, using @samp{/dev/fd/4}
for output actually writes on file descriptor 4, and not on a new
-file descriptor that is @code{dup()}'ed from file descriptor 4. Most of
+file descriptor that is @code{dup()}ed from file descriptor 4. Most of
the time this does not matter; however, it is important to @emph{not}
close any of the files related to file descriptors 0, 1, and 2.
Doing so results in unpredictable behavior.
@end itemize
-@c ENDOFRANGE gfn
@node Close Files And Pipes
@section Closing Input and Output Redirections
@cindex files, output, See output files
-@c STARTOFRANGE ifc
@cindex input files, closing
-@c STARTOFRANGE ofc
@cindex output, files@comma{} closing
-@c STARTOFRANGE pc
@cindex pipe, closing
-@c STARTOFRANGE cc
@cindex coprocesses, closing
@cindex @code{getline} command, coprocesses@comma{} using from
@@ -10410,9 +10419,9 @@ This value is zero if the close succeeds, or @minus{}1 if
it fails.
The POSIX standard is very vague; it says that @code{close()}
-returns zero on success and nonzero otherwise. In general,
+returns zero on success and a nonzero value otherwise. In general,
different implementations vary in what they report when closing
-pipes; thus the return value cannot be used portably.
+pipes; thus, the return value cannot be used portably.
@value{DARKCORNER}
In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
when closing a pipe.
@@ -10467,19 +10476,80 @@ This value is zero if the close succeeds, or @minus{}1 if
it fails.
The POSIX standard is very vague; it says that @code{close()}
-returns zero on success and nonzero otherwise. In general,
+returns zero on success and a nonzero value otherwise. In general,
different implementations vary in what they report when closing
-pipes; thus the return value cannot be used portably.
+pipes; thus, the return value cannot be used portably.
@value{DARKCORNER}
In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
when closing a pipe.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE ifc
-@c ENDOFRANGE ofc
-@c ENDOFRANGE pc
-@c ENDOFRANGE cc
+
+@node Nonfatal
+@section Enabling Nonfatal Output
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+In standard @command{awk}, output with @code{print} or @code{printf}
+to a nonexistent file, or some other I/O error (such as filling up the
+disk) is a fatal error.
+
+@example
+$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
+@error{} gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No such file or directory)
+@end example
+
+@command{gawk} makes it possible to detect that an error has
+occurred, allowing you to possibly recover from the error, or
+at least print an error message of your choosing before exiting.
+You can do this in one of two ways:
+
+@itemize @bullet
+@item
+For all output files, by assigning any value to @code{PROCINFO["NONFATAL"]}.
+
+@item
+On a per-file basis, by assigning any value to
+@code{PROCINFO[@var{filename}, "NONFATAL"]}.
+Here, @var{filename} is the name of the file to which
+you wish output to be nonfatal.
+@end itemize
+
+Once you have enabled nonfatal output, you must check @code{ERRNO}
+after every relevant @code{print} or @code{printf} statement to
+see if something went wrong. It is also a good idea to initialize
+@code{ERRNO} to zero before attempting the output. For example:
+
+@example
+$ @kbd{gawk '}
+> @kbd{BEGIN @{}
+> @kbd{ PROCINFO["NONFATAL"] = 1}
+> @kbd{ ERRNO = 0}
+> @kbd{ print "hi" > "/no/such/file"}
+> @kbd{ if (ERRNO) @{}
+> @kbd{ print("Output failed:", ERRNO) > "/dev/stderr"}
+> @kbd{ exit 1}
+> @kbd{ @}}
+> @kbd{@}'}
+@error{} Output failed: No such file or directory
+@end example
+
+Here, @command{gawk} did not produce a fatal error; instead
+it let the @command{awk} program code detect the problem and handle it.
+
+This mechanism works also for standard output and standard error.
+For standard output, you may use @code{PROCINFO["-", "NONFATAL"]}
+or @code{PROCINFO["/dev/stdout", "NONFATAL"]}. For standard error, use
+@code{PROCINFO["/dev/stderr", "NONFATAL"]}.
+
+When attempting to open a TCP/IP socket (@pxref{TCP/IP Networking}),
+@command{gawk} tries multiple times. The @env{GAWK_SOCK_RETRIES}
+environment variable (@pxref{Other Environment Variables}) allows you to
+override @command{gawk}'s builtin default number of attempts. However,
+once nonfatal I/O is enabled for a given socket, @command{gawk} only
+retries once, relying on @command{awk}-level code to notice that there
+was a problem.
@node Output Summary
@section Summary
@@ -10493,8 +10563,8 @@ for numeric values for the @code{print} statement.
@item
The @code{printf} statement provides finer-grained control over output,
-with format control letters for different data types and various flags
-that modify the behavior of the format control letters.
+with format-control letters for different data types and various flags
+that modify the behavior of the format-control letters.
@item
Output from both @code{print} and @code{printf} may be redirected to
@@ -10509,6 +10579,12 @@ Use @code{close()} to close open file, pipe, and coprocess redirections.
For coprocesses, it is possible to close only one direction of the
communications.
+@item
+Normally errors with @code{print} or @code{printf} are fatal.
+@command{gawk} lets you make output errors be nonfatal either for
+all files or on a per-file basis. You must then check for errors
+after every relevant output statement.
+
@end itemize
@c EXCLUDE START
@@ -10543,11 +10619,9 @@ BEGIN @{ print "Serious error detected!" > /dev/stderr @}
@end enumerate
@c EXCLUDE END
-@c ENDOFRANGE prnt
@node Expressions
@chapter Expressions
-@c STARTOFRANGE exps
@cindex expressions
Expressions are the basic building blocks of @command{awk} patterns
@@ -10558,7 +10632,7 @@ can assign a new value to a variable or a field by using an assignment operator.
An expression can serve as a pattern or action statement on its own.
Most other kinds of
statements contain one or more expressions that specify the data on which to
-operate. As in other languages, expressions in @command{awk} include
+operate. As in other languages, expressions in @command{awk} can include
variables, array references, constants, and function calls, as well as
combinations of these with various operators.
@@ -10577,7 +10651,7 @@ combinations of these with various operators.
Expressions are built up from values and the operations performed
upon them. This @value{SECTION} describes the elementary objects
-which provide the values used in expressions.
+that provide the values used in expressions.
@menu
* Constants:: String, numeric and regexp constants.
@@ -10590,7 +10664,6 @@ which provide the values used in expressions.
@node Constants
@subsection Constant Expressions
-@c STARTOFRANGE cnst
@cindex constants, types of
The simplest type of expression is the @dfn{constant}, which always has
@@ -10628,7 +10701,7 @@ have the same value:
@end example
@cindex string constants
-A string constant consists of a sequence of characters enclosed in
+A @dfn{string constant} consists of a sequence of characters enclosed in
double quotation marks. For example:
@example
@@ -10640,7 +10713,7 @@ double quotation marks. For example:
@cindex strings, length limitations
represents the string whose contents are @samp{parrot}. Strings in
@command{gawk} can be of any length, and they can contain any of the possible
-eight-bit ASCII characters including ASCII @sc{nul} (character code zero).
+eight-bit ASCII characters, including ASCII @sc{nul} (character code zero).
Other @command{awk}
implementations may have difficulty with some character codes.
@@ -10655,15 +10728,15 @@ In @command{awk}, all numbers are in decimal (i.e., base 10). Many other
programming languages allow you to specify numbers in other bases, often
octal (base 8) and hexadecimal (base 16).
In octal, the numbers go 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, and so on.
-Just as @samp{11}, in decimal, is 1 times 10 plus 1, so
-@samp{11}, in octal, is 1 times 8, plus 1. This equals 9 in decimal.
+Just as @samp{11} in decimal is 1 times 10 plus 1, so
+@samp{11} in octal is 1 times 8 plus 1. This equals 9 in decimal.
In hexadecimal, there are 16 digits. Because the everyday decimal
number system only has ten digits (@samp{0}--@samp{9}), the letters
@samp{a} through @samp{f} are used to represent the rest.
(Case in the letters is usually irrelevant; hexadecimal @samp{a} and @samp{A}
have the same value.)
-Thus, @samp{11}, in
-hexadecimal, is 1 times 16 plus 1, which equals 17 in decimal.
+Thus, @samp{11} in
+hexadecimal is 1 times 16 plus 1, which equals 17 in decimal.
Just by looking at plain @samp{11}, you can't tell what base it's in.
So, in C, C++, and other languages derived from C,
@@ -10674,13 +10747,13 @@ and hexadecimal numbers start with a leading @samp{0x} or @samp{0X}:
@table @code
@item 11
-Decimal value 11.
+Decimal value 11
@item 011
-Octal 11, decimal value 9.
+Octal 11, decimal value 9
@item 0x11
-Hexadecimal 11, decimal value 17.
+Hexadecimal 11, decimal value 17
@end table
This example shows the difference:
@@ -10708,11 +10781,11 @@ you can use the @code{strtonum()} function
(@pxref{String Functions})
to convert the data into a number.
Most of the time, you will want to use octal or hexadecimal constants
-when working with the built-in bit manipulation functions;
+when working with the built-in bit-manipulation functions;
see @DBREF{Bitwise Functions}
for more information.
-Unlike some early C implementations, @samp{8} and @samp{9} are not
+Unlike in some early C implementations, @samp{8} and @samp{9} are not
valid in octal constants. For example, @command{gawk} treats @samp{018}
as decimal 18:
@@ -10776,19 +10849,17 @@ $ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
@node Regexp Constants
@subsubsection Regular Expression Constants
-@c STARTOFRANGE rec
@cindex regexp constants
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
@cindex @code{!} (exclamation point), @code{!~} operator
@cindex exclamation point (@code{!}), @code{!~} operator
-A regexp constant is a regular expression description enclosed in
+A @dfn{regexp constant} is a regular expression description enclosed in
slashes, such as @code{@w{/^beginning and end$/}}. Most regexps used in
@command{awk} programs are constant, but the @samp{~} and @samp{!~}
matching operators can also match computed or dynamic regexps
(which are typically just ordinary strings or variables that contain a regexp,
-but could be a more complex expression).
-@c ENDOFRANGE cnst
+but could be more complex expressions).
@node Using Constant Regexps
@subsection Using Regular Expression Constants
@@ -10868,7 +10939,7 @@ the third argument of @code{split()} to be a regexp constant, but some
older implementations do not.
@value{DARKCORNER}
Because some built-in functions accept regexp constants as arguments,
-it can be confusing when attempting to use regexp constants as arguments
+confusion can arise when attempting to use regexp constants as arguments
to user-defined functions (@pxref{User-defined}). For example:
@example
@@ -10894,19 +10965,18 @@ function mysub(pat, repl, str, global)
In this example, the programmer wants to pass a regexp constant to the
user-defined function @code{mysub()}, which in turn passes it on to
either @code{sub()} or @code{gsub()}. However, what really happens is that
-the @code{pat} parameter is either one or zero, depending upon whether
+the @code{pat} parameter is assigned a value of either one or zero, depending upon whether
or not @code{$0} matches @code{/hi/}.
@command{gawk} issues a warning when it sees a regexp constant used as
a parameter to a user-defined function, because passing a truth value in
this way is probably not what was intended.
-@c ENDOFRANGE rec
@node Variables
@subsection Variables
@cindex variables, user-defined
@cindex user-defined, variables
-Variables are ways of storing values at one point in your program for
+@dfn{Variables} are ways of storing values at one point in your program for
use later in another part of your program. They can be manipulated
entirely within the program text, and they can also be assigned values
on the @command{awk} command line.
@@ -10934,17 +11004,17 @@ are distinct variables.
A variable name is a valid expression by itself; it represents the
variable's current value. Variables are given new values with
@dfn{assignment operators}, @dfn{increment operators}, and
-@dfn{decrement operators}.
-@xref{Assignment Ops}.
+@dfn{decrement operators}
+(@pxref{Assignment Ops}).
In addition, the @code{sub()} and @code{gsub()} functions can
change a variable's value, and the @code{match()}, @code{split()},
and @code{patsplit()} functions can change the contents of their
-array parameters. @xref{String Functions}.
+array parameters (@pxref{String Functions}).
@cindex variables, built-in
@cindex variables, initializing
A few variables have special built-in meanings, such as @code{FS} (the
-field separator), and @code{NF} (the number of fields in the current input
+field separator) and @code{NF} (the number of fields in the current input
record). @DBXREF{Built-in Variables} for a list of the predefined variables.
These predefined variables can be used and assigned just like all other
variables, but their values are also used or changed automatically by
@@ -11201,7 +11271,7 @@ point, so the default behavior was restored to use a period as the
decimal point character. You can use the @option{--use-lc-numeric}
option (@pxref{Options}) to force @command{gawk} to use the locale's
decimal point character. (@command{gawk} also uses the locale's decimal
-point character when in POSIX mode, either via @option{--posix}, or the
+point character when in POSIX mode, either via @option{--posix} or the
@env{POSIXLY_CORRECT} environment variable, as shown previously.)
@ref{table-locale-affects} describes the cases in which the locale's decimal
@@ -11219,7 +11289,7 @@ features have not been described yet.
@end multitable
@end float
-Finally, modern day formal standards and IEEE standard floating-point
+Finally, modern-day formal standards and the IEEE standard floating-point
representation can have an unusual but important effect on the way
@command{gawk} converts some special string values to numbers. The details
are presented in @ref{POSIX Floating Point Problems}.
@@ -11227,7 +11297,7 @@ are presented in @ref{POSIX Floating Point Problems}.
@node All Operators
@section Operators: Doing Something with Values
-This @value{SECTION} introduces the @dfn{operators} which make use
+This @value{SECTION} introduces the @dfn{operators} that make use
of the values provided by constants and variables.
@menu
@@ -11405,7 +11475,7 @@ print "something meaningful" > file name
@noindent
This produces a syntax error with some versions of Unix
@command{awk}.@footnote{It happens that BWK
-@command{awk}, @command{gawk} and @command{mawk} all ``get it right,''
+@command{awk}, @command{gawk}, and @command{mawk} all ``get it right,''
but you should not rely on this.}
It is necessary to use the following:
@@ -11494,11 +11564,8 @@ you're never quite sure what you'll get.
@node Assignment Ops
@subsection Assignment Expressions
-@c STARTOFRANGE asop
@cindex assignment operators
-@c STARTOFRANGE opas
@cindex operators, assignment
-@c STARTOFRANGE exas
@cindex expressions, assignment
@cindex @code{=} (equals sign), @code{=} operator
@cindex equals sign (@code{=}), @code{=} operator
@@ -11658,7 +11725,7 @@ and
@ifdocbook
@DBREF{Numeric Functions}
@end ifdocbook
-for more information).
+for more information.)
This example illustrates an important fact about assignment
operators: the lefthand expression is only evaluated @emph{once}.
@@ -11694,17 +11761,17 @@ to a number.
@caption{Arithmetic assignment operators}
@multitable @columnfractions .30 .70
@headitem Operator @tab Effect
-@item @var{lvalue} @code{+=} @var{increment} @tab Add @var{increment} to the value of @var{lvalue}
-@item @var{lvalue} @code{-=} @var{decrement} @tab Subtract @var{decrement} from the value of @var{lvalue}
-@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiply the value of @var{lvalue} by @var{coefficient}
-@item @var{lvalue} @code{/=} @var{divisor} @tab Divide the value of @var{lvalue} by @var{divisor}
-@item @var{lvalue} @code{%=} @var{modulus} @tab Set @var{lvalue} to its remainder by @var{modulus}
+@item @var{lvalue} @code{+=} @var{increment} @tab Add @var{increment} to the value of @var{lvalue}.
+@item @var{lvalue} @code{-=} @var{decrement} @tab Subtract @var{decrement} from the value of @var{lvalue}.
+@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiply the value of @var{lvalue} by @var{coefficient}.
+@item @var{lvalue} @code{/=} @var{divisor} @tab Divide the value of @var{lvalue} by @var{divisor}.
+@item @var{lvalue} @code{%=} @var{modulus} @tab Set @var{lvalue} to its remainder by @var{modulus}.
@cindex common extensions, @code{**=} operator
@cindex extensions, common@comma{} @code{**=} operator
@cindex @command{awk} language, POSIX version
@cindex POSIX @command{awk}
-@item @var{lvalue} @code{^=} @var{power} @tab
-@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power @var{power} @value{COMMONEXT}
+@item @var{lvalue} @code{^=} @var{power} @tab Raise @var{lvalue} to the power @var{power}.
+@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power @var{power}. @value{COMMONEXT}
@end multitable
@end float
@@ -11804,16 +11871,11 @@ awk '/[=]=/' /dev/null
and @command{mawk} also do not.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE exas
-@c ENDOFRANGE opas
-@c ENDOFRANGE asop
@node Increment Ops
@subsection Increment and Decrement Operators
-@c STARTOFRANGE inop
@cindex increment operators
-@c STARTOFRANGE opde
@cindex operators, decrement/increment
@dfn{Increment} and @dfn{decrement operators} increase or decrease the value of
a variable by one. An assignment operator can do the same thing, so
@@ -11837,13 +11899,14 @@ has the value four, but it changes the value of @code{foo} to five.
In other words, the operator returns the old value of the variable,
but with the side effect of incrementing it.
+@c FIXME: Use @sup here for superscript
The post-increment @samp{foo++} is nearly the same as writing @samp{(foo
+= 1) - 1}. It is not perfectly equivalent because all numbers in
@command{awk} are floating point---in floating point, @samp{foo + 1 - 1} does
not necessarily equal @code{foo}. But the difference is minute as
long as you stick to numbers that are fairly small (less than
@iftex
-@math{10^12}).
+@math{10^{12}}).
@end iftex
@ifnottex
@ifnotdocbook
@@ -11861,7 +11924,6 @@ just like variables. (Use @samp{$(i++)} when you want to do a field reference
and a variable increment at the same time. The parentheses are necessary
because of the precedence of the field reference operator @samp{$}.)
-@c STARTOFRANGE deop
@cindex decrement operators
The decrement operator @samp{--} works just like @samp{++}, except that
it subtracts one instead of adding it. As with @samp{++}, it can be used before
@@ -11906,8 +11968,8 @@ like @samp{@var{lvalue}++}, but instead of adding, it subtracts.)
@cindex evaluation order
@cindex Marx, Groucho
@quotation
-@i{Doctor, doctor! It hurts when I do this!@*
-So don't do that!}
+@i{Doctor, it hurts when I do this!@*
+Then don't do that!}
@author Groucho Marx
@end quotation
@@ -11931,7 +11993,7 @@ print b
@cindex side effects
In other words, when do the various side effects prescribed by the
postfix operators (@samp{b++}) take effect?
-When side effects happen is @dfn{implementation defined}.
+When side effects happen is @dfn{implementation-defined}.
In other words, it is up to the particular version of @command{awk}.
The result for the first example may be 12 or 13, and for the second, it
may be 22 or 23.
@@ -11958,8 +12020,8 @@ You should avoid such things in your own programs.
@cindex evaluation order
@cindex Marx, Groucho
@quotation
-@i{Doctor, doctor! It hurts when I do this!@*
-So don't do that!}
+@i{Doctor, it hurts when I do this!@*
+Then don't do that!}
@author Groucho Marx
@end quotation
@@ -11983,7 +12045,7 @@ print b
@cindex side effects
In other words, when do the various side effects prescribed by the
postfix operators (@samp{b++}) take effect?
-When side effects happen is @dfn{implementation defined}.
+When side effects happen is @dfn{implementation-defined}.
In other words, it is up to the particular version of @command{awk}.
The result for the first example may be 12 or 13, and for the second, it
may be 22 or 23.
@@ -11995,15 +12057,12 @@ You should avoid such things in your own programs.
@c in the mirror in the morning.
@end cartouche
@end ifnotdocbook
-@c ENDOFRANGE inop
-@c ENDOFRANGE opde
-@c ENDOFRANGE deop
@node Truth Values and Conditions
@section Truth Values and Conditions
-In certain contexts, expression values also serve as ``truth values''; (i.e.,
-they determine what should happen next as the program runs). This
+In certain contexts, expression values also serve as ``truth values''; i.e.,
+they determine what should happen next as the program runs. This
@value{SECTION} describes how @command{awk} defines ``true'' and ``false''
and how values are compared.
@@ -12061,20 +12120,19 @@ the string constant @code{"0"} is actually true, because it is non-null.
@i{The Guide is definitive. Reality is frequently inaccurate.}
@author Douglas Adams, @cite{The Hitchhiker's Guide to the Galaxy}
@end quotation
+@c 2/2015: Antonio Colombo points out that this is really from
+@c The Restaurant at the End of the Universe. But I'm going to
+@c leave it alone.
-@c STARTOFRANGE comex
@cindex comparison expressions
-@c STARTOFRANGE excom
@cindex expressions, comparison
@cindex expressions, matching, See comparison expressions
@cindex matching, expressions, See comparison expressions
@cindex relational operators, See comparison operators
@cindex operators, relational, See operators@comma{} comparison
-@c STARTOFRANGE varting
@cindex variable typing
-@c STARTOFRANGE vartypc
@cindex variables, types of, comparison expressions and
-Unlike other programming languages, @command{awk} variables do not have a
+Unlike in other programming languages, in @command{awk} variables do not have a
fixed type. Instead, they can be either a number or a string, depending
upon the value that is assigned to them.
We look now at how variables are typed, and how @command{awk}
@@ -12103,20 +12161,20 @@ Variable typing follows these rules:
@itemize @value{BULLET}
@item
-A numeric constant or the result of a numeric operation has the @var{numeric}
+A numeric constant or the result of a numeric operation has the @dfn{numeric}
attribute.
@item
-A string constant or the result of a string operation has the @var{string}
+A string constant or the result of a string operation has the @dfn{string}
attribute.
@item
Fields, @code{getline} input, @code{FILENAME}, @code{ARGV} elements,
@code{ENVIRON} elements, and the elements of an array created by
@code{match()}, @code{split()}, and @code{patsplit()} that are numeric
-strings have the @var{strnum} attribute. Otherwise, they have
-the @var{string} attribute. Uninitialized variables also have the
-@var{strnum} attribute.
+strings have the @dfn{strnum} attribute. Otherwise, they have
+the @dfn{string} attribute. Uninitialized variables also have the
+@dfn{strnum} attribute.
@item
Attributes propagate across assignments but are not changed by
@@ -12260,13 +12318,13 @@ constant, then a string comparison is performed. Otherwise, a
numeric comparison is performed.
This point bears additional emphasis: All user input is made of characters,
-and so is first and foremost of @var{string} type; input strings
-that look numeric are additionally given the @var{strnum} attribute.
+and so is first and foremost of string type; input strings
+that look numeric are additionally given the strnum attribute.
Thus, the six-character input string @w{@samp{ +3.14}} receives the
-@var{strnum} attribute. In contrast, the eight characters
+strnum attribute. In contrast, the eight characters
@w{@code{" +3.14"}} appearing in program text comprise a string constant.
The following examples print @samp{1} when the comparison between
-the two different constants is true, @samp{0} otherwise:
+the two different constants is true, and @samp{0} otherwise:
@c 22.9.2014: Tested with mawk and BWK awk, got same results.
@example
@@ -12396,7 +12454,7 @@ $ @kbd{echo 1e2 3 | awk '@{ print ($1 < $2) ? "true" : "false" @}'}
@noindent
the result is @samp{false} because both @code{$1} and @code{$2}
are user input. They are numeric strings---therefore both have
-the @var{strnum} attribute, dictating a numeric comparison.
+the strnum attribute, dictating a numeric comparison.
The purpose of the comparison rules and the use of numeric strings is
to attempt to produce the behavior that is ``least surprising,'' while
still ``doing the right thing.''
@@ -12455,7 +12513,7 @@ characters sort, as defined by the locale (for more discussion,
@pxref{Locales}). This order is usually very different
from the results obtained when doing straight character-by-character
comparison.@footnote{Technically, string comparison is supposed
-to behave the same way as if the strings are compared with the C
+to behave the same way as if the strings were compared with the C
@code{strcoll()} function.}
Because this behavior differs considerably from existing practice,
@@ -12472,19 +12530,13 @@ $ @kbd{gawk --posix 'BEGIN @{ printf("ABC < abc = %s\n",}
@print{} ABC < abc = FALSE
@end example
-@c ENDOFRANGE comex
-@c ENDOFRANGE excom
-@c ENDOFRANGE vartypc
-@c ENDOFRANGE varting
@node Boolean Ops
@subsection Boolean Expressions
@cindex and Boolean-logic operator
@cindex or Boolean-logic operator
@cindex not Boolean-logic operator
-@c STARTOFRANGE exbo
@cindex expressions, Boolean
-@c STARTOFRANGE boex
@cindex Boolean expressions
@cindex operators, Boolean, See Boolean expressions
@cindex Boolean operators, See Boolean expressions
@@ -12568,7 +12620,7 @@ BEGIN @{ if (! ("HOME" in ENVIRON))
@cindex vertical bar (@code{|}), @code{||} operator
The @samp{&&} and @samp{||} operators are called @dfn{short-circuit}
operators because of the way they work. Evaluation of the full expression
-is ``short-circuited'' if the result can be determined part way through
+is ``short-circuited'' if the result can be determined partway through
its evaluation.
@cindex line continuations
@@ -12630,8 +12682,6 @@ next record, and start processing the rules over again at the top.
The reason it's there is to avoid printing the bracketing
@samp{START} and @samp{END} lines.
@end quotation
-@c ENDOFRANGE exbo
-@c ENDOFRANGE boex
@node Conditional Exp
@subsection Conditional Expressions
@@ -12642,8 +12692,8 @@ The reason it's there is to avoid printing the bracketing
A @dfn{conditional expression} is a special kind of expression that has
three operands. It allows you to use one expression's value to select
one of two other expressions.
-The conditional expression is the same as in the C language,
-as shown here:
+The conditional expression in @command{awk} is the same as in the C
+language, as shown here:
@example
@var{selector} ? @var{if-true-exp} : @var{if-false-exp}
@@ -12652,8 +12702,8 @@ as shown here:
@noindent
There are three subexpressions. The first, @var{selector}, is always
computed first. If it is ``true'' (not zero or not null), then
-@var{if-true-exp} is computed next and its value becomes the value of
-the whole expression. Otherwise, @var{if-false-exp} is computed next
+@var{if-true-exp} is computed next, and its value becomes the value of
+the whole expression. Otherwise, @var{if-false-exp} is computed next,
and its value becomes the value of the whole expression.
For example, the following expression produces the absolute value of @code{x}:
@@ -12701,7 +12751,7 @@ ask for it by name at any point in the program. For
example, the function @code{sqrt()} computes the square root of a number.
@cindex functions, built-in
-A fixed set of functions are @dfn{built-in}, which means they are
+A fixed set of functions are @dfn{built in}, which means they are
available in every @command{awk} program. The @code{sqrt()} function is one
of these. @DBXREF{Built-in} for a list of built-in
functions and their descriptions. In addition, you can define
@@ -12810,9 +12860,7 @@ $ @kbd{awk -f matchit.awk}
@node Precedence
@section Operator Precedence (How Operators Nest)
-@c STARTOFRANGE prec
@cindex precedence
-@c STARTOFRANGE oppr
@cindex operators, precedence
@dfn{Operator precedence} determines how operators are grouped when
@@ -12877,7 +12925,7 @@ Increment, decrement.
@cindex @code{*} (asterisk), @code{**} operator
@cindex asterisk (@code{*}), @code{**} operator
@item @code{^ **}
-Exponentiation. These operators group right-to-left.
+Exponentiation. These operators group right to left.
@cindex @code{+} (plus sign), @code{+} operator
@cindex plus sign (@code{+}), @code{+} operator
@@ -12943,7 +12991,7 @@ statements belong to the statement level, not to expressions. The
redirection does not produce an expression that could be the operand of
another operator. As a result, it does not make sense to use a
redirection operator near another operator of lower precedence without
-parentheses. Such combinations (e.g., @samp{print foo > a ? b : c}),
+parentheses. Such combinations (e.g., @samp{print foo > a ? b : c})
result in syntax errors.
The correct way to write this statement is @samp{print foo > (a ? b : c)}.
@@ -12961,17 +13009,17 @@ Array membership.
@cindex @code{&} (ampersand), @code{&&} operator
@cindex ampersand (@code{&}), @code{&&} operator
@item @code{&&}
-Logical ``and''.
+Logical ``and.''
@cindex @code{|} (vertical bar), @code{||} operator
@cindex vertical bar (@code{|}), @code{||} operator
@item @code{||}
-Logical ``or''.
+Logical ``or.''
@cindex @code{?} (question mark), @code{?:} operator
@cindex question mark (@code{?}), @code{?:} operator
@item @code{?:}
-Conditional. This operator groups right-to-left.
+Conditional. This operator groups right to left.
@cindex @code{+} (plus sign), @code{+=} operator
@cindex plus sign (@code{+}), @code{+=} operator
@@ -12988,7 +13036,7 @@ Conditional. This operator groups right-to-left.
@cindex @code{^} (caret), @code{^=} operator
@cindex caret (@code{^}), @code{^=} operator
@item @code{= += -= *= /= %= ^= **=}
-Assignment. These operators group right-to-left.
+Assignment. These operators group right to left.
@end table
@cindex POSIX @command{awk}, @code{**} operator and
@@ -12997,8 +13045,6 @@ Assignment. These operators group right-to-left.
The @samp{|&}, @samp{**}, and @samp{**=} operators are not specified by POSIX.
For maximum portability, do not use them.
@end quotation
-@c ENDOFRANGE prec
-@c ENDOFRANGE oppr
@node Locales
@section Where You Are Makes a Difference
@@ -13064,8 +13110,8 @@ Locales can influence the conversions.
@item
@command{awk} provides the usual arithmetic operators (addition,
subtraction, multiplication, division, modulus), and unary plus and minus.
-It also provides comparison operators, boolean operators, array membership
-testing, and regexp
+It also provides comparison operators, Boolean operators, an array membership
+testing operator, and regexp
matching operators. String concatenation is accomplished by placing
two expressions next to each other; there is no explicit operator.
The three-operand @samp{?:} operator provides an ``if-else'' test within
@@ -13076,7 +13122,7 @@ Assignment operators provide convenient shorthands for common arithmetic
operations.
@item
-In @command{awk}, a value is considered to be true if it is non-zero
+In @command{awk}, a value is considered to be true if it is nonzero
@emph{or} non-null. Otherwise, the value is false.
@item
@@ -13085,7 +13131,7 @@ lifetime. The type determines how it behaves in comparisons (string
or numeric).
@item
-Function calls return a value which may be used as part of a larger
+Function calls return a value that may be used as part of a larger
expression. Expressions used to pass parameter values are fully
evaluated before the function is called. @command{awk} provides
built-in and user-defined functions; this is described in
@@ -13102,11 +13148,9 @@ program, and occasionally the format for data read as input.
@end itemize
-@c ENDOFRANGE exps
@node Patterns and Actions
@chapter Patterns, Actions, and Variables
-@c STARTOFRANGE pat
@cindex patterns
As you have already seen, each @command{awk} statement consists of
@@ -13114,7 +13158,7 @@ a pattern with an associated action. This @value{CHAPTER} describes how
you build patterns and actions, what kinds of things you can do within
actions, and @command{awk}'s predefined variables.
-The pattern-action rules and the statements available for use
+The pattern--action rules and the statements available for use
within actions form the core of @command{awk} programming.
In a sense, everything covered
up to here has been the foundation
@@ -13249,6 +13293,7 @@ $ @kbd{awk '$1 ~ /li/ @{ print $2 @}' mail-list}
@cindex regexp constants, as patterns
@cindex patterns, regexp constants as
+A regexp constant as a pattern is also a special case of an expression
pattern. The expression @code{/li/} has the value one if @samp{li}
appears in the current input record. Thus, as a pattern, @code{/li/}
matches any record containing @samp{li}.
@@ -13305,7 +13350,7 @@ patterns. Likewise, the special patterns @code{BEGIN}, @code{END},
which never match any input record, are not expressions and cannot
appear inside Boolean patterns.
-The precedence of the different operators which can appear in
+The precedence of the different operators that can appear in
patterns is described in @ref{Precedence}.
@node Ranges
@@ -13331,7 +13376,7 @@ prints every record in @file{myfile} between @samp{on}/@samp{off} pairs, inclusi
A range pattern starts out by matching @var{begpat} against every
input record. When a record matches @var{begpat}, the range pattern is
-@dfn{turned on} and the range pattern matches this record as well. As long as
+@dfn{turned on}, and the range pattern matches this record as well. As long as
the range pattern stays turned on, it automatically matches every input
record read. The range pattern also matches @var{endpat} against every
input record; when this succeeds, the range pattern is @dfn{turned off} again
@@ -13402,9 +13447,7 @@ a range pattern. @value{DARKCORNER}
@node BEGIN/END
@subsection The @code{BEGIN} and @code{END} Special Patterns
-@c STARTOFRANGE beg
@cindex @code{BEGIN} pattern
-@c STARTOFRANGE end
@cindex @code{END} pattern
All the patterns described so far are for matching input records.
The @code{BEGIN} and @code{END} special patterns are different.
@@ -13477,7 +13520,7 @@ using library functions.
for a number of useful library functions.
If an @command{awk} program has only @code{BEGIN} rules and no
-other rules, then the program exits after the @code{BEGIN} rule is
+other rules, then the program exits after the @code{BEGIN} rules are
run.@footnote{The original version of @command{awk} kept
reading and ignoring input until the end of the file was seen.} However, if an
@code{END} rule exists, then the input is read, even if there are
@@ -13505,7 +13548,7 @@ Another way is simply to assign a value to @code{$0}.
@cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and
@cindex @code{BEGIN} pattern, @code{print} statement and
@cindex @code{END} pattern, @code{print} statement and
-The second point is similar to the first but from the other direction.
+The second point is similar to the first, but from the other direction.
Traditionally, due largely to implementation issues, @code{$0} and
@code{NF} were @emph{undefined} inside an @code{END} rule.
The POSIX standard specifies that @code{NF} is available in an @code{END}
@@ -13542,8 +13585,6 @@ are not valid in an @code{END} rule, because all the input has been read.
@ifdocbook
@DBREF{Nextfile Statement}.)
@end ifdocbook
-@c ENDOFRANGE beg
-@c ENDOFRANGE end
@node BEGINFILE/ENDFILE
@subsection The @code{BEGINFILE} and @code{ENDFILE} Special Patterns
@@ -13596,7 +13637,7 @@ fatal error.
@item
If you have written extensions that modify the record handling (by
-inserting an ``input parser,'' @pxref{Input Parsers}), you can invoke
+inserting an ``input parser''; @pxref{Input Parsers}), you can invoke
them at this point, before @command{gawk} has started processing the file.
(This is a @emph{very} advanced feature, currently used only by the
@uref{http://gawkextlib.sourceforge.net, @code{gawkextlib} project}.)
@@ -13607,8 +13648,8 @@ the last record in an input file. For the last input file,
it will be called before any @code{END} rules.
The @code{ENDFILE} rule is executed even for empty input files.
-Normally, when an error occurs when reading input in the normal input
-processing loop, the error is fatal. However, if an @code{ENDFILE}
+Normally, when an error occurs when reading input in the normal
+input-processing loop, the error is fatal. However, if an @code{ENDFILE}
rule is present, the error becomes non-fatal, and instead @code{ERRNO}
is set. This makes it possible to catch and process I/O errors at the
level of the @command{awk} program.
@@ -13617,7 +13658,7 @@ level of the @command{awk} program.
The @code{next} statement (@pxref{Next Statement}) is not allowed inside
either a @code{BEGINFILE} or an @code{ENDFILE} rule. The @code{nextfile}
statement is allowed only inside a
-@code{BEGINFILE} rule, but not inside an @code{ENDFILE} rule.
+@code{BEGINFILE} rule, not inside an @code{ENDFILE} rule.
@cindex @code{getline} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
The @code{getline} statement (@pxref{Getline}) is restricted inside
@@ -13664,7 +13705,6 @@ awk '@{ print $1 @}' mail-list
@noindent
prints the first field of every record.
-@c ENDOFRANGE pat
@node Using Shell Variables
@section Using Shell Variables in Programs
@@ -13694,11 +13734,11 @@ awk "/$pattern/ "'@{ nmatches++ @}
@noindent
The @command{awk} program consists of two pieces of quoted text
that are concatenated together to form the program.
-The first part is double quoted, which allows substitution of
+The first part is double-quoted, which allows substitution of
the @code{pattern} shell variable inside the quotes.
-The second part is single quoted.
+The second part is single-quoted.
-Variable substitution via quoting works, but can be potentially
+Variable substitution via quoting works, but can potentially be
messy. It requires a good understanding of the shell's quoting rules
(@pxref{Quoting}),
and it's often difficult to correctly
@@ -13813,11 +13853,8 @@ For deleting array elements.
@node Statements
@section Control Statements in Actions
-@c STARTOFRANGE csta
@cindex control statements
-@c STARTOFRANGE acs
@cindex statements, control, in actions
-@c STARTOFRANGE accs
@cindex actions, control statements in
@dfn{Control statements}, such as @code{if}, @code{while}, and so on,
@@ -13960,13 +13997,13 @@ The body of this loop is a compound statement enclosed in braces,
containing two statements.
The loop works in the following manner: first, the value of @code{i} is set to one.
Then, the @code{while} statement tests whether @code{i} is less than or equal to
-three. This is true when @code{i} equals one, so the @code{i}-th
+three. This is true when @code{i} equals one, so the @code{i}th
field is printed. Then the @samp{i++} increments the value of @code{i}
and the loop repeats. The loop terminates when @code{i} reaches four.
A newline is not required between the condition and the
body; however, using one makes the program clearer unless the body is a
-compound statement or else is very simple. The newline after the open-brace
+compound statement or else is very simple. The newline after the open brace
that begins the compound statement is not required either, but the
program is harder to read without it.
@@ -13996,9 +14033,9 @@ while (@var{condition})
@end example
@noindent
-This statement does not execute @var{body} even once if the @var{condition}
-is false to begin with.
-The following is an example of a @code{do} statement:
+This statement does not execute the @var{body} even once if the
+@var{condition} is false to begin with. The following is an example of
+a @code{do} statement:
@example
@{
@@ -14065,7 +14102,7 @@ their assignments as separate statements preceding the @code{for} loop.)
The same is true of the @var{increment} part. Incrementing additional
variables requires separate statements at the end of the loop.
The C compound expression, using C's comma operator, is useful in
-this context but it is not supported in @command{awk}.
+this context, but it is not supported in @command{awk}.
Most often, @var{increment} is an increment expression, as in the previous
example. But this is not required; it can be any expression
@@ -14156,7 +14193,7 @@ default:
Control flow in
the @code{switch} statement works as it does in C. Once a match to a given
case is made, the case statement bodies execute until a @code{break},
-@code{continue}, @code{next}, @code{nextfile} or @code{exit} is encountered,
+@code{continue}, @code{next}, @code{nextfile}, or @code{exit} is encountered,
or the end of the @code{switch} statement itself. For example:
@example
@@ -14208,12 +14245,12 @@ numbers:
# find smallest divisor of num
@{
num = $1
- for (div = 2; div * div <= num; div++) @{
- if (num % div == 0)
+ for (divisor = 2; divisor * divisor <= num; divisor++) @{
+ if (num % divisor == 0)
break
@}
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
+ if (num % divisor == 0)
+ printf "Smallest divisor of %d is %d\n", num, divisor
else
printf "%d is prime\n", num
@}
@@ -14234,12 +14271,12 @@ an @code{if}:
# find smallest divisor of num
@{
num = $1
- for (div = 2; ; div++) @{
- if (num % div == 0) @{
- printf "Smallest divisor of %d is %d\n", num, div
+ for (divisor = 2; ; divisor++) @{
+ if (num % divisor == 0) @{
+ printf "Smallest divisor of %d is %d\n", num, divisor
break
@}
- if (div * div > num) @{
+ if (divisor * divisor > num) @{
printf "%d is prime\n", num
break
@}
@@ -14330,7 +14367,12 @@ body of a loop. Historical versions of @command{awk} treated a @code{continue}
statement outside a loop the same way they treated a @code{break}
statement outside a loop: as if it were a @code{next}
statement
+@ifset FOR_PRINT
+(discussed in the following section).
+@end ifset
+@ifclear FOR_PRINT
(@pxref{Next Statement}).
+@end ifclear
@value{DARKCORNER}
Recent versions of BWK @command{awk} no longer work this way, nor
does @command{gawk}.
@@ -14458,7 +14500,7 @@ See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group website}.
@cindex @code{nextfile} statement, user-defined functions and
@cindex Brian Kernighan's @command{awk}
@cindex @command{mawk} utility
-The current version of BWK @command{awk}, and @command{mawk}
+The current version of BWK @command{awk} and @command{mawk}
also support @code{nextfile}. However, they don't allow the
@code{nextfile} statement inside function bodies (@pxref{User-defined}).
@command{gawk} does; a @code{nextfile} inside a function body reads the
@@ -14496,7 +14538,7 @@ any @code{ENDFILE} rules; they do not execute.
In such a case,
if you don't want the @code{END} rule to do its job, set a variable
-to nonzero before the @code{exit} statement and check that variable in
+to a nonzero value before the @code{exit} statement and check that variable in
the @code{END} rule.
@DBXREF{Assert Function}
for an example that does this.
@@ -14535,15 +14577,10 @@ Negative values, and values of 127 or greater, may not produce consistent
results across different operating systems.
@end quotation
-@c ENDOFRANGE csta
-@c ENDOFRANGE acs
-@c ENDOFRANGE accs
@node Built-in Variables
@section Predefined Variables
-@c STARTOFRANGE bvar
@cindex predefined variables
-@c STARTOFRANGE varb
@cindex variables, predefined
Most @command{awk} variables are available to use for your own
@@ -14569,10 +14606,8 @@ their areas of activity.
@end menu
@node User-modified
-@subsection Built-In Variables That Control @command{awk}
-@c STARTOFRANGE bvaru
+@subsection Built-in Variables That Control @command{awk}
@cindex predefined variables, user-modifiable
-@c STARTOFRANGE nmbv
@cindex user-modifiable variables
The following is an alphabetical list of variables that you can change to
@@ -14600,7 +14635,7 @@ respectively, should use binary I/O. A string value of @code{"rw"} or
@code{"wr"} indicates that all files should use binary I/O. Any other
string value is treated the same as @code{"rw"}, but causes @command{gawk}
to generate a warning message. @code{BINMODE} is described in more
-detail in @ref{PC Using}. @command{mawk} (@pxref{Other Versions}),
+detail in @ref{PC Using}. @command{mawk} (@pxref{Other Versions})
also supports this variable, but only using numeric values.
@cindex @code{CONVFMT} variable
@@ -14608,7 +14643,7 @@ also supports this variable, but only using numeric values.
@cindex numbers, converting, to strings
@cindex strings, converting, numbers to
@item @code{CONVFMT}
-This string controls conversion of numbers to
+A string that controls the conversion of numbers to
strings (@pxref{Conversion}).
It works by being passed, in effect, as the first argument to the
@code{sprintf()} function
@@ -14683,12 +14718,13 @@ is to simply say @samp{FS = FS}, perhaps with an explanatory comment.
@cindex regular expressions, case sensitivity
@item IGNORECASE #
If @code{IGNORECASE} is nonzero or non-null, then all string comparisons
-and all regular expression matching are case independent. Thus, regexp
-matching with @samp{~} and @samp{!~}, as well as the @code{gensub()},
-@code{gsub()}, @code{index()}, @code{match()}, @code{patsplit()},
-@code{split()}, and @code{sub()}
-functions, record termination with @code{RS}, and field splitting with
-@code{FS} and @code{FPAT}, all ignore case when doing their particular regexp operations.
+and all regular expression matching are case-independent.
+This applies to
+regexp matching with @samp{~} and @samp{!~},
+the @code{gensub()}, @code{gsub()}, @code{index()}, @code{match()},
+@code{patsplit()}, @code{split()}, and @code{sub()} functions,
+record termination with @code{RS}, and field splitting with
+@code{FS} and @code{FPAT}.
However, the value of @code{IGNORECASE} does @emph{not} affect array subscripting
and it does not affect field splitting when using a single-character
field separator.
@@ -14709,7 +14745,7 @@ Any other true value prints nonfatal warnings.
Assigning a false value to @code{LINT} turns off the lint warnings.
This variable is a @command{gawk} extension. It is not special
-in other @command{awk} implementations. Unlike the other special variables,
+in other @command{awk} implementations. Unlike with the other special variables,
changing @code{LINT} does affect the production of lint warnings,
even if @command{gawk} is in compatibility mode. Much as
the @option{--lint} and @option{--traditional} options independently
@@ -14721,7 +14757,7 @@ of @command{awk} being executed.
@cindex numbers, converting, to strings
@cindex strings, converting, numbers to
@item OFMT
-Controls conversion of numbers to
+A string that controls conversion of numbers to
strings (@pxref{Conversion}) for
printing with the @code{print} statement. It works by being passed
as the first argument to the @code{sprintf()} function
@@ -14736,7 +14772,7 @@ strings in general expressions; this is now done by @code{CONVFMT}.
@cindex separators, field
@cindex field separators
@item OFS
-This is the output field separator (@pxref{Output Separators}). It is
+The output field separator (@pxref{Output Separators}). It is
output between the fields printed by a @code{print} statement. Its
default value is @w{@code{" "}}, a string consisting of a single space.
@@ -14754,7 +14790,7 @@ The working precision of arbitrary-precision floating-point numbers,
@cindex @code{ROUNDMODE} variable
@item ROUNDMODE #
The rounding mode to use for arbitrary-precision arithmetic on
-numbers, by default @code{"N"} (@samp{roundTiesToEven} in
+numbers, by default @code{"N"} (@code{roundTiesToEven} in
the IEEE 754 standard; @pxref{Setting the rounding mode}).
@cindex @code{RS} variable
@@ -14783,7 +14819,7 @@ just the first character of @code{RS}'s value is used.
@item @code{SUBSEP}
The subscript separator. It has the default value of
@code{"\034"} and is used to separate the parts of the indices of a
-multidimensional array. Thus, the expression @code{@w{foo["A", "B"]}}
+multidimensional array. Thus, the expression @samp{@w{foo["A", "B"]}}
really accesses @code{foo["A\034B"]}
(@pxref{Multidimensional}).
@@ -14799,17 +14835,11 @@ marked string constants in the source text, as well as for the
(@pxref{Internationalization}).
The default value of @code{TEXTDOMAIN} is @code{"messages"}.
@end table
-@c ENDOFRANGE bvar
-@c ENDOFRANGE varb
-@c ENDOFRANGE bvaru
-@c ENDOFRANGE nmbv
@node Auto-set
-@subsection Built-In Variables That Convey Information
+@subsection Built-in Variables That Convey Information
-@c STARTOFRANGE bvconi
@cindex predefined variables, conveying information
-@c STARTOFRANGE vbconi
@cindex variables, predefined conveying information
The following is an alphabetical list of variables that @command{awk}
sets automatically on certain occasions in order to provide
@@ -14939,6 +14969,11 @@ value to be meaningful when an I/O operation returns a failure value,
such as @code{getline} returning @minus{}1. You are, of course, free
to clear it yourself before doing an I/O operation.
+If the value of @code{ERRNO} corresponds to a system error in the C
+@code{errno} variable, then @code{PROCINFO["errno"]} will be set to the value
+of @code{errno}. For non-system errors, @code{PROCINFO["errno"]} will
+be zero.
+
@cindex @code{FILENAME} variable
@cindex dark corner, @code{FILENAME} variable
@item @code{FILENAME}
@@ -14965,12 +15000,12 @@ input file.
@item @code{NF}
The number of fields in the current input record.
@code{NF} is set each time a new record is read, when a new field is
-created or when @code{$0} changes (@pxref{Fields}).
+created, or when @code{$0} changes (@pxref{Fields}).
Unlike most of the variables described in this @value{SUBSECTION},
assigning a value to @code{NF} has the potential to affect
@command{awk}'s internal workings. In particular, assignments
-to @code{NF} can be used to create or remove fields from the
+to @code{NF} can be used to create fields in or remove fields from the
current record. @xref{Changing Fields}.
@cindex @code{FUNCTAB} array
@@ -15007,6 +15042,10 @@ are guaranteed to be available:
@item PROCINFO["egid"]
The value of the @code{getegid()} system call.
+@item PROCINFO["errno"]
+The value of the C @code{errno} variable when @code{ERRNO} is set to
+the associated error message.
+
@item PROCINFO["euid"]
@cindex effective user ID of @command{gawk} user
The value of the @code{geteuid()} system call.
@@ -15020,7 +15059,7 @@ or @code{"FPAT"} if field matching with @code{FPAT} is in effect.
@item PROCINFO["identifiers"]
@cindex program identifiers
A subarray, indexed by the names of all identifiers used in the text of
-the AWK program. An @dfn{identifier} is simply the name of a variable
+the @command{awk} program. An @dfn{identifier} is simply the name of a variable
(be it scalar or array), built-in function, user-defined function, or
extension function. For each identifier, the value of the element is
one of the following:
@@ -15040,7 +15079,7 @@ The identifier is an extension function loaded via
The identifier is a scalar.
@item "untyped"
-The identifier is untyped (could be used as a scalar or array,
+The identifier is untyped (could be used as a scalar or an array;
@command{gawk} doesn't know yet).
@item "user"
@@ -15057,7 +15096,7 @@ while the program runs.
The value of the @code{getgid()} system call.
@item PROCINFO["pgrpid"]
-@cindex process group idIDof @command{gawk} process
+@cindex process group ID of @command{gawk} process
The process group ID of the current process.
@item PROCINFO["pid"]
@@ -15109,7 +15148,7 @@ The version of the GNU MP library.
The maximum precision supported by MPFR.
@item PROCINFO["prec_min"]
-@cindex minimum precision supported by MPFR library
+@cindex minimum precision required by MPFR library
The minimum precision required by MPFR.
@end table
@@ -15146,6 +15185,11 @@ open input file, pipe, or coprocess.
@DBXREF{Read Timeout} for more information.
@item
+It may be used to indicate that input may be retried when it fails due to
+certain errors.
+@DBXREF{Retrying Input} for more information.
+
+@item
It may be used to cause coprocesses to communicate over pseudo-ttys
instead of through two-way pipes; this is discussed further in
@ref{Two-way I/O}.
@@ -15161,7 +15205,7 @@ is the length of the matched string, or @minus{}1 if no match is found.
@cindex @code{RSTART} variable
@item @code{RSTART}
-The start-index in characters of the substring that is matched by the
+The start index in characters of the substring that is matched by the
@code{match()} function
(@pxref{String Functions}).
@code{RSTART} is set by invoking the @code{match()} function. Its value
@@ -15228,11 +15272,9 @@ function multiply(variable, amount)
@quotation NOTE
In order to avoid severe time-travel paradoxes,@footnote{Not to mention difficult
implementation issues.} neither @code{FUNCTAB} nor @code{SYMTAB}
-are available as elements within the @code{SYMTAB} array.
+is available as an element within the @code{SYMTAB} array.
@end quotation
@end table
-@c ENDOFRANGE bvconi
-@c ENDOFRANGE vbconi
@cindex sidebar, Changing @code{NR} and @code{FNR}
@ifdocbook
@@ -15450,7 +15492,7 @@ When designing your program, you should choose options that don't
conflict with @command{gawk}'s, because it will process any options
that it accepts before passing the rest of the command line on to
your program. Using @samp{#!} with the @option{-E} option may help
-(@DBXREF{Executable Scripts}
+(@DBPXREF{Executable Scripts}
and
@ifnotdocbook
@DBPXREF{Options}).
@@ -15464,15 +15506,15 @@ and
@itemize @value{BULLET}
@item
-Pattern-action pairs make up the basic elements of an @command{awk}
+Pattern--action pairs make up the basic elements of an @command{awk}
program. Patterns are either normal expressions, range expressions,
-regexp constants, one of the special keywords @code{BEGIN}, @code{END},
-@code{BEGINFILE}, @code{ENDFILE}, or empty. The action executes if
+or regexp constants; one of the special keywords @code{BEGIN}, @code{END},
+@code{BEGINFILE}, or @code{ENDFILE}; or empty. The action executes if
the current record matches the pattern. Empty (missing) patterns match
all records.
@item
-I/O from @code{BEGIN} and @code{END} rules have certain constraints.
+I/O from @code{BEGIN} and @code{END} rules has certain constraints.
This is also true, only more so, for @code{BEGINFILE} and @code{ENDFILE}
rules. The latter two give you ``hooks'' into @command{gawk}'s file
processing, allowing you to recover from a file that otherwise would
@@ -15502,12 +15544,12 @@ iteration of a loop (or get out of a @code{switch}).
@item
@code{next} and @code{nextfile} let you read the next record and start
-over at the top of your program, or skip to the next input file and
+over at the top of your program or skip to the next input file and
start over, respectively.
@item
The @code{exit} statement terminates your program. When executed
-from an action (or function body) it transfers control to the
+from an action (or function body), it transfers control to the
@code{END} statements. From an @code{END} statement body, it exits
immediately. You may pass an optional numeric value to be used
as @command{awk}'s exit status.
@@ -15525,7 +15567,6 @@ control how @command{awk} will process the provided @value{DF}s.
@node Arrays
@chapter Arrays in @command{awk}
-@c STARTOFRANGE arrs
@cindex arrays
An @dfn{array} is a table of values called @dfn{elements}. The
@@ -15600,7 +15641,7 @@ In most other languages, arrays must be @dfn{declared} before use,
including a specification of
how many elements or components they contain. In such languages, the
declaration causes a contiguous block of memory to be allocated for that
-many elements. Usually, an index in the array must be a positive integer.
+many elements. Usually, an index in the array must be a nonnegative integer.
For example, the index zero specifies the first element in the array, which is
actually stored at the beginning of the block of memory. Index one
specifies the second element, which is stored in memory right after the
@@ -15611,15 +15652,17 @@ the declaration.
indices---e.g., @samp{15 .. 27}---but the size of the array is still fixed when
the array is declared.)
-A contiguous array of four elements might look like the following example,
-conceptually, if the element values are 8, @code{"foo"},
-@code{""}, and 30
+@c 1/2015: Do not put the numeric values into @code. Array element
+@c values are no different than scalar variable values.
+A contiguous array of four elements might look like
@ifnotdocbook
-as shown in @ref{figure-array-elements}:
+@ref{figure-array-elements},
@end ifnotdocbook
@ifdocbook
-as shown in @inlineraw{docbook, <xref linkend="figure-array-elements"/>}:
+@inlineraw{docbook, <xref linkend="figure-array-elements"/>},
@end ifdocbook
+conceptually, if the element values are eight, @code{"foo"},
+@code{""}, and 30.
@ifnotdocbook
@float Figure,figure-array-elements
@@ -15644,12 +15687,10 @@ as shown in @inlineraw{docbook, <xref linkend="figure-array-elements"/>}:
@noindent
Only the values are stored; the indices are implicit from the order of
-the values. Here, 8 is the value at index zero, because 8 appears in the
+the values. Here, eight is the value at index zero, because eight appears in the
position with zero elements before it.
-@c STARTOFRANGE arrin
@cindex arrays, indexing
-@c STARTOFRANGE inarr
@cindex indexing arrays
@cindex associative arrays
@cindex arrays, associative
@@ -15658,19 +15699,21 @@ that each array is a collection of pairs---an index and its corresponding
array element value:
@ifnotdocbook
-@example
-@r{Index} 3 @r{Value} 30
-@r{Index} 1 @r{Value} "foo"
-@r{Index} 0 @r{Value} 8
-@r{Index} 2 @r{Value} ""
-@end example
+@c extra empty column to indent it right
+@multitable @columnfractions .1 .1 .1
+@headitem @tab Index @tab Value
+@item @tab @code{3} @tab @code{30}
+@item @tab @code{1} @tab @code{"foo"}
+@item @tab @code{0} @tab @code{8}
+@item @tab @code{2} @tab @code{""}
+@end multitable
@end ifnotdocbook
@docbook
<informaltable>
<tgroup cols="2">
-<colspec colname="1" align="center"/>
-<colspec colname="2" align="center"/>
+<colspec colname="1" align="left"/>
+<colspec colname="2" align="left"/>
<thead>
<row>
<entry>Index</entry>
@@ -15716,20 +15759,22 @@ at any time. For example, suppose a tenth element is added to the array
whose value is @w{@code{"number ten"}}. The result is:
@ifnotdocbook
-@example
-@r{Index} 10 @r{Value} "number ten"
-@r{Index} 3 @r{Value} 30
-@r{Index} 1 @r{Value} "foo"
-@r{Index} 0 @r{Value} 8
-@r{Index} 2 @r{Value} ""
-@end example
+@c extra empty column to indent it right
+@multitable @columnfractions .1 .1 .2
+@headitem @tab Index @tab Value
+@item @tab @code{10} @tab @code{"number ten"}
+@item @tab @code{3} @tab @code{30}
+@item @tab @code{1} @tab @code{"foo"}
+@item @tab @code{0} @tab @code{8}
+@item @tab @code{2} @tab @code{""}
+@end multitable
@end ifnotdocbook
@docbook
<informaltable>
<tgroup cols="2">
-<colspec colname="1" align="center"/>
-<colspec colname="2" align="center"/>
+<colspec colname="1" align="left"/>
+<colspec colname="2" align="left"/>
<thead>
<row>
<entry>Index</entry>
@@ -15776,24 +15821,25 @@ Now the array is @dfn{sparse}, which just means some indices are missing.
It has elements 0--3 and 10, but doesn't have elements 4, 5, 6, 7, 8, or 9.
Another consequence of associative arrays is that the indices don't
-have to be positive integers. Any number, or even a string, can be
+have to be nonnegative integers. Any number, or even a string, can be
an index. For example, the following is an array that translates words from
English to French:
@ifnotdocbook
-@example
-@r{Index} "dog" @r{Value} "chien"
-@r{Index} "cat" @r{Value} "chat"
-@r{Index} "one" @r{Value} "un"
-@r{Index} 1 @r{Value} "un"
-@end example
+@multitable @columnfractions .1 .1 .1
+@headitem @tab Index @tab Value
+@item @tab @code{"dog"} @tab @code{"chien"}
+@item @tab @code{"cat"} @tab @code{"chat"}
+@item @tab @code{"one"} @tab @code{"un"}
+@item @tab @code{1} @tab @code{"un"}
+@end multitable
@end ifnotdocbook
@docbook
<informaltable>
<tgroup cols="2">
-<colspec colname="1" align="center"/>
-<colspec colname="2" align="center"/>
+<colspec colname="1" align="left"/>
+<colspec colname="2" align="left"/>
<thead>
<row>
<entry>Index</entry>
@@ -15835,7 +15881,7 @@ numbers and strings as indices.
There are some subtleties to how numbers work when used as
array subscripts; this is discussed in more detail in
@ref{Numeric Array Subscripts}.)
-Here, the number @code{1} isn't double quoted, because @command{awk}
+Here, the number @code{1} isn't double-quoted, because @command{awk}
automatically converts it to a string.
@cindex @command{gawk}, @code{IGNORECASE} variable in
@@ -15852,8 +15898,6 @@ that array's indices are consecutive integers starting at one.
@command{awk}'s arrays are efficient---the time to access an element
is independent of the number of elements in the array.
-@c ENDOFRANGE arrin
-@c ENDOFRANGE inarr
@node Reference to Elements
@subsection Referring to an Array Element
@@ -15862,7 +15906,7 @@ is independent of the number of elements in the array.
@cindex elements of arrays
The principal way to use an array is to refer to one of its elements.
-An array reference is an expression as follows:
+An @dfn{array reference} is an expression as follows:
@example
@var{array}[@var{index-expression}]
@@ -15872,8 +15916,11 @@ An array reference is an expression as follows:
Here, @var{array} is the name of an array. The expression @var{index-expression} is
the index of the desired element of the array.
+@c 1/2015: Having the 4.3 in @samp is a little iffy. It's essentially
+@c an expression though, so leave be. It's to early in the discussion
+@c to mention that it's really a string.
The value of the array reference is the current value of that array
-element. For example, @code{foo[4.3]} is an expression for the element
+element. For example, @code{foo[4.3]} is an expression referencing the element
of array @code{foo} at index @samp{4.3}.
@cindex arrays, unassigned elements
@@ -15965,7 +16012,7 @@ assign to that element of the array.
The following program takes a list of lines, each beginning with a line
number, and prints them out in order of line number. The line numbers
-are not in order when they are first read---instead they
+are not in order when they are first read---instead, they
are scrambled. This program sorts the lines by making an array using
the line numbers as subscripts. The program then prints out the lines
in sorted order of their numbers. It is a very simple program and gets
@@ -16037,7 +16084,7 @@ END @{
In programs that use arrays, it is often necessary to use a loop that
executes once for each element of an array. In other languages, where
-arrays are contiguous and indices are limited to positive integers,
+arrays are contiguous and indices are limited to nonnegative integers,
this is easy: all the valid indices can be found by counting from
the lowest index up to the highest. This technique won't do the job
in @command{awk}, because any number or string can be an array index.
@@ -16059,7 +16106,7 @@ program has previously used, with the variable @var{var} set to that index.
The following program uses this form of the @code{for} statement. The
first rule scans the input records and notes which words appear (at
least once) in the input, by storing a one into the array @code{used} with
-the word as index. The second rule scans the elements of @code{used} to
+the word as the index. The second rule scans the elements of @code{used} to
find all the distinct words that appear in the input. It prints each
word that is more than 10 characters long and also prints the number of
such words.
@@ -16156,7 +16203,7 @@ and will vary from one version of @command{awk} to the next.
Often, though, you may wish to do something simple, such as
``traverse the array by comparing the indices in ascending order,''
or ``traverse the array by comparing the values in descending order.''
-@command{gawk} provides two mechanisms which give you this control.
+@command{gawk} provides two mechanisms that give you this control:
@itemize @value{BULLET}
@item
@@ -16213,21 +16260,26 @@ across different environments.} which @command{gawk} uses internally
to perform the sorting.
@item "@@ind_str_desc"
-String indices ordered from high to low.
+Like @code{"@@ind_str_asc"}, but the
+string indices are ordered from high to low.
@item "@@ind_num_desc"
-Numeric indices ordered from high to low.
+Like @code{"@@ind_num_asc"}, but the
+numeric indices are ordered from high to low.
@item "@@val_type_desc"
-Element values, based on type, ordered from high to low.
+Like @code{"@@val_type_asc"}, but the
+element values, based on type, are ordered from high to low.
Subarrays, if present, come out first.
@item "@@val_str_desc"
-Element values, treated as strings, ordered from high to low.
+Like @code{"@@val_str_asc"}, but the
+element values, treated as strings, are ordered from high to low.
Subarrays, if present, come out first.
@item "@@val_num_desc"
-Element values, treated as numbers, ordered from high to low.
+Like @code{"@@val_num_asc"}, but the
+element values, treated as numbers, are ordered from high to low.
Subarrays, if present, come out first.
@end table
@@ -16450,7 +16502,7 @@ for (i in frequencies)
@noindent
This example removes all the elements from the array @code{frequencies}.
Once an element is deleted, a subsequent @code{for} statement to scan the array
-does not report that element and the @code{in} operator to check for
+does not report that element and using the @code{in} operator to check for
the presence of that element returns zero (i.e., false):
@example
@@ -16710,7 +16762,7 @@ a[1][2] = 2
This simulates a true two-dimensional array. Each subarray element can
contain another subarray as a value, which in turn can hold other arrays
as well. In this way, you can create arrays of three or more dimensions.
-The indices can be any @command{awk} expression, including scalars
+The indices can be any @command{awk} expressions, including scalars
separated by commas (i.e., a regular @command{awk} simulated
multidimensional subscript). So the following is valid in
@command{gawk}:
@@ -16722,7 +16774,7 @@ a[1][3][1, "name"] = "barney"
Each subarray and the main array can be of different length. In fact, the
elements of an array or its subarray do not all have to have the same
type. This means that the main array and any of its subarrays can be
-non-rectangular, or jagged in structure. You can assign a scalar value to
+nonrectangular, or jagged in structure. You can assign a scalar value to
the index @code{4} of the main array @code{a}, even though @code{a[1]}
is itself an array and not a scalar:
@@ -16746,7 +16798,8 @@ a[4][5][6][7] = "An element in a four-dimensional array"
@noindent
This removes the scalar value from index @code{4} and then inserts a
-subarray of subarray of subarray containing a scalar. You can also
+three-level nested subarray
+containing a scalar. You can also
delete an entire subarray or subarray of subarrays:
@example
@@ -16757,7 +16810,7 @@ a[4][5] = "An element in subarray a[4]"
But recall that you can not delete the main array @code{a} and then use it
as a scalar.
-The built-in functions which take array arguments can also be used
+The built-in functions that take array arguments can also be used
with subarrays. For example, the following code fragment uses @code{length()}
(@pxref{String Functions})
to determine the number of elements in the main array @code{a} and
@@ -16787,7 +16840,7 @@ can be nested to scan all the
elements of an array of arrays if it is rectangular in structure. In order
to print the contents (scalar values) of a two-dimensional array of arrays
(i.e., in which each first-level element is itself an
-array, not necessarily of the same length)
+array, not necessarily of the same length),
you could use the following code:
@example
@@ -16887,9 +16940,9 @@ versions of @command{awk}.
@item
Standard @command{awk} simulates multidimensional arrays by separating
-subscript values with a comma. The values are concatenated into a
+subscript values with commas. The values are concatenated into a
single string, separated by the value of @code{SUBSEP}. The fact
-that such a subscript was created in this way is not retained; thus
+that such a subscript was created in this way is not retained; thus,
changing @code{SUBSEP} may have unexpected consequences. You can use
@samp{(@var{sub1}, @var{sub2}, @dots{}) in @var{array}} to see if such
a multidimensional subscript exists in @var{array}.
@@ -16898,7 +16951,7 @@ a multidimensional subscript exists in @var{array}.
@command{gawk} provides true arrays of arrays. You use a separate
set of square brackets for each dimension in such an array:
@code{data[row][col]}, for example. Array elements may thus be either
-scalar values (number or string) or another array.
+scalar values (number or string) or other arrays.
@item
Use the @code{isarray()} built-in function to determine if an array
@@ -16906,14 +16959,11 @@ element is itself a subarray.
@end itemize
-@c ENDOFRANGE arrs
@node Functions
@chapter Functions
-@c STARTOFRANGE funcbi
@cindex functions, built-in
-@c STARTOFRANGE bifunc
@cindex built-in functions
This @value{CHAPTER} describes @command{awk}'s built-in functions,
which fall into three categories: numeric, string, and I/O.
@@ -16926,6 +16976,9 @@ Besides the built-in functions, @command{awk} has provisions for
writing new functions that the rest of a program can use.
The second half of this @value{CHAPTER} describes these
@dfn{user-defined} functions.
+Finally, we explore indirect function calls, a @command{gawk}-specific
+extension that lets you determine at runtime what function is to
+be called.
@menu
* Built-in:: Summarizes the built-in functions.
@@ -16935,7 +16988,7 @@ The second half of this @value{CHAPTER} describes these
@end menu
@node Built-in
-@section Built-In Functions
+@section Built-in Functions
@dfn{Built-in} functions are always available for
your @command{awk} program to call. This @value{SECTION} defines all
@@ -16958,7 +17011,7 @@ but are summarized here for your convenience.
@end menu
@node Calling Built-in
-@subsection Calling Built-In Functions
+@subsection Calling Built-in Functions
To call one of @command{awk}'s built-in functions, write the name of
the function followed
@@ -17005,11 +17058,11 @@ right to left. For example:
@example
i = 5
-j = atan2(i++, i *= 2)
+j = atan2(++i, i *= 2)
@end example
If the order of evaluation is left to right, then @code{i} first becomes
-6, and then 12, and @code{atan2()} is called with the two arguments 6
+six, and then 12, and @code{atan2()} is called with the two arguments six
and 12. But if the order of evaluation is right to left, @code{i}
first becomes 10, then 11, and @code{atan2()} is called with the
two arguments 11 and 10.
@@ -17036,23 +17089,6 @@ You can use @samp{pi = atan2(0, -1)} to retrieve the value of
@cindex cosine
Return the cosine of @var{x}, with @var{x} in radians.
-@item @code{div(@var{numerator}, @var{denominator}, @var{result})}
-@cindexawkfunc{div}
-@cindex div
-Perform integer division, similar to the standard C function of the
-same name. First, truncate @code{numerator} and @code{denominator}
-towards zero, creating integer values. Clear the @code{result}
-array, and then set @code{result["quotient"]} to the result of
-@samp{numerator / denominator}, truncated towards zero to an integer,
-and set @code{result["remainder"]} to the result of @samp{numerator %
-denominator}, truncated towards zero to an integer. This function is
-primarily intended for use with arbitrary length integers; it avoids
-creating MPFR arbitrary precision floating-point values (@pxref{Arbitrary
-Precision Integers}).
-
-This function is a @code{gawk} extension. It is not available in
-compatibility mode (@pxref{Options}).
-
@item @code{exp(@var{x})}
@cindexawkfunc{exp}
@cindex exponent
@@ -17068,6 +17104,23 @@ truncated toward zero.
For example, @code{int(3)} is 3, @code{int(3.9)} is 3, @code{int(-3.9)}
is @minus{}3, and @code{int(-3)} is @minus{}3 as well.
+@item @code{intdiv(@var{numerator}, @var{denominator}, @var{result})}
+@cindexawkfunc{intdiv}
+@cindex intdiv
+Perform integer division, similar to the standard C function of the
+same name. First, truncate @code{numerator} and @code{denominator}
+towards zero, creating integer values. Clear the @code{result}
+array, and then set @code{result["quotient"]} to the result of
+@samp{numerator / denominator}, truncated towards zero to an integer,
+and set @code{result["remainder"]} to the result of @samp{numerator %
+denominator}, truncated towards zero to an integer. This function is
+primarily intended for use with arbitrary length integers; it avoids
+creating MPFR arbitrary precision floating-point values (@pxref{Arbitrary
+Precision Integers}).
+
+This function is a @code{gawk} extension. It is not available in
+compatibility mode (@pxref{Options}).
+
@item @code{log(@var{x})}
@cindexawkfunc{log}
@cindex logarithm
@@ -17090,7 +17143,7 @@ In fact, @command{gawk} uses the BSD @code{random()} function, which is
considerably better than @code{rand()}, to produce random numbers.}
Often random integers are needed instead. Following is a user-defined function
-that can be used to obtain a random non-negative integer less than @var{n}:
+that can be used to obtain a random nonnegative integer less than @var{n}:
@example
function randint(n)
@@ -17100,8 +17153,8 @@ function randint(n)
@end example
@noindent
-The multiplication produces a random number greater than zero and less
-than @code{n}. Using @code{int()}, this result is made into
+The multiplication produces a random number greater than or equal to
+zero and less than @code{n}. Using @code{int()}, this result is made into
an integer between zero and @code{n} @minus{} 1, inclusive.
The following example uses a similar function to produce random integers
@@ -17153,7 +17206,7 @@ for generating random numbers to the value @var{x}.
Each seed value leads to a particular sequence of random
numbers.@footnote{Computer-generated random numbers really are not truly
-random. They are technically known as ``pseudorandom.'' This means
+random. They are technically known as @dfn{pseudorandom}. This means
that although the numbers in a sequence appear to be random, you can in
fact generate the same sequence of random numbers over and over again.}
Thus, if the seed is set to the same value a second time,
@@ -17185,7 +17238,7 @@ implementations.
The functions in this @value{SECTION} look at or change the text of one
or more strings.
-@code{gawk} understands locales (@pxref{Locales}), and does all
+@command{gawk} understands locales (@pxref{Locales}) and does all
string processing in terms of @emph{characters}, not @emph{bytes}.
This distinction is particularly important to understand for locales
where one character may be represented by multiple bytes. Thus, for
@@ -17274,7 +17327,7 @@ a[2] = "de"
a[3] = "sac"
@end example
-The @code{asorti()} function works similarly to @code{asort()}, however,
+The @code{asorti()} function works similarly to @code{asort()}; however,
the @emph{indices} are sorted, instead of the values. Thus, in the
previous example, starting with the same initial set of indices and
values in @code{a}, calling @samp{asorti(a)} would yield:
@@ -17389,7 +17442,7 @@ If @var{find} is not found, @code{index()} returns zero.
With BWK @command{awk} and @command{gawk},
it is a fatal error to use a regexp constant for @var{find}.
Other implementations allow it, simply treating the regexp
-constant as an expression meaning @samp{$0 ~ /regexp/}. @value{DARKCORNER}.
+constant as an expression meaning @samp{$0 ~ /regexp/}. @value{DARKCORNER}
@item @code{length(}[@var{string}]@code{)}
@cindexawkfunc{length}
@@ -17472,7 +17525,7 @@ If @option{--posix} is supplied, using an array argument is a fatal error
@cindex string, regular expression match
@cindex match regexp in string
Search @var{string} for the
-longest, leftmost substring matched by the regular expression,
+longest, leftmost substring matched by the regular expression
@var{regexp} and return the character position (index)
at which that substring begins (one, if it starts at the beginning of
@var{string}). If no match is found, return zero.
@@ -17484,7 +17537,7 @@ In the latter case, the string is treated as a regexp to be matched.
discussion of the difference between the two forms, and the
implications for writing your program correctly.
-The order of the first two arguments is backwards from most other string
+The order of the first two arguments is the opposite of most other string
functions that work with regular expressions, such as
@code{sub()} and @code{gsub()}. It might help to remember that
for @code{match()}, the order is the same as for the @samp{~} operator:
@@ -17573,7 +17626,7 @@ $ @kbd{echo foooobazbarrrrr |}
@end example
There may not be subscripts for the start and index for every parenthesized
-subexpression, because they may not all have matched text; thus they
+subexpression, because they may not all have matched text; thus, they
should be tested for with the @code{in} operator
(@pxref{Reference to Elements}).
@@ -17620,13 +17673,13 @@ a regexp describing where to split @var{string} (much as @code{FS} can
be a regexp describing where to split input records).
If @var{fieldsep} is omitted, the value of @code{FS} is used.
@code{split()} returns the number of elements created.
-@var{seps} is a @command{gawk} extension with @code{@var{seps}[@var{i}]}
+@var{seps} is a @command{gawk} extension, with @code{@var{seps}[@var{i}]}
being the separator string
between @code{@var{array}[@var{i}]} and @code{@var{array}[@var{i}+1]}.
If @var{fieldsep} is a single
-space then any leading whitespace goes into @code{@var{seps}[0]} and
+space, then any leading whitespace goes into @code{@var{seps}[0]} and
any trailing
-whitespace goes into @code{@var{seps}[@var{n}]} where @var{n} is the
+whitespace goes into @code{@var{seps}[@var{n}]}, where @var{n} is the
return value of
@code{split()} (i.e., the number of elements in @var{array}).
@@ -17639,7 +17692,7 @@ split("cul-de-sac", a, "-", seps)
@noindent
@cindex strings splitting, example
-splits the string @samp{cul-de-sac} into three fields using @samp{-} as the
+splits the string @code{"cul-de-sac"} into three fields using @samp{-} as the
separator. It sets the contents of the array @code{a} as follows:
@example
@@ -17664,19 +17717,18 @@ As with input field-splitting, when the value of @var{fieldsep} is
the elements of
@var{array} but not in @var{seps}, and the elements
are separated by runs of whitespace.
-Also, as with input field-splitting, if @var{fieldsep} is the null string, each
+Also, as with input field splitting, if @var{fieldsep} is the null string, each
individual character in the string is split into its own array element.
@value{COMMONEXT}
Note, however, that @code{RS} has no effect on the way @code{split()}
-works. Even though @samp{RS = ""} causes newline to also be an input
+works. Even though @samp{RS = ""} causes the newline character to also be an input
field separator, this does not affect how @code{split()} splits strings.
@cindex dark corner, @code{split()} function
Modern implementations of @command{awk}, including @command{gawk}, allow
-the third argument to be a regexp constant (@code{/abc/}) as well as a
-string.
-@value{DARKCORNER}
+the third argument to be a regexp constant (@w{@code{/}@dots{}@code{/}})
+as well as a string. @value{DARKCORNER}
The POSIX standard allows this as well.
@DBXREF{Computed Regexps} for a
discussion of the difference between using a string constant or a regexp constant,
@@ -17813,7 +17865,7 @@ an @samp{&}:
@cindex @code{sub()} function, arguments of
@cindex @code{gsub()} function, arguments of
As mentioned, the third argument to @code{sub()} must
-be a variable, field or array element.
+be a variable, field, or array element.
Some versions of @command{awk} allow the third argument to
be an expression that is not an lvalue. In such a case, @code{sub()}
still searches for the pattern and returns zero or one, but the result of
@@ -18005,8 +18057,8 @@ example, @code{"a\qb"} is treated as @code{"aqb"}.
At the runtime level, the various functions handle sequences of
@samp{\} and @samp{&} differently. The situation is (sadly) somewhat complex.
-Historically, the @code{sub()} and @code{gsub()} functions treated the two
-character sequence @samp{\&} specially; this sequence was replaced in
+Historically, the @code{sub()} and @code{gsub()} functions treated the
+two-character sequence @samp{\&} specially; this sequence was replaced in
the generated text with a single @samp{&}. Any other @samp{\} within
the @var{replacement} string that did not precede an @samp{&} was passed
through unchanged. This is illustrated in @ref{table-sub-escapes}.
@@ -18064,7 +18116,7 @@ _bigskip}
@end float
@noindent
-This table shows both the lexical-level processing, where
+This table shows the lexical-level processing, where
an odd number of backslashes becomes an even number at the runtime level,
as well as the runtime processing done by @code{sub()}.
(For the sake of simplicity, the rest of the following tables only show the
@@ -18085,7 +18137,7 @@ This is shown in
@ref{table-sub-proposed}.
@float Table,table-sub-proposed
-@caption{GNU @command{awk} rules for @code{sub()} and backslash}
+@caption{@command{gawk} rules for @code{sub()} and backslash}
@tex
\vbox{\bigskip
% We need more characters for escape and tab ...
@@ -18130,7 +18182,7 @@ _bigskip}
@end float
In a nutshell, at the runtime level, there are now three special sequences
-of characters (@samp{\\\&}, @samp{\\&} and @samp{\&}) whereas historically
+of characters (@samp{\\\&}, @samp{\\&}, and @samp{\&}) whereas historically
there was only one. However, as in the historical case, any @samp{\} that
is not part of one of these three sequences is not special and appears
in the output literally.
@@ -18196,7 +18248,7 @@ The only case where the difference is noticeable is the last one: @samp{\\\\}
is seen as @samp{\\} and produces @samp{\} instead of @samp{\\}.
Starting with @value{PVERSION} 3.1.4, @command{gawk} followed the POSIX rules
-when @option{--posix} is specified (@pxref{Options}). Otherwise,
+when @option{--posix} was specified (@pxref{Options}). Otherwise,
it continued to follow the proposed rules, as
that had been its behavior for many years.
@@ -18264,7 +18316,7 @@ _bigskip}
@end ifnottex
@end float
-Because of the complexity of the lexical and runtime level processing
+Because of the complexity of the lexical- and runtime-level processing
and the special cases for @code{sub()} and @code{gsub()},
we recommend the use of @command{gawk} and @code{gensub()} when you have
to do substitutions.
@@ -18290,6 +18342,7 @@ for more information.
When closing a coprocess, it is occasionally useful to first close
one end of the two-way pipe and then to close the other. This is done
by providing a second argument to @code{close()}. This second argument
+(@var{how})
should be one of the two string values @code{"to"} or @code{"from"},
indicating which end of the pipe to close. Case in the string does
not matter.
@@ -18316,7 +18369,7 @@ every little bit of information as soon as it is ready. However, sometimes
it is necessary to force a program to @dfn{flush} its buffers (i.e.,
write the information to its destination, even if a buffer is not full).
This is the purpose of the @code{fflush()} function---@command{gawk} also
-buffers its output and the @code{fflush()} function forces
+buffers its output, and the @code{fflush()} function forces
@command{gawk} to flush its buffers.
@cindex extensions, common@comma{} @code{fflush()} function
@@ -18337,7 +18390,7 @@ would flush only the standard output if there was no argument,
and flush all output files and pipes if the argument was the null
string. This was changed in order to be compatible with Brian
Kernighan's @command{awk}, in the hope that standardizing this
-feature in POSIX would then be easier (which indeed helped).
+feature in POSIX would then be easier (which indeed proved to be the case).
With @command{gawk},
you can use @samp{fflush("/dev/stdout")} if you wish to flush
@@ -18348,7 +18401,7 @@ only the standard output.
@c @cindex warnings, automatic
@cindex troubleshooting, @code{fflush()} function
@code{fflush()} returns zero if the buffer is successfully flushed;
-otherwise, it returns non-zero. (@command{gawk} returns @minus{}1.)
+otherwise, it returns a nonzero value. (@command{gawk} returns @minus{}1.)
In the case where all buffers are flushed, the return value is zero
only if all buffers were flushed successfully. Otherwise, it is
@minus{}1, and @command{gawk} warns about the problem @var{filename}.
@@ -18366,8 +18419,8 @@ In such a case, @code{fflush()} returns @minus{}1, as well.
@cindex buffering, interactive vs.@: noninteractive
-As a side point, buffering issues can be even more confusing, depending
-upon whether your program is @dfn{interactive} (i.e., communicating
+As a side point, buffering issues can be even more confusing if
+your program is @dfn{interactive} (i.e., communicating
with a user sitting at a keyboard).@footnote{A program is interactive
if the standard output is connected to a terminal device. On modern
systems, this means your keyboard and screen.}
@@ -18417,8 +18470,8 @@ it is all buffered and sent down the pipe to @command{cat} in one shot.
@cindex buffering, interactive vs.@: noninteractive
-As a side point, buffering issues can be even more confusing, depending
-upon whether your program is @dfn{interactive} (i.e., communicating
+As a side point, buffering issues can be even more confusing if
+your program is @dfn{interactive} (i.e., communicating
with a user sitting at a keyboard).@footnote{A program is interactive
if the standard output is connected to a terminal device. On modern
systems, this means your keyboard and screen.}
@@ -18462,7 +18515,7 @@ it is all buffered and sent down the pipe to @command{cat} in one shot.
@cindexawkfunc{system}
@cindex invoke shell command
@cindex interacting with other programs
-Execute the operating-system
+Execute the operating system
command @var{command} and then return to the @command{awk} program.
Return @var{command}'s exit status.
@@ -18637,18 +18690,14 @@ you would see the latter (undesirable) output.
@subsection Time Functions
@cindex time functions
-@c STARTOFRANGE tst
@cindex timestamps
-@c STARTOFRANGE logftst
@cindex log files, timestamps in
-@c STARTOFRANGE filogtst
@cindex files, log@comma{} timestamps in
-@c STARTOFRANGE gawtst
@cindex @command{gawk}, timestamps
@cindex POSIX @command{awk}, timestamps and
-@code{awk} programs are commonly used to process log files
+@command{awk} programs are commonly used to process log files
containing timestamp information, indicating when a
-particular log record was written. Many programs log their timestamp
+particular log record was written. Many programs log their timestamps
in the form returned by the @code{time()} system call, which is the
number of seconds since a particular epoch. On POSIX-compliant systems,
it is the number of seconds since
@@ -18675,6 +18724,7 @@ which is sufficient to represent times through
2038-01-19 03:14:07 UTC. Many systems support a wider range of timestamps,
including negative timestamps that represent times before the
epoch.
+@c FIXME: Use @sup here for superscript
@cindex @command{date} utility, GNU
@cindex time, retrieving
@@ -18709,7 +18759,7 @@ The values of these numbers need not be within the ranges specified;
for example, an hour of @minus{}1 means 1 hour before midnight.
The origin-zero Gregorian calendar is assumed, with year 0 preceding
year 1 and year @minus{}1 preceding year 0.
-The time is assumed to be in the local timezone.
+The time is assumed to be in the local time zone.
If the daylight-savings flag is positive, the time is assumed to be
daylight savings time; if zero, the time is assumed to be standard
time; and if negative (the default), @code{mktime()} attempts to determine
@@ -18721,7 +18771,6 @@ is out of range, @code{mktime()} returns @minus{}1.
@cindex @command{gawk}, @code{PROCINFO} array in
@cindex @code{PROCINFO} array
@item @code{strftime(}[@var{format} [@code{,} @var{timestamp} [@code{,} @var{utc-flag}] ] ]@code{)}
-@c STARTOFRANGE strf
@cindexgawkfunc{strftime}
@cindex format time string
Format the time specified by @var{timestamp}
@@ -18870,12 +18919,12 @@ Equivalent to specifying @samp{%H:%M:%S}.
The weekday as a decimal number (1--7). Monday is day one.
@item %U
-The week number of the year (the first Sunday as the first day of week one)
+The week number of the year (with the first Sunday as the first day of week one)
as a decimal number (00--53).
@c @cindex ISO 8601
@item %V
-The week number of the year (the first Monday as the first
+The week number of the year (with the first Monday as the first
day of week one) as a decimal number (01--53).
The method for determining the week number is as specified by ISO 8601.
(To wit: if the week containing January 1 has four or more days in the
@@ -18886,7 +18935,7 @@ and the next week is week one.)
The weekday as a decimal number (0--6). Sunday is day zero.
@item %W
-The week number of the year (the first Monday as the first day of week one)
+The week number of the year (with the first Monday as the first day of week one)
as a decimal number (00--53).
@item %x
@@ -18906,8 +18955,8 @@ The full year as a decimal number (e.g., 2015).
@c @cindex RFC 822
@c @cindex RFC 1036
@item %z
-The timezone offset in a +HHMM format (e.g., the format necessary to
-produce RFC 822/RFC 1036 date headers).
+The time zone offset in a @samp{+@var{HHMM}} format (e.g., the format
+necessary to produce RFC 822/RFC 1036 date headers).
@item %Z
The time zone name or abbreviation; no characters if
@@ -18970,7 +19019,6 @@ The time as a decimal timestamp in seconds since the epoch.
The date in VMS format (e.g., @samp{20-JUN-1991}).
@end ignore
@end table
-@c ENDOFRANGE strf
Additionally, the alternative representations are recognized but their
normal representations are used.
@@ -19021,23 +19069,14 @@ gawk 'BEGIN @{
exit exitval
@}' "$@@"
@end example
-@c ENDOFRANGE tst
-@c ENDOFRANGE logftst
-@c ENDOFRANGE filogtst
-@c ENDOFRANGE gawtst
@node Bitwise Functions
@subsection Bit-Manipulation Functions
@cindex bit-manipulation functions
-@c STARTOFRANGE bit
@cindex bitwise, operations
-@c STARTOFRANGE and
@cindex AND bitwise operation
-@c STARTOFRANGE oro
@cindex OR bitwise operation
-@c STARTOFRANGE xor
@cindex XOR bitwise operation
-@c STARTOFRANGE opbit
@cindex operations, bitwise
@quotation
@i{I can explain it for you, but I can't understand it for you.}
@@ -19057,7 +19096,7 @@ The operations are described in @ref{table-bitwise-ops}.
@ifnottex
@ifnotdocbook
@display
- Bit Operator
+ Bit operator
| AND | OR | XOR
|---+---+---+---+---+---
Operands | 0 | 1 | 0 | 1 | 0 | 1
@@ -19115,7 +19154,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1
<tbody>
<row>
<entry colsep="0"></entry>
-<entry spanname="optitle"><emphasis role="bold">Bit Operator</emphasis></entry>
+<entry spanname="optitle"><emphasis role="bold">Bit operator</emphasis></entry>
</row>
<row rowsep="1">
@@ -19179,10 +19218,9 @@ of a given value.
Finally, two other common operations are to shift the bits left or right.
For example, if you have a bit string @samp{10111001} and you shift it
right by three bits, you end up with @samp{00010111}.@footnote{This example
-shows that 0's come in on the left side. For @command{gawk}, this is
+shows that zeros come in on the left side. For @command{gawk}, this is
always true, but in some languages, it's possible to have the left side
-fill with 1's.}
-@c Purposely decided to use 0's and 1's here. 2/2001.
+fill with ones.}
If you start over again with @samp{10111001} and shift it left by three
bits, you end up with @samp{11001000}. The following list describes
@command{gawk}'s built-in functions that implement the bitwise operations.
@@ -19236,7 +19274,7 @@ that illustrates the use of these functions:
@example
@group
@c file eg/lib/bits2str.awk
-# bits2str --- turn a byte into readable 1's and 0's
+# bits2str --- turn a byte into readable ones and zeros
function bits2str(bits, data, mask)
@{
@@ -19310,15 +19348,16 @@ $ @kbd{gawk -f testbits.awk}
@cindex converting, numbers to strings
@cindex number as string of bits
The @code{bits2str()} function turns a binary number into a string.
-The number @code{1} represents a binary value where the rightmost bit
-is set to 1. Using this mask,
+Initializing @code{mask} to one creates
+a binary value where the rightmost bit
+is set to one. Using this mask,
the function repeatedly checks the rightmost bit.
ANDing the mask with the value indicates whether the
-rightmost bit is 1 or not. If so, a @code{"1"} is concatenated onto the front
+rightmost bit is one or not. If so, a @code{"1"} is concatenated onto the front
of the string.
Otherwise, a @code{"0"} is added.
The value is then shifted right by one bit and the loop continues
-until there are no more 1 bits.
+until there are no more one bits.
If the initial value is zero, it returns a simple @code{"0"}.
Otherwise, at the end, it pads the value with zeros to represent multiples
@@ -19329,11 +19368,6 @@ decimal and octal values for the same numbers
(@pxref{Nondecimal-numbers}),
and then demonstrates the
results of the @code{compl()}, @code{lshift()}, and @code{rshift()} functions.
-@c ENDOFRANGE bit
-@c ENDOFRANGE and
-@c ENDOFRANGE oro
-@c ENDOFRANGE xor
-@c ENDOFRANGE opbit
@node Type Functions
@subsection Getting Type Information
@@ -19347,7 +19381,7 @@ that traverses every element of an array of arrays
@cindexgawkfunc{isarray}
@cindex scalar or array
@item isarray(@var{x})
-Return a true value if @var{x} is an array. Otherwise return false.
+Return a true value if @var{x} is an array. Otherwise, return false.
@end table
@code{isarray()} is meant for use in two circumstances. The first is when
@@ -19408,20 +19442,16 @@ The default value for @var{category} is @code{"LC_MESSAGES"}.
Return the plural form used for @var{number} of the
translation of @var{string1} and @var{string2} in text domain
@var{domain} for locale category @var{category}. @var{string1} is the
-English singular variant of a message, and @var{string2} the English plural
+English singular variant of a message, and @var{string2} is the English plural
variant of the same message.
The default value for @var{domain} is the current value of @code{TEXTDOMAIN}.
The default value for @var{category} is @code{"LC_MESSAGES"}.
@end table
-@c ENDOFRANGE funcbi
-@c ENDOFRANGE bifunc
@node User-defined
@section User-Defined Functions
-@c STARTOFRANGE udfunc
@cindex user-defined functions
-@c STARTOFRANGE funcud
@cindex functions, user-defined
Complicated @command{awk} programs can often be simplified by defining
your own functions. User-defined functions can be called just like
@@ -19441,12 +19471,11 @@ them (i.e., to tell @command{awk} what they should do).
@subsection Function Definition Syntax
@quotation
-@i{It's entirely fair to say that the @command{awk} syntax for local
+@i{It's entirely fair to say that the awk syntax for local
variable definitions is appallingly awful.}
@author Brian Kernighan
@end quotation
-@c STARTOFRANGE fdef
@cindex functions, defining
Definitions of functions can appear anywhere between the rules of an
@command{awk} program. Thus, the general form of an @command{awk} program is
@@ -19484,14 +19513,23 @@ the call.
A function cannot have two parameters with the same name, nor may it
have a parameter with the same name as the function itself.
-In addition, according to the POSIX standard, function parameters
+
+@quotation CAUTION
+According to the POSIX standard, function parameters
cannot have the same name as one of the special predefined variables
-(@pxref{Built-in Variables}). Not all versions of @command{awk} enforce
-this restriction.
+(@pxref{Built-in Variables}), nor may a function parameter have the
+same name as another function.
+
+Not all versions of @command{awk} enforce
+these restrictions.
+@command{gawk} always enforces the first restriction.
+With @option{--posix} (@pxref{Options}),
+it also enforces the second restriction.
+@end quotation
Local variables act like the empty string if referenced where a string
value is required, and like zero if referenced where a numeric value
-is required. This is the same as regular variables that have never been
+is required. This is the same as the behavior of regular variables that have never been
assigned a value. (There is more to understand about local variables;
@pxref{Dynamic Typing}.)
@@ -19525,7 +19563,7 @@ During execution of the function body, the arguments and local variable
values hide, or @dfn{shadow}, any variables of the same names used in the
rest of the program. The shadowed variables are not accessible in the
function definition, because there is no way to name them while their
-names have been taken away for the local variables. All other variables
+names have been taken away for the arguments and local variables. All other variables
used in the @command{awk} program can be referenced or set normally in the
function's body.
@@ -19592,7 +19630,7 @@ function myprint(num)
@end example
@noindent
-To illustrate, here is an @command{awk} rule that uses our @code{myprint}
+To illustrate, here is an @command{awk} rule that uses our @code{myprint()}
function:
@example
@@ -19633,13 +19671,13 @@ in an array and start over with a new list of elements
(@pxref{Delete}).
Instead of having
to repeat this loop everywhere that you need to clear out
-an array, your program can just call @code{delarray}.
+an array, your program can just call @code{delarray()}.
(This guarantees portability. The use of @samp{delete @var{array}} to delete
the contents of an entire array is a relatively recent@footnote{Late in 2012.}
addition to the POSIX standard.)
The following is an example of a recursive function. It takes a string
-as an input parameter and returns the string in backwards order.
+as an input parameter and returns the string in reverse order.
Recursive functions must always have a test that stops the recursion.
In this case, the recursion terminates when the input string is
already empty:
@@ -19693,12 +19731,10 @@ You might think that @code{ctime()} could use @code{PROCINFO["strftime"]}
for its format string. That would be a mistake, because @code{ctime()} is
supposed to return the time formatted in a standard fashion, and user-level
code could have changed @code{PROCINFO["strftime"]}.
-@c ENDOFRANGE fdef
@node Function Caveats
@subsection Calling User-Defined Functions
-@c STARTOFRANGE fudc
@cindex functions, user-defined, calling
@dfn{Calling a function} means causing the function to run and do its job.
A function call is an expression and its value is the value returned by
@@ -19738,7 +19774,7 @@ an error.
@cindex local variables, in a function
@cindex variables, local to a function
-Unlike many languages,
+Unlike in many languages,
there is no way to make a variable local to a @code{@{} @dots{} @code{@}} block in
@command{awk}, but you can make a variable local to a function. It is
good practice to do so whenever a variable is needed only in that
@@ -19747,7 +19783,7 @@ function.
To make a variable local to a function, simply declare the variable as
an argument after the actual function arguments
(@pxref{Definition Syntax}).
-Look at the following example where variable
+Look at the following example, where variable
@code{i} is a global variable used by both functions @code{foo()} and
@code{bar()}:
@@ -19788,7 +19824,7 @@ foo's i=3
top's i=3
@end example
-If you want @code{i} to be local to both @code{foo()} and @code{bar()} do as
+If you want @code{i} to be local to both @code{foo()} and @code{bar()}, do as
follows (the extra space before @code{i} is a coding convention to
indicate that @code{i} is a local variable, not an argument):
@@ -19876,7 +19912,7 @@ declare explicitly whether the arguments are passed @dfn{by value} or
@dfn{by reference}.
Instead, the passing convention is determined at runtime when
-the function is called according to the following rule:
+the function is called, according to the following rule:
if the argument is an array variable, then it is passed by reference.
Otherwise, the argument is passed by value.
@@ -19953,7 +19989,7 @@ prints @samp{a[1] = 1, a[2] = two, a[3] = 3}, because
@cindex undefined functions
@cindex functions, undefined
Some @command{awk} implementations allow you to call a function that
-has not been defined. They only report a problem at runtime when the
+has not been defined. They only report a problem at runtime, when the
program actually tries to call the function. For example:
@example
@@ -19990,7 +20026,6 @@ or the @code{nextfile} statement
@end ifnotdocbook
inside a user-defined function.
@command{gawk} does not have this limitation.
-@c ENDOFRANGE fudc
@node Return Statement
@subsection The @code{return} Statement
@@ -20013,15 +20048,15 @@ makes the returned value undefined, and therefore, unpredictable.
In practice, though, all versions of @command{awk} simply return the
null string, which acts like zero if used in a numeric context.
-A @code{return} statement with no value expression is assumed at the end of
-every function definition. So if control reaches the end of the function
-body, then technically, the function returns an unpredictable value.
+A @code{return} statement without an @var{expression} is assumed at the end of
+every function definition. So, if control reaches the end of the function
+body, then technically the function returns an unpredictable value.
In practice, it returns the empty string. @command{awk}
does @emph{not} warn you if you use the return value of such a function.
Sometimes, you want to write a function for what it does, not for
what it returns. Such a function corresponds to a @code{void} function
-in C, C++ or Java, or to a @code{procedure} in Ada. Thus, it may be appropriate to not
+in C, C++, or Java, or to a @code{procedure} in Ada. Thus, it may be appropriate to not
return any value; simply bear in mind that you should not be using the
return value of such a function.
@@ -20118,7 +20153,6 @@ does report the second error.
Usually, such things aren't a big issue, but it's worth
being aware of them.
-@c ENDOFRANGE udfunc
@node Indirect Calls
@section Indirect Function Calls
@@ -20141,13 +20175,15 @@ function calls, you can specify the name of the function to call as a
string variable, and then call the function. Let's look at an example.
Suppose you have a file with your test scores for the classes you
-are taking. The first field is the class name. The following fields
+are taking, and
+you wish to get the sum and the average of
+your test scores.
+The first field is the class name. The following fields
are the functions to call to process the data, up to a ``marker''
field @samp{data:}. Following the marker, to the end of the record,
are the various numeric test scores.
-Here is the initial file; you wish to get the sum and the average of
-your test scores:
+Here is the initial file:
@example
@c file eg/data/class_data1
@@ -20230,9 +20266,9 @@ function sum(first, last, ret, i)
@c endfile
@end example
-These two functions expect to work on fields; thus the parameters
+These two functions expect to work on fields; thus, the parameters
@code{first} and @code{last} indicate where in the fields to start and end.
-Otherwise they perform the expected computations and are not unusual:
+Otherwise, they perform the expected computations and are not unusual:
@example
@c file eg/prog/indirectcall.awk
@@ -20291,8 +20327,8 @@ The ability to use indirect function calls is more powerful than you may
think at first. The C and C++ languages provide ``function pointers,'' which
are a mechanism for calling a function chosen at runtime. One of the most
well-known uses of this ability is the C @code{qsort()} function, which sorts
-an array using the famous ``quick sort'' algorithm
-(see @uref{http://en.wikipedia.org/wiki/Quick_sort, the Wikipedia article}
+an array using the famous ``quicksort'' algorithm
+(see @uref{http://en.wikipedia.org/wiki/Quicksort, the Wikipedia article}
for more information). To use this function, you supply a pointer to a comparison
function. This mechanism allows you to sort arbitrary data in an arbitrary
fashion.
@@ -20311,11 +20347,11 @@ We can do something similar using @command{gawk}, like this:
# January 2009
@c endfile
-
@end ignore
@c file eg/lib/quicksort.awk
-# quicksort --- C.A.R. Hoare's quick sort algorithm. See Wikipedia
-# or almost any algorithms or computer science text
+
+# quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia
+# or almost any algorithms or computer science text.
@c endfile
@ignore
@c file eg/lib/quicksort.awk
@@ -20353,7 +20389,7 @@ function quicksort_swap(data, i, j, temp)
The @code{quicksort()} function receives the @code{data} array, the starting and ending
indices to sort (@code{left} and @code{right}), and the name of a function that
-performs a ``less than'' comparison. It then implements the quick sort algorithm.
+performs a ``less than'' comparison. It then implements the quicksort algorithm.
To make use of the sorting function, we return to our previous example. The
first thing to do is write some comparison functions:
@@ -20464,76 +20500,29 @@ $ @kbd{gawk -f quicksort.awk -f indirectcall.awk class_data2}
@end example
Another example where indirect functions calls are useful can be found in
-processing arrays. @DBREF{Walking Arrays} presented a simple function
-for ``walking'' an array of arrays. That function simply printed the
-name and value of each scalar array element. However, it is easy to
-generalize that function, by passing in the name of a function to call
-when walking an array. The modified function looks like this:
-
-@example
-@c file eg/lib/processarray.awk
-function process_array(arr, name, process, do_arrays, i, new_name)
-@{
- for (i in arr) @{
- new_name = (name "[" i "]")
- if (isarray(arr[i])) @{
- if (do_arrays)
- @@process(new_name, arr[i])
- process_array(arr[i], new_name, process, do_arrays)
- @} else
- @@process(new_name, arr[i])
- @}
-@}
-@c endfile
-@end example
-
-The arguments are as follows:
-
-@table @code
-@item arr
-The array.
-
-@item name
-The name of the array (a string).
-
-@item process
-The name of the function to call.
-
-@item do_arrays
-If this is true, the function can handle elements that are subarrays.
-@end table
-
-If subarrays are to be processed, that is done before walking them further.
-
-When run with the following scaffolding, the function produces the same
-results as does the earlier @code{walk_array()} function:
-
-@example
-BEGIN @{
- a[1] = 1
- a[2][1] = 21
- a[2][2] = 22
- a[3] = 3
- a[4][1][1] = 411
- a[4][2] = 42
-
- process_array(a, "a", "do_print", 0)
-@}
-
-function do_print(name, element)
-@{
- printf "%s = %s\n", name, element
-@}
-@end example
+processing arrays. This is described in @ref{Walking Arrays}.
Remember that you must supply a leading @samp{@@} in front of an indirect function call.
Starting with @value{PVERSION} 4.1.2 of @command{gawk}, indirect function
calls may also be used with built-in functions and with extension functions
-(@pxref{Dynamic Extensions}). The only thing you cannot do is pass a regular
-expression constant to a built-in function through an indirect function
-call.@footnote{This may change in a future version; recheck the documentation that
-comes with your version of @command{gawk} to see if it has.}
+(@pxref{Dynamic Extensions}). There are some limitations when calling
+built-in functions indirectly, as follows.
+
+@itemize @value{BULLET}
+@item
+You cannot pass a regular expression constant to a built-in function
+through an indirect function call.@footnote{This may change in a future
+version; recheck the documentation that comes with your version of
+@command{gawk} to see if it has.} This applies to the @code{sub()},
+@code{gsub()}, @code{gensub()}, @code{match()}, @code{split()} and
+@code{patsplit()} functions.
+
+@item
+If calling @code{sub()} or @code{gsub()}, you may only pass two arguments,
+since those functions are unusual in that they update their third argument.
+This means that @code{$0} will be updated.
+@end itemize
@command{gawk} does its best to make indirect function calls efficient.
For example, in the following case:
@@ -20544,7 +20533,7 @@ for (i = 1; i <= n; i++)
@end example
@noindent
-@code{gawk} looks up the actual function to call only once.
+@command{gawk} looks up the actual function to call only once.
@node Functions Summary
@section Summary
@@ -20611,7 +20600,6 @@ program. This is equivalent to function pointers in C and C++.
@end itemize
-@c ENDOFRANGE funcud
@ifnotinfo
@part @value{PART2}Problem Solving with @command{awk}
@@ -20633,18 +20621,15 @@ It contains the following chapters:
@node Library Functions
@chapter A Library of @command{awk} Functions
-@c STARTOFRANGE libf
@cindex libraries of @command{awk} functions
-@c STARTOFRANGE flib
@cindex functions, library
-@c STARTOFRANGE fudlib
@cindex functions, user-defined, library of
@DBREF{User-defined} describes how to write
your own @command{awk} functions. Writing functions is important, because
it allows you to encapsulate algorithms and program tasks in a single
place. It simplifies programming, making program development more
-manageable, and making programs more readable.
+manageable and making programs more readable.
@cindex Kernighan, Brian
@cindex Plauger, P.J.@:
@@ -20773,7 +20758,7 @@ often use variable names like these for their own purposes.
The example programs shown in this @value{CHAPTER} all start the names of their
private variables with an underscore (@samp{_}). Users generally don't use
leading underscores in their variable names, so this convention immediately
-decreases the chances that the variable name will be accidentally shared
+decreases the chances that the variable names will be accidentally shared
with the user's program.
@cindex @code{_} (underscore), in names of private variables
@@ -20791,8 +20776,8 @@ show how our own @command{awk} programming style has evolved and to
provide some basis for this discussion.}
As a final note on variable naming, if a function makes global variables
-available for use by a main program, it is a good convention to start that
-variable's name with a capital letter---for
+available for use by a main program, it is a good convention to start those
+variables' names with a capital letter---for
example, @code{getopt()}'s @code{Opterr} and @code{Optind} variables
(@pxref{Getopt Function}).
The leading capital letter indicates that it is global, while the fact that
@@ -20803,7 +20788,7 @@ not one of @command{awk}'s predefined variables, such as @code{FS}.
It is also important that @emph{all} variables in library
functions that do not need to save state are, in fact, declared
local.@footnote{@command{gawk}'s @option{--dump-variables} command-line
-option is useful for verifying this.} If this is not done, the variable
+option is useful for verifying this.} If this is not done, the variables
could accidentally be used in the user's program, leading to bugs that
are very difficult to track down:
@@ -20960,13 +20945,9 @@ be tested with @command{gawk} and the results compared to the built-in
@node Assert Function
@subsection Assertions
-@c STARTOFRANGE asse
@cindex assertions
-@c STARTOFRANGE assef
@cindex @code{assert()} function (C library)
-@c STARTOFRANGE libfass
@cindex libraries of @command{awk} functions, assertions
-@c STARTOFRANGE flibass
@cindex functions, library, assertions
@cindex @command{awk} programs, lengthy, assertions
When writing large programs, it is often useful to know
@@ -21005,7 +20986,7 @@ Following is the function:
@example
@c file eg/lib/assert.awk
-# assert --- assert that a condition is true. Otherwise exit.
+# assert --- assert that a condition is true. Otherwise, exit.
@c endfile
@ignore
@@ -21041,7 +21022,7 @@ is false, it prints a message to standard error, using the @code{string}
parameter to describe the failed condition. It then sets the variable
@code{_assert_exit} to one and executes the @code{exit} statement.
The @code{exit} statement jumps to the @code{END} rule. If the @code{END}
-rules finds @code{_assert_exit} to be true, it exits immediately.
+rule finds @code{_assert_exit} to be true, it exits immediately.
The purpose of the test in the @code{END} rule is to
keep any other @code{END} rules from running. When an assertion fails, the
@@ -21082,10 +21063,6 @@ most likely causing the program to hang as it waits for input.
There is a simple workaround to this:
make sure that such a @code{BEGIN} rule always ends
with an @code{exit} statement.
-@c ENDOFRANGE asse
-@c ENDOFRANGE assef
-@c ENDOFRANGE flibass
-@c ENDOFRANGE libfass
@node Round Function
@subsection Rounding Numbers
@@ -21337,7 +21314,7 @@ all the strings in an array into one long string. The following function,
the application programs
(@pxref{Sample Programs}).
-Good function design is important; this function needs to be general but it
+Good function design is important; this function needs to be general, but it
should also have a reasonable default behavior. It is called with an array
as well as the beginning and ending indices of the elements in the array to be
merged. This assumes that the array indices are numeric---a reasonable
@@ -21485,7 +21462,7 @@ allowed the user to supply an optional timestamp value to use instead
of the current time.
@node Readfile Function
-@subsection Reading a Whole File At Once
+@subsection Reading a Whole File at Once
Often, it is convenient to have the entire contents of a file available
in memory as a single string. A straightforward but naive way to
@@ -21542,13 +21519,13 @@ function readfile(file, tmp, save_rs)
It works by setting @code{RS} to @samp{^$}, a regular expression that
will never match if the file has contents. @command{gawk} reads data from
-the file into @code{tmp} attempting to match @code{RS}. The match fails
+the file into @code{tmp}, attempting to match @code{RS}. The match fails
after each read, but fails quickly, such that @command{gawk} fills
@code{tmp} with the entire contents of the file.
(@DBXREF{Records} for information on @code{RT} and @code{RS}.)
In the case that @code{file} is empty, the return value is the null
-string. Thus calling code may use something like:
+string. Thus, calling code may use something like:
@example
contents = readfile("/some/path")
@@ -21559,7 +21536,7 @@ if (length(contents) == 0)
This tests the result to see if it is empty or not. An equivalent
test would be @samp{contents == ""}.
-@xref{Extension Sample Readfile}, for an extension function that
+@DBXREF{Extension Sample Readfile} for an extension function that
also reads an entire file into memory.
@node Shell Quoting
@@ -21643,11 +21620,8 @@ function shell_quote(s, # parameter
@node Data File Management
@section @value{DDF} Management
-@c STARTOFRANGE dataf
@cindex files, managing
-@c STARTOFRANGE libfdataf
@cindex libraries of @command{awk} functions, managing, data files
-@c STARTOFRANGE flibdataf
@cindex functions, library, managing data files
This @value{SECTION} presents functions that are useful for managing
command-line @value{DF}s.
@@ -21669,8 +21643,8 @@ The @code{BEGIN} and @code{END} rules are each executed exactly once, at
the beginning and end of your @command{awk} program, respectively
(@pxref{BEGIN/END}).
We (the @command{gawk} authors) once had a user who mistakenly thought that the
-@code{BEGIN} rule is executed at the beginning of each @value{DF} and the
-@code{END} rule is executed at the end of each @value{DF}.
+@code{BEGIN} rules were executed at the beginning of each @value{DF} and the
+@code{END} rules were executed at the end of each @value{DF}.
When informed
that this was not the case, the user requested that we add new special
@@ -21710,7 +21684,7 @@ END @{ endfile(FILENAME) @}
This file must be loaded before the user's ``main'' program, so that the
rule it supplies is executed first.
-This rule relies on @command{awk}'s @code{FILENAME} variable that
+This rule relies on @command{awk}'s @code{FILENAME} variable, which
automatically changes for each new @value{DF}. The current @value{FN} is
saved in a private variable, @code{_oldfilename}. If @code{FILENAME} does
not equal @code{_oldfilename}, then a new @value{DF} is being processed and
@@ -21726,7 +21700,7 @@ first @value{DF}.
The program also supplies an @code{END} rule to do the final processing for
the last file. Because this @code{END} rule comes before any @code{END} rules
supplied in the ``main'' program, @code{endfile()} is called first. Once
-again the value of multiple @code{BEGIN} and @code{END} rules should be clear.
+again, the value of multiple @code{BEGIN} and @code{END} rules should be clear.
@cindex @code{beginfile()} user-defined function
@cindex @code{endfile()} user-defined function
@@ -21774,7 +21748,7 @@ how it simplifies writing the main program.
You are probably wondering, if @code{beginfile()} and @code{endfile()}
functions can do the job, why does @command{gawk} have
-@code{BEGINFILE} and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
+@code{BEGINFILE} and @code{ENDFILE} patterns?
Good question. Normally, if @command{awk} cannot open a file, this
causes an immediate fatal error. In this case, there is no way for a
@@ -21783,6 +21757,7 @@ calling it relies on the file being open and at the first record. Thus,
the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
files that cannot be processed. @code{ENDFILE} exists for symmetry,
and because it provides an easy way to do per-file cleanup processing.
+For more information, refer to @ref{BEGINFILE/ENDFILE}.
@docbook
</sidebar>
@@ -21797,7 +21772,7 @@ and because it provides an easy way to do per-file cleanup processing.
You are probably wondering, if @code{beginfile()} and @code{endfile()}
functions can do the job, why does @command{gawk} have
-@code{BEGINFILE} and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
+@code{BEGINFILE} and @code{ENDFILE} patterns?
Good question. Normally, if @command{awk} cannot open a file, this
causes an immediate fatal error. In this case, there is no way for a
@@ -21806,6 +21781,7 @@ calling it relies on the file being open and at the first record. Thus,
the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
files that cannot be processed. @code{ENDFILE} exists for symmetry,
and because it provides an easy way to do per-file cleanup processing.
+For more information, refer to @ref{BEGINFILE/ENDFILE}.
@end cartouche
@end ifnotdocbook
@@ -21813,7 +21789,7 @@ and because it provides an easy way to do per-file cleanup processing.
@subsection Rereading the Current File
@cindex files, reading
-Another request for a new built-in function was for a @code{rewind()}
+Another request for a new built-in function was for a
function that would make it possible to reread the current file.
The requesting user didn't want to have to use @code{getline}
(@pxref{Getline})
@@ -21822,7 +21798,7 @@ inside a loop.
However, as long as you are not in the @code{END} rule, it is
quite easy to arrange to immediately close the current input file
and then start over with it from the top.
-For lack of a better name, we'll call it @code{rewind()}:
+For lack of a better name, we'll call the function @code{rewind()}:
@cindex @code{rewind()} user-defined function
@example
@@ -21915,16 +21891,16 @@ See also @ref{ARGC and ARGV}.
Because @command{awk} variable names only allow the English letters,
the regular expression check purposely does not use character classes
such as @samp{[:alpha:]} and @samp{[:alnum:]}
-(@pxref{Bracket Expressions})
+(@pxref{Bracket Expressions}).
@node Empty Files
-@subsection Checking for Zero-length Files
+@subsection Checking for Zero-Length Files
All known @command{awk} implementations silently skip over zero-length files.
This is a by-product of @command{awk}'s implicit
read-a-record-and-match-against-the-rules loop: when @command{awk}
tries to read a record from an empty file, it immediately receives an
-end of file indication, closes the file, and proceeds on to the next
+end-of-file indication, closes the file, and proceeds on to the next
command-line @value{DF}, @emph{without} executing any user-level
@command{awk} program code.
@@ -21989,7 +21965,7 @@ Occasionally, you might not want @command{awk} to process command-line
variable assignments
(@pxref{Assignment Options}).
In particular, if you have a @value{FN} that contains an @samp{=} character,
-@command{awk} treats the @value{FN} as an assignment, and does not process it.
+@command{awk} treats the @value{FN} as an assignment and does not process it.
Some users have suggested an additional command-line option for @command{gawk}
to disable command-line assignments. However, some simple programming with
@@ -22039,22 +22015,14 @@ The use of @code{No_command_assign} allows you to disable command-line
assignments at invocation time, by giving the variable a true value.
When not set, it is initially zero (i.e., false), so the command-line arguments
are left alone.
-@c ENDOFRANGE dataf
-@c ENDOFRANGE flibdataf
-@c ENDOFRANGE libfdataf
@node Getopt Function
@section Processing Command-Line Options
-@c STARTOFRANGE libfclo
@cindex libraries of @command{awk} functions, command-line options
-@c STARTOFRANGE flibclo
@cindex functions, library, command-line options
-@c STARTOFRANGE clop
@cindex command-line options, processing
-@c STARTOFRANGE oclp
@cindex options, command-line, processing
-@c STARTOFRANGE clibf
@cindex functions, library, C library
@cindex arguments, processing
Most utilities on POSIX-compatible systems take options on
@@ -22359,8 +22327,8 @@ BEGIN @{
@c endfile
@end example
-The rest of the @code{BEGIN} rule is a simple test program. Here is the
-result of two sample runs of the test program:
+The rest of the @code{BEGIN} rule is a simple test program. Here are the
+results of two sample runs of the test program:
@example
$ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x}
@@ -22406,27 +22374,19 @@ further options
Several of the sample programs presented in
@ref{Sample Programs},
use @code{getopt()} to process their arguments.
-@c ENDOFRANGE libfclo
-@c ENDOFRANGE flibclo
-@c ENDOFRANGE clop
-@c ENDOFRANGE oclp
@node Passwd Functions
@section Reading the User Database
-@c STARTOFRANGE libfudata
@cindex libraries of @command{awk} functions, user database, reading
-@c STARTOFRANGE flibudata
@cindex functions, library, user database@comma{} reading
-@c STARTOFRANGE udatar
@cindex user database@comma{} reading
-@c STARTOFRANGE dataur
@cindex database, users@comma{} reading
@cindex @code{PROCINFO} array
The @code{PROCINFO} array
(@pxref{Built-in Variables})
provides access to the current user's real and effective user and group ID
-numbers, and if available, the user's supplementary group set.
+numbers, and, if available, the user's supplementary group set.
However, because these are numbers, they do not provide very useful
information to the average user. There needs to be some way to find the
user information associated with the user and group ID numbers. This
@@ -22446,7 +22406,7 @@ kept. Instead, it provides the @code{<pwd.h>} header file
and several C language subroutines for obtaining user information.
The primary function is @code{getpwent()}, for ``get password entry.''
The ``password'' comes from the original user database file,
-@file{/etc/passwd}, which stores user information, along with the
+@file{/etc/passwd}, which stores user information along with the
encrypted passwords (hence the name).
@cindex @command{pwcat} program
@@ -22545,7 +22505,7 @@ The user's encrypted password. This may not be available on some systems.
@item User-ID
The user's numeric user ID number.
-(On some systems, it's a C @code{long}, and not an @code{int}. Thus
+(On some systems, it's a C @code{long}, and not an @code{int}. Thus,
we cast it to @code{long} for all cases.)
@item Group-ID
@@ -22672,7 +22632,7 @@ The code that checks for using @code{FPAT}, using @code{using_fpat}
and @code{PROCINFO["FS"]}, is similar.
The main part of the function uses a loop to read database lines, split
-the line into fields, and then store the line into each array as necessary.
+the lines into fields, and then store the lines into each array as necessary.
When the loop is done, @code{@w{_pw_init()}} cleans up by closing the pipeline,
setting @code{@w{_pw_inited}} to one, and restoring @code{FS}
(and @code{FIELDWIDTHS} or @code{FPAT}
@@ -22767,21 +22727,13 @@ and such a change would clutter up the code.
The @command{id} program in @DBREF{Id Program}
uses these functions.
-@c ENDOFRANGE libfudata
-@c ENDOFRANGE flibudata
-@c ENDOFRANGE udatar
-@c ENDOFRANGE dataur
@node Group Functions
@section Reading the Group Database
-@c STARTOFRANGE libfgdata
@cindex libraries of @command{awk} functions, group database, reading
-@c STARTOFRANGE flibgdata
@cindex functions, library, group database@comma{} reading
-@c STARTOFRANGE gdatar
@cindex group database, reading
-@c STARTOFRANGE datagr
@cindex database, group, reading
@cindex @code{PROCINFO} array, and group membership
@cindex @code{getgrent()} function (C library)
@@ -22897,7 +22849,7 @@ it is usually empty or set to @samp{*}.
@item Group ID Number
The group's numeric group ID number;
the association of name to number must be unique within the file.
-(On some systems it's a C @code{long}, and not an @code{int}. Thus
+(On some systems it's a C @code{long}, and not an @code{int}. Thus,
we cast it to @code{long} for all cases.)
@item Group Member List
@@ -23011,32 +22963,32 @@ The @code{@w{_gr_init()}} function first saves @code{FS},
@code{$0}, and then sets @code{FS} and @code{RS} to the correct values for
scanning the group information.
It also takes care to note whether @code{FIELDWIDTHS} or @code{FPAT}
-is being used, and to restore the appropriate field splitting mechanism.
+is being used, and to restore the appropriate field-splitting mechanism.
-The group information is stored is several associative arrays.
+The group information is stored in several associative arrays.
The arrays are indexed by group name (@code{@w{_gr_byname}}), by group ID number
(@code{@w{_gr_bygid}}), and by position in the database (@code{@w{_gr_bycount}}).
There is an additional array indexed by username (@code{@w{_gr_groupsbyuser}}),
which is a space-separated list of groups to which each user belongs.
-Unlike the user database, it is possible to have multiple records in the
+Unlike in the user database, it is possible to have multiple records in the
database for the same group. This is common when a group has a large number
of members. A pair of such entries might look like the following:
@example
-tvpeople:*:101:johny,jay,arsenio
+tvpeople:*:101:johnny,jay,arsenio
tvpeople:*:101:david,conan,tom,joan
@end example
For this reason, @code{_gr_init()} looks to see if a group name or
-group ID number is already seen. If it is, the usernames are
-simply concatenated onto the previous list of users.@footnote{There is actually a
+group ID number is already seen. If so, the usernames are
+simply concatenated onto the previous list of users.@footnote{There is a
subtle problem with the code just presented. Suppose that
the first time there were no names. This code adds the names with
a leading comma. It also doesn't check that there is a @code{$4}.}
Finally, @code{_gr_init()} closes the pipeline to @command{grcat}, restores
-@code{FS} (and @code{FIELDWIDTHS} or @code{FPAT} if necessary), @code{RS}, and @code{$0},
+@code{FS} (and @code{FIELDWIDTHS} or @code{FPAT}, if necessary), @code{RS}, and @code{$0},
initializes @code{_gr_count} to zero
(it is used later), and makes @code{_gr_inited} nonzero.
@@ -23104,7 +23056,6 @@ function getgrent()
@}
@c endfile
@end example
-@c ENDOFRANGE clibf
@cindex @code{endgrent()} function (C library)
The @code{endgrent()} function resets @code{_gr_count} to zero so that @code{getgrent()} can
@@ -23137,12 +23088,12 @@ uses these functions.
@DBREF{Arrays of Arrays} described how @command{gawk}
provides arrays of arrays. In particular, any element of
-an array may be either a scalar, or another array. The
+an array may be either a scalar or another array. The
@code{isarray()} function (@pxref{Type Functions})
lets you distinguish an array
from a scalar.
The following function, @code{walk_array()}, recursively traverses
-an array, printing each element's indices and value.
+an array, printing the element indices and values.
You call it with the array and a string representing the name
of the array:
@@ -23193,10 +23144,66 @@ $ @kbd{gawk -f walk_array.awk}
@print{} a[4][2] = 42
@end example
-@c ENDOFRANGE libfgdata
-@c ENDOFRANGE flibgdata
-@c ENDOFRANGE gdatar
-@c ENDOFRANGE libf
+The function just presented simply prints the
+name and value of each scalar array element. However, it is easy to
+generalize it, by passing in the name of a function to call
+when walking an array. The modified function looks like this:
+
+@example
+@c file eg/lib/processarray.awk
+function process_array(arr, name, process, do_arrays, i, new_name)
+@{
+ for (i in arr) @{
+ new_name = (name "[" i "]")
+ if (isarray(arr[i])) @{
+ if (do_arrays)
+ @@process(new_name, arr[i])
+ process_array(arr[i], new_name, process, do_arrays)
+ @} else
+ @@process(new_name, arr[i])
+ @}
+@}
+@c endfile
+@end example
+
+The arguments are as follows:
+
+@table @code
+@item arr
+The array.
+
+@item name
+The name of the array (a string).
+
+@item process
+The name of the function to call.
+
+@item do_arrays
+If this is true, the function can handle elements that are subarrays.
+@end table
+
+If subarrays are to be processed, that is done before walking them further.
+
+When run with the following scaffolding, the function produces the same
+results as does the earlier version of @code{walk_array()}:
+
+@example
+BEGIN @{
+ a[1] = 1
+ a[2][1] = 21
+ a[2][2] = 22
+ a[3] = 3
+ a[4][1][1] = 411
+ a[4][2] = 42
+
+ process_array(a, "a", "do_print", 0)
+@}
+
+function do_print(name, element)
+@{
+ printf "%s = %s\n", name, element
+@}
+@end example
@node Library Functions Summary
@section Summary
@@ -23218,24 +23225,24 @@ The functions presented here fit into the following categories:
@c nested list
@table @asis
@item General problems
-Number-to-string conversion, assertions, rounding, random number
+Number-to-string conversion, testing assertions, rounding, random number
generation, converting characters to numbers, joining strings, getting
easily usable time-of-day information, and reading a whole file in
-one shot.
+one shot
@item Managing @value{DF}s
Noting @value{DF} boundaries, rereading the current file, checking for
readable files, checking for zero-length files, and treating assignments
-as @value{FN}s.
+as @value{FN}s
@item Processing command-line options
-An @command{awk} version of the standard C @code{getopt()} function.
+An @command{awk} version of the standard C @code{getopt()} function
@item Reading the user and group databases
-Two sets of routines that parallel the C library versions.
+Two sets of routines that parallel the C library versions
@item Traversing arrays of arrays
-A simple function to traverse an array of arrays to any depth.
+Two functions that traverse an array of arrays to any depth
@end table
@c end nested list
@@ -23310,13 +23317,9 @@ output identical to that of the original version.
@end enumerate
@c EXCLUDE END
-@c ENDOFRANGE flib
-@c ENDOFRANGE fudlib
-@c ENDOFRANGE datagr
@node Sample Programs
@chapter Practical @command{awk} Programs
-@c STARTOFRANGE awkpex
@cindex @command{awk} programs, examples of
@c FULLXREF ON
@@ -23334,10 +23337,10 @@ in this @value{CHAPTER}.
The second presents @command{awk}
versions of several common POSIX utilities.
These are programs that you are hopefully already familiar with,
-and therefore, whose problems are understood.
+and therefore whose problems are understood.
By reimplementing these programs in @command{awk},
you can focus on the @command{awk}-related aspects of solving
-the programming problem.
+the programming problems.
The third is a grab bag of interesting programs.
These solve a number of different data-manipulation and management
@@ -23386,7 +23389,6 @@ cut.awk -- -c1-8 myfiles > results
@node Clones
@section Reinventing Wheels for Fun and Profit
-@c STARTOFRANGE posimawk
@cindex POSIX, programs@comma{} implementing in @command{awk}
This @value{SECTION} presents a number of POSIX utilities implemented in
@@ -23398,7 +23400,7 @@ It should be noted that these programs are not necessarily intended to
replace the installed versions on your system.
Nor may all of these programs be fully compliant with the most recent
POSIX standard. This is not a problem; their
-purpose is to illustrate @command{awk} language programming for ``real world''
+purpose is to illustrate @command{awk} language programming for ``real-world''
tasks.
The programs are presented in alphabetical order.
@@ -23417,11 +23419,8 @@ The programs are presented in alphabetical order.
@subsection Cutting Out Fields and Columns
@cindex @command{cut} utility
-@c STARTOFRANGE cut
@cindex @command{cut} utility
-@c STARTOFRANGE ficut
@cindex fields, cutting
-@c STARTOFRANGE colcut
@cindex columns, cutting
The @command{cut} utility selects, or ``cuts,'' characters or fields
from its standard input and sends them to its standard output.
@@ -23430,7 +23429,7 @@ but you may supply a command-line option to change the field
@dfn{delimiter} (i.e., the field-separator character). @command{cut}'s
definition of fields is less general than @command{awk}'s.
-A common use of @command{cut} might be to pull out just the login name of
+A common use of @command{cut} might be to pull out just the login names of
logged-on users from the output of @command{who}. For example, the following
pipeline generates a sorted, unique list of the logged-on users:
@@ -23729,21 +23728,14 @@ other @command{awk} implementations to use @code{substr()}
it is also extremely painful.
The @code{FIELDWIDTHS} variable supplies an elegant solution to the problem
of picking the input line apart by characters.
-@c ENDOFRANGE cut
-@c ENDOFRANGE ficut
-@c ENDOFRANGE colcut
@node Egrep Program
@subsection Searching for Regular Expressions in Files
-@c STARTOFRANGE regexps
@cindex regular expressions, searching for
-@c STARTOFRANGE sfregexp
@cindex searching, files for regular expressions
-@c STARTOFRANGE fsregexp
@cindex files, searching for regular expressions
-@c STARTOFRANGE egrep
@cindex @command{egrep} utility
The @command{egrep} utility searches files for patterns. It uses regular
expressions that are almost identical to those available in @command{awk}
@@ -23946,7 +23938,7 @@ successful or unsuccessful match. If the line does not match, the
@code{next} statement just moves on to the next record.
A number of additional tests are made, but they are only done if we
-are not counting lines. First, if the user only wants exit status
+are not counting lines. First, if the user only wants the exit status
(@code{no_print} is true), then it is enough to know that @emph{one}
line in this file matched, and we can skip on to the next file with
@code{nextfile}. Similarly, if we are only printing @value{FN}s, we can
@@ -23987,7 +23979,7 @@ if necessary:
@end example
The @code{END} rule takes care of producing the correct exit status. If
-there are no matches, the exit status is one; otherwise it is zero:
+there are no matches, the exit status is one; otherwise, it is zero:
@example
@c file eg/prog/egrep.awk
@@ -24011,17 +24003,12 @@ function usage()
@c endfile
@end example
-@c ENDOFRANGE regexps
-@c ENDOFRANGE sfregexp
-@c ENDOFRANGE fsregexp
-@c ENDOFRANGE egrep
@node Id Program
@subsection Printing Out User Information
@cindex printing, user information
@cindex users, information about, printing
-@c STARTOFRANGE id
@cindex @command{id} utility
The @command{id} utility lists a user's real and effective user ID numbers,
real and effective group ID numbers, and the user's group set, if any.
@@ -24044,7 +24031,8 @@ Here is a simple version of @command{id} written in @command{awk}.
It uses the user database library functions
(@pxref{Passwd Functions})
and the group database library functions
-(@pxref{Group Functions}):
+(@pxref{Group Functions})
+from @ref{Library Functions}.
The program is fairly straightforward. All the work is done in the
@code{BEGIN} rule. The user and group ID numbers are obtained from
@@ -24150,16 +24138,13 @@ code that is used repeatedly, making the whole program
shorter and cleaner. In particular, moving the check for
the empty string into this function saves several lines of code.
-@c ENDOFRANGE id
@node Split Program
@subsection Splitting a Large File into Pieces
@c FIXME: One day, update to current POSIX version of split
-@c STARTOFRANGE filspl
@cindex files, splitting
-@c STARTOFRANGE split
@cindex @code{split} utility
The @command{split} program splits large text files into smaller pieces.
Usage is as follows:@footnote{This is the traditional usage. The
@@ -24174,8 +24159,8 @@ By default,
the output files are named @file{xaa}, @file{xab}, and so on. Each file has
1,000 lines in it, with the likely exception of the last file. To change the
number of lines in each file, supply a number on the command line
-preceded with a minus (e.g., @samp{-500} for files with 500 lines in them
-instead of 1,000). To change the name of the output files to something like
+preceded with a minus sign (e.g., @samp{-500} for files with 500 lines in them
+instead of 1,000). To change the names of the output files to something like
@file{myfileaa}, @file{myfileab}, and so on, supply an additional
argument that specifies the @value{FN} prefix.
@@ -24294,15 +24279,12 @@ You might want to consider how to eliminate the use of
way as to solve the EBCDIC issue as well.
@end ifset
-@c ENDOFRANGE filspl
-@c ENDOFRANGE split
@node Tee Program
@subsection Duplicating Output into Multiple Files
@cindex files, multiple@comma{} duplicating output into
@cindex output, duplicating into files
-@c STARTOFRANGE tee
@cindex @code{tee} utility
The @code{tee} program is known as a ``pipe fitting.'' @code{tee} copies
its standard input to its standard output and also duplicates it to the
@@ -24415,18 +24397,14 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE tee
@node Uniq Program
@subsection Printing Nonduplicated Lines of Text
@c FIXME: One day, update to current POSIX version of uniq
-@c STARTOFRANGE prunt
@cindex printing, unduplicated lines of text
-@c STARTOFRANGE tpul
@cindex text@comma{} printing, unduplicated lines of
-@c STARTOFRANGE uniq
@cindex @command{uniq} utility
The @command{uniq} utility reads sorted lines of data on its standard
input, and by default removes duplicate lines. In other words, it only
@@ -24695,26 +24673,17 @@ suggestion.
@end ifset
-@c ENDOFRANGE prunt
-@c ENDOFRANGE tpul
-@c ENDOFRANGE uniq
@node Wc Program
@subsection Counting Things
@c FIXME: One day, update to current POSIX version of wc
-@c STARTOFRANGE count
@cindex counting
-@c STARTOFRANGE infco
@cindex input files, counting elements in
-@c STARTOFRANGE woco
@cindex words, counting
-@c STARTOFRANGE chco
@cindex characters, counting
-@c STARTOFRANGE lico
@cindex lines, counting
-@c STARTOFRANGE wc
@cindex @command{wc} utility
The @command{wc} (word count) utility counts lines, words, and characters in
one or more input files. Its usage is as follows:
@@ -24884,13 +24853,6 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE count
-@c ENDOFRANGE infco
-@c ENDOFRANGE lico
-@c ENDOFRANGE woco
-@c ENDOFRANGE chco
-@c ENDOFRANGE wc
-@c ENDOFRANGE posimawk
@node Miscellaneous Programs
@section A Grab Bag of @command{awk} Programs
@@ -25021,9 +24983,7 @@ Aharon Robbins <arnold@skeeve.com> wrote:
@author Erik Quanstrom
@end quotation
-@c STARTOFRANGE tialarm
@cindex time, alarm clock example program
-@c STARTOFRANGE alaex
@cindex alarm clock example program
The following program is a simple ``alarm clock'' program.
You give it a time of day and an optional message. At the specified time,
@@ -25039,7 +24999,7 @@ checking and setting of defaults: the delay, the count, and the message to
print. If the user supplied a message without the ASCII BEL
character (known as the ``alert'' character, @code{"\a"}), then it is added to
the message. (On many systems, printing the ASCII BEL generates an
-audible alert. Thus when the alarm goes off, the system calls attention
+audible alert. Thus, when the alarm goes off, the system calls attention
to itself in case the user is not looking at the computer.)
Just for a change, this program uses a @code{switch} statement
(@pxref{Switch Statement}), but the processing could be done with a series of
@@ -25175,15 +25135,11 @@ seconds are necessary:
@}
@c endfile
@end example
-@c ENDOFRANGE tialarm
-@c ENDOFRANGE alaex
@node Translate Program
@subsection Transliterating Characters
-@c STARTOFRANGE chtra
@cindex characters, transliterating
-@c STARTOFRANGE tr
@cindex @command{tr} utility
The system @command{tr} utility transliterates characters. For example, it is
often used to map uppercase letters into lowercase for further processing:
@@ -25212,7 +25168,7 @@ to @command{gawk}.
@c at least theoretically
The following program was written to
prove that character transliteration could be done with a user-level
-function. This program is not as complete as the system @command{tr} utility
+function. This program is not as complete as the system @command{tr} utility,
but it does most of the job.
The @command{translate} program was written long before @command{gawk}
@@ -25224,13 +25180,13 @@ takes three arguments:
@table @code
@item from
-A list of characters from which to translate.
+A list of characters from which to translate
@item to
-A list of characters to which to translate.
+A list of characters to which to translate
@item target
-The string on which to do the translation.
+The string on which to do the translation
@end table
Associative arrays make the translation part fairly easy. @code{t_ar} holds
@@ -25239,7 +25195,7 @@ loop goes through @code{from}, one character at a time. For each character
in @code{from}, if the character appears in @code{target},
it is replaced with the corresponding @code{to} character.
-The @code{translate()} function calls @code{stranslate()} using @code{$0}
+The @code{translate()} function calls @code{stranslate()}, using @code{$0}
as the target. The main program sets two global variables, @code{FROM} and
@code{TO}, from the command line, and then changes @code{ARGV} so that
@command{awk} reads from the standard input.
@@ -25261,7 +25217,7 @@ Finally, the processing rule simply calls @code{translate()} for each record:
@c endfile
@end ignore
@c file eg/prog/translate.awk
-# Bugs: does not handle things like: tr A-Z a-z, it has
+# Bugs: does not handle things like tr A-Z a-z; it has
# to be spelled out. However, if `to' is shorter than `from',
# the last character in `to' is used for the rest of `from'.
@@ -25331,17 +25287,13 @@ such as @samp{a-z}, as allowed by the @command{tr} utility.
Look at the code for @file{cut.awk} (@pxref{Cut Program})
for inspiration.
-@c ENDOFRANGE chtra
-@c ENDOFRANGE tr
@node Labels Program
@subsection Printing Mailing Labels
-@c STARTOFRANGE prml
@cindex printing, mailing labels
-@c STARTOFRANGE mlprint
@cindex mailing labels@comma{} printing
-Here is a ``real world''@footnote{``Real world'' is defined as
+Here is a ``real-world''@footnote{``Real world'' is defined as
``a program actually used to get something done.''}
program. This
script reads lists of names and
@@ -25350,7 +25302,7 @@ on it, two across and 10 down. The addresses are guaranteed to be no more
than five lines of data. Each address is separated from the next by a blank
line.
-The basic idea is to read 20 labels worth of data. Each line of each label
+The basic idea is to read 20 labels' worth of data. Each line of each label
is stored in the @code{line} array. The single rule takes care of filling
the @code{line} array and printing the page when 20 labels have been read.
@@ -25373,12 +25325,12 @@ of lines on the page
Most of the work is done in the @code{printpage()} function.
The label lines are stored sequentially in the @code{line} array. But they
-have to print horizontally; @code{line[1]} next to @code{line[6]},
+have to print horizontally: @code{line[1]} next to @code{line[6]},
@code{line[2]} next to @code{line[7]}, and so on. Two loops
accomplish this. The outer loop, controlled by @code{i}, steps through
every 10 lines of data; this is each row of labels. The inner loop,
controlled by @code{j}, goes through the lines within the row.
-As @code{j} goes from 0 to 4, @samp{i+j} is the @code{j}-th line in
+As @code{j} goes from 0 to 4, @samp{i+j} is the @code{j}th line in
the row, and @samp{i+j+5} is the entry next to it. The output ends up
looking something like this:
@@ -25403,7 +25355,6 @@ that there are two blank lines at the top and two blank lines at the bottom.
The @code{END} rule arranges to flush the final page of labels; there may
not have been an even multiple of 20 labels in the data:
-@c STARTOFRANGE labels
@cindex @code{labels.awk} program
@example
@c file eg/prog/labels.awk
@@ -25468,14 +25419,10 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE prml
-@c ENDOFRANGE mlprint
-@c ENDOFRANGE labels
@node Word Sorting
@subsection Generating Word-Usage Counts
-@c STARTOFRANGE worus
@cindex words, usage counts@comma{} generating
When working with large amounts of text, it can be interesting to know
@@ -25501,8 +25448,8 @@ END @{
@}
@end example
-The program relies on @command{awk}'s default field splitting
-mechanism to break each line up into ``words,'' and uses an
+The program relies on @command{awk}'s default field-splitting
+mechanism to break each line up into ``words'' and uses an
associative array named @code{freq}, indexed by each word, to count
the number of times the word occurs. In the @code{END} rule,
it prints the counts.
@@ -25537,7 +25484,6 @@ to remove punctuation characters. Finally, we solve the third problem
by using the system @command{sort} utility to process the output of the
@command{awk} script. Here is the new version of the program:
-@c STARTOFRANGE wordfreq
@cindex @code{wordfreq.awk} program
@example
@c file eg/prog/wordfreq.awk
@@ -25602,16 +25548,13 @@ This way of sorting must be used on systems that do not
have true pipes at the command-line (or batch-file) level.
See the general operating system documentation for more information on how
to use the @command{sort} program.
-@c ENDOFRANGE worus
-@c ENDOFRANGE wordfreq
@node History Sorting
@subsection Removing Duplicates from Unsorted Text
-@c STARTOFRANGE lidu
@cindex lines, duplicate@comma{} removing
The @command{uniq} program
-(@pxref{Uniq Program}),
+(@pxref{Uniq Program})
removes duplicate lines from @emph{sorted} data.
Suppose, however, you need to remove duplicate lines from a @value{DF} but
@@ -25633,7 +25576,6 @@ Each element of @code{lines} is a unique command, and the indices of
The @code{END} rule simply prints out the lines, in order:
@cindex Rakitzis, Byron
-@c STARTOFRANGE histsort
@cindex @code{histsort.awk} program
@example
@c file eg/prog/histsort.awk
@@ -25676,15 +25618,11 @@ print data[lines[i]], lines[i]
@noindent
This works because @code{data[$0]} is incremented each time a line is
seen.
-@c ENDOFRANGE lidu
-@c ENDOFRANGE histsort
@node Extract Program
@subsection Extracting Programs from Texinfo Source Files
-@c STARTOFRANGE texse
@cindex Texinfo, extracting programs from source files
-@c STARTOFRANGE fitex
@cindex files, Texinfo@comma{} extracting programs from
@ifnotinfo
Both this chapter and the previous chapter
@@ -25703,7 +25641,7 @@ Texinfo input file into separate files.
@cindex Texinfo
This @value{DOCUMENT} is written in @uref{http://www.gnu.org/software/texinfo/, Texinfo},
-the GNU project's document formatting language.
+the GNU Project's document formatting language.
A single Texinfo source file can be used to produce both
printed documentation, with @TeX{}, and online documentation.
@ifnotinfo
@@ -25762,7 +25700,7 @@ The Texinfo file looks something like this:
@example
@dots{}
-This program has a @@code@{BEGIN@} rule,
+This program has a @@code@{BEGIN@} rule
that prints a nice message:
@@example
@@ -25788,11 +25726,10 @@ The first rule handles calling @code{system()}, checking that a command is
given (@code{NF} is at least three) and also checking that the command
exits with a zero exit status, signifying OK:
-@c STARTOFRANGE extract
@cindex @code{extract.awk} program
@example
@c file eg/prog/extract.awk
-# extract.awk --- extract files and run programs from texinfo files
+# extract.awk --- extract files and run programs from Texinfo files
@c endfile
@ignore
@c file eg/prog/extract.awk
@@ -25833,12 +25770,12 @@ The second rule handles moving data into files. It verifies that a
@value{FN} is given in the directive. If the file named is not the
current file, then the current file is closed. Keeping the current file
open until a new file is encountered allows the use of the @samp{>}
-redirection for printing the contents, keeping open file management
+redirection for printing the contents, keeping open-file management
simple.
The @code{for} loop does the work. It reads lines using @code{getline}
(@pxref{Getline}).
-For an unexpected end of file, it calls the @code{@w{unexpected_eof()}}
+For an unexpected end-of-file, it calls the @code{@w{unexpected_eof()}}
function. If the line is an ``endfile'' line, then it breaks out of
the loop.
If the line is an @samp{@@group} or @samp{@@end group} line, then it
@@ -25934,16 +25871,13 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE texse
-@c ENDOFRANGE fitex
-@c ENDOFRANGE extract
@node Simple Sed
@subsection A Simple Stream Editor
@cindex @command{sed} utility
@cindex stream editors
-The @command{sed} utility is a stream editor, a program that reads a
+The @command{sed} utility is a @dfn{stream editor}, a program that reads a
stream of data, makes changes to it, and passes it on.
It is often used to make global changes to a large file or to a stream
of data generated by a pipeline of commands.
@@ -25966,7 +25900,6 @@ additional arguments are treated as @value{DF} names to process. If none
are provided, the standard input is used:
@cindex Brennan, Michael
-@c STARTOFRANGE awksed
@cindex @command{awksed.awk} program
@c @cindex simple stream editor
@c @cindex stream editor, simple
@@ -26043,14 +25976,11 @@ The @code{usage()} function prints an error message and exits.
Finally, the single rule handles the printing scheme outlined earlier,
using @code{print} or @code{printf} as appropriate, depending upon the
value of @code{RT}.
-@c ENDOFRANGE awksed
@node Igawk Program
@subsection An Easy Way to Use Library Functions
-@c STARTOFRANGE libfex
@cindex libraries of @command{awk} functions, example program for using
-@c STARTOFRANGE flibex
@cindex functions, library, example program for using
In @ref{Include Files}, we saw how @command{gawk} provides a built-in
file-inclusion capability. However, this is a @command{gawk} extension.
@@ -26092,7 +26022,7 @@ includes don't accidentally include a library function twice.
@command{igawk} should behave just like @command{gawk} externally. This
means it should accept all of @command{gawk}'s command-line arguments,
including the ability to have multiple source files specified via
-@option{-f}, and the ability to mix command-line and library source files.
+@option{-f} and the ability to mix command-line and library source files.
The program is written using the POSIX Shell (@command{sh}) command
language.@footnote{Fully explaining the @command{sh} language is beyond
@@ -26131,7 +26061,7 @@ Run the expanded program with @command{gawk} and any other original command-line
arguments that the user supplied (such as the @value{DF} names).
@end enumerate
-This program uses shell variables extensively: for storing command-line arguments,
+This program uses shell variables extensively: for storing command-line arguments and
the text of the @command{awk} program that will expand the user's program, for the
user's original program, and for the expanded program. Doing so removes some
potential problems that might arise were we to use temporary files instead,
@@ -26189,7 +26119,6 @@ program.
The program is as follows:
-@c STARTOFRANGE igawk
@cindex @code{igawk.sh} program
@example
@c file eg/prog/igawk.sh
@@ -26449,22 +26378,7 @@ Save the results of this processing in the shell variable
The last step is to call @command{gawk} with the expanded program,
along with the original
-options and command-line arguments that the user supplied.
-
-@c this causes more problems than it solves, so leave it out.
-@ignore
-The special file @file{/dev/null} is passed as a @value{DF} to @command{gawk}
-to handle an interesting case. Suppose that the user's program only has
-a @code{BEGIN} rule and there are no @value{DF}s to read.
-The program should exit without reading any @value{DF}s.
-However, suppose that an included library file defines an @code{END}
-rule of its own. In this case, @command{gawk} will hang, reading standard
-input. In order to avoid this, @file{/dev/null} is explicitly added to the
-command line. Reading from @file{/dev/null} always returns an immediate
-end of file indication.
-
-@c Hmm. Add /dev/null if $# is 0? Still messes up ARGV. Sigh.
-@end ignore
+options and command-line arguments that the user supplied:
@example
@c file eg/prog/igawk.sh
@@ -26514,10 +26428,6 @@ features to a program; they can often be layered on top.@footnote{@command{gawk}
does @code{@@include} processing itself in order to support the use
of @command{awk} programs as Web CGI scripts.}
-@c ENDOFRANGE libfex
-@c ENDOFRANGE flibex
-@c ENDOFRANGE awkpex
-@c ENDOFRANGE igawk
@node Anagram Program
@subsection Finding Anagrams from a Dictionary
@@ -26534,19 +26444,18 @@ the same letters
Column 2, Problem C, of Jon Bentley's @cite{Programming Pearls}, Second
Edition, presents an elegant algorithm. The idea is to give words that
are anagrams a common signature, sort all the words together by their
-signature, and then print them. Dr.@: Bentley observes that taking the
-letters in each word and sorting them produces that common signature.
+signatures, and then print them. Dr.@: Bentley observes that taking the
+letters in each word and sorting them produces those common signatures.
The following program uses arrays of arrays to bring together
words with the same signature and array sorting to print the words
in sorted order:
-@c STARTOFRANGE anagram
@cindex @code{anagram.awk} program
@example
@c file eg/prog/anagram.awk
-# anagram.awk --- An implementation of the anagram finding algorithm
-# from Jon Bentley's "Programming Pearls", 2nd edition.
+# anagram.awk --- An implementation of the anagram-finding algorithm
+# from Jon Bentley's "Programming Pearls," 2nd edition.
# Addison Wesley, 2000, ISBN 0-201-65788-0.
# Column 2, Problem C, section 2.8, pp 18-20.
@c endfile
@@ -26594,7 +26503,7 @@ sorts the letters, and then joins them back together:
@example
@c file eg/prog/anagram.awk
-# word2key --- split word apart into letters, sort, joining back together
+# word2key --- split word apart into letters, sort, and join back together
function word2key(word, a, i, n, result)
@{
@@ -26650,7 +26559,6 @@ babery yabber
@dots{}
@end example
-@c ENDOFRANGE anagram
@node Signature Program
@subsection And Now for Something Completely Different
@@ -26790,12 +26698,13 @@ characters. The ability to use @code{split()} with the empty string as
the separator can considerably simplify such tasks.
@item
-The library functions from @ref{Library Functions}, proved their
-usefulness for a number of real (if small) programs.
+The examples here demonstrate the usefulness of the library
+functions from @DBREF{Library Functions}
+for a number of real (if small) programs.
@item
Besides reinventing POSIX wheels, other programs solved a selection of
-interesting problems, such as finding duplicates words in text, printing
+interesting problems, such as finding duplicate words in text, printing
mailing labels, and finding anagrams.
@end itemize
@@ -26970,9 +26879,7 @@ It contains the following chapters:
@node Advanced Features
@chapter Advanced Features of @command{gawk}
-@c STARTOFRANGE gawadv
@cindex @command{gawk}, features, advanced
-@c STARTOFRANGE advgaw
@cindex advanced features, @command{gawk}
@ignore
Contributed by: Peter Langston <pud!psl@bellcore.bellcore.com>
@@ -26993,18 +26900,18 @@ a violent psychopath who knows where you live.}
This @value{CHAPTER} discusses advanced features in @command{gawk}.
It's a bit of a ``grab bag'' of items that are otherwise unrelated
to each other.
-First, a command-line option allows @command{gawk} to recognize
+First, we look at a command-line option that allows @command{gawk} to recognize
nondecimal numbers in input data, not just in @command{awk}
programs.
Then, @command{gawk}'s special features for sorting arrays are presented.
Next, two-way I/O, discussed briefly in earlier parts of this
@value{DOCUMENT}, is described in full detail, along with the basics
-of TCP/IP networking. Finally, @command{gawk}
+of TCP/IP networking. Finally, we see how @command{gawk}
can @dfn{profile} an @command{awk} program, making it possible to tune
it for performance.
@c FULLXREF ON
-A number of advanced features require separate @value{CHAPTER}s of their
+Additional advanced features are discussed in separate @value{CHAPTER}s of their
own:
@itemize @value{BULLET}
@@ -27098,7 +27005,8 @@ This option may disappear in a future version of @command{gawk}.
@node Array Sorting
@section Controlling Array Traversal and Array Sorting
-@command{gawk} lets you control the order in which a @samp{for (i in array)}
+@command{gawk} lets you control the order in which a
+@samp{for (@var{indx} in @var{array})}
loop traverses an array.
In addition, two built-in functions, @code{asort()} and @code{asorti()},
@@ -27114,7 +27022,7 @@ to order the elements during sorting.
@node Controlling Array Traversal
@subsection Controlling Array Traversal
-By default, the order in which a @samp{for (i in array)} loop
+By default, the order in which a @samp{for (@var{indx} in @var{array})} loop
scans an array is not defined; it is generally based upon
the internal implementation of arrays inside @command{awk}.
@@ -27143,23 +27051,23 @@ function comp_func(i1, v1, i2, v2)
@}
@end example
-Here, @var{i1} and @var{i2} are the indices, and @var{v1} and @var{v2}
+Here, @code{i1} and @code{i2} are the indices, and @code{v1} and @code{v2}
are the corresponding values of the two elements being compared.
-Either @var{v1} or @var{v2}, or both, can be arrays if the array being
+Either @code{v1} or @code{v2}, or both, can be arrays if the array being
traversed contains subarrays as values.
(@DBXREF{Arrays of Arrays} for more information about subarrays.)
The three possible return values are interpreted as follows:
@table @code
@item comp_func(i1, v1, i2, v2) < 0
-Index @var{i1} comes before index @var{i2} during loop traversal.
+Index @code{i1} comes before index @code{i2} during loop traversal.
@item comp_func(i1, v1, i2, v2) == 0
-Indices @var{i1} and @var{i2}
-come together but the relative order with respect to each other is undefined.
+Indices @code{i1} and @code{i2}
+come together, but the relative order with respect to each other is undefined.
@item comp_func(i1, v1, i2, v2) > 0
-Index @var{i1} comes after index @var{i2} during loop traversal.
+Index @code{i1} comes after index @code{i2} during loop traversal.
@end table
Our first comparison function can be used to scan an array in
@@ -27320,7 +27228,7 @@ As already mentioned, the order of the indices is arbitrary if two
elements compare equal. This is usually not a problem, but letting
the tied elements come out in arbitrary order can be an issue, especially
when comparing item values. The partial ordering of the equal elements
-may change the next time the array is traversed, if other elements are added or
+may change the next time the array is traversed, if other elements are added to or
removed from the array. One way to resolve ties when comparing elements
with otherwise equal values is to include the indices in the comparison
rules. Note that doing this may make the loop traversal less efficient,
@@ -27363,7 +27271,7 @@ equivalent or distinct.
Another point to keep in mind is that in the case of subarrays,
the element values can themselves be arrays; a production comparison
function should use the @code{isarray()} function
-(@pxref{Type Functions}),
+(@pxref{Type Functions})
to check for this, and choose a defined sorting order for subarrays.
All sorting based on @code{PROCINFO["sorted_in"]}
@@ -27371,7 +27279,7 @@ is disabled in POSIX mode,
because the @code{PROCINFO} array is not special in that case.
As a side note, sorting the array indices before traversing
-the array has been reported to add 15% to 20% overhead to the
+the array has been reported to add a 15% to 20% overhead to the
execution time of @command{awk} programs. For this reason,
sorted array traversal is not the default.
@@ -27430,7 +27338,7 @@ However, the @code{source} array is not affected.
Often, what's needed is to sort on the values of the @emph{indices}
instead of the values of the elements. To do that, use the
@code{asorti()} function. The interface and behavior are identical to
-that of @code{asort()}, except that the index values are used for sorting,
+that of @code{asort()}, except that the index values are used for sorting
and become the values of the result array:
@example
@@ -27465,8 +27373,8 @@ it chooses}, taking into account just the indices, just the values,
or both. This is extremely powerful.
Once the array is sorted, @code{asort()} takes the @emph{values} in
-their final order, and uses them to fill in the result array, whereas
-@code{asorti()} takes the @emph{indices} in their final order, and uses
+their final order and uses them to fill in the result array, whereas
+@code{asorti()} takes the @emph{indices} in their final order and uses
them to fill in the result array.
@cindex reference counting, sorting arrays
@@ -27682,7 +27590,6 @@ using regular pipes.
@section Using @command{gawk} for Network Programming
@cindex advanced features, network programming
@cindex networks, programming
-@c STARTOFRANGE tcpip
@cindex TCP/IP
@cindex @code{/inet/@dots{}} special files (@command{gawk})
@cindex files, @code{/inet/@dots{}} (@command{gawk})
@@ -27764,7 +27671,7 @@ service name.
@cindex @command{gawk}, @code{ERRNO} variable in
@cindex @code{ERRNO} variable
@quotation NOTE
-Failure in opening a two-way socket will result in a non-fatal error
+Failure in opening a two-way socket will result in a nonfatal error
being returned to the calling code. The value of @code{ERRNO} indicates
the error (@pxref{Auto-set}).
@end quotation
@@ -27781,31 +27688,28 @@ BEGIN @{
@end example
This program reads the current date and time from the local system's
-TCP @samp{daytime} server.
+TCP @code{daytime} server.
It then prints the results and closes the connection.
Because this topic is extensive, the use of @command{gawk} for
TCP/IP programming is documented separately.
@ifinfo
See
-@inforef{Top, , General Introduction, gawkinet, TCP/IP Internetworking with @command{gawk}},
+@inforef{Top, , General Introduction, gawkinet, @value{GAWKINETTITLE}},
@end ifinfo
@ifnotinfo
See
@uref{http://www.gnu.org/software/gawk/manual/gawkinet/,
-@cite{TCP/IP Internetworking with @command{gawk}}},
+@cite{@value{GAWKINETTITLE}}},
which comes as part of the @command{gawk} distribution,
@end ifnotinfo
for a much more complete introduction and discussion, as well as
extensive examples.
-@c ENDOFRANGE tcpip
@node Profiling
@section Profiling Your @command{awk} Programs
-@c STARTOFRANGE awkp
@cindex @command{awk} programs, profiling
-@c STARTOFRANGE proawk
@cindex profiling @command{awk} programs
@cindex @code{awkprof.out} file
@cindex files, @code{awkprof.out}
@@ -27872,9 +27776,9 @@ junk
@end example
Here is the @file{awkprof.out} that results from running the
-@command{gawk} profiler on this program and data. (This example also
+@command{gawk} profiler on this program and data (this example also
illustrates that @command{awk} programmers sometimes get up very early
-in the morning to work.)
+in the morning to work):
@cindex @code{BEGIN} pattern, and profiling
@cindex @code{END} pattern, and profiling
@@ -27934,8 +27838,8 @@ They are as follows:
@item
The program is printed in the order @code{BEGIN} rules,
@code{BEGINFILE} rules,
-pattern/action rules,
-@code{ENDFILE} rules, @code{END} rules and functions, listed
+pattern--action rules,
+@code{ENDFILE} rules, @code{END} rules, and functions, listed
alphabetically.
Multiple @code{BEGIN} and @code{END} rules retain their
separate identities, as do
@@ -27943,7 +27847,7 @@ multiple @code{BEGINFILE} and @code{ENDFILE} rules.
@cindex patterns, counts, in a profile
@item
-Pattern-action rules have two counts.
+Pattern--action rules have two counts.
The first count, to the left of the rule, shows how many times
the rule's pattern was @emph{tested}.
The second count, to the right of the rule's opening left brace
@@ -28010,13 +27914,13 @@ the target of a redirection isn't a scalar, it gets parenthesized.
@command{gawk} supplies leading comments in
front of the @code{BEGIN} and @code{END} rules,
the @code{BEGINFILE} and @code{ENDFILE} rules,
-the pattern/action rules, and the functions.
+the pattern--action rules, and the functions.
@end itemize
The profiled version of your program may not look exactly like what you
typed when you wrote it. This is because @command{gawk} creates the
-profiled version by ``pretty printing'' its internal representation of
+profiled version by ``pretty-printing'' its internal representation of
the program. The advantage to this is that @command{gawk} can produce
a standard representation.
Also, things such as:
@@ -28099,16 +28003,16 @@ If you use the @code{HUP} signal instead of the @code{USR1} signal,
@cindex @code{SIGQUIT} signal (MS-Windows)
@cindex signals, @code{QUIT}/@code{SIGQUIT} (MS-Windows)
When @command{gawk} runs on MS-Windows systems, it uses the
-@code{INT} and @code{QUIT} signals for producing the profile and, in
+@code{INT} and @code{QUIT} signals for producing the profile, and in
the case of the @code{INT} signal, @command{gawk} exits. This is
because these systems don't support the @command{kill} command, so the
only signals you can deliver to a program are those generated by the
keyboard. The @code{INT} signal is generated by the
-@kbd{Ctrl-@key{C}} or @kbd{Ctrl-@key{BREAK}} key, while the
-@code{QUIT} signal is generated by the @kbd{Ctrl-@key{\}} key.
+@kbd{Ctrl-c} or @kbd{Ctrl-BREAK} key, while the
+@code{QUIT} signal is generated by the @kbd{Ctrl-\} key.
Finally, @command{gawk} also accepts another option, @option{--pretty-print}.
-When called this way, @command{gawk} ``pretty prints'' the program into
+When called this way, @command{gawk} ``pretty-prints'' the program into
@file{awkprof.out}, without any execution counts.
@quotation NOTE
@@ -28132,9 +28036,6 @@ that the profiling output does. This makes it easy to pretty-print your
code once development is completed, and then use the result as the final
version of your program.
-@c ENDOFRANGE awkp
-@c ENDOFRANGE proawk
-
@node Advanced Features Summary
@section Summary
@@ -28165,7 +28066,7 @@ optionally, close off one side of the two-way communications.
@item
By using special @value{FN}s with the @samp{|&} operator, you can open a
-TCP/IP (or UDP/IP) connection to remote hosts in the Internet. @command{gawk}
+TCP/IP (or UDP/IP) connection to remote hosts on the Internet. @command{gawk}
supports both IPv4 and IPv6.
@item
@@ -28175,13 +28076,11 @@ you tune them more easily. Sending the @code{USR1} signal while profiling cause
@command{gawk} to dump the profile and keep going, including a function call stack.
@item
-You can also just ``pretty print'' the program. This currently also runs
+You can also just ``pretty-print'' the program. This currently also runs
the program, but that will change in the next major release.
@end itemize
-@c ENDOFRANGE advgaw
-@c ENDOFRANGE gawadv
@node Internationalization
@chapter Internationalization with @command{gawk}
@@ -28194,7 +28093,6 @@ countries, they were able to sell more systems.
As a result, internationalization and localization
of programs and software systems became a common practice.
-@c STARTOFRANGE inloc
@cindex internationalization, localization
@cindex @command{gawk}, internationalization and, See internationalization
@cindex internationalization, localization, @command{gawk} and
@@ -28227,7 +28125,7 @@ a requirement.
@cindex localization
@dfn{Internationalization} means writing (or modifying) a program once,
in such a way that it can use multiple languages without requiring
-further source-code changes.
+further source code changes.
@dfn{Localization} means providing the data necessary for an
internationalized program to work in a particular language.
Most typically, these terms refer to features such as the language
@@ -28239,11 +28137,10 @@ monetary values are printed and read.
@section GNU @command{gettext}
@cindex internationalizing a program
-@c STARTOFRANGE gettex
@cindex @command{gettext} library
@command{gawk} uses GNU @command{gettext} to provide its internationalization
features.
-The facilities in GNU @command{gettext} focus on messages; strings printed
+The facilities in GNU @command{gettext} focus on messages: strings printed
by a program, either directly or via formatting with @code{printf} or
@code{sprintf()}.@footnote{For some operating systems, the @command{gawk}
port doesn't support GNU @command{gettext}.
@@ -28291,7 +28188,6 @@ lookup of the translations.
@cindex @code{.po} files
@cindex files, @code{.po}
-@c STARTOFRANGE portobfi
@cindex portable object files
@cindex files, portable object
@item
@@ -28303,7 +28199,6 @@ For example, there might be a @file{fr.po} for a French translation.
@cindex @code{.gmo} files
@cindex files, @code{.gmo}
@cindex message object files
-@c STARTOFRANGE portmsgfi
@cindex files, message object
@item
Each language's @file{.po} file is converted into a binary
@@ -28431,14 +28326,12 @@ before or after the day in a date, local month abbreviations, and so on.
@item LC_ALL
All of the above. (Not too useful in the context of @command{gettext}.)
@end table
-@c ENDOFRANGE gettex
@node Programmer i18n
@section Internationalizing @command{awk} Programs
-@c STARTOFRANGE inap
@cindex @command{awk} programs, internationalizing
-@command{gawk} provides the following variables and functions for
+@command{gawk} provides the following variables for
internationalization:
@table @code
@@ -28454,7 +28347,12 @@ value is @code{"messages"}.
String constants marked with a leading underscore
are candidates for translation at runtime.
String constants without a leading underscore are not translated.
+@end table
+
+@command{gawk} provides the following functions for
+internationalization:
+@table @code
@cindexgawkfunc{dcgettext}
@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category}]]@code{)}
Return the translation of @var{string} in
@@ -28511,15 +28409,7 @@ If @var{directory} is the null string (@code{""}), then
given @var{domain}.
@end table
-To use these facilities in your @command{awk} program, follow the steps
-outlined in
-@ifnotinfo
-the previous @value{SECTION},
-@end ifnotinfo
-@ifinfo
-@ref{Explaining gettext},
-@end ifinfo
-like so:
+To use these facilities in your @command{awk} program, follow these steps:
@enumerate
@cindex @code{BEGIN} pattern, @code{TEXTDOMAIN} variable and
@@ -28668,8 +28558,6 @@ to provide you translations that you can also then distribute.
@DBXREF{I18N Example}
for the full list of steps to go through to create and test
translations for @command{guide}.
-@c ENDOFRANGE portobfi
-@c ENDOFRANGE portmsgfi
@node Printf Ordering
@subsection Rearranging @code{printf} Arguments
@@ -28804,7 +28692,7 @@ the null string (@code{""}) as its value, leaving the original string constant a
the result.
@item
-By defining ``dummy'' functions to replace @code{dcgettext()}, @code{dcngettext()}
+By defining ``dummy'' functions to replace @code{dcgettext()}, @code{dcngettext()},
and @code{bindtextdomain()}, the @command{awk} program can be made to run, but
all the messages are output in the original language.
For example:
@@ -28845,7 +28733,6 @@ However, because the positional specifications are primarily for use in
@emph{translated} format strings, and because non-GNU @command{awk}s never
retrieve the translated string, this should not be a problem in practice.
@end itemize
-@c ENDOFRANGE inap
@node I18N Example
@section A Simple Internationalization Example
@@ -28989,15 +28876,15 @@ using the GNU @command{gettext} package.
(GNU @command{gettext} is described in
complete detail in
@ifinfo
-@inforef{Top, , GNU @command{gettext} utilities, gettext, GNU gettext tools}.)
+@inforef{Top, , GNU @command{gettext} utilities, gettext, GNU @command{gettext} utilities}.)
@end ifinfo
@ifnotinfo
@uref{http://www.gnu.org/software/gettext/manual/,
-@cite{GNU gettext tools}}.)
+@cite{GNU @command{gettext} utilities}}.)
@end ifnotinfo
As of this writing, the latest version of GNU @command{gettext} is
-@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.3.tar.gz,
-@value{PVERSION} 0.19.3}.
+@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.4.tar.gz,
+@value{PVERSION} 0.19.4}.
If a translation of @command{gawk}'s messages exists,
then @command{gawk} produces usage messages, warnings,
@@ -29009,7 +28896,7 @@ and fatal errors in the local language.
@itemize @value{BULLET}
@item
Internationalization means writing a program such that it can use multiple
-languages without requiring source-code changes. Localization means
+languages without requiring source code changes. Localization means
providing the data necessary for an internationalized program to work
in a particular language.
@@ -29026,9 +28913,9 @@ file, and the @file{.po} files are compiled into @file{.gmo} files for
use at runtime.
@item
-You can use position specifications with @code{sprintf()} and
+You can use positional specifications with @code{sprintf()} and
@code{printf} to rearrange the placement of argument values in formatted
-strings and output. This is useful for the translations of format
+strings and output. This is useful for the translation of format
control strings.
@item
@@ -29041,7 +28928,6 @@ a number of translations for its messages.
@end itemize
-@c ENDOFRANGE inloc
@node Debugger
@chapter Debugging @command{awk} Programs
@@ -29085,8 +28971,7 @@ the discussion of debugging in @command{gawk}.
@subsection Debugging in General
(If you have used debuggers in other languages, you may want to skip
-ahead to the next section on the specific features of the @command{gawk}
-debugger.)
+ahead to @ref{Awk Debugging}.)
Of course, a debugging program cannot remove bugs for you, because it has
no way of knowing what you or your users consider a ``bug'' versus a
@@ -29177,10 +29062,10 @@ and usually find the errant code quite quickly.
@end table
@node Awk Debugging
-@subsection Awk Debugging
+@subsection @command{awk} Debugging
Debugging an @command{awk} program has some specific aspects that are
-not shared with other programming languages.
+not shared with programs written in other languages.
First of all, the fact that @command{awk} programs usually take input
line by line from a file or files and operate on those lines using specific
@@ -29196,7 +29081,7 @@ to look at the individual primitive instructions carried out
by the higher-level @command{awk} commands.
@node Sample Debugging Session
-@section Sample Debugging Session
+@section Sample @command{gawk} Debugging Session
@cindex sample debugging session
In order to illustrate the use of @command{gawk} as a debugger, let's look at a sample
@@ -29215,8 +29100,8 @@ as our example.
@cindex debugger, how to start
Starting the debugger is almost exactly like running @command{gawk} normally,
-except you have to pass an additional option @option{--debug}, or the
-corresponding short option @option{-D}. The file(s) containing the
+except you have to pass an additional option, @option{--debug}, or the
+corresponding short option, @option{-D}. The file(s) containing the
program and any supporting code are given on the command line as arguments
to one or more @option{-f} options. (@command{gawk} is not designed
to debug command-line programs, only programs contained in files.)
@@ -29229,7 +29114,7 @@ $ @kbd{gawk -D -f getopt.awk -f join.awk -f uniq.awk -1 inputfile}
@noindent
where both @file{getopt.awk} and @file{uniq.awk} are in @env{$AWKPATH}.
(Experienced users of GDB or similar debuggers should note that
-this syntax is slightly different from what they are used to.
+this syntax is slightly different from what you are used to.
With the @command{gawk} debugger, you give the arguments for running the program
in the command line to the debugger rather than as part of the @code{run}
command at the debugger prompt.)
@@ -29383,10 +29268,10 @@ gawk> @kbd{n}
@end example
This tells us that @command{gawk} is now ready to execute line 66, which
-decides whether to give the lines the special ``field skipping'' treatment
+decides whether to give the lines the special ``field-skipping'' treatment
indicated by the @option{-1} command-line option. (Notice that we skipped
-from where we were before at line 63 to here, because the condition in line 63
-@samp{if (fcount == 0 && charcount == 0)} was false.)
+from where we were before, at line 63, to here, because the condition
+in line 63, @samp{if (fcount == 0 && charcount == 0)}, was false.)
Continuing to step, we now get to the splitting of the current and
last records:
@@ -29460,7 +29345,7 @@ gawk> @kbd{n}
Well, here we are at our error (sorry to spoil the suspense). What we
had in mind was to join the fields starting from the second one to make
-the virtual record to compare, and if the first field was numbered zero,
+the virtual record to compare, and if the first field were numbered zero,
this would work. Let's look at what we've got:
@example
@@ -29469,7 +29354,7 @@ gawk> @kbd{p cline clast}
@print{} clast = "awk is a wonderful program!"
@end example
-Hey, those look pretty familiar! They're just our original, unaltered,
+Hey, those look pretty familiar! They're just our original, unaltered
input records. A little thinking (the human brain is still the best
debugging tool), and we realize that we were off by one!
@@ -29519,11 +29404,11 @@ Miscellaneous
@end itemize
Each of these are discussed in the following subsections.
-In the following descriptions, commands which may be abbreviated
+In the following descriptions, commands that may be abbreviated
show the abbreviation on a second description line.
A debugger command name may also be truncated if that partial
name is unambiguous. The debugger has the built-in capability to
-automatically repeat the previous command just by hitting @key{Enter}.
+automatically repeat the previous command just by hitting @kbd{Enter}.
This works for the commands @code{list}, @code{next}, @code{nexti},
@code{step}, @code{stepi}, and @code{continue} executed without any
argument.
@@ -29573,7 +29458,7 @@ Set a breakpoint at entry to (the first instruction of)
function @var{function}.
@end table
-Each breakpoint is assigned a number which can be used to delete it from
+Each breakpoint is assigned a number that can be used to delete it from
the breakpoint list using the @code{delete} command.
With a breakpoint, you may also supply a condition. This is an
@@ -29625,7 +29510,7 @@ watchpoint is made unconditional).
@cindex breakpoint, delete by number
@item @code{delete} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
@itemx @code{d} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
-Delete specified breakpoints or a range of breakpoints. Deletes
+Delete specified breakpoints or a range of breakpoints. Delete
all defined breakpoints if no argument is supplied.
@cindex debugger commands, @code{disable}
@@ -29634,7 +29519,7 @@ all defined breakpoints if no argument is supplied.
@cindex breakpoint, how to disable or enable
@item @code{disable} [@var{n1 n2} @dots{} | @var{n}--@var{m}]
Disable specified breakpoints or a range of breakpoints. Without
-any argument, disables all breakpoints.
+any argument, disable all breakpoints.
@cindex debugger commands, @code{e} (@code{enable})
@cindex debugger commands, @code{enable}
@@ -29644,18 +29529,18 @@ any argument, disables all breakpoints.
@item @code{enable} [@code{del} | @code{once}] [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
@itemx @code{e} [@code{del} | @code{once}] [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
Enable specified breakpoints or a range of breakpoints. Without
-any argument, enables all breakpoints.
-Optionally, you can specify how to enable the breakpoint:
+any argument, enable all breakpoints.
+Optionally, you can specify how to enable the breakpoints:
@c nested table
@table @code
@item del
-Enable the breakpoint(s) temporarily, then delete it when
-the program stops at the breakpoint.
+Enable the breakpoints temporarily, then delete each one when
+the program stops at it.
@item once
-Enable the breakpoint(s) temporarily, then disable it when
-the program stops at the breakpoint.
+Enable the breakpoints temporarily, then disable each one when
+the program stops at it.
@end table
@cindex debugger commands, @code{ignore}
@@ -29723,7 +29608,7 @@ gawk>
@item @code{continue} [@var{count}]
@itemx @code{c} [@var{count}]
Resume program execution. If continued from a breakpoint and @var{count} is
-specified, ignores the breakpoint at that location the next @var{count} times
+specified, ignore the breakpoint at that location the next @var{count} times
before stopping.
@cindex debugger commands, @code{finish}
@@ -29777,7 +29662,7 @@ automatic display variables, and debugger options.
@item @code{step} [@var{count}]
@itemx @code{s} [@var{count}]
Continue execution until control reaches a different source line in the
-current stack frame. @code{step} steps inside any function called within
+current stack frame, stepping inside any function called within
the line. If the argument @var{count} is supplied, steps that many times before
stopping, unless it encounters a breakpoint or watchpoint.
@@ -29890,7 +29775,7 @@ or field.
String values must be enclosed between double quotes (@code{"}@dots{}@code{"}).
You can also set special @command{awk} variables, such as @code{FS},
-@code{NF}, @code{NR}, and son on.
+@code{NF}, @code{NR}, and so on.
@cindex debugger commands, @code{w} (@code{watch})
@cindex debugger commands, @code{watch}
@@ -29902,7 +29787,7 @@ You can also set special @command{awk} variables, such as @code{FS},
Add variable @var{var} (or field @code{$@var{n}}) to the watch list.
The debugger then stops whenever
the value of the variable or field changes. Each watched item is assigned a
-number which can be used to delete it from the watch list using the
+number that can be used to delete it from the watch list using the
@code{unwatch} command.
With a watchpoint, you may also supply a condition. This is an
@@ -29930,11 +29815,11 @@ watch list.
@node Execution Stack
@subsection Working with the Stack
-Whenever you run a program which contains any function calls,
+Whenever you run a program that contains any function calls,
@command{gawk} maintains a stack of all of the function calls leading up
to where the program is right now. You can see how you got to where you are,
and also move around in the stack to see what the state of things was in the
-functions which called the one you are in. The commands for doing this are:
+functions that called the one you are in. The commands for doing this are:
@table @asis
@cindex debugger commands, @code{bt} (@code{backtrace})
@@ -29969,8 +29854,8 @@ Then select and print the frame.
@item @code{frame} [@var{n}]
@itemx @code{f} [@var{n}]
Select and print stack frame @var{n}. Frame 0 is the currently executing,
-or @dfn{innermost}, frame (function call), frame 1 is the frame that
-called the innermost one. The highest numbered frame is the one for the
+or @dfn{innermost}, frame (function call); frame 1 is the frame that
+called the innermost one. The highest-numbered frame is the one for the
main program. The printed information consists of the frame number,
function and argument names, source file, and the source line.
@@ -29986,7 +29871,7 @@ Then select and print the frame.
Besides looking at the values of variables, there is often a need to get
other sorts of information about the state of your program and of the
-debugging environment itself. The @command{gawk} debugger has one command which
+debugging environment itself. The @command{gawk} debugger has one command that
provides this information, appropriately called @code{info}. @code{info}
is used with one of a number of arguments that tell it exactly what
you want to know:
@@ -30074,12 +29959,12 @@ The available options are:
@table @asis
@item @code{history_size}
@cindex debugger history size
-The maximum number of lines to keep in the history file @file{./.gawk_history}.
-The default is 100.
+Set the maximum number of lines to keep in the history file
+@file{./.gawk_history}. The default is 100.
@item @code{listsize}
@cindex debugger default list amount
-The number of lines that @code{list} prints. The default is 15.
+Specify the number of lines that @code{list} prints. The default is 15.
@item @code{outfile}
@cindex redirect @command{gawk} output, in debugger
@@ -30089,7 +29974,7 @@ standard output.
@item @code{prompt}
@cindex debugger prompt
-The debugger prompt. The default is @samp{@w{gawk> }}.
+Change the debugger prompt. The default is @samp{@w{gawk> }}.
@item @code{save_history} [@code{on} | @code{off}]
@cindex debugger history file
@@ -30100,7 +29985,7 @@ The default is @code{on}.
@cindex save debugger options
Save current options to file @file{./.gawkrc} upon exit.
The default is @code{on}.
-Options are read back in to the next session upon startup.
+Options are read back into the next session upon startup.
@item @code{trace} [@code{on} | @code{off}]
@cindex instruction tracing, in debugger
@@ -30123,7 +30008,7 @@ command in the file. Also, the list of commands may include additional
@code{source} commands; however, the @command{gawk} debugger will not source the
same file more than once in order to avoid infinite recursion.
-In addition to, or instead of the @code{source} command, you can use
+In addition to, or instead of, the @code{source} command, you can use
the @option{-D @var{file}} or @option{--debug=@var{file}} command-line
options to execute commands from a file non-interactively
(@pxref{Options}).
@@ -30132,16 +30017,16 @@ options to execute commands from a file non-interactively
@node Miscellaneous Debugger Commands
@subsection Miscellaneous Commands
-There are a few more commands which do not fit into the
+There are a few more commands that do not fit into the
previous categories, as follows:
@table @asis
@cindex debugger commands, @code{dump}
@cindex @code{dump} debugger command
@item @code{dump} [@var{filename}]
-Dump bytecode of the program to standard output or to the file
+Dump byte code of the program to standard output or to the file
named in @var{filename}. This prints a representation of the internal
-instructions which @command{gawk} executes to implement the @command{awk}
+instructions that @command{gawk} executes to implement the @command{awk}
commands in a program. This can be very enlightening, as the following
partial dump of Davide Brini's obfuscated code
(@pxref{Signature Program}) demonstrates:
@@ -30238,7 +30123,7 @@ Print lines centered around line number @var{n} in
source file @var{filename}. This command may change the current source file.
@item @var{function}
-Print lines centered around beginning of the
+Print lines centered around the beginning of the
function @var{function}. This command may change the current source file.
@end table
@@ -30250,16 +30135,16 @@ function @var{function}. This command may change the current source file.
@item @code{quit}
@itemx @code{q}
Exit the debugger. Debugging is great fun, but sometimes we all have
-to tend to other obligations in life, and sometimes we find the bug,
+to tend to other obligations in life, and sometimes we find the bug
and are free to go on to the next one! As we saw earlier, if you are
-running a program, the debugger warns you if you accidentally type
+running a program, the debugger warns you when you type
@samp{q} or @samp{quit}, to make sure you really want to quit.
@cindex debugger commands, @code{trace}
@cindex @code{trace} debugger command
@item @code{trace} [@code{on} | @code{off}]
-Turn on or off a continuous printing of instructions which are about to
-be executed, along with printing the @command{awk} line which they
+Turn on or off continuous printing of the instructions that are about to
+be executed, along with the @command{awk} lines they
implement. The default is @code{off}.
It is to be hoped that most of the ``opcodes'' in these instructions are
@@ -30275,7 +30160,7 @@ fairly self-explanatory, and using @code{stepi} and @code{nexti} while
If @command{gawk} is compiled with
@uref{http://cnswww.cns.cwru.edu/php/chet/readline/readline.html,
-the @code{readline} library}, you can take advantage of that library's
+the GNU Readline library}, you can take advantage of that library's
command completion and history expansion features. The following types
of completion are available:
@@ -30312,7 +30197,7 @@ and
We hope you find the @command{gawk} debugger useful and enjoyable to work with,
but as with any program, especially in its early releases, it still has
-some limitations. A few which are worth being aware of are:
+some limitations. A few that it's worth being aware of are:
@itemize @value{BULLET}
@item
@@ -30328,13 +30213,13 @@ If you perused the dump of opcodes in @ref{Miscellaneous Debugger Commands}
(or if you are already familiar with @command{gawk} internals),
you will realize that much of the internal manipulation of data
in @command{gawk}, as in many interpreters, is done on a stack.
-@code{Op_push}, @code{Op_pop}, and the like, are the ``bread and butter'' of
+@code{Op_push}, @code{Op_pop}, and the like are the ``bread and butter'' of
most @command{gawk} code.
Unfortunately, as of now, the @command{gawk}
debugger does not allow you to examine the stack's contents.
That is, the intermediate results of expression evaluation are on the
-stack, but cannot be printed. Rather, only variables which are defined
+stack, but cannot be printed. Rather, only variables that are defined
in the program can be printed. Of course, a workaround for
this is to use more explicit variables at the debugging stage and then
change back to obscure, perhaps more optimal code later.
@@ -30348,12 +30233,12 @@ programmer, you are expected to know the meaning of
@item
The @command{gawk} debugger is designed to be used by running a program (with all its
parameters) on the command line, as described in @ref{Debugger Invocation}.
-There is no way (as of now) to attach or ``break in'' to a running program.
-This seems reasonable for a language which is used mainly for quickly
+There is no way (as of now) to attach or ``break into'' a running program.
+This seems reasonable for a language that is used mainly for quickly
executing, short programs.
@item
-The @command{gawk} debugger only accepts source supplied with the @option{-f} option.
+The @command{gawk} debugger only accepts source code supplied with the @option{-f} option.
@end itemize
@ignore
@@ -30367,8 +30252,8 @@ be added, and of course feel free to try to add them yourself!
@itemize @value{BULLET}
@item
Programs rarely work correctly the first time. Finding bugs
-is @dfn{debugging} and a program that helps you find bugs is a
-@dfn{debugger}. @command{gawk} has a built-in debugger that works very
+is called debugging, and a program that helps you find bugs is a
+debugger. @command{gawk} has a built-in debugger that works very
similarly to the GNU Debugger, GDB.
@item
@@ -30388,7 +30273,7 @@ breakpoints, execution, viewing and changing data, working with the stack,
getting information, and other tasks.
@item
-If the @code{readline} library is available when @command{gawk} is
+If the GNU Readline library is available when @command{gawk} is
compiled, it is used by the debugger to provide command-line history
and editing.
@@ -30452,7 +30337,7 @@ paper and pencil (and/or a calculator). In theory, numbers can have an
arbitrary number of digits on either side (or both sides) of the decimal
point, and the results of a computation are always exact.
-Some modern system can do decimal arithmetic in hardware, but usually you
+Some modern systems can do decimal arithmetic in hardware, but usually you
need a special software library to provide access to these instructions.
There are also libraries that do decimal arithmetic entirely in software.
@@ -30470,8 +30355,8 @@ The disadvantage is that their range is limited.
@cindex integers, unsigned
In computers, integer values come in two flavors: @dfn{signed} and
@dfn{unsigned}. Signed values may be negative or positive, whereas
-unsigned values are always positive (i.e., greater than or equal
-to zero).
+unsigned values are always greater than or equal
+to zero.
In computer systems, integer arithmetic is exact, but the possible
range of values is limited. Integer arithmetic is generally faster than
@@ -30508,8 +30393,35 @@ signed. The possible ranges of values are shown in @ref{table-numeric-ranges}.
@item 32-bit unsigned integer @tab 0 @tab 4,294,967,295
@item 64-bit signed integer @tab @minus{}9,223,372,036,854,775,808 @tab 9,223,372,036,854,775,807
@item 64-bit unsigned integer @tab 0 @tab 18,446,744,073,709,551,615
-@item Single-precision floating point (approximate) @tab @code{1.175494e-38} @tab @code{3.402823e+38}
-@item Double-precision floating point (approximate) @tab @code{2.225074e-308} @tab @code{1.797693e+308}
+@iftex
+@item Single-precision floating point (approximate) @tab @math{1.175494^{-38}} @tab @math{3.402823^{38}}
+@item Double-precision floating point (approximate) @tab @math{2.225074^{-308}} @tab @math{1.797693^{308}}
+@end iftex
+@ifnottex
+@ifnotdocbook
+@item Single-precision floating point (approximate) @tab 1.175494e-38 @tab 3.402823e38
+@item Double-precision floating point (approximate) @tab 2.225074e-308 @tab 1.797693e308
+@end ifnotdocbook
+@end ifnottex
+@ifdocbook
+@item Single-precision floating point (approximate) @tab
+@c FIXME: Use @sup here for superscript
+@docbook
+1.175494<superscript>-38</superscript>
+@end docbook
+@tab
+@docbook
+3.402823<superscript>38</superscript>
+@end docbook
+@item Double-precision floating point (approximate) @tab
+@docbook
+2.225074<superscript>-308</superscript>
+@end docbook
+@tab
+@docbook
+1.797693<superscript>308</superscript>
+@end docbook
+@end ifdocbook
@end multitable
@end float
@@ -30518,7 +30430,7 @@ signed. The possible ranges of values are shown in @ref{table-numeric-ranges}.
The rest of this @value{CHAPTER} uses a number of terms. Here are some
informal definitions that should help you work your way through the material
-here.
+here:
@table @dfn
@item Accuracy
@@ -30539,7 +30451,7 @@ A special value representing infinity. Operations involving another
number and infinity produce infinity.
@item NaN
-``Not A Number.''@footnote{Thanks to Michael Brennan for this description,
+``Not a number.''@footnote{Thanks to Michael Brennan for this description,
which we have paraphrased, and for the examples.} A special value that
results from attempting a calculation that has no answer as a real number.
In such a case, programs can either receive a floating-point exception,
@@ -30582,8 +30494,8 @@ formula:
@end display
@noindent
-Here, @var{prec} denotes the binary precision
-(measured in bits) and @var{dps} (short for decimal places)
+Here, @emph{prec} denotes the binary precision
+(measured in bits) and @emph{dps} (short for decimal places)
is the decimal digits.
@item Rounding mode
@@ -30591,7 +30503,7 @@ How numbers are rounded up or down when necessary.
More details are provided later.
@item Significand
-A floating-point value consists the significand multiplied by 10
+A floating-point value consists of the significand multiplied by 10
to the power of the exponent. For example, in @code{1.2345e67},
the significand is @code{1.2345}.
@@ -30615,7 +30527,7 @@ to allow greater precisions and larger exponent ranges.
(@command{awk} uses only the 64-bit double-precision format.)
@ref{table-ieee-formats} lists the precision and exponent
-field values for the basic IEEE 754 binary formats:
+field values for the basic IEEE 754 binary formats.
@float Table,table-ieee-formats
@caption{Basic IEEE format values}
@@ -30645,7 +30557,7 @@ is available like so:
@example
$ @kbd{gawk --version}
@print{} GNU Awk 4.1.2, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2)
-@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation.
+@print{} Copyright (C) 1989, 1991-2015 Free Software Foundation.
@dots{}
@end example
@@ -30679,12 +30591,12 @@ for more information.
@author Teen Talk Barbie, July 1992
@end quotation
-This @value{SECTION} provides a high level overview of the issues
+This @value{SECTION} provides a high-level overview of the issues
involved when doing lots of floating-point arithmetic.@footnote{There
is a very nice @uref{http://www.validlab.com/goldberg/paper.pdf,
paper on floating-point arithmetic} by David Goldberg, ``What Every
-Computer Scientist Should Know About Floating-point Arithmetic,''
-@cite{ACM Computing Surveys} @strong{23}, 1 (1991-03), 5-48. This is
+Computer Scientist Should Know About Floating-Point Arithmetic,''
+@cite{ACM Computing Surveys} @strong{23}, 1 (1991-03): 5-48. This is
worth reading if you are interested in the details, but it does require
a background in computer science.}
The discussion applies to both hardware and arbitrary-precision
@@ -30753,7 +30665,7 @@ $ @kbd{gawk 'BEGIN @{ x = 0.875; y = 0.425}
Often the error is so small you do not even notice it, and if you do,
you can always specify how much precision you would like in your output.
-Usually this is a format string like @code{"%.15g"}, which when
+Usually this is a format string like @code{"%.15g"}, which, when
used in the previous example, produces an output identical to the input.
@node Comparing FP Values
@@ -30792,7 +30704,7 @@ else
The loss of accuracy during a single computation with floating-point
numbers usually isn't enough to worry about. However, if you compute a
-value which is the result of a sequence of floating-point operations,
+value that is the result of a sequence of floating-point operations,
the error can accumulate and greatly affect the computation itself.
Here is an attempt to compute the value of @value{PI} using one of its
many series representations:
@@ -30845,7 +30757,7 @@ no easy answers. The standard rules of algebra often do not apply
when using floating-point arithmetic.
Among other things, the distributive and associative laws
do not hold completely, and order of operation may be important
-for your computation. Rounding error, cumulative precision loss
+for your computation. Rounding error, cumulative precision loss,
and underflow are often troublesome.
When @command{gawk} tests the expressions @samp{0.1 + 12.2} and
@@ -30885,7 +30797,8 @@ by our earlier attempt to compute the value of @value{PI}.
Extra precision can greatly enhance the stability and the accuracy
of your computation in such cases.
-Repeated addition is not necessarily equivalent to multiplication
+Additionally, you should understand that
+repeated addition is not necessarily equivalent to multiplication
in floating-point arithmetic. In the example in
@ref{Errors accumulate}:
@@ -30948,7 +30861,7 @@ to emulate an IEEE 754 binary format.
@float Table,table-predefined-precision-strings
@caption{Predefined precision strings for @code{PREC}}
@multitable {@code{"double"}} {12345678901234567890123456789012345}
-@headitem @code{PREC} @tab IEEE 754 Binary Format
+@headitem @code{PREC} @tab IEEE 754 binary format
@item @code{"half"} @tab 16-bit half-precision
@item @code{"single"} @tab Basic 32-bit single precision
@item @code{"double"} @tab Basic 64-bit double precision
@@ -30980,7 +30893,6 @@ than the default and cannot use a command-line assignment to @code{PREC},
you should either specify the constant as a string, or as a rational
number, whenever possible. The following example illustrates the
differences among various ways to print a floating-point constant:
-@end quotation
@example
$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 0.1) @}'}
@@ -30992,22 +30904,23 @@ $ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", "0.1") @}'}
$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'}
@print{} 0.1000000000000000000000000
@end example
+@end quotation
@node Setting the rounding mode
@subsection Setting the Rounding Mode
The @code{ROUNDMODE} variable provides
-program level control over the rounding mode.
+program-level control over the rounding mode.
The correspondence between @code{ROUNDMODE} and the IEEE
rounding modes is shown in @ref{table-gawk-rounding-modes}.
@float Table,table-gawk-rounding-modes
@caption{@command{gawk} rounding modes}
@multitable @columnfractions .45 .30 .25
-@headitem Rounding Mode @tab IEEE Name @tab @code{ROUNDMODE}
+@headitem Rounding mode @tab IEEE name @tab @code{ROUNDMODE}
@item Round to nearest, ties to even @tab @code{roundTiesToEven} @tab @code{"N"} or @code{"n"}
-@item Round toward plus Infinity @tab @code{roundTowardPositive} @tab @code{"U"} or @code{"u"}
-@item Round toward negative Infinity @tab @code{roundTowardNegative} @tab @code{"D"} or @code{"d"}
+@item Round toward positive infinity @tab @code{roundTowardPositive} @tab @code{"U"} or @code{"u"}
+@item Round toward negative infinity @tab @code{roundTowardNegative} @tab @code{"D"} or @code{"d"}
@item Round toward zero @tab @code{roundTowardZero} @tab @code{"Z"} or @code{"z"}
@item Round to nearest, ties away from zero @tab @code{roundTiesToAway} @tab @code{"A"} or @code{"a"}
@end multitable
@@ -31068,8 +30981,8 @@ distributes upward and downward rounds of exact halves, which might
cause any accumulating round-off error to cancel itself out. This is the
default rounding mode for IEEE 754 computing functions and operators.
-The other rounding modes are rarely used. Round toward positive infinity
-(@code{roundTowardPositive}) and round toward negative infinity
+The other rounding modes are rarely used. Rounding toward positive infinity
+(@code{roundTowardPositive}) and toward negative infinity
(@code{roundTowardNegative}) are often used to implement interval
arithmetic, where you adjust the rounding mode to calculate upper and
lower bounds for the range of output. The @code{roundTowardZero} mode can
@@ -31111,6 +31024,7 @@ the following computes
@end docbook
the result of which is beyond the
limits of ordinary hardware double-precision floating-point values:
+@c FIXME: Use @sup here for superscript
@example
$ @kbd{gawk -M 'BEGIN @{}
@@ -31126,17 +31040,17 @@ If instead you were to compute the same value using arbitrary-precision
floating-point values, the precision needed for correct output (using
the formula
@iftex
-@math{prec = 3.322 @cdot dps}),
+@math{prec = 3.322 @cdot dps})
would be @math{3.322 @cdot 183231},
@end iftex
@ifnottex
@ifnotdocbook
-@samp{prec = 3.322 * dps}),
+@samp{prec = 3.322 * dps})
would be 3.322 x 183231,
@end ifnotdocbook
@end ifnottex
@docbook
-<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>),
+<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>)
would be
<emphasis>prec</emphasis> = 3.322 &sdot; 183231, @c
@end docbook
@@ -31174,7 +31088,7 @@ interface to process arbitrary-precision integers or mixed-mode numbers
as needed by an operation or function. In such a case, the precision is
set to the minimum value necessary for exact conversion, and the working
precision is not used for this purpose. If this is not what you need or
-want, you can employ a subterfuge, and convert the integer to floating
+want, you can employ a subterfuge and convert the integer to floating
point first, like this:
@example
@@ -31200,27 +31114,30 @@ When dividing two arbitrary precision integers with either
precision floating point value (unless the denominator evenly
divides into the numerator). In order to do integer division
or remainder with arbitrary precision integers, use the built-in
-@code{div()} function (@pxref{Numeric Functions}).
+@code{intdiv()} function (@pxref{Numeric Functions}).
-You can simulate the @code{div()} function in standard @command{awk}
+You can simulate the @code{intdiv()} function in standard @command{awk}
using this user-defined function:
@example
-@c file eg/lib/div.awk
-# div --- do integer division
+@c file eg/lib/intdiv.awk
+# intdiv --- do integer division
@c endfile
@ignore
-@c file eg/lib/div.awk
+@c file eg/lib/intdiv.awk
#
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# July, 2014
+#
+# Name changed from div() to intdiv()
+# April, 2015
@c endfile
@end ignore
-@c file eg/lib/div.awk
-function div(numerator, denominator, result)
+@c file eg/lib/intdiv.awk
+function intdiv(numerator, denominator, result)
@{
split("", result)
@@ -31235,7 +31152,7 @@ function div(numerator, denominator, result)
@end example
The following example program, contributed by Katie Wasserman,
-uses @code{div()} to
+uses @code{intdiv()} to
compute the digits of @value{PI} to as many places as you
choose to set:
@@ -31260,7 +31177,7 @@ BEGIN @{
for (m = digits * 4; m > 0; --m) @{
d = m * 2 + 1
x = pi * m
- div(x, d, result)
+ intdiv(x, d, result)
pi = result["quotient"]
pi = pi + two
@}
@@ -31299,7 +31216,7 @@ When asked about the algorithm used, Katie replied:
@quotation
It's not that well known but it's not that obscure either.
It's Euler's modification to Newton's method for calculating pi.
-Take a look at lines (23) - (25) here: @uref{http://mathworld.wolfram.com/PiFormulas.htm}.
+Take a look at lines (23) - (25) here: @uref{http://mathworld.wolfram.com/PiFormulas.html}.
The algorithm I wrote simply expands the multiply by 2 and works from
the innermost expression outwards. I used this to program HP calculators
@@ -31311,7 +31228,7 @@ word sizes. See
@node POSIX Floating Point Problems
@section Standards Versus Existing Practice
-Historically, @command{awk} has converted any non-numeric looking string
+Historically, @command{awk} has converted any nonnumeric-looking string
to the numeric value zero, when required. Furthermore, the original
definition of the language and the original POSIX standards specified that
@command{awk} only understands decimal numbers (base 10), and not octal
@@ -31328,8 +31245,8 @@ notation (e.g., @code{0xDEADBEEF}). (Note: data values, @emph{not}
source code constants.)
@item
-Support for the special IEEE 754 floating-point values ``Not A Number''
-(NaN), positive Infinity (``inf''), and negative Infinity (``@minus{}inf'').
+Support for the special IEEE 754 floating-point values ``not a number''
+(NaN), positive infinity (``inf''), and negative infinity (``@minus{}inf'').
In particular, the format for these values is as specified by the ISO 1999
C standard, which ignores case and can allow implementation-dependent additional
characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}.
@@ -31349,22 +31266,22 @@ Allowing completely alphabetic strings to have valid numeric
values is also a very severe departure from historical practice.
@end itemize
-The second problem is that the @code{gawk} maintainer feels that this
-interpretation of the standard, which requires a certain amount of
+The second problem is that the @command{gawk} maintainer feels that this
+interpretation of the standard, which required a certain amount of
``language lawyering'' to arrive at in the first place, was not even
-intended by the standard developers. In other words, ``we see how you
+intended by the standard developers. In other words, ``We see how you
got where you are, but we don't think that that's where you want to be.''
Recognizing these issues, but attempting to provide compatibility
with the earlier versions of the standard,
the 2008 POSIX standard added explicit wording to allow, but not require,
that @command{awk} support hexadecimal floating-point values and
-special values for ``Not A Number'' and infinity.
+special values for ``not a number'' and infinity.
Although the @command{gawk} maintainer continues to feel that
providing those features is inadvisable,
nevertheless, on systems that support IEEE floating point, it seems
-reasonable to provide @emph{some} way to support NaN and Infinity values.
+reasonable to provide @emph{some} way to support NaN and infinity values.
The solution implemented in @command{gawk} is as follows:
@itemize @value{BULLET}
@@ -31384,7 +31301,7 @@ $ @kbd{echo 0xDeadBeef | gawk --posix '@{ print $1 + 0 @}'}
@end example
@item
-Without @option{--posix}, @command{gawk} interprets the four strings
+Without @option{--posix}, @command{gawk} interprets the four string values
@samp{+inf},
@samp{-inf},
@samp{+nan},
@@ -31406,7 +31323,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'}
@end example
@command{gawk} ignores case in the four special values.
-Thus @samp{+nan} and @samp{+NaN} are the same.
+Thus, @samp{+nan} and @samp{+NaN} are the same.
@end itemize
@node Floating point summary
@@ -31419,9 +31336,9 @@ values. Standard @command{awk} uses double-precision
floating-point values.
@item
-In the early 1990s, Barbie mistakenly said ``Math class is tough!''
+In the early 1990s Barbie mistakenly said, ``Math class is tough!''
Although math isn't tough, floating-point arithmetic isn't the same
-as pencil and paper math, and care must be taken:
+as pencil-and-paper math, and care must be taken:
@c nested list
@itemize @value{MINUS}
@@ -31454,11 +31371,11 @@ arithmetic. Use @code{PREC} to set the precision in bits, and
@item
With @option{-M}, @command{gawk} performs
arbitrary-precision integer arithmetic using the GMP library.
-This is faster and more space efficient than using MPFR for
+This is faster and more space-efficient than using MPFR for
the same calculations.
@item
-There are several ``dark corners'' with respect to floating-point
+There are several areas with respect to floating-point
numbers where @command{gawk} disagrees with the POSIX standard.
It pays to be aware of them.
@@ -31466,7 +31383,7 @@ It pays to be aware of them.
Overall, there is no need to be unduly suspicious about the results from
floating-point arithmetic. The lesson to remember is that floating-point
arithmetic is always more complex than arithmetic using pencil and
-paper. In order to take advantage of the power of computer floating point,
+paper. In order to take advantage of the power of floating-point arithmetic,
you need to know its limitations and work within them. For most casual
use of floating-point arithmetic, you will often get the expected result
if you simply round the display of your final results to the correct number
@@ -31508,7 +31425,7 @@ When @option{--sandbox} is specified, extensions are disabled
* Finding Extensions:: How @command{gawk} finds compiled extensions.
* Extension Example:: Example C code for an extension.
* Extension Samples:: The sample extensions that ship with
- @code{gawk}.
+ @command{gawk}.
* gawkextlib:: The @code{gawkextlib} project.
* Extension summary:: Extension summary.
* Extension Exercises:: Exercises.
@@ -31527,7 +31444,7 @@ Extensions are useful because they allow you (of course) to extend
@command{gawk}'s functionality. For example, they can provide access to
system calls (such as @code{chdir()} to change directory) and to other
C library routines that could be of use. As with most software,
-``the sky is the limit;'' if you can imagine something that you might
+``the sky is the limit''; if you can imagine something that you might
want to do and can write in C or C++, you can write an extension to do it!
Extensions are written in C or C++, using the @dfn{application programming
@@ -31535,7 +31452,7 @@ interface} (API) defined for this purpose by the @command{gawk}
developers. The rest of this @value{CHAPTER} explains
the facilities that the API provides and how to use
them, and presents a small example extension. In addition, it documents
-the sample extensions included in the @command{gawk} distribution,
+the sample extensions included in the @command{gawk} distribution
and describes the @code{gawkextlib} project.
@ifclear FOR_PRINT
@xref{Extension Design}, for a discussion of the extension mechanism
@@ -31688,7 +31605,7 @@ Some other bits and pieces:
@itemize @value{BULLET}
@item
The API provides access to @command{gawk}'s @code{do_@var{xxx}} values,
-reflecting command-line options, like @code{do_lint}, @code{do_profiling}
+reflecting command-line options, like @code{do_lint}, @code{do_profiling},
and so on (@pxref{Extension API Variables}).
These are informational: an extension cannot affect their values
inside @command{gawk}. In addition, attempting to assign to them
@@ -31725,6 +31642,7 @@ This (rather large) @value{SECTION} describes the API in detail.
* Symbol Table Access:: Functions for accessing global
variables.
* Array Manipulation:: Functions for working with arrays.
+* Redirection API:: How to access and manipulate redirections.
* Extension API Variables:: Variables provided by the API.
* Extension API Boilerplate:: Boilerplate code for using the API.
@end menu
@@ -31732,7 +31650,7 @@ This (rather large) @value{SECTION} describes the API in detail.
@node Extension API Functions Introduction
@subsection Introduction
-Access to facilities within @command{gawk} are made available
+Access to facilities within @command{gawk} is achieved
by calling through function pointers passed into your extension.
API function pointers are provided for the following kinds of operations:
@@ -31760,7 +31678,7 @@ Output wrappers
Two-way processors
@end itemize
-All of these are discussed in detail, later in this @value{CHAPTER}.
+All of these are discussed in detail later in this @value{CHAPTER}.
@item
Printing fatal, warning, and ``lint'' warning messages.
@@ -31798,8 +31716,12 @@ Creating a new array
Clearing an array
@item
-Flattening an array for easy C style looping over all its indices and elements
+Flattening an array for easy C-style looping over all its indices and elements
@end itemize
+
+@item
+Accessing and manipulating redirections.
+
@end itemize
Some points about using the API:
@@ -31810,8 +31732,9 @@ The following types, macros, and/or functions are referenced
in @file{gawkapi.h}. For correct use, you must therefore include the
corresponding standard header file @emph{before} including @file{gawkapi.h}:
+@c FIXME: Make this is a float at some point.
@multitable {@code{memset()}, @code{memcpy()}} {@code{<sys/types.h>}}
-@headitem C Entity @tab Header File
+@headitem C entity @tab Header file
@item @code{EOF} @tab @code{<stdio.h>}
@item Values for @code{errno} @tab @code{<errno.h>}
@item @code{FILE} @tab @code{<stdio.h>}
@@ -31837,7 +31760,7 @@ Doing so, however, is poor coding practice.
Although the API only uses ISO C 90 features, there is an exception; the
``constructor'' functions use the @code{inline} keyword. If your compiler
does not support this keyword, you should either place
-@samp{-Dinline=''} on your command line, or use the GNU Autotools and include a
+@samp{-Dinline=''} on your command line or use the GNU Autotools and include a
@file{config.h} file in your extensions.
@item
@@ -31845,7 +31768,7 @@ All pointers filled in by @command{gawk} point to memory
managed by @command{gawk} and should be treated by the extension as
read-only. Memory for @emph{all} strings passed into @command{gawk}
from the extension @emph{must} come from calling one of
-@code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()},
+@code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()},
and is managed by @command{gawk} from then on.
@item
@@ -31859,7 +31782,7 @@ characters are allowed.
By intent, strings are maintained using the current multibyte encoding (as
defined by @env{LC_@var{xxx}} environment variables) and not using wide
characters. This matches how @command{gawk} stores strings internally
-and also how characters are likely to be input and output from files.
+and also how characters are likely to be input into and output from files.
@end quotation
@item
@@ -31904,6 +31827,8 @@ general-purpose use. Additional, more specialized, data structures are
introduced in subsequent @value{SECTION}s, together with the functions
that use them.
+The general-purpose types and structures are as follows:
+
@table @code
@item typedef void *awk_ext_id_t;
A value of this type is received from @command{gawk} when an extension is loaded.
@@ -31920,7 +31845,7 @@ while allowing @command{gawk} to use them as it needs to.
@itemx @ @ @ @ awk_false = 0,
@itemx @ @ @ @ awk_true
@itemx @} awk_bool_t;
-A simple boolean type.
+A simple Boolean type.
@item typedef struct awk_string @{
@itemx @ @ @ @ char *str;@ @ @ @ @ @ /* data */
@@ -31966,7 +31891,7 @@ The @code{val_type} member indicates what kind of value the
@itemx #define array_cookie@ @ @ u.a
@itemx #define scalar_cookie@ @ u.scl
@itemx #define value_cookie@ @ @ u.vc
-These macros make accessing the fields of the @code{awk_value_t} more
+Using these macros makes accessing the fields of the @code{awk_value_t} more
readable.
@item typedef void *awk_scalar_t;
@@ -31989,7 +31914,7 @@ indicates what is in the @code{union}.
Representing numbers is easy---the API uses a C @code{double}. Strings
require more work. Because @command{gawk} allows embedded @sc{nul} bytes
in string values, a string must be represented as a pair containing a
-data-pointer and length. This is the @code{awk_string_t} type.
+data pointer and length. This is the @code{awk_string_t} type.
Identifiers (i.e., the names of global variables) can be associated
with either scalar values or with arrays. In addition, @command{gawk}
@@ -32002,12 +31927,12 @@ of the @code{union} as if they were fields in a @code{struct}; this
is a common coding practice in C. Such code is easier to write and to
read, but it remains @emph{your} responsibility to make sure that
the @code{val_type} member correctly reflects the type of the value in
-the @code{awk_value_t}.
+the @code{awk_value_t} struct.
Conceptually, the first three members of the @code{union} (number, string,
and array) are all that is needed for working with @command{awk} values.
However, because the API provides routines for accessing and changing
-the value of global scalar variables only by using the variable's name,
+the value of a global scalar variable only by using the variable's name,
there is a performance penalty: @command{gawk} must find the variable
each time it is accessed and changed. This turns out to be a real issue,
not just a theoretical one.
@@ -32025,7 +31950,9 @@ See also the entry for ``Cookie'' in the @ref{Glossary}.
object for that variable, and then use
the cookie for getting the variable's value or for changing the variable's
value.
-This is the @code{awk_scalar_t} type and @code{scalar_cookie} macro.
+The @code{awk_scalar_t} type holds a scalar cookie, and the
+@code{scalar_cookie} macro provides access to the value of that type
+in the @code{awk_value_t} struct.
Given a scalar cookie, @command{gawk} can directly retrieve or
modify the value, as required, without having to find it first.
@@ -32034,8 +31961,8 @@ If you know that you wish to
use the same numeric or string @emph{value} for one or more variables,
you can create the value once, retaining a @dfn{value cookie} for it,
and then pass in that value cookie whenever you wish to set the value of a
-variable. This saves both storage space within the running @command{gawk}
-process as well as the time needed to create the value.
+variable. This saves storage space within the running @command{gawk}
+process and reduces the time needed to create the value.
@node Memory Allocation Functions
@subsection Memory Allocation Functions and Convenience Macros
@@ -32063,13 +31990,13 @@ be passed to @command{gawk}.
@item void gawk_free(void *ptr);
Call the correct version of @code{free()} to release storage that was
-allocated with @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}.
+allocated with @code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}.
@end table
The API has to provide these functions because it is possible
for an extension to be compiled and linked against a different
version of the C library than was used for the @command{gawk}
-executable.@footnote{This is more common on MS-Windows systems, but
+executable.@footnote{This is more common on MS-Windows systems, but it
can happen on Unix-like systems as well.} If @command{gawk} were
to use its version of @code{free()} when the memory came from an
unrelated version of @code{malloc()}, unexpected behavior would
@@ -32079,7 +32006,7 @@ Two convenience macros may be used for allocating storage
from @code{gawk_malloc()} and
@code{gawk_realloc()}. If the allocation fails, they cause @command{gawk}
to exit with a fatal error message. They should be used as if they were
-procedure calls that do not return a value.
+procedure calls that do not return a value:
@table @code
@item #define emalloc(pointer, type, size, message) @dots{}
@@ -32116,7 +32043,7 @@ make_malloced_string(message, strlen(message), & result);
@end example
@item #define erealloc(pointer, type, size, message) @dots{}
-This is like @code{emalloc()}, but it calls @code{gawk_realloc()},
+This is like @code{emalloc()}, but it calls @code{gawk_realloc()}
instead of @code{gawk_malloc()}.
The arguments are the same as for the @code{emalloc()} macro.
@end table
@@ -32131,28 +32058,28 @@ the way that extension code would use them:
@table @code
@item static inline awk_value_t *
-@itemx make_const_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_const_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a C string constant
(or other string data), and automatically creates a @emph{copy} of the data
for storage in @code{result}. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a @samp{char *}
-value pointing to data previously obtained from @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}. The idea here
+value pointing to data previously obtained from @code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}. The idea here
is that the data is passed directly to @command{gawk}, which assumes
responsibility for it. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_null_string(awk_value_t *result)
+@itemx make_null_string(awk_value_t *result);
This specialized function creates a null string (the ``undefined'' value)
in the @code{awk_value_t} variable pointed to by @code{result}.
It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_number(double num, awk_value_t *result)
+@itemx make_number(double num, awk_value_t *result);
This function simply creates a numeric value in the @code{awk_value_t} variable
pointed to by @code{result}.
@end table
@@ -32192,7 +32119,7 @@ The fields are:
@table @code
@item const char *name;
The name of the new function.
-@command{awk} level code calls the function by this name.
+@command{awk}-level code calls the function by this name.
This is a regular C string.
Function names must obey the rules for @command{awk}
@@ -32206,7 +32133,7 @@ This is a pointer to the C function that provides the extension's
functionality.
The function must fill in @code{*result} with either a number
or a string. @command{gawk} takes ownership of any string memory.
-As mentioned earlier, string memory @strong{must} come from one of
+As mentioned earlier, string memory @emph{must} come from one of
@code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}.
The @code{num_actual_args} argument tells the C function how many
@@ -32258,20 +32185,20 @@ The @code{exit_status} parameter is the exit status value that
@command{gawk} intends to pass to the @code{exit()} system call.
@item arg0
-A pointer to private data which @command{gawk} saves in order to pass to
+A pointer to private data that @command{gawk} saves in order to pass to
the function pointed to by @code{funcp}.
@end table
@end table
-Exit callback functions are called in last-in-first-out (LIFO)
+Exit callback functions are called in last-in, first-out (LIFO)
order---that is, in the reverse order in which they are registered with
@command{gawk}.
@node Extension Version String
@subsubsection Registering An Extension Version String
-You can register a version string which indicates the name and
-version of your extension, with @command{gawk}, as follows:
+You can register a version string that indicates the name and
+version of your extension with @command{gawk}, as follows:
@table @code
@item void register_ext_version(const char *version);
@@ -32293,7 +32220,7 @@ of @code{RS} to find the end of the record, and then uses @code{FS}
Additionally, it sets the value of @code{RT} (@pxref{Built-in Variables}).
If you want, you can provide your own custom input parser. An input
-parser's job is to return a record to the @command{gawk} record processing
+parser's job is to return a record to the @command{gawk} record-processing
code, along with indicators for the value and length of the data to be
used for @code{RT}, if any.
@@ -32311,9 +32238,9 @@ It should not change any state (variable values, etc.) within @command{gawk}.
@item awk_bool_t @var{XXX}_take_control_of(awk_input_buf_t *iobuf);
When @command{gawk} decides to hand control of the file over to the
input parser, it calls this function. This function in turn must fill
-in certain fields in the @code{awk_input_buf_t} structure, and ensure
+in certain fields in the @code{awk_input_buf_t} structure and ensure
that certain conditions are true. It should then return true. If an
-error of some kind occurs, it should not fill in any fields, and should
+error of some kind occurs, it should not fill in any fields and should
return false; then @command{gawk} will not use the input parser.
The details are presented shortly.
@end table
@@ -32406,7 +32333,7 @@ in the @code{struct stat}, or any combination of these factors.
Once @code{@var{XXX}_can_take_file()} has returned true, and
@command{gawk} has decided to use your input parser, it calls
-@code{@var{XXX}_take_control_of()}. That function then fills one of
+@code{@var{XXX}_take_control_of()}. That function then fills
either the @code{get_record} field or the @code{read_func} field in
the @code{awk_input_buf_t}. It must also ensure that @code{fd} is @emph{not}
set to @code{INVALID_HANDLE}. The following list describes the fields that
@@ -32428,21 +32355,21 @@ records. Said function is the core of the input parser. Its behavior
is described in the text following this list.
@item ssize_t (*read_func)();
-This function pointer should point to function that has the
+This function pointer should point to a function that has the
same behavior as the standard POSIX @code{read()} system call.
It is an alternative to the @code{get_record} pointer. Its behavior
is also described in the text following this list.
@item void (*close_func)(struct awk_input *iobuf);
This function pointer should point to a function that does
-the ``tear down.'' It should release any resources allocated by
+the ``teardown.'' It should release any resources allocated by
@code{@var{XXX}_take_control_of()}. It may also close the file. If it
does so, it should set the @code{fd} field to @code{INVALID_HANDLE}.
If @code{fd} is still not @code{INVALID_HANDLE} after the call to this
function, @command{gawk} calls the regular @code{close()} system call.
-Having a ``tear down'' function is optional. If your input parser does
+Having a ``teardown'' function is optional. If your input parser does
not need it, do not set this field. Then, @command{gawk} calls the
regular @code{close()} system call on the file descriptor, so it should
be valid.
@@ -32453,7 +32380,7 @@ input records. The parameters are as follows:
@table @code
@item char **out
-This is a pointer to a @code{char *} variable which is set to point
+This is a pointer to a @code{char *} variable that is set to point
to the record. @command{gawk} makes its own copy of the data, so
the extension must manage this storage.
@@ -32472,7 +32399,7 @@ If the concept of a ``record terminator'' makes sense, then
@code{*rt_start} should be set to point to the data to be used for
@code{RT}, and @code{*rt_len} should be set to the length of the
data. Otherwise, @code{*rt_len} should be set to zero.
-@code{gawk} makes its own copy of this data, so the
+@command{gawk} makes its own copy of this data, so the
extension must manage this storage.
@end table
@@ -32506,19 +32433,19 @@ set this field explicitly.
You must choose one method or the other: either a function that
returns a record, or one that returns raw data. In particular,
if you supply a function to get a record, @command{gawk} will
-call it, and never call the raw read function.
+call it, and will never call the raw read function.
@end quotation
@command{gawk} ships with a sample extension that reads directories,
-returning records for each entry in the directory (@pxref{Extension
+returning records for each entry in a directory (@pxref{Extension
Sample Readdir}). You may wish to use that code as a guide for writing
your own input parser.
When writing an input parser, you should think about (and document)
how it is expected to interact with @command{awk} code. You may want
-it to always be called, and take effect as appropriate (as the
+it to always be called, and to take effect as appropriate (as the
@code{readdir} extension does). Or you may want it to take effect
-based upon the value of an @code{awk} variable, as the XML extension
+based upon the value of an @command{awk} variable, as the XML extension
from the @code{gawkextlib} project does (@pxref{gawkextlib}).
In the latter case, code in a @code{BEGINFILE} section
can look at @code{FILENAME} and @code{ERRNO} to decide whether or
@@ -32626,7 +32553,7 @@ a pointer to any private data associated with the file.
These pointers should be set to point to functions that perform
the equivalent function as the @code{<stdio.h>} functions do, if appropriate.
@command{gawk} uses these function pointers for all output.
-@command{gawk} initializes the pointers to point to internal, ``pass through''
+@command{gawk} initializes the pointers to point to internal ``pass-through''
functions that just call the regular @code{<stdio.h>} functions, so an
extension only needs to redefine those functions that are appropriate for
what it does.
@@ -32637,7 +32564,7 @@ upon the @code{name} and @code{mode} fields, and any additional state
(such as @command{awk} variable values) that is appropriate.
When @command{gawk} calls @code{@var{XXX}_take_control_of()}, that function should fill
-in the other fields, as appropriate, except for @code{fp}, which it should just
+in the other fields as appropriate, except for @code{fp}, which it should just
use normally.
You register your output wrapper with the following function:
@@ -32677,14 +32604,14 @@ The fields are as follows:
The name of the two-way processor.
@item awk_bool_t (*can_take_two_way)(const char *name);
-This function returns true if it wants to take over two-way I/O for this @value{FN}.
+The function pointed to by this field should return true if it wants to take over two-way I/O for this @value{FN}.
It should not change any state (variable
values, etc.) within @command{gawk}.
@item awk_bool_t (*take_control_of)(const char *name,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_input_buf_t *inbuf,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_output_buf_t *outbuf);
-This function should fill in the @code{awk_input_buf_t} and
+The function pointed to by this field should fill in the @code{awk_input_buf_t} and
@code{awk_outut_buf_t} structures pointed to by @code{inbuf} and
@code{outbuf}, respectively. These structures were described earlier.
@@ -32713,7 +32640,7 @@ Register the two-way processor pointed to by @code{two_way_processor} with
You can print different kinds of warning messages from your
extension, as described here. Note that for these functions,
-you must pass in the extension id received from @command{gawk}
+you must pass in the extension ID received from @command{gawk}
when the extension was loaded:@footnote{Because the API uses only ISO C 90
features, it cannot make use of the ISO C 99 variadic macro feature to hide
that parameter. More's the pity.}
@@ -32766,7 +32693,7 @@ matches what you requested, the function returns true and fills
in the @code{awk_value_t} result.
Otherwise, the function returns false, and the @code{val_type}
member indicates the type of the actual value. You may then
-print an error message, or reissue the request for the actual
+print an error message or reissue the request for the actual
value type, as appropriate. This behavior is summarized in
@ref{table-value-types-returned}.
@@ -32799,32 +32726,32 @@ value type, as appropriate. This behavior is summarized in
<entry><para><emphasis role="bold">String</emphasis></para></entry>
<entry><para>String</para></entry>
<entry><para>String</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry></entry>
<entry><para><emphasis role="bold">Number</emphasis></para></entry>
<entry><para>Number if can be converted, else false</para></entry>
<entry><para>Number</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry><para><emphasis role="bold">Type</emphasis></para></entry>
<entry><para><emphasis role="bold">Array</emphasis></para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
<entry><para>Array</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry><para><emphasis role="bold">Requested</emphasis></para></entry>
<entry><para><emphasis role="bold">Scalar</emphasis></para></entry>
<entry><para>Scalar</para></entry>
<entry><para>Scalar</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry></entry>
@@ -32836,11 +32763,11 @@ value type, as appropriate. This behavior is summarized in
</row>
<row>
<entry></entry>
- <entry><para><emphasis role="bold">Value Cookie</emphasis></para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para>
- </entry><entry><para>false</para></entry>
+ <entry><para><emphasis role="bold">Value cookie</emphasis></para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para>
+ </entry><entry><para>False</para></entry>
</row>
</tbody>
</tgroup>
@@ -32858,12 +32785,12 @@ value type, as appropriate. This behavior is summarized in
@end tex
@multitable @columnfractions .166 .166 .198 .15 .15 .166
@headitem @tab @tab String @tab Number @tab Array @tab Undefined
-@item @tab @b{String} @tab String @tab String @tab false @tab false
-@item @tab @b{Number} @tab Number if can be converted, else false @tab Number @tab false @tab false
-@item @b{Type} @tab @b{Array} @tab false @tab false @tab Array @tab false
-@item @b{Requested} @tab @b{Scalar} @tab Scalar @tab Scalar @tab false @tab false
+@item @tab @b{String} @tab String @tab String @tab False @tab False
+@item @tab @b{Number} @tab Number if can be converted, else false @tab Number @tab False @tab False
+@item @b{Type} @tab @b{Array} @tab False @tab False @tab Array @tab False
+@item @b{Requested} @tab @b{Scalar} @tab Scalar @tab Scalar @tab False @tab False
@item @tab @b{Undefined} @tab String @tab Number @tab Array @tab Undefined
-@item @tab @b{Value Cookie} @tab false @tab false @tab false @tab false
+@item @tab @b{Value cookie} @tab False @tab False @tab False @tab False
@end multitable
@end ifnotdocbook
@end ifnotplaintext
@@ -32874,21 +32801,21 @@ value type, as appropriate. This behavior is summarized in
+------------+------------+-----------+-----------+
| String | Number | Array | Undefined |
+-----------+-----------+------------+------------+-----------+-----------+
-| | String | String | String | false | false |
+| | String | String | String | False | False |
| |-----------+------------+------------+-----------+-----------+
-| | Number | Number if | Number | false | false |
+| | Number | Number if | Number | False | False |
| | | can be | | | |
| | | converted, | | | |
| | | else false | | | |
| |-----------+------------+------------+-----------+-----------+
-| Type | Array | false | false | Array | false |
+| Type | Array | False | False | Array | False |
| Requested |-----------+------------+------------+-----------+-----------+
-| | Scalar | Scalar | Scalar | false | false |
+| | Scalar | Scalar | Scalar | False | False |
| |-----------+------------+------------+-----------+-----------+
| | Undefined | String | Number | Array | Undefined |
| |-----------+------------+------------+-----------+-----------+
-| | Value | false | false | false | false |
-| | Cookie | | | | |
+| | Value | False | False | False | False |
+| | cookie | | | | |
+-----------+-----------+------------+------------+-----------+-----------+
@end example
@end ifplaintext
@@ -32905,16 +32832,16 @@ passed to your extension function. They are:
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *result);
Fill in the @code{awk_value_t} structure pointed to by @code{result}
-with the @code{count}'th argument. Return true if the actual
-type matches @code{wanted}, false otherwise. In the latter
+with the @code{count}th argument. Return true if the actual
+type matches @code{wanted}, and false otherwise. In the latter
case, @code{result@w{->}val_type} indicates the actual type
-(@pxref{table-value-types-returned}). Counts are zero based---the first
+(@pxref{table-value-types-returned}). Counts are zero-based---the first
argument is numbered zero, the second one, and so on. @code{wanted}
indicates the type of value expected.
@item awk_bool_t set_argument(size_t count, awk_array_t array);
Convert a parameter that was undefined into an array; this provides
-call-by-reference for arrays. Return false if @code{count} is too big,
+call by reference for arrays. Return false if @code{count} is too big,
or if the argument's type is not undefined. @DBXREF{Array Manipulation}
for more information on creating arrays.
@end table
@@ -32938,8 +32865,9 @@ allows you to create and release cached values.
The following routines provide the ability to access and update
global @command{awk}-level variables by name. In compiler terminology,
identifiers of different kinds are termed @dfn{symbols}, thus the ``sym''
-in the routines' names. The data structure which stores information
+in the routines' names. The data structure that stores information
about symbols is termed a @dfn{symbol table}.
+The functions are as follows:
@table @code
@item awk_bool_t sym_lookup(const char *name,
@@ -32948,14 +32876,14 @@ about symbols is termed a @dfn{symbol table}.
Fill in the @code{awk_value_t} structure pointed to by @code{result}
with the value of the variable named by the string @code{name}, which is
a regular C string. @code{wanted} indicates the type of value expected.
-Return true if the actual type matches @code{wanted}, false otherwise.
+Return true if the actual type matches @code{wanted}, and false otherwise.
In the latter case, @code{result->val_type} indicates the actual type
(@pxref{table-value-types-returned}).
@item awk_bool_t sym_update(const char *name, awk_value_t *value);
Update the variable named by the string @code{name}, which is a regular
C string. The variable is added to @command{gawk}'s symbol table
-if it is not there. Return true if everything worked, false otherwise.
+if it is not there. Return true if everything worked, and false otherwise.
Changing types (scalar to array or vice versa) of an existing variable
is @emph{not} allowed, nor may this routine be used to update an array.
@@ -32980,7 +32908,7 @@ populate it.
A @dfn{scalar cookie} is an opaque handle that provides access
to a global variable or array. It is an optimization that
avoids looking up variables in @command{gawk}'s symbol table every time
-access is needed. This was discussed earlier in @ref{General Data Types}.
+access is needed. This was discussed earlier, in @ref{General Data Types}.
The following functions let you work with scalar cookies:
@@ -33096,7 +33024,7 @@ and carefully check the return values from the API functions.
@subsubsection Creating and Using Cached Values
The routines in this section allow you to create and release
-cached values. As with scalar cookies, in theory, cached values
+cached values. Like scalar cookies, in theory, cached values
are not necessary. You can create numbers and strings using
the functions in @ref{Constructor Functions}. You can then
assign those values to variables using @code{sym_update()}
@@ -33174,7 +33102,7 @@ Using value cookies in this way saves considerable storage, as all of
@code{VAR1} through @code{VAR100} share the same value.
You might be wondering, ``Is this sharing problematic?
-What happens if @command{awk} code assigns a new value to @code{VAR1},
+What happens if @command{awk} code assigns a new value to @code{VAR1};
are all the others changed too?''
That's a great question. The answer is that no, it's not a problem.
@@ -33278,7 +33206,7 @@ modify them.
@node Array Functions
@subsubsection Array Functions
-The following functions relate to individual array elements.
+The following functions relate to individual array elements:
@table @code
@item awk_bool_t get_element_count(awk_array_t a_cookie, size_t *count);
@@ -33297,13 +33225,13 @@ Return false if @code{wanted} does not match the actual type or if
@code{index} is not in the array (@pxref{table-value-types-returned}).
The value for @code{index} can be numeric, in which case @command{gawk}
-converts it to a string. Using non-integral values is possible, but
+converts it to a string. Using nonintegral values is possible, but
requires that you understand how such values are converted to strings
-(@pxref{Conversion}); thus using integral values is safest.
+(@pxref{Conversion}); thus, using integral values is safest.
-As with @emph{all} strings passed into @code{gawk} from an extension,
+As with @emph{all} strings passed into @command{gawk} from an extension,
the string value of @code{index} must come from @code{gawk_malloc()},
-@code{gawk_calloc()} or @code{gawk_realloc()}, and
+@code{gawk_calloc()}, or @code{gawk_realloc()}, and
@command{gawk} releases the storage.
@item awk_bool_t set_array_element(awk_array_t a_cookie,
@@ -33359,7 +33287,7 @@ flatten an array and work with it.
@item awk_bool_t release_flattened_array(awk_array_t a_cookie,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_flat_array_t *data);
When done with a flattened array, release the storage using this function.
-You must pass in both the original array cookie, and the address of
+You must pass in both the original array cookie and the address of
the created @code{awk_flat_array_t} structure.
The function returns true upon success, false otherwise.
@end table
@@ -33369,7 +33297,7 @@ The function returns true upon success, false otherwise.
To @dfn{flatten} an array is to create a structure that
represents the full array in a fashion that makes it easy
-for C code to traverse the entire array. Test code
+for C code to traverse the entire array. Some of the code
in @file{extension/testext.c} does this, and also serves
as a nice example showing how to use the APIs.
@@ -33426,9 +33354,9 @@ dump_array_and_delete(int nargs, awk_value_t *result)
@end example
The function then proceeds in steps, as follows. First, retrieve
-the name of the array, passed as the first argument. Then
-retrieve the array itself. If either operation fails, print
-error messages and return:
+the name of the array, passed as the first argument, followed by
+the array itself. If either operation fails, print an
+error message and return:
@example
/* get argument named array as flat array and print it */
@@ -33464,7 +33392,7 @@ and print it:
@end example
The third step is to actually flatten the array, and then
-to double check that the count in the @code{awk_flat_array_t}
+to double-check that the count in the @code{awk_flat_array_t}
is the same as the count just retrieved:
@example
@@ -33485,7 +33413,7 @@ is the same as the count just retrieved:
The fourth step is to retrieve the index of the element
to be deleted, which was passed as the second argument.
Remember that argument counts passed to @code{get_argument()}
-are zero-based, thus the second argument is numbered one:
+are zero-based, and thus the second argument is numbered one:
@example
if (! get_argument(1, AWK_STRING, & value3)) @{
@@ -33500,7 +33428,7 @@ element values. In addition, upon finding the element with the
index that is supposed to be deleted, the function sets the
@code{AWK_ELEMENT_DELETE} bit in the @code{flags} field
of the element. When the array is released, @command{gawk}
-traverses the flattened array, and deletes any elements which
+traverses the flattened array, and deletes any elements that
have this flag bit set:
@example
@@ -33764,6 +33692,75 @@ $ @kbd{AWKLIBPATH=$PWD ./gawk -f subarray.awk}
(@DBXREF{Finding Extensions} for more information on the
@env{AWKLIBPATH} environment variable.)
+@node Redirection API
+@subsection Accessing and Manipulating Redirections
+
+The following function allows extensions to access and manipulate redirections.
+
+@table @code
+@item awk_bool_t get_file(const char *name,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t name_len,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const char *filetype,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ int fd,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_input_buf_t **ibufp,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_output_buf_t **obufp);
+Look up a file in @command{gawk}'s internal redirection table.
+If @code{name} is @code{NULL} or @code{name_len} is zero, return
+data for the currently open input file corresponding to @code{FILENAME}.
+(This does not access the @code{filetype} argument, so that may be undefined).
+If the file is not already open, attempt to open it.
+The @code{filetype} argument must be zero-terminated and should be one of:
+
+@table @code
+@item ">"
+A file opened for output.
+
+@item ">>"
+A file opened for append.
+
+@item "<"
+A file opened for input.
+
+@item "|>"
+A pipe opened for output.
+
+@item "|<"
+A pipe opened for input.
+
+@item "|&"
+A two-way coprocess.
+@end table
+
+On error, return a @code{false} value. Otherwise, return
+@code{true}, and return additional information about the redirection
+in the @code{ibufp} and @code{obufp} pointers. For input
+redirections, the @code{*ibufp} value should be non-@code{NULL},
+and @code{*obufp} should be @code{NULL}. For output redirections,
+the @code{*obufp} value should be non-@code{NULL}, and @code{*ibufp}
+should be @code{NULL}. For two-way coprocesses, both values should
+be non-@code{NULL}.
+
+In the usual case, the extension is interested in @code{(*ibufp)->fd}
+and/or @code{fileno((*obufp)->fp)}. If the file is not already
+open, and the @code{fd} argument is non-negative, @command{gawk}
+will use that file descriptor instead of opening the file in the
+usual way. If @code{fd} is non-negative, but the file exists already,
+@command{gawk} ignores @code{fd} and returns the existing file. It is
+the caller's responsibility to notice that neither the @code{fd} in
+the returned @code{awk_input_buf_t} nor the @code{fd} in the returned
+@code{awk_output_buf_t} matches the requested value.
+
+Note that supplying a file descriptor is currently @emph{not} supported
+for pipes. However, supplying a file descriptor should work for input,
+output, append, and two-way (coprocess) sockets. If @code{filetype}
+is two-way, @command{gawk} assumes that it is a socket! Note that in
+the two-way case, the input and output file descriptors may differ.
+To check for success, you must check whether either matches.
+@end table
+
+It is anticipated that this API function will be used to implement I/O
+multiplexing and a socket library.
+
@node Extension API Variables
@subsection API Variables
@@ -33788,10 +33785,10 @@ The API versions are available at compile time as constants:
@table @code
@item GAWK_API_MAJOR_VERSION
-The major version of the API.
+The major version of the API
@item GAWK_API_MINOR_VERSION
-The minor version of the API.
+The minor version of the API
@end table
The minor version increases when new functions are added to the API. Such
@@ -33809,14 +33806,14 @@ constant integers:
@table @code
@item api->major_version
-The major version of the running @command{gawk}.
+The major version of the running @command{gawk}
@item api->minor_version
-The minor version of the running @command{gawk}.
+The minor version of the running @command{gawk}
@end table
It is up to the extension to decide if there are API incompatibilities.
-Typically a check like this is enough:
+Typically, a check like this is enough:
@example
if (api->major_version != GAWK_API_MAJOR_VERSION
@@ -33830,7 +33827,7 @@ if (api->major_version != GAWK_API_MAJOR_VERSION
@end example
Such code is included in the boilerplate @code{dl_load_func()} macro
-provided in @file{gawkapi.h} (discussed later, in
+provided in @file{gawkapi.h} (discussed in
@ref{Extension API Boilerplate}).
@node Extension API Informational Variables
@@ -33877,7 +33874,7 @@ as described here. The boilerplate needed is also provided in comments
in the @file{gawkapi.h} header file:
@example
-/* Boiler plate code: */
+/* Boilerplate code: */
int plugin_is_GPL_compatible;
static gawk_api_t *const api;
@@ -33936,7 +33933,7 @@ to @code{NULL}, or to point to a string giving the name and version of
your extension.
@item static awk_ext_func_t func_table[] = @{ @dots{} @};
-This is an array of one or more @code{awk_ext_func_t} structures
+This is an array of one or more @code{awk_ext_func_t} structures,
as described earlier (@pxref{Extension Functions}).
It can then be looped over for multiple calls to
@code{add_ext_func()}.
@@ -34067,7 +34064,7 @@ the @code{stat()} fails. It fills in the following elements:
@table @code
@item "name"
-The name of the file that was @code{stat()}'ed.
+The name of the file that was @code{stat()}ed.
@item "dev"
@itemx "ino"
@@ -34123,7 +34120,7 @@ interprocess communications).
The file is a directory.
@item "fifo"
-The file is a named-pipe (also known as a FIFO).
+The file is a named pipe (also known as a FIFO).
@item "file"
The file is just a regular file.
@@ -34146,7 +34143,7 @@ For some other systems, @dfn{a priori} knowledge is used to provide
a value. Where no value can be determined, it defaults to 512.
@end table
-Several additional elements may be present depending upon the operating
+Several additional elements may be present, depending upon the operating
system and the type of the file. You can test for them in your @command{awk}
program by using the @code{in} operator
(@pxref{Reference to Elements}):
@@ -34176,7 +34173,7 @@ edited slightly for presentation. See @file{extension/filefuncs.c}
in the @command{gawk} distribution for the complete version.}
The file includes a number of standard header files, and then includes
-the @file{gawkapi.h} header file which provides the API definitions.
+the @file{gawkapi.h} header file, which provides the API definitions.
Those are followed by the necessary variable declarations
to make use of the API macros and boilerplate code
(@pxref{Extension API Boilerplate}):
@@ -34217,9 +34214,9 @@ int plugin_is_GPL_compatible;
@cindex programming conventions, @command{gawk} extensions
By convention, for an @command{awk} function @code{foo()}, the C function
that implements it is called @code{do_foo()}. The function should have
-two arguments: the first is an @code{int} usually called @code{nargs},
+two arguments. The first is an @code{int}, usually called @code{nargs},
that represents the number of actual arguments for the function.
-The second is a pointer to an @code{awk_value_t}, usually named
+The second is a pointer to an @code{awk_value_t} structure, usually named
@code{result}:
@example
@@ -34265,7 +34262,7 @@ Finally, the function returns the return value to the @command{awk} level:
The @code{stat()} extension is more involved. First comes a function
that turns a numeric mode into a printable representation
-(e.g., 644 becomes @samp{-rw-r--r--}). This is omitted here for brevity:
+(e.g., octal @code{0644} becomes @samp{-rw-r--r--}). This is omitted here for brevity:
@example
/* format_mode --- turn a stat mode field into something readable */
@@ -34321,9 +34318,9 @@ array_set_numeric(awk_array_t array, const char *sub, double num)
The following function does most of the work to fill in
the @code{awk_array_t} result array with values obtained
-from a valid @code{struct stat}. It is done in a separate function
+from a valid @code{struct stat}. This work is done in a separate function
to support the @code{stat()} function for @command{gawk} and also
-to support the @code{fts()} extension which is included in
+to support the @code{fts()} extension, which is included in
the same file but whose code is not shown here
(@pxref{Extension Sample File Functions}).
@@ -34444,8 +34441,8 @@ the @code{stat()} system call instead of the @code{lstat()} system
call. This is done by using a function pointer: @code{statfunc}.
@code{statfunc} is initialized to point to @code{lstat()} (instead
of @code{stat()}) to get the file information, in case the file is a
-symbolic link. However, if there were three arguments, @code{statfunc}
-is set point to @code{stat()}, instead.
+symbolic link. However, if the third argument is included, @code{statfunc}
+is set to point to @code{stat()}, instead.
Here is the @code{do_stat()} function, which starts with
variable declarations and argument checking:
@@ -34501,7 +34498,7 @@ Next, it gets the information for the file. If the called function
/* always empty out the array */
clear_array(array);
- /* stat the file, if error, set ERRNO and return */
+ /* stat the file; if error, set ERRNO and return */
ret = statfunc(name, & sbuf);
if (ret < 0) @{
update_ERRNO_int(errno);
@@ -34523,7 +34520,9 @@ Finally, it's necessary to provide the ``glue'' that loads the
new function(s) into @command{gawk}.
The @code{filefuncs} extension also provides an @code{fts()}
-function, which we omit here. For its sake there is an initialization
+function, which we omit here
+(@pxref{Extension Sample File Functions}).
+For its sake, there is an initialization
function:
@example
@@ -34648,9 +34647,9 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk}
@section The Sample Extensions in the @command{gawk} Distribution
@cindex extensions distributed with @command{gawk}
-This @value{SECTION} provides brief overviews of the sample extensions
+This @value{SECTION} provides a brief overview of the sample extensions
that come in the @command{gawk} distribution. Some of them are intended
-for production use (e.g., the @code{filefuncs}, @code{readdir} and
+for production use (e.g., the @code{filefuncs}, @code{readdir}, and
@code{inplace} extensions). Others mainly provide example code that
shows how to use the extension API.
@@ -34686,14 +34685,14 @@ This is how you load the extension.
@item @code{result = chdir("/some/directory")}
The @code{chdir()} function is a direct hook to the @code{chdir()}
system call to change the current directory. It returns zero
-upon success or less than zero upon error. In the latter case, it updates
-@code{ERRNO}.
+upon success or a value less than zero upon error.
+In the latter case, it updates @code{ERRNO}.
@cindex @code{stat()} extension function
@item @code{result = stat("/some/path", statdata} [@code{, follow}]@code{)}
The @code{stat()} function provides a hook into the
@code{stat()} system call.
-It returns zero upon success or less than zero upon error.
+It returns zero upon success or a value less than zero upon error.
In the latter case, it updates @code{ERRNO}.
By default, it uses the @code{lstat()} system call. However, if passed
@@ -34720,10 +34719,10 @@ array with information retrieved from the filesystem, as follows:
@item @code{"major"} @tab @code{st_major} @tab Device files
@item @code{"minor"} @tab @code{st_minor} @tab Device files
@item @code{"blksize"} @tab @code{st_blksize} @tab All
-@item @code{"pmode"} @tab A human-readable version of the mode value, such as printed by
-@command{ls}. For example, @code{"-rwxr-xr-x"} @tab All
+@item @code{"pmode"} @tab A human-readable version of the mode value, like that printed by
+@command{ls} (for example, @code{"-rwxr-xr-x"}) @tab All
@item @code{"linkval"} @tab The value of the symbolic link @tab Symbolic links
-@item @code{"type"} @tab The type of the file as a string. One of
+@item @code{"type"} @tab The type of the file as a string---one of
@code{"file"},
@code{"blockdev"},
@code{"chardev"},
@@ -34733,15 +34732,15 @@ array with information retrieved from the filesystem, as follows:
@code{"symlink"},
@code{"door"},
or
-@code{"unknown"}.
-Not all systems support all file types. @tab All
+@code{"unknown"}
+(not all systems support all file types) @tab All
@end multitable
@cindex @code{fts()} extension function
@item @code{flags = or(FTS_PHYSICAL, ...)}
@itemx @code{result = fts(pathlist, flags, filedata)}
Walk the file trees provided in @code{pathlist} and fill in the
-@code{filedata} array as described next. @code{flags} is the bitwise
+@code{filedata} array, as described next. @code{flags} is the bitwise
OR of several predefined values, also described in a moment.
Return zero if there were no errors, otherwise return @minus{}1.
@end table
@@ -34797,7 +34796,8 @@ During a traversal, do not cross onto a different mounted filesystem.
@end table
@item filedata
-The @code{filedata} array is first cleared. Then, @code{fts()} creates
+The @code{filedata} array holds the results.
+@code{fts()} first clears it. Then it creates
an element in @code{filedata} for every element in @code{pathlist}.
The index is the name of the directory or file given in @code{pathlist}.
The element for this index is itself an array. There are two cases:
@@ -34839,7 +34839,7 @@ for a file: @code{"path"}, @code{"stat"}, and @code{"error"}.
@end table
The @code{fts()} function returns zero if there were no errors.
-Otherwise it returns @minus{}1.
+Otherwise, it returns @minus{}1.
@quotation NOTE
The @code{fts()} extension does not exactly mimic the
@@ -34881,14 +34881,14 @@ The arguments to @code{fnmatch()} are:
@table @code
@item pattern
-The @value{FN} wildcard to match.
+The @value{FN} wildcard to match
@item string
-The @value{FN} string.
+The @value{FN} string
@item flag
Either zero, or the bitwise OR of one or more of the
-flags in the @code{FNM} array.
+flags in the @code{FNM} array
@end table
The flags are as follows:
@@ -34925,14 +34925,14 @@ This is how you load the extension.
@cindex @code{fork()} extension function
@item pid = fork()
This function creates a new process. The return value is zero in the
-child and the process-ID number of the child in the parent, or @minus{}1
+child and the process ID number of the child in the parent, or @minus{}1
upon error. In the latter case, @code{ERRNO} indicates the problem.
In the child, @code{PROCINFO["pid"]} and @code{PROCINFO["ppid"]} are
updated to reflect the correct values.
@cindex @code{waitpid()} extension function
@item ret = waitpid(pid)
-This function takes a numeric argument, which is the process-ID to
+This function takes a numeric argument, which is the process ID to
wait for. The return value is that of the
@code{waitpid()} system call.
@@ -34960,8 +34960,8 @@ else
@subsection Enabling In-Place File Editing
@cindex @code{inplace} extension
-The @code{inplace} extension emulates GNU @command{sed}'s @option{-i} option
-which performs ``in place'' editing of each input file.
+The @code{inplace} extension emulates GNU @command{sed}'s @option{-i} option,
+which performs ``in-place'' editing of each input file.
It uses the bundled @file{inplace.awk} include file to invoke the extension
properly:
@@ -34975,11 +34975,16 @@ properly:
# Please set INPLACE_SUFFIX to make a backup copy. For example, you may
# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# actions in an ENDFILE rule will be redirected as expected.
+
BEGINFILE @{
- inplace_begin(FILENAME, INPLACE_SUFFIX)
+ if (_inplace_filename != "")
+ inplace_end(_inplace_filename, INPLACE_SUFFIX)
+ inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
@}
-ENDFILE @{
+END @{
inplace_end(FILENAME, INPLACE_SUFFIX)
@}
@end group
@@ -34994,6 +34999,10 @@ If @code{INPLACE_SUFFIX} is not an empty string, the original file is
linked to a backup @value{FN} created by appending that suffix. Finally,
the temporary file is renamed to the original @value{FN}.
+The @code{_inplace_filename} variable serves to keep track of the
+current filename so as to not invoke @code{inplace_end()} before
+processing the first file.
+
If any error occurs, the extension issues a fatal error to terminate
processing immediately without damaging the original file.
@@ -35057,14 +35066,14 @@ they are read, with each entry returned as a record.
The record consists of three fields. The first two are the inode number and the
@value{FN}, separated by a forward slash character.
On systems where the directory entry contains the file type, the record
-has a third field (also separated by a slash) which is a single letter
+has a third field (also separated by a slash), which is a single letter
indicating the type of the file. The letters and their corresponding file
types are shown in @ref{table-readdir-file-types}.
@float Table,table-readdir-file-types
@caption{File types returned by the @code{readdir} extension}
@multitable @columnfractions .1 .9
-@headitem Letter @tab File Type
+@headitem Letter @tab File type
@item @code{b} @tab Block device
@item @code{c} @tab Character device
@item @code{d} @tab Directory
@@ -35092,7 +35101,7 @@ Here is an example:
@@load "readdir"
@dots{}
BEGIN @{ FS = "/" @}
-@{ print "file name is", $2 @}
+@{ print "@value{FN} is", $2 @}
@end example
@node Extension Sample Revout
@@ -35113,8 +35122,7 @@ BEGIN @{
@}
@end example
-The output from this program is:
-@samp{cinap t'nod}.
+The output from this program is @samp{cinap t'nod}.
@node Extension Sample Rev2way
@subsection Two-Way I/O Example
@@ -35169,7 +35177,7 @@ success, or zero upon failure.
@code{reada()} is the inverse of @code{writea()};
it reads the file named as its first argument, filling in
the array named as the second argument. It clears the array first.
-Here too, the return value is one on success and zero upon failure.
+Here too, the return value is one on success, or zero upon failure.
@end table
The array created by @code{reada()} is identical to that written by
@@ -35257,7 +35265,7 @@ it tries to use @code{GetSystemTimeAsFileTime()}.
Attempt to sleep for @var{seconds} seconds. If @var{seconds} is negative,
or the attempt to sleep fails, return @minus{}1 and set @code{ERRNO}.
Otherwise, return zero after sleeping for the indicated amount of time.
-Note that @var{seconds} may be a floating-point (non-integral) value.
+Note that @var{seconds} may be a floating-point (nonintegral) value.
Implementation details: depending on platform availability, this function
tries to use @code{nanosleep()} or @code{select()} to implement the delay.
@end table
@@ -35284,25 +35292,31 @@ project provides a number of @command{gawk} extensions, including one for
processing XML files. This is the evolution of the original @command{xgawk}
(XML @command{gawk}) project.
-As of this writing, there are six extensions:
+As of this writing, there are seven extensions:
@itemize @value{BULLET}
@item
+@code{errno} extension
+
+@item
GD graphics library extension
@item
+MPFR library extension
+(this provides access to a number of MPFR functions that @command{gawk}'s
+native MPFR support does not)
+
+@item
PDF extension
@item
PostgreSQL extension
@item
-MPFR library extension
-(this provides access to a number of MPFR functions which @command{gawk}'s
-native MPFR support does not)
+Redis extension
@item
-Redis extension
+Select extension
@item
XML parser extension, using the @uref{http://expat.sourceforge.net, Expat}
@@ -35352,7 +35366,7 @@ make install @ii{Install the extensions}
If you have installed @command{gawk} in the standard way, then you
will likely not need the @option{--with-gawk} option when configuring
-@code{gawkextlib}. You may also need to use the @command{sudo} utility
+@code{gawkextlib}. You may need to use the @command{sudo} utility
to install both @command{gawk} and @code{gawkextlib}, depending upon
how your system works.
@@ -35377,7 +35391,7 @@ named @code{plugin_is_GPL_compatible}.
@item
Communication between @command{gawk} and an extension is two-way.
-@command{gawk} passes a @code{struct} to the extension which contains
+@command{gawk} passes a @code{struct} to the extension that contains
various data fields and function pointers. The extension can then call
into @command{gawk} via the supplied function pointers to accomplish
certain tasks.
@@ -35390,7 +35404,7 @@ By convention, implementation functions are named @code{do_@var{XXXX}()}
for some @command{awk}-level function @code{@var{XXXX}()}.
@item
-The API is defined in a header file named @file{gawkpi.h}. You must include
+The API is defined in a header file named @file{gawkapi.h}. You must include
a number of standard header files @emph{before} including it in your source file.
@item
@@ -35435,7 +35449,7 @@ getting the count of elements in an array;
creating a new array;
clearing an array;
and
-flattening an array for easy C style looping over all its indices and elements)
+flattening an array for easy C-style looping over all its indices and elements)
@end itemize
@item
@@ -35443,7 +35457,7 @@ The API defines a number of standard data types for representing
@command{awk} values, array elements, and arrays.
@item
-The API provide convenience functions for constructing values.
+The API provides convenience functions for constructing values.
It also provides memory management functions to ensure compatibility
between memory allocated by @command{gawk} and memory allocated by an
extension.
@@ -35469,8 +35483,8 @@ file make this easier to do.
@item
The @command{gawk} distribution includes a number of small but useful
-sample extensions. The @code{gawkextlib} project includes several more,
-larger, extensions. If you wish to write an extension and contribute it
+sample extensions. The @code{gawkextlib} project includes several more
+(larger) extensions. If you wish to write an extension and contribute it
to the community of @command{gawk} users, the @code{gawkextlib} project
is the place to do so.
@@ -35486,6 +35500,24 @@ Add functions to implement system calls such as @code{chown()},
@code{chmod()}, and @code{umask()} to the file operations extension
presented in @ref{Internal File Ops}.
+@c Idea from comp.lang.awk, February 2015
+@item
+Write an input parser that prints a prompt if the input is
+a from a ``terminal'' device. You can use the @code{isatty()}
+function to tell if the input file is a terminal. (Hint: this function
+is usually expensive to call; try to call it just once.)
+The content of the prompt should come from a variable settable
+by @command{awk}-level code.
+You can write the prompt to stanard error. However,
+for best results, open a new file descriptor (or file pointer)
+on @file{/dev/tty} and print the prompt there, in case standard
+error has been redirected.
+
+Why is standard error a better
+choice than standard output for writing the prompt?
+Which reading mechanism should you replace, the one to get
+a record, or the one to read raw bytes?
+
@item
(Hard.)
How would you provide namespaces in @command{gawk}, so that the
@@ -35587,9 +35619,7 @@ online documentation}.
@node V7/SVR3.1
@appendixsec Major Changes Between V7 and SVR3.1
-@c STARTOFRANGE gawkv
@cindex @command{awk}, versions of
-@c STARTOFRANGE gawkv1
@cindex @command{awk}, versions of, changes between V7 and SVR3.1
The @command{awk} language evolved considerably between the release of
@@ -35600,83 +35630,82 @@ cross-references to further details:
@itemize @value{BULLET}
@item
The requirement for @samp{;} to separate rules on a line
-(@pxref{Statements/Lines}).
+(@pxref{Statements/Lines})
@item
User-defined functions and the @code{return} statement
-(@pxref{User-defined}).
+(@pxref{User-defined})
@item
The @code{delete} statement (@pxref{Delete}).
@item
The @code{do}-@code{while} statement
-(@pxref{Do Statement}).
+(@pxref{Do Statement})
@item
The built-in functions @code{atan2()}, @code{cos()}, @code{sin()}, @code{rand()}, and
-@code{srand()} (@pxref{Numeric Functions}).
+@code{srand()} (@pxref{Numeric Functions})
@item
The built-in functions @code{gsub()}, @code{sub()}, and @code{match()}
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
The built-in functions @code{close()} and @code{system()}
-(@pxref{I/O Functions}).
+(@pxref{I/O Functions})
@item
The @code{ARGC}, @code{ARGV}, @code{FNR}, @code{RLENGTH}, @code{RSTART},
-and @code{SUBSEP} predefined variables (@pxref{Built-in Variables}).
+and @code{SUBSEP} predefined variables (@pxref{Built-in Variables})
@item
-Assignable @code{$0} (@pxref{Changing Fields}).
+Assignable @code{$0} (@pxref{Changing Fields})
@item
The conditional expression using the ternary operator @samp{?:}
-(@pxref{Conditional Exp}).
+(@pxref{Conditional Exp})
@item
-The expression @samp{@var{index-variable} in @var{array}} outside of @code{for}
-statements (@pxref{Reference to Elements}).
+The expression @samp{@var{indx} in @var{array}} outside of @code{for}
+statements (@pxref{Reference to Elements})
@item
The exponentiation operator @samp{^}
(@pxref{Arithmetic Ops}) and its assignment operator
-form @samp{^=} (@pxref{Assignment Ops}).
+form @samp{^=} (@pxref{Assignment Ops})
@item
C-compatible operator precedence, which breaks some old @command{awk}
-programs (@pxref{Precedence}).
+programs (@pxref{Precedence})
@item
Regexps as the value of @code{FS}
(@pxref{Field Separators}) and as the
third argument to the @code{split()} function
(@pxref{String Functions}), rather than using only the first character
-of @code{FS}.
+of @code{FS}
@item
Dynamic regexps as operands of the @samp{~} and @samp{!~} operators
-(@pxref{Computed Regexps}).
+(@pxref{Computed Regexps})
@item
The escape sequences @samp{\b}, @samp{\f}, and @samp{\r}
-(@pxref{Escape Sequences}).
+(@pxref{Escape Sequences})
@item
Redirection of input for the @code{getline} function
-(@pxref{Getline}).
+(@pxref{Getline})
@item
Multiple @code{BEGIN} and @code{END} rules
-(@pxref{BEGIN/END}).
+(@pxref{BEGIN/END})
@item
Multidimensional arrays
-(@pxref{Multidimensional}).
+(@pxref{Multidimensional})
@end itemize
-@c ENDOFRANGE gawkv1
@node SVR4
@appendixsec Changes Between SVR3.1 and SVR4
@@ -35687,54 +35716,54 @@ The System V Release 4 (1989) version of Unix @command{awk} added these features
@itemize @value{BULLET}
@item
-The @code{ENVIRON} array (@pxref{Built-in Variables}).
+The @code{ENVIRON} array (@pxref{Built-in Variables})
@c gawk and MKS awk
@item
Multiple @option{-f} options on the command line
-(@pxref{Options}).
+(@pxref{Options})
@c MKS awk
@item
The @option{-v} option for assigning variables before program execution begins
-(@pxref{Options}).
+(@pxref{Options})
@c GNU, Bell Laboratories & MKS together
@item
-The @option{--} signal for terminating command-line options.
+The @option{--} signal for terminating command-line options
@item
The @samp{\a}, @samp{\v}, and @samp{\x} escape sequences
-(@pxref{Escape Sequences}).
+(@pxref{Escape Sequences})
@c GNU, for ANSI C compat
@item
A defined return value for the @code{srand()} built-in function
-(@pxref{Numeric Functions}).
+(@pxref{Numeric Functions})
@item
The @code{toupper()} and @code{tolower()} built-in string functions
for case translation
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
A cleaner specification for the @samp{%c} format-control letter in the
@code{printf} function
-(@pxref{Control Letters}).
+(@pxref{Control Letters})
@item
The ability to dynamically pass the field width and precision (@code{"%*.*d"})
in the argument list of @code{printf} and @code{sprintf()}
-(@pxref{Control Letters}).
+(@pxref{Control Letters})
@item
The use of regexp constants, such as @code{/foo/}, as expressions, where
they are equivalent to using the matching operator, as in @samp{$0 ~ /foo/}
-(@pxref{Using Constant Regexps}).
+(@pxref{Using Constant Regexps})
@item
Processing of escape sequences inside command-line variable assignments
-(@pxref{Assignment Options}).
+(@pxref{Assignment Options})
@end itemize
@node POSIX
@@ -35748,23 +35777,23 @@ introduced the following changes into the language:
@itemize @value{BULLET}
@item
The use of @option{-W} for implementation-specific options
-(@pxref{Options}).
+(@pxref{Options})
@item
The use of @code{CONVFMT} for controlling the conversion of numbers
-to strings (@pxref{Conversion}).
+to strings (@pxref{Conversion})
@item
The concept of a numeric string and tighter comparison rules to go
-with it (@pxref{Typing and Comparison}).
+with it (@pxref{Typing and Comparison})
@item
The use of predefined variables as function parameter names is forbidden
-(@pxref{Definition Syntax}).
+(@pxref{Definition Syntax})
@item
More complete documentation of many of the previously undocumented
-features of the language.
+features of the language
@end itemize
In 2012, a number of extensions that had been commonly available for
@@ -35773,15 +35802,15 @@ many years were finally added to POSIX. They are:
@itemize @value{BULLET}
@item
The @code{fflush()} built-in function for flushing buffered output
-(@pxref{I/O Functions}).
+(@pxref{I/O Functions})
@item
The @code{nextfile} statement
-(@pxref{Nextfile Statement}).
+(@pxref{Nextfile Statement})
@item
The ability to delete all of an array at once with @samp{delete @var{array}}
-(@pxref{Delete}).
+(@pxref{Delete})
@end itemize
@@ -35791,7 +35820,6 @@ not permitted by the POSIX standard.
The 2008 POSIX standard can be found online at
@url{http://www.opengroup.org/onlinepubs/9699919799/}.
-@c ENDOFRANGE gawkv
@node BTL
@appendixsec Extensions in Brian Kernighan's @command{awk}
@@ -35812,22 +35840,22 @@ originally appeared in his version of @command{awk}:
The @samp{**} and @samp{**=} operators
(@pxref{Arithmetic Ops}
and
-@ref{Assignment Ops}).
+@ref{Assignment Ops})
@item
The use of @code{func} as an abbreviation for @code{function}
-(@pxref{Definition Syntax}).
+(@pxref{Definition Syntax})
@item
The @code{fflush()} built-in function for flushing buffered output
-(@pxref{I/O Functions}).
+(@pxref{I/O Functions})
@ignore
@item
The @code{SYMTAB} array, that allows access to @command{awk}'s internal symbol
table. This feature was never documented for his @command{awk}, largely because
it is somewhat shakily implemented. For instance, you cannot access arrays
-or array elements through it.
+or array elements through it
@end ignore
@end itemize
@@ -35837,11 +35865,8 @@ available in his @command{awk}.
@node POSIX/GNU
@appendixsec Extensions in @command{gawk} Not in POSIX @command{awk}
-@c STARTOFRANGE fripls
@cindex compatibility mode (@command{gawk}), extensions
-@c STARTOFRANGE exgnot
@cindex extensions, in @command{gawk}, not in POSIX @command{awk}
-@c STARTOFRANGE posnot
@cindex POSIX, @command{gawk} extensions not included in
The GNU implementation, @command{gawk}, adds a large number of features.
They can all be disabled with either the @option{--traditional} or
@@ -35860,7 +35885,7 @@ Additional predefined variables:
@itemize @value{MINUS}
@item
The
-@code{ARGIND}
+@code{ARGIND},
@code{BINMODE},
@code{ERRNO},
@code{FIELDWIDTHS},
@@ -35872,7 +35897,7 @@ The
and
@code{TEXTDOMAIN}
variables
-(@pxref{Built-in Variables}).
+(@pxref{Built-in Variables})
@end itemize
@item
@@ -35880,15 +35905,15 @@ Special files in I/O redirections:
@itemize @value{MINUS}
@item
-The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and
+The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr}, and
@file{/dev/fd/@var{N}} special @value{FN}s
-(@pxref{Special Files}).
+(@pxref{Special Files})
@item
The @file{/inet}, @file{/inet4}, and @samp{/inet6} special files for
TCP/IP networking using @samp{|&} to specify which version of the
IP protocol to use
-(@pxref{TCP/IP Networking}).
+(@pxref{TCP/IP Networking})
@end itemize
@item
@@ -35897,37 +35922,41 @@ Changes and/or additions to the language:
@itemize @value{MINUS}
@item
The @samp{\x} escape sequence
-(@pxref{Escape Sequences}).
+(@pxref{Escape Sequences})
@item
Full support for both POSIX and GNU regexps
-(@pxref{Regexp}).
+(@pxref{Regexp})
@item
The ability for @code{FS} and for the third
argument to @code{split()} to be null strings
-(@pxref{Single Character Fields}).
+(@pxref{Single Character Fields})
@item
The ability for @code{RS} to be a regexp
-(@pxref{Records}).
+(@pxref{Records})
@item
The ability to use octal and hexadecimal constants in @command{awk}
program source code
-(@pxref{Nondecimal-numbers}).
+(@pxref{Nondecimal-numbers})
@item
The @samp{|&} operator for two-way I/O to a coprocess
-(@pxref{Two-way I/O}).
+(@pxref{Two-way I/O})
@item
Indirect function calls
-(@pxref{Indirect Calls}).
+(@pxref{Indirect Calls})
@item
Directories on the command line produce a warning and are skipped
-(@pxref{Command-line directories}).
+(@pxref{Command-line directories})
+
+@item
+Output with @code{print} and @code{printf} need not be fatal
+(@pxref{Nonfatal})
@end itemize
@item
@@ -35936,11 +35965,11 @@ New keywords:
@itemize @value{MINUS}
@item
The @code{BEGINFILE} and @code{ENDFILE} special patterns
-(@pxref{BEGINFILE/ENDFILE}).
+(@pxref{BEGINFILE/ENDFILE})
@item
The @code{switch} statement
-(@pxref{Switch Statement}).
+(@pxref{Switch Statement})
@end itemize
@item
@@ -35950,30 +35979,30 @@ Changes to standard @command{awk} functions:
@item
The optional second argument to @code{close()} that allows closing one end
of a two-way pipe to a coprocess
-(@pxref{Two-way I/O}).
+(@pxref{Two-way I/O})
@item
-POSIX compliance for @code{gsub()} and @code{sub()} with @option{--posix}.
+POSIX compliance for @code{gsub()} and @code{sub()} with @option{--posix}
@item
The @code{length()} function accepts an array argument
and returns the number of elements in the array
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
The optional third argument to the @code{match()} function
for capturing text-matching subexpressions within a regexp
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
Positional specifiers in @code{printf} formats for
making translations easier
-(@pxref{Printf Ordering}).
+(@pxref{Printf Ordering})
@item
The @code{split()} function's additional optional fourth
-argument which is an array to hold the text of the field separators
-(@pxref{String Functions}).
+argument, which is an array to hold the text of the field separators
+(@pxref{String Functions})
@end itemize
@item
@@ -35983,16 +36012,16 @@ Additional functions only in @command{gawk}:
@item
The @code{gensub()}, @code{patsplit()}, and @code{strtonum()} functions
for more powerful text manipulation
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
The @code{asort()} and @code{asorti()} functions for sorting arrays
-(@pxref{Array Sorting}).
+(@pxref{Array Sorting})
@item
The @code{mktime()}, @code{systime()}, and @code{strftime()}
functions for working with timestamps
-(@pxref{Time Functions}).
+(@pxref{Time Functions})
@item
The
@@ -36004,17 +36033,22 @@ The
and
@code{xor()}
functions for bit manipulation
-(@pxref{Bitwise Functions}).
+(@pxref{Bitwise Functions})
@c In 4.1, and(), or() and xor() grew the ability to take > 2 arguments
@item
The @code{isarray()} function to check if a variable is an array or not
-(@pxref{Type Functions}).
+(@pxref{Type Functions})
@item
-The @code{bindtextdomain()}, @code{dcgettext()} and @code{dcngettext()}
+The @code{bindtextdomain()}, @code{dcgettext()}, and @code{dcngettext()}
functions for internationalization
-(@pxref{Programmer i18n}).
+(@pxref{Programmer i18n})
+
+@item
+The @code{intdiv()} function for doing integer
+division and remainder
+(@pxref{Numeric Functions})
@end itemize
@item
@@ -36024,12 +36058,12 @@ Changes and/or additions in the command-line options:
@item
The @env{AWKPATH} environment variable for specifying a path search for
the @option{-f} command-line option
-(@pxref{Options}).
+(@pxref{Options})
@item
The @env{AWKLIBPATH} environment variable for specifying a path search for
the @option{-l} command-line option
-(@pxref{Options}).
+(@pxref{Options})
@item
The
@@ -36058,7 +36092,7 @@ The
and
@option{-V}
short options. Also, the
-ability to use GNU-style long-named options that start with @option{--}
+ability to use GNU-style long-named options that start with @option{--},
and the
@option{--assign},
@option{--bignum},
@@ -36138,7 +36172,7 @@ GCC for VAX and Alpha has not been tested for a while.
@end itemize
@item
-Support for the following obsolete systems was removed from the code
+Support for the following obsolete system was removed from the code
for @command{gawk} @value{PVERSION} 4.1:
@c nested table
@@ -36148,16 +36182,19 @@ Ultrix
@end itemize
@item
-@c FIXME: Verify the version here.
-Support for MirBSD was removed at @command{gawk} @value{PVERSION} 4.2.
+Support for the following systems was removed from the code
+for @command{gawk} @value{PVERSION} 4.2:
+
+@c nested table
+@itemize @value{MINUS}
+@item
+MirBSD
+@end itemize
@end itemize
@c XXX ADD MORE STUFF HERE
-@c ENDOFRANGE fripls
-@c ENDOFRANGE exgnot
-@c ENDOFRANGE posnot
@c This does not need to be in the formal book.
@ifclear FOR_PRINT
@@ -36766,6 +36803,44 @@ with a minimum of two
The dynamic extension interface was completely redone
(@pxref{Dynamic Extensions}).
+@item
+Support for Ultrix was removed.
+
+@end itemize
+
+Version 4.2 introduced the following changes:
+
+@itemize @bullet
+@item
+Changes to @code{ENVIRON} are reflected into @command{gawk}'s
+environment and that of programs that it runs.
+@xref{Auto-set}.
+
+@item
+The @option{--pretty-print} option no longer runs the @command{awk}
+program too.
+@xref{Options}.
+
+@item
+The @command{igawk} program and its manual page are no longer
+installed when @command{gawk} is built.
+@xref{Igawk Program}.
+
+@item
+The @code{intdiv()} function.
+@xref{Numeric Functions}.
+
+@item
+The maximum number of hexdecimal digits in @samp{\x} escapes
+is now two.
+@xref{Escape Sequences}.
+
+@item
+Nonfatal output with @code{print} and @code{printf}.
+@xref{Nonfatal}.
+
+@item
+Support for MirBSD was removed.
@end itemize
@c XXX ADD MORE STUFF HERE
@@ -36781,9 +36856,9 @@ by @command{gawk}, Brian Kernighan's @command{awk}, and @command{mawk},
the three most widely used freely available versions of @command{awk}
(@pxref{Other Versions}).
-@multitable {@file{/dev/stderr} special file} {BWK Awk} {Mawk} {GNU Awk} {Now standard}
-@headitem Feature @tab BWK Awk @tab Mawk @tab GNU Awk @tab Now standard
-@item @samp{\x} Escape sequence @tab X @tab X @tab X @tab
+@multitable {@file{/dev/stderr} special file} {BWK @command{awk}} {@command{mawk}} {@command{gawk}} {Now standard}
+@headitem Feature @tab BWK @command{awk} @tab @command{mawk} @tab @command{gawk} @tab Now standard
+@item @samp{\x} escape sequence @tab X @tab X @tab X @tab
@item @code{FS} as null string @tab X @tab X @tab X @tab
@item @file{/dev/stdin} special file @tab X @tab X @tab X @tab
@item @file{/dev/stdout} special file @tab X @tab X @tab X @tab
@@ -36814,7 +36889,7 @@ in the machine's native character set. Thus, on ASCII-based systems,
@samp{[a-z]} matched all the lowercase letters, and only the lowercase
letters, as the numeric values for the letters from @samp{a} through
@samp{z} were contiguous. (On an EBCDIC system, the range @samp{[a-z]}
-includes additional, non-alphabetic characters as well.)
+includes additional nonalphabetic characters as well.)
Almost all introductory Unix literature explained range expressions
as working in this fashion, and in particular, would teach that the
@@ -36839,7 +36914,7 @@ What does that mean?
In many locales, @samp{A} and @samp{a} are both less than @samp{B}.
In other words, these locales sort characters in dictionary order,
and @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
-instead it might be equivalent to @samp{[ABCXYabcdxyz]}, for example.
+instead, it might be equivalent to @samp{[ABCXYabcdxyz]}, for example.
This point needs to be emphasized: much literature teaches that you should
use @samp{[a-z]} to match a lowercase character. But on systems with
@@ -36868,23 +36943,23 @@ is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as @code{en_US.UTF-8}.
Early versions of @command{gawk} used regexp matching code that was not
-locale aware, so ranges had their traditional interpretation.
+locale-aware, so ranges had their traditional interpretation.
When @command{gawk} switched to using locale-aware regexp matchers,
the problems began; especially as both GNU/Linux and commercial Unix
vendors started implementing non-ASCII locales, @emph{and making them
the default}. Perhaps the most frequently asked question became something
-like ``why does @samp{[A-Z]} match lowercase letters?!?''
+like, ``Why does @samp{[A-Z]} match lowercase letters?!?''
@cindex Berry, Karl
This situation existed for close to 10 years, if not more, and
the @command{gawk} maintainer grew weary of trying to explain that
-@command{gawk} was being nicely standards compliant, and that the issue
+@command{gawk} was being nicely standards-compliant, and that the issue
was in the user's locale. During the development of @value{PVERSION} 4.0,
he modified @command{gawk} to always treat ranges in the original,
pre-POSIX fashion, unless @option{--posix} was used (@pxref{Options}).@footnote{And
thus was born the Campaign for Rational Range Interpretation (or
-RRI). A number of GNU tools have either implemented this change,
+RRI). A number of GNU tools have already implemented this change,
or will soon. Thanks to Karl Berry for coining the phrase ``Rational
Range Interpretation.''}
@@ -36898,9 +36973,10 @@ and
By using this lovely technical term, the standard gives license
to implementors to implement ranges in whatever way they choose.
-The @command{gawk} maintainer chose to apply the pre-POSIX meaning in all
-cases: the default regexp matching; with @option{--traditional} and with
-@option{--posix}; in all cases, @command{gawk} remains POSIX compliant.
+The @command{gawk} maintainer chose to apply the pre-POSIX meaning
+both with the default regexp matching and when @option{--traditional} or
+@option{--posix} are used.
+In all cases @command{gawk} remains POSIX-compliant.
@node Contributors
@appendixsec Major Contributors to @command{gawk}
@@ -36946,7 +37022,7 @@ to around 90 pages.
Richard Stallman
helped finish the implementation and the initial draft of this
@value{DOCUMENT}.
-He is also the founder of the FSF and the GNU project.
+He is also the founder of the FSF and the GNU Project.
@item
@cindex Woods, John
@@ -37110,28 +37186,28 @@ John Haque made the following contributions:
@itemize @value{MINUS}
@item
The modifications to convert @command{gawk}
-into a byte-code interpreter, including the debugger.
+into a byte-code interpreter, including the debugger
@item
-The addition of true arrays of arrays.
+The addition of true arrays of arrays
@item
-The additional modifications for support of arbitrary-precision arithmetic.
+The additional modifications for support of arbitrary-precision arithmetic
@item
The initial text of
-@ref{Arbitrary Precision Arithmetic}.
+@ref{Arbitrary Precision Arithmetic}
@item
The work to merge the three versions of @command{gawk}
-into one, for the 4.1 release.
+into one, for the 4.1 release
@item
-Improved array internals for arrays indexed by integers.
+Improved array internals for arrays indexed by integers
@item
-The improved array sorting features were driven by John together
-with Pat Rankin.
+The improved array sorting features were also driven by John, together
+with Pat Rankin
@end itemize
@cindex Papadopoulos, Panos
@@ -37172,10 +37248,10 @@ helping David Trueman, and as the primary maintainer since around 1994.
@itemize @value{BULLET}
@item
The @command{awk} language has evolved over time. The first release
-was with V7 Unix circa 1978. In 1987, for System V Release 3.1,
+was with V7 Unix, circa 1978. In 1987, for System V Release 3.1,
major additions, including user-defined functions, were made to the language.
Additional changes were made for System V Release 4, in 1989.
-Since then, further minor changes happen under the auspices of the
+Since then, further minor changes have happened under the auspices of the
POSIX standard.
@item
@@ -37191,7 +37267,7 @@ options.
The interaction of POSIX locales and regexp matching in @command{gawk} has been confusing over
the years. Today, @command{gawk} implements Rational Range Interpretation, where
ranges of the form @samp{[a-z]} match @emph{only} the characters numerically between
-@samp{a} through @samp{z} in the machine's native character set. Usually this is ASCII
+@samp{a} through @samp{z} in the machine's native character set. Usually this is ASCII,
but it can be EBCDIC on IBM S/390 systems.
@item
@@ -37206,9 +37282,7 @@ the appropriate credit where credit is due.
@c last two commas are part of see also
@cindex operating systems, See Also GNU/Linux@comma{} PC operating systems@comma{} Unix
-@c STARTOFRANGE gligawk
@cindex @command{gawk}, installing
-@c STARTOFRANGE ingawk
@cindex installing @command{gawk}
This appendix provides instructions for installing @command{gawk} on the
various platforms that are supported by the developers. The primary
@@ -37278,7 +37352,7 @@ will be less busy, and you can usually find one closer to your site.
@command{gawk} is distributed as several @code{tar} files compressed with
different compression programs: @command{gzip}, @command{bzip2},
and @command{xz}. For simplicity, the rest of these instructions assume
-you are using the one compressed with the GNU Zip program, @code{gzip}.
+you are using the one compressed with the GNU Gzip program (@command{gzip}).
Once you have the distribution (e.g.,
@file{gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz}),
@@ -37318,7 +37392,6 @@ a local expert.
@node Distribution contents
@appendixsubsec Contents of the @command{gawk} Distribution
-@c STARTOFRANGE gawdis
@cindex @command{gawk}, distribution
The @command{gawk} distribution has a number of C source files,
@@ -37330,12 +37403,12 @@ operating systems:
@table @asis
@item Various @samp{.c}, @samp{.y}, and @samp{.h} files
-The actual @command{gawk} source code.
+These files contain the actual @command{gawk} source code.
@end table
@table @file
@item ABOUT-NLS
-Information about GNU @command{gettext} and translations.
+A file containing information about GNU @command{gettext} and translations.
@item AUTHORS
A file with some information about the authorship of @command{gawk}.
@@ -37365,7 +37438,7 @@ An older list of changes to @command{gawk}.
The GNU General Public License.
@item POSIX.STD
-A description of behaviors in the POSIX standard for @command{awk} which
+A description of behaviors in the POSIX standard for @command{awk} that
are left undefined, or where @command{gawk} may not comply fully, as well
as a list of things that the POSIX standard should describe but does not.
@@ -37416,10 +37489,10 @@ The generated Info file for this @value{DOCUMENT}.
@item doc/gawkinet.texi
The Texinfo source file for
@ifinfo
-@inforef{Top, , General Introduction, gawkinet, TCP/IP Internetworking with @command{gawk}}.
+@inforef{Top, , General Introduction, gawkinet, @value{GAWKINETTITLE}}.
@end ifinfo
@ifnotinfo
-@cite{TCP/IP Internetworking with @command{gawk}}.
+@cite{@value{GAWKINETTITLE}}.
@end ifnotinfo
It should be processed with @TeX{}
(via @command{texi2dvi} or @command{texi2pdf})
@@ -37428,7 +37501,7 @@ with @command{makeinfo} to produce an Info or HTML file.
@item doc/gawkinet.info
The generated Info file for
-@cite{TCP/IP Internetworking with @command{gawk}}.
+@cite{@value{GAWKINETTITLE}}.
@item doc/igawk.1
The @command{troff} source for a manual page describing the @command{igawk}
@@ -37517,7 +37590,6 @@ directory to run your version of @command{gawk} against the test suite.
If @command{gawk} successfully passes @samp{make check}, then you can
be confident of a successful port.
@end table
-@c ENDOFRANGE gawdis
@node Unix Installation
@appendixsec Compiling and Installing @command{gawk} on Unix-Like Systems
@@ -37668,7 +37740,7 @@ can be configured and compiled.
@cindex @option{--disable-lint} configuration option
@cindex configuration option, @code{--disable-lint}
@item --disable-lint
-Disable all lint checking within @code{gawk}. The
+Disable all lint checking within @command{gawk}. The
@option{--lint} and @option{--lint-old} options
(@pxref{Options})
are accepted, but silently do nothing.
@@ -37676,14 +37748,17 @@ Similarly, setting the @code{LINT} variable
(@pxref{User-modified})
has no effect on the running @command{awk} program.
-When used with GCC's automatic dead-code-elimination, this option
+When used with the GNU Compiler Collection's (GCC's)
+automatic dead-code-elimination, this option
cuts almost 23K bytes off the size of the @command{gawk}
executable on GNU/Linux x86_64 systems. Results on other systems and
with other compilers are likely to vary.
Using this option may bring you some slight performance improvement.
+@quotation CAUTION
Using this option will cause some of the tests in the test suite
to fail. This option may be removed at a later date.
+@end quotation
@cindex @option{--disable-nls} configuration option
@cindex configuration option, @code{--disable-nls}
@@ -37780,10 +37855,10 @@ running MS-DOS, any version of MS-Windows, or OS/2.
running MS-DOS and any version of MS-Windows.
@end ifset
In this @value{SECTION}, the term ``Windows32''
-refers to any of Microsoft Windows-95/98/ME/NT/2000/XP/Vista/7/8.
+refers to any of Microsoft Windows 95/98/ME/NT/2000/XP/Vista/7/8.
The limitations of MS-DOS (and MS-DOS shells under the other operating
-systems) has meant that various ``DOS extenders'' are often used with
+systems) have meant that various ``DOS extenders'' are often used with
programs such as @command{gawk}. The varying capabilities of Microsoft
Windows 3.1 and Windows32 can add to the confusion. For an overview
of the considerations, refer to @file{README_d/README.pc} in
@@ -37982,9 +38057,7 @@ multibyte functionality is not available.
@node PC Using
@appendixsubsubsec Using @command{gawk} on PC Operating Systems
-@c STARTOFRANGE opgawx
@cindex operating systems, PC, @command{gawk} on
-@c STARTOFRANGE pcgawon
@cindex PC operating systems, @command{gawk} on
Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support
@@ -38044,7 +38117,7 @@ Under MS-Windows, OS/2 and MS-DOS,
Under MS-Windows and MS-DOS,
@end ifset
@command{gawk} (and many other text programs) silently
-translate end-of-line @samp{\r\n} to @samp{\n} on input and @samp{\n}
+translates end-of-line @samp{\r\n} to @samp{\n} on input and @samp{\n}
to @samp{\r\n} on output. A special @code{BINMODE} variable @value{COMMONEXT}
allows control over these translations and is interpreted as follows:
@@ -38078,7 +38151,7 @@ Setting @code{BINMODE} for standard input or
standard output is accomplished by using an
appropriate @samp{-v BINMODE=@var{N}} option on the command line.
@code{BINMODE} is set at the time a file or pipe is opened and cannot be
-changed mid-stream.
+changed midstream.
The name @code{BINMODE} was chosen to match @command{mawk}
(@pxref{Other Versions}).
@@ -38134,8 +38207,8 @@ moved into the @code{BEGIN} rule.
@command{gawk} can be built and used ``out of the box'' under MS-Windows
if you are using the @uref{http://www.cygwin.com, Cygwin environment}.
-This environment provides an excellent simulation of GNU/Linux, using the
-GNU tools, such as Bash, the GNU Compiler Collection (GCC), GNU Make,
+This environment provides an excellent simulation of GNU/Linux, using
+Bash, GCC, GNU Make,
and other GNU programs. Compilation and installation for Cygwin is the
same as for a Unix system:
@@ -38154,7 +38227,7 @@ and then the @samp{make} proceeds as usual.
@appendixsubsubsec Using @command{gawk} In The MSYS Environment
In the MSYS environment under MS-Windows, @command{gawk} automatically
-uses binary mode for reading and writing files. Thus there is no
+uses binary mode for reading and writing files. Thus, there is no
need to use the @code{BINMODE} variable.
This can cause problems with other Unix-like components that have
@@ -38218,7 +38291,7 @@ With ODS-5 volumes and extended parsing enabled, the case of the target
parameter may need to be exact.
@command{gawk} has been tested under VAX/VMS 7.3 and Alpha/VMS 7.3-1
-using Compaq C V6.4, and Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.
+using Compaq C V6.4, and under Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.
The most recent builds used HP C V7.3 on Alpha VMS 8.3 and both
Alpha and IA64 VMS 8.4 used HP C 7.3.@footnote{The IA64 architecture
is also known as ``Itanium.''}
@@ -38266,7 +38339,7 @@ For VAX:
/name=(as_is,short)
@end example
-Compile time macros need to be defined before the first VMS-supplied
+Compile-time macros need to be defined before the first VMS-supplied
header file is included, as follows:
@example
@@ -38313,7 +38386,7 @@ If your @command{gawk} was installed by a PCSI kit into the
@file{GNV$GNU:[vms_help]gawk.hlp}.
The PCSI kit also installs a @file{GNV$GNU:[vms_bin]gawk_verb.cld} file
-which can be used to add @command{gawk} and @command{awk} as DCL commands.
+that can be used to add @command{gawk} and @command{awk} as DCL commands.
For just the current process you can use:
@@ -38322,7 +38395,7 @@ $ @kbd{set command gnv$gnu:[vms_bin]gawk_verb.cld}
@end example
Or the system manager can use @file{GNV$GNU:[vms_bin]gawk_verb.cld} to
-add the @command{gawk} and @command{awk} to the system wide @samp{DCLTABLES}.
+add the @command{gawk} and @command{awk} to the system-wide @samp{DCLTABLES}.
The DCL syntax is documented in the @file{gawk.hlp} file.
@@ -38388,14 +38461,14 @@ The @code{exit} value is a Unix-style value and is encoded into a VMS exit
status value when the program exits.
The VMS severity bits will be set based on the @code{exit} value.
-A failure is indicated by 1 and VMS sets the @code{ERROR} status.
-A fatal error is indicated by 2 and VMS sets the @code{FATAL} status.
+A failure is indicated by 1, and VMS sets the @code{ERROR} status.
+A fatal error is indicated by 2, and VMS sets the @code{FATAL} status.
All other values will have the @code{SUCCESS} status. The exit value is
encoded to comply with VMS coding standards and will have the
@code{C_FACILITY_NO} of @code{0x350000} with the constant @code{0xA000}
added to the number shifted over by 3 bits to make room for the severity codes.
-To extract the actual @command{gawk} exit code from the VMS status use:
+To extract the actual @command{gawk} exit code from the VMS status, use:
@example
unix_status = (vms_status .and. &x7f8) / 8
@@ -38414,7 +38487,7 @@ VAX/VMS floating point uses unbiased rounding. @xref{Round Function}.
VMS reports time values in GMT unless one of the @code{SYS$TIMEZONE_RULE}
or @code{TZ} logical names is set. Older versions of VMS, such as VAX/VMS
-7.3 do not set these logical names.
+7.3, do not set these logical names.
@c @cindex directory search
@c @cindex path, search
@@ -38432,7 +38505,7 @@ translation and not a multitranslation @code{RMS} searchlist.
The VMS GNV package provides a build environment similar to POSIX with ports
of a collection of open source tools. The @command{gawk} found in the GNV
-base kit is an older port. Currently the GNV project is being reorganized
+base kit is an older port. Currently, the GNV project is being reorganized
to supply individual PCSI packages for each component.
See @w{@uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}.}
@@ -38492,8 +38565,6 @@ $ @kbd{gawk :== $sys$common:[syshlp.examples.tcpip.snmp]gawk.exe}
This is apparently @value{PVERSION} 2.15.6, which is extremely old. We
recommend compiling and using the current version.
-@c ENDOFRANGE opgawx
-@c ENDOFRANGE pcgawon
@node Bugs
@appendixsec Reporting Problems and Bugs
@@ -38504,12 +38575,10 @@ recommend compiling and using the current version.
@end quotation
@c the radio show, not the book. :-)
-@c STARTOFRANGE dbugg
@cindex debugging @command{gawk}, bug reports
-@c STARTOFRANGE tblgawb
@cindex troubleshooting, @command{gawk}, bug reports
If you have problems with @command{gawk} or think that you have found a bug,
-report it to the developers; we cannot promise to do anything
+report it to the developers; we cannot promise to do anything,
but we might well want to fix it.
Before reporting a bug, make sure you have really found a genuine bug.
@@ -38519,7 +38588,7 @@ to do something or not, report that too; it's a bug in the documentation!
Before reporting a bug or trying to fix it yourself, try to isolate it
to the smallest possible @command{awk} program and input @value{DF} that
-reproduces the problem. Then send us the program and @value{DF},
+reproduce the problem. Then send us the program and @value{DF},
some idea of what kind of Unix system you're using,
the compiler you used to compile @command{gawk}, and the exact results
@command{gawk} gave you. Also say what you expected to occur; this helps
@@ -38534,7 +38603,7 @@ You can get this information with the command @samp{gawk --version}.
Once you have a precise problem description, send email to
@EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}.
-The @command{gawk} maintainers subscribe to this address and
+The @command{gawk} maintainers subscribe to this address, and
thus they will receive your bug report.
Although you can send mail to the maintainers directly,
the bug reporting address is preferred because the
@@ -38561,8 +38630,8 @@ bug reporting system, you should also send a copy to
This is for two reasons. First, although some distributions forward
bug reports ``upstream'' to the GNU mailing list, many don't, so there is a good
chance that the @command{gawk} maintainers won't even see the bug report! Second,
-mail to the GNU list is archived, and having everything at the GNU project
-keeps things self-contained and not dependant on other organizations.
+mail to the GNU list is archived, and having everything at the GNU Project
+keeps things self-contained and not dependent on other organizations.
@end quotation
Non-bug suggestions are always welcome as well. If you have questions
@@ -38571,7 +38640,7 @@ features, ask on the bug list; we will try to help you out if we can.
If you find bugs in one of the non-Unix ports of @command{gawk},
send an email to the bug list, with a copy to the
-person who maintains that port. They are named in the following list,
+person who maintains that port. The maintainers are named in the following list,
as well as in the @file{README} file in the @command{gawk} distribution.
Information in the @file{README} file should be considered authoritative
if it conflicts with this @value{DOCUMENT}.
@@ -38586,29 +38655,26 @@ The people maintaining the various @command{gawk} ports are:
@cindex Robbins, Arnold
@cindex Zaretskii, Eli
@multitable {MS-Windows with MinGW} {123456789012345678901234567890123456789001234567890}
-@item Unix and POSIX systems @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}.
+@item Unix and POSIX systems @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}
-@item MS-DOS with DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net}.
+@item MS-DOS with DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net}
-@item MS-Windows with MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}.
+@item MS-Windows with MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}
@c Leave this in the print version on purpose.
@c OS/2 is not mentioned anywhere else in the print version though.
-@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}.
+@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}
-@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}.
+@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}
-@item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}.
+@item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}
@end multitable
If your bug is also reproducible under Unix, send a copy of your
report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org} email list as well.
-@c ENDOFRANGE dbugg
-@c ENDOFRANGE tblgawb
@node Other Versions
@appendixsec Other Freely Available @command{awk} Implementations
-@c STARTOFRANGE awkim
@cindex @command{awk}, implementations
@ignore
From: emory!amc.com!brennan (Michael Brennan)
@@ -38620,7 +38686,7 @@ Date: Wed, 4 Sep 1996 08:11:48 -0700 (PDT)
@cindex Brennan, Michael
@ifnotdocbook
@quotation
-@i{It's kind of fun to put comments like this in your awk code.}@*
+@i{It's kind of fun to put comments like this in your awk code:}@*
@ @ @ @ @ @ @code{// Do C++ comments work? answer: yes! of course}
@author Michael Brennan
@end quotation
@@ -38661,14 +38727,14 @@ It is available in several archive formats:
@end table
@cindex @command{git} utility
-You can also retrieve it from Git Hub:
+You can also retrieve it from GitHub:
@example
git clone git://github.com/onetrueawk/awk bwkawk
@end example
@noindent
-This command creates a copy of the @uref{http://www.git-scm.com, Git}
+This command creates a copy of the @uref{http://git-scm.com, Git}
repository in a directory named @file{bwkawk}. If you leave that argument
off the @command{git} command line, the repository copy is created in a
directory named @file{awk}.
@@ -38721,7 +38787,7 @@ for a list of extensions in @command{mawk} that are not in POSIX @command{awk}.
@item @command{awka}
Written by Andrew Sumner,
@command{awka} translates @command{awk} programs into C, compiles them,
-and links them with a library of functions that provides the core
+and links them with a library of functions that provide the core
@command{awk} functionality.
It also has a number of extensions.
@@ -38733,7 +38799,7 @@ To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}.
@c andrewsumner@@yahoo.net
The project seems to be frozen; no new code changes have been made
-since approximately 2003.
+since approximately 2001.
@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk})
@@ -38742,17 +38808,17 @@ since approximately 2003.
Nelson H.F.@: Beebe at the University of Utah has modified
BWK @command{awk} to provide timing and profiling information.
It is different from @command{gawk} with the @option{--profile} option
-(@pxref{Profiling}),
+(@pxref{Profiling})
in that it uses CPU-based profiling, not line-count
profiling. You may find it at either
@uref{ftp://ftp.math.utah.edu/pub/pawk/pawk-20030606.tar.gz}
or
@uref{http://www.math.utah.edu/pub/pawk/pawk-20030606.tar.gz}.
-@item Busybox Awk
-@cindex Busybox Awk
-@cindex source code, Busybox Awk
-Busybox is a GPL-licensed program providing small versions of many
+@item BusyBox @command{awk}
+@cindex BusyBox Awk
+@cindex source code, BusyBox Awk
+BusyBox is a GPL-licensed program providing small versions of many
applications within a single executable. It is aimed at embedded systems.
It includes a full implementation of POSIX @command{awk}. When building
it, be careful not to do @samp{make install} as it will overwrite
@@ -38764,7 +38830,7 @@ information, see the @uref{http://busybox.net, project's home page}.
@cindex source code, Solaris @command{awk}
@item The OpenSolaris POSIX @command{awk}
The versions of @command{awk} in @file{/usr/xpg4/bin} and
-@file{/usr/xpg6/bin} on Solaris are more-or-less POSIX-compliant.
+@file{/usr/xpg6/bin} on Solaris are more or less POSIX-compliant.
They are based on the @command{awk} from Mortice Kern Systems for PCs.
We were able to make this code compile and work under GNU/Linux
with 1--2 hours of work. Making it more generally portable (using
@@ -38805,9 +38871,9 @@ features to Python. See @uref{https://github.com/alecthomas/pawk}
for more information. (This is not related to Nelson Beebe's
modified version of BWK @command{awk}, described earlier.)
-@item @w{QSE Awk}
-@cindex QSE Awk
-@cindex source code, QSE Awk
+@item @w{QSE @command{awk}}
+@cindex QSE @command{awk}
+@cindex source code, QSE @command{awk}
This is an embeddable @command{awk} interpreter. For more information,
see @uref{http://code.google.com/p/qse/} and @uref{http://awk.info/?tools/qse}.
@@ -38826,17 +38892,16 @@ since approximately 2008.
@item Other versions
See also the ``Versions and implementations'' section of the
@uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations,
-Wikipedia article} for information on additional versions.
+Wikipedia article} on @command{awk} for information on additional versions.
@end table
-@c ENDOFRANGE awkim
@node Installation summary
@appendixsec Summary
@itemize @value{BULLET}
@item
-The @command{gawk} distribution is available from GNU project's main
+The @command{gawk} distribution is available from the GNU Project's main
distribution site, @code{ftp.gnu.org}. The canonical build recipe is:
@example
@@ -38848,34 +38913,30 @@ cd gawk-@value{VERSION}.@value{PATCHLEVEL}
@item
@command{gawk} may be built on non-POSIX systems as well. The currently
-supported systems are MS-Windows using DJGPP, MSYS, MinGW and Cygwin,
+supported systems are MS-Windows using DJGPP, MSYS, MinGW, and Cygwin,
@ifclear FOR_PRINT
OS/2 using EMX,
@end ifclear
and both Vax/VMS and OpenVMS.
-Instructions for each system are included in this @value{CHAPTER}.
+Instructions for each system are included in this @value{APPENDIX}.
@item
Bug reports should be sent via email to @email{bug-gawk@@gnu.org}.
-Bug reports should be in English, and should include the version of @command{gawk},
-how it was compiled, and a short program and @value{DF} which demonstrate
+Bug reports should be in English and should include the version of @command{gawk},
+how it was compiled, and a short program and @value{DF} that demonstrate
the problem.
@item
There are a number of other freely available @command{awk}
-implementations. Many are POSIX compliant; others are less so.
+implementations. Many are POSIX-compliant; others are less so.
@end itemize
-@c ENDOFRANGE gligawk
-@c ENDOFRANGE ingawk
@ifclear FOR_PRINT
@node Notes
@appendix Implementation Notes
-@c STARTOFRANGE gawii
@cindex @command{gawk}, implementation issues
-@c STARTOFRANGE impis
@cindex implementation issues, @command{gawk}
This appendix contains information mainly of interest to implementers and
@@ -38951,7 +39012,7 @@ However, if you want to modify @command{gawk} and contribute back your
changes, you will probably wish to work with the development version.
To do so, you will need to access the @command{gawk} source code
repository. The code is maintained using the
-@uref{http://git-scm.com/, Git distributed version control system}.
+@uref{http://git-scm.com, Git distributed version control system}.
You will need to install it if your system doesn't have it.
Once you have done so, use the command:
@@ -38980,11 +39041,8 @@ that has a Git plug-in for working with Git repositories.
@node Adding Code
@appendixsubsec Adding New Features
-@c STARTOFRANGE adfgaw
@cindex adding, features to @command{gawk}
-@c STARTOFRANGE fadgaw
@cindex features, adding to @command{gawk}
-@c STARTOFRANGE gawadf
@cindex @command{gawk}, features, adding
You are free to add any new features you like to @command{gawk}.
However, if you want your changes to be incorporated into the @command{gawk}
@@ -39019,7 +39077,7 @@ for information on getting the latest version of @command{gawk}.)
@item
@ifnotinfo
-Follow the @uref{http://www.gnu.org/prep/standards/, @cite{GNU Coding Standards}}.
+Follow the @cite{GNU Coding Standards}.
@end ifnotinfo
@ifinfo
See @inforef{Top, , Version, standards, GNU Coding Standards}.
@@ -39028,7 +39086,7 @@ This document describes how GNU software should be written. If you haven't
read it, please do so, preferably @emph{before} starting to modify @command{gawk}.
(The @cite{GNU Coding Standards} are available from
the GNU Project's
-@uref{http://www.gnu.org/prep/standards_toc.html, website}.
+@uref{http://www.gnu.org/prep/standards/, website}.
Texinfo, Info, and DVI versions are also available.)
@cindex @command{gawk}, coding style in
@@ -39151,9 +39209,6 @@ Although this sounds like a lot of work, please remember that while you
may write the new code, I have to maintain it and support it. If it
isn't possible for me to do that with a minimum of extra work, then I
probably will not.
-@c ENDOFRANGE adfgaw
-@c ENDOFRANGE gawadf
-@c ENDOFRANGE fadgaw
@node New Ports
@appendixsubsec Porting @command{gawk} to a New Operating System
@@ -39287,7 +39342,6 @@ coding style and brace layout that suits your taste.
@node Derived Files
@appendixsubsec Why Generated Files Are Kept In Git
-@c STARTOFRANGE gawkgit
@cindex Git, use of for @command{gawk} source code
@c From emails written March 22, 2012, to the gawk developers list.
@@ -39476,7 +39530,6 @@ wget http://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-@var{branchname}.ta
@noindent
to retrieve a snapshot of the given branch.
-@c ENDOFRANGE gawkgit
@node Future Extensions
@appendixsec Probable Future Extensions
@@ -39857,13 +39910,10 @@ of @command{gawk}, but it @emph{will} be removed in the next major release.
@end itemize
-@c ENDOFRANGE impis
-@c ENDOFRANGE gawii
@node Basic Concepts
@appendix Basic Programming Concepts
@cindex programming, concepts
-@c STARTOFRANGE procon
@cindex programming, concepts
This @value{APPENDIX} attempts to define some of the basic concepts
@@ -40101,7 +40151,6 @@ standard for C. This standard became an ISO standard in 1990.
In 1999, a revised ISO C standard was approved and released.
Where it makes sense, POSIX @command{awk} is compatible with 1999 ISO C.
-@c ENDOFRANGE procon
@node Glossary
@unnumbered Glossary
@@ -40152,6 +40201,21 @@ languages.
These standards often become international standards as well. See also
``ISO.''
+@item Argument
+An argument can be two different things. It can be an option or a
+@value{FN} passed to a command while invoking it from the command line, or
+it can be something passed to a @dfn{function} inside a program, e.g.
+inside @command{awk}.
+
+In the latter case, an argument can be passed to a function in two ways.
+Either it is given to the called function by value, i.e., a copy of the
+value of the variable is made available to the called function, but the
+original variable cannot be modified by the function itself; or it is
+given by reference, i.e., a pointer to the interested variable is passed to
+the function, which can then directly modify it. In @command{awk}
+scalars are passed by value, and arrays are passed by reference.
+See ``Pass By Value/Reference.''
+
@item Array
A grouping of multiple values under the same name.
Most languages just provide sequential arrays.
@@ -40193,6 +40257,25 @@ The GNU version of the standard shell
@end ifinfo
See also ``Bourne Shell.''
+@item Binary
+Base-two notation, where the digits are @code{0}--@code{1}. Since
+electronic circuitry works ``naturally'' in base 2 (just think of Off/On),
+everything inside a computer is calculated using base 2. Each digit
+represents the presence (or absence) of a power of 2 and is called a
+@dfn{bit}. So, for example, the base-two number @code{10101} is
+the same as decimal 21, ((1 x 16) + (1 x 4) + (1 x 1)).
+
+Since base-two numbers quickly become
+very long to read and write, they are usually grouped by 3 (i.e., they are
+read as octal numbers), or by 4 (i.e., they are read as hexadecimal
+numbers). There is no direct way to insert base 2 numbers in a C program.
+If need arises, such numbers are usually inserted as octal or hexadecimal
+numbers. The number of base-two digits that fit into registers used for
+representing integer numbers in computers is a rough indication of the
+computing power of the computer itself. Most computers nowadays use 64
+bits for representing integer numbers in their registers, but 32-bit,
+16-bit and 8-bit registers have been widely used in the past.
+@xref{Nondecimal-numbers}.
@item Bit
Short for ``Binary Digit.''
All values in computer memory ultimately reduce to binary digits: values
@@ -40224,6 +40307,19 @@ The characters @samp{@{} and @samp{@}}. Braces are used in
@command{awk} for delimiting actions, compound statements, and function
bodies.
+@item Bracket Expression
+Inside a @dfn{regular expression}, an expression included in square
+brackets, meant to designate a single character as belonging to a
+specified character class. A bracket expression can contain a list of one
+or more characters, like @samp{[abc]}, a range of characters, like
+@samp{[A-Z]}, or a name, delimited by @samp{:}, that designates a known set
+of characters, like @samp{[:digit:]}. The form of bracket expression
+enclosed between @samp{:} is independent of the underlying representation
+of the character themselves, which could utilize the ASCII, ECBDIC, or
+Unicode codesets, depending on the architecture of the computer system, and on
+localization.
+See also ``Regular Expression.''
+
@item Built-in Function
The @command{awk} language provides built-in functions that perform various
numerical, I/O-related, and string computations. Examples are
@@ -40277,9 +40373,25 @@ points out similarities between @command{awk} and C when appropriate.
In general, @command{gawk} attempts to be as similar to the 1990 version
of ISO C as makes sense.
+@item C Shell
+The C Shell (@command{csh} or its improved version, @command{tcsh}) is a Unix shell that was
+created by Bill Joy in the late 1970s. The C shell was differentiated from
+other shells by its interactive features and overall style, which
+looks more like C. The C Shell is not backward compatible with the Bourne
+Shell, so special attention is required when converting scripts
+written for other Unix shells to the C shell, especially with regard to the management of
+shell variables.
+See also ``Bourne Shell.''
+
@item C++
A popular object-oriented programming language derived from C.
+@item Character Class
+See ``Bracket Expression.''
+
+@item Character List
+See ``Bracket Expression.''
+
@cindex ASCII
@cindex ISO 8859-1
@cindex ISO Latin-1
@@ -40303,7 +40415,59 @@ A preprocessor for @command{pic} that reads descriptions of molecules
and produces @command{pic} input for drawing them.
It was written in @command{awk}
by Brian Kernighan and Jon Bentley, and is available from
-@uref{http://netlib.sandia.gov/netlib/typesetting/chem.gz}.
+@uref{http://netlib.org/typesetting/chem}.
+
+@item Comparison Expression
+A relation that is either true or false, such as @samp{a < b}.
+Comparison expressions are used in @code{if}, @code{while}, @code{do},
+and @code{for}
+statements, and in patterns to select which input records to process.
+(@xref{Typing and Comparison}.)
+
+@cindex compiled programs
+@item Compiler
+A program that translates human-readable source code into
+machine-executable object code. The object code is then executed
+directly by the computer.
+See also ``Interpreter.''
+
+@item Complemented Bracket Expression
+The negation of a @dfn{bracket expression}. All that is @emph{not}
+described by a given bracket expression. The symbol @samp{^} precedes
+the negated bracket expression. E.g.: @samp{[[^:digit:]}
+designates whatever character is not a digit. @samp{[^bad]}
+designates whatever character is not one of the letters @samp{b}, @samp{a},
+or @samp{d}.
+See ``Bracket Expression.''
+
+@item Compound Statement
+A series of @command{awk} statements, enclosed in curly braces. Compound
+statements may be nested.
+(@xref{Statements}.)
+
+@item Computed Regexps
+See ``Dynamic Regular Expressions.''
+
+@item Concatenation
+Concatenating two strings means sticking them together, one after another,
+producing a new string. For example, the string @samp{foo} concatenated with
+the string @samp{bar} gives the string @samp{foobar}.
+(@xref{Concatenation}.)
+
+@item Conditional Expression
+An expression using the @samp{?:} ternary operator, such as
+@samp{@var{expr1} ? @var{expr2} : @var{expr3}}. The expression
+@var{expr1} is evaluated; if the result is true, the value of the whole
+expression is the value of @var{expr2}; otherwise the value is
+@var{expr3}. In either case, only one of @var{expr2} and @var{expr3}
+is evaluated. (@xref{Conditional Exp}.)
+
+@item Control Statement
+A control statement is an instruction to perform a given operation or a set
+of operations inside an @command{awk} program, if a given condition is
+true. Control statements are: @code{if}, @code{for}, @code{while}, and
+@code{do}
+(@pxref{Statements}).
@cindex McIlroy, Doug
@cindex cookie
@@ -40353,39 +40517,6 @@ Doug
@item Coprocess
A subordinate program with which two-way communications is possible.
-@cindex compiled programs
-@item Compiler
-A program that translates human-readable source code into
-machine-executable object code. The object code is then executed
-directly by the computer.
-See also ``Interpreter.''
-
-@item Compound Statement
-A series of @command{awk} statements, enclosed in curly braces. Compound
-statements may be nested.
-(@xref{Statements}.)
-
-@item Concatenation
-Concatenating two strings means sticking them together, one after another,
-producing a new string. For example, the string @samp{foo} concatenated with
-the string @samp{bar} gives the string @samp{foobar}.
-(@xref{Concatenation}.)
-
-@item Conditional Expression
-An expression using the @samp{?:} ternary operator, such as
-@samp{@var{expr1} ? @var{expr2} : @var{expr3}}. The expression
-@var{expr1} is evaluated; if the result is true, the value of the whole
-expression is the value of @var{expr2}; otherwise the value is
-@var{expr3}. In either case, only one of @var{expr2} and @var{expr3}
-is evaluated. (@xref{Conditional Exp}.)
-
-@item Comparison Expression
-A relation that is either true or false, such as @samp{a < b}.
-Comparison expressions are used in @code{if}, @code{while}, @code{do},
-and @code{for}
-statements, and in patterns to select which input records to process.
-(@xref{Typing and Comparison}.)
-
@item Curly Braces
See ``Braces.''
@@ -40431,15 +40562,15 @@ ordinary expression. It could be a string constant, such as
@code{"foo"}, but it may also be an expression whose value can vary.
(@xref{Computed Regexps}.)
+@item Empty String
+See ``Null String.''
+
@item Environment
A collection of strings, of the form @samp{@var{name}=@var{val}}, that each
program has available to it. Users generally place values into the
environment in order to provide information to various programs. Typical
examples are the environment variables @env{HOME} and @env{PATH}.
-@item Empty String
-See ``Null String.''
-
@cindex epoch, definition of
@item Epoch
The date used as the ``beginning of time'' for timestamps.
@@ -40492,19 +40623,15 @@ Format strings control the appearance of output in the
are controlled by the format strings contained in the predefined variables
@code{CONVFMT} and @code{OFMT}. (@xref{Control Letters}.)
+@item Fortran
+Shorthand for FORmula TRANslator, one of the first programming languages
+available for scientific calculations. It was created by John Backus,
+and has been available since 1957. It is still in use today.
+
@item Free Documentation License
This document describes the terms under which this @value{DOCUMENT}
is published and may be copied. (@xref{GNU Free Documentation License}.)
-@item Function
-A specialized group of statements used to encapsulate general
-or program-specific tasks. @command{awk} has a number of built-in
-functions, and also allows you to define your own.
-(@xref{Functions}.)
-
-@item FSF
-See ``Free Software Foundation.''
-
@cindex FSF (Free Software Foundation)
@cindex Free Software Foundation (FSF)
@cindex Stallman, Richard
@@ -40514,6 +40641,26 @@ to the production and distribution of freely distributable software.
It was founded by Richard M.@: Stallman, the author of the original
Emacs editor. GNU Emacs is the most widely used version of Emacs today.
+@item FSF
+See ``Free Software Foundation.''
+
+@item Function
+A part of an @command{awk} program that can be invoked from every point of
+the program, to perform a task. @command{awk} has several built-in
+functions.
+Users can define their own functions in every part of the program.
+Function can be recursive, i.e., they may invoke themselves.
+@xref{Functions}.
+In @command{gawk} it is also possible to have functions shared
+among different programs, and included where required using the
+@code{@@include} directive
+(@pxref{Include Files}).
+In @command{gawk} the name of the function that should be invoked
+can be generated at run time, i.e., dynamically.
+The @command{gawk} extension API provides constructor functions
+(@pxref{Constructor Functions}).
+
+
@item @command{gawk}
The GNU implementation of @command{awk}.
@@ -40636,6 +40783,12 @@ meaning. Keywords are reserved and may not be used as variable names.
and
@code{while}.
+@item Korn Shell
+The Korn Shell (@command{ksh}) is a Unix shell which was developed by David Korn at Bell
+Laboratories in the early 1980s. The Korn Shell is backward-compatible with the Bourne
+shell and includes many features of the C shell.
+See also ``Bourne Shell.''
+
@cindex LGPL (Lesser General Public License)
@cindex Lesser General Public License (LGPL)
@cindex GNU Lesser General Public License
@@ -40644,12 +40797,12 @@ This document describes the terms under which binary library archives
or shared objects,
and their source code may be distributed.
-@item Linux
-See ``GNU/Linux.''
-
@item LGPL
See ``Lesser General Public License.''
+@item Linux
+See ``GNU/Linux.''
+
@item Localization
The process of providing the data necessary for an
internationalized program to work in a particular language.
@@ -40675,6 +40828,14 @@ Characters used within a regexp that do not stand for themselves.
Instead, they denote regular expression operations, such as repetition,
grouping, or alternation.
+@item Nesting
+Nesting is where information is organized in layers, or where objects
+contain other similar objects.
+In @command{gawk} the @code{@@include}
+directive can be nested. The ``natural'' nesting of arithmetic and
+logical operations can be changed using parentheses
+(@pxref{Precedence}).
+
@item No-op
An operation that does nothing.
@@ -40695,6 +40856,11 @@ Octal numbers are written in C using a leading @samp{0},
to indicate their base. Thus, @code{013} is 11 ((1 x 8) + 3).
@xref{Nondecimal-numbers}.
+@item Output Record
+A single chunk of data that is written out by @command{awk}. Usually, an
+@command{awk} output record consists of one or more lines of text.
+@xref{Records}.
+
@item Pattern
Patterns tell @command{awk} which input records are interesting to which
rules.
@@ -40709,6 +40875,9 @@ An acronym describing what is possibly the most frequent
source of computer usage problems. (Problem Exists Between
Keyboard And Chair.)
+@item Plug-in
+See ``Extensions.''
+
@item POSIX
The name for a series of standards
that specify a Portable Operating System interface. The ``IX'' denotes
@@ -40733,6 +40902,9 @@ A sequence of consecutive lines from the input file(s). A pattern
can specify ranges of input lines for @command{awk} to process or it can
specify single lines. (@xref{Pattern Overview}.)
+@item Record
+See ``Input record'' and ``Output record.''
+
@item Recursion
When a function calls itself, either directly or indirectly.
If this is clear, stop, and proceed to the next entry.
@@ -40750,6 +40922,15 @@ operators.
(@xref{Getline},
and @ref{Redirection}.)
+@item Reference Counts
+An internal mechanism in @command{gawk} to minimize the amount of memory
+needed to store the value of string variables. If the value assumed by
+a variable is used in more than one place, only one copy of the value
+itself is kept, and the associated reference count is increased when the
+same value is used by an additional variable, and decresed when the related
+variable is no longer in use. When the reference count goes to zero,
+the memory space used to store the value of the variable is freed.
+
@item Regexp
See ``Regular Expression.''
@@ -40767,6 +40948,15 @@ slashes, such as @code{/foo/}. This regular expression is chosen
when you write the @command{awk} program and cannot be changed during
its execution. (@xref{Regexp Usage}.)
+@item Regular Expression Operators
+See ``Metacharacters.''
+
+@item Rounding
+Rounding the result of an arithmetic operation can be tricky.
+More than one way of rounding exists, and in @command{gawk}
+it is possible to choose which method should be used in a program.
+@xref{Setting the rounding mode}.
+
@item Rule
A segment of an @command{awk} program that specifies how to process single
input records. A rule consists of a @dfn{pattern} and an @dfn{action}.
@@ -40787,12 +40977,12 @@ Regular variables are scalars; arrays and functions are not.
In @command{gawk}, a list of directories to search for @command{awk} program source files.
In the shell, a list of directories to search for executable programs.
-@item Seed
-The initial value, or starting point, for a sequence of random numbers.
-
@item @command{sed}
See ``Stream Editor.''
+@item Seed
+The initial value, or starting point, for a sequence of random numbers.
+
@item Shell
The command interpreter for Unix and POSIX-compliant systems.
The shell works both interactively, and as a programming language
@@ -40826,6 +41016,12 @@ A @value{FN} interpreted internally by @command{gawk}, instead of being handed
directly to the underlying operating system---for example, @file{/dev/stderr}.
(@xref{Special Files}.)
+@item Statement
+An expression inside an @command{awk} program in the action part
+of a pattern--action rule, or inside an
+@command{awk} function. A statement can be a variable assignment,
+an array operation, a loop, etc.
+
@item Stream Editor
A program that reads records from an input stream and processes them one
or more at a time. This is in contrast with batch programs, which may
@@ -40876,9 +41072,14 @@ This is standard time in Greenwich, England, which is used as a
reference time for day and date calculations.
See also ``Epoch'' and ``GMT.''
+@item Variable
+A name for a value. In @command{awk}, variables may be either scalars
+or arrays.
+
@item Whitespace
A sequence of space, TAB, or newline characters occurring inside an input
record or a string.
+
@end table
@end ifclear
diff --git a/doc/gawkinet.info b/doc/gawkinet.info
index 0a0d69d8..d726be0b 100644
--- a/doc/gawkinet.info
+++ b/doc/gawkinet.info
@@ -6,7 +6,7 @@ START-INFO-DIR-ENTRY
* Gawkinet: (gawkinet). TCP/IP Internetworking With `gawk'.
END-INFO-DIR-ENTRY
- This is Edition 1.3 of `TCP/IP Internetworking With `gawk'', for the
+ This is Edition 1.3 of `TCP/IP Internetworking with `gawk'', for the
4.0.0 (or later) version of the GNU implementation of AWK.
@@ -30,7 +30,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b)
This file documents the networking features in GNU `awk'.
- This is Edition 1.3 of `TCP/IP Internetworking With `gawk'', for the
+ This is Edition 1.3 of `TCP/IP Internetworking with `gawk'', for the
4.0.0 (or later) version of the GNU implementation of AWK.
@@ -61,7 +61,7 @@ General Introduction
This file documents the networking features in GNU Awk (`gawk') version
4.0 and later.
- This is Edition 1.3 of `TCP/IP Internetworking With `gawk'', for the
+ This is Edition 1.3 of `TCP/IP Internetworking with `gawk'', for the
4.0.0 (or later) version of the GNU implementation of AWK.
diff --git a/doc/gawkinet.texi b/doc/gawkinet.texi
index 40198e1d..10223239 100644
--- a/doc/gawkinet.texi
+++ b/doc/gawkinet.texi
@@ -60,7 +60,7 @@
@c fit into that chapter, thus this separate document. At over 50
@c pages, I think this is the right decision. ADR.
-@set TITLE TCP/IP Internetworking With @command{gawk}
+@set TITLE TCP/IP Internetworking with @command{gawk}
@set EDITION 1.3
@set UPDATE-MONTH December, 2010
@c gawk versions:
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 1d91c5bd..4cd04763 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -46,12 +46,13 @@
@c applies to and all the info about who's publishing this edition
@c These apply across the board.
-@set UPDATE-MONTH September, 2014
+@set UPDATE-MONTH February, 2015
@set VERSION 4.1
@set PATCHLEVEL 2
+@set GAWKINETTITLE TCP/IP Internetworking with @command{gawk}
@ifset FOR_PRINT
-@set TITLE Effective Awk Programming
+@set TITLE Effective awk Programming
@end ifset
@ifclear FOR_PRINT
@set TITLE GAWK: Effective AWK Programming
@@ -192,9 +193,9 @@
@ifclear FOR_PRINT
@set FN file name
-@set FFN File Name
+@set FFN File name
@set DF data file
-@set DDF Data File
+@set DDF Data file
@set PVERSION version
@end ifclear
@ifset FOR_PRINT
@@ -202,7 +203,7 @@
@set FFN Filename
@set DF datafile
@set DDF Datafile
-@set PVERSION Version
+@set PVERSION version
@end ifset
@c For HTML, spell out email addresses, to avoid problems with
@@ -293,13 +294,13 @@ Fax: +1-617-542-2652
Email: <email>gnu@@gnu.org</email>
URL: <ulink url="http://www.gnu.org">http://www.gnu.org/</ulink></literallayout>
-<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2014
+<literallayout class="normal">Copyright &copy; 1989, 1991, 1992, 1993, 1996&ndash;2005, 2007, 2009&ndash;2015
Free Software Foundation, Inc.
All Rights Reserved.</literallayout>
@end docbook
@ifnotdocbook
-Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2014 @*
+Copyright @copyright{} 1989, 1991, 1992, 1993, 1996--2005, 2007, 2009--2015 @*
Free Software Foundation, Inc.
@end ifnotdocbook
@sp 2
@@ -467,7 +468,7 @@ particular records in a file and perform operations upon them.
@command{gawk}.
* Internationalization:: Getting @command{gawk} to speak your
language.
-* Debugger:: The @code{gawk} debugger.
+* Debugger:: The @command{gawk} debugger.
* Arbitrary Precision Arithmetic:: Arbitrary precision arithmetic with
@command{gawk}.
* Dynamic Extensions:: Adding new built-in functions to
@@ -598,6 +599,7 @@ particular records in a file and perform operations upon them.
@code{getline}.
* Getline Summary:: Summary of @code{getline} Variants.
* Read Timeout:: Reading input with a timeout.
+* Retrying Input:: Retrying input after certain errors.
* Command-line directories:: What happens if you put a directory on
the command line.
* Input Summary:: Input summary.
@@ -627,6 +629,7 @@ particular records in a file and perform operations upon them.
* Special Caveats:: Things to watch out for.
* Close Files And Pipes:: Closing Input and Output Files and
Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
* Values:: Constants, Variables, and Regular
@@ -938,6 +941,7 @@ particular records in a file and perform operations upon them.
* Array Functions:: Functions for working with arrays.
* Flattening Arrays:: How to flatten arrays.
* Creating Arrays:: How to create and populate arrays.
+* Redirection API:: How to access and manipulate redirections.
* Extension API Variables:: Variables provided by the API.
* Extension Versioning:: API Version information.
* Extension API Informational Variables:: Variables providing information about
@@ -950,7 +954,7 @@ particular records in a file and perform operations upon them.
* Internal File Ops:: The code for internal file operations.
* Using Internal File Ops:: How to use an external extension.
* Extension Samples:: The sample extensions that ship with
- @code{gawk}.
+ @command{gawk}.
* Extension Sample File Functions:: The file functions sample.
* Extension Sample Fnmatch:: An interface to @code{fnmatch()}.
* Extension Sample Fork:: An interface to @code{fork()} and
@@ -1165,7 +1169,7 @@ interface to network protocols via special @file{/inet} files.
The programs in this book make clear that an AWK program is
typically much smaller and faster to develop than
a counterpart written in C.
-Consequently, there is often a payoff to prototype an
+Consequently, there is often a payoff to prototyping an
algorithm or design in AWK to get it running quickly and expose
problems early. Often, the interpreted performance is adequate
and the AWK prototype becomes the product.
@@ -1242,15 +1246,15 @@ March 2001
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.
+True then, and still true today.
-Learning to use a programming language is more than mastering the
+Learning to use a programming language is about 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
+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.
@@ -1258,12 +1262,15 @@ 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
+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.
+details, and, as expected, many examples to help you learn the ins and outs.
+
+I enjoy programming in AWK and had fun (re)reading this book.
+I think you will too.
@ifnotdocbook
@cindex Brennan, Michael
@@ -1292,7 +1299,7 @@ October 2014
<affiliation><jobtitle>Nof Ayalon</jobtitle></affiliation>
<affiliation><jobtitle>Israel</jobtitle></affiliation>
</author>
- <date>December 2014</date>
+ <date>February 2015</date>
</prefaceinfo>
@end docbook
@@ -1335,7 +1342,7 @@ Generate reports
Validate data
@item
-Produce indexes and perform other document preparation tasks
+Produce indexes and perform other document-preparation tasks
@item
Experiment with algorithms that you can adapt later to other computer
@@ -1454,23 +1461,23 @@ help from me, thoroughly reworked @command{gawk} for compatibility
with the newer @command{awk}.
Circa 1994, I became the primary maintainer.
Current development focuses on bug fixes,
-performance improvements, standards compliance and, occasionally, new features.
+performance improvements, standards compliance, and, occasionally, new features.
In May 1997, J@"urgen Kahrs felt the need for network access
from @command{awk}, and with a little help from me, set about adding
features to do this for @command{gawk}. At that time, he also
wrote the bulk of
-@cite{TCP/IP Internetworking with @command{gawk}}
+@cite{@value{GAWKINETTITLE}}
(a separate document, available as part of the @command{gawk} distribution).
His code finally became part of the main @command{gawk} distribution
with @command{gawk} @value{PVERSION} 3.1.
John Haque rewrote the @command{gawk} internals, in the process providing
an @command{awk}-level debugger. This version became available as
-@command{gawk} @value{PVERSION} 4.0, in 2011.
+@command{gawk} @value{PVERSION} 4.0 in 2011.
@DBXREF{Contributors}
-for a full list of those who made important contributions to @command{gawk}.
+for a full list of those who have made important contributions to @command{gawk}.
@node Names
@unnumberedsec A Rose by Any Other Name
@@ -1483,7 +1490,7 @@ is often referred to as ``new @command{awk}.''
By analogy, the original version of @command{awk} is
referred to as ``old @command{awk}.''
-Today, on most systems, when you run the @command{awk} utility,
+On most current systems, when you run the @command{awk} utility
you get some version of new @command{awk}.@footnote{Only
Solaris systems still use an old @command{awk} for the
default @command{awk} utility. A more modern @command{awk} lives in
@@ -1543,7 +1550,9 @@ the POSIX standard for @command{awk}.
This @value{DOCUMENT} has the difficult task of being both a tutorial and a reference.
If you are a novice, feel free to skip over details that seem too complex.
You should also ignore the many cross-references; they are for the
-expert user and for the online Info and HTML versions of the @value{DOCUMENT}.
+expert user and for the Info and
+@uref{http://www.gnu.org/software/gawk/manual/, HTML}
+versions of the @value{DOCUMENT}.
@end ifnotinfo
There are sidebars
@@ -1576,7 +1585,7 @@ This @value{DOCUMENT} is split into several parts, as follows:
@itemize @value{BULLET}
@item
-Part I describes the @command{awk} language and @command{gawk} program in detail.
+Part I describes the @command{awk} language and the @command{gawk} program in detail.
It starts with the basics, and continues through all of the features of @command{awk}.
It contains the following chapters:
@@ -1623,10 +1632,10 @@ doing something when a record is matched, and the predefined variables
@item
@ref{Arrays},
-covers @command{awk}'s one-and-only data structure: associative arrays.
-Deleting array elements and whole arrays is also described, as well as
-sorting arrays in @command{gawk}. It also describes how @command{gawk}
-provides arrays of arrays.
+covers @command{awk}'s one-and-only data structure: the associative array.
+Deleting array elements and whole arrays is described, as well as
+sorting arrays in @command{gawk}. The @value{CHAPTER} also describes how
+@command{gawk} provides arrays of arrays.
@item
@ref{Functions},
@@ -1638,17 +1647,17 @@ as well as how to define your own functions. It also discusses how
@item
Part II shows how to use @command{awk} and @command{gawk} for problem solving.
There is lots of code here for you to read and learn from.
-It contains the following chapters:
+This part contains the following chapters:
@c nested
@itemize @value{MINUS}
@item
-@ref{Library Functions}, which provides a number of functions meant to
+@ref{Library Functions}, provides a number of functions meant to
be used from main @command{awk} programs.
@item
@ref{Sample Programs},
-which provides many sample @command{awk} programs.
+provides many sample @command{awk} programs.
@end itemize
Reading these two chapters allows you to see @command{awk}
@@ -1701,7 +1710,7 @@ including the GNU General Public License:
@item
@ref{Language History},
describes how the @command{awk} language has evolved since
-its first release to present. It also describes how @command{gawk}
+its first release to the present. It also describes how @command{gawk}
has acquired features over time.
@item
@@ -1712,15 +1721,39 @@ and how to compile and use it on different
non-POSIX systems. It also describes how to report bugs
in @command{gawk} and where to get other freely
available @command{awk} implementations.
-@end itemize
@ifset FOR_PRINT
-@itemize @value{MINUS}
@item
@ref{Copying},
presents the license that covers the @command{gawk} source code.
+@end ifset
+
+@ifclear FOR_PRINT
+@item
+@ref{Notes},
+describes how to disable @command{gawk}'s extensions, as
+well as how to contribute new code to @command{gawk},
+and some possible future directions for @command{gawk} development.
+
+@item
+@ref{Basic Concepts},
+provides some very cursory background material for those who
+are completely unfamiliar with computer programming.
+
+The @ref{Glossary}, defines most, if not all, of the significant terms used
+throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
+try looking them up here.
+
+@item
+@ref{Copying}, and
+@ref{GNU Free Documentation License},
+present the licenses that cover the @command{gawk} source code
+and this @value{DOCUMENT}, respectively.
+@end ifclear
+@end itemize
@end itemize
+@ifset FOR_PRINT
The version of this @value{DOCUMENT} distributed with @command{gawk}
contains additional appendices and other end material.
To save space, we have omitted them from the
@@ -1744,7 +1777,7 @@ are completely unfamiliar with computer programming.
@item
@uref{http://www.gnu.org/software/gawk/manual/html_node/Glossary.html,
The Glossary}
-defines most, if not all of, the significant terms used
+defines most, if not all, of the significant terms used
throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
try looking them up here.
@@ -1758,32 +1791,6 @@ Some of the chapters have exercise sections; these have also been
omitted from the print edition but are available online.
@end ifset
-@ifclear FOR_PRINT
-@itemize @value{MINUS}
-@item
-@ref{Notes},
-describes how to disable @command{gawk}'s extensions, as
-well as how to contribute new code to @command{gawk},
-and some possible future directions for @command{gawk} development.
-
-@item
-@ref{Basic Concepts},
-provides some very cursory background material for those who
-are completely unfamiliar with computer programming.
-
-The @ref{Glossary}, defines most, if not all of, the significant terms used
-throughout the @value{DOCUMENT}. If you find terms that you aren't familiar with,
-try looking them up here.
-
-@item
-@ref{Copying}, and
-@ref{GNU Free Documentation License},
-present the licenses that cover the @command{gawk} source code
-and this @value{DOCUMENT}, respectively.
-@end itemize
-@end ifclear
-@end itemize
-
@c FULLXREF OFF
@node Conventions
@@ -1814,7 +1821,7 @@ This typically represents the command's standard output.
Output from the command, usually its standard output, appears
@code{like this}.
@end ifset
-Error messages, and other output on the command's standard error, are preceded
+Error messages and other output on the command's standard error are preceded
by the glyph ``@error{}''. For example:
@example
@@ -1825,15 +1832,23 @@ $ @kbd{echo hello on stderr 1>&2}
@end example
@ifnotinfo
-In the text, command names appear in @code{this font}, while code segments
+In the text, almost anything related to programming, such as
+command names,
+variable and function names, and string, numeric and regexp constants
+appear in @code{this font}. Code fragments
appear in the same font and quoted, @samp{like this}.
+Things that are replaced by the user or programmer
+appear in @var{this font}.
Options look like this: @option{-f}.
+@value{FFN}s are indicated like this: @file{/path/to/ourfile}.
+@ifclear FOR_PRINT
Some things are
emphasized @emph{like this}, and if a point needs to be made
-strongly, it is done @strong{like this}. The first occurrence of
+strongly, it is done @strong{like this}.
+@end ifclear
+The first occurrence of
a new term is usually its @dfn{definition} and appears in the same
font as the previous occurrence of ``definition'' in this sentence.
-Finally, @value{FN}s are indicated like this: @file{/path/to/ourfile}.
@end ifnotinfo
Characters that you type at the keyboard look @kbd{like this}. In particular,
@@ -1841,7 +1856,7 @@ there are special characters called ``control characters.'' These are
characters that you type by holding down both the @kbd{CONTROL} key and
another key, at the same time. For example, a @kbd{Ctrl-d} is typed
by first pressing and holding the @kbd{CONTROL} key, next
-pressing the @kbd{d} key and finally releasing both keys.
+pressing the @kbd{d} key, and finally releasing both keys.
For the sake of brevity, throughout this @value{DOCUMENT}, we refer to
Brian Kernighan's version of @command{awk} as ``BWK @command{awk}.''
@@ -1877,7 +1892,7 @@ the picture of a flashlight in the margin, as shown here.
@value{DARKCORNER}
@end iftex
@ifnottex
-``(d.c.)''.
+``(d.c.).''
@end ifnottex
@ifclear FOR_PRINT
They also appear in the index under the heading ``dark corner.''
@@ -1912,12 +1927,12 @@ Emacs editor. GNU Emacs is the most widely used version of Emacs today.
@cindex GPL (General Public License)
@cindex General Public License, See GPL
@cindex documentation, online
-The GNU@footnote{GNU stands for ``GNU's not Unix.''}
+The GNU@footnote{GNU stands for ``GNU's Not Unix.''}
Project is an ongoing effort on the part of the Free Software
Foundation to create a complete, freely distributable, POSIX-compliant
computing environment.
-The FSF uses the ``GNU General Public License'' (GPL) to ensure that
-their software's
+The FSF uses the GNU General Public License (GPL) to ensure that
+its software's
source code is always available to the end user.
@ifclear FOR_PRINT
A copy of the GPL is included
@@ -1977,7 +1992,7 @@ version of @command{awk}.
I started working with that version in the fall of 1988.
As work on it progressed,
the FSF published several preliminary versions (numbered 0.@var{x}).
-In 1996, Edition 1.0 was released with @command{gawk} 3.0.0.
+In 1996, edition 1.0 was released with @command{gawk} 3.0.0.
The FSF published the first two editions under
the title @cite{The GNU Awk User's Guide}.
@ifset FOR_PRINT
@@ -1989,7 +2004,7 @@ the third edition in 2001.
This edition maintains the basic structure of the previous editions.
For FSF edition 4.0, the content was thoroughly reviewed and updated. All
references to @command{gawk} versions prior to 4.0 were removed.
-Of significant note for that edition was @ref{Debugger}.
+Of significant note for that edition was the addition of @ref{Debugger}.
For FSF edition
@ifclear FOR_PRINT
@@ -2004,7 +2019,7 @@ and the major new additions are @ref{Arbitrary Precision Arithmetic},
and @ref{Dynamic Extensions}.
This @value{DOCUMENT} will undoubtedly continue to evolve. If you
-find an error in this @value{DOCUMENT}, please report it! @DBXREF{Bugs}
+find an error in the @value{DOCUMENT}, please report it! @DBXREF{Bugs}
for information on submitting problem reports electronically.
@ifset FOR_PRINT
@@ -2014,7 +2029,7 @@ for information on submitting problem reports electronically.
You may have a newer version of @command{gawk} than the
one described here. To find out what has changed,
you should first look at the @file{NEWS} file in the @command{gawk}
-distribution, which provides a high-level summary of what changed in
+distribution, which provides a high-level summary of the changes in
each release.
You can then look at the @uref{http://www.gnu.org/software/gawk/manual/,
@@ -2068,7 +2083,7 @@ The initial draft of @cite{The GAWK Manual} had the following acknowledgments:
Many people need to be thanked for their assistance in producing this
manual. Jay Fenlason contributed many ideas and sample programs. Richard
Mlynarik and Robert Chassell gave helpful comments on drafts of this
-manual. The paper @cite{A Supplemental Document for @command{awk}} by John W.@:
+manual. The paper @cite{A Supplemental Document for AWK} by John W.@:
Pierce of the Chemistry Department at UC San Diego, pinpointed several
issues relevant both to @command{awk} implementation and to this manual, that
would otherwise have escaped us.
@@ -2079,12 +2094,18 @@ I would like to acknowledge Richard M.@: Stallman, for his vision of a
better world and for his courage in founding the FSF and starting the
GNU Project.
+@ifclear FOR_PRINT
Earlier editions of this @value{DOCUMENT} had the following acknowledgements:
+@end ifclear
+@ifset FOR_PRINT
+The previous edition of this @value{DOCUMENT} had
+the following acknowledgements:
+@end ifset
@quotation
The following people (in alphabetical order)
provided helpful comments on various
-versions of this book,
+versions of this book:
Rick Adams,
Dr.@: Nelson H.F. Beebe,
Karl Berry,
@@ -2112,7 +2133,7 @@ Robert J.@: Chassell provided much valuable advice on
the use of Texinfo.
He also deserves special thanks for
convincing me @emph{not} to title this @value{DOCUMENT}
-@cite{How To Gawk Politely}.
+@cite{How to Gawk Politely}.
Karl Berry helped significantly with the @TeX{} part of Texinfo.
@cindex Hartholz, Marshall
@@ -2196,9 +2217,9 @@ a number of people. @DBXREF{Contributors} for the full list.
@ifset FOR_PRINT
@cindex Oram, Andy
-Thanks to Andy Oram, of O'Reilly Media, for initiating
+Thanks to Andy Oram of O'Reilly Media for initiating
the fourth edition and for his support during the work.
-Thanks to Jasmine Kwityn for her copy-editing work.
+Thanks to Jasmine Kwityn for her copyediting work.
@end ifset
Thanks to Michael Brennan for the Forewords.
@@ -2206,7 +2227,7 @@ Thanks to Michael Brennan for the Forewords.
@cindex Duman, Patrice
@cindex Berry, Karl
Thanks to Patrice Dumas for the new @command{makeinfo} program.
-Thanks to Karl Berry who continues to work to keep
+Thanks to Karl Berry, who continues to work to keep
the Texinfo markup language sane.
@cindex Kernighan, Brian
@@ -2216,8 +2237,8 @@ Robert P.J.@: Day, Michael Brennan, and Brian Kernighan kindly acted as
reviewers for the 2015 edition of this @value{DOCUMENT}. Their feedback
helped improve the final work.
-I would like to thank Brian Kernighan for invaluable assistance during the
-testing and debugging of @command{gawk}, and for ongoing
+I would also like to thank Brian Kernighan for his invaluable assistance during the
+testing and debugging of @command{gawk}, and for his ongoing
help and advice in clarifying numerous points about the language.
We could not have done nearly as good a job on either @command{gawk}
or its documentation without his help.
@@ -2240,14 +2261,14 @@ which they raised and educated me.
Finally, I also must acknowledge my gratitude to G-d, for the many opportunities
He has sent my way, as well as for the gifts He has given me with which to
take advantage of those opportunities.
-@iftex
+@ifnotdocbook
@sp 2
@noindent
Arnold Robbins @*
Nof Ayalon @*
Israel @*
-December 2014
-@end iftex
+February 2015
+@end ifnotdocbook
@ifnotinfo
@part @value{PART1}The @command{awk} Language
@@ -2328,9 +2349,9 @@ an advanced feature that we will ignore for now;
pattern to search for and one action to perform
upon finding the pattern.
-Syntactically, a rule consists of a pattern followed by an action. The
-action is enclosed in braces to separate it from the pattern.
-Newlines usually separate rules. Therefore, an @command{awk}
+Syntactically, a rule consists of a @dfn{pattern} followed by an
+@dfn{action}. The action is enclosed in braces to separate it from the
+pattern. Newlines usually separate rules. Therefore, an @command{awk}
program looks like this:
@example
@@ -2404,8 +2425,8 @@ awk '@var{program}' @var{input-file1} @var{input-file2} @dots{}
@end example
@noindent
-where @var{program} consists of a series of @var{patterns} and
-@var{actions}, as described earlier.
+where @var{program} consists of a series of patterns and
+actions, as described earlier.
@cindex single quote (@code{'})
@cindex @code{'} (single quote)
@@ -2424,12 +2445,12 @@ programs from shell scripts, because it avoids the need for a separate
file for the @command{awk} program. A self-contained shell script is more
reliable because there are no other files to misplace.
-Later in this chapter,
+Later in this chapter, in
@ifdocbook
the section
@end ifdocbook
@ref{Very Simple},
-presents several short,
+we'll see examples of several short,
self-contained programs.
@node Read Terminal
@@ -2450,10 +2471,10 @@ awk '@var{program}'
which usually means whatever you type on the keyboard. This continues
until you indicate end-of-file by typing @kbd{Ctrl-d}.
@ifset FOR_PRINT
-(On other operating systems, the end-of-file character may be different.)
+(On non-POSIX operating systems, the end-of-file character may be different.)
@end ifset
@ifclear FOR_PRINT
-(On other operating systems, the end-of-file character may be different.
+(On non-POSIX operating systems, the end-of-file character may be different.
For example, on OS/2, it is @kbd{Ctrl-z}.)
@end ifclear
@@ -2553,11 +2574,9 @@ for programs that are provided on the @command{awk} command line.
(Also, placing the program in a file allows us to use a literal single quote in the program
text, instead of the magic @samp{\47}.)
-@c STARTOFRANGE sq1x
@cindex single quote (@code{'}) in @command{gawk} command lines
-@c STARTOFRANGE qs2x
@cindex @code{'} (single quote) in @command{gawk} command lines
-If you want to clearly identify your @command{awk} program files as such,
+If you want to clearly identify an @command{awk} program file as such,
you can add the extension @file{.awk} to the @value{FN}. This doesn't
affect the execution of the @command{awk} program but it does make
``housekeeping'' easier.
@@ -2715,7 +2734,7 @@ The next @value{SUBSECTION} describes the shell's quoting rules.
@end quotation
@node Quoting
-@subsection Shell-Quoting Issues
+@subsection Shell Quoting Issues
@cindex shell quoting, rules for
@menu
@@ -2852,7 +2871,7 @@ $ @kbd{awk 'BEGIN @{ print "Here is a single quote <'"'"'>" @}'}
@noindent
This program consists of three concatenated quoted strings. The first and the
-third are single quoted, the second is double quoted.
+third are single-quoted, and the second is double-quoted.
This can be ``simplified'' to:
@@ -2873,8 +2892,6 @@ $ @kbd{awk "BEGIN @{ print \"Here is a single quote <'>\" @}"}
@end example
@noindent
-@c ENDOFRANGE sq1x
-@c ENDOFRANGE qs2x
This option is also painful, because double quotes, backslashes, and dollar signs
are very common in more advanced @command{awk} programs.
@@ -2891,7 +2908,7 @@ $ @kbd{awk 'BEGIN @{ print "Here is a double quote <\42>" @}'}
@end example
@noindent
-This works nicely, except that you should comment clearly what the
+This works nicely, but you should comment clearly what the
escapes mean.
A fourth option is to use command-line variable assignment, like this:
@@ -2902,11 +2919,11 @@ $ @kbd{awk -v sq="'" 'BEGIN @{ print "Here is a single quote <" sq ">" @}'}
@end example
(Here, the two string constants and the value of @code{sq} are concatenated
-into a single string which is printed by @code{print}.)
+into a single string that is printed by @code{print}.)
If you really need both single and double quotes in your @command{awk}
program, it is probably best to move it into a separate file, where
-the shell won't be part of the picture, and you can say what you mean.
+the shell won't be part of the picture and you can say what you mean.
@node DOS Quoting
@subsubsection Quoting in MS-Windows Batch Files
@@ -3005,7 +3022,7 @@ of green crates shipped, the number of red boxes shipped, the number of
orange bags shipped, and the number of blue packages shipped,
respectively. There are 16 entries, covering the 12 months of last year
and the first four months of the current year.
-An empty line separates the data for the two years.
+An empty line separates the data for the two years:
@example
@c file eg/data/inventory-shipped
@@ -3039,7 +3056,7 @@ The following command runs a simple @command{awk} program that searches the
input file @file{mail-list} for the character string @samp{li} (a
grouping of characters is usually called a @dfn{string};
the term @dfn{string} is based on similar usage in English, such
-as ``a string of pearls,'' or ``a string of cars in a train''):
+as ``a string of pearls'' or ``a string of cars in a train''):
@example
awk '/li/ @{ print $0 @}' mail-list
@@ -3086,7 +3103,7 @@ omitting the @code{print} statement but retaining the braces makes an
empty action that does nothing (i.e., no lines are printed).
@cindex @command{awk} programs, one-line examples
-Many practical @command{awk} programs are just a line or two. Following is a
+Many practical @command{awk} programs are just a line or two long. Following is a
collection of useful, short programs to get you started. Some of these
programs contain constructs that haven't been covered yet. (The description
of the program will give you a good idea of what is going on, but you'll
@@ -3107,7 +3124,7 @@ Print every line that is longer than 80 characters:
awk 'length($0) > 80' data
@end example
-The sole rule has a relational expression as its pattern and it has no
+The sole rule has a relational expression as its pattern and has no
action---so it uses the default action, printing the record.
@item
@@ -3194,7 +3211,7 @@ Print the even-numbered lines in the @value{DF}:
awk 'NR % 2 == 0' data
@end example
-If you use the expression @samp{NR % 2 == 1} instead,
+If you used the expression @samp{NR % 2 == 1} instead,
the program would print the odd-numbered lines.
@end itemize
@@ -3210,8 +3227,13 @@ no actions run.
After processing all the rules that match the line (and perhaps there are none),
@command{awk} reads the next line. (However,
-@pxref{Next Statement},
+@DBPXREF{Next Statement}
+@ifdocbook
+and @DBREF{Nextfile Statement}.)
+@end ifdocbook
+@ifnotdocbook
and also @pxref{Nextfile Statement}.)
+@end ifnotdocbook
This continues until the program reaches the end of the file.
For example, the following @command{awk} program contains two rules:
@@ -3476,7 +3498,7 @@ performing bit manipulation, for runtime string translation (internationalizatio
determining the type of a variable,
and array sorting.
-As we develop our presentation of the @command{awk} language, we introduce
+As we develop our presentation of the @command{awk} language, we will introduce
most of the variables and many of the functions. They are described
systematically in @DBREF{Built-in Variables} and in
@ref{Built-in}.
@@ -3530,7 +3552,7 @@ and Perl.}
@c FIXME: Review this chapter for summary of builtin functions called.
@itemize @value{BULLET}
@item
-Programs in @command{awk} consist of @var{pattern}-@var{action} pairs.
+Programs in @command{awk} consist of @var{pattern}--@var{action} pairs.
@item
An @var{action} without a @var{pattern} always runs. The default
@@ -3559,7 +3581,7 @@ part of a larger shell script (or MS-Windows batch file).
You may use backslash continuation to continue a source line.
Lines are automatically continued after
a comma, open brace, question mark, colon,
-@samp{||}, @samp{&&}, @code{do} and @code{else}.
+@samp{||}, @samp{&&}, @code{do}, and @code{else}.
@end itemize
@node Invoking Gawk
@@ -3634,20 +3656,16 @@ warning that the program is empty.
@node Options
@section Command-Line Options
-@c STARTOFRANGE ocl
@cindex options, command-line
-@c STARTOFRANGE clo
@cindex command line, options
-@c STARTOFRANGE gnulo
@cindex GNU long options
-@c STARTOFRANGE longo
@cindex options, long
Options begin with a dash and consist of a single character.
GNU-style long options consist of two dashes and a keyword.
The keyword can be abbreviated, as long as the abbreviation allows the option
-to be uniquely identified. If the option takes an argument, then the
-keyword is either immediately followed by an equals sign (@samp{=}) and the
+to be uniquely identified. If the option takes an argument, either the
+keyword is immediately followed by an equals sign (@samp{=}) and the
argument's value, or the keyword and the argument's value are separated
by whitespace.
If a particular option with a value is given more than once, it is the
@@ -3674,7 +3692,7 @@ Set the @code{FS} variable to @var{fs}
@cindex @option{-f} option
@cindex @option{--file} option
@cindex @command{awk} programs, location of
-Read @command{awk} program source from @var{source-file}
+Read the @command{awk} program source from @var{source-file}
instead of in the first nonoption argument.
This option may be given multiple times; the @command{awk}
program consists of the concatenation of the contents of
@@ -3729,8 +3747,6 @@ by the user that could start with @samp{-}.
It is also useful for passing options on to the @command{awk}
program; see @ref{Getopt Function}.
@end table
-@c ENDOFRANGE gnulo
-@c ENDOFRANGE longo
The following list describes @command{gawk}-specific options:
@@ -3742,14 +3758,14 @@ The following list describes @command{gawk}-specific options:
@cindex @option{--characters-as-bytes} option
Cause @command{gawk} to treat all input data as single-byte characters.
In addition, all output written with @code{print} or @code{printf}
-are treated as single-byte characters.
+is treated as single-byte characters.
Normally, @command{gawk} follows the POSIX standard and attempts to process
its input data according to the current locale (@pxref{Locales}). This can often involve
converting multibyte characters into wide characters (internally), and
can lead to problems or confusion if the input data does not contain valid
-multibyte characters. This option is an easy way to tell @command{gawk}:
-``hands off my data!''.
+multibyte characters. This option is an easy way to tell @command{gawk},
+``Hands off my data!''
@item @option{-c}
@itemx @option{--traditional}
@@ -3806,7 +3822,7 @@ Enable debugging of @command{awk} programs
By default, the debugger reads commands interactively from the keyboard
(standard input).
The optional @var{file} argument allows you to specify a file with a list
-of commands for the debugger to execute non-interactively.
+of commands for the debugger to execute noninteractively.
No space is allowed between the @option{-D} and @var{file}, if
@var{file} is supplied.
@@ -3866,7 +3882,7 @@ with @samp{#!} scripts (@pxref{Executable Scripts}), like so:
@cindex portable object files, generating
@cindex files, portable object, generating
Analyze the source program and
-generate a GNU @command{gettext} Portable Object Template file on standard
+generate a GNU @command{gettext} portable object template file on standard
output for all string constants that have been marked for translation.
@xref{Internationalization},
for information about this option.
@@ -3878,7 +3894,7 @@ for information about this option.
@cindex GNU long options, printing list of
@cindex options, printing list of
@cindex printing, list of options
-Print a ``usage'' message summarizing the short and long style options
+Print a ``usage'' message summarizing the short- and long-style options
that @command{gawk} accepts and then exit.
@item @option{-i} @var{source-file}
@@ -3888,7 +3904,7 @@ that @command{gawk} accepts and then exit.
@cindex @command{awk} programs, location of
Read an @command{awk} source library from @var{source-file}. This option
is completely equivalent to using the @code{@@include} directive inside
-your program. This option is very similar to the @option{-f} option,
+your program. It is very similar to the @option{-f} option,
but there are two important differences. First, when @option{-i} is
used, the program source is not loaded if it has been previously
loaded, whereas with @option{-f}, @command{gawk} always loads the file.
@@ -3973,7 +3989,7 @@ when parsing numeric input data (@pxref{Locales}).
@cindex @option{-o} option
@cindex @option{--pretty-print} option
Enable pretty-printing of @command{awk} programs.
-By default, output program is created in a file named @file{awkprof.out}
+By default, the output program is created in a file named @file{awkprof.out}
(@pxref{Profiling}).
The optional @var{file} argument allows you to specify a different
@value{FN} for the output.
@@ -4017,7 +4033,7 @@ in the left margin, and function call counts for each function.
Operate in strict POSIX mode. This disables all @command{gawk}
extensions (just like @option{--traditional}) and
disables all extensions not allowed by POSIX.
-@xref{Common Extensions}, for a summary of the extensions
+@DBXREF{Common Extensions} for a summary of the extensions
in @command{gawk} that are disabled by this option.
Also,
the following additional
@@ -4138,7 +4154,7 @@ source of data.)
Because it is clumsy using the standard @command{awk} mechanisms to mix
source file and command-line @command{awk} programs, @command{gawk}
provides the @option{-e} option. This does not require you to
-pre-empt the standard input for your source code; it allows you to easily
+preempt the standard input for your source code; it allows you to easily
mix command-line and library source code (@pxref{AWKPATH Variable}).
As with @option{-f}, the @option{-e} and @option{-i}
options may also be used multiple times on the command line.
@@ -4184,8 +4200,6 @@ setenv POSIXLY_CORRECT true
Having @env{POSIXLY_CORRECT} set is not recommended for daily use,
but it is good for testing the portability of your programs to other
environments.
-@c ENDOFRANGE ocl
-@c ENDOFRANGE clo
@node Other Arguments
@section Other Command-Line Arguments
@@ -4328,7 +4342,7 @@ file, unless the file is in the current directory.
But with @command{gawk}, if the @value{FN} supplied to the @option{-f}
or @option{-i} options
does not contain a directory separator @samp{/}, then @command{gawk} searches a list of
-directories (called the @dfn{search path}), one by one, looking for a
+directories (called the @dfn{search path}) one by one, looking for a
file with the specified name.
The search path is a string consisting of directory names
@@ -4369,9 +4383,9 @@ as an entry in the path or write a null entry in the path.
Different past versions of @command{gawk} would also look explicitly in
the current directory, either before or after the path search. As of
-@value{PVERSION} 4.1.2, this no longer happens, and if you wish to look
+@value{PVERSION} 4.1.2, this no longer happens; if you wish to look
in the current directory, you must include @file{.} either as a separate
-entry, or as a null entry in the search path.
+entry or as a null entry in the search path.
@end quotation
The default value for @env{AWKPATH} is
@@ -4449,6 +4463,8 @@ wait for input before returning with an error.
Controls the number of times @command{gawk} attempts to
retry a two-way TCP/IP (socket) connection before giving up.
@xref{TCP/IP Networking}.
+Note that when nonfatal I/O is enabled (@pxref{Nonfatal}),
+@command{gawk} only tries to open a TCP/IP socket once.
@item POSIXLY_CORRECT
Causes @command{gawk} to switch to POSIX-compatibility
@@ -4487,7 +4503,7 @@ If this variable exists, @command{gawk} includes the @value{FN}
and line number within the @command{gawk} source code
from which warning and/or fatal messages
are generated. Its purpose is to help isolate the source of a
-message, as there are multiple places which produce the
+message, as there are multiple places that produce the
same warning or error message.
@item GAWK_NO_DFA
@@ -4503,16 +4519,16 @@ This specifies the amount by which @command{gawk} should grow its
internal evaluation stack, when needed.
@item INT_CHAIN_MAX
-The intended maximum number of items @command{gawk} will maintain on a
+This specifies intended maximum number of items @command{gawk} will maintain on a
hash chain for managing arrays indexed by integers.
@item STR_CHAIN_MAX
-The intended maximum number of items @command{gawk} will maintain on a
+This specifies intended maximum number of items @command{gawk} will maintain on a
hash chain for managing arrays indexed by strings.
@item TIDYMEM
If this variable exists, @command{gawk} uses the @code{mtrace()} library
-calls from GNU LIBC to help track down possible memory leaks.
+calls from the GNU C library to help track down possible memory leaks.
@end table
@node Exit Status
@@ -4549,7 +4565,7 @@ The @code{@@include} keyword can be used to read external @command{awk} source
files. This gives you the ability to split large @command{awk} source files
into smaller, more manageable pieces, and also lets you reuse common @command{awk}
code from various @command{awk} scripts. In other words, you can group
-together @command{awk} functions, used to carry out specific tasks,
+together @command{awk} functions used to carry out specific tasks
into external files. These files can be used just like function libraries,
using the @code{@@include} keyword in conjunction with the @env{AWKPATH}
environment variable. Note that source files may also be included
@@ -4584,7 +4600,7 @@ $ @kbd{gawk -f test2}
@print{} This is script test2.
@end example
-@code{gawk} runs the @file{test2} script, which includes @file{test1}
+@command{gawk} runs the @file{test2} script, which includes @file{test1}
using the @code{@@include}
keyword. So, to include external @command{awk} source files, you just
use @code{@@include} followed by the name of the file to be included,
@@ -4639,11 +4655,12 @@ of the @env{AWKPATH} variable in command-line file searches
This is very helpful in constructing @command{gawk} function libraries.
If you have a large script with useful, general-purpose @command{awk}
functions, you can break it down into library files and put those files
-in a special directory. You can then include those ``libraries,'' using
-either the full pathnames of the files, or by setting the @env{AWKPATH}
+in a special directory. You can then include those ``libraries,''
+either by using the full pathnames of the files, or by setting the @env{AWKPATH}
environment variable accordingly and then using @code{@@include} with
-just the file part of the full pathname. Of course, you can have more
-than one directory to keep library files; the more complex the working
+just the file part of the full pathname. Of course,
+you can keep library files in more than one directory;
+the more complex the working
environment is, the more directories you may need to organize the files
to be included.
@@ -4656,8 +4673,8 @@ In particular, @code{@@include} is very useful for writing CGI scripts
to be run from web pages.
As mentioned in @ref{AWKPATH Variable}, the current directory is always
-searched first for source files, before searching in @env{AWKPATH},
-and this also applies to files named with @code{@@include}.
+searched first for source files, before searching in @env{AWKPATH};
+this also applies to files named with @code{@@include}.
@node Loading Shared Libraries
@section Loading Dynamic Extensions into Your Program
@@ -4711,8 +4728,8 @@ It also describes the @code{ordchr} extension.
@cindex features, deprecated
@cindex obsolete features
This @value{SECTION} describes features and/or command-line options from
-previous releases of @command{gawk} that are either not available in the
-current version or that are still supported but deprecated (meaning that
+previous releases of @command{gawk} that either are not available in the
+current version or are still supported but deprecated (meaning that
they will @emph{not} be in the next release).
The process-related special files @file{/dev/pid}, @file{/dev/ppid},
@@ -4792,7 +4809,7 @@ This seems to have been a long-undocumented feature in Unix @command{awk}.
Similarly, you may use @code{print} or @code{printf} statements in the
@var{init} and @var{increment} parts of a @code{for} loop. This is another
-long-undocumented ``feature'' of Unix @code{awk}.
+long-undocumented ``feature'' of Unix @command{awk}.
@end ignore
@@ -4809,7 +4826,7 @@ to run @command{awk}.
@item
The three standard options for all versions of @command{awk} are
-@option{-f}, @option{-F} and @option{-v}. @command{gawk} supplies these
+@option{-f}, @option{-F}, and @option{-v}. @command{gawk} supplies these
and many others, as well as corresponding GNU-style long options.
@item
@@ -4846,13 +4863,12 @@ and @option{-f} command-line options.
@item
@command{gawk} allows you to load additional functions written in C
or C++ using the @code{@@load} statement and/or the @option{-l} option.
-(This advanced feature is described later on in @ref{Dynamic Extensions}.)
+(This advanced feature is described later, in @ref{Dynamic Extensions}.)
@end itemize
@node Regexp
@chapter Regular Expressions
@cindex regexp
-@c STARTOFRANGE regexp
@cindex regular expressions
A @dfn{regular expression}, or @dfn{regexp}, is a way of describing a
@@ -5059,7 +5075,7 @@ Horizontal TAB, @kbd{Ctrl-i}, ASCII code 9 (HT).
@cindex @code{\} (backslash), @code{\v} escape sequence
@cindex backslash (@code{\}), @code{\v} escape sequence
@item \v
-Vertical tab, @kbd{Ctrl-k}, ASCII code 11 (VT).
+Vertical TAB, @kbd{Ctrl-k}, ASCII code 11 (VT).
@cindex @code{\} (backslash), @code{\}@var{nnn} escape sequence
@cindex backslash (@code{\}), @code{\}@var{nnn} escape sequence
@@ -5085,13 +5101,12 @@ letters or numbers. @value{COMMONEXT}
@quotation CAUTION
In ISO C, the escape sequence continues until the first nonhexadecimal
digit is seen.
-@c FIXME: Add exact version here.
For many years, @command{gawk} would continue incorporating
hexadecimal digits into the value until a non-hexadecimal digit
or the end of the string was encountered.
However, using more than two hexadecimal digits produced
undefined results.
-As of @value{PVERSION} @strong{FIXME:} 4.3.0, only two digits
+As of @value{PVERSION} 4.2, only two digits
are processed.
@end quotation
@@ -5134,7 +5149,7 @@ characters @samp{a+b}.
@cindex @code{\} (backslash), in escape sequences
@cindex portability
For complete portability, do not use a backslash before any character not
-shown in the previous list and that is not an operator.
+shown in the previous list or that is not an operator.
@c 11/2014: Moved so as to not stack sidebars
@sidebar Backslash Before Regular Characters
@@ -5213,7 +5228,6 @@ escape sequences literally when used in regexp constants. Thus,
@node Regexp Operators
@section Regular Expression Operators
-@c STARTOFRANGE regexpo
@cindex regular expressions, operators
@cindex metacharacters in regular expressions
@@ -5231,7 +5245,7 @@ are recognized and converted into corresponding real characters as
the very first step in processing regexps.
Here is a list of metacharacters. All characters that are not escape
-sequences and that are not listed in the following stand for themselves:
+sequences and that are not listed here stand for themselves:
@c Use @asis so the docbook comes out ok. Sigh.
@table @asis
@@ -5354,7 +5368,7 @@ just @samp{p} if no @samp{h}s are present.
There are two subtle points to understand about how @samp{*} works.
First, the @samp{*} applies only to the single preceding regular expression
component (e.g., in @samp{ph*}, it applies just to the @samp{h}).
-To cause @samp{*} to apply to a larger sub-expression, use parentheses:
+To cause @samp{*} to apply to a larger subexpression, use parentheses:
@samp{(ph)*} matches @samp{ph}, @samp{phph}, @samp{phphph}, and so on.
Second, @samp{*} finds as many repetitions as possible. If the text
@@ -5393,10 +5407,10 @@ is repeated at least @var{n} times:
Matches @samp{whhhy}, but not @samp{why} or @samp{whhhhy}.
@item wh@{3,5@}y
-Matches @samp{whhhy}, @samp{whhhhy}, or @samp{whhhhhy}, only.
+Matches @samp{whhhy}, @samp{whhhhy}, or @samp{whhhhhy} only.
@item wh@{2,@}y
-Matches @samp{whhy} or @samp{whhhy}, and so on.
+Matches @samp{whhy}, @samp{whhhy}, and so on.
@end table
@cindex POSIX @command{awk}, interval expressions in
@@ -5445,11 +5459,9 @@ usage as a syntax error.
If @command{gawk} is in compatibility mode (@pxref{Options}), interval
expressions are not available in regular expressions.
-@c ENDOFRANGE regexpo
@node Bracket Expressions
@section Using Bracket Expressions
-@c STARTOFRANGE charlist
@cindex bracket expressions
@cindex bracket expressions, range expressions
@cindex range expressions (regexps)
@@ -5525,7 +5537,7 @@ POSIX standard.
(a space is printable but not visible, whereas an @samp{a} is both)
@item @code{[:lower:]} @tab Lowercase alphabetic characters
@item @code{[:print:]} @tab Printable characters (characters that are not control characters)
-@item @code{[:punct:]} @tab Punctuation characters (characters that are not letters, digits
+@item @code{[:punct:]} @tab Punctuation characters (characters that are not letters, digits,
control characters, or space characters)
@item @code{[:space:]} @tab Space characters (such as space, TAB, and formfeed, to name a few)
@item @code{[:upper:]} @tab Uppercase alphabetic characters
@@ -5545,11 +5557,11 @@ and numeric characters in your character set.
@c Date: Tue, 01 Jul 2014 07:39:51 +0200
@c From: Hermann Peifer <peifer@gmx.eu>
Some utilities that match regular expressions provide a nonstandard
-@code{[:ascii:]} character class; @command{awk} does not. However, you
-can simulate such a construct using @code{[\x00-\x7F]}. This matches
+@samp{[:ascii:]} character class; @command{awk} does not. However, you
+can simulate such a construct using @samp{[\x00-\x7F]}. This matches
all values numerically between zero and 127, which is the defined
range of the ASCII character set. Use a complemented character list
-(@code{[^\x00-\x7F]}) to match any single-byte characters that are not
+(@samp{[^\x00-\x7F]}) to match any single-byte characters that are not
in the ASCII range.
@cindex bracket expressions, collating elements
@@ -5578,8 +5590,8 @@ Locale-specific names for a list of
characters that are equal. The name is enclosed between
@samp{[=} and @samp{=]}.
For example, the name @samp{e} might be used to represent all of
-``e,'' ``@`e,'' and ``@'e.'' In this case, @samp{[[=e=]]} is a regexp
-that matches any of @samp{e}, @samp{@'e}, or @samp{@`e}.
+``e,'' ``@^e,'' ``@`e,'' and ``@'e.'' In this case, @samp{[[=e=]]} is a regexp
+that matches any of @samp{e}, @samp{@^e}, @samp{@'e}, or @samp{@`e}.
@end table
These features are very valuable in non-English-speaking locales.
@@ -5593,7 +5605,6 @@ expression matching currently recognize only POSIX character classes;
they do not recognize collating symbols or equivalence classes.
@end quotation
@c maybe one day ...
-@c ENDOFRANGE charlist
@node Leftmost Longest
@section How Much Text Matches?
@@ -5609,7 +5620,7 @@ echo aaaabcd | awk '@{ sub(/a+/, "<A>"); print @}'
This example uses the @code{sub()} function to make a change to the input
record. (@code{sub()} replaces the first instance of any text matched
by the first argument with the string provided as the second argument;
-@pxref{String Functions}). Here, the regexp @code{/a+/} indicates ``one
+@pxref{String Functions}.) Here, the regexp @code{/a+/} indicates ``one
or more @samp{a} characters,'' and the replacement text is @samp{<A>}.
The input contains four @samp{a} characters.
@@ -5637,9 +5648,7 @@ and also @pxref{Field Separators}).
@node Computed Regexps
@section Using Dynamic Regexps
-@c STARTOFRANGE dregexp
@cindex regular expressions, computed
-@c STARTOFRANGE regexpd
@cindex regular expressions, dynamic
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
@@ -5665,14 +5674,14 @@ and tests whether the input record matches this regexp.
@quotation NOTE
When using the @samp{~} and @samp{!~}
-operators, there is a difference between a regexp constant
+operators, be aware that there is a difference between a regexp constant
enclosed in slashes and a string constant enclosed in double quotes.
If you are going to use a string constant, you have to understand that
the string is, in essence, scanned @emph{twice}: the first time when
@command{awk} reads your program, and the second time when it goes to
match the string on the lefthand side of the operator with the pattern
on the right. This is true of any string-valued expression (such as
-@code{digits_regexp}, shown previously), not just string constants.
+@code{digits_regexp}, shown in the previous example), not just string constants.
@end quotation
@cindex regexp constants, slashes vs.@: quotes
@@ -5746,17 +5755,13 @@ $ @kbd{awk '$0 ~ /[ \t\n]/'}
@command{gawk} does not have this problem, and it isn't likely to
occur often in practice, but it's worth noting for future reference.
@end sidebar
-@c ENDOFRANGE dregexp
-@c ENDOFRANGE regexpd
@node GNU Regexp Operators
@section @command{gawk}-Specific Regexp Operators
@c This section adapted (long ago) from the regex-0.12 manual
-@c STARTOFRANGE regexpg
@cindex regular expressions, operators, @command{gawk}
-@c STARTOFRANGE gregexp
@cindex @command{gawk}, regular expressions, operators
@cindex operators, GNU-specific
@cindex regular expressions, operators, for words
@@ -5832,7 +5837,7 @@ matches either @samp{ball} or @samp{balls}, as a separate word.
@item \B
Matches the empty string that occurs between two
word-constituent characters. For example,
-@code{/\Brat\B/} matches @samp{crate} but it does not match @samp{dirty rat}.
+@code{/\Brat\B/} matches @samp{crate}, but it does not match @samp{dirty rat}.
@samp{\B} is essentially the opposite of @samp{\y}.
@end table
@@ -5851,14 +5856,14 @@ The operators are:
@cindex backslash (@code{\}), @code{\`} operator (@command{gawk})
@cindex @code{\} (backslash), @code{\`} operator (@command{gawk})
Matches the empty string at the
-beginning of a buffer (string).
+beginning of a buffer (string)
@c @cindex operators, @code{\'} (@command{gawk})
@cindex backslash (@code{\}), @code{\'} operator (@command{gawk})
@cindex @code{\} (backslash), @code{\'} operator (@command{gawk})
@item \'
Matches the empty string at the
-end of a buffer (string).
+end of a buffer (string)
@end table
@cindex @code{^} (caret), regexp operator
@@ -5921,15 +5926,11 @@ Allow interval expressions in regexps, if @option{--traditional}
has been provided.
Otherwise, interval expressions are available by default.
@end table
-@c ENDOFRANGE gregexp
-@c ENDOFRANGE regexpg
@node Case-sensitivity
@section Case Sensitivity in Matching
-@c STARTOFRANGE regexpcs
@cindex regular expressions, case sensitivity
-@c STARTOFRANGE csregexp
@cindex case sensitivity, regexps and
Case is normally significant in regular expressions, both when matching
ordinary characters (i.e., not metacharacters) and inside bracket
@@ -6021,8 +6022,6 @@ the right thing.}
The value of @code{IGNORECASE} has no effect if @command{gawk} is in
compatibility mode (@pxref{Options}).
Case is always significant in compatibility mode.
-@c ENDOFRANGE csregexp
-@c ENDOFRANGE regexpcs
@node Regexp Summary
@section Summary
@@ -6069,12 +6068,10 @@ versions, use @code{tolower()} or @code{toupper()}.
@end itemize
-@c ENDOFRANGE regexp
@node Reading Files
@chapter Reading Input Files
-@c STARTOFRANGE infir
@cindex reading input files
@cindex input files, reading
@cindex input files
@@ -6099,7 +6096,7 @@ This makes it more convenient for programs to work on the parts of a record.
@cindex @code{getline} command
On rare occasions, you may need to use the @code{getline} command.
-The @code{getline} command is valuable, both because it
+The @code{getline} command is valuable both because it
can do explicit input from any number of files, and because the files
used with it do not have to be named on the @command{awk} command line
(@pxref{Getline}).
@@ -6116,6 +6113,7 @@ used with it do not have to be named on the @command{awk} command line
* Getline:: Reading files under explicit program control
using the @code{getline} function.
* Read Timeout:: Reading input with a timeout.
+* Retrying Input:: Retrying input after certain errors.
* Command-line directories:: What happens if you put a directory on the
command line.
* Input Summary:: Input summary.
@@ -6125,9 +6123,7 @@ used with it do not have to be named on the @command{awk} command line
@node Records
@section How Input Is Split into Records
-@c STARTOFRANGE inspl
@cindex input, splitting into records
-@c STARTOFRANGE recspl
@cindex records, splitting input into
@cindex @code{NR} variable
@cindex @code{FNR} variable
@@ -6152,8 +6148,8 @@ never automatically reset to zero.
Records are separated by a character called the @dfn{record separator}.
By default, the record separator is the newline character.
This is why records are, by default, single lines.
-A different character can be used for the record separator by
-assigning the character to the predefined variable @code{RS}.
+To use a different character for the record separator,
+simply assign that character to the predefined variable @code{RS}.
@cindex newlines, as record separators
@cindex @code{RS} variable
@@ -6176,8 +6172,8 @@ awk 'BEGIN @{ RS = "u" @}
@noindent
changes the value of @code{RS} to @samp{u}, before reading any input.
-This is a string whose first character is the letter ``u''; as a result, records
-are separated by the letter ``u.'' Then the input file is read, and the second
+The new value is a string whose first character is the letter ``u''; as a result, records
+are separated by the letter ``u''. Then the input file is read, and the second
rule in the @command{awk} program (the action with no pattern) prints each
record. Because each @code{print} statement adds a newline at the end of
its output, this @command{awk} program copies the input
@@ -6238,8 +6234,8 @@ Bill 555-1675 bill.drowning@@hotmail.com A
@end example
@noindent
-It contains no @samp{u} so there is no reason to split the record,
-unlike the others which have one or more occurrences of the @samp{u}.
+It contains no @samp{u}, so there is no reason to split the record,
+unlike the others, which each have one or more occurrences of the @samp{u}.
In fact, this record is treated as part of the previous record;
the newline separating them in the output
is the original newline in the @value{DF}, not the one added by
@@ -6334,7 +6330,7 @@ contains the same single character. However, when @code{RS} is a
regular expression, @code{RT} contains
the actual input text that matched the regular expression.
-If the input file ended without any text that matches @code{RS},
+If the input file ends without any text matching @code{RS},
@command{gawk} sets @code{RT} to the null string.
The following example illustrates both of these features.
@@ -6427,8 +6423,6 @@ character as a record separator. However, this is a special case:
whole files. If you are using @command{gawk}, see @DBREF{Extension Sample
Readfile} for another option.
@end sidebar
-@c ENDOFRANGE inspl
-@c ENDOFRANGE recspl
@node Fields
@section Examining Fields
@@ -6436,7 +6430,6 @@ Readfile} for another option.
@cindex examining fields
@cindex fields
@cindex accessing fields
-@c STARTOFRANGE fiex
@cindex fields, examining
@cindex POSIX @command{awk}, field separators and
@cindex field separators, POSIX and
@@ -6461,11 +6454,11 @@ simple @command{awk} programs so powerful.
@cindex @code{$} (dollar sign), @code{$} field operator
@cindex dollar sign (@code{$}), @code{$} field operator
@cindex field operators@comma{} dollar sign as
-You use a dollar-sign (@samp{$})
+You use a dollar sign (@samp{$})
to refer to a field in an @command{awk} program,
followed by the number of the field you want. Thus, @code{$1}
refers to the first field, @code{$2} to the second, and so on.
-(Unlike the Unix shells, the field numbers are not limited to single digits.
+(Unlike in the Unix shells, the field numbers are not limited to single digits.
@code{$127} is the 127th field in the record.)
For example, suppose the following is a line of input:
@@ -6491,7 +6484,7 @@ If you try to reference a field beyond the last
one (such as @code{$8} when the record has only seven fields), you get
the empty string. (If used in a numeric operation, you get zero.)
-The use of @code{$0}, which looks like a reference to the ``zero-th'' field, is
+The use of @code{$0}, which looks like a reference to the ``zeroth'' field, is
a special case: it represents the whole input record. Use it
when you are not interested in specific fields.
Here are some more examples:
@@ -6517,7 +6510,6 @@ $ @kbd{awk '/li/ @{ print $1, $NF @}' mail-list}
@print{} Julie F
@print{} Samuel A
@end example
-@c ENDOFRANGE fiex
@node Nonconstant Fields
@section Nonconstant Field Numbers
@@ -6547,13 +6539,13 @@ awk '@{ print $(2*2) @}' mail-list
@end example
@command{awk} evaluates the expression @samp{(2*2)} and uses
-its value as the number of the field to print. The @samp{*} sign
+its value as the number of the field to print. The @samp{*}
represents multiplication, so the expression @samp{2*2} evaluates to four.
The parentheses are used so that the multiplication is done before the
@samp{$} operation; they are necessary whenever there is a binary
operator@footnote{A @dfn{binary operator}, such as @samp{*} for
multiplication, is one that takes two operands. The distinction
-is required, because @command{awk} also has unary (one-operand)
+is required because @command{awk} also has unary (one-operand)
and ternary (three-operand) operators.}
in the field-number expression. This example, then, prints the
type of relationship (the fourth field) for every line of the file
@@ -6578,7 +6570,6 @@ evaluating @code{NF} and using its value as a field number.
@node Changing Fields
@section Changing the Contents of a Field
-@c STARTOFRANGE ficon
@cindex fields, changing contents of
The contents of a field, as seen by @command{awk}, can be changed within an
@command{awk} program; this changes what @command{awk} perceives as the
@@ -6734,7 +6725,7 @@ rebuild @code{$0} when @code{NF} is decremented.
Finally, there are times when it is convenient to force
@command{awk} to rebuild the entire record, using the current
-value of the fields and @code{OFS}. To do this, use the
+values of the fields and @code{OFS}. To do this, use the
seemingly innocuous assignment:
@example
@@ -6758,7 +6749,7 @@ such as @code{sub()} and @code{gsub()}
It is important to remember that @code{$0} is the @emph{full}
record, exactly as it was read from the input. This includes
any leading or trailing whitespace, and the exact whitespace (or other
-characters) that separate the fields.
+characters) that separates the fields.
It is a common error to try to change the field separators
in a record simply by setting @code{FS} and @code{OFS}, and then
@@ -6770,7 +6761,6 @@ itself. Instead, you must force the record to be rebuilt, typically
with a statement such as @samp{$1 = $1}, as described earlier.
@end sidebar
-@c ENDOFRANGE ficon
@node Field Separators
@section Specifying How Fields Are Separated
@@ -6786,9 +6776,7 @@ with a statement such as @samp{$1 = $1}, as described earlier.
@cindex @code{FS} variable
@cindex fields, separating
-@c STARTOFRANGE fisepr
@cindex field separators
-@c STARTOFRANGE fisepg
@cindex fields, separating
The @dfn{field separator}, which is either a single character or a regular
expression, controls the way @command{awk} splits an input record into fields.
@@ -6854,7 +6842,7 @@ John Q. Smith, LXIX, 29 Oak St., Walamazoo, MI 42139
@end example
@noindent
-The same program would extract @samp{@bullet{}LXIX}, instead of
+The same program would extract @samp{@bullet{}LXIX} instead of
@samp{@bullet{}29@bullet{}Oak@bullet{}St.}.
If you were expecting the program to print the
address, you would be surprised. The moral is to choose your data layout and
@@ -6888,9 +6876,7 @@ rules.
@node Regexp Field Splitting
@subsection Using Regular Expressions to Separate Fields
-@c STARTOFRANGE regexpfs
@cindex regular expressions, as field separators
-@c STARTOFRANGE fsregexp
@cindex field separators, regular expressions as
The previous @value{SUBSECTION}
discussed the use of single characters or simple strings as the
@@ -6994,8 +6980,6 @@ $ @kbd{echo 'xxAA xxBxx C' |}
@print{} -->xxBxx<--
@print{} -->C<--
@end example
-@c ENDOFRANGE regexpfs
-@c ENDOFRANGE fsregexp
@node Single Character Fields
@subsection Making Each Character a Separate Field
@@ -7119,7 +7103,7 @@ choosing your field and record separators.
@cindex Unix @command{awk}, password files@comma{} field separators and
Perhaps the most common use of a single character as the field separator
occurs when processing the Unix system password file. On many Unix
-systems, each user has a separate entry in the system password file, one
+systems, each user has a separate entry in the system password file, with one
line per user. The information in these lines is separated by colons.
The first field is the user's login name and the second is the user's
encrypted or shadow password. (A shadow password is indicated by the
@@ -7160,7 +7144,7 @@ When you do this, @code{$1} is the same as @code{$0}.
According to the POSIX standard, @command{awk} is supposed to behave
as if each record is split into fields at the time it is read.
In particular, this means that if you change the value of @code{FS}
-after a record is read, the value of the fields (i.e., how they were split)
+after a record is read, the values of the fields (i.e., how they were split)
should reflect the old value of @code{FS}, not the new one.
@cindex dark corner, field separators
@@ -7173,10 +7157,7 @@ using the @emph{current} value of @code{FS}!
@value{DARKCORNER}
This behavior can be difficult
to diagnose. The following example illustrates the difference
-between the two methods.
-(The @command{sed}@footnote{The @command{sed} utility is a ``stream editor.''
-Its behavior is also defined by the POSIX standard.}
-command prints just the first line of @file{/etc/passwd}.)
+between the two methods:
@example
sed 1q /etc/passwd | awk '@{ FS = ":" ; print $1 @}'
@@ -7196,6 +7177,10 @@ prints the full first line of the file, something like:
@example
root:x:0:0:Root:/:
@end example
+
+(The @command{sed}@footnote{The @command{sed} utility is a ``stream editor.''
+Its behavior is also defined by the POSIX standard.}
+command prints just the first line of @file{/etc/passwd}.)
@end sidebar
@node Field Splitting Summary
@@ -7256,8 +7241,6 @@ do it for you (e.g., @samp{FS = "[c]"}). In this case, @code{IGNORECASE}
will take effect.
@end sidebar
-@c ENDOFRANGE fisepr
-@c ENDOFRANGE fisepg
@node Constant Size
@section Reading Fixed-Width Data
@@ -7295,7 +7278,7 @@ variable @code{FIELDWIDTHS}. Each number specifies the width of the field,
@emph{including} columns between fields. If you want to ignore the columns
between fields, you can specify the width as a separate field that is
subsequently ignored.
-It is a fatal error to supply a field width that is not a positive number.
+It is a fatal error to supply a field width that has a negative value.
The following data is the output of the Unix @command{w} utility. It is useful
to illustrate the use of @code{FIELDWIDTHS}:
@@ -7372,7 +7355,7 @@ In order to tell which kind of field splitting is in effect,
use @code{PROCINFO["FS"]}
(@pxref{Auto-set}).
The value is @code{"FS"} if regular field splitting is being used,
-or it is @code{"FIELDWIDTHS"} if fixed-width field splitting is being used:
+or @code{"FIELDWIDTHS"} if fixed-width field splitting is being used:
@example
if (PROCINFO["FS"] == "FS")
@@ -7408,14 +7391,14 @@ what they are, and not by what they are not.
The most notorious such case
is so-called @dfn{comma-separated values} (CSV) data. Many spreadsheet programs,
for example, can export their data into text files, where each record is
-terminated with a newline, and fields are separated by commas. If only
-commas separated the data, there wouldn't be an issue. The problem comes when
+terminated with a newline, and fields are separated by commas. If
+commas only separated the data, there wouldn't be an issue. The problem comes when
one of the fields contains an @emph{embedded} comma.
In such cases, most programs embed the field in double quotes.@footnote{The
CSV format lacked a formal standard definition for many years.
@uref{http://www.ietf.org/rfc/rfc4180.txt, RFC 4180}
standardizes the most common practices.}
-So we might have data like this:
+So, we might have data like this:
@example
@c file eg/misc/addresses.csv
@@ -7501,8 +7484,8 @@ of cases, and the @command{gawk} developers are satisfied with that.
@end quotation
As written, the regexp used for @code{FPAT} requires that each field
-have a least one character. A straightforward modification
-(changing changed the first @samp{+} to @samp{*}) allows fields to be empty:
+contain at least one character. A straightforward modification
+(changing the first @samp{+} to @samp{*}) allows fields to be empty:
@example
FPAT = "([^,]*)|(\"[^\"]+\")"
@@ -7512,20 +7495,17 @@ Finally, the @code{patsplit()} function makes the same functionality
available for splitting regular strings (@pxref{String Functions}).
To recap, @command{gawk} provides three independent methods
-to split input records into fields. @command{gawk} uses whichever
-mechanism was last chosen based on which of the three
-variables---@code{FS}, @code{FIELDWIDTHS}, and @code{FPAT}---was
+to split input records into fields.
+The mechanism used is based on which of the three
+variables---@code{FS}, @code{FIELDWIDTHS}, or @code{FPAT}---was
last assigned to.
@node Multiple Line
@section Multiple-Line Records
@cindex multiple-line records
-@c STARTOFRANGE recm
@cindex records, multiline
-@c STARTOFRANGE imr
@cindex input, multiline records
-@c STARTOFRANGE frm
@cindex files, reading, multiline records
@cindex input, files, See input files
In some databases, a single line cannot conveniently hold all the
@@ -7560,7 +7540,7 @@ at the end of the record and one or more blank lines after the record.
In addition, a regular expression always matches the longest possible
sequence when there is a choice
(@pxref{Leftmost Longest}).
-So the next record doesn't start until
+So, the next record doesn't start until
the first nonblank line that follows---no matter how many blank lines
appear in a row, they are considered one record separator.
@@ -7575,10 +7555,10 @@ In the second case, this special processing is not done.
@cindex field separator, in multiline records
@cindex @code{FS}, in multiline records
Now that the input is separated into records, the second step is to
-separate the fields in the record. One way to do this is to divide each
+separate the fields in the records. One way to do this is to divide each
of the lines into fields in the normal manner. This happens by default
as the result of a special feature. When @code{RS} is set to the empty
-string, @emph{and} @code{FS} is set to a single character,
+string @emph{and} @code{FS} is set to a single character,
the newline character @emph{always} acts as a field separator.
This is in addition to whatever field separations result from
@code{FS}.@footnote{When @code{FS} is the null string (@code{""})
@@ -7593,7 +7573,7 @@ want the newline character to separate fields, because there is no way to
prevent it. However, you can work around this by using the @code{split()}
function to break up the record manually
(@pxref{String Functions}).
-If you have a single character field separator, you can work around
+If you have a single-character field separator, you can work around
the special feature in a different way, by making @code{FS} into a
regexp for that single character. For example, if the field
separator is a percent character, instead of
@@ -7601,10 +7581,10 @@ separator is a percent character, instead of
Another way to separate fields is to
put each field on a separate line: to do this, just set the
-variable @code{FS} to the string @code{"\n"}. (This single
-character separator matches a single newline.)
+variable @code{FS} to the string @code{"\n"}.
+(This single-character separator matches a single newline.)
A practical example of a @value{DF} organized this way might be a mailing
-list, where each entry is separated by blank lines. Consider a mailing
+list, where blank lines separate the entries. Consider a mailing
list in a file named @file{addresses}, which looks like this:
@example
@@ -7692,20 +7672,15 @@ If not in compatibility mode (@pxref{Options}), @command{gawk} sets
@code{RT} to the input text that matched the value specified by @code{RS}.
But if the input file ended without any text that matches @code{RS},
then @command{gawk} sets @code{RT} to the null string.
-@c ENDOFRANGE recm
-@c ENDOFRANGE imr
-@c ENDOFRANGE frm
@node Getline
@section Explicit Input with @code{getline}
-@c STARTOFRANGE getl
@cindex @code{getline} command, explicit input with
-@c STARTOFRANGE inex
@cindex input, explicit
So far we have been getting our input data from @command{awk}'s main
input stream---either the standard input (usually your keyboard, sometimes
-the output from another program) or from the
+the output from another program) or the
files specified on the command line. The @command{awk} language has a
special built-in command called @code{getline} that
can be used to read input under your explicit control.
@@ -7741,6 +7716,13 @@ a record, such as a file that cannot be opened, then @code{getline}
returns @minus{}1. In this case, @command{gawk} sets the variable
@code{ERRNO} to a string describing the error that occurred.
+If @code{ERRNO} indicates that the I/O operation may be
+retried, and @code{PROCINFO["@var{input}", "RETRY"]} is set,
+then @code{getline} returns @minus{}2
+instead of @minus{}1, and further calls to @code{getline}
+may be attemped. @DBXREF{Retrying Input} for further information about
+this feature.
+
In the following examples, @var{command} stands for a string value that
represents a shell command.
@@ -7889,7 +7871,7 @@ free
@end example
The @code{getline} command used in this way sets only the variables
-@code{NR}, @code{FNR}, and @code{RT} (and of course, @var{var}).
+@code{NR}, @code{FNR}, and @code{RT} (and, of course, @var{var}).
The record is not
split into fields, so the values of the fields (including @code{$0}) and
the value of @code{NF} do not change.
@@ -7904,7 +7886,7 @@ the value of @code{NF} do not change.
@cindex left angle bracket (@code{<}), @code{<} operator (I/O)
@cindex operators, input/output
Use @samp{getline < @var{file}} to read the next record from @var{file}.
-Here @var{file} is a string-valued expression that
+Here, @var{file} is a string-valued expression that
specifies the @value{FN}. @samp{< @var{file}} is called a @dfn{redirection}
because it directs input to come from a different place.
For example, the following
@@ -8082,7 +8064,7 @@ of a construct like @samp{@w{"echo "} "date" | getline}.
Most versions, including the current version, treat it at as
@samp{@w{("echo "} "date") | getline}.
(This is also how BWK @command{awk} behaves.)
-Some versions changed and treated it as
+Some versions instead treat it as
@samp{@w{"echo "} ("date" | getline)}.
(This is how @command{mawk} behaves.)
In short, @emph{always} use explicit parentheses, and then you won't
@@ -8130,7 +8112,7 @@ program to be portable to other @command{awk} implementations.
@cindex operators, input/output
@cindex differences in @command{awk} and @command{gawk}, input/output operators
-Input into @code{getline} from a pipe is a one-way operation.
+Reading input into @code{getline} from a pipe is a one-way operation.
The command that is started with @samp{@var{command} | getline} only
sends data @emph{to} your @command{awk} program.
@@ -8140,7 +8122,7 @@ for processing and then read the results back.
communications are possible. This is done with the @samp{|&}
operator.
Typically, you write data to the coprocess first and then
-read results back, as shown in the following:
+read the results back, as shown in the following:
@example
print "@var{some query}" |& "db_server"
@@ -8223,7 +8205,7 @@ also @pxref{Auto-set}.)
@item
Using @code{FILENAME} with @code{getline}
(@samp{getline < FILENAME})
-is likely to be a source for
+is likely to be a source of
confusion. @command{awk} opens a separate input stream from the
current input file. However, by not using a variable, @code{$0}
and @code{NF} are still updated. If you're doing this, it's
@@ -8231,9 +8213,15 @@ probably by accident, and you should reconsider what it is you're
trying to accomplish.
@item
-@DBREF{Getline Summary} presents a table summarizing the
+@ifdocbook
+The next section
+@end ifdocbook
+@ifnotdocbook
+@ref{Getline Summary},
+@end ifnotdocbook
+presents a table summarizing the
@code{getline} variants and which variables they can affect.
-It is worth noting that those variants which do not use redirection
+It is worth noting that those variants that do not use redirection
can cause @code{FILENAME} to be updated if they cause
@command{awk} to start reading a new input file.
@@ -8242,7 +8230,7 @@ can cause @code{FILENAME} to be updated if they cause
If the variable being assigned is an expression with side effects,
different versions of @command{awk} behave differently upon encountering
end-of-file. Some versions don't evaluate the expression; many versions
-(including @command{gawk}) do. Here is an example, due to Duncan Moore:
+(including @command{gawk}) do. Here is an example, courtesy of Duncan Moore:
@ignore
Date: Sun, 01 Apr 2012 11:49:33 +0100
@@ -8259,7 +8247,7 @@ BEGIN @{
@noindent
Here, the side effect is the @samp{++c}. Is @code{c} incremented if
-end of file is encountered, before the element in @code{a} is assigned?
+end-of-file is encountered before the element in @code{a} is assigned?
@command{gawk} treats @code{getline} like a function call, and evaluates
the expression @samp{a[++c]} before attempting to read from @file{f}.
@@ -8291,9 +8279,6 @@ Note: for each variant, @command{gawk} sets the @code{RT} predefined variable.
@item @var{command} @code{|& getline} @var{var} @tab Sets @var{var} and @code{RT} @tab @command{gawk}
@end multitable
@end float
-@c ENDOFRANGE getl
-@c ENDOFRANGE inex
-@c ENDOFRANGE infir
@node Read Timeout
@section Reading Input with a Timeout
@@ -8304,8 +8289,8 @@ This @value{SECTION} describes a feature that is specific to @command{gawk}.
You may specify a timeout in milliseconds for reading input from the keyboard,
a pipe, or two-way communication, including TCP/IP sockets. This can be done
-on a per input, command, or connection basis, by setting a special element
-in the @code{PROCINFO} array (@pxref{Auto-set}):
+on a per-input, per-command, or per-connection basis, by setting a special
+element in the @code{PROCINFO} array (@pxref{Auto-set}):
@example
PROCINFO["input_name", "READ_TIMEOUT"] = @var{timeout in milliseconds}
@@ -8336,7 +8321,7 @@ while ((getline < "/dev/stdin") > 0)
@end example
@command{gawk} terminates the read operation if input does not
-arrive after waiting for the timeout period, returns failure
+arrive after waiting for the timeout period, returns failure,
and sets @code{ERRNO} to an appropriate string value.
A negative or zero value for the timeout is the same as specifying
no timeout at all.
@@ -8346,7 +8331,7 @@ loop that reads input records and matches them against patterns,
like so:
@example
-$ @kbd{ gawk 'BEGIN @{ PROCINFO["-", "READ_TIMEOUT"] = 5000 @}}
+$ @kbd{gawk 'BEGIN @{ PROCINFO["-", "READ_TIMEOUT"] = 5000 @}}
> @kbd{@{ print "You entered: " $0 @}'}
@kbd{gawk}
@print{} You entered: gawk
@@ -8386,13 +8371,14 @@ If the @code{PROCINFO} element is not present and the
@command{gawk} uses its value to initialize the timeout value.
The exclusive use of the environment variable to specify timeout
has the disadvantage of not being able to control it
-on a per command or connection basis.
+on a per-command or per-connection basis.
@command{gawk} considers a timeout event to be an error even though
the attempt to read from the underlying device may
succeed in a later attempt. This is a limitation, and it also
means that you cannot use this to multiplex input from
-two or more sources.
+two or more sources. @DBXREF{Retrying Input} for a way to enable
+later I/O attempts to succeed.
Assigning a timeout value prevents read operations from
blocking indefinitely. But bear in mind that there are other ways
@@ -8402,6 +8388,36 @@ a connection before it can start reading any data,
or the attempt to open a FIFO special file for reading can block
indefinitely until some other process opens it for writing.
+@node Retrying Input
+@section Retrying Reads After Certain Input Errors
+@cindex retrying input
+
+@cindex differences in @command{awk} and @command{gawk}, retrying input
+This @value{SECTION} describes a feature that is specific to @command{gawk}.
+
+When @command{gawk} encounters an error while reading input, by
+default @code{getline} returns @minus{}1, and subsequent attempts to
+read from that file result in an end-of-file indication. However, you
+may optionally instruct @command{gawk} to allow I/O to be retried when
+certain errors are encountered by setting a special element in
+the @code{PROCINFO} array (@pxref{Auto-set}):
+
+@example
+PROCINFO["@var{input_name}", "RETRY"] = 1
+@end example
+
+When this element exists, @command{gawk} checks the value of the system
+(C language)
+@code{errno} variable when an I/O error occurs. If @code{errno} indicates
+a subsequent I/O attempt may succeed, @code{getline} instead returns
+@minus{}2 and
+further calls to @code{getline} may succeed. This applies to the @code{errno}
+values @code{EAGAIN}, @code{EWOULDBLOCK}, @code{EINTR}, or @code{ETIMEDOUT}.
+
+This feature is useful in conjunction with
+@code{PROCINFO["@var{input_name}", "READ_TIMEOUT"]} or situations where a file
+descriptor has been configured to behave in a non-blocking fashion.
+
@node Command-line directories
@section Directories on the Command Line
@cindex differences in @command{awk} and @command{gawk}, command-line directories
@@ -8452,7 +8468,7 @@ The possibilities are as follows:
@item
After splitting the input into records, @command{awk} further splits
-the record into individual fields, named @code{$1}, @code{$2}, and so
+the records into individual fields, named @code{$1}, @code{$2}, and so
on. @code{$0} is the whole record, and @code{NF} indicates how many
fields there are. The default way to split fields is between whitespace
characters.
@@ -8468,12 +8484,12 @@ thing. Decrementing @code{NF} throws away fields and rebuilds the record.
@item
Field splitting is more complicated than record splitting:
-@multitable @columnfractions .40 .45 .15
+@multitable @columnfractions .40 .40 .20
@headitem Field separator value @tab Fields are split @dots{} @tab @command{awk} / @command{gawk}
@item @code{FS == " "} @tab On runs of whitespace @tab @command{awk}
@item @code{FS == @var{any single character}} @tab On that character @tab @command{awk}
@item @code{FS == @var{regexp}} @tab On text matching the regexp @tab @command{awk}
-@item @code{FS == ""} @tab Each individual character is a separate field @tab @command{gawk}
+@item @code{FS == ""} @tab Such that each individual character is a separate field @tab @command{gawk}
@item @code{FIELDWIDTHS == @var{list of columns}} @tab Based on character position @tab @command{gawk}
@item @code{FPAT == @var{regexp}} @tab On the text surrounding text matching the regexp @tab @command{gawk}
@end multitable
@@ -8490,11 +8506,11 @@ This can also be done using command-line variable assignment.
Use @code{PROCINFO["FS"]} to see how fields are being split.
@item
-Use @code{getline} in its various forms to read additional records,
+Use @code{getline} in its various forms to read additional records
from the default input stream, from a file, or from a pipe or coprocess.
@item
-Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to timeout
+Use @code{PROCINFO[@var{file}, "READ_TIMEOUT"]} to cause reads to time out
for @var{file}.
@item
@@ -8528,7 +8544,6 @@ That can be fixed by making one simple change. What is it?
@node Printing
@chapter Printing Output
-@c STARTOFRANGE prnt
@cindex printing
@cindex output, printing, See printing
One of the most common programming actions is to @dfn{print}, or output,
@@ -8544,7 +8559,6 @@ columns, whether to use exponential notation or not, and so on.
For printing with specifications, you need the @code{printf} statement
(@pxref{Printf}).
-@c STARTOFRANGE prnts
@cindex @code{print} statement
@cindex @code{printf} statement
Besides basic and formatted printing, this @value{CHAPTER}
@@ -8565,6 +8579,7 @@ and discusses the @code{close()} built-in function.
@command{gawk} allows access to inherited file
descriptors.
* Close Files And Pipes:: Closing Input and Output Files and Pipes.
+* Nonfatal:: Enabling Nonfatal Output.
* Output Summary:: Output summary.
* Output Exercises:: Exercises.
@end menu
@@ -8605,7 +8620,7 @@ space is printed between any two items.
Note that the @code{print} statement is a statement and not an
expression---you can't use it in the pattern part of a
-@var{pattern}-@var{action} statement, for example.
+pattern--action statement, for example.
@node Print Examples
@section @code{print} Statement Examples
@@ -8724,7 +8739,6 @@ You can continue either a @code{print} or
@code{printf} statement simply by putting a newline after any comma
(@pxref{Statements/Lines}).
@end quotation
-@c ENDOFRANGE prnts
@node Output Separators
@section Output Separators
@@ -8797,7 +8811,7 @@ runs together on a single line.
@cindex numeric, output format
@cindex formats@comma{} numeric output
When printing numeric values with the @code{print} statement,
-@command{awk} internally converts the number to a string of characters
+@command{awk} internally converts each number to a string of characters
and prints that string. @command{awk} uses the @code{sprintf()} function
to do this conversion
(@pxref{String Functions}).
@@ -8837,7 +8851,6 @@ if @code{OFMT} contains anything but a floating-point conversion specification.
@node Printf
@section Using @code{printf} Statements for Fancier Printing
-@c STARTOFRANGE printfs
@cindex @code{printf} statement
@cindex output, formatted
@cindex formatting output
@@ -8869,7 +8882,7 @@ printf @var{format}, @var{item1}, @var{item2}, @dots{}
@noindent
As for @code{print}, the entire list of arguments may optionally be
enclosed in parentheses. Here too, the parentheses are necessary if any
-of the item expressions use the @samp{>} relational operator; otherwise,
+of the item expressions uses the @samp{>} relational operator; otherwise,
it can be confused with an output redirection (@pxref{Redirection}).
@cindex format specifiers
@@ -8900,7 +8913,7 @@ $ @kbd{awk 'BEGIN @{}
@end example
@noindent
-Here, neither the @samp{+} nor the @samp{OUCH!} appear in
+Here, neither the @samp{+} nor the @samp{OUCH!} appears in
the output message.
@node Control Letters
@@ -8947,8 +8960,8 @@ The two control letters are equivalent.
(The @samp{%i} specification is for compatibility with ISO C.)
@item @code{%e}, @code{%E}
-Print a number in scientific (exponential) notation;
-for example:
+Print a number in scientific (exponential) notation.
+For example:
@example
printf "%4.3e\n", 1950
@@ -8985,7 +8998,7 @@ The special ``not a number'' value formats as @samp{-nan} or @samp{nan}
(@pxref{Math Definitions}).
@item @code{%F}
-Like @samp{%f} but the infinity and ``not a number'' values are spelled
+Like @samp{%f}, but the infinity and ``not a number'' values are spelled
using uppercase letters.
The @samp{%F} format is a POSIX extension to ISO C; not all systems
@@ -9035,7 +9048,6 @@ values or do something else entirely.
@node Format Modifiers
@subsection Modifiers for @code{printf} Formats
-@c STARTOFRANGE pfm
@cindex @code{printf} statement, modifiers
@cindex modifiers@comma{} in format specifiers
A format specification can also include @dfn{modifiers} that can control
@@ -9046,12 +9058,12 @@ represent
spaces in the output. Here are the possible modifiers, in the order in
which they may appear:
-@table @code
+@table @asis
@cindex differences in @command{awk} and @command{gawk}, @code{print}/@code{printf} statements
@cindex @code{printf} statement, positional specifiers
@c the code{} does NOT start a secondary
@cindex positional specifiers, @code{printf} statement
-@item @var{N}$
+@item @code{@var{N}$}
An integer constant followed by a @samp{$} is a @dfn{positional specifier}.
Normally, format specifications are applied to arguments in the order
given in the format string. With a positional specifier, the format
@@ -9074,7 +9086,7 @@ messages at runtime.
which describes how and why to use positional specifiers.
For now, we ignore them.
-@item - (Minus)
+@item @code{-} (Minus)
The minus sign, used before the width modifier (see later on in
this list),
says to left-justify
@@ -9092,13 +9104,13 @@ prints @samp{foo@bullet{}}.
For numeric conversions, prefix positive values with a space and
negative values with a minus sign.
-@item +
+@item @code{+}
The plus sign, used before the width modifier (see later on in
this list),
says to always supply a sign for numeric conversions, even if the data
to format is positive. The @samp{+} overrides the space modifier.
-@item #
+@item @code{#}
Use an ``alternative form'' for certain control letters.
For @samp{%o}, supply a leading zero.
For @samp{%x} and @samp{%X}, supply a leading @samp{0x} or @samp{0X} for
@@ -9107,14 +9119,14 @@ For @samp{%e}, @samp{%E}, @samp{%f}, and @samp{%F}, the result always
contains a decimal point.
For @samp{%g} and @samp{%G}, trailing zeros are not removed from the result.
-@item 0
+@item @code{0}
A leading @samp{0} (zero) acts as a flag indicating that output should be
padded with zeros instead of spaces.
This applies only to the numeric output formats.
This flag only has an effect when the field width is wider than the
value to print.
-@item '
+@item @code{'}
A single quote or apostrophe character is a POSIX extension to ISO C.
It indicates that the integer part of a floating-point value, or the
entire part of an integer decimal value, should have a thousands-separator
@@ -9167,7 +9179,7 @@ prints @samp{foobar}.
Preceding the @var{width} with a minus sign causes the output to be
padded with spaces on the right, instead of on the left.
-@item .@var{prec}
+@item @code{.@var{prec}}
A period followed by an integer constant
specifies the precision to use when printing.
The meaning of the precision varies by control letter:
@@ -9230,7 +9242,7 @@ printf "%" w "." p "s\n", s
@end example
@noindent
-This is not particularly easy to read but it does work.
+This is not particularly easy to read, but it does work.
@c @cindex lint checks
@cindex troubleshooting, fatal errors, @code{printf} format strings
@@ -9241,7 +9253,6 @@ format strings. These are not valid in @command{awk}. Most @command{awk}
implementations silently ignore them. If @option{--lint} is provided
on the command line (@pxref{Options}), @command{gawk} warns about their
use. If @option{--posix} is supplied, their use is a fatal error.
-@c ENDOFRANGE pfm
@node Printf Examples
@subsection Examples Using @code{printf}
@@ -9277,7 +9288,7 @@ $ @kbd{awk '@{ printf "%-10s %s\n", $1, $2 @}' mail-list}
@end example
In this case, the phone numbers had to be printed as strings because
-the numbers are separated by a dash. Printing the phone numbers as
+the numbers are separated by dashes. Printing the phone numbers as
numbers would have produced just the first three digits: @samp{555}.
This would have been pretty confusing.
@@ -9322,14 +9333,11 @@ awk 'BEGIN @{ format = "%-10s %s\n"
@{ printf format, $1, $2 @}' mail-list
@end example
-@c ENDOFRANGE printfs
@node Redirection
@section Redirecting Output of @code{print} and @code{printf}
-@c STARTOFRANGE outre
@cindex output redirection
-@c STARTOFRANGE reout
@cindex redirection of output
@cindex @option{--sandbox} option, output redirection with @code{print}, @code{printf}
So far, the output from @code{print} and @code{printf} has gone
@@ -9340,7 +9348,7 @@ This is called @dfn{redirection}.
@quotation NOTE
When @option{--sandbox} is specified (@pxref{Options}),
-redirecting output to files, pipes and coprocesses is disabled.
+redirecting output to files, pipes, and coprocesses is disabled.
@end quotation
A redirection appears after the @code{print} or @code{printf} statement.
@@ -9393,7 +9401,7 @@ Each output file contains one name or number per line.
@cindex @code{>} (right angle bracket), @code{>>} operator (I/O)
@cindex right angle bracket (@code{>}), @code{>>} operator (I/O)
@item print @var{items} >> @var{output-file}
-This redirection prints the items into the pre-existing output file
+This redirection prints the items into the preexisting output file
named @var{output-file}. The difference between this and the
single-@samp{>} redirection is that the old contents (if any) of
@var{output-file} are not erased. Instead, the @command{awk} output is
@@ -9432,7 +9440,7 @@ The unsorted list is written with an ordinary redirection, while
the sorted list is written by piping through the @command{sort} utility.
The next example uses redirection to mail a message to the mailing
-list @samp{bug-system}. This might be useful when trouble is encountered
+list @code{bug-system}. This might be useful when trouble is encountered
in an @command{awk} script run periodically for system maintenance:
@example
@@ -9463,15 +9471,23 @@ This redirection prints the items to the input of @var{command}.
The difference between this and the
single-@samp{|} redirection is that the output from @var{command}
can be read with @code{getline}.
-Thus @var{command} is a @dfn{coprocess}, which works together with,
-but subsidiary to, the @command{awk} program.
+Thus, @var{command} is a @dfn{coprocess}, which works together with
+but is subsidiary to the @command{awk} program.
This feature is a @command{gawk} extension, and is not available in
POSIX @command{awk}.
-@DBXREF{Getline/Coprocess}
+@ifnotdocbook
+@xref{Getline/Coprocess},
for a brief discussion.
-@DBXREF{Two-way I/O}
+@xref{Two-way I/O},
+for a more complete discussion.
+@end ifnotdocbook
+@ifdocbook
+@DBXREF{Getline/Coprocess}
+for a brief discussion and
+@DBREF{Two-way I/O}
for a more complete discussion.
+@end ifdocbook
@end table
Redirecting output using @samp{>}, @samp{>>}, @samp{|}, or @samp{|&}
@@ -9496,7 +9512,7 @@ This is indeed how redirections must be used from the shell. But in
@command{awk}, it isn't necessary. In this kind of case, a program should
use @samp{>} for all the @code{print} statements, because the output file
is only opened once. (It happens that if you mix @samp{>} and @samp{>>}
-that output is produced in the expected order. However, mixing the operators
+output is produced in the expected order. However, mixing the operators
for the same file is definitely poor style, and is confusing to readers
of your program.)
@@ -9546,11 +9562,9 @@ It then sends the list to the shell for execution.
@DBXREF{Shell Quoting} for a function that can help in generating
command lines to be fed to the shell.
@end sidebar
-@c ENDOFRANGE outre
-@c ENDOFRANGE reout
@node Special FD
-@section Special Files for Standard Pre-Opened Data Streams
+@section Special Files for Standard Preopened Data Streams
@cindex standard input
@cindex input, standard
@cindex standard output
@@ -9563,7 +9577,7 @@ command lines to be fed to the shell.
Running programs conventionally have three input and output streams
already available to them for reading and writing. These are known
as the @dfn{standard input}, @dfn{standard output}, and @dfn{standard
-error output}. These open streams (and any other open file or pipe)
+error output}. These open streams (and any other open files or pipes)
are often referred to by the technical term @dfn{file descriptors}.
These streams are, by default, connected to your keyboard and screen, but
@@ -9601,7 +9615,7 @@ that is connected to your keyboard and screen. It represents the
``terminal,''@footnote{The ``tty'' in @file{/dev/tty} stands for
``Teletype,'' a serial terminal.} which on modern systems is a keyboard
and screen, not a serial console.)
-This generally has the same effect but not always: although the
+This generally has the same effect, but not always: although the
standard error stream is usually the screen, it can be redirected; when
that happens, writing to the screen is not correct. In fact, if
@command{awk} is run from a background job, it may not have a
@@ -9646,7 +9660,7 @@ print "Serious error detected!" > "/dev/stderr"
@cindex troubleshooting, quotes with file names
Note the use of quotes around the @value{FN}.
-Like any other redirection, the value must be a string.
+Like with any other redirection, the value must be a string.
It is a common error to omit the quotes, which leads
to confusing results.
@@ -9657,7 +9671,6 @@ invoked with the @option{--traditional} option (@pxref{Options}).
@node Special Files
@section Special @value{FFN}s in @command{gawk}
-@c STARTOFRANGE gfn
@cindex @command{gawk}, file names in
Besides access to standard input, standard output, and standard error,
@@ -9673,7 +9686,7 @@ TCP/IP networking.
@end menu
@node Other Inherited Files
-@subsection Accessing Other Open Files With @command{gawk}
+@subsection Accessing Other Open Files with @command{gawk}
Besides the @code{/dev/stdin}, @code{/dev/stdout}, and @code{/dev/stderr}
special @value{FN}s mentioned earlier, @command{gawk} provides syntax
@@ -9730,7 +9743,7 @@ special @value{FN}s that @command{gawk} provides:
@cindex compatibility mode (@command{gawk}), file names
@cindex file names, in compatibility mode
@item
-Recognition of the @value{FN}s for the three standard pre-opened
+Recognition of the @value{FN}s for the three standard preopened
files is disabled only in POSIX mode.
@item
@@ -9743,23 +9756,18 @@ compatibility mode (either @option{--traditional} or @option{--posix};
interprets these special @value{FN}s.
For example, using @samp{/dev/fd/4}
for output actually writes on file descriptor 4, and not on a new
-file descriptor that is @code{dup()}'ed from file descriptor 4. Most of
+file descriptor that is @code{dup()}ed from file descriptor 4. Most of
the time this does not matter; however, it is important to @emph{not}
close any of the files related to file descriptors 0, 1, and 2.
Doing so results in unpredictable behavior.
@end itemize
-@c ENDOFRANGE gfn
@node Close Files And Pipes
@section Closing Input and Output Redirections
@cindex files, output, See output files
-@c STARTOFRANGE ifc
@cindex input files, closing
-@c STARTOFRANGE ofc
@cindex output, files@comma{} closing
-@c STARTOFRANGE pc
@cindex pipe, closing
-@c STARTOFRANGE cc
@cindex coprocesses, closing
@cindex @code{getline} command, coprocesses@comma{} using from
@@ -9965,18 +9973,79 @@ This value is zero if the close succeeds, or @minus{}1 if
it fails.
The POSIX standard is very vague; it says that @code{close()}
-returns zero on success and nonzero otherwise. In general,
+returns zero on success and a nonzero value otherwise. In general,
different implementations vary in what they report when closing
-pipes; thus the return value cannot be used portably.
+pipes; thus, the return value cannot be used portably.
@value{DARKCORNER}
In POSIX mode (@pxref{Options}), @command{gawk} just returns zero
when closing a pipe.
@end sidebar
-@c ENDOFRANGE ifc
-@c ENDOFRANGE ofc
-@c ENDOFRANGE pc
-@c ENDOFRANGE cc
+
+@node Nonfatal
+@section Enabling Nonfatal Output
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+In standard @command{awk}, output with @code{print} or @code{printf}
+to a nonexistent file, or some other I/O error (such as filling up the
+disk) is a fatal error.
+
+@example
+$ @kbd{gawk 'BEGIN @{ print "hi" > "/no/such/file" @}'}
+@error{} gawk: cmd. line:1: fatal: can't redirect to `/no/such/file' (No such file or directory)
+@end example
+
+@command{gawk} makes it possible to detect that an error has
+occurred, allowing you to possibly recover from the error, or
+at least print an error message of your choosing before exiting.
+You can do this in one of two ways:
+
+@itemize @bullet
+@item
+For all output files, by assigning any value to @code{PROCINFO["NONFATAL"]}.
+
+@item
+On a per-file basis, by assigning any value to
+@code{PROCINFO[@var{filename}, "NONFATAL"]}.
+Here, @var{filename} is the name of the file to which
+you wish output to be nonfatal.
+@end itemize
+
+Once you have enabled nonfatal output, you must check @code{ERRNO}
+after every relevant @code{print} or @code{printf} statement to
+see if something went wrong. It is also a good idea to initialize
+@code{ERRNO} to zero before attempting the output. For example:
+
+@example
+$ @kbd{gawk '}
+> @kbd{BEGIN @{}
+> @kbd{ PROCINFO["NONFATAL"] = 1}
+> @kbd{ ERRNO = 0}
+> @kbd{ print "hi" > "/no/such/file"}
+> @kbd{ if (ERRNO) @{}
+> @kbd{ print("Output failed:", ERRNO) > "/dev/stderr"}
+> @kbd{ exit 1}
+> @kbd{ @}}
+> @kbd{@}'}
+@error{} Output failed: No such file or directory
+@end example
+
+Here, @command{gawk} did not produce a fatal error; instead
+it let the @command{awk} program code detect the problem and handle it.
+
+This mechanism works also for standard output and standard error.
+For standard output, you may use @code{PROCINFO["-", "NONFATAL"]}
+or @code{PROCINFO["/dev/stdout", "NONFATAL"]}. For standard error, use
+@code{PROCINFO["/dev/stderr", "NONFATAL"]}.
+
+When attempting to open a TCP/IP socket (@pxref{TCP/IP Networking}),
+@command{gawk} tries multiple times. The @env{GAWK_SOCK_RETRIES}
+environment variable (@pxref{Other Environment Variables}) allows you to
+override @command{gawk}'s builtin default number of attempts. However,
+once nonfatal I/O is enabled for a given socket, @command{gawk} only
+retries once, relying on @command{awk}-level code to notice that there
+was a problem.
@node Output Summary
@section Summary
@@ -9990,8 +10059,8 @@ for numeric values for the @code{print} statement.
@item
The @code{printf} statement provides finer-grained control over output,
-with format control letters for different data types and various flags
-that modify the behavior of the format control letters.
+with format-control letters for different data types and various flags
+that modify the behavior of the format-control letters.
@item
Output from both @code{print} and @code{printf} may be redirected to
@@ -10006,6 +10075,12 @@ Use @code{close()} to close open file, pipe, and coprocess redirections.
For coprocesses, it is possible to close only one direction of the
communications.
+@item
+Normally errors with @code{print} or @code{printf} are fatal.
+@command{gawk} lets you make output errors be nonfatal either for
+all files or on a per-file basis. You must then check for errors
+after every relevant output statement.
+
@end itemize
@c EXCLUDE START
@@ -10040,11 +10115,9 @@ BEGIN @{ print "Serious error detected!" > /dev/stderr @}
@end enumerate
@c EXCLUDE END
-@c ENDOFRANGE prnt
@node Expressions
@chapter Expressions
-@c STARTOFRANGE exps
@cindex expressions
Expressions are the basic building blocks of @command{awk} patterns
@@ -10055,7 +10128,7 @@ can assign a new value to a variable or a field by using an assignment operator.
An expression can serve as a pattern or action statement on its own.
Most other kinds of
statements contain one or more expressions that specify the data on which to
-operate. As in other languages, expressions in @command{awk} include
+operate. As in other languages, expressions in @command{awk} can include
variables, array references, constants, and function calls, as well as
combinations of these with various operators.
@@ -10074,7 +10147,7 @@ combinations of these with various operators.
Expressions are built up from values and the operations performed
upon them. This @value{SECTION} describes the elementary objects
-which provide the values used in expressions.
+that provide the values used in expressions.
@menu
* Constants:: String, numeric and regexp constants.
@@ -10087,7 +10160,6 @@ which provide the values used in expressions.
@node Constants
@subsection Constant Expressions
-@c STARTOFRANGE cnst
@cindex constants, types of
The simplest type of expression is the @dfn{constant}, which always has
@@ -10125,7 +10197,7 @@ have the same value:
@end example
@cindex string constants
-A string constant consists of a sequence of characters enclosed in
+A @dfn{string constant} consists of a sequence of characters enclosed in
double quotation marks. For example:
@example
@@ -10137,7 +10209,7 @@ double quotation marks. For example:
@cindex strings, length limitations
represents the string whose contents are @samp{parrot}. Strings in
@command{gawk} can be of any length, and they can contain any of the possible
-eight-bit ASCII characters including ASCII @sc{nul} (character code zero).
+eight-bit ASCII characters, including ASCII @sc{nul} (character code zero).
Other @command{awk}
implementations may have difficulty with some character codes.
@@ -10152,15 +10224,15 @@ In @command{awk}, all numbers are in decimal (i.e., base 10). Many other
programming languages allow you to specify numbers in other bases, often
octal (base 8) and hexadecimal (base 16).
In octal, the numbers go 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, and so on.
-Just as @samp{11}, in decimal, is 1 times 10 plus 1, so
-@samp{11}, in octal, is 1 times 8, plus 1. This equals 9 in decimal.
+Just as @samp{11} in decimal is 1 times 10 plus 1, so
+@samp{11} in octal is 1 times 8 plus 1. This equals 9 in decimal.
In hexadecimal, there are 16 digits. Because the everyday decimal
number system only has ten digits (@samp{0}--@samp{9}), the letters
@samp{a} through @samp{f} are used to represent the rest.
(Case in the letters is usually irrelevant; hexadecimal @samp{a} and @samp{A}
have the same value.)
-Thus, @samp{11}, in
-hexadecimal, is 1 times 16 plus 1, which equals 17 in decimal.
+Thus, @samp{11} in
+hexadecimal is 1 times 16 plus 1, which equals 17 in decimal.
Just by looking at plain @samp{11}, you can't tell what base it's in.
So, in C, C++, and other languages derived from C,
@@ -10171,13 +10243,13 @@ and hexadecimal numbers start with a leading @samp{0x} or @samp{0X}:
@table @code
@item 11
-Decimal value 11.
+Decimal value 11
@item 011
-Octal 11, decimal value 9.
+Octal 11, decimal value 9
@item 0x11
-Hexadecimal 11, decimal value 17.
+Hexadecimal 11, decimal value 17
@end table
This example shows the difference:
@@ -10205,11 +10277,11 @@ you can use the @code{strtonum()} function
(@pxref{String Functions})
to convert the data into a number.
Most of the time, you will want to use octal or hexadecimal constants
-when working with the built-in bit manipulation functions;
+when working with the built-in bit-manipulation functions;
see @DBREF{Bitwise Functions}
for more information.
-Unlike some early C implementations, @samp{8} and @samp{9} are not
+Unlike in some early C implementations, @samp{8} and @samp{9} are not
valid in octal constants. For example, @command{gawk} treats @samp{018}
as decimal 18:
@@ -10244,19 +10316,17 @@ $ @kbd{gawk 'BEGIN @{ printf "0x11 is <%s>\n", 0x11 @}'}
@node Regexp Constants
@subsubsection Regular Expression Constants
-@c STARTOFRANGE rec
@cindex regexp constants
@cindex @code{~} (tilde), @code{~} operator
@cindex tilde (@code{~}), @code{~} operator
@cindex @code{!} (exclamation point), @code{!~} operator
@cindex exclamation point (@code{!}), @code{!~} operator
-A regexp constant is a regular expression description enclosed in
+A @dfn{regexp constant} is a regular expression description enclosed in
slashes, such as @code{@w{/^beginning and end$/}}. Most regexps used in
@command{awk} programs are constant, but the @samp{~} and @samp{!~}
matching operators can also match computed or dynamic regexps
(which are typically just ordinary strings or variables that contain a regexp,
-but could be a more complex expression).
-@c ENDOFRANGE cnst
+but could be more complex expressions).
@node Using Constant Regexps
@subsection Using Regular Expression Constants
@@ -10336,7 +10406,7 @@ the third argument of @code{split()} to be a regexp constant, but some
older implementations do not.
@value{DARKCORNER}
Because some built-in functions accept regexp constants as arguments,
-it can be confusing when attempting to use regexp constants as arguments
+confusion can arise when attempting to use regexp constants as arguments
to user-defined functions (@pxref{User-defined}). For example:
@example
@@ -10362,19 +10432,18 @@ function mysub(pat, repl, str, global)
In this example, the programmer wants to pass a regexp constant to the
user-defined function @code{mysub()}, which in turn passes it on to
either @code{sub()} or @code{gsub()}. However, what really happens is that
-the @code{pat} parameter is either one or zero, depending upon whether
+the @code{pat} parameter is assigned a value of either one or zero, depending upon whether
or not @code{$0} matches @code{/hi/}.
@command{gawk} issues a warning when it sees a regexp constant used as
a parameter to a user-defined function, because passing a truth value in
this way is probably not what was intended.
-@c ENDOFRANGE rec
@node Variables
@subsection Variables
@cindex variables, user-defined
@cindex user-defined, variables
-Variables are ways of storing values at one point in your program for
+@dfn{Variables} are ways of storing values at one point in your program for
use later in another part of your program. They can be manipulated
entirely within the program text, and they can also be assigned values
on the @command{awk} command line.
@@ -10402,17 +10471,17 @@ are distinct variables.
A variable name is a valid expression by itself; it represents the
variable's current value. Variables are given new values with
@dfn{assignment operators}, @dfn{increment operators}, and
-@dfn{decrement operators}.
-@xref{Assignment Ops}.
+@dfn{decrement operators}
+(@pxref{Assignment Ops}).
In addition, the @code{sub()} and @code{gsub()} functions can
change a variable's value, and the @code{match()}, @code{split()},
and @code{patsplit()} functions can change the contents of their
-array parameters. @xref{String Functions}.
+array parameters (@pxref{String Functions}).
@cindex variables, built-in
@cindex variables, initializing
A few variables have special built-in meanings, such as @code{FS} (the
-field separator), and @code{NF} (the number of fields in the current input
+field separator) and @code{NF} (the number of fields in the current input
record). @DBXREF{Built-in Variables} for a list of the predefined variables.
These predefined variables can be used and assigned just like all other
variables, but their values are also used or changed automatically by
@@ -10640,7 +10709,7 @@ point, so the default behavior was restored to use a period as the
decimal point character. You can use the @option{--use-lc-numeric}
option (@pxref{Options}) to force @command{gawk} to use the locale's
decimal point character. (@command{gawk} also uses the locale's decimal
-point character when in POSIX mode, either via @option{--posix}, or the
+point character when in POSIX mode, either via @option{--posix} or the
@env{POSIXLY_CORRECT} environment variable, as shown previously.)
@ref{table-locale-affects} describes the cases in which the locale's decimal
@@ -10658,7 +10727,7 @@ features have not been described yet.
@end multitable
@end float
-Finally, modern day formal standards and IEEE standard floating-point
+Finally, modern-day formal standards and the IEEE standard floating-point
representation can have an unusual but important effect on the way
@command{gawk} converts some special string values to numbers. The details
are presented in @ref{POSIX Floating Point Problems}.
@@ -10666,7 +10735,7 @@ are presented in @ref{POSIX Floating Point Problems}.
@node All Operators
@section Operators: Doing Something with Values
-This @value{SECTION} introduces the @dfn{operators} which make use
+This @value{SECTION} introduces the @dfn{operators} that make use
of the values provided by constants and variables.
@menu
@@ -10844,7 +10913,7 @@ print "something meaningful" > file name
@noindent
This produces a syntax error with some versions of Unix
@command{awk}.@footnote{It happens that BWK
-@command{awk}, @command{gawk} and @command{mawk} all ``get it right,''
+@command{awk}, @command{gawk}, and @command{mawk} all ``get it right,''
but you should not rely on this.}
It is necessary to use the following:
@@ -10933,11 +11002,8 @@ you're never quite sure what you'll get.
@node Assignment Ops
@subsection Assignment Expressions
-@c STARTOFRANGE asop
@cindex assignment operators
-@c STARTOFRANGE opas
@cindex operators, assignment
-@c STARTOFRANGE exas
@cindex expressions, assignment
@cindex @code{=} (equals sign), @code{=} operator
@cindex equals sign (@code{=}), @code{=} operator
@@ -11097,7 +11163,7 @@ and
@ifdocbook
@DBREF{Numeric Functions}
@end ifdocbook
-for more information).
+for more information.)
This example illustrates an important fact about assignment
operators: the lefthand expression is only evaluated @emph{once}.
@@ -11133,17 +11199,17 @@ to a number.
@caption{Arithmetic assignment operators}
@multitable @columnfractions .30 .70
@headitem Operator @tab Effect
-@item @var{lvalue} @code{+=} @var{increment} @tab Add @var{increment} to the value of @var{lvalue}
-@item @var{lvalue} @code{-=} @var{decrement} @tab Subtract @var{decrement} from the value of @var{lvalue}
-@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiply the value of @var{lvalue} by @var{coefficient}
-@item @var{lvalue} @code{/=} @var{divisor} @tab Divide the value of @var{lvalue} by @var{divisor}
-@item @var{lvalue} @code{%=} @var{modulus} @tab Set @var{lvalue} to its remainder by @var{modulus}
+@item @var{lvalue} @code{+=} @var{increment} @tab Add @var{increment} to the value of @var{lvalue}.
+@item @var{lvalue} @code{-=} @var{decrement} @tab Subtract @var{decrement} from the value of @var{lvalue}.
+@item @var{lvalue} @code{*=} @var{coefficient} @tab Multiply the value of @var{lvalue} by @var{coefficient}.
+@item @var{lvalue} @code{/=} @var{divisor} @tab Divide the value of @var{lvalue} by @var{divisor}.
+@item @var{lvalue} @code{%=} @var{modulus} @tab Set @var{lvalue} to its remainder by @var{modulus}.
@cindex common extensions, @code{**=} operator
@cindex extensions, common@comma{} @code{**=} operator
@cindex @command{awk} language, POSIX version
@cindex POSIX @command{awk}
-@item @var{lvalue} @code{^=} @var{power} @tab
-@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power @var{power} @value{COMMONEXT}
+@item @var{lvalue} @code{^=} @var{power} @tab Raise @var{lvalue} to the power @var{power}.
+@item @var{lvalue} @code{**=} @var{power} @tab Raise @var{lvalue} to the power @var{power}. @value{COMMONEXT}
@end multitable
@end float
@@ -11191,16 +11257,11 @@ awk '/[=]=/' /dev/null
@command{gawk} does not have this problem; BWK @command{awk}
and @command{mawk} also do not.
@end sidebar
-@c ENDOFRANGE exas
-@c ENDOFRANGE opas
-@c ENDOFRANGE asop
@node Increment Ops
@subsection Increment and Decrement Operators
-@c STARTOFRANGE inop
@cindex increment operators
-@c STARTOFRANGE opde
@cindex operators, decrement/increment
@dfn{Increment} and @dfn{decrement operators} increase or decrease the value of
a variable by one. An assignment operator can do the same thing, so
@@ -11224,13 +11285,14 @@ has the value four, but it changes the value of @code{foo} to five.
In other words, the operator returns the old value of the variable,
but with the side effect of incrementing it.
+@c FIXME: Use @sup here for superscript
The post-increment @samp{foo++} is nearly the same as writing @samp{(foo
+= 1) - 1}. It is not perfectly equivalent because all numbers in
@command{awk} are floating point---in floating point, @samp{foo + 1 - 1} does
not necessarily equal @code{foo}. But the difference is minute as
long as you stick to numbers that are fairly small (less than
@iftex
-@math{10^12}).
+@math{10^{12}}).
@end iftex
@ifnottex
@ifnotdocbook
@@ -11248,7 +11310,6 @@ just like variables. (Use @samp{$(i++)} when you want to do a field reference
and a variable increment at the same time. The parentheses are necessary
because of the precedence of the field reference operator @samp{$}.)
-@c STARTOFRANGE deop
@cindex decrement operators
The decrement operator @samp{--} works just like @samp{++}, except that
it subtracts one instead of adding it. As with @samp{++}, it can be used before
@@ -11288,8 +11349,8 @@ like @samp{@var{lvalue}++}, but instead of adding, it subtracts.)
@cindex evaluation order
@cindex Marx, Groucho
@quotation
-@i{Doctor, doctor! It hurts when I do this!@*
-So don't do that!}
+@i{Doctor, it hurts when I do this!@*
+Then don't do that!}
@author Groucho Marx
@end quotation
@@ -11313,7 +11374,7 @@ print b
@cindex side effects
In other words, when do the various side effects prescribed by the
postfix operators (@samp{b++}) take effect?
-When side effects happen is @dfn{implementation defined}.
+When side effects happen is @dfn{implementation-defined}.
In other words, it is up to the particular version of @command{awk}.
The result for the first example may be 12 or 13, and for the second, it
may be 22 or 23.
@@ -11324,15 +11385,12 @@ You should avoid such things in your own programs.
@c You'll sleep better at night and be able to look at yourself
@c in the mirror in the morning.
@end sidebar
-@c ENDOFRANGE inop
-@c ENDOFRANGE opde
-@c ENDOFRANGE deop
@node Truth Values and Conditions
@section Truth Values and Conditions
-In certain contexts, expression values also serve as ``truth values''; (i.e.,
-they determine what should happen next as the program runs). This
+In certain contexts, expression values also serve as ``truth values''; i.e.,
+they determine what should happen next as the program runs. This
@value{SECTION} describes how @command{awk} defines ``true'' and ``false''
and how values are compared.
@@ -11390,20 +11448,19 @@ the string constant @code{"0"} is actually true, because it is non-null.
@i{The Guide is definitive. Reality is frequently inaccurate.}
@author Douglas Adams, @cite{The Hitchhiker's Guide to the Galaxy}
@end quotation
+@c 2/2015: Antonio Colombo points out that this is really from
+@c The Restaurant at the End of the Universe. But I'm going to
+@c leave it alone.
-@c STARTOFRANGE comex
@cindex comparison expressions
-@c STARTOFRANGE excom
@cindex expressions, comparison
@cindex expressions, matching, See comparison expressions
@cindex matching, expressions, See comparison expressions
@cindex relational operators, See comparison operators
@cindex operators, relational, See operators@comma{} comparison
-@c STARTOFRANGE varting
@cindex variable typing
-@c STARTOFRANGE vartypc
@cindex variables, types of, comparison expressions and
-Unlike other programming languages, @command{awk} variables do not have a
+Unlike in other programming languages, in @command{awk} variables do not have a
fixed type. Instead, they can be either a number or a string, depending
upon the value that is assigned to them.
We look now at how variables are typed, and how @command{awk}
@@ -11432,20 +11489,20 @@ Variable typing follows these rules:
@itemize @value{BULLET}
@item
-A numeric constant or the result of a numeric operation has the @var{numeric}
+A numeric constant or the result of a numeric operation has the @dfn{numeric}
attribute.
@item
-A string constant or the result of a string operation has the @var{string}
+A string constant or the result of a string operation has the @dfn{string}
attribute.
@item
Fields, @code{getline} input, @code{FILENAME}, @code{ARGV} elements,
@code{ENVIRON} elements, and the elements of an array created by
@code{match()}, @code{split()}, and @code{patsplit()} that are numeric
-strings have the @var{strnum} attribute. Otherwise, they have
-the @var{string} attribute. Uninitialized variables also have the
-@var{strnum} attribute.
+strings have the @dfn{strnum} attribute. Otherwise, they have
+the @dfn{string} attribute. Uninitialized variables also have the
+@dfn{strnum} attribute.
@item
Attributes propagate across assignments but are not changed by
@@ -11589,13 +11646,13 @@ constant, then a string comparison is performed. Otherwise, a
numeric comparison is performed.
This point bears additional emphasis: All user input is made of characters,
-and so is first and foremost of @var{string} type; input strings
-that look numeric are additionally given the @var{strnum} attribute.
+and so is first and foremost of string type; input strings
+that look numeric are additionally given the strnum attribute.
Thus, the six-character input string @w{@samp{ +3.14}} receives the
-@var{strnum} attribute. In contrast, the eight characters
+strnum attribute. In contrast, the eight characters
@w{@code{" +3.14"}} appearing in program text comprise a string constant.
The following examples print @samp{1} when the comparison between
-the two different constants is true, @samp{0} otherwise:
+the two different constants is true, and @samp{0} otherwise:
@c 22.9.2014: Tested with mawk and BWK awk, got same results.
@example
@@ -11725,7 +11782,7 @@ $ @kbd{echo 1e2 3 | awk '@{ print ($1 < $2) ? "true" : "false" @}'}
@noindent
the result is @samp{false} because both @code{$1} and @code{$2}
are user input. They are numeric strings---therefore both have
-the @var{strnum} attribute, dictating a numeric comparison.
+the strnum attribute, dictating a numeric comparison.
The purpose of the comparison rules and the use of numeric strings is
to attempt to produce the behavior that is ``least surprising,'' while
still ``doing the right thing.''
@@ -11784,7 +11841,7 @@ characters sort, as defined by the locale (for more discussion,
@pxref{Locales}). This order is usually very different
from the results obtained when doing straight character-by-character
comparison.@footnote{Technically, string comparison is supposed
-to behave the same way as if the strings are compared with the C
+to behave the same way as if the strings were compared with the C
@code{strcoll()} function.}
Because this behavior differs considerably from existing practice,
@@ -11801,19 +11858,13 @@ $ @kbd{gawk --posix 'BEGIN @{ printf("ABC < abc = %s\n",}
@print{} ABC < abc = FALSE
@end example
-@c ENDOFRANGE comex
-@c ENDOFRANGE excom
-@c ENDOFRANGE vartypc
-@c ENDOFRANGE varting
@node Boolean Ops
@subsection Boolean Expressions
@cindex and Boolean-logic operator
@cindex or Boolean-logic operator
@cindex not Boolean-logic operator
-@c STARTOFRANGE exbo
@cindex expressions, Boolean
-@c STARTOFRANGE boex
@cindex Boolean expressions
@cindex operators, Boolean, See Boolean expressions
@cindex Boolean operators, See Boolean expressions
@@ -11897,7 +11948,7 @@ BEGIN @{ if (! ("HOME" in ENVIRON))
@cindex vertical bar (@code{|}), @code{||} operator
The @samp{&&} and @samp{||} operators are called @dfn{short-circuit}
operators because of the way they work. Evaluation of the full expression
-is ``short-circuited'' if the result can be determined part way through
+is ``short-circuited'' if the result can be determined partway through
its evaluation.
@cindex line continuations
@@ -11959,8 +12010,6 @@ next record, and start processing the rules over again at the top.
The reason it's there is to avoid printing the bracketing
@samp{START} and @samp{END} lines.
@end quotation
-@c ENDOFRANGE exbo
-@c ENDOFRANGE boex
@node Conditional Exp
@subsection Conditional Expressions
@@ -11971,8 +12020,8 @@ The reason it's there is to avoid printing the bracketing
A @dfn{conditional expression} is a special kind of expression that has
three operands. It allows you to use one expression's value to select
one of two other expressions.
-The conditional expression is the same as in the C language,
-as shown here:
+The conditional expression in @command{awk} is the same as in the C
+language, as shown here:
@example
@var{selector} ? @var{if-true-exp} : @var{if-false-exp}
@@ -11981,8 +12030,8 @@ as shown here:
@noindent
There are three subexpressions. The first, @var{selector}, is always
computed first. If it is ``true'' (not zero or not null), then
-@var{if-true-exp} is computed next and its value becomes the value of
-the whole expression. Otherwise, @var{if-false-exp} is computed next
+@var{if-true-exp} is computed next, and its value becomes the value of
+the whole expression. Otherwise, @var{if-false-exp} is computed next,
and its value becomes the value of the whole expression.
For example, the following expression produces the absolute value of @code{x}:
@@ -12030,7 +12079,7 @@ ask for it by name at any point in the program. For
example, the function @code{sqrt()} computes the square root of a number.
@cindex functions, built-in
-A fixed set of functions are @dfn{built-in}, which means they are
+A fixed set of functions are @dfn{built in}, which means they are
available in every @command{awk} program. The @code{sqrt()} function is one
of these. @DBXREF{Built-in} for a list of built-in
functions and their descriptions. In addition, you can define
@@ -12139,9 +12188,7 @@ $ @kbd{awk -f matchit.awk}
@node Precedence
@section Operator Precedence (How Operators Nest)
-@c STARTOFRANGE prec
@cindex precedence
-@c STARTOFRANGE oppr
@cindex operators, precedence
@dfn{Operator precedence} determines how operators are grouped when
@@ -12206,7 +12253,7 @@ Increment, decrement.
@cindex @code{*} (asterisk), @code{**} operator
@cindex asterisk (@code{*}), @code{**} operator
@item @code{^ **}
-Exponentiation. These operators group right-to-left.
+Exponentiation. These operators group right to left.
@cindex @code{+} (plus sign), @code{+} operator
@cindex plus sign (@code{+}), @code{+} operator
@@ -12272,7 +12319,7 @@ statements belong to the statement level, not to expressions. The
redirection does not produce an expression that could be the operand of
another operator. As a result, it does not make sense to use a
redirection operator near another operator of lower precedence without
-parentheses. Such combinations (e.g., @samp{print foo > a ? b : c}),
+parentheses. Such combinations (e.g., @samp{print foo > a ? b : c})
result in syntax errors.
The correct way to write this statement is @samp{print foo > (a ? b : c)}.
@@ -12290,17 +12337,17 @@ Array membership.
@cindex @code{&} (ampersand), @code{&&} operator
@cindex ampersand (@code{&}), @code{&&} operator
@item @code{&&}
-Logical ``and''.
+Logical ``and.''
@cindex @code{|} (vertical bar), @code{||} operator
@cindex vertical bar (@code{|}), @code{||} operator
@item @code{||}
-Logical ``or''.
+Logical ``or.''
@cindex @code{?} (question mark), @code{?:} operator
@cindex question mark (@code{?}), @code{?:} operator
@item @code{?:}
-Conditional. This operator groups right-to-left.
+Conditional. This operator groups right to left.
@cindex @code{+} (plus sign), @code{+=} operator
@cindex plus sign (@code{+}), @code{+=} operator
@@ -12317,7 +12364,7 @@ Conditional. This operator groups right-to-left.
@cindex @code{^} (caret), @code{^=} operator
@cindex caret (@code{^}), @code{^=} operator
@item @code{= += -= *= /= %= ^= **=}
-Assignment. These operators group right-to-left.
+Assignment. These operators group right to left.
@end table
@cindex POSIX @command{awk}, @code{**} operator and
@@ -12326,8 +12373,6 @@ Assignment. These operators group right-to-left.
The @samp{|&}, @samp{**}, and @samp{**=} operators are not specified by POSIX.
For maximum portability, do not use them.
@end quotation
-@c ENDOFRANGE prec
-@c ENDOFRANGE oppr
@node Locales
@section Where You Are Makes a Difference
@@ -12393,8 +12438,8 @@ Locales can influence the conversions.
@item
@command{awk} provides the usual arithmetic operators (addition,
subtraction, multiplication, division, modulus), and unary plus and minus.
-It also provides comparison operators, boolean operators, array membership
-testing, and regexp
+It also provides comparison operators, Boolean operators, an array membership
+testing operator, and regexp
matching operators. String concatenation is accomplished by placing
two expressions next to each other; there is no explicit operator.
The three-operand @samp{?:} operator provides an ``if-else'' test within
@@ -12405,7 +12450,7 @@ Assignment operators provide convenient shorthands for common arithmetic
operations.
@item
-In @command{awk}, a value is considered to be true if it is non-zero
+In @command{awk}, a value is considered to be true if it is nonzero
@emph{or} non-null. Otherwise, the value is false.
@item
@@ -12414,7 +12459,7 @@ lifetime. The type determines how it behaves in comparisons (string
or numeric).
@item
-Function calls return a value which may be used as part of a larger
+Function calls return a value that may be used as part of a larger
expression. Expressions used to pass parameter values are fully
evaluated before the function is called. @command{awk} provides
built-in and user-defined functions; this is described in
@@ -12431,11 +12476,9 @@ program, and occasionally the format for data read as input.
@end itemize
-@c ENDOFRANGE exps
@node Patterns and Actions
@chapter Patterns, Actions, and Variables
-@c STARTOFRANGE pat
@cindex patterns
As you have already seen, each @command{awk} statement consists of
@@ -12443,7 +12486,7 @@ a pattern with an associated action. This @value{CHAPTER} describes how
you build patterns and actions, what kinds of things you can do within
actions, and @command{awk}'s predefined variables.
-The pattern-action rules and the statements available for use
+The pattern--action rules and the statements available for use
within actions form the core of @command{awk} programming.
In a sense, everything covered
up to here has been the foundation
@@ -12578,6 +12621,7 @@ $ @kbd{awk '$1 ~ /li/ @{ print $2 @}' mail-list}
@cindex regexp constants, as patterns
@cindex patterns, regexp constants as
+A regexp constant as a pattern is also a special case of an expression
pattern. The expression @code{/li/} has the value one if @samp{li}
appears in the current input record. Thus, as a pattern, @code{/li/}
matches any record containing @samp{li}.
@@ -12634,7 +12678,7 @@ patterns. Likewise, the special patterns @code{BEGIN}, @code{END},
which never match any input record, are not expressions and cannot
appear inside Boolean patterns.
-The precedence of the different operators which can appear in
+The precedence of the different operators that can appear in
patterns is described in @ref{Precedence}.
@node Ranges
@@ -12660,7 +12704,7 @@ prints every record in @file{myfile} between @samp{on}/@samp{off} pairs, inclusi
A range pattern starts out by matching @var{begpat} against every
input record. When a record matches @var{begpat}, the range pattern is
-@dfn{turned on} and the range pattern matches this record as well. As long as
+@dfn{turned on}, and the range pattern matches this record as well. As long as
the range pattern stays turned on, it automatically matches every input
record read. The range pattern also matches @var{endpat} against every
input record; when this succeeds, the range pattern is @dfn{turned off} again
@@ -12731,9 +12775,7 @@ a range pattern. @value{DARKCORNER}
@node BEGIN/END
@subsection The @code{BEGIN} and @code{END} Special Patterns
-@c STARTOFRANGE beg
@cindex @code{BEGIN} pattern
-@c STARTOFRANGE end
@cindex @code{END} pattern
All the patterns described so far are for matching input records.
The @code{BEGIN} and @code{END} special patterns are different.
@@ -12806,7 +12848,7 @@ using library functions.
for a number of useful library functions.
If an @command{awk} program has only @code{BEGIN} rules and no
-other rules, then the program exits after the @code{BEGIN} rule is
+other rules, then the program exits after the @code{BEGIN} rules are
run.@footnote{The original version of @command{awk} kept
reading and ignoring input until the end of the file was seen.} However, if an
@code{END} rule exists, then the input is read, even if there are
@@ -12834,7 +12876,7 @@ Another way is simply to assign a value to @code{$0}.
@cindex @code{print} statement, @code{BEGIN}/@code{END} patterns and
@cindex @code{BEGIN} pattern, @code{print} statement and
@cindex @code{END} pattern, @code{print} statement and
-The second point is similar to the first but from the other direction.
+The second point is similar to the first, but from the other direction.
Traditionally, due largely to implementation issues, @code{$0} and
@code{NF} were @emph{undefined} inside an @code{END} rule.
The POSIX standard specifies that @code{NF} is available in an @code{END}
@@ -12871,8 +12913,6 @@ are not valid in an @code{END} rule, because all the input has been read.
@ifdocbook
@DBREF{Nextfile Statement}.)
@end ifdocbook
-@c ENDOFRANGE beg
-@c ENDOFRANGE end
@node BEGINFILE/ENDFILE
@subsection The @code{BEGINFILE} and @code{ENDFILE} Special Patterns
@@ -12925,7 +12965,7 @@ fatal error.
@item
If you have written extensions that modify the record handling (by
-inserting an ``input parser,'' @pxref{Input Parsers}), you can invoke
+inserting an ``input parser''; @pxref{Input Parsers}), you can invoke
them at this point, before @command{gawk} has started processing the file.
(This is a @emph{very} advanced feature, currently used only by the
@uref{http://gawkextlib.sourceforge.net, @code{gawkextlib} project}.)
@@ -12936,8 +12976,8 @@ the last record in an input file. For the last input file,
it will be called before any @code{END} rules.
The @code{ENDFILE} rule is executed even for empty input files.
-Normally, when an error occurs when reading input in the normal input
-processing loop, the error is fatal. However, if an @code{ENDFILE}
+Normally, when an error occurs when reading input in the normal
+input-processing loop, the error is fatal. However, if an @code{ENDFILE}
rule is present, the error becomes non-fatal, and instead @code{ERRNO}
is set. This makes it possible to catch and process I/O errors at the
level of the @command{awk} program.
@@ -12946,7 +12986,7 @@ level of the @command{awk} program.
The @code{next} statement (@pxref{Next Statement}) is not allowed inside
either a @code{BEGINFILE} or an @code{ENDFILE} rule. The @code{nextfile}
statement is allowed only inside a
-@code{BEGINFILE} rule, but not inside an @code{ENDFILE} rule.
+@code{BEGINFILE} rule, not inside an @code{ENDFILE} rule.
@cindex @code{getline} statement, @code{BEGINFILE}/@code{ENDFILE} patterns and
The @code{getline} statement (@pxref{Getline}) is restricted inside
@@ -12993,7 +13033,6 @@ awk '@{ print $1 @}' mail-list
@noindent
prints the first field of every record.
-@c ENDOFRANGE pat
@node Using Shell Variables
@section Using Shell Variables in Programs
@@ -13023,11 +13062,11 @@ awk "/$pattern/ "'@{ nmatches++ @}
@noindent
The @command{awk} program consists of two pieces of quoted text
that are concatenated together to form the program.
-The first part is double quoted, which allows substitution of
+The first part is double-quoted, which allows substitution of
the @code{pattern} shell variable inside the quotes.
-The second part is single quoted.
+The second part is single-quoted.
-Variable substitution via quoting works, but can be potentially
+Variable substitution via quoting works, but can potentially be
messy. It requires a good understanding of the shell's quoting rules
(@pxref{Quoting}),
and it's often difficult to correctly
@@ -13142,11 +13181,8 @@ For deleting array elements.
@node Statements
@section Control Statements in Actions
-@c STARTOFRANGE csta
@cindex control statements
-@c STARTOFRANGE acs
@cindex statements, control, in actions
-@c STARTOFRANGE accs
@cindex actions, control statements in
@dfn{Control statements}, such as @code{if}, @code{while}, and so on,
@@ -13289,13 +13325,13 @@ The body of this loop is a compound statement enclosed in braces,
containing two statements.
The loop works in the following manner: first, the value of @code{i} is set to one.
Then, the @code{while} statement tests whether @code{i} is less than or equal to
-three. This is true when @code{i} equals one, so the @code{i}-th
+three. This is true when @code{i} equals one, so the @code{i}th
field is printed. Then the @samp{i++} increments the value of @code{i}
and the loop repeats. The loop terminates when @code{i} reaches four.
A newline is not required between the condition and the
body; however, using one makes the program clearer unless the body is a
-compound statement or else is very simple. The newline after the open-brace
+compound statement or else is very simple. The newline after the open brace
that begins the compound statement is not required either, but the
program is harder to read without it.
@@ -13325,9 +13361,9 @@ while (@var{condition})
@end example
@noindent
-This statement does not execute @var{body} even once if the @var{condition}
-is false to begin with.
-The following is an example of a @code{do} statement:
+This statement does not execute the @var{body} even once if the
+@var{condition} is false to begin with. The following is an example of
+a @code{do} statement:
@example
@{
@@ -13394,7 +13430,7 @@ their assignments as separate statements preceding the @code{for} loop.)
The same is true of the @var{increment} part. Incrementing additional
variables requires separate statements at the end of the loop.
The C compound expression, using C's comma operator, is useful in
-this context but it is not supported in @command{awk}.
+this context, but it is not supported in @command{awk}.
Most often, @var{increment} is an increment expression, as in the previous
example. But this is not required; it can be any expression
@@ -13485,7 +13521,7 @@ default:
Control flow in
the @code{switch} statement works as it does in C. Once a match to a given
case is made, the case statement bodies execute until a @code{break},
-@code{continue}, @code{next}, @code{nextfile} or @code{exit} is encountered,
+@code{continue}, @code{next}, @code{nextfile}, or @code{exit} is encountered,
or the end of the @code{switch} statement itself. For example:
@example
@@ -13537,12 +13573,12 @@ numbers:
# find smallest divisor of num
@{
num = $1
- for (div = 2; div * div <= num; div++) @{
- if (num % div == 0)
+ for (divisor = 2; divisor * divisor <= num; divisor++) @{
+ if (num % divisor == 0)
break
@}
- if (num % div == 0)
- printf "Smallest divisor of %d is %d\n", num, div
+ if (num % divisor == 0)
+ printf "Smallest divisor of %d is %d\n", num, divisor
else
printf "%d is prime\n", num
@}
@@ -13563,12 +13599,12 @@ an @code{if}:
# find smallest divisor of num
@{
num = $1
- for (div = 2; ; div++) @{
- if (num % div == 0) @{
- printf "Smallest divisor of %d is %d\n", num, div
+ for (divisor = 2; ; divisor++) @{
+ if (num % divisor == 0) @{
+ printf "Smallest divisor of %d is %d\n", num, divisor
break
@}
- if (div * div > num) @{
+ if (divisor * divisor > num) @{
printf "%d is prime\n", num
break
@}
@@ -13659,7 +13695,12 @@ body of a loop. Historical versions of @command{awk} treated a @code{continue}
statement outside a loop the same way they treated a @code{break}
statement outside a loop: as if it were a @code{next}
statement
+@ifset FOR_PRINT
+(discussed in the following section).
+@end ifset
+@ifclear FOR_PRINT
(@pxref{Next Statement}).
+@end ifclear
@value{DARKCORNER}
Recent versions of BWK @command{awk} no longer work this way, nor
does @command{gawk}.
@@ -13787,7 +13828,7 @@ See @uref{http://austingroupbugs.net/view.php?id=607, the Austin Group website}.
@cindex @code{nextfile} statement, user-defined functions and
@cindex Brian Kernighan's @command{awk}
@cindex @command{mawk} utility
-The current version of BWK @command{awk}, and @command{mawk}
+The current version of BWK @command{awk} and @command{mawk}
also support @code{nextfile}. However, they don't allow the
@code{nextfile} statement inside function bodies (@pxref{User-defined}).
@command{gawk} does; a @code{nextfile} inside a function body reads the
@@ -13825,7 +13866,7 @@ any @code{ENDFILE} rules; they do not execute.
In such a case,
if you don't want the @code{END} rule to do its job, set a variable
-to nonzero before the @code{exit} statement and check that variable in
+to a nonzero value before the @code{exit} statement and check that variable in
the @code{END} rule.
@DBXREF{Assert Function}
for an example that does this.
@@ -13864,15 +13905,10 @@ Negative values, and values of 127 or greater, may not produce consistent
results across different operating systems.
@end quotation
-@c ENDOFRANGE csta
-@c ENDOFRANGE acs
-@c ENDOFRANGE accs
@node Built-in Variables
@section Predefined Variables
-@c STARTOFRANGE bvar
@cindex predefined variables
-@c STARTOFRANGE varb
@cindex variables, predefined
Most @command{awk} variables are available to use for your own
@@ -13898,10 +13934,8 @@ their areas of activity.
@end menu
@node User-modified
-@subsection Built-In Variables That Control @command{awk}
-@c STARTOFRANGE bvaru
+@subsection Built-in Variables That Control @command{awk}
@cindex predefined variables, user-modifiable
-@c STARTOFRANGE nmbv
@cindex user-modifiable variables
The following is an alphabetical list of variables that you can change to
@@ -13929,7 +13963,7 @@ respectively, should use binary I/O. A string value of @code{"rw"} or
@code{"wr"} indicates that all files should use binary I/O. Any other
string value is treated the same as @code{"rw"}, but causes @command{gawk}
to generate a warning message. @code{BINMODE} is described in more
-detail in @ref{PC Using}. @command{mawk} (@pxref{Other Versions}),
+detail in @ref{PC Using}. @command{mawk} (@pxref{Other Versions})
also supports this variable, but only using numeric values.
@cindex @code{CONVFMT} variable
@@ -13937,7 +13971,7 @@ also supports this variable, but only using numeric values.
@cindex numbers, converting, to strings
@cindex strings, converting, numbers to
@item @code{CONVFMT}
-This string controls conversion of numbers to
+A string that controls the conversion of numbers to
strings (@pxref{Conversion}).
It works by being passed, in effect, as the first argument to the
@code{sprintf()} function
@@ -14012,12 +14046,13 @@ is to simply say @samp{FS = FS}, perhaps with an explanatory comment.
@cindex regular expressions, case sensitivity
@item IGNORECASE #
If @code{IGNORECASE} is nonzero or non-null, then all string comparisons
-and all regular expression matching are case independent. Thus, regexp
-matching with @samp{~} and @samp{!~}, as well as the @code{gensub()},
-@code{gsub()}, @code{index()}, @code{match()}, @code{patsplit()},
-@code{split()}, and @code{sub()}
-functions, record termination with @code{RS}, and field splitting with
-@code{FS} and @code{FPAT}, all ignore case when doing their particular regexp operations.
+and all regular expression matching are case-independent.
+This applies to
+regexp matching with @samp{~} and @samp{!~},
+the @code{gensub()}, @code{gsub()}, @code{index()}, @code{match()},
+@code{patsplit()}, @code{split()}, and @code{sub()} functions,
+record termination with @code{RS}, and field splitting with
+@code{FS} and @code{FPAT}.
However, the value of @code{IGNORECASE} does @emph{not} affect array subscripting
and it does not affect field splitting when using a single-character
field separator.
@@ -14038,7 +14073,7 @@ Any other true value prints nonfatal warnings.
Assigning a false value to @code{LINT} turns off the lint warnings.
This variable is a @command{gawk} extension. It is not special
-in other @command{awk} implementations. Unlike the other special variables,
+in other @command{awk} implementations. Unlike with the other special variables,
changing @code{LINT} does affect the production of lint warnings,
even if @command{gawk} is in compatibility mode. Much as
the @option{--lint} and @option{--traditional} options independently
@@ -14050,7 +14085,7 @@ of @command{awk} being executed.
@cindex numbers, converting, to strings
@cindex strings, converting, numbers to
@item OFMT
-Controls conversion of numbers to
+A string that controls conversion of numbers to
strings (@pxref{Conversion}) for
printing with the @code{print} statement. It works by being passed
as the first argument to the @code{sprintf()} function
@@ -14065,7 +14100,7 @@ strings in general expressions; this is now done by @code{CONVFMT}.
@cindex separators, field
@cindex field separators
@item OFS
-This is the output field separator (@pxref{Output Separators}). It is
+The output field separator (@pxref{Output Separators}). It is
output between the fields printed by a @code{print} statement. Its
default value is @w{@code{" "}}, a string consisting of a single space.
@@ -14083,7 +14118,7 @@ The working precision of arbitrary-precision floating-point numbers,
@cindex @code{ROUNDMODE} variable
@item ROUNDMODE #
The rounding mode to use for arbitrary-precision arithmetic on
-numbers, by default @code{"N"} (@samp{roundTiesToEven} in
+numbers, by default @code{"N"} (@code{roundTiesToEven} in
the IEEE 754 standard; @pxref{Setting the rounding mode}).
@cindex @code{RS} variable
@@ -14112,7 +14147,7 @@ just the first character of @code{RS}'s value is used.
@item @code{SUBSEP}
The subscript separator. It has the default value of
@code{"\034"} and is used to separate the parts of the indices of a
-multidimensional array. Thus, the expression @code{@w{foo["A", "B"]}}
+multidimensional array. Thus, the expression @samp{@w{foo["A", "B"]}}
really accesses @code{foo["A\034B"]}
(@pxref{Multidimensional}).
@@ -14128,17 +14163,11 @@ marked string constants in the source text, as well as for the
(@pxref{Internationalization}).
The default value of @code{TEXTDOMAIN} is @code{"messages"}.
@end table
-@c ENDOFRANGE bvar
-@c ENDOFRANGE varb
-@c ENDOFRANGE bvaru
-@c ENDOFRANGE nmbv
@node Auto-set
-@subsection Built-In Variables That Convey Information
+@subsection Built-in Variables That Convey Information
-@c STARTOFRANGE bvconi
@cindex predefined variables, conveying information
-@c STARTOFRANGE vbconi
@cindex variables, predefined conveying information
The following is an alphabetical list of variables that @command{awk}
sets automatically on certain occasions in order to provide
@@ -14268,6 +14297,11 @@ value to be meaningful when an I/O operation returns a failure value,
such as @code{getline} returning @minus{}1. You are, of course, free
to clear it yourself before doing an I/O operation.
+If the value of @code{ERRNO} corresponds to a system error in the C
+@code{errno} variable, then @code{PROCINFO["errno"]} will be set to the value
+of @code{errno}. For non-system errors, @code{PROCINFO["errno"]} will
+be zero.
+
@cindex @code{FILENAME} variable
@cindex dark corner, @code{FILENAME} variable
@item @code{FILENAME}
@@ -14294,12 +14328,12 @@ input file.
@item @code{NF}
The number of fields in the current input record.
@code{NF} is set each time a new record is read, when a new field is
-created or when @code{$0} changes (@pxref{Fields}).
+created, or when @code{$0} changes (@pxref{Fields}).
Unlike most of the variables described in this @value{SUBSECTION},
assigning a value to @code{NF} has the potential to affect
@command{awk}'s internal workings. In particular, assignments
-to @code{NF} can be used to create or remove fields from the
+to @code{NF} can be used to create fields in or remove fields from the
current record. @xref{Changing Fields}.
@cindex @code{FUNCTAB} array
@@ -14336,6 +14370,10 @@ are guaranteed to be available:
@item PROCINFO["egid"]
The value of the @code{getegid()} system call.
+@item PROCINFO["errno"]
+The value of the C @code{errno} variable when @code{ERRNO} is set to
+the associated error message.
+
@item PROCINFO["euid"]
@cindex effective user ID of @command{gawk} user
The value of the @code{geteuid()} system call.
@@ -14349,7 +14387,7 @@ or @code{"FPAT"} if field matching with @code{FPAT} is in effect.
@item PROCINFO["identifiers"]
@cindex program identifiers
A subarray, indexed by the names of all identifiers used in the text of
-the AWK program. An @dfn{identifier} is simply the name of a variable
+the @command{awk} program. An @dfn{identifier} is simply the name of a variable
(be it scalar or array), built-in function, user-defined function, or
extension function. For each identifier, the value of the element is
one of the following:
@@ -14369,7 +14407,7 @@ The identifier is an extension function loaded via
The identifier is a scalar.
@item "untyped"
-The identifier is untyped (could be used as a scalar or array,
+The identifier is untyped (could be used as a scalar or an array;
@command{gawk} doesn't know yet).
@item "user"
@@ -14386,7 +14424,7 @@ while the program runs.
The value of the @code{getgid()} system call.
@item PROCINFO["pgrpid"]
-@cindex process group idIDof @command{gawk} process
+@cindex process group ID of @command{gawk} process
The process group ID of the current process.
@item PROCINFO["pid"]
@@ -14438,7 +14476,7 @@ The version of the GNU MP library.
The maximum precision supported by MPFR.
@item PROCINFO["prec_min"]
-@cindex minimum precision supported by MPFR library
+@cindex minimum precision required by MPFR library
The minimum precision required by MPFR.
@end table
@@ -14475,6 +14513,11 @@ open input file, pipe, or coprocess.
@DBXREF{Read Timeout} for more information.
@item
+It may be used to indicate that input may be retried when it fails due to
+certain errors.
+@DBXREF{Retrying Input} for more information.
+
+@item
It may be used to cause coprocesses to communicate over pseudo-ttys
instead of through two-way pipes; this is discussed further in
@ref{Two-way I/O}.
@@ -14490,7 +14533,7 @@ is the length of the matched string, or @minus{}1 if no match is found.
@cindex @code{RSTART} variable
@item @code{RSTART}
-The start-index in characters of the substring that is matched by the
+The start index in characters of the substring that is matched by the
@code{match()} function
(@pxref{String Functions}).
@code{RSTART} is set by invoking the @code{match()} function. Its value
@@ -14557,11 +14600,9 @@ function multiply(variable, amount)
@quotation NOTE
In order to avoid severe time-travel paradoxes,@footnote{Not to mention difficult
implementation issues.} neither @code{FUNCTAB} nor @code{SYMTAB}
-are available as elements within the @code{SYMTAB} array.
+is available as an element within the @code{SYMTAB} array.
@end quotation
@end table
-@c ENDOFRANGE bvconi
-@c ENDOFRANGE vbconi
@sidebar Changing @code{NR} and @code{FNR}
@cindex @code{NR} variable, changing
@@ -14733,7 +14774,7 @@ When designing your program, you should choose options that don't
conflict with @command{gawk}'s, because it will process any options
that it accepts before passing the rest of the command line on to
your program. Using @samp{#!} with the @option{-E} option may help
-(@DBXREF{Executable Scripts}
+(@DBPXREF{Executable Scripts}
and
@ifnotdocbook
@DBPXREF{Options}).
@@ -14747,15 +14788,15 @@ and
@itemize @value{BULLET}
@item
-Pattern-action pairs make up the basic elements of an @command{awk}
+Pattern--action pairs make up the basic elements of an @command{awk}
program. Patterns are either normal expressions, range expressions,
-regexp constants, one of the special keywords @code{BEGIN}, @code{END},
-@code{BEGINFILE}, @code{ENDFILE}, or empty. The action executes if
+or regexp constants; one of the special keywords @code{BEGIN}, @code{END},
+@code{BEGINFILE}, or @code{ENDFILE}; or empty. The action executes if
the current record matches the pattern. Empty (missing) patterns match
all records.
@item
-I/O from @code{BEGIN} and @code{END} rules have certain constraints.
+I/O from @code{BEGIN} and @code{END} rules has certain constraints.
This is also true, only more so, for @code{BEGINFILE} and @code{ENDFILE}
rules. The latter two give you ``hooks'' into @command{gawk}'s file
processing, allowing you to recover from a file that otherwise would
@@ -14785,12 +14826,12 @@ iteration of a loop (or get out of a @code{switch}).
@item
@code{next} and @code{nextfile} let you read the next record and start
-over at the top of your program, or skip to the next input file and
+over at the top of your program or skip to the next input file and
start over, respectively.
@item
The @code{exit} statement terminates your program. When executed
-from an action (or function body) it transfers control to the
+from an action (or function body), it transfers control to the
@code{END} statements. From an @code{END} statement body, it exits
immediately. You may pass an optional numeric value to be used
as @command{awk}'s exit status.
@@ -14808,7 +14849,6 @@ control how @command{awk} will process the provided @value{DF}s.
@node Arrays
@chapter Arrays in @command{awk}
-@c STARTOFRANGE arrs
@cindex arrays
An @dfn{array} is a table of values called @dfn{elements}. The
@@ -14883,7 +14923,7 @@ In most other languages, arrays must be @dfn{declared} before use,
including a specification of
how many elements or components they contain. In such languages, the
declaration causes a contiguous block of memory to be allocated for that
-many elements. Usually, an index in the array must be a positive integer.
+many elements. Usually, an index in the array must be a nonnegative integer.
For example, the index zero specifies the first element in the array, which is
actually stored at the beginning of the block of memory. Index one
specifies the second element, which is stored in memory right after the
@@ -14894,15 +14934,17 @@ the declaration.
indices---e.g., @samp{15 .. 27}---but the size of the array is still fixed when
the array is declared.)
-A contiguous array of four elements might look like the following example,
-conceptually, if the element values are 8, @code{"foo"},
-@code{""}, and 30
+@c 1/2015: Do not put the numeric values into @code. Array element
+@c values are no different than scalar variable values.
+A contiguous array of four elements might look like
@ifnotdocbook
-as shown in @ref{figure-array-elements}:
+@ref{figure-array-elements},
@end ifnotdocbook
@ifdocbook
-as shown in @inlineraw{docbook, <xref linkend="figure-array-elements"/>}:
+@inlineraw{docbook, <xref linkend="figure-array-elements"/>},
@end ifdocbook
+conceptually, if the element values are eight, @code{"foo"},
+@code{""}, and 30.
@ifnotdocbook
@float Figure,figure-array-elements
@@ -14927,12 +14969,10 @@ as shown in @inlineraw{docbook, <xref linkend="figure-array-elements"/>}:
@noindent
Only the values are stored; the indices are implicit from the order of
-the values. Here, 8 is the value at index zero, because 8 appears in the
+the values. Here, eight is the value at index zero, because eight appears in the
position with zero elements before it.
-@c STARTOFRANGE arrin
@cindex arrays, indexing
-@c STARTOFRANGE inarr
@cindex indexing arrays
@cindex associative arrays
@cindex arrays, associative
@@ -14941,19 +14981,21 @@ that each array is a collection of pairs---an index and its corresponding
array element value:
@ifnotdocbook
-@example
-@r{Index} 3 @r{Value} 30
-@r{Index} 1 @r{Value} "foo"
-@r{Index} 0 @r{Value} 8
-@r{Index} 2 @r{Value} ""
-@end example
+@c extra empty column to indent it right
+@multitable @columnfractions .1 .1 .1
+@headitem @tab Index @tab Value
+@item @tab @code{3} @tab @code{30}
+@item @tab @code{1} @tab @code{"foo"}
+@item @tab @code{0} @tab @code{8}
+@item @tab @code{2} @tab @code{""}
+@end multitable
@end ifnotdocbook
@docbook
<informaltable>
<tgroup cols="2">
-<colspec colname="1" align="center"/>
-<colspec colname="2" align="center"/>
+<colspec colname="1" align="left"/>
+<colspec colname="2" align="left"/>
<thead>
<row>
<entry>Index</entry>
@@ -14999,20 +15041,22 @@ at any time. For example, suppose a tenth element is added to the array
whose value is @w{@code{"number ten"}}. The result is:
@ifnotdocbook
-@example
-@r{Index} 10 @r{Value} "number ten"
-@r{Index} 3 @r{Value} 30
-@r{Index} 1 @r{Value} "foo"
-@r{Index} 0 @r{Value} 8
-@r{Index} 2 @r{Value} ""
-@end example
+@c extra empty column to indent it right
+@multitable @columnfractions .1 .1 .2
+@headitem @tab Index @tab Value
+@item @tab @code{10} @tab @code{"number ten"}
+@item @tab @code{3} @tab @code{30}
+@item @tab @code{1} @tab @code{"foo"}
+@item @tab @code{0} @tab @code{8}
+@item @tab @code{2} @tab @code{""}
+@end multitable
@end ifnotdocbook
@docbook
<informaltable>
<tgroup cols="2">
-<colspec colname="1" align="center"/>
-<colspec colname="2" align="center"/>
+<colspec colname="1" align="left"/>
+<colspec colname="2" align="left"/>
<thead>
<row>
<entry>Index</entry>
@@ -15059,24 +15103,25 @@ Now the array is @dfn{sparse}, which just means some indices are missing.
It has elements 0--3 and 10, but doesn't have elements 4, 5, 6, 7, 8, or 9.
Another consequence of associative arrays is that the indices don't
-have to be positive integers. Any number, or even a string, can be
+have to be nonnegative integers. Any number, or even a string, can be
an index. For example, the following is an array that translates words from
English to French:
@ifnotdocbook
-@example
-@r{Index} "dog" @r{Value} "chien"
-@r{Index} "cat" @r{Value} "chat"
-@r{Index} "one" @r{Value} "un"
-@r{Index} 1 @r{Value} "un"
-@end example
+@multitable @columnfractions .1 .1 .1
+@headitem @tab Index @tab Value
+@item @tab @code{"dog"} @tab @code{"chien"}
+@item @tab @code{"cat"} @tab @code{"chat"}
+@item @tab @code{"one"} @tab @code{"un"}
+@item @tab @code{1} @tab @code{"un"}
+@end multitable
@end ifnotdocbook
@docbook
<informaltable>
<tgroup cols="2">
-<colspec colname="1" align="center"/>
-<colspec colname="2" align="center"/>
+<colspec colname="1" align="left"/>
+<colspec colname="2" align="left"/>
<thead>
<row>
<entry>Index</entry>
@@ -15118,7 +15163,7 @@ numbers and strings as indices.
There are some subtleties to how numbers work when used as
array subscripts; this is discussed in more detail in
@ref{Numeric Array Subscripts}.)
-Here, the number @code{1} isn't double quoted, because @command{awk}
+Here, the number @code{1} isn't double-quoted, because @command{awk}
automatically converts it to a string.
@cindex @command{gawk}, @code{IGNORECASE} variable in
@@ -15135,8 +15180,6 @@ that array's indices are consecutive integers starting at one.
@command{awk}'s arrays are efficient---the time to access an element
is independent of the number of elements in the array.
-@c ENDOFRANGE arrin
-@c ENDOFRANGE inarr
@node Reference to Elements
@subsection Referring to an Array Element
@@ -15145,7 +15188,7 @@ is independent of the number of elements in the array.
@cindex elements of arrays
The principal way to use an array is to refer to one of its elements.
-An array reference is an expression as follows:
+An @dfn{array reference} is an expression as follows:
@example
@var{array}[@var{index-expression}]
@@ -15155,8 +15198,11 @@ An array reference is an expression as follows:
Here, @var{array} is the name of an array. The expression @var{index-expression} is
the index of the desired element of the array.
+@c 1/2015: Having the 4.3 in @samp is a little iffy. It's essentially
+@c an expression though, so leave be. It's to early in the discussion
+@c to mention that it's really a string.
The value of the array reference is the current value of that array
-element. For example, @code{foo[4.3]} is an expression for the element
+element. For example, @code{foo[4.3]} is an expression referencing the element
of array @code{foo} at index @samp{4.3}.
@cindex arrays, unassigned elements
@@ -15248,7 +15294,7 @@ assign to that element of the array.
The following program takes a list of lines, each beginning with a line
number, and prints them out in order of line number. The line numbers
-are not in order when they are first read---instead they
+are not in order when they are first read---instead, they
are scrambled. This program sorts the lines by making an array using
the line numbers as subscripts. The program then prints out the lines
in sorted order of their numbers. It is a very simple program and gets
@@ -15320,7 +15366,7 @@ END @{
In programs that use arrays, it is often necessary to use a loop that
executes once for each element of an array. In other languages, where
-arrays are contiguous and indices are limited to positive integers,
+arrays are contiguous and indices are limited to nonnegative integers,
this is easy: all the valid indices can be found by counting from
the lowest index up to the highest. This technique won't do the job
in @command{awk}, because any number or string can be an array index.
@@ -15342,7 +15388,7 @@ program has previously used, with the variable @var{var} set to that index.
The following program uses this form of the @code{for} statement. The
first rule scans the input records and notes which words appear (at
least once) in the input, by storing a one into the array @code{used} with
-the word as index. The second rule scans the elements of @code{used} to
+the word as the index. The second rule scans the elements of @code{used} to
find all the distinct words that appear in the input. It prints each
word that is more than 10 characters long and also prints the number of
such words.
@@ -15439,7 +15485,7 @@ and will vary from one version of @command{awk} to the next.
Often, though, you may wish to do something simple, such as
``traverse the array by comparing the indices in ascending order,''
or ``traverse the array by comparing the values in descending order.''
-@command{gawk} provides two mechanisms which give you this control.
+@command{gawk} provides two mechanisms that give you this control:
@itemize @value{BULLET}
@item
@@ -15496,21 +15542,26 @@ across different environments.} which @command{gawk} uses internally
to perform the sorting.
@item "@@ind_str_desc"
-String indices ordered from high to low.
+Like @code{"@@ind_str_asc"}, but the
+string indices are ordered from high to low.
@item "@@ind_num_desc"
-Numeric indices ordered from high to low.
+Like @code{"@@ind_num_asc"}, but the
+numeric indices are ordered from high to low.
@item "@@val_type_desc"
-Element values, based on type, ordered from high to low.
+Like @code{"@@val_type_asc"}, but the
+element values, based on type, are ordered from high to low.
Subarrays, if present, come out first.
@item "@@val_str_desc"
-Element values, treated as strings, ordered from high to low.
+Like @code{"@@val_str_asc"}, but the
+element values, treated as strings, are ordered from high to low.
Subarrays, if present, come out first.
@item "@@val_num_desc"
-Element values, treated as numbers, ordered from high to low.
+Like @code{"@@val_num_asc"}, but the
+element values, treated as numbers, are ordered from high to low.
Subarrays, if present, come out first.
@end table
@@ -15733,7 +15784,7 @@ for (i in frequencies)
@noindent
This example removes all the elements from the array @code{frequencies}.
Once an element is deleted, a subsequent @code{for} statement to scan the array
-does not report that element and the @code{in} operator to check for
+does not report that element and using the @code{in} operator to check for
the presence of that element returns zero (i.e., false):
@example
@@ -15993,7 +16044,7 @@ a[1][2] = 2
This simulates a true two-dimensional array. Each subarray element can
contain another subarray as a value, which in turn can hold other arrays
as well. In this way, you can create arrays of three or more dimensions.
-The indices can be any @command{awk} expression, including scalars
+The indices can be any @command{awk} expressions, including scalars
separated by commas (i.e., a regular @command{awk} simulated
multidimensional subscript). So the following is valid in
@command{gawk}:
@@ -16005,7 +16056,7 @@ a[1][3][1, "name"] = "barney"
Each subarray and the main array can be of different length. In fact, the
elements of an array or its subarray do not all have to have the same
type. This means that the main array and any of its subarrays can be
-non-rectangular, or jagged in structure. You can assign a scalar value to
+nonrectangular, or jagged in structure. You can assign a scalar value to
the index @code{4} of the main array @code{a}, even though @code{a[1]}
is itself an array and not a scalar:
@@ -16029,7 +16080,8 @@ a[4][5][6][7] = "An element in a four-dimensional array"
@noindent
This removes the scalar value from index @code{4} and then inserts a
-subarray of subarray of subarray containing a scalar. You can also
+three-level nested subarray
+containing a scalar. You can also
delete an entire subarray or subarray of subarrays:
@example
@@ -16040,7 +16092,7 @@ a[4][5] = "An element in subarray a[4]"
But recall that you can not delete the main array @code{a} and then use it
as a scalar.
-The built-in functions which take array arguments can also be used
+The built-in functions that take array arguments can also be used
with subarrays. For example, the following code fragment uses @code{length()}
(@pxref{String Functions})
to determine the number of elements in the main array @code{a} and
@@ -16070,7 +16122,7 @@ can be nested to scan all the
elements of an array of arrays if it is rectangular in structure. In order
to print the contents (scalar values) of a two-dimensional array of arrays
(i.e., in which each first-level element is itself an
-array, not necessarily of the same length)
+array, not necessarily of the same length),
you could use the following code:
@example
@@ -16170,9 +16222,9 @@ versions of @command{awk}.
@item
Standard @command{awk} simulates multidimensional arrays by separating
-subscript values with a comma. The values are concatenated into a
+subscript values with commas. The values are concatenated into a
single string, separated by the value of @code{SUBSEP}. The fact
-that such a subscript was created in this way is not retained; thus
+that such a subscript was created in this way is not retained; thus,
changing @code{SUBSEP} may have unexpected consequences. You can use
@samp{(@var{sub1}, @var{sub2}, @dots{}) in @var{array}} to see if such
a multidimensional subscript exists in @var{array}.
@@ -16181,7 +16233,7 @@ a multidimensional subscript exists in @var{array}.
@command{gawk} provides true arrays of arrays. You use a separate
set of square brackets for each dimension in such an array:
@code{data[row][col]}, for example. Array elements may thus be either
-scalar values (number or string) or another array.
+scalar values (number or string) or other arrays.
@item
Use the @code{isarray()} built-in function to determine if an array
@@ -16189,14 +16241,11 @@ element is itself a subarray.
@end itemize
-@c ENDOFRANGE arrs
@node Functions
@chapter Functions
-@c STARTOFRANGE funcbi
@cindex functions, built-in
-@c STARTOFRANGE bifunc
@cindex built-in functions
This @value{CHAPTER} describes @command{awk}'s built-in functions,
which fall into three categories: numeric, string, and I/O.
@@ -16209,6 +16258,9 @@ Besides the built-in functions, @command{awk} has provisions for
writing new functions that the rest of a program can use.
The second half of this @value{CHAPTER} describes these
@dfn{user-defined} functions.
+Finally, we explore indirect function calls, a @command{gawk}-specific
+extension that lets you determine at runtime what function is to
+be called.
@menu
* Built-in:: Summarizes the built-in functions.
@@ -16218,7 +16270,7 @@ The second half of this @value{CHAPTER} describes these
@end menu
@node Built-in
-@section Built-In Functions
+@section Built-in Functions
@dfn{Built-in} functions are always available for
your @command{awk} program to call. This @value{SECTION} defines all
@@ -16241,7 +16293,7 @@ but are summarized here for your convenience.
@end menu
@node Calling Built-in
-@subsection Calling Built-In Functions
+@subsection Calling Built-in Functions
To call one of @command{awk}'s built-in functions, write the name of
the function followed
@@ -16288,11 +16340,11 @@ right to left. For example:
@example
i = 5
-j = atan2(i++, i *= 2)
+j = atan2(++i, i *= 2)
@end example
If the order of evaluation is left to right, then @code{i} first becomes
-6, and then 12, and @code{atan2()} is called with the two arguments 6
+six, and then 12, and @code{atan2()} is called with the two arguments six
and 12. But if the order of evaluation is right to left, @code{i}
first becomes 10, then 11, and @code{atan2()} is called with the
two arguments 11 and 10.
@@ -16319,23 +16371,6 @@ You can use @samp{pi = atan2(0, -1)} to retrieve the value of
@cindex cosine
Return the cosine of @var{x}, with @var{x} in radians.
-@item @code{div(@var{numerator}, @var{denominator}, @var{result})}
-@cindexawkfunc{div}
-@cindex div
-Perform integer division, similar to the standard C function of the
-same name. First, truncate @code{numerator} and @code{denominator}
-towards zero, creating integer values. Clear the @code{result}
-array, and then set @code{result["quotient"]} to the result of
-@samp{numerator / denominator}, truncated towards zero to an integer,
-and set @code{result["remainder"]} to the result of @samp{numerator %
-denominator}, truncated towards zero to an integer. This function is
-primarily intended for use with arbitrary length integers; it avoids
-creating MPFR arbitrary precision floating-point values (@pxref{Arbitrary
-Precision Integers}).
-
-This function is a @code{gawk} extension. It is not available in
-compatibility mode (@pxref{Options}).
-
@item @code{exp(@var{x})}
@cindexawkfunc{exp}
@cindex exponent
@@ -16351,6 +16386,23 @@ truncated toward zero.
For example, @code{int(3)} is 3, @code{int(3.9)} is 3, @code{int(-3.9)}
is @minus{}3, and @code{int(-3)} is @minus{}3 as well.
+@item @code{intdiv(@var{numerator}, @var{denominator}, @var{result})}
+@cindexawkfunc{intdiv}
+@cindex intdiv
+Perform integer division, similar to the standard C function of the
+same name. First, truncate @code{numerator} and @code{denominator}
+towards zero, creating integer values. Clear the @code{result}
+array, and then set @code{result["quotient"]} to the result of
+@samp{numerator / denominator}, truncated towards zero to an integer,
+and set @code{result["remainder"]} to the result of @samp{numerator %
+denominator}, truncated towards zero to an integer. This function is
+primarily intended for use with arbitrary length integers; it avoids
+creating MPFR arbitrary precision floating-point values (@pxref{Arbitrary
+Precision Integers}).
+
+This function is a @code{gawk} extension. It is not available in
+compatibility mode (@pxref{Options}).
+
@item @code{log(@var{x})}
@cindexawkfunc{log}
@cindex logarithm
@@ -16373,7 +16425,7 @@ In fact, @command{gawk} uses the BSD @code{random()} function, which is
considerably better than @code{rand()}, to produce random numbers.}
Often random integers are needed instead. Following is a user-defined function
-that can be used to obtain a random non-negative integer less than @var{n}:
+that can be used to obtain a random nonnegative integer less than @var{n}:
@example
function randint(n)
@@ -16383,8 +16435,8 @@ function randint(n)
@end example
@noindent
-The multiplication produces a random number greater than zero and less
-than @code{n}. Using @code{int()}, this result is made into
+The multiplication produces a random number greater than or equal to
+zero and less than @code{n}. Using @code{int()}, this result is made into
an integer between zero and @code{n} @minus{} 1, inclusive.
The following example uses a similar function to produce random integers
@@ -16436,7 +16488,7 @@ for generating random numbers to the value @var{x}.
Each seed value leads to a particular sequence of random
numbers.@footnote{Computer-generated random numbers really are not truly
-random. They are technically known as ``pseudorandom.'' This means
+random. They are technically known as @dfn{pseudorandom}. This means
that although the numbers in a sequence appear to be random, you can in
fact generate the same sequence of random numbers over and over again.}
Thus, if the seed is set to the same value a second time,
@@ -16468,7 +16520,7 @@ implementations.
The functions in this @value{SECTION} look at or change the text of one
or more strings.
-@code{gawk} understands locales (@pxref{Locales}), and does all
+@command{gawk} understands locales (@pxref{Locales}) and does all
string processing in terms of @emph{characters}, not @emph{bytes}.
This distinction is particularly important to understand for locales
where one character may be represented by multiple bytes. Thus, for
@@ -16557,7 +16609,7 @@ a[2] = "de"
a[3] = "sac"
@end example
-The @code{asorti()} function works similarly to @code{asort()}, however,
+The @code{asorti()} function works similarly to @code{asort()}; however,
the @emph{indices} are sorted, instead of the values. Thus, in the
previous example, starting with the same initial set of indices and
values in @code{a}, calling @samp{asorti(a)} would yield:
@@ -16672,7 +16724,7 @@ If @var{find} is not found, @code{index()} returns zero.
With BWK @command{awk} and @command{gawk},
it is a fatal error to use a regexp constant for @var{find}.
Other implementations allow it, simply treating the regexp
-constant as an expression meaning @samp{$0 ~ /regexp/}. @value{DARKCORNER}.
+constant as an expression meaning @samp{$0 ~ /regexp/}. @value{DARKCORNER}
@item @code{length(}[@var{string}]@code{)}
@cindexawkfunc{length}
@@ -16755,7 +16807,7 @@ If @option{--posix} is supplied, using an array argument is a fatal error
@cindex string, regular expression match
@cindex match regexp in string
Search @var{string} for the
-longest, leftmost substring matched by the regular expression,
+longest, leftmost substring matched by the regular expression
@var{regexp} and return the character position (index)
at which that substring begins (one, if it starts at the beginning of
@var{string}). If no match is found, return zero.
@@ -16767,7 +16819,7 @@ In the latter case, the string is treated as a regexp to be matched.
discussion of the difference between the two forms, and the
implications for writing your program correctly.
-The order of the first two arguments is backwards from most other string
+The order of the first two arguments is the opposite of most other string
functions that work with regular expressions, such as
@code{sub()} and @code{gsub()}. It might help to remember that
for @code{match()}, the order is the same as for the @samp{~} operator:
@@ -16856,7 +16908,7 @@ $ @kbd{echo foooobazbarrrrr |}
@end example
There may not be subscripts for the start and index for every parenthesized
-subexpression, because they may not all have matched text; thus they
+subexpression, because they may not all have matched text; thus, they
should be tested for with the @code{in} operator
(@pxref{Reference to Elements}).
@@ -16903,13 +16955,13 @@ a regexp describing where to split @var{string} (much as @code{FS} can
be a regexp describing where to split input records).
If @var{fieldsep} is omitted, the value of @code{FS} is used.
@code{split()} returns the number of elements created.
-@var{seps} is a @command{gawk} extension with @code{@var{seps}[@var{i}]}
+@var{seps} is a @command{gawk} extension, with @code{@var{seps}[@var{i}]}
being the separator string
between @code{@var{array}[@var{i}]} and @code{@var{array}[@var{i}+1]}.
If @var{fieldsep} is a single
-space then any leading whitespace goes into @code{@var{seps}[0]} and
+space, then any leading whitespace goes into @code{@var{seps}[0]} and
any trailing
-whitespace goes into @code{@var{seps}[@var{n}]} where @var{n} is the
+whitespace goes into @code{@var{seps}[@var{n}]}, where @var{n} is the
return value of
@code{split()} (i.e., the number of elements in @var{array}).
@@ -16922,7 +16974,7 @@ split("cul-de-sac", a, "-", seps)
@noindent
@cindex strings splitting, example
-splits the string @samp{cul-de-sac} into three fields using @samp{-} as the
+splits the string @code{"cul-de-sac"} into three fields using @samp{-} as the
separator. It sets the contents of the array @code{a} as follows:
@example
@@ -16947,19 +16999,18 @@ As with input field-splitting, when the value of @var{fieldsep} is
the elements of
@var{array} but not in @var{seps}, and the elements
are separated by runs of whitespace.
-Also, as with input field-splitting, if @var{fieldsep} is the null string, each
+Also, as with input field splitting, if @var{fieldsep} is the null string, each
individual character in the string is split into its own array element.
@value{COMMONEXT}
Note, however, that @code{RS} has no effect on the way @code{split()}
-works. Even though @samp{RS = ""} causes newline to also be an input
+works. Even though @samp{RS = ""} causes the newline character to also be an input
field separator, this does not affect how @code{split()} splits strings.
@cindex dark corner, @code{split()} function
Modern implementations of @command{awk}, including @command{gawk}, allow
-the third argument to be a regexp constant (@code{/abc/}) as well as a
-string.
-@value{DARKCORNER}
+the third argument to be a regexp constant (@w{@code{/}@dots{}@code{/}})
+as well as a string. @value{DARKCORNER}
The POSIX standard allows this as well.
@DBXREF{Computed Regexps} for a
discussion of the difference between using a string constant or a regexp constant,
@@ -17096,7 +17147,7 @@ an @samp{&}:
@cindex @code{sub()} function, arguments of
@cindex @code{gsub()} function, arguments of
As mentioned, the third argument to @code{sub()} must
-be a variable, field or array element.
+be a variable, field, or array element.
Some versions of @command{awk} allow the third argument to
be an expression that is not an lvalue. In such a case, @code{sub()}
still searches for the pattern and returns zero or one, but the result of
@@ -17255,8 +17306,8 @@ example, @code{"a\qb"} is treated as @code{"aqb"}.
At the runtime level, the various functions handle sequences of
@samp{\} and @samp{&} differently. The situation is (sadly) somewhat complex.
-Historically, the @code{sub()} and @code{gsub()} functions treated the two
-character sequence @samp{\&} specially; this sequence was replaced in
+Historically, the @code{sub()} and @code{gsub()} functions treated the
+two-character sequence @samp{\&} specially; this sequence was replaced in
the generated text with a single @samp{&}. Any other @samp{\} within
the @var{replacement} string that did not precede an @samp{&} was passed
through unchanged. This is illustrated in @ref{table-sub-escapes}.
@@ -17314,7 +17365,7 @@ _bigskip}
@end float
@noindent
-This table shows both the lexical-level processing, where
+This table shows the lexical-level processing, where
an odd number of backslashes becomes an even number at the runtime level,
as well as the runtime processing done by @code{sub()}.
(For the sake of simplicity, the rest of the following tables only show the
@@ -17335,7 +17386,7 @@ This is shown in
@ref{table-sub-proposed}.
@float Table,table-sub-proposed
-@caption{GNU @command{awk} rules for @code{sub()} and backslash}
+@caption{@command{gawk} rules for @code{sub()} and backslash}
@tex
\vbox{\bigskip
% We need more characters for escape and tab ...
@@ -17380,7 +17431,7 @@ _bigskip}
@end float
In a nutshell, at the runtime level, there are now three special sequences
-of characters (@samp{\\\&}, @samp{\\&} and @samp{\&}) whereas historically
+of characters (@samp{\\\&}, @samp{\\&}, and @samp{\&}) whereas historically
there was only one. However, as in the historical case, any @samp{\} that
is not part of one of these three sequences is not special and appears
in the output literally.
@@ -17446,7 +17497,7 @@ The only case where the difference is noticeable is the last one: @samp{\\\\}
is seen as @samp{\\} and produces @samp{\} instead of @samp{\\}.
Starting with @value{PVERSION} 3.1.4, @command{gawk} followed the POSIX rules
-when @option{--posix} is specified (@pxref{Options}). Otherwise,
+when @option{--posix} was specified (@pxref{Options}). Otherwise,
it continued to follow the proposed rules, as
that had been its behavior for many years.
@@ -17514,7 +17565,7 @@ _bigskip}
@end ifnottex
@end float
-Because of the complexity of the lexical and runtime level processing
+Because of the complexity of the lexical- and runtime-level processing
and the special cases for @code{sub()} and @code{gsub()},
we recommend the use of @command{gawk} and @code{gensub()} when you have
to do substitutions.
@@ -17540,6 +17591,7 @@ for more information.
When closing a coprocess, it is occasionally useful to first close
one end of the two-way pipe and then to close the other. This is done
by providing a second argument to @code{close()}. This second argument
+(@var{how})
should be one of the two string values @code{"to"} or @code{"from"},
indicating which end of the pipe to close. Case in the string does
not matter.
@@ -17566,7 +17618,7 @@ every little bit of information as soon as it is ready. However, sometimes
it is necessary to force a program to @dfn{flush} its buffers (i.e.,
write the information to its destination, even if a buffer is not full).
This is the purpose of the @code{fflush()} function---@command{gawk} also
-buffers its output and the @code{fflush()} function forces
+buffers its output, and the @code{fflush()} function forces
@command{gawk} to flush its buffers.
@cindex extensions, common@comma{} @code{fflush()} function
@@ -17587,7 +17639,7 @@ would flush only the standard output if there was no argument,
and flush all output files and pipes if the argument was the null
string. This was changed in order to be compatible with Brian
Kernighan's @command{awk}, in the hope that standardizing this
-feature in POSIX would then be easier (which indeed helped).
+feature in POSIX would then be easier (which indeed proved to be the case).
With @command{gawk},
you can use @samp{fflush("/dev/stdout")} if you wish to flush
@@ -17598,7 +17650,7 @@ only the standard output.
@c @cindex warnings, automatic
@cindex troubleshooting, @code{fflush()} function
@code{fflush()} returns zero if the buffer is successfully flushed;
-otherwise, it returns non-zero. (@command{gawk} returns @minus{}1.)
+otherwise, it returns a nonzero value. (@command{gawk} returns @minus{}1.)
In the case where all buffers are flushed, the return value is zero
only if all buffers were flushed successfully. Otherwise, it is
@minus{}1, and @command{gawk} warns about the problem @var{filename}.
@@ -17611,8 +17663,8 @@ In such a case, @code{fflush()} returns @minus{}1, as well.
@sidebar Interactive Versus Noninteractive Buffering
@cindex buffering, interactive vs.@: noninteractive
-As a side point, buffering issues can be even more confusing, depending
-upon whether your program is @dfn{interactive} (i.e., communicating
+As a side point, buffering issues can be even more confusing if
+your program is @dfn{interactive} (i.e., communicating
with a user sitting at a keyboard).@footnote{A program is interactive
if the standard output is connected to a terminal device. On modern
systems, this means your keyboard and screen.}
@@ -17655,7 +17707,7 @@ it is all buffered and sent down the pipe to @command{cat} in one shot.
@cindexawkfunc{system}
@cindex invoke shell command
@cindex interacting with other programs
-Execute the operating-system
+Execute the operating system
command @var{command} and then return to the @command{awk} program.
Return @var{command}'s exit status.
@@ -17759,18 +17811,14 @@ you would see the latter (undesirable) output.
@subsection Time Functions
@cindex time functions
-@c STARTOFRANGE tst
@cindex timestamps
-@c STARTOFRANGE logftst
@cindex log files, timestamps in
-@c STARTOFRANGE filogtst
@cindex files, log@comma{} timestamps in
-@c STARTOFRANGE gawtst
@cindex @command{gawk}, timestamps
@cindex POSIX @command{awk}, timestamps and
-@code{awk} programs are commonly used to process log files
+@command{awk} programs are commonly used to process log files
containing timestamp information, indicating when a
-particular log record was written. Many programs log their timestamp
+particular log record was written. Many programs log their timestamps
in the form returned by the @code{time()} system call, which is the
number of seconds since a particular epoch. On POSIX-compliant systems,
it is the number of seconds since
@@ -17797,6 +17845,7 @@ which is sufficient to represent times through
2038-01-19 03:14:07 UTC. Many systems support a wider range of timestamps,
including negative timestamps that represent times before the
epoch.
+@c FIXME: Use @sup here for superscript
@cindex @command{date} utility, GNU
@cindex time, retrieving
@@ -17831,7 +17880,7 @@ The values of these numbers need not be within the ranges specified;
for example, an hour of @minus{}1 means 1 hour before midnight.
The origin-zero Gregorian calendar is assumed, with year 0 preceding
year 1 and year @minus{}1 preceding year 0.
-The time is assumed to be in the local timezone.
+The time is assumed to be in the local time zone.
If the daylight-savings flag is positive, the time is assumed to be
daylight savings time; if zero, the time is assumed to be standard
time; and if negative (the default), @code{mktime()} attempts to determine
@@ -17843,7 +17892,6 @@ is out of range, @code{mktime()} returns @minus{}1.
@cindex @command{gawk}, @code{PROCINFO} array in
@cindex @code{PROCINFO} array
@item @code{strftime(}[@var{format} [@code{,} @var{timestamp} [@code{,} @var{utc-flag}] ] ]@code{)}
-@c STARTOFRANGE strf
@cindexgawkfunc{strftime}
@cindex format time string
Format the time specified by @var{timestamp}
@@ -17992,12 +18040,12 @@ Equivalent to specifying @samp{%H:%M:%S}.
The weekday as a decimal number (1--7). Monday is day one.
@item %U
-The week number of the year (the first Sunday as the first day of week one)
+The week number of the year (with the first Sunday as the first day of week one)
as a decimal number (00--53).
@c @cindex ISO 8601
@item %V
-The week number of the year (the first Monday as the first
+The week number of the year (with the first Monday as the first
day of week one) as a decimal number (01--53).
The method for determining the week number is as specified by ISO 8601.
(To wit: if the week containing January 1 has four or more days in the
@@ -18008,7 +18056,7 @@ and the next week is week one.)
The weekday as a decimal number (0--6). Sunday is day zero.
@item %W
-The week number of the year (the first Monday as the first day of week one)
+The week number of the year (with the first Monday as the first day of week one)
as a decimal number (00--53).
@item %x
@@ -18028,8 +18076,8 @@ The full year as a decimal number (e.g., 2015).
@c @cindex RFC 822
@c @cindex RFC 1036
@item %z
-The timezone offset in a +HHMM format (e.g., the format necessary to
-produce RFC 822/RFC 1036 date headers).
+The time zone offset in a @samp{+@var{HHMM}} format (e.g., the format
+necessary to produce RFC 822/RFC 1036 date headers).
@item %Z
The time zone name or abbreviation; no characters if
@@ -18092,7 +18140,6 @@ The time as a decimal timestamp in seconds since the epoch.
The date in VMS format (e.g., @samp{20-JUN-1991}).
@end ignore
@end table
-@c ENDOFRANGE strf
Additionally, the alternative representations are recognized but their
normal representations are used.
@@ -18143,23 +18190,14 @@ gawk 'BEGIN @{
exit exitval
@}' "$@@"
@end example
-@c ENDOFRANGE tst
-@c ENDOFRANGE logftst
-@c ENDOFRANGE filogtst
-@c ENDOFRANGE gawtst
@node Bitwise Functions
@subsection Bit-Manipulation Functions
@cindex bit-manipulation functions
-@c STARTOFRANGE bit
@cindex bitwise, operations
-@c STARTOFRANGE and
@cindex AND bitwise operation
-@c STARTOFRANGE oro
@cindex OR bitwise operation
-@c STARTOFRANGE xor
@cindex XOR bitwise operation
-@c STARTOFRANGE opbit
@cindex operations, bitwise
@quotation
@i{I can explain it for you, but I can't understand it for you.}
@@ -18179,7 +18217,7 @@ The operations are described in @ref{table-bitwise-ops}.
@ifnottex
@ifnotdocbook
@display
- Bit Operator
+ Bit operator
| AND | OR | XOR
|---+---+---+---+---+---
Operands | 0 | 1 | 0 | 1 | 0 | 1
@@ -18237,7 +18275,7 @@ Operands | 0 | 1 | 0 | 1 | 0 | 1
<tbody>
<row>
<entry colsep="0"></entry>
-<entry spanname="optitle"><emphasis role="bold">Bit Operator</emphasis></entry>
+<entry spanname="optitle"><emphasis role="bold">Bit operator</emphasis></entry>
</row>
<row rowsep="1">
@@ -18301,10 +18339,9 @@ of a given value.
Finally, two other common operations are to shift the bits left or right.
For example, if you have a bit string @samp{10111001} and you shift it
right by three bits, you end up with @samp{00010111}.@footnote{This example
-shows that 0's come in on the left side. For @command{gawk}, this is
+shows that zeros come in on the left side. For @command{gawk}, this is
always true, but in some languages, it's possible to have the left side
-fill with 1's.}
-@c Purposely decided to use 0's and 1's here. 2/2001.
+fill with ones.}
If you start over again with @samp{10111001} and shift it left by three
bits, you end up with @samp{11001000}. The following list describes
@command{gawk}'s built-in functions that implement the bitwise operations.
@@ -18358,7 +18395,7 @@ that illustrates the use of these functions:
@example
@group
@c file eg/lib/bits2str.awk
-# bits2str --- turn a byte into readable 1's and 0's
+# bits2str --- turn a byte into readable ones and zeros
function bits2str(bits, data, mask)
@{
@@ -18432,15 +18469,16 @@ $ @kbd{gawk -f testbits.awk}
@cindex converting, numbers to strings
@cindex number as string of bits
The @code{bits2str()} function turns a binary number into a string.
-The number @code{1} represents a binary value where the rightmost bit
-is set to 1. Using this mask,
+Initializing @code{mask} to one creates
+a binary value where the rightmost bit
+is set to one. Using this mask,
the function repeatedly checks the rightmost bit.
ANDing the mask with the value indicates whether the
-rightmost bit is 1 or not. If so, a @code{"1"} is concatenated onto the front
+rightmost bit is one or not. If so, a @code{"1"} is concatenated onto the front
of the string.
Otherwise, a @code{"0"} is added.
The value is then shifted right by one bit and the loop continues
-until there are no more 1 bits.
+until there are no more one bits.
If the initial value is zero, it returns a simple @code{"0"}.
Otherwise, at the end, it pads the value with zeros to represent multiples
@@ -18451,11 +18489,6 @@ decimal and octal values for the same numbers
(@pxref{Nondecimal-numbers}),
and then demonstrates the
results of the @code{compl()}, @code{lshift()}, and @code{rshift()} functions.
-@c ENDOFRANGE bit
-@c ENDOFRANGE and
-@c ENDOFRANGE oro
-@c ENDOFRANGE xor
-@c ENDOFRANGE opbit
@node Type Functions
@subsection Getting Type Information
@@ -18469,7 +18502,7 @@ that traverses every element of an array of arrays
@cindexgawkfunc{isarray}
@cindex scalar or array
@item isarray(@var{x})
-Return a true value if @var{x} is an array. Otherwise return false.
+Return a true value if @var{x} is an array. Otherwise, return false.
@end table
@code{isarray()} is meant for use in two circumstances. The first is when
@@ -18530,20 +18563,16 @@ The default value for @var{category} is @code{"LC_MESSAGES"}.
Return the plural form used for @var{number} of the
translation of @var{string1} and @var{string2} in text domain
@var{domain} for locale category @var{category}. @var{string1} is the
-English singular variant of a message, and @var{string2} the English plural
+English singular variant of a message, and @var{string2} is the English plural
variant of the same message.
The default value for @var{domain} is the current value of @code{TEXTDOMAIN}.
The default value for @var{category} is @code{"LC_MESSAGES"}.
@end table
-@c ENDOFRANGE funcbi
-@c ENDOFRANGE bifunc
@node User-defined
@section User-Defined Functions
-@c STARTOFRANGE udfunc
@cindex user-defined functions
-@c STARTOFRANGE funcud
@cindex functions, user-defined
Complicated @command{awk} programs can often be simplified by defining
your own functions. User-defined functions can be called just like
@@ -18563,12 +18592,11 @@ them (i.e., to tell @command{awk} what they should do).
@subsection Function Definition Syntax
@quotation
-@i{It's entirely fair to say that the @command{awk} syntax for local
+@i{It's entirely fair to say that the awk syntax for local
variable definitions is appallingly awful.}
@author Brian Kernighan
@end quotation
-@c STARTOFRANGE fdef
@cindex functions, defining
Definitions of functions can appear anywhere between the rules of an
@command{awk} program. Thus, the general form of an @command{awk} program is
@@ -18606,14 +18634,23 @@ the call.
A function cannot have two parameters with the same name, nor may it
have a parameter with the same name as the function itself.
-In addition, according to the POSIX standard, function parameters
+
+@quotation CAUTION
+According to the POSIX standard, function parameters
cannot have the same name as one of the special predefined variables
-(@pxref{Built-in Variables}). Not all versions of @command{awk} enforce
-this restriction.
+(@pxref{Built-in Variables}), nor may a function parameter have the
+same name as another function.
+
+Not all versions of @command{awk} enforce
+these restrictions.
+@command{gawk} always enforces the first restriction.
+With @option{--posix} (@pxref{Options}),
+it also enforces the second restriction.
+@end quotation
Local variables act like the empty string if referenced where a string
value is required, and like zero if referenced where a numeric value
-is required. This is the same as regular variables that have never been
+is required. This is the same as the behavior of regular variables that have never been
assigned a value. (There is more to understand about local variables;
@pxref{Dynamic Typing}.)
@@ -18647,7 +18684,7 @@ During execution of the function body, the arguments and local variable
values hide, or @dfn{shadow}, any variables of the same names used in the
rest of the program. The shadowed variables are not accessible in the
function definition, because there is no way to name them while their
-names have been taken away for the local variables. All other variables
+names have been taken away for the arguments and local variables. All other variables
used in the @command{awk} program can be referenced or set normally in the
function's body.
@@ -18714,7 +18751,7 @@ function myprint(num)
@end example
@noindent
-To illustrate, here is an @command{awk} rule that uses our @code{myprint}
+To illustrate, here is an @command{awk} rule that uses our @code{myprint()}
function:
@example
@@ -18755,13 +18792,13 @@ in an array and start over with a new list of elements
(@pxref{Delete}).
Instead of having
to repeat this loop everywhere that you need to clear out
-an array, your program can just call @code{delarray}.
+an array, your program can just call @code{delarray()}.
(This guarantees portability. The use of @samp{delete @var{array}} to delete
the contents of an entire array is a relatively recent@footnote{Late in 2012.}
addition to the POSIX standard.)
The following is an example of a recursive function. It takes a string
-as an input parameter and returns the string in backwards order.
+as an input parameter and returns the string in reverse order.
Recursive functions must always have a test that stops the recursion.
In this case, the recursion terminates when the input string is
already empty:
@@ -18815,12 +18852,10 @@ You might think that @code{ctime()} could use @code{PROCINFO["strftime"]}
for its format string. That would be a mistake, because @code{ctime()} is
supposed to return the time formatted in a standard fashion, and user-level
code could have changed @code{PROCINFO["strftime"]}.
-@c ENDOFRANGE fdef
@node Function Caveats
@subsection Calling User-Defined Functions
-@c STARTOFRANGE fudc
@cindex functions, user-defined, calling
@dfn{Calling a function} means causing the function to run and do its job.
A function call is an expression and its value is the value returned by
@@ -18860,7 +18895,7 @@ an error.
@cindex local variables, in a function
@cindex variables, local to a function
-Unlike many languages,
+Unlike in many languages,
there is no way to make a variable local to a @code{@{} @dots{} @code{@}} block in
@command{awk}, but you can make a variable local to a function. It is
good practice to do so whenever a variable is needed only in that
@@ -18869,7 +18904,7 @@ function.
To make a variable local to a function, simply declare the variable as
an argument after the actual function arguments
(@pxref{Definition Syntax}).
-Look at the following example where variable
+Look at the following example, where variable
@code{i} is a global variable used by both functions @code{foo()} and
@code{bar()}:
@@ -18910,7 +18945,7 @@ foo's i=3
top's i=3
@end example
-If you want @code{i} to be local to both @code{foo()} and @code{bar()} do as
+If you want @code{i} to be local to both @code{foo()} and @code{bar()}, do as
follows (the extra space before @code{i} is a coding convention to
indicate that @code{i} is a local variable, not an argument):
@@ -18998,7 +19033,7 @@ declare explicitly whether the arguments are passed @dfn{by value} or
@dfn{by reference}.
Instead, the passing convention is determined at runtime when
-the function is called according to the following rule:
+the function is called, according to the following rule:
if the argument is an array variable, then it is passed by reference.
Otherwise, the argument is passed by value.
@@ -19075,7 +19110,7 @@ prints @samp{a[1] = 1, a[2] = two, a[3] = 3}, because
@cindex undefined functions
@cindex functions, undefined
Some @command{awk} implementations allow you to call a function that
-has not been defined. They only report a problem at runtime when the
+has not been defined. They only report a problem at runtime, when the
program actually tries to call the function. For example:
@example
@@ -19112,7 +19147,6 @@ or the @code{nextfile} statement
@end ifnotdocbook
inside a user-defined function.
@command{gawk} does not have this limitation.
-@c ENDOFRANGE fudc
@node Return Statement
@subsection The @code{return} Statement
@@ -19135,15 +19169,15 @@ makes the returned value undefined, and therefore, unpredictable.
In practice, though, all versions of @command{awk} simply return the
null string, which acts like zero if used in a numeric context.
-A @code{return} statement with no value expression is assumed at the end of
-every function definition. So if control reaches the end of the function
-body, then technically, the function returns an unpredictable value.
+A @code{return} statement without an @var{expression} is assumed at the end of
+every function definition. So, if control reaches the end of the function
+body, then technically the function returns an unpredictable value.
In practice, it returns the empty string. @command{awk}
does @emph{not} warn you if you use the return value of such a function.
Sometimes, you want to write a function for what it does, not for
what it returns. Such a function corresponds to a @code{void} function
-in C, C++ or Java, or to a @code{procedure} in Ada. Thus, it may be appropriate to not
+in C, C++, or Java, or to a @code{procedure} in Ada. Thus, it may be appropriate to not
return any value; simply bear in mind that you should not be using the
return value of such a function.
@@ -19240,7 +19274,6 @@ does report the second error.
Usually, such things aren't a big issue, but it's worth
being aware of them.
-@c ENDOFRANGE udfunc
@node Indirect Calls
@section Indirect Function Calls
@@ -19263,13 +19296,15 @@ function calls, you can specify the name of the function to call as a
string variable, and then call the function. Let's look at an example.
Suppose you have a file with your test scores for the classes you
-are taking. The first field is the class name. The following fields
+are taking, and
+you wish to get the sum and the average of
+your test scores.
+The first field is the class name. The following fields
are the functions to call to process the data, up to a ``marker''
field @samp{data:}. Following the marker, to the end of the record,
are the various numeric test scores.
-Here is the initial file; you wish to get the sum and the average of
-your test scores:
+Here is the initial file:
@example
@c file eg/data/class_data1
@@ -19352,9 +19387,9 @@ function sum(first, last, ret, i)
@c endfile
@end example
-These two functions expect to work on fields; thus the parameters
+These two functions expect to work on fields; thus, the parameters
@code{first} and @code{last} indicate where in the fields to start and end.
-Otherwise they perform the expected computations and are not unusual:
+Otherwise, they perform the expected computations and are not unusual:
@example
@c file eg/prog/indirectcall.awk
@@ -19413,8 +19448,8 @@ The ability to use indirect function calls is more powerful than you may
think at first. The C and C++ languages provide ``function pointers,'' which
are a mechanism for calling a function chosen at runtime. One of the most
well-known uses of this ability is the C @code{qsort()} function, which sorts
-an array using the famous ``quick sort'' algorithm
-(see @uref{http://en.wikipedia.org/wiki/Quick_sort, the Wikipedia article}
+an array using the famous ``quicksort'' algorithm
+(see @uref{http://en.wikipedia.org/wiki/Quicksort, the Wikipedia article}
for more information). To use this function, you supply a pointer to a comparison
function. This mechanism allows you to sort arbitrary data in an arbitrary
fashion.
@@ -19433,11 +19468,11 @@ We can do something similar using @command{gawk}, like this:
# January 2009
@c endfile
-
@end ignore
@c file eg/lib/quicksort.awk
-# quicksort --- C.A.R. Hoare's quick sort algorithm. See Wikipedia
-# or almost any algorithms or computer science text
+
+# quicksort --- C.A.R. Hoare's quicksort algorithm. See Wikipedia
+# or almost any algorithms or computer science text.
@c endfile
@ignore
@c file eg/lib/quicksort.awk
@@ -19475,7 +19510,7 @@ function quicksort_swap(data, i, j, temp)
The @code{quicksort()} function receives the @code{data} array, the starting and ending
indices to sort (@code{left} and @code{right}), and the name of a function that
-performs a ``less than'' comparison. It then implements the quick sort algorithm.
+performs a ``less than'' comparison. It then implements the quicksort algorithm.
To make use of the sorting function, we return to our previous example. The
first thing to do is write some comparison functions:
@@ -19586,76 +19621,29 @@ $ @kbd{gawk -f quicksort.awk -f indirectcall.awk class_data2}
@end example
Another example where indirect functions calls are useful can be found in
-processing arrays. @DBREF{Walking Arrays} presented a simple function
-for ``walking'' an array of arrays. That function simply printed the
-name and value of each scalar array element. However, it is easy to
-generalize that function, by passing in the name of a function to call
-when walking an array. The modified function looks like this:
-
-@example
-@c file eg/lib/processarray.awk
-function process_array(arr, name, process, do_arrays, i, new_name)
-@{
- for (i in arr) @{
- new_name = (name "[" i "]")
- if (isarray(arr[i])) @{
- if (do_arrays)
- @@process(new_name, arr[i])
- process_array(arr[i], new_name, process, do_arrays)
- @} else
- @@process(new_name, arr[i])
- @}
-@}
-@c endfile
-@end example
-
-The arguments are as follows:
-
-@table @code
-@item arr
-The array.
-
-@item name
-The name of the array (a string).
-
-@item process
-The name of the function to call.
-
-@item do_arrays
-If this is true, the function can handle elements that are subarrays.
-@end table
-
-If subarrays are to be processed, that is done before walking them further.
-
-When run with the following scaffolding, the function produces the same
-results as does the earlier @code{walk_array()} function:
-
-@example
-BEGIN @{
- a[1] = 1
- a[2][1] = 21
- a[2][2] = 22
- a[3] = 3
- a[4][1][1] = 411
- a[4][2] = 42
-
- process_array(a, "a", "do_print", 0)
-@}
-
-function do_print(name, element)
-@{
- printf "%s = %s\n", name, element
-@}
-@end example
+processing arrays. This is described in @ref{Walking Arrays}.
Remember that you must supply a leading @samp{@@} in front of an indirect function call.
Starting with @value{PVERSION} 4.1.2 of @command{gawk}, indirect function
calls may also be used with built-in functions and with extension functions
-(@pxref{Dynamic Extensions}). The only thing you cannot do is pass a regular
-expression constant to a built-in function through an indirect function
-call.@footnote{This may change in a future version; recheck the documentation that
-comes with your version of @command{gawk} to see if it has.}
+(@pxref{Dynamic Extensions}). There are some limitations when calling
+built-in functions indirectly, as follows.
+
+@itemize @value{BULLET}
+@item
+You cannot pass a regular expression constant to a built-in function
+through an indirect function call.@footnote{This may change in a future
+version; recheck the documentation that comes with your version of
+@command{gawk} to see if it has.} This applies to the @code{sub()},
+@code{gsub()}, @code{gensub()}, @code{match()}, @code{split()} and
+@code{patsplit()} functions.
+
+@item
+If calling @code{sub()} or @code{gsub()}, you may only pass two arguments,
+since those functions are unusual in that they update their third argument.
+This means that @code{$0} will be updated.
+@end itemize
@command{gawk} does its best to make indirect function calls efficient.
For example, in the following case:
@@ -19666,7 +19654,7 @@ for (i = 1; i <= n; i++)
@end example
@noindent
-@code{gawk} looks up the actual function to call only once.
+@command{gawk} looks up the actual function to call only once.
@node Functions Summary
@section Summary
@@ -19733,7 +19721,6 @@ program. This is equivalent to function pointers in C and C++.
@end itemize
-@c ENDOFRANGE funcud
@ifnotinfo
@part @value{PART2}Problem Solving with @command{awk}
@@ -19755,18 +19742,15 @@ It contains the following chapters:
@node Library Functions
@chapter A Library of @command{awk} Functions
-@c STARTOFRANGE libf
@cindex libraries of @command{awk} functions
-@c STARTOFRANGE flib
@cindex functions, library
-@c STARTOFRANGE fudlib
@cindex functions, user-defined, library of
@DBREF{User-defined} describes how to write
your own @command{awk} functions. Writing functions is important, because
it allows you to encapsulate algorithms and program tasks in a single
place. It simplifies programming, making program development more
-manageable, and making programs more readable.
+manageable and making programs more readable.
@cindex Kernighan, Brian
@cindex Plauger, P.J.@:
@@ -19895,7 +19879,7 @@ often use variable names like these for their own purposes.
The example programs shown in this @value{CHAPTER} all start the names of their
private variables with an underscore (@samp{_}). Users generally don't use
leading underscores in their variable names, so this convention immediately
-decreases the chances that the variable name will be accidentally shared
+decreases the chances that the variable names will be accidentally shared
with the user's program.
@cindex @code{_} (underscore), in names of private variables
@@ -19913,8 +19897,8 @@ show how our own @command{awk} programming style has evolved and to
provide some basis for this discussion.}
As a final note on variable naming, if a function makes global variables
-available for use by a main program, it is a good convention to start that
-variable's name with a capital letter---for
+available for use by a main program, it is a good convention to start those
+variables' names with a capital letter---for
example, @code{getopt()}'s @code{Opterr} and @code{Optind} variables
(@pxref{Getopt Function}).
The leading capital letter indicates that it is global, while the fact that
@@ -19925,7 +19909,7 @@ not one of @command{awk}'s predefined variables, such as @code{FS}.
It is also important that @emph{all} variables in library
functions that do not need to save state are, in fact, declared
local.@footnote{@command{gawk}'s @option{--dump-variables} command-line
-option is useful for verifying this.} If this is not done, the variable
+option is useful for verifying this.} If this is not done, the variables
could accidentally be used in the user's program, leading to bugs that
are very difficult to track down:
@@ -20082,13 +20066,9 @@ be tested with @command{gawk} and the results compared to the built-in
@node Assert Function
@subsection Assertions
-@c STARTOFRANGE asse
@cindex assertions
-@c STARTOFRANGE assef
@cindex @code{assert()} function (C library)
-@c STARTOFRANGE libfass
@cindex libraries of @command{awk} functions, assertions
-@c STARTOFRANGE flibass
@cindex functions, library, assertions
@cindex @command{awk} programs, lengthy, assertions
When writing large programs, it is often useful to know
@@ -20127,7 +20107,7 @@ Following is the function:
@example
@c file eg/lib/assert.awk
-# assert --- assert that a condition is true. Otherwise exit.
+# assert --- assert that a condition is true. Otherwise, exit.
@c endfile
@ignore
@@ -20163,7 +20143,7 @@ is false, it prints a message to standard error, using the @code{string}
parameter to describe the failed condition. It then sets the variable
@code{_assert_exit} to one and executes the @code{exit} statement.
The @code{exit} statement jumps to the @code{END} rule. If the @code{END}
-rules finds @code{_assert_exit} to be true, it exits immediately.
+rule finds @code{_assert_exit} to be true, it exits immediately.
The purpose of the test in the @code{END} rule is to
keep any other @code{END} rules from running. When an assertion fails, the
@@ -20204,10 +20184,6 @@ most likely causing the program to hang as it waits for input.
There is a simple workaround to this:
make sure that such a @code{BEGIN} rule always ends
with an @code{exit} statement.
-@c ENDOFRANGE asse
-@c ENDOFRANGE assef
-@c ENDOFRANGE flibass
-@c ENDOFRANGE libfass
@node Round Function
@subsection Rounding Numbers
@@ -20459,7 +20435,7 @@ all the strings in an array into one long string. The following function,
the application programs
(@pxref{Sample Programs}).
-Good function design is important; this function needs to be general but it
+Good function design is important; this function needs to be general, but it
should also have a reasonable default behavior. It is called with an array
as well as the beginning and ending indices of the elements in the array to be
merged. This assumes that the array indices are numeric---a reasonable
@@ -20607,7 +20583,7 @@ allowed the user to supply an optional timestamp value to use instead
of the current time.
@node Readfile Function
-@subsection Reading a Whole File At Once
+@subsection Reading a Whole File at Once
Often, it is convenient to have the entire contents of a file available
in memory as a single string. A straightforward but naive way to
@@ -20664,13 +20640,13 @@ function readfile(file, tmp, save_rs)
It works by setting @code{RS} to @samp{^$}, a regular expression that
will never match if the file has contents. @command{gawk} reads data from
-the file into @code{tmp} attempting to match @code{RS}. The match fails
+the file into @code{tmp}, attempting to match @code{RS}. The match fails
after each read, but fails quickly, such that @command{gawk} fills
@code{tmp} with the entire contents of the file.
(@DBXREF{Records} for information on @code{RT} and @code{RS}.)
In the case that @code{file} is empty, the return value is the null
-string. Thus calling code may use something like:
+string. Thus, calling code may use something like:
@example
contents = readfile("/some/path")
@@ -20681,7 +20657,7 @@ if (length(contents) == 0)
This tests the result to see if it is empty or not. An equivalent
test would be @samp{contents == ""}.
-@xref{Extension Sample Readfile}, for an extension function that
+@DBXREF{Extension Sample Readfile} for an extension function that
also reads an entire file into memory.
@node Shell Quoting
@@ -20765,11 +20741,8 @@ function shell_quote(s, # parameter
@node Data File Management
@section @value{DDF} Management
-@c STARTOFRANGE dataf
@cindex files, managing
-@c STARTOFRANGE libfdataf
@cindex libraries of @command{awk} functions, managing, data files
-@c STARTOFRANGE flibdataf
@cindex functions, library, managing data files
This @value{SECTION} presents functions that are useful for managing
command-line @value{DF}s.
@@ -20791,8 +20764,8 @@ The @code{BEGIN} and @code{END} rules are each executed exactly once, at
the beginning and end of your @command{awk} program, respectively
(@pxref{BEGIN/END}).
We (the @command{gawk} authors) once had a user who mistakenly thought that the
-@code{BEGIN} rule is executed at the beginning of each @value{DF} and the
-@code{END} rule is executed at the end of each @value{DF}.
+@code{BEGIN} rules were executed at the beginning of each @value{DF} and the
+@code{END} rules were executed at the end of each @value{DF}.
When informed
that this was not the case, the user requested that we add new special
@@ -20832,7 +20805,7 @@ END @{ endfile(FILENAME) @}
This file must be loaded before the user's ``main'' program, so that the
rule it supplies is executed first.
-This rule relies on @command{awk}'s @code{FILENAME} variable that
+This rule relies on @command{awk}'s @code{FILENAME} variable, which
automatically changes for each new @value{DF}. The current @value{FN} is
saved in a private variable, @code{_oldfilename}. If @code{FILENAME} does
not equal @code{_oldfilename}, then a new @value{DF} is being processed and
@@ -20848,7 +20821,7 @@ first @value{DF}.
The program also supplies an @code{END} rule to do the final processing for
the last file. Because this @code{END} rule comes before any @code{END} rules
supplied in the ``main'' program, @code{endfile()} is called first. Once
-again the value of multiple @code{BEGIN} and @code{END} rules should be clear.
+again, the value of multiple @code{BEGIN} and @code{END} rules should be clear.
@cindex @code{beginfile()} user-defined function
@cindex @code{endfile()} user-defined function
@@ -20891,7 +20864,7 @@ how it simplifies writing the main program.
You are probably wondering, if @code{beginfile()} and @code{endfile()}
functions can do the job, why does @command{gawk} have
-@code{BEGINFILE} and @code{ENDFILE} patterns (@pxref{BEGINFILE/ENDFILE})?
+@code{BEGINFILE} and @code{ENDFILE} patterns?
Good question. Normally, if @command{awk} cannot open a file, this
causes an immediate fatal error. In this case, there is no way for a
@@ -20900,13 +20873,14 @@ calling it relies on the file being open and at the first record. Thus,
the main reason for @code{BEGINFILE} is to give you a ``hook'' to catch
files that cannot be processed. @code{ENDFILE} exists for symmetry,
and because it provides an easy way to do per-file cleanup processing.
+For more information, refer to @ref{BEGINFILE/ENDFILE}.
@end sidebar
@node Rewind Function
@subsection Rereading the Current File
@cindex files, reading
-Another request for a new built-in function was for a @code{rewind()}
+Another request for a new built-in function was for a
function that would make it possible to reread the current file.
The requesting user didn't want to have to use @code{getline}
(@pxref{Getline})
@@ -20915,7 +20889,7 @@ inside a loop.
However, as long as you are not in the @code{END} rule, it is
quite easy to arrange to immediately close the current input file
and then start over with it from the top.
-For lack of a better name, we'll call it @code{rewind()}:
+For lack of a better name, we'll call the function @code{rewind()}:
@cindex @code{rewind()} user-defined function
@example
@@ -21008,16 +20982,16 @@ See also @ref{ARGC and ARGV}.
Because @command{awk} variable names only allow the English letters,
the regular expression check purposely does not use character classes
such as @samp{[:alpha:]} and @samp{[:alnum:]}
-(@pxref{Bracket Expressions})
+(@pxref{Bracket Expressions}).
@node Empty Files
-@subsection Checking for Zero-length Files
+@subsection Checking for Zero-Length Files
All known @command{awk} implementations silently skip over zero-length files.
This is a by-product of @command{awk}'s implicit
read-a-record-and-match-against-the-rules loop: when @command{awk}
tries to read a record from an empty file, it immediately receives an
-end of file indication, closes the file, and proceeds on to the next
+end-of-file indication, closes the file, and proceeds on to the next
command-line @value{DF}, @emph{without} executing any user-level
@command{awk} program code.
@@ -21082,7 +21056,7 @@ Occasionally, you might not want @command{awk} to process command-line
variable assignments
(@pxref{Assignment Options}).
In particular, if you have a @value{FN} that contains an @samp{=} character,
-@command{awk} treats the @value{FN} as an assignment, and does not process it.
+@command{awk} treats the @value{FN} as an assignment and does not process it.
Some users have suggested an additional command-line option for @command{gawk}
to disable command-line assignments. However, some simple programming with
@@ -21132,22 +21106,14 @@ The use of @code{No_command_assign} allows you to disable command-line
assignments at invocation time, by giving the variable a true value.
When not set, it is initially zero (i.e., false), so the command-line arguments
are left alone.
-@c ENDOFRANGE dataf
-@c ENDOFRANGE flibdataf
-@c ENDOFRANGE libfdataf
@node Getopt Function
@section Processing Command-Line Options
-@c STARTOFRANGE libfclo
@cindex libraries of @command{awk} functions, command-line options
-@c STARTOFRANGE flibclo
@cindex functions, library, command-line options
-@c STARTOFRANGE clop
@cindex command-line options, processing
-@c STARTOFRANGE oclp
@cindex options, command-line, processing
-@c STARTOFRANGE clibf
@cindex functions, library, C library
@cindex arguments, processing
Most utilities on POSIX-compatible systems take options on
@@ -21452,8 +21418,8 @@ BEGIN @{
@c endfile
@end example
-The rest of the @code{BEGIN} rule is a simple test program. Here is the
-result of two sample runs of the test program:
+The rest of the @code{BEGIN} rule is a simple test program. Here are the
+results of two sample runs of the test program:
@example
$ @kbd{awk -f getopt.awk -v _getopt_test=1 -- -a -cbARG bax -x}
@@ -21499,27 +21465,19 @@ further options
Several of the sample programs presented in
@ref{Sample Programs},
use @code{getopt()} to process their arguments.
-@c ENDOFRANGE libfclo
-@c ENDOFRANGE flibclo
-@c ENDOFRANGE clop
-@c ENDOFRANGE oclp
@node Passwd Functions
@section Reading the User Database
-@c STARTOFRANGE libfudata
@cindex libraries of @command{awk} functions, user database, reading
-@c STARTOFRANGE flibudata
@cindex functions, library, user database@comma{} reading
-@c STARTOFRANGE udatar
@cindex user database@comma{} reading
-@c STARTOFRANGE dataur
@cindex database, users@comma{} reading
@cindex @code{PROCINFO} array
The @code{PROCINFO} array
(@pxref{Built-in Variables})
provides access to the current user's real and effective user and group ID
-numbers, and if available, the user's supplementary group set.
+numbers, and, if available, the user's supplementary group set.
However, because these are numbers, they do not provide very useful
information to the average user. There needs to be some way to find the
user information associated with the user and group ID numbers. This
@@ -21539,7 +21497,7 @@ kept. Instead, it provides the @code{<pwd.h>} header file
and several C language subroutines for obtaining user information.
The primary function is @code{getpwent()}, for ``get password entry.''
The ``password'' comes from the original user database file,
-@file{/etc/passwd}, which stores user information, along with the
+@file{/etc/passwd}, which stores user information along with the
encrypted passwords (hence the name).
@cindex @command{pwcat} program
@@ -21638,7 +21596,7 @@ The user's encrypted password. This may not be available on some systems.
@item User-ID
The user's numeric user ID number.
-(On some systems, it's a C @code{long}, and not an @code{int}. Thus
+(On some systems, it's a C @code{long}, and not an @code{int}. Thus,
we cast it to @code{long} for all cases.)
@item Group-ID
@@ -21765,7 +21723,7 @@ The code that checks for using @code{FPAT}, using @code{using_fpat}
and @code{PROCINFO["FS"]}, is similar.
The main part of the function uses a loop to read database lines, split
-the line into fields, and then store the line into each array as necessary.
+the lines into fields, and then store the lines into each array as necessary.
When the loop is done, @code{@w{_pw_init()}} cleans up by closing the pipeline,
setting @code{@w{_pw_inited}} to one, and restoring @code{FS}
(and @code{FIELDWIDTHS} or @code{FPAT}
@@ -21860,21 +21818,13 @@ and such a change would clutter up the code.
The @command{id} program in @DBREF{Id Program}
uses these functions.
-@c ENDOFRANGE libfudata
-@c ENDOFRANGE flibudata
-@c ENDOFRANGE udatar
-@c ENDOFRANGE dataur
@node Group Functions
@section Reading the Group Database
-@c STARTOFRANGE libfgdata
@cindex libraries of @command{awk} functions, group database, reading
-@c STARTOFRANGE flibgdata
@cindex functions, library, group database@comma{} reading
-@c STARTOFRANGE gdatar
@cindex group database, reading
-@c STARTOFRANGE datagr
@cindex database, group, reading
@cindex @code{PROCINFO} array, and group membership
@cindex @code{getgrent()} function (C library)
@@ -21990,7 +21940,7 @@ it is usually empty or set to @samp{*}.
@item Group ID Number
The group's numeric group ID number;
the association of name to number must be unique within the file.
-(On some systems it's a C @code{long}, and not an @code{int}. Thus
+(On some systems it's a C @code{long}, and not an @code{int}. Thus,
we cast it to @code{long} for all cases.)
@item Group Member List
@@ -22104,32 +22054,32 @@ The @code{@w{_gr_init()}} function first saves @code{FS},
@code{$0}, and then sets @code{FS} and @code{RS} to the correct values for
scanning the group information.
It also takes care to note whether @code{FIELDWIDTHS} or @code{FPAT}
-is being used, and to restore the appropriate field splitting mechanism.
+is being used, and to restore the appropriate field-splitting mechanism.
-The group information is stored is several associative arrays.
+The group information is stored in several associative arrays.
The arrays are indexed by group name (@code{@w{_gr_byname}}), by group ID number
(@code{@w{_gr_bygid}}), and by position in the database (@code{@w{_gr_bycount}}).
There is an additional array indexed by username (@code{@w{_gr_groupsbyuser}}),
which is a space-separated list of groups to which each user belongs.
-Unlike the user database, it is possible to have multiple records in the
+Unlike in the user database, it is possible to have multiple records in the
database for the same group. This is common when a group has a large number
of members. A pair of such entries might look like the following:
@example
-tvpeople:*:101:johny,jay,arsenio
+tvpeople:*:101:johnny,jay,arsenio
tvpeople:*:101:david,conan,tom,joan
@end example
For this reason, @code{_gr_init()} looks to see if a group name or
-group ID number is already seen. If it is, the usernames are
-simply concatenated onto the previous list of users.@footnote{There is actually a
+group ID number is already seen. If so, the usernames are
+simply concatenated onto the previous list of users.@footnote{There is a
subtle problem with the code just presented. Suppose that
the first time there were no names. This code adds the names with
a leading comma. It also doesn't check that there is a @code{$4}.}
Finally, @code{_gr_init()} closes the pipeline to @command{grcat}, restores
-@code{FS} (and @code{FIELDWIDTHS} or @code{FPAT} if necessary), @code{RS}, and @code{$0},
+@code{FS} (and @code{FIELDWIDTHS} or @code{FPAT}, if necessary), @code{RS}, and @code{$0},
initializes @code{_gr_count} to zero
(it is used later), and makes @code{_gr_inited} nonzero.
@@ -22197,7 +22147,6 @@ function getgrent()
@}
@c endfile
@end example
-@c ENDOFRANGE clibf
@cindex @code{endgrent()} function (C library)
The @code{endgrent()} function resets @code{_gr_count} to zero so that @code{getgrent()} can
@@ -22230,12 +22179,12 @@ uses these functions.
@DBREF{Arrays of Arrays} described how @command{gawk}
provides arrays of arrays. In particular, any element of
-an array may be either a scalar, or another array. The
+an array may be either a scalar or another array. The
@code{isarray()} function (@pxref{Type Functions})
lets you distinguish an array
from a scalar.
The following function, @code{walk_array()}, recursively traverses
-an array, printing each element's indices and value.
+an array, printing the element indices and values.
You call it with the array and a string representing the name
of the array:
@@ -22286,10 +22235,66 @@ $ @kbd{gawk -f walk_array.awk}
@print{} a[4][2] = 42
@end example
-@c ENDOFRANGE libfgdata
-@c ENDOFRANGE flibgdata
-@c ENDOFRANGE gdatar
-@c ENDOFRANGE libf
+The function just presented simply prints the
+name and value of each scalar array element. However, it is easy to
+generalize it, by passing in the name of a function to call
+when walking an array. The modified function looks like this:
+
+@example
+@c file eg/lib/processarray.awk
+function process_array(arr, name, process, do_arrays, i, new_name)
+@{
+ for (i in arr) @{
+ new_name = (name "[" i "]")
+ if (isarray(arr[i])) @{
+ if (do_arrays)
+ @@process(new_name, arr[i])
+ process_array(arr[i], new_name, process, do_arrays)
+ @} else
+ @@process(new_name, arr[i])
+ @}
+@}
+@c endfile
+@end example
+
+The arguments are as follows:
+
+@table @code
+@item arr
+The array.
+
+@item name
+The name of the array (a string).
+
+@item process
+The name of the function to call.
+
+@item do_arrays
+If this is true, the function can handle elements that are subarrays.
+@end table
+
+If subarrays are to be processed, that is done before walking them further.
+
+When run with the following scaffolding, the function produces the same
+results as does the earlier version of @code{walk_array()}:
+
+@example
+BEGIN @{
+ a[1] = 1
+ a[2][1] = 21
+ a[2][2] = 22
+ a[3] = 3
+ a[4][1][1] = 411
+ a[4][2] = 42
+
+ process_array(a, "a", "do_print", 0)
+@}
+
+function do_print(name, element)
+@{
+ printf "%s = %s\n", name, element
+@}
+@end example
@node Library Functions Summary
@section Summary
@@ -22311,24 +22316,24 @@ The functions presented here fit into the following categories:
@c nested list
@table @asis
@item General problems
-Number-to-string conversion, assertions, rounding, random number
+Number-to-string conversion, testing assertions, rounding, random number
generation, converting characters to numbers, joining strings, getting
easily usable time-of-day information, and reading a whole file in
-one shot.
+one shot
@item Managing @value{DF}s
Noting @value{DF} boundaries, rereading the current file, checking for
readable files, checking for zero-length files, and treating assignments
-as @value{FN}s.
+as @value{FN}s
@item Processing command-line options
-An @command{awk} version of the standard C @code{getopt()} function.
+An @command{awk} version of the standard C @code{getopt()} function
@item Reading the user and group databases
-Two sets of routines that parallel the C library versions.
+Two sets of routines that parallel the C library versions
@item Traversing arrays of arrays
-A simple function to traverse an array of arrays to any depth.
+Two functions that traverse an array of arrays to any depth
@end table
@c end nested list
@@ -22403,13 +22408,9 @@ output identical to that of the original version.
@end enumerate
@c EXCLUDE END
-@c ENDOFRANGE flib
-@c ENDOFRANGE fudlib
-@c ENDOFRANGE datagr
@node Sample Programs
@chapter Practical @command{awk} Programs
-@c STARTOFRANGE awkpex
@cindex @command{awk} programs, examples of
@c FULLXREF ON
@@ -22427,10 +22428,10 @@ in this @value{CHAPTER}.
The second presents @command{awk}
versions of several common POSIX utilities.
These are programs that you are hopefully already familiar with,
-and therefore, whose problems are understood.
+and therefore whose problems are understood.
By reimplementing these programs in @command{awk},
you can focus on the @command{awk}-related aspects of solving
-the programming problem.
+the programming problems.
The third is a grab bag of interesting programs.
These solve a number of different data-manipulation and management
@@ -22479,7 +22480,6 @@ cut.awk -- -c1-8 myfiles > results
@node Clones
@section Reinventing Wheels for Fun and Profit
-@c STARTOFRANGE posimawk
@cindex POSIX, programs@comma{} implementing in @command{awk}
This @value{SECTION} presents a number of POSIX utilities implemented in
@@ -22491,7 +22491,7 @@ It should be noted that these programs are not necessarily intended to
replace the installed versions on your system.
Nor may all of these programs be fully compliant with the most recent
POSIX standard. This is not a problem; their
-purpose is to illustrate @command{awk} language programming for ``real world''
+purpose is to illustrate @command{awk} language programming for ``real-world''
tasks.
The programs are presented in alphabetical order.
@@ -22510,11 +22510,8 @@ The programs are presented in alphabetical order.
@subsection Cutting Out Fields and Columns
@cindex @command{cut} utility
-@c STARTOFRANGE cut
@cindex @command{cut} utility
-@c STARTOFRANGE ficut
@cindex fields, cutting
-@c STARTOFRANGE colcut
@cindex columns, cutting
The @command{cut} utility selects, or ``cuts,'' characters or fields
from its standard input and sends them to its standard output.
@@ -22523,7 +22520,7 @@ but you may supply a command-line option to change the field
@dfn{delimiter} (i.e., the field-separator character). @command{cut}'s
definition of fields is less general than @command{awk}'s.
-A common use of @command{cut} might be to pull out just the login name of
+A common use of @command{cut} might be to pull out just the login names of
logged-on users from the output of @command{who}. For example, the following
pipeline generates a sorted, unique list of the logged-on users:
@@ -22822,21 +22819,14 @@ other @command{awk} implementations to use @code{substr()}
it is also extremely painful.
The @code{FIELDWIDTHS} variable supplies an elegant solution to the problem
of picking the input line apart by characters.
-@c ENDOFRANGE cut
-@c ENDOFRANGE ficut
-@c ENDOFRANGE colcut
@node Egrep Program
@subsection Searching for Regular Expressions in Files
-@c STARTOFRANGE regexps
@cindex regular expressions, searching for
-@c STARTOFRANGE sfregexp
@cindex searching, files for regular expressions
-@c STARTOFRANGE fsregexp
@cindex files, searching for regular expressions
-@c STARTOFRANGE egrep
@cindex @command{egrep} utility
The @command{egrep} utility searches files for patterns. It uses regular
expressions that are almost identical to those available in @command{awk}
@@ -23039,7 +23029,7 @@ successful or unsuccessful match. If the line does not match, the
@code{next} statement just moves on to the next record.
A number of additional tests are made, but they are only done if we
-are not counting lines. First, if the user only wants exit status
+are not counting lines. First, if the user only wants the exit status
(@code{no_print} is true), then it is enough to know that @emph{one}
line in this file matched, and we can skip on to the next file with
@code{nextfile}. Similarly, if we are only printing @value{FN}s, we can
@@ -23080,7 +23070,7 @@ if necessary:
@end example
The @code{END} rule takes care of producing the correct exit status. If
-there are no matches, the exit status is one; otherwise it is zero:
+there are no matches, the exit status is one; otherwise, it is zero:
@example
@c file eg/prog/egrep.awk
@@ -23104,17 +23094,12 @@ function usage()
@c endfile
@end example
-@c ENDOFRANGE regexps
-@c ENDOFRANGE sfregexp
-@c ENDOFRANGE fsregexp
-@c ENDOFRANGE egrep
@node Id Program
@subsection Printing Out User Information
@cindex printing, user information
@cindex users, information about, printing
-@c STARTOFRANGE id
@cindex @command{id} utility
The @command{id} utility lists a user's real and effective user ID numbers,
real and effective group ID numbers, and the user's group set, if any.
@@ -23137,7 +23122,8 @@ Here is a simple version of @command{id} written in @command{awk}.
It uses the user database library functions
(@pxref{Passwd Functions})
and the group database library functions
-(@pxref{Group Functions}):
+(@pxref{Group Functions})
+from @ref{Library Functions}.
The program is fairly straightforward. All the work is done in the
@code{BEGIN} rule. The user and group ID numbers are obtained from
@@ -23243,16 +23229,13 @@ code that is used repeatedly, making the whole program
shorter and cleaner. In particular, moving the check for
the empty string into this function saves several lines of code.
-@c ENDOFRANGE id
@node Split Program
@subsection Splitting a Large File into Pieces
@c FIXME: One day, update to current POSIX version of split
-@c STARTOFRANGE filspl
@cindex files, splitting
-@c STARTOFRANGE split
@cindex @code{split} utility
The @command{split} program splits large text files into smaller pieces.
Usage is as follows:@footnote{This is the traditional usage. The
@@ -23267,8 +23250,8 @@ By default,
the output files are named @file{xaa}, @file{xab}, and so on. Each file has
1,000 lines in it, with the likely exception of the last file. To change the
number of lines in each file, supply a number on the command line
-preceded with a minus (e.g., @samp{-500} for files with 500 lines in them
-instead of 1,000). To change the name of the output files to something like
+preceded with a minus sign (e.g., @samp{-500} for files with 500 lines in them
+instead of 1,000). To change the names of the output files to something like
@file{myfileaa}, @file{myfileab}, and so on, supply an additional
argument that specifies the @value{FN} prefix.
@@ -23387,15 +23370,12 @@ You might want to consider how to eliminate the use of
way as to solve the EBCDIC issue as well.
@end ifset
-@c ENDOFRANGE filspl
-@c ENDOFRANGE split
@node Tee Program
@subsection Duplicating Output into Multiple Files
@cindex files, multiple@comma{} duplicating output into
@cindex output, duplicating into files
-@c STARTOFRANGE tee
@cindex @code{tee} utility
The @code{tee} program is known as a ``pipe fitting.'' @code{tee} copies
its standard input to its standard output and also duplicates it to the
@@ -23508,18 +23488,14 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE tee
@node Uniq Program
@subsection Printing Nonduplicated Lines of Text
@c FIXME: One day, update to current POSIX version of uniq
-@c STARTOFRANGE prunt
@cindex printing, unduplicated lines of text
-@c STARTOFRANGE tpul
@cindex text@comma{} printing, unduplicated lines of
-@c STARTOFRANGE uniq
@cindex @command{uniq} utility
The @command{uniq} utility reads sorted lines of data on its standard
input, and by default removes duplicate lines. In other words, it only
@@ -23788,26 +23764,17 @@ suggestion.
@end ifset
-@c ENDOFRANGE prunt
-@c ENDOFRANGE tpul
-@c ENDOFRANGE uniq
@node Wc Program
@subsection Counting Things
@c FIXME: One day, update to current POSIX version of wc
-@c STARTOFRANGE count
@cindex counting
-@c STARTOFRANGE infco
@cindex input files, counting elements in
-@c STARTOFRANGE woco
@cindex words, counting
-@c STARTOFRANGE chco
@cindex characters, counting
-@c STARTOFRANGE lico
@cindex lines, counting
-@c STARTOFRANGE wc
@cindex @command{wc} utility
The @command{wc} (word count) utility counts lines, words, and characters in
one or more input files. Its usage is as follows:
@@ -23977,13 +23944,6 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE count
-@c ENDOFRANGE infco
-@c ENDOFRANGE lico
-@c ENDOFRANGE woco
-@c ENDOFRANGE chco
-@c ENDOFRANGE wc
-@c ENDOFRANGE posimawk
@node Miscellaneous Programs
@section A Grab Bag of @command{awk} Programs
@@ -24114,9 +24074,7 @@ Aharon Robbins <arnold@skeeve.com> wrote:
@author Erik Quanstrom
@end quotation
-@c STARTOFRANGE tialarm
@cindex time, alarm clock example program
-@c STARTOFRANGE alaex
@cindex alarm clock example program
The following program is a simple ``alarm clock'' program.
You give it a time of day and an optional message. At the specified time,
@@ -24132,7 +24090,7 @@ checking and setting of defaults: the delay, the count, and the message to
print. If the user supplied a message without the ASCII BEL
character (known as the ``alert'' character, @code{"\a"}), then it is added to
the message. (On many systems, printing the ASCII BEL generates an
-audible alert. Thus when the alarm goes off, the system calls attention
+audible alert. Thus, when the alarm goes off, the system calls attention
to itself in case the user is not looking at the computer.)
Just for a change, this program uses a @code{switch} statement
(@pxref{Switch Statement}), but the processing could be done with a series of
@@ -24268,15 +24226,11 @@ seconds are necessary:
@}
@c endfile
@end example
-@c ENDOFRANGE tialarm
-@c ENDOFRANGE alaex
@node Translate Program
@subsection Transliterating Characters
-@c STARTOFRANGE chtra
@cindex characters, transliterating
-@c STARTOFRANGE tr
@cindex @command{tr} utility
The system @command{tr} utility transliterates characters. For example, it is
often used to map uppercase letters into lowercase for further processing:
@@ -24305,7 +24259,7 @@ to @command{gawk}.
@c at least theoretically
The following program was written to
prove that character transliteration could be done with a user-level
-function. This program is not as complete as the system @command{tr} utility
+function. This program is not as complete as the system @command{tr} utility,
but it does most of the job.
The @command{translate} program was written long before @command{gawk}
@@ -24317,13 +24271,13 @@ takes three arguments:
@table @code
@item from
-A list of characters from which to translate.
+A list of characters from which to translate
@item to
-A list of characters to which to translate.
+A list of characters to which to translate
@item target
-The string on which to do the translation.
+The string on which to do the translation
@end table
Associative arrays make the translation part fairly easy. @code{t_ar} holds
@@ -24332,7 +24286,7 @@ loop goes through @code{from}, one character at a time. For each character
in @code{from}, if the character appears in @code{target},
it is replaced with the corresponding @code{to} character.
-The @code{translate()} function calls @code{stranslate()} using @code{$0}
+The @code{translate()} function calls @code{stranslate()}, using @code{$0}
as the target. The main program sets two global variables, @code{FROM} and
@code{TO}, from the command line, and then changes @code{ARGV} so that
@command{awk} reads from the standard input.
@@ -24354,7 +24308,7 @@ Finally, the processing rule simply calls @code{translate()} for each record:
@c endfile
@end ignore
@c file eg/prog/translate.awk
-# Bugs: does not handle things like: tr A-Z a-z, it has
+# Bugs: does not handle things like tr A-Z a-z; it has
# to be spelled out. However, if `to' is shorter than `from',
# the last character in `to' is used for the rest of `from'.
@@ -24424,17 +24378,13 @@ such as @samp{a-z}, as allowed by the @command{tr} utility.
Look at the code for @file{cut.awk} (@pxref{Cut Program})
for inspiration.
-@c ENDOFRANGE chtra
-@c ENDOFRANGE tr
@node Labels Program
@subsection Printing Mailing Labels
-@c STARTOFRANGE prml
@cindex printing, mailing labels
-@c STARTOFRANGE mlprint
@cindex mailing labels@comma{} printing
-Here is a ``real world''@footnote{``Real world'' is defined as
+Here is a ``real-world''@footnote{``Real world'' is defined as
``a program actually used to get something done.''}
program. This
script reads lists of names and
@@ -24443,7 +24393,7 @@ on it, two across and 10 down. The addresses are guaranteed to be no more
than five lines of data. Each address is separated from the next by a blank
line.
-The basic idea is to read 20 labels worth of data. Each line of each label
+The basic idea is to read 20 labels' worth of data. Each line of each label
is stored in the @code{line} array. The single rule takes care of filling
the @code{line} array and printing the page when 20 labels have been read.
@@ -24466,12 +24416,12 @@ of lines on the page
Most of the work is done in the @code{printpage()} function.
The label lines are stored sequentially in the @code{line} array. But they
-have to print horizontally; @code{line[1]} next to @code{line[6]},
+have to print horizontally: @code{line[1]} next to @code{line[6]},
@code{line[2]} next to @code{line[7]}, and so on. Two loops
accomplish this. The outer loop, controlled by @code{i}, steps through
every 10 lines of data; this is each row of labels. The inner loop,
controlled by @code{j}, goes through the lines within the row.
-As @code{j} goes from 0 to 4, @samp{i+j} is the @code{j}-th line in
+As @code{j} goes from 0 to 4, @samp{i+j} is the @code{j}th line in
the row, and @samp{i+j+5} is the entry next to it. The output ends up
looking something like this:
@@ -24496,7 +24446,6 @@ that there are two blank lines at the top and two blank lines at the bottom.
The @code{END} rule arranges to flush the final page of labels; there may
not have been an even multiple of 20 labels in the data:
-@c STARTOFRANGE labels
@cindex @code{labels.awk} program
@example
@c file eg/prog/labels.awk
@@ -24561,14 +24510,10 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE prml
-@c ENDOFRANGE mlprint
-@c ENDOFRANGE labels
@node Word Sorting
@subsection Generating Word-Usage Counts
-@c STARTOFRANGE worus
@cindex words, usage counts@comma{} generating
When working with large amounts of text, it can be interesting to know
@@ -24594,8 +24539,8 @@ END @{
@}
@end example
-The program relies on @command{awk}'s default field splitting
-mechanism to break each line up into ``words,'' and uses an
+The program relies on @command{awk}'s default field-splitting
+mechanism to break each line up into ``words'' and uses an
associative array named @code{freq}, indexed by each word, to count
the number of times the word occurs. In the @code{END} rule,
it prints the counts.
@@ -24630,7 +24575,6 @@ to remove punctuation characters. Finally, we solve the third problem
by using the system @command{sort} utility to process the output of the
@command{awk} script. Here is the new version of the program:
-@c STARTOFRANGE wordfreq
@cindex @code{wordfreq.awk} program
@example
@c file eg/prog/wordfreq.awk
@@ -24695,16 +24639,13 @@ This way of sorting must be used on systems that do not
have true pipes at the command-line (or batch-file) level.
See the general operating system documentation for more information on how
to use the @command{sort} program.
-@c ENDOFRANGE worus
-@c ENDOFRANGE wordfreq
@node History Sorting
@subsection Removing Duplicates from Unsorted Text
-@c STARTOFRANGE lidu
@cindex lines, duplicate@comma{} removing
The @command{uniq} program
-(@pxref{Uniq Program}),
+(@pxref{Uniq Program})
removes duplicate lines from @emph{sorted} data.
Suppose, however, you need to remove duplicate lines from a @value{DF} but
@@ -24726,7 +24667,6 @@ Each element of @code{lines} is a unique command, and the indices of
The @code{END} rule simply prints out the lines, in order:
@cindex Rakitzis, Byron
-@c STARTOFRANGE histsort
@cindex @code{histsort.awk} program
@example
@c file eg/prog/histsort.awk
@@ -24769,15 +24709,11 @@ print data[lines[i]], lines[i]
@noindent
This works because @code{data[$0]} is incremented each time a line is
seen.
-@c ENDOFRANGE lidu
-@c ENDOFRANGE histsort
@node Extract Program
@subsection Extracting Programs from Texinfo Source Files
-@c STARTOFRANGE texse
@cindex Texinfo, extracting programs from source files
-@c STARTOFRANGE fitex
@cindex files, Texinfo@comma{} extracting programs from
@ifnotinfo
Both this chapter and the previous chapter
@@ -24796,7 +24732,7 @@ Texinfo input file into separate files.
@cindex Texinfo
This @value{DOCUMENT} is written in @uref{http://www.gnu.org/software/texinfo/, Texinfo},
-the GNU project's document formatting language.
+the GNU Project's document formatting language.
A single Texinfo source file can be used to produce both
printed documentation, with @TeX{}, and online documentation.
@ifnotinfo
@@ -24855,7 +24791,7 @@ The Texinfo file looks something like this:
@example
@dots{}
-This program has a @@code@{BEGIN@} rule,
+This program has a @@code@{BEGIN@} rule
that prints a nice message:
@@example
@@ -24881,11 +24817,10 @@ The first rule handles calling @code{system()}, checking that a command is
given (@code{NF} is at least three) and also checking that the command
exits with a zero exit status, signifying OK:
-@c STARTOFRANGE extract
@cindex @code{extract.awk} program
@example
@c file eg/prog/extract.awk
-# extract.awk --- extract files and run programs from texinfo files
+# extract.awk --- extract files and run programs from Texinfo files
@c endfile
@ignore
@c file eg/prog/extract.awk
@@ -24926,12 +24861,12 @@ The second rule handles moving data into files. It verifies that a
@value{FN} is given in the directive. If the file named is not the
current file, then the current file is closed. Keeping the current file
open until a new file is encountered allows the use of the @samp{>}
-redirection for printing the contents, keeping open file management
+redirection for printing the contents, keeping open-file management
simple.
The @code{for} loop does the work. It reads lines using @code{getline}
(@pxref{Getline}).
-For an unexpected end of file, it calls the @code{@w{unexpected_eof()}}
+For an unexpected end-of-file, it calls the @code{@w{unexpected_eof()}}
function. If the line is an ``endfile'' line, then it breaks out of
the loop.
If the line is an @samp{@@group} or @samp{@@end group} line, then it
@@ -25027,16 +24962,13 @@ END @{
@}
@c endfile
@end example
-@c ENDOFRANGE texse
-@c ENDOFRANGE fitex
-@c ENDOFRANGE extract
@node Simple Sed
@subsection A Simple Stream Editor
@cindex @command{sed} utility
@cindex stream editors
-The @command{sed} utility is a stream editor, a program that reads a
+The @command{sed} utility is a @dfn{stream editor}, a program that reads a
stream of data, makes changes to it, and passes it on.
It is often used to make global changes to a large file or to a stream
of data generated by a pipeline of commands.
@@ -25059,7 +24991,6 @@ additional arguments are treated as @value{DF} names to process. If none
are provided, the standard input is used:
@cindex Brennan, Michael
-@c STARTOFRANGE awksed
@cindex @command{awksed.awk} program
@c @cindex simple stream editor
@c @cindex stream editor, simple
@@ -25136,14 +25067,11 @@ The @code{usage()} function prints an error message and exits.
Finally, the single rule handles the printing scheme outlined earlier,
using @code{print} or @code{printf} as appropriate, depending upon the
value of @code{RT}.
-@c ENDOFRANGE awksed
@node Igawk Program
@subsection An Easy Way to Use Library Functions
-@c STARTOFRANGE libfex
@cindex libraries of @command{awk} functions, example program for using
-@c STARTOFRANGE flibex
@cindex functions, library, example program for using
In @ref{Include Files}, we saw how @command{gawk} provides a built-in
file-inclusion capability. However, this is a @command{gawk} extension.
@@ -25185,7 +25113,7 @@ includes don't accidentally include a library function twice.
@command{igawk} should behave just like @command{gawk} externally. This
means it should accept all of @command{gawk}'s command-line arguments,
including the ability to have multiple source files specified via
-@option{-f}, and the ability to mix command-line and library source files.
+@option{-f} and the ability to mix command-line and library source files.
The program is written using the POSIX Shell (@command{sh}) command
language.@footnote{Fully explaining the @command{sh} language is beyond
@@ -25224,7 +25152,7 @@ Run the expanded program with @command{gawk} and any other original command-line
arguments that the user supplied (such as the @value{DF} names).
@end enumerate
-This program uses shell variables extensively: for storing command-line arguments,
+This program uses shell variables extensively: for storing command-line arguments and
the text of the @command{awk} program that will expand the user's program, for the
user's original program, and for the expanded program. Doing so removes some
potential problems that might arise were we to use temporary files instead,
@@ -25282,7 +25210,6 @@ program.
The program is as follows:
-@c STARTOFRANGE igawk
@cindex @code{igawk.sh} program
@example
@c file eg/prog/igawk.sh
@@ -25542,22 +25469,7 @@ Save the results of this processing in the shell variable
The last step is to call @command{gawk} with the expanded program,
along with the original
-options and command-line arguments that the user supplied.
-
-@c this causes more problems than it solves, so leave it out.
-@ignore
-The special file @file{/dev/null} is passed as a @value{DF} to @command{gawk}
-to handle an interesting case. Suppose that the user's program only has
-a @code{BEGIN} rule and there are no @value{DF}s to read.
-The program should exit without reading any @value{DF}s.
-However, suppose that an included library file defines an @code{END}
-rule of its own. In this case, @command{gawk} will hang, reading standard
-input. In order to avoid this, @file{/dev/null} is explicitly added to the
-command line. Reading from @file{/dev/null} always returns an immediate
-end of file indication.
-
-@c Hmm. Add /dev/null if $# is 0? Still messes up ARGV. Sigh.
-@end ignore
+options and command-line arguments that the user supplied:
@example
@c file eg/prog/igawk.sh
@@ -25607,10 +25519,6 @@ features to a program; they can often be layered on top.@footnote{@command{gawk}
does @code{@@include} processing itself in order to support the use
of @command{awk} programs as Web CGI scripts.}
-@c ENDOFRANGE libfex
-@c ENDOFRANGE flibex
-@c ENDOFRANGE awkpex
-@c ENDOFRANGE igawk
@node Anagram Program
@subsection Finding Anagrams from a Dictionary
@@ -25627,19 +25535,18 @@ the same letters
Column 2, Problem C, of Jon Bentley's @cite{Programming Pearls}, Second
Edition, presents an elegant algorithm. The idea is to give words that
are anagrams a common signature, sort all the words together by their
-signature, and then print them. Dr.@: Bentley observes that taking the
-letters in each word and sorting them produces that common signature.
+signatures, and then print them. Dr.@: Bentley observes that taking the
+letters in each word and sorting them produces those common signatures.
The following program uses arrays of arrays to bring together
words with the same signature and array sorting to print the words
in sorted order:
-@c STARTOFRANGE anagram
@cindex @code{anagram.awk} program
@example
@c file eg/prog/anagram.awk
-# anagram.awk --- An implementation of the anagram finding algorithm
-# from Jon Bentley's "Programming Pearls", 2nd edition.
+# anagram.awk --- An implementation of the anagram-finding algorithm
+# from Jon Bentley's "Programming Pearls," 2nd edition.
# Addison Wesley, 2000, ISBN 0-201-65788-0.
# Column 2, Problem C, section 2.8, pp 18-20.
@c endfile
@@ -25687,7 +25594,7 @@ sorts the letters, and then joins them back together:
@example
@c file eg/prog/anagram.awk
-# word2key --- split word apart into letters, sort, joining back together
+# word2key --- split word apart into letters, sort, and join back together
function word2key(word, a, i, n, result)
@{
@@ -25743,7 +25650,6 @@ babery yabber
@dots{}
@end example
-@c ENDOFRANGE anagram
@node Signature Program
@subsection And Now for Something Completely Different
@@ -25883,12 +25789,13 @@ characters. The ability to use @code{split()} with the empty string as
the separator can considerably simplify such tasks.
@item
-The library functions from @ref{Library Functions}, proved their
-usefulness for a number of real (if small) programs.
+The examples here demonstrate the usefulness of the library
+functions from @DBREF{Library Functions}
+for a number of real (if small) programs.
@item
Besides reinventing POSIX wheels, other programs solved a selection of
-interesting problems, such as finding duplicates words in text, printing
+interesting problems, such as finding duplicate words in text, printing
mailing labels, and finding anagrams.
@end itemize
@@ -26063,9 +25970,7 @@ It contains the following chapters:
@node Advanced Features
@chapter Advanced Features of @command{gawk}
-@c STARTOFRANGE gawadv
@cindex @command{gawk}, features, advanced
-@c STARTOFRANGE advgaw
@cindex advanced features, @command{gawk}
@ignore
Contributed by: Peter Langston <pud!psl@bellcore.bellcore.com>
@@ -26086,18 +25991,18 @@ a violent psychopath who knows where you live.}
This @value{CHAPTER} discusses advanced features in @command{gawk}.
It's a bit of a ``grab bag'' of items that are otherwise unrelated
to each other.
-First, a command-line option allows @command{gawk} to recognize
+First, we look at a command-line option that allows @command{gawk} to recognize
nondecimal numbers in input data, not just in @command{awk}
programs.
Then, @command{gawk}'s special features for sorting arrays are presented.
Next, two-way I/O, discussed briefly in earlier parts of this
@value{DOCUMENT}, is described in full detail, along with the basics
-of TCP/IP networking. Finally, @command{gawk}
+of TCP/IP networking. Finally, we see how @command{gawk}
can @dfn{profile} an @command{awk} program, making it possible to tune
it for performance.
@c FULLXREF ON
-A number of advanced features require separate @value{CHAPTER}s of their
+Additional advanced features are discussed in separate @value{CHAPTER}s of their
own:
@itemize @value{BULLET}
@@ -26191,7 +26096,8 @@ This option may disappear in a future version of @command{gawk}.
@node Array Sorting
@section Controlling Array Traversal and Array Sorting
-@command{gawk} lets you control the order in which a @samp{for (i in array)}
+@command{gawk} lets you control the order in which a
+@samp{for (@var{indx} in @var{array})}
loop traverses an array.
In addition, two built-in functions, @code{asort()} and @code{asorti()},
@@ -26207,7 +26113,7 @@ to order the elements during sorting.
@node Controlling Array Traversal
@subsection Controlling Array Traversal
-By default, the order in which a @samp{for (i in array)} loop
+By default, the order in which a @samp{for (@var{indx} in @var{array})} loop
scans an array is not defined; it is generally based upon
the internal implementation of arrays inside @command{awk}.
@@ -26236,23 +26142,23 @@ function comp_func(i1, v1, i2, v2)
@}
@end example
-Here, @var{i1} and @var{i2} are the indices, and @var{v1} and @var{v2}
+Here, @code{i1} and @code{i2} are the indices, and @code{v1} and @code{v2}
are the corresponding values of the two elements being compared.
-Either @var{v1} or @var{v2}, or both, can be arrays if the array being
+Either @code{v1} or @code{v2}, or both, can be arrays if the array being
traversed contains subarrays as values.
(@DBXREF{Arrays of Arrays} for more information about subarrays.)
The three possible return values are interpreted as follows:
@table @code
@item comp_func(i1, v1, i2, v2) < 0
-Index @var{i1} comes before index @var{i2} during loop traversal.
+Index @code{i1} comes before index @code{i2} during loop traversal.
@item comp_func(i1, v1, i2, v2) == 0
-Indices @var{i1} and @var{i2}
-come together but the relative order with respect to each other is undefined.
+Indices @code{i1} and @code{i2}
+come together, but the relative order with respect to each other is undefined.
@item comp_func(i1, v1, i2, v2) > 0
-Index @var{i1} comes after index @var{i2} during loop traversal.
+Index @code{i1} comes after index @code{i2} during loop traversal.
@end table
Our first comparison function can be used to scan an array in
@@ -26413,7 +26319,7 @@ As already mentioned, the order of the indices is arbitrary if two
elements compare equal. This is usually not a problem, but letting
the tied elements come out in arbitrary order can be an issue, especially
when comparing item values. The partial ordering of the equal elements
-may change the next time the array is traversed, if other elements are added or
+may change the next time the array is traversed, if other elements are added to or
removed from the array. One way to resolve ties when comparing elements
with otherwise equal values is to include the indices in the comparison
rules. Note that doing this may make the loop traversal less efficient,
@@ -26456,7 +26362,7 @@ equivalent or distinct.
Another point to keep in mind is that in the case of subarrays,
the element values can themselves be arrays; a production comparison
function should use the @code{isarray()} function
-(@pxref{Type Functions}),
+(@pxref{Type Functions})
to check for this, and choose a defined sorting order for subarrays.
All sorting based on @code{PROCINFO["sorted_in"]}
@@ -26464,7 +26370,7 @@ is disabled in POSIX mode,
because the @code{PROCINFO} array is not special in that case.
As a side note, sorting the array indices before traversing
-the array has been reported to add 15% to 20% overhead to the
+the array has been reported to add a 15% to 20% overhead to the
execution time of @command{awk} programs. For this reason,
sorted array traversal is not the default.
@@ -26523,7 +26429,7 @@ However, the @code{source} array is not affected.
Often, what's needed is to sort on the values of the @emph{indices}
instead of the values of the elements. To do that, use the
@code{asorti()} function. The interface and behavior are identical to
-that of @code{asort()}, except that the index values are used for sorting,
+that of @code{asort()}, except that the index values are used for sorting
and become the values of the result array:
@example
@@ -26558,8 +26464,8 @@ it chooses}, taking into account just the indices, just the values,
or both. This is extremely powerful.
Once the array is sorted, @code{asort()} takes the @emph{values} in
-their final order, and uses them to fill in the result array, whereas
-@code{asorti()} takes the @emph{indices} in their final order, and uses
+their final order and uses them to fill in the result array, whereas
+@code{asorti()} takes the @emph{indices} in their final order and uses
them to fill in the result array.
@cindex reference counting, sorting arrays
@@ -26775,7 +26681,6 @@ using regular pipes.
@section Using @command{gawk} for Network Programming
@cindex advanced features, network programming
@cindex networks, programming
-@c STARTOFRANGE tcpip
@cindex TCP/IP
@cindex @code{/inet/@dots{}} special files (@command{gawk})
@cindex files, @code{/inet/@dots{}} (@command{gawk})
@@ -26857,7 +26762,7 @@ service name.
@cindex @command{gawk}, @code{ERRNO} variable in
@cindex @code{ERRNO} variable
@quotation NOTE
-Failure in opening a two-way socket will result in a non-fatal error
+Failure in opening a two-way socket will result in a nonfatal error
being returned to the calling code. The value of @code{ERRNO} indicates
the error (@pxref{Auto-set}).
@end quotation
@@ -26874,31 +26779,28 @@ BEGIN @{
@end example
This program reads the current date and time from the local system's
-TCP @samp{daytime} server.
+TCP @code{daytime} server.
It then prints the results and closes the connection.
Because this topic is extensive, the use of @command{gawk} for
TCP/IP programming is documented separately.
@ifinfo
See
-@inforef{Top, , General Introduction, gawkinet, TCP/IP Internetworking with @command{gawk}},
+@inforef{Top, , General Introduction, gawkinet, @value{GAWKINETTITLE}},
@end ifinfo
@ifnotinfo
See
@uref{http://www.gnu.org/software/gawk/manual/gawkinet/,
-@cite{TCP/IP Internetworking with @command{gawk}}},
+@cite{@value{GAWKINETTITLE}}},
which comes as part of the @command{gawk} distribution,
@end ifnotinfo
for a much more complete introduction and discussion, as well as
extensive examples.
-@c ENDOFRANGE tcpip
@node Profiling
@section Profiling Your @command{awk} Programs
-@c STARTOFRANGE awkp
@cindex @command{awk} programs, profiling
-@c STARTOFRANGE proawk
@cindex profiling @command{awk} programs
@cindex @code{awkprof.out} file
@cindex files, @code{awkprof.out}
@@ -26965,9 +26867,9 @@ junk
@end example
Here is the @file{awkprof.out} that results from running the
-@command{gawk} profiler on this program and data. (This example also
+@command{gawk} profiler on this program and data (this example also
illustrates that @command{awk} programmers sometimes get up very early
-in the morning to work.)
+in the morning to work):
@cindex @code{BEGIN} pattern, and profiling
@cindex @code{END} pattern, and profiling
@@ -27027,8 +26929,8 @@ They are as follows:
@item
The program is printed in the order @code{BEGIN} rules,
@code{BEGINFILE} rules,
-pattern/action rules,
-@code{ENDFILE} rules, @code{END} rules and functions, listed
+pattern--action rules,
+@code{ENDFILE} rules, @code{END} rules, and functions, listed
alphabetically.
Multiple @code{BEGIN} and @code{END} rules retain their
separate identities, as do
@@ -27036,7 +26938,7 @@ multiple @code{BEGINFILE} and @code{ENDFILE} rules.
@cindex patterns, counts, in a profile
@item
-Pattern-action rules have two counts.
+Pattern--action rules have two counts.
The first count, to the left of the rule, shows how many times
the rule's pattern was @emph{tested}.
The second count, to the right of the rule's opening left brace
@@ -27103,13 +27005,13 @@ the target of a redirection isn't a scalar, it gets parenthesized.
@command{gawk} supplies leading comments in
front of the @code{BEGIN} and @code{END} rules,
the @code{BEGINFILE} and @code{ENDFILE} rules,
-the pattern/action rules, and the functions.
+the pattern--action rules, and the functions.
@end itemize
The profiled version of your program may not look exactly like what you
typed when you wrote it. This is because @command{gawk} creates the
-profiled version by ``pretty printing'' its internal representation of
+profiled version by ``pretty-printing'' its internal representation of
the program. The advantage to this is that @command{gawk} can produce
a standard representation.
Also, things such as:
@@ -27192,16 +27094,16 @@ If you use the @code{HUP} signal instead of the @code{USR1} signal,
@cindex @code{SIGQUIT} signal (MS-Windows)
@cindex signals, @code{QUIT}/@code{SIGQUIT} (MS-Windows)
When @command{gawk} runs on MS-Windows systems, it uses the
-@code{INT} and @code{QUIT} signals for producing the profile and, in
+@code{INT} and @code{QUIT} signals for producing the profile, and in
the case of the @code{INT} signal, @command{gawk} exits. This is
because these systems don't support the @command{kill} command, so the
only signals you can deliver to a program are those generated by the
keyboard. The @code{INT} signal is generated by the
-@kbd{Ctrl-@key{C}} or @kbd{Ctrl-@key{BREAK}} key, while the
-@code{QUIT} signal is generated by the @kbd{Ctrl-@key{\}} key.
+@kbd{Ctrl-c} or @kbd{Ctrl-BREAK} key, while the
+@code{QUIT} signal is generated by the @kbd{Ctrl-\} key.
Finally, @command{gawk} also accepts another option, @option{--pretty-print}.
-When called this way, @command{gawk} ``pretty prints'' the program into
+When called this way, @command{gawk} ``pretty-prints'' the program into
@file{awkprof.out}, without any execution counts.
@quotation NOTE
@@ -27225,9 +27127,6 @@ that the profiling output does. This makes it easy to pretty-print your
code once development is completed, and then use the result as the final
version of your program.
-@c ENDOFRANGE awkp
-@c ENDOFRANGE proawk
-
@node Advanced Features Summary
@section Summary
@@ -27258,7 +27157,7 @@ optionally, close off one side of the two-way communications.
@item
By using special @value{FN}s with the @samp{|&} operator, you can open a
-TCP/IP (or UDP/IP) connection to remote hosts in the Internet. @command{gawk}
+TCP/IP (or UDP/IP) connection to remote hosts on the Internet. @command{gawk}
supports both IPv4 and IPv6.
@item
@@ -27268,13 +27167,11 @@ you tune them more easily. Sending the @code{USR1} signal while profiling cause
@command{gawk} to dump the profile and keep going, including a function call stack.
@item
-You can also just ``pretty print'' the program. This currently also runs
+You can also just ``pretty-print'' the program. This currently also runs
the program, but that will change in the next major release.
@end itemize
-@c ENDOFRANGE advgaw
-@c ENDOFRANGE gawadv
@node Internationalization
@chapter Internationalization with @command{gawk}
@@ -27287,7 +27184,6 @@ countries, they were able to sell more systems.
As a result, internationalization and localization
of programs and software systems became a common practice.
-@c STARTOFRANGE inloc
@cindex internationalization, localization
@cindex @command{gawk}, internationalization and, See internationalization
@cindex internationalization, localization, @command{gawk} and
@@ -27320,7 +27216,7 @@ a requirement.
@cindex localization
@dfn{Internationalization} means writing (or modifying) a program once,
in such a way that it can use multiple languages without requiring
-further source-code changes.
+further source code changes.
@dfn{Localization} means providing the data necessary for an
internationalized program to work in a particular language.
Most typically, these terms refer to features such as the language
@@ -27332,11 +27228,10 @@ monetary values are printed and read.
@section GNU @command{gettext}
@cindex internationalizing a program
-@c STARTOFRANGE gettex
@cindex @command{gettext} library
@command{gawk} uses GNU @command{gettext} to provide its internationalization
features.
-The facilities in GNU @command{gettext} focus on messages; strings printed
+The facilities in GNU @command{gettext} focus on messages: strings printed
by a program, either directly or via formatting with @code{printf} or
@code{sprintf()}.@footnote{For some operating systems, the @command{gawk}
port doesn't support GNU @command{gettext}.
@@ -27384,7 +27279,6 @@ lookup of the translations.
@cindex @code{.po} files
@cindex files, @code{.po}
-@c STARTOFRANGE portobfi
@cindex portable object files
@cindex files, portable object
@item
@@ -27396,7 +27290,6 @@ For example, there might be a @file{fr.po} for a French translation.
@cindex @code{.gmo} files
@cindex files, @code{.gmo}
@cindex message object files
-@c STARTOFRANGE portmsgfi
@cindex files, message object
@item
Each language's @file{.po} file is converted into a binary
@@ -27524,14 +27417,12 @@ before or after the day in a date, local month abbreviations, and so on.
@item LC_ALL
All of the above. (Not too useful in the context of @command{gettext}.)
@end table
-@c ENDOFRANGE gettex
@node Programmer i18n
@section Internationalizing @command{awk} Programs
-@c STARTOFRANGE inap
@cindex @command{awk} programs, internationalizing
-@command{gawk} provides the following variables and functions for
+@command{gawk} provides the following variables for
internationalization:
@table @code
@@ -27547,7 +27438,12 @@ value is @code{"messages"}.
String constants marked with a leading underscore
are candidates for translation at runtime.
String constants without a leading underscore are not translated.
+@end table
+@command{gawk} provides the following functions for
+internationalization:
+
+@table @code
@cindexgawkfunc{dcgettext}
@item @code{dcgettext(@var{string}} [@code{,} @var{domain} [@code{,} @var{category}]]@code{)}
Return the translation of @var{string} in
@@ -27604,15 +27500,7 @@ If @var{directory} is the null string (@code{""}), then
given @var{domain}.
@end table
-To use these facilities in your @command{awk} program, follow the steps
-outlined in
-@ifnotinfo
-the previous @value{SECTION},
-@end ifnotinfo
-@ifinfo
-@ref{Explaining gettext},
-@end ifinfo
-like so:
+To use these facilities in your @command{awk} program, follow these steps:
@enumerate
@cindex @code{BEGIN} pattern, @code{TEXTDOMAIN} variable and
@@ -27761,8 +27649,6 @@ to provide you translations that you can also then distribute.
@DBXREF{I18N Example}
for the full list of steps to go through to create and test
translations for @command{guide}.
-@c ENDOFRANGE portobfi
-@c ENDOFRANGE portmsgfi
@node Printf Ordering
@subsection Rearranging @code{printf} Arguments
@@ -27897,7 +27783,7 @@ the null string (@code{""}) as its value, leaving the original string constant a
the result.
@item
-By defining ``dummy'' functions to replace @code{dcgettext()}, @code{dcngettext()}
+By defining ``dummy'' functions to replace @code{dcgettext()}, @code{dcngettext()},
and @code{bindtextdomain()}, the @command{awk} program can be made to run, but
all the messages are output in the original language.
For example:
@@ -27938,7 +27824,6 @@ However, because the positional specifications are primarily for use in
@emph{translated} format strings, and because non-GNU @command{awk}s never
retrieve the translated string, this should not be a problem in practice.
@end itemize
-@c ENDOFRANGE inap
@node I18N Example
@section A Simple Internationalization Example
@@ -28082,15 +27967,15 @@ using the GNU @command{gettext} package.
(GNU @command{gettext} is described in
complete detail in
@ifinfo
-@inforef{Top, , GNU @command{gettext} utilities, gettext, GNU gettext tools}.)
+@inforef{Top, , GNU @command{gettext} utilities, gettext, GNU @command{gettext} utilities}.)
@end ifinfo
@ifnotinfo
@uref{http://www.gnu.org/software/gettext/manual/,
-@cite{GNU gettext tools}}.)
+@cite{GNU @command{gettext} utilities}}.)
@end ifnotinfo
As of this writing, the latest version of GNU @command{gettext} is
-@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.3.tar.gz,
-@value{PVERSION} 0.19.3}.
+@uref{ftp://ftp.gnu.org/gnu/gettext/gettext-0.19.4.tar.gz,
+@value{PVERSION} 0.19.4}.
If a translation of @command{gawk}'s messages exists,
then @command{gawk} produces usage messages, warnings,
@@ -28102,7 +27987,7 @@ and fatal errors in the local language.
@itemize @value{BULLET}
@item
Internationalization means writing a program such that it can use multiple
-languages without requiring source-code changes. Localization means
+languages without requiring source code changes. Localization means
providing the data necessary for an internationalized program to work
in a particular language.
@@ -28119,9 +28004,9 @@ file, and the @file{.po} files are compiled into @file{.gmo} files for
use at runtime.
@item
-You can use position specifications with @code{sprintf()} and
+You can use positional specifications with @code{sprintf()} and
@code{printf} to rearrange the placement of argument values in formatted
-strings and output. This is useful for the translations of format
+strings and output. This is useful for the translation of format
control strings.
@item
@@ -28134,7 +28019,6 @@ a number of translations for its messages.
@end itemize
-@c ENDOFRANGE inloc
@node Debugger
@chapter Debugging @command{awk} Programs
@@ -28178,8 +28062,7 @@ the discussion of debugging in @command{gawk}.
@subsection Debugging in General
(If you have used debuggers in other languages, you may want to skip
-ahead to the next section on the specific features of the @command{gawk}
-debugger.)
+ahead to @ref{Awk Debugging}.)
Of course, a debugging program cannot remove bugs for you, because it has
no way of knowing what you or your users consider a ``bug'' versus a
@@ -28270,10 +28153,10 @@ and usually find the errant code quite quickly.
@end table
@node Awk Debugging
-@subsection Awk Debugging
+@subsection @command{awk} Debugging
Debugging an @command{awk} program has some specific aspects that are
-not shared with other programming languages.
+not shared with programs written in other languages.
First of all, the fact that @command{awk} programs usually take input
line by line from a file or files and operate on those lines using specific
@@ -28289,7 +28172,7 @@ to look at the individual primitive instructions carried out
by the higher-level @command{awk} commands.
@node Sample Debugging Session
-@section Sample Debugging Session
+@section Sample @command{gawk} Debugging Session
@cindex sample debugging session
In order to illustrate the use of @command{gawk} as a debugger, let's look at a sample
@@ -28308,8 +28191,8 @@ as our example.
@cindex debugger, how to start
Starting the debugger is almost exactly like running @command{gawk} normally,
-except you have to pass an additional option @option{--debug}, or the
-corresponding short option @option{-D}. The file(s) containing the
+except you have to pass an additional option, @option{--debug}, or the
+corresponding short option, @option{-D}. The file(s) containing the
program and any supporting code are given on the command line as arguments
to one or more @option{-f} options. (@command{gawk} is not designed
to debug command-line programs, only programs contained in files.)
@@ -28322,7 +28205,7 @@ $ @kbd{gawk -D -f getopt.awk -f join.awk -f uniq.awk -1 inputfile}
@noindent
where both @file{getopt.awk} and @file{uniq.awk} are in @env{$AWKPATH}.
(Experienced users of GDB or similar debuggers should note that
-this syntax is slightly different from what they are used to.
+this syntax is slightly different from what you are used to.
With the @command{gawk} debugger, you give the arguments for running the program
in the command line to the debugger rather than as part of the @code{run}
command at the debugger prompt.)
@@ -28476,10 +28359,10 @@ gawk> @kbd{n}
@end example
This tells us that @command{gawk} is now ready to execute line 66, which
-decides whether to give the lines the special ``field skipping'' treatment
+decides whether to give the lines the special ``field-skipping'' treatment
indicated by the @option{-1} command-line option. (Notice that we skipped
-from where we were before at line 63 to here, because the condition in line 63
-@samp{if (fcount == 0 && charcount == 0)} was false.)
+from where we were before, at line 63, to here, because the condition
+in line 63, @samp{if (fcount == 0 && charcount == 0)}, was false.)
Continuing to step, we now get to the splitting of the current and
last records:
@@ -28553,7 +28436,7 @@ gawk> @kbd{n}
Well, here we are at our error (sorry to spoil the suspense). What we
had in mind was to join the fields starting from the second one to make
-the virtual record to compare, and if the first field was numbered zero,
+the virtual record to compare, and if the first field were numbered zero,
this would work. Let's look at what we've got:
@example
@@ -28562,7 +28445,7 @@ gawk> @kbd{p cline clast}
@print{} clast = "awk is a wonderful program!"
@end example
-Hey, those look pretty familiar! They're just our original, unaltered,
+Hey, those look pretty familiar! They're just our original, unaltered
input records. A little thinking (the human brain is still the best
debugging tool), and we realize that we were off by one!
@@ -28612,11 +28495,11 @@ Miscellaneous
@end itemize
Each of these are discussed in the following subsections.
-In the following descriptions, commands which may be abbreviated
+In the following descriptions, commands that may be abbreviated
show the abbreviation on a second description line.
A debugger command name may also be truncated if that partial
name is unambiguous. The debugger has the built-in capability to
-automatically repeat the previous command just by hitting @key{Enter}.
+automatically repeat the previous command just by hitting @kbd{Enter}.
This works for the commands @code{list}, @code{next}, @code{nexti},
@code{step}, @code{stepi}, and @code{continue} executed without any
argument.
@@ -28666,7 +28549,7 @@ Set a breakpoint at entry to (the first instruction of)
function @var{function}.
@end table
-Each breakpoint is assigned a number which can be used to delete it from
+Each breakpoint is assigned a number that can be used to delete it from
the breakpoint list using the @code{delete} command.
With a breakpoint, you may also supply a condition. This is an
@@ -28718,7 +28601,7 @@ watchpoint is made unconditional).
@cindex breakpoint, delete by number
@item @code{delete} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
@itemx @code{d} [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
-Delete specified breakpoints or a range of breakpoints. Deletes
+Delete specified breakpoints or a range of breakpoints. Delete
all defined breakpoints if no argument is supplied.
@cindex debugger commands, @code{disable}
@@ -28727,7 +28610,7 @@ all defined breakpoints if no argument is supplied.
@cindex breakpoint, how to disable or enable
@item @code{disable} [@var{n1 n2} @dots{} | @var{n}--@var{m}]
Disable specified breakpoints or a range of breakpoints. Without
-any argument, disables all breakpoints.
+any argument, disable all breakpoints.
@cindex debugger commands, @code{e} (@code{enable})
@cindex debugger commands, @code{enable}
@@ -28737,18 +28620,18 @@ any argument, disables all breakpoints.
@item @code{enable} [@code{del} | @code{once}] [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
@itemx @code{e} [@code{del} | @code{once}] [@var{n1 n2} @dots{}] [@var{n}--@var{m}]
Enable specified breakpoints or a range of breakpoints. Without
-any argument, enables all breakpoints.
-Optionally, you can specify how to enable the breakpoint:
+any argument, enable all breakpoints.
+Optionally, you can specify how to enable the breakpoints:
@c nested table
@table @code
@item del
-Enable the breakpoint(s) temporarily, then delete it when
-the program stops at the breakpoint.
+Enable the breakpoints temporarily, then delete each one when
+the program stops at it.
@item once
-Enable the breakpoint(s) temporarily, then disable it when
-the program stops at the breakpoint.
+Enable the breakpoints temporarily, then disable each one when
+the program stops at it.
@end table
@cindex debugger commands, @code{ignore}
@@ -28816,7 +28699,7 @@ gawk>
@item @code{continue} [@var{count}]
@itemx @code{c} [@var{count}]
Resume program execution. If continued from a breakpoint and @var{count} is
-specified, ignores the breakpoint at that location the next @var{count} times
+specified, ignore the breakpoint at that location the next @var{count} times
before stopping.
@cindex debugger commands, @code{finish}
@@ -28870,7 +28753,7 @@ automatic display variables, and debugger options.
@item @code{step} [@var{count}]
@itemx @code{s} [@var{count}]
Continue execution until control reaches a different source line in the
-current stack frame. @code{step} steps inside any function called within
+current stack frame, stepping inside any function called within
the line. If the argument @var{count} is supplied, steps that many times before
stopping, unless it encounters a breakpoint or watchpoint.
@@ -28983,7 +28866,7 @@ or field.
String values must be enclosed between double quotes (@code{"}@dots{}@code{"}).
You can also set special @command{awk} variables, such as @code{FS},
-@code{NF}, @code{NR}, and son on.
+@code{NF}, @code{NR}, and so on.
@cindex debugger commands, @code{w} (@code{watch})
@cindex debugger commands, @code{watch}
@@ -28995,7 +28878,7 @@ You can also set special @command{awk} variables, such as @code{FS},
Add variable @var{var} (or field @code{$@var{n}}) to the watch list.
The debugger then stops whenever
the value of the variable or field changes. Each watched item is assigned a
-number which can be used to delete it from the watch list using the
+number that can be used to delete it from the watch list using the
@code{unwatch} command.
With a watchpoint, you may also supply a condition. This is an
@@ -29023,11 +28906,11 @@ watch list.
@node Execution Stack
@subsection Working with the Stack
-Whenever you run a program which contains any function calls,
+Whenever you run a program that contains any function calls,
@command{gawk} maintains a stack of all of the function calls leading up
to where the program is right now. You can see how you got to where you are,
and also move around in the stack to see what the state of things was in the
-functions which called the one you are in. The commands for doing this are:
+functions that called the one you are in. The commands for doing this are:
@table @asis
@cindex debugger commands, @code{bt} (@code{backtrace})
@@ -29062,8 +28945,8 @@ Then select and print the frame.
@item @code{frame} [@var{n}]
@itemx @code{f} [@var{n}]
Select and print stack frame @var{n}. Frame 0 is the currently executing,
-or @dfn{innermost}, frame (function call), frame 1 is the frame that
-called the innermost one. The highest numbered frame is the one for the
+or @dfn{innermost}, frame (function call); frame 1 is the frame that
+called the innermost one. The highest-numbered frame is the one for the
main program. The printed information consists of the frame number,
function and argument names, source file, and the source line.
@@ -29079,7 +28962,7 @@ Then select and print the frame.
Besides looking at the values of variables, there is often a need to get
other sorts of information about the state of your program and of the
-debugging environment itself. The @command{gawk} debugger has one command which
+debugging environment itself. The @command{gawk} debugger has one command that
provides this information, appropriately called @code{info}. @code{info}
is used with one of a number of arguments that tell it exactly what
you want to know:
@@ -29167,12 +29050,12 @@ The available options are:
@table @asis
@item @code{history_size}
@cindex debugger history size
-The maximum number of lines to keep in the history file @file{./.gawk_history}.
-The default is 100.
+Set the maximum number of lines to keep in the history file
+@file{./.gawk_history}. The default is 100.
@item @code{listsize}
@cindex debugger default list amount
-The number of lines that @code{list} prints. The default is 15.
+Specify the number of lines that @code{list} prints. The default is 15.
@item @code{outfile}
@cindex redirect @command{gawk} output, in debugger
@@ -29182,7 +29065,7 @@ standard output.
@item @code{prompt}
@cindex debugger prompt
-The debugger prompt. The default is @samp{@w{gawk> }}.
+Change the debugger prompt. The default is @samp{@w{gawk> }}.
@item @code{save_history} [@code{on} | @code{off}]
@cindex debugger history file
@@ -29193,7 +29076,7 @@ The default is @code{on}.
@cindex save debugger options
Save current options to file @file{./.gawkrc} upon exit.
The default is @code{on}.
-Options are read back in to the next session upon startup.
+Options are read back into the next session upon startup.
@item @code{trace} [@code{on} | @code{off}]
@cindex instruction tracing, in debugger
@@ -29216,7 +29099,7 @@ command in the file. Also, the list of commands may include additional
@code{source} commands; however, the @command{gawk} debugger will not source the
same file more than once in order to avoid infinite recursion.
-In addition to, or instead of the @code{source} command, you can use
+In addition to, or instead of, the @code{source} command, you can use
the @option{-D @var{file}} or @option{--debug=@var{file}} command-line
options to execute commands from a file non-interactively
(@pxref{Options}).
@@ -29225,16 +29108,16 @@ options to execute commands from a file non-interactively
@node Miscellaneous Debugger Commands
@subsection Miscellaneous Commands
-There are a few more commands which do not fit into the
+There are a few more commands that do not fit into the
previous categories, as follows:
@table @asis
@cindex debugger commands, @code{dump}
@cindex @code{dump} debugger command
@item @code{dump} [@var{filename}]
-Dump bytecode of the program to standard output or to the file
+Dump byte code of the program to standard output or to the file
named in @var{filename}. This prints a representation of the internal
-instructions which @command{gawk} executes to implement the @command{awk}
+instructions that @command{gawk} executes to implement the @command{awk}
commands in a program. This can be very enlightening, as the following
partial dump of Davide Brini's obfuscated code
(@pxref{Signature Program}) demonstrates:
@@ -29331,7 +29214,7 @@ Print lines centered around line number @var{n} in
source file @var{filename}. This command may change the current source file.
@item @var{function}
-Print lines centered around beginning of the
+Print lines centered around the beginning of the
function @var{function}. This command may change the current source file.
@end table
@@ -29343,16 +29226,16 @@ function @var{function}. This command may change the current source file.
@item @code{quit}
@itemx @code{q}
Exit the debugger. Debugging is great fun, but sometimes we all have
-to tend to other obligations in life, and sometimes we find the bug,
+to tend to other obligations in life, and sometimes we find the bug
and are free to go on to the next one! As we saw earlier, if you are
-running a program, the debugger warns you if you accidentally type
+running a program, the debugger warns you when you type
@samp{q} or @samp{quit}, to make sure you really want to quit.
@cindex debugger commands, @code{trace}
@cindex @code{trace} debugger command
@item @code{trace} [@code{on} | @code{off}]
-Turn on or off a continuous printing of instructions which are about to
-be executed, along with printing the @command{awk} line which they
+Turn on or off continuous printing of the instructions that are about to
+be executed, along with the @command{awk} lines they
implement. The default is @code{off}.
It is to be hoped that most of the ``opcodes'' in these instructions are
@@ -29368,7 +29251,7 @@ fairly self-explanatory, and using @code{stepi} and @code{nexti} while
If @command{gawk} is compiled with
@uref{http://cnswww.cns.cwru.edu/php/chet/readline/readline.html,
-the @code{readline} library}, you can take advantage of that library's
+the GNU Readline library}, you can take advantage of that library's
command completion and history expansion features. The following types
of completion are available:
@@ -29405,7 +29288,7 @@ and
We hope you find the @command{gawk} debugger useful and enjoyable to work with,
but as with any program, especially in its early releases, it still has
-some limitations. A few which are worth being aware of are:
+some limitations. A few that it's worth being aware of are:
@itemize @value{BULLET}
@item
@@ -29421,13 +29304,13 @@ If you perused the dump of opcodes in @ref{Miscellaneous Debugger Commands}
(or if you are already familiar with @command{gawk} internals),
you will realize that much of the internal manipulation of data
in @command{gawk}, as in many interpreters, is done on a stack.
-@code{Op_push}, @code{Op_pop}, and the like, are the ``bread and butter'' of
+@code{Op_push}, @code{Op_pop}, and the like are the ``bread and butter'' of
most @command{gawk} code.
Unfortunately, as of now, the @command{gawk}
debugger does not allow you to examine the stack's contents.
That is, the intermediate results of expression evaluation are on the
-stack, but cannot be printed. Rather, only variables which are defined
+stack, but cannot be printed. Rather, only variables that are defined
in the program can be printed. Of course, a workaround for
this is to use more explicit variables at the debugging stage and then
change back to obscure, perhaps more optimal code later.
@@ -29441,12 +29324,12 @@ programmer, you are expected to know the meaning of
@item
The @command{gawk} debugger is designed to be used by running a program (with all its
parameters) on the command line, as described in @ref{Debugger Invocation}.
-There is no way (as of now) to attach or ``break in'' to a running program.
-This seems reasonable for a language which is used mainly for quickly
+There is no way (as of now) to attach or ``break into'' a running program.
+This seems reasonable for a language that is used mainly for quickly
executing, short programs.
@item
-The @command{gawk} debugger only accepts source supplied with the @option{-f} option.
+The @command{gawk} debugger only accepts source code supplied with the @option{-f} option.
@end itemize
@ignore
@@ -29460,8 +29343,8 @@ be added, and of course feel free to try to add them yourself!
@itemize @value{BULLET}
@item
Programs rarely work correctly the first time. Finding bugs
-is @dfn{debugging} and a program that helps you find bugs is a
-@dfn{debugger}. @command{gawk} has a built-in debugger that works very
+is called debugging, and a program that helps you find bugs is a
+debugger. @command{gawk} has a built-in debugger that works very
similarly to the GNU Debugger, GDB.
@item
@@ -29481,7 +29364,7 @@ breakpoints, execution, viewing and changing data, working with the stack,
getting information, and other tasks.
@item
-If the @code{readline} library is available when @command{gawk} is
+If the GNU Readline library is available when @command{gawk} is
compiled, it is used by the debugger to provide command-line history
and editing.
@@ -29545,7 +29428,7 @@ paper and pencil (and/or a calculator). In theory, numbers can have an
arbitrary number of digits on either side (or both sides) of the decimal
point, and the results of a computation are always exact.
-Some modern system can do decimal arithmetic in hardware, but usually you
+Some modern systems can do decimal arithmetic in hardware, but usually you
need a special software library to provide access to these instructions.
There are also libraries that do decimal arithmetic entirely in software.
@@ -29563,8 +29446,8 @@ The disadvantage is that their range is limited.
@cindex integers, unsigned
In computers, integer values come in two flavors: @dfn{signed} and
@dfn{unsigned}. Signed values may be negative or positive, whereas
-unsigned values are always positive (i.e., greater than or equal
-to zero).
+unsigned values are always greater than or equal
+to zero.
In computer systems, integer arithmetic is exact, but the possible
range of values is limited. Integer arithmetic is generally faster than
@@ -29601,8 +29484,35 @@ signed. The possible ranges of values are shown in @ref{table-numeric-ranges}.
@item 32-bit unsigned integer @tab 0 @tab 4,294,967,295
@item 64-bit signed integer @tab @minus{}9,223,372,036,854,775,808 @tab 9,223,372,036,854,775,807
@item 64-bit unsigned integer @tab 0 @tab 18,446,744,073,709,551,615
-@item Single-precision floating point (approximate) @tab @code{1.175494e-38} @tab @code{3.402823e+38}
-@item Double-precision floating point (approximate) @tab @code{2.225074e-308} @tab @code{1.797693e+308}
+@iftex
+@item Single-precision floating point (approximate) @tab @math{1.175494^{-38}} @tab @math{3.402823^{38}}
+@item Double-precision floating point (approximate) @tab @math{2.225074^{-308}} @tab @math{1.797693^{308}}
+@end iftex
+@ifnottex
+@ifnotdocbook
+@item Single-precision floating point (approximate) @tab 1.175494e-38 @tab 3.402823e38
+@item Double-precision floating point (approximate) @tab 2.225074e-308 @tab 1.797693e308
+@end ifnotdocbook
+@end ifnottex
+@ifdocbook
+@item Single-precision floating point (approximate) @tab
+@c FIXME: Use @sup here for superscript
+@docbook
+1.175494<superscript>-38</superscript>
+@end docbook
+@tab
+@docbook
+3.402823<superscript>38</superscript>
+@end docbook
+@item Double-precision floating point (approximate) @tab
+@docbook
+2.225074<superscript>-308</superscript>
+@end docbook
+@tab
+@docbook
+1.797693<superscript>308</superscript>
+@end docbook
+@end ifdocbook
@end multitable
@end float
@@ -29611,7 +29521,7 @@ signed. The possible ranges of values are shown in @ref{table-numeric-ranges}.
The rest of this @value{CHAPTER} uses a number of terms. Here are some
informal definitions that should help you work your way through the material
-here.
+here:
@table @dfn
@item Accuracy
@@ -29632,7 +29542,7 @@ A special value representing infinity. Operations involving another
number and infinity produce infinity.
@item NaN
-``Not A Number.''@footnote{Thanks to Michael Brennan for this description,
+``Not a number.''@footnote{Thanks to Michael Brennan for this description,
which we have paraphrased, and for the examples.} A special value that
results from attempting a calculation that has no answer as a real number.
In such a case, programs can either receive a floating-point exception,
@@ -29675,8 +29585,8 @@ formula:
@end display
@noindent
-Here, @var{prec} denotes the binary precision
-(measured in bits) and @var{dps} (short for decimal places)
+Here, @emph{prec} denotes the binary precision
+(measured in bits) and @emph{dps} (short for decimal places)
is the decimal digits.
@item Rounding mode
@@ -29684,7 +29594,7 @@ How numbers are rounded up or down when necessary.
More details are provided later.
@item Significand
-A floating-point value consists the significand multiplied by 10
+A floating-point value consists of the significand multiplied by 10
to the power of the exponent. For example, in @code{1.2345e67},
the significand is @code{1.2345}.
@@ -29708,7 +29618,7 @@ to allow greater precisions and larger exponent ranges.
(@command{awk} uses only the 64-bit double-precision format.)
@ref{table-ieee-formats} lists the precision and exponent
-field values for the basic IEEE 754 binary formats:
+field values for the basic IEEE 754 binary formats.
@float Table,table-ieee-formats
@caption{Basic IEEE format values}
@@ -29738,7 +29648,7 @@ is available like so:
@example
$ @kbd{gawk --version}
@print{} GNU Awk 4.1.2, API: 1.1 (GNU MPFR 3.1.0-p3, GNU MP 5.0.2)
-@print{} Copyright (C) 1989, 1991-2014 Free Software Foundation.
+@print{} Copyright (C) 1989, 1991-2015 Free Software Foundation.
@dots{}
@end example
@@ -29772,12 +29682,12 @@ for more information.
@author Teen Talk Barbie, July 1992
@end quotation
-This @value{SECTION} provides a high level overview of the issues
+This @value{SECTION} provides a high-level overview of the issues
involved when doing lots of floating-point arithmetic.@footnote{There
is a very nice @uref{http://www.validlab.com/goldberg/paper.pdf,
paper on floating-point arithmetic} by David Goldberg, ``What Every
-Computer Scientist Should Know About Floating-point Arithmetic,''
-@cite{ACM Computing Surveys} @strong{23}, 1 (1991-03), 5-48. This is
+Computer Scientist Should Know About Floating-Point Arithmetic,''
+@cite{ACM Computing Surveys} @strong{23}, 1 (1991-03): 5-48. This is
worth reading if you are interested in the details, but it does require
a background in computer science.}
The discussion applies to both hardware and arbitrary-precision
@@ -29846,7 +29756,7 @@ $ @kbd{gawk 'BEGIN @{ x = 0.875; y = 0.425}
Often the error is so small you do not even notice it, and if you do,
you can always specify how much precision you would like in your output.
-Usually this is a format string like @code{"%.15g"}, which when
+Usually this is a format string like @code{"%.15g"}, which, when
used in the previous example, produces an output identical to the input.
@node Comparing FP Values
@@ -29885,7 +29795,7 @@ else
The loss of accuracy during a single computation with floating-point
numbers usually isn't enough to worry about. However, if you compute a
-value which is the result of a sequence of floating-point operations,
+value that is the result of a sequence of floating-point operations,
the error can accumulate and greatly affect the computation itself.
Here is an attempt to compute the value of @value{PI} using one of its
many series representations:
@@ -29938,7 +29848,7 @@ no easy answers. The standard rules of algebra often do not apply
when using floating-point arithmetic.
Among other things, the distributive and associative laws
do not hold completely, and order of operation may be important
-for your computation. Rounding error, cumulative precision loss
+for your computation. Rounding error, cumulative precision loss,
and underflow are often troublesome.
When @command{gawk} tests the expressions @samp{0.1 + 12.2} and
@@ -29978,7 +29888,8 @@ by our earlier attempt to compute the value of @value{PI}.
Extra precision can greatly enhance the stability and the accuracy
of your computation in such cases.
-Repeated addition is not necessarily equivalent to multiplication
+Additionally, you should understand that
+repeated addition is not necessarily equivalent to multiplication
in floating-point arithmetic. In the example in
@ref{Errors accumulate}:
@@ -30041,7 +29952,7 @@ to emulate an IEEE 754 binary format.
@float Table,table-predefined-precision-strings
@caption{Predefined precision strings for @code{PREC}}
@multitable {@code{"double"}} {12345678901234567890123456789012345}
-@headitem @code{PREC} @tab IEEE 754 Binary Format
+@headitem @code{PREC} @tab IEEE 754 binary format
@item @code{"half"} @tab 16-bit half-precision
@item @code{"single"} @tab Basic 32-bit single precision
@item @code{"double"} @tab Basic 64-bit double precision
@@ -30073,7 +29984,6 @@ than the default and cannot use a command-line assignment to @code{PREC},
you should either specify the constant as a string, or as a rational
number, whenever possible. The following example illustrates the
differences among various ways to print a floating-point constant:
-@end quotation
@example
$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 0.1) @}'}
@@ -30085,22 +29995,23 @@ $ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", "0.1") @}'}
$ @kbd{gawk -M 'BEGIN @{ PREC = 113; printf("%0.25f\n", 1/10) @}'}
@print{} 0.1000000000000000000000000
@end example
+@end quotation
@node Setting the rounding mode
@subsection Setting the Rounding Mode
The @code{ROUNDMODE} variable provides
-program level control over the rounding mode.
+program-level control over the rounding mode.
The correspondence between @code{ROUNDMODE} and the IEEE
rounding modes is shown in @ref{table-gawk-rounding-modes}.
@float Table,table-gawk-rounding-modes
@caption{@command{gawk} rounding modes}
@multitable @columnfractions .45 .30 .25
-@headitem Rounding Mode @tab IEEE Name @tab @code{ROUNDMODE}
+@headitem Rounding mode @tab IEEE name @tab @code{ROUNDMODE}
@item Round to nearest, ties to even @tab @code{roundTiesToEven} @tab @code{"N"} or @code{"n"}
-@item Round toward plus Infinity @tab @code{roundTowardPositive} @tab @code{"U"} or @code{"u"}
-@item Round toward negative Infinity @tab @code{roundTowardNegative} @tab @code{"D"} or @code{"d"}
+@item Round toward positive infinity @tab @code{roundTowardPositive} @tab @code{"U"} or @code{"u"}
+@item Round toward negative infinity @tab @code{roundTowardNegative} @tab @code{"D"} or @code{"d"}
@item Round toward zero @tab @code{roundTowardZero} @tab @code{"Z"} or @code{"z"}
@item Round to nearest, ties away from zero @tab @code{roundTiesToAway} @tab @code{"A"} or @code{"a"}
@end multitable
@@ -30161,8 +30072,8 @@ distributes upward and downward rounds of exact halves, which might
cause any accumulating round-off error to cancel itself out. This is the
default rounding mode for IEEE 754 computing functions and operators.
-The other rounding modes are rarely used. Round toward positive infinity
-(@code{roundTowardPositive}) and round toward negative infinity
+The other rounding modes are rarely used. Rounding toward positive infinity
+(@code{roundTowardPositive}) and toward negative infinity
(@code{roundTowardNegative}) are often used to implement interval
arithmetic, where you adjust the rounding mode to calculate upper and
lower bounds for the range of output. The @code{roundTowardZero} mode can
@@ -30204,6 +30115,7 @@ the following computes
@end docbook
the result of which is beyond the
limits of ordinary hardware double-precision floating-point values:
+@c FIXME: Use @sup here for superscript
@example
$ @kbd{gawk -M 'BEGIN @{}
@@ -30219,17 +30131,17 @@ If instead you were to compute the same value using arbitrary-precision
floating-point values, the precision needed for correct output (using
the formula
@iftex
-@math{prec = 3.322 @cdot dps}),
+@math{prec = 3.322 @cdot dps})
would be @math{3.322 @cdot 183231},
@end iftex
@ifnottex
@ifnotdocbook
-@samp{prec = 3.322 * dps}),
+@samp{prec = 3.322 * dps})
would be 3.322 x 183231,
@end ifnotdocbook
@end ifnottex
@docbook
-<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>),
+<emphasis>prec</emphasis> = 3.322 &sdot; <emphasis>dps</emphasis>)
would be
<emphasis>prec</emphasis> = 3.322 &sdot; 183231, @c
@end docbook
@@ -30267,7 +30179,7 @@ interface to process arbitrary-precision integers or mixed-mode numbers
as needed by an operation or function. In such a case, the precision is
set to the minimum value necessary for exact conversion, and the working
precision is not used for this purpose. If this is not what you need or
-want, you can employ a subterfuge, and convert the integer to floating
+want, you can employ a subterfuge and convert the integer to floating
point first, like this:
@example
@@ -30293,27 +30205,30 @@ When dividing two arbitrary precision integers with either
precision floating point value (unless the denominator evenly
divides into the numerator). In order to do integer division
or remainder with arbitrary precision integers, use the built-in
-@code{div()} function (@pxref{Numeric Functions}).
+@code{intdiv()} function (@pxref{Numeric Functions}).
-You can simulate the @code{div()} function in standard @command{awk}
+You can simulate the @code{intdiv()} function in standard @command{awk}
using this user-defined function:
@example
-@c file eg/lib/div.awk
-# div --- do integer division
+@c file eg/lib/intdiv.awk
+# intdiv --- do integer division
@c endfile
@ignore
-@c file eg/lib/div.awk
+@c file eg/lib/intdiv.awk
#
# Arnold Robbins, arnold@@skeeve.com, Public Domain
# July, 2014
+#
+# Name changed from div() to intdiv()
+# April, 2015
@c endfile
@end ignore
-@c file eg/lib/div.awk
-function div(numerator, denominator, result)
+@c file eg/lib/intdiv.awk
+function intdiv(numerator, denominator, result)
@{
split("", result)
@@ -30328,7 +30243,7 @@ function div(numerator, denominator, result)
@end example
The following example program, contributed by Katie Wasserman,
-uses @code{div()} to
+uses @code{intdiv()} to
compute the digits of @value{PI} to as many places as you
choose to set:
@@ -30353,7 +30268,7 @@ BEGIN @{
for (m = digits * 4; m > 0; --m) @{
d = m * 2 + 1
x = pi * m
- div(x, d, result)
+ intdiv(x, d, result)
pi = result["quotient"]
pi = pi + two
@}
@@ -30392,7 +30307,7 @@ When asked about the algorithm used, Katie replied:
@quotation
It's not that well known but it's not that obscure either.
It's Euler's modification to Newton's method for calculating pi.
-Take a look at lines (23) - (25) here: @uref{http://mathworld.wolfram.com/PiFormulas.htm}.
+Take a look at lines (23) - (25) here: @uref{http://mathworld.wolfram.com/PiFormulas.html}.
The algorithm I wrote simply expands the multiply by 2 and works from
the innermost expression outwards. I used this to program HP calculators
@@ -30404,7 +30319,7 @@ word sizes. See
@node POSIX Floating Point Problems
@section Standards Versus Existing Practice
-Historically, @command{awk} has converted any non-numeric looking string
+Historically, @command{awk} has converted any nonnumeric-looking string
to the numeric value zero, when required. Furthermore, the original
definition of the language and the original POSIX standards specified that
@command{awk} only understands decimal numbers (base 10), and not octal
@@ -30421,8 +30336,8 @@ notation (e.g., @code{0xDEADBEEF}). (Note: data values, @emph{not}
source code constants.)
@item
-Support for the special IEEE 754 floating-point values ``Not A Number''
-(NaN), positive Infinity (``inf''), and negative Infinity (``@minus{}inf'').
+Support for the special IEEE 754 floating-point values ``not a number''
+(NaN), positive infinity (``inf''), and negative infinity (``@minus{}inf'').
In particular, the format for these values is as specified by the ISO 1999
C standard, which ignores case and can allow implementation-dependent additional
characters after the @samp{nan} and allow either @samp{inf} or @samp{infinity}.
@@ -30442,22 +30357,22 @@ Allowing completely alphabetic strings to have valid numeric
values is also a very severe departure from historical practice.
@end itemize
-The second problem is that the @code{gawk} maintainer feels that this
-interpretation of the standard, which requires a certain amount of
+The second problem is that the @command{gawk} maintainer feels that this
+interpretation of the standard, which required a certain amount of
``language lawyering'' to arrive at in the first place, was not even
-intended by the standard developers. In other words, ``we see how you
+intended by the standard developers. In other words, ``We see how you
got where you are, but we don't think that that's where you want to be.''
Recognizing these issues, but attempting to provide compatibility
with the earlier versions of the standard,
the 2008 POSIX standard added explicit wording to allow, but not require,
that @command{awk} support hexadecimal floating-point values and
-special values for ``Not A Number'' and infinity.
+special values for ``not a number'' and infinity.
Although the @command{gawk} maintainer continues to feel that
providing those features is inadvisable,
nevertheless, on systems that support IEEE floating point, it seems
-reasonable to provide @emph{some} way to support NaN and Infinity values.
+reasonable to provide @emph{some} way to support NaN and infinity values.
The solution implemented in @command{gawk} is as follows:
@itemize @value{BULLET}
@@ -30477,7 +30392,7 @@ $ @kbd{echo 0xDeadBeef | gawk --posix '@{ print $1 + 0 @}'}
@end example
@item
-Without @option{--posix}, @command{gawk} interprets the four strings
+Without @option{--posix}, @command{gawk} interprets the four string values
@samp{+inf},
@samp{-inf},
@samp{+nan},
@@ -30499,7 +30414,7 @@ $ @kbd{echo 0xDeadBeef | gawk '@{ print $1 + 0 @}'}
@end example
@command{gawk} ignores case in the four special values.
-Thus @samp{+nan} and @samp{+NaN} are the same.
+Thus, @samp{+nan} and @samp{+NaN} are the same.
@end itemize
@node Floating point summary
@@ -30512,9 +30427,9 @@ values. Standard @command{awk} uses double-precision
floating-point values.
@item
-In the early 1990s, Barbie mistakenly said ``Math class is tough!''
+In the early 1990s Barbie mistakenly said, ``Math class is tough!''
Although math isn't tough, floating-point arithmetic isn't the same
-as pencil and paper math, and care must be taken:
+as pencil-and-paper math, and care must be taken:
@c nested list
@itemize @value{MINUS}
@@ -30547,11 +30462,11 @@ arithmetic. Use @code{PREC} to set the precision in bits, and
@item
With @option{-M}, @command{gawk} performs
arbitrary-precision integer arithmetic using the GMP library.
-This is faster and more space efficient than using MPFR for
+This is faster and more space-efficient than using MPFR for
the same calculations.
@item
-There are several ``dark corners'' with respect to floating-point
+There are several areas with respect to floating-point
numbers where @command{gawk} disagrees with the POSIX standard.
It pays to be aware of them.
@@ -30559,7 +30474,7 @@ It pays to be aware of them.
Overall, there is no need to be unduly suspicious about the results from
floating-point arithmetic. The lesson to remember is that floating-point
arithmetic is always more complex than arithmetic using pencil and
-paper. In order to take advantage of the power of computer floating point,
+paper. In order to take advantage of the power of floating-point arithmetic,
you need to know its limitations and work within them. For most casual
use of floating-point arithmetic, you will often get the expected result
if you simply round the display of your final results to the correct number
@@ -30601,7 +30516,7 @@ When @option{--sandbox} is specified, extensions are disabled
* Finding Extensions:: How @command{gawk} finds compiled extensions.
* Extension Example:: Example C code for an extension.
* Extension Samples:: The sample extensions that ship with
- @code{gawk}.
+ @command{gawk}.
* gawkextlib:: The @code{gawkextlib} project.
* Extension summary:: Extension summary.
* Extension Exercises:: Exercises.
@@ -30620,7 +30535,7 @@ Extensions are useful because they allow you (of course) to extend
@command{gawk}'s functionality. For example, they can provide access to
system calls (such as @code{chdir()} to change directory) and to other
C library routines that could be of use. As with most software,
-``the sky is the limit;'' if you can imagine something that you might
+``the sky is the limit''; if you can imagine something that you might
want to do and can write in C or C++, you can write an extension to do it!
Extensions are written in C or C++, using the @dfn{application programming
@@ -30628,7 +30543,7 @@ interface} (API) defined for this purpose by the @command{gawk}
developers. The rest of this @value{CHAPTER} explains
the facilities that the API provides and how to use
them, and presents a small example extension. In addition, it documents
-the sample extensions included in the @command{gawk} distribution,
+the sample extensions included in the @command{gawk} distribution
and describes the @code{gawkextlib} project.
@ifclear FOR_PRINT
@xref{Extension Design}, for a discussion of the extension mechanism
@@ -30781,7 +30696,7 @@ Some other bits and pieces:
@itemize @value{BULLET}
@item
The API provides access to @command{gawk}'s @code{do_@var{xxx}} values,
-reflecting command-line options, like @code{do_lint}, @code{do_profiling}
+reflecting command-line options, like @code{do_lint}, @code{do_profiling},
and so on (@pxref{Extension API Variables}).
These are informational: an extension cannot affect their values
inside @command{gawk}. In addition, attempting to assign to them
@@ -30818,6 +30733,7 @@ This (rather large) @value{SECTION} describes the API in detail.
* Symbol Table Access:: Functions for accessing global
variables.
* Array Manipulation:: Functions for working with arrays.
+* Redirection API:: How to access and manipulate redirections.
* Extension API Variables:: Variables provided by the API.
* Extension API Boilerplate:: Boilerplate code for using the API.
@end menu
@@ -30825,7 +30741,7 @@ This (rather large) @value{SECTION} describes the API in detail.
@node Extension API Functions Introduction
@subsection Introduction
-Access to facilities within @command{gawk} are made available
+Access to facilities within @command{gawk} is achieved
by calling through function pointers passed into your extension.
API function pointers are provided for the following kinds of operations:
@@ -30853,7 +30769,7 @@ Output wrappers
Two-way processors
@end itemize
-All of these are discussed in detail, later in this @value{CHAPTER}.
+All of these are discussed in detail later in this @value{CHAPTER}.
@item
Printing fatal, warning, and ``lint'' warning messages.
@@ -30891,8 +30807,12 @@ Creating a new array
Clearing an array
@item
-Flattening an array for easy C style looping over all its indices and elements
+Flattening an array for easy C-style looping over all its indices and elements
@end itemize
+
+@item
+Accessing and manipulating redirections.
+
@end itemize
Some points about using the API:
@@ -30903,8 +30823,9 @@ The following types, macros, and/or functions are referenced
in @file{gawkapi.h}. For correct use, you must therefore include the
corresponding standard header file @emph{before} including @file{gawkapi.h}:
+@c FIXME: Make this is a float at some point.
@multitable {@code{memset()}, @code{memcpy()}} {@code{<sys/types.h>}}
-@headitem C Entity @tab Header File
+@headitem C entity @tab Header file
@item @code{EOF} @tab @code{<stdio.h>}
@item Values for @code{errno} @tab @code{<errno.h>}
@item @code{FILE} @tab @code{<stdio.h>}
@@ -30930,7 +30851,7 @@ Doing so, however, is poor coding practice.
Although the API only uses ISO C 90 features, there is an exception; the
``constructor'' functions use the @code{inline} keyword. If your compiler
does not support this keyword, you should either place
-@samp{-Dinline=''} on your command line, or use the GNU Autotools and include a
+@samp{-Dinline=''} on your command line or use the GNU Autotools and include a
@file{config.h} file in your extensions.
@item
@@ -30938,7 +30859,7 @@ All pointers filled in by @command{gawk} point to memory
managed by @command{gawk} and should be treated by the extension as
read-only. Memory for @emph{all} strings passed into @command{gawk}
from the extension @emph{must} come from calling one of
-@code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()},
+@code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()},
and is managed by @command{gawk} from then on.
@item
@@ -30952,7 +30873,7 @@ characters are allowed.
By intent, strings are maintained using the current multibyte encoding (as
defined by @env{LC_@var{xxx}} environment variables) and not using wide
characters. This matches how @command{gawk} stores strings internally
-and also how characters are likely to be input and output from files.
+and also how characters are likely to be input into and output from files.
@end quotation
@item
@@ -30997,6 +30918,8 @@ general-purpose use. Additional, more specialized, data structures are
introduced in subsequent @value{SECTION}s, together with the functions
that use them.
+The general-purpose types and structures are as follows:
+
@table @code
@item typedef void *awk_ext_id_t;
A value of this type is received from @command{gawk} when an extension is loaded.
@@ -31013,7 +30936,7 @@ while allowing @command{gawk} to use them as it needs to.
@itemx @ @ @ @ awk_false = 0,
@itemx @ @ @ @ awk_true
@itemx @} awk_bool_t;
-A simple boolean type.
+A simple Boolean type.
@item typedef struct awk_string @{
@itemx @ @ @ @ char *str;@ @ @ @ @ @ /* data */
@@ -31059,7 +30982,7 @@ The @code{val_type} member indicates what kind of value the
@itemx #define array_cookie@ @ @ u.a
@itemx #define scalar_cookie@ @ u.scl
@itemx #define value_cookie@ @ @ u.vc
-These macros make accessing the fields of the @code{awk_value_t} more
+Using these macros makes accessing the fields of the @code{awk_value_t} more
readable.
@item typedef void *awk_scalar_t;
@@ -31082,7 +31005,7 @@ indicates what is in the @code{union}.
Representing numbers is easy---the API uses a C @code{double}. Strings
require more work. Because @command{gawk} allows embedded @sc{nul} bytes
in string values, a string must be represented as a pair containing a
-data-pointer and length. This is the @code{awk_string_t} type.
+data pointer and length. This is the @code{awk_string_t} type.
Identifiers (i.e., the names of global variables) can be associated
with either scalar values or with arrays. In addition, @command{gawk}
@@ -31095,12 +31018,12 @@ of the @code{union} as if they were fields in a @code{struct}; this
is a common coding practice in C. Such code is easier to write and to
read, but it remains @emph{your} responsibility to make sure that
the @code{val_type} member correctly reflects the type of the value in
-the @code{awk_value_t}.
+the @code{awk_value_t} struct.
Conceptually, the first three members of the @code{union} (number, string,
and array) are all that is needed for working with @command{awk} values.
However, because the API provides routines for accessing and changing
-the value of global scalar variables only by using the variable's name,
+the value of a global scalar variable only by using the variable's name,
there is a performance penalty: @command{gawk} must find the variable
each time it is accessed and changed. This turns out to be a real issue,
not just a theoretical one.
@@ -31118,7 +31041,9 @@ See also the entry for ``Cookie'' in the @ref{Glossary}.
object for that variable, and then use
the cookie for getting the variable's value or for changing the variable's
value.
-This is the @code{awk_scalar_t} type and @code{scalar_cookie} macro.
+The @code{awk_scalar_t} type holds a scalar cookie, and the
+@code{scalar_cookie} macro provides access to the value of that type
+in the @code{awk_value_t} struct.
Given a scalar cookie, @command{gawk} can directly retrieve or
modify the value, as required, without having to find it first.
@@ -31127,8 +31052,8 @@ If you know that you wish to
use the same numeric or string @emph{value} for one or more variables,
you can create the value once, retaining a @dfn{value cookie} for it,
and then pass in that value cookie whenever you wish to set the value of a
-variable. This saves both storage space within the running @command{gawk}
-process as well as the time needed to create the value.
+variable. This saves storage space within the running @command{gawk}
+process and reduces the time needed to create the value.
@node Memory Allocation Functions
@subsection Memory Allocation Functions and Convenience Macros
@@ -31156,13 +31081,13 @@ be passed to @command{gawk}.
@item void gawk_free(void *ptr);
Call the correct version of @code{free()} to release storage that was
-allocated with @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}.
+allocated with @code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}.
@end table
The API has to provide these functions because it is possible
for an extension to be compiled and linked against a different
version of the C library than was used for the @command{gawk}
-executable.@footnote{This is more common on MS-Windows systems, but
+executable.@footnote{This is more common on MS-Windows systems, but it
can happen on Unix-like systems as well.} If @command{gawk} were
to use its version of @code{free()} when the memory came from an
unrelated version of @code{malloc()}, unexpected behavior would
@@ -31172,7 +31097,7 @@ Two convenience macros may be used for allocating storage
from @code{gawk_malloc()} and
@code{gawk_realloc()}. If the allocation fails, they cause @command{gawk}
to exit with a fatal error message. They should be used as if they were
-procedure calls that do not return a value.
+procedure calls that do not return a value:
@table @code
@item #define emalloc(pointer, type, size, message) @dots{}
@@ -31209,7 +31134,7 @@ make_malloced_string(message, strlen(message), & result);
@end example
@item #define erealloc(pointer, type, size, message) @dots{}
-This is like @code{emalloc()}, but it calls @code{gawk_realloc()},
+This is like @code{emalloc()}, but it calls @code{gawk_realloc()}
instead of @code{gawk_malloc()}.
The arguments are the same as for the @code{emalloc()} macro.
@end table
@@ -31224,28 +31149,28 @@ the way that extension code would use them:
@table @code
@item static inline awk_value_t *
-@itemx make_const_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_const_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a C string constant
(or other string data), and automatically creates a @emph{copy} of the data
for storage in @code{result}. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result)
+@itemx make_malloced_string(const char *string, size_t length, awk_value_t *result);
This function creates a string value in the @code{awk_value_t} variable
pointed to by @code{result}. It expects @code{string} to be a @samp{char *}
-value pointing to data previously obtained from @code{gawk_malloc()}, @code{gawk_calloc()} or @code{gawk_realloc()}. The idea here
+value pointing to data previously obtained from @code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}. The idea here
is that the data is passed directly to @command{gawk}, which assumes
responsibility for it. It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_null_string(awk_value_t *result)
+@itemx make_null_string(awk_value_t *result);
This specialized function creates a null string (the ``undefined'' value)
in the @code{awk_value_t} variable pointed to by @code{result}.
It returns @code{result}.
@item static inline awk_value_t *
-@itemx make_number(double num, awk_value_t *result)
+@itemx make_number(double num, awk_value_t *result);
This function simply creates a numeric value in the @code{awk_value_t} variable
pointed to by @code{result}.
@end table
@@ -31285,7 +31210,7 @@ The fields are:
@table @code
@item const char *name;
The name of the new function.
-@command{awk} level code calls the function by this name.
+@command{awk}-level code calls the function by this name.
This is a regular C string.
Function names must obey the rules for @command{awk}
@@ -31299,7 +31224,7 @@ This is a pointer to the C function that provides the extension's
functionality.
The function must fill in @code{*result} with either a number
or a string. @command{gawk} takes ownership of any string memory.
-As mentioned earlier, string memory @strong{must} come from one of
+As mentioned earlier, string memory @emph{must} come from one of
@code{gawk_malloc()}, @code{gawk_calloc()}, or @code{gawk_realloc()}.
The @code{num_actual_args} argument tells the C function how many
@@ -31351,20 +31276,20 @@ The @code{exit_status} parameter is the exit status value that
@command{gawk} intends to pass to the @code{exit()} system call.
@item arg0
-A pointer to private data which @command{gawk} saves in order to pass to
+A pointer to private data that @command{gawk} saves in order to pass to
the function pointed to by @code{funcp}.
@end table
@end table
-Exit callback functions are called in last-in-first-out (LIFO)
+Exit callback functions are called in last-in, first-out (LIFO)
order---that is, in the reverse order in which they are registered with
@command{gawk}.
@node Extension Version String
@subsubsection Registering An Extension Version String
-You can register a version string which indicates the name and
-version of your extension, with @command{gawk}, as follows:
+You can register a version string that indicates the name and
+version of your extension with @command{gawk}, as follows:
@table @code
@item void register_ext_version(const char *version);
@@ -31386,7 +31311,7 @@ of @code{RS} to find the end of the record, and then uses @code{FS}
Additionally, it sets the value of @code{RT} (@pxref{Built-in Variables}).
If you want, you can provide your own custom input parser. An input
-parser's job is to return a record to the @command{gawk} record processing
+parser's job is to return a record to the @command{gawk} record-processing
code, along with indicators for the value and length of the data to be
used for @code{RT}, if any.
@@ -31404,9 +31329,9 @@ It should not change any state (variable values, etc.) within @command{gawk}.
@item awk_bool_t @var{XXX}_take_control_of(awk_input_buf_t *iobuf);
When @command{gawk} decides to hand control of the file over to the
input parser, it calls this function. This function in turn must fill
-in certain fields in the @code{awk_input_buf_t} structure, and ensure
+in certain fields in the @code{awk_input_buf_t} structure and ensure
that certain conditions are true. It should then return true. If an
-error of some kind occurs, it should not fill in any fields, and should
+error of some kind occurs, it should not fill in any fields and should
return false; then @command{gawk} will not use the input parser.
The details are presented shortly.
@end table
@@ -31499,7 +31424,7 @@ in the @code{struct stat}, or any combination of these factors.
Once @code{@var{XXX}_can_take_file()} has returned true, and
@command{gawk} has decided to use your input parser, it calls
-@code{@var{XXX}_take_control_of()}. That function then fills one of
+@code{@var{XXX}_take_control_of()}. That function then fills
either the @code{get_record} field or the @code{read_func} field in
the @code{awk_input_buf_t}. It must also ensure that @code{fd} is @emph{not}
set to @code{INVALID_HANDLE}. The following list describes the fields that
@@ -31521,21 +31446,21 @@ records. Said function is the core of the input parser. Its behavior
is described in the text following this list.
@item ssize_t (*read_func)();
-This function pointer should point to function that has the
+This function pointer should point to a function that has the
same behavior as the standard POSIX @code{read()} system call.
It is an alternative to the @code{get_record} pointer. Its behavior
is also described in the text following this list.
@item void (*close_func)(struct awk_input *iobuf);
This function pointer should point to a function that does
-the ``tear down.'' It should release any resources allocated by
+the ``teardown.'' It should release any resources allocated by
@code{@var{XXX}_take_control_of()}. It may also close the file. If it
does so, it should set the @code{fd} field to @code{INVALID_HANDLE}.
If @code{fd} is still not @code{INVALID_HANDLE} after the call to this
function, @command{gawk} calls the regular @code{close()} system call.
-Having a ``tear down'' function is optional. If your input parser does
+Having a ``teardown'' function is optional. If your input parser does
not need it, do not set this field. Then, @command{gawk} calls the
regular @code{close()} system call on the file descriptor, so it should
be valid.
@@ -31546,7 +31471,7 @@ input records. The parameters are as follows:
@table @code
@item char **out
-This is a pointer to a @code{char *} variable which is set to point
+This is a pointer to a @code{char *} variable that is set to point
to the record. @command{gawk} makes its own copy of the data, so
the extension must manage this storage.
@@ -31565,7 +31490,7 @@ If the concept of a ``record terminator'' makes sense, then
@code{*rt_start} should be set to point to the data to be used for
@code{RT}, and @code{*rt_len} should be set to the length of the
data. Otherwise, @code{*rt_len} should be set to zero.
-@code{gawk} makes its own copy of this data, so the
+@command{gawk} makes its own copy of this data, so the
extension must manage this storage.
@end table
@@ -31599,19 +31524,19 @@ set this field explicitly.
You must choose one method or the other: either a function that
returns a record, or one that returns raw data. In particular,
if you supply a function to get a record, @command{gawk} will
-call it, and never call the raw read function.
+call it, and will never call the raw read function.
@end quotation
@command{gawk} ships with a sample extension that reads directories,
-returning records for each entry in the directory (@pxref{Extension
+returning records for each entry in a directory (@pxref{Extension
Sample Readdir}). You may wish to use that code as a guide for writing
your own input parser.
When writing an input parser, you should think about (and document)
how it is expected to interact with @command{awk} code. You may want
-it to always be called, and take effect as appropriate (as the
+it to always be called, and to take effect as appropriate (as the
@code{readdir} extension does). Or you may want it to take effect
-based upon the value of an @code{awk} variable, as the XML extension
+based upon the value of an @command{awk} variable, as the XML extension
from the @code{gawkextlib} project does (@pxref{gawkextlib}).
In the latter case, code in a @code{BEGINFILE} section
can look at @code{FILENAME} and @code{ERRNO} to decide whether or
@@ -31719,7 +31644,7 @@ a pointer to any private data associated with the file.
These pointers should be set to point to functions that perform
the equivalent function as the @code{<stdio.h>} functions do, if appropriate.
@command{gawk} uses these function pointers for all output.
-@command{gawk} initializes the pointers to point to internal, ``pass through''
+@command{gawk} initializes the pointers to point to internal ``pass-through''
functions that just call the regular @code{<stdio.h>} functions, so an
extension only needs to redefine those functions that are appropriate for
what it does.
@@ -31730,7 +31655,7 @@ upon the @code{name} and @code{mode} fields, and any additional state
(such as @command{awk} variable values) that is appropriate.
When @command{gawk} calls @code{@var{XXX}_take_control_of()}, that function should fill
-in the other fields, as appropriate, except for @code{fp}, which it should just
+in the other fields as appropriate, except for @code{fp}, which it should just
use normally.
You register your output wrapper with the following function:
@@ -31770,14 +31695,14 @@ The fields are as follows:
The name of the two-way processor.
@item awk_bool_t (*can_take_two_way)(const char *name);
-This function returns true if it wants to take over two-way I/O for this @value{FN}.
+The function pointed to by this field should return true if it wants to take over two-way I/O for this @value{FN}.
It should not change any state (variable
values, etc.) within @command{gawk}.
@item awk_bool_t (*take_control_of)(const char *name,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_input_buf_t *inbuf,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_output_buf_t *outbuf);
-This function should fill in the @code{awk_input_buf_t} and
+The function pointed to by this field should fill in the @code{awk_input_buf_t} and
@code{awk_outut_buf_t} structures pointed to by @code{inbuf} and
@code{outbuf}, respectively. These structures were described earlier.
@@ -31806,7 +31731,7 @@ Register the two-way processor pointed to by @code{two_way_processor} with
You can print different kinds of warning messages from your
extension, as described here. Note that for these functions,
-you must pass in the extension id received from @command{gawk}
+you must pass in the extension ID received from @command{gawk}
when the extension was loaded:@footnote{Because the API uses only ISO C 90
features, it cannot make use of the ISO C 99 variadic macro feature to hide
that parameter. More's the pity.}
@@ -31859,7 +31784,7 @@ matches what you requested, the function returns true and fills
in the @code{awk_value_t} result.
Otherwise, the function returns false, and the @code{val_type}
member indicates the type of the actual value. You may then
-print an error message, or reissue the request for the actual
+print an error message or reissue the request for the actual
value type, as appropriate. This behavior is summarized in
@ref{table-value-types-returned}.
@@ -31892,32 +31817,32 @@ value type, as appropriate. This behavior is summarized in
<entry><para><emphasis role="bold">String</emphasis></para></entry>
<entry><para>String</para></entry>
<entry><para>String</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry></entry>
<entry><para><emphasis role="bold">Number</emphasis></para></entry>
<entry><para>Number if can be converted, else false</para></entry>
<entry><para>Number</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry><para><emphasis role="bold">Type</emphasis></para></entry>
<entry><para><emphasis role="bold">Array</emphasis></para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
<entry><para>Array</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry><para><emphasis role="bold">Requested</emphasis></para></entry>
<entry><para><emphasis role="bold">Scalar</emphasis></para></entry>
<entry><para>Scalar</para></entry>
<entry><para>Scalar</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
</row>
<row>
<entry></entry>
@@ -31929,11 +31854,11 @@ value type, as appropriate. This behavior is summarized in
</row>
<row>
<entry></entry>
- <entry><para><emphasis role="bold">Value Cookie</emphasis></para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para></entry>
- <entry><para>false</para>
- </entry><entry><para>false</para></entry>
+ <entry><para><emphasis role="bold">Value cookie</emphasis></para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para></entry>
+ <entry><para>False</para>
+ </entry><entry><para>False</para></entry>
</row>
</tbody>
</tgroup>
@@ -31951,12 +31876,12 @@ value type, as appropriate. This behavior is summarized in
@end tex
@multitable @columnfractions .166 .166 .198 .15 .15 .166
@headitem @tab @tab String @tab Number @tab Array @tab Undefined
-@item @tab @b{String} @tab String @tab String @tab false @tab false
-@item @tab @b{Number} @tab Number if can be converted, else false @tab Number @tab false @tab false
-@item @b{Type} @tab @b{Array} @tab false @tab false @tab Array @tab false
-@item @b{Requested} @tab @b{Scalar} @tab Scalar @tab Scalar @tab false @tab false
+@item @tab @b{String} @tab String @tab String @tab False @tab False
+@item @tab @b{Number} @tab Number if can be converted, else false @tab Number @tab False @tab False
+@item @b{Type} @tab @b{Array} @tab False @tab False @tab Array @tab False
+@item @b{Requested} @tab @b{Scalar} @tab Scalar @tab Scalar @tab False @tab False
@item @tab @b{Undefined} @tab String @tab Number @tab Array @tab Undefined
-@item @tab @b{Value Cookie} @tab false @tab false @tab false @tab false
+@item @tab @b{Value cookie} @tab False @tab False @tab False @tab False
@end multitable
@end ifnotdocbook
@end ifnotplaintext
@@ -31967,21 +31892,21 @@ value type, as appropriate. This behavior is summarized in
+------------+------------+-----------+-----------+
| String | Number | Array | Undefined |
+-----------+-----------+------------+------------+-----------+-----------+
-| | String | String | String | false | false |
+| | String | String | String | False | False |
| |-----------+------------+------------+-----------+-----------+
-| | Number | Number if | Number | false | false |
+| | Number | Number if | Number | False | False |
| | | can be | | | |
| | | converted, | | | |
| | | else false | | | |
| |-----------+------------+------------+-----------+-----------+
-| Type | Array | false | false | Array | false |
+| Type | Array | False | False | Array | False |
| Requested |-----------+------------+------------+-----------+-----------+
-| | Scalar | Scalar | Scalar | false | false |
+| | Scalar | Scalar | Scalar | False | False |
| |-----------+------------+------------+-----------+-----------+
| | Undefined | String | Number | Array | Undefined |
| |-----------+------------+------------+-----------+-----------+
-| | Value | false | false | false | false |
-| | Cookie | | | | |
+| | Value | False | False | False | False |
+| | cookie | | | | |
+-----------+-----------+------------+------------+-----------+-----------+
@end example
@end ifplaintext
@@ -31998,16 +31923,16 @@ passed to your extension function. They are:
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_valtype_t wanted,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_value_t *result);
Fill in the @code{awk_value_t} structure pointed to by @code{result}
-with the @code{count}'th argument. Return true if the actual
-type matches @code{wanted}, false otherwise. In the latter
+with the @code{count}th argument. Return true if the actual
+type matches @code{wanted}, and false otherwise. In the latter
case, @code{result@w{->}val_type} indicates the actual type
-(@pxref{table-value-types-returned}). Counts are zero based---the first
+(@pxref{table-value-types-returned}). Counts are zero-based---the first
argument is numbered zero, the second one, and so on. @code{wanted}
indicates the type of value expected.
@item awk_bool_t set_argument(size_t count, awk_array_t array);
Convert a parameter that was undefined into an array; this provides
-call-by-reference for arrays. Return false if @code{count} is too big,
+call by reference for arrays. Return false if @code{count} is too big,
or if the argument's type is not undefined. @DBXREF{Array Manipulation}
for more information on creating arrays.
@end table
@@ -32031,8 +31956,9 @@ allows you to create and release cached values.
The following routines provide the ability to access and update
global @command{awk}-level variables by name. In compiler terminology,
identifiers of different kinds are termed @dfn{symbols}, thus the ``sym''
-in the routines' names. The data structure which stores information
+in the routines' names. The data structure that stores information
about symbols is termed a @dfn{symbol table}.
+The functions are as follows:
@table @code
@item awk_bool_t sym_lookup(const char *name,
@@ -32041,14 +31967,14 @@ about symbols is termed a @dfn{symbol table}.
Fill in the @code{awk_value_t} structure pointed to by @code{result}
with the value of the variable named by the string @code{name}, which is
a regular C string. @code{wanted} indicates the type of value expected.
-Return true if the actual type matches @code{wanted}, false otherwise.
+Return true if the actual type matches @code{wanted}, and false otherwise.
In the latter case, @code{result->val_type} indicates the actual type
(@pxref{table-value-types-returned}).
@item awk_bool_t sym_update(const char *name, awk_value_t *value);
Update the variable named by the string @code{name}, which is a regular
C string. The variable is added to @command{gawk}'s symbol table
-if it is not there. Return true if everything worked, false otherwise.
+if it is not there. Return true if everything worked, and false otherwise.
Changing types (scalar to array or vice versa) of an existing variable
is @emph{not} allowed, nor may this routine be used to update an array.
@@ -32073,7 +31999,7 @@ populate it.
A @dfn{scalar cookie} is an opaque handle that provides access
to a global variable or array. It is an optimization that
avoids looking up variables in @command{gawk}'s symbol table every time
-access is needed. This was discussed earlier in @ref{General Data Types}.
+access is needed. This was discussed earlier, in @ref{General Data Types}.
The following functions let you work with scalar cookies:
@@ -32189,7 +32115,7 @@ and carefully check the return values from the API functions.
@subsubsection Creating and Using Cached Values
The routines in this section allow you to create and release
-cached values. As with scalar cookies, in theory, cached values
+cached values. Like scalar cookies, in theory, cached values
are not necessary. You can create numbers and strings using
the functions in @ref{Constructor Functions}. You can then
assign those values to variables using @code{sym_update()}
@@ -32267,7 +32193,7 @@ Using value cookies in this way saves considerable storage, as all of
@code{VAR1} through @code{VAR100} share the same value.
You might be wondering, ``Is this sharing problematic?
-What happens if @command{awk} code assigns a new value to @code{VAR1},
+What happens if @command{awk} code assigns a new value to @code{VAR1};
are all the others changed too?''
That's a great question. The answer is that no, it's not a problem.
@@ -32371,7 +32297,7 @@ modify them.
@node Array Functions
@subsubsection Array Functions
-The following functions relate to individual array elements.
+The following functions relate to individual array elements:
@table @code
@item awk_bool_t get_element_count(awk_array_t a_cookie, size_t *count);
@@ -32390,13 +32316,13 @@ Return false if @code{wanted} does not match the actual type or if
@code{index} is not in the array (@pxref{table-value-types-returned}).
The value for @code{index} can be numeric, in which case @command{gawk}
-converts it to a string. Using non-integral values is possible, but
+converts it to a string. Using nonintegral values is possible, but
requires that you understand how such values are converted to strings
-(@pxref{Conversion}); thus using integral values is safest.
+(@pxref{Conversion}); thus, using integral values is safest.
-As with @emph{all} strings passed into @code{gawk} from an extension,
+As with @emph{all} strings passed into @command{gawk} from an extension,
the string value of @code{index} must come from @code{gawk_malloc()},
-@code{gawk_calloc()} or @code{gawk_realloc()}, and
+@code{gawk_calloc()}, or @code{gawk_realloc()}, and
@command{gawk} releases the storage.
@item awk_bool_t set_array_element(awk_array_t a_cookie,
@@ -32452,7 +32378,7 @@ flatten an array and work with it.
@item awk_bool_t release_flattened_array(awk_array_t a_cookie,
@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ awk_flat_array_t *data);
When done with a flattened array, release the storage using this function.
-You must pass in both the original array cookie, and the address of
+You must pass in both the original array cookie and the address of
the created @code{awk_flat_array_t} structure.
The function returns true upon success, false otherwise.
@end table
@@ -32462,7 +32388,7 @@ The function returns true upon success, false otherwise.
To @dfn{flatten} an array is to create a structure that
represents the full array in a fashion that makes it easy
-for C code to traverse the entire array. Test code
+for C code to traverse the entire array. Some of the code
in @file{extension/testext.c} does this, and also serves
as a nice example showing how to use the APIs.
@@ -32519,9 +32445,9 @@ dump_array_and_delete(int nargs, awk_value_t *result)
@end example
The function then proceeds in steps, as follows. First, retrieve
-the name of the array, passed as the first argument. Then
-retrieve the array itself. If either operation fails, print
-error messages and return:
+the name of the array, passed as the first argument, followed by
+the array itself. If either operation fails, print an
+error message and return:
@example
/* get argument named array as flat array and print it */
@@ -32557,7 +32483,7 @@ and print it:
@end example
The third step is to actually flatten the array, and then
-to double check that the count in the @code{awk_flat_array_t}
+to double-check that the count in the @code{awk_flat_array_t}
is the same as the count just retrieved:
@example
@@ -32578,7 +32504,7 @@ is the same as the count just retrieved:
The fourth step is to retrieve the index of the element
to be deleted, which was passed as the second argument.
Remember that argument counts passed to @code{get_argument()}
-are zero-based, thus the second argument is numbered one:
+are zero-based, and thus the second argument is numbered one:
@example
if (! get_argument(1, AWK_STRING, & value3)) @{
@@ -32593,7 +32519,7 @@ element values. In addition, upon finding the element with the
index that is supposed to be deleted, the function sets the
@code{AWK_ELEMENT_DELETE} bit in the @code{flags} field
of the element. When the array is released, @command{gawk}
-traverses the flattened array, and deletes any elements which
+traverses the flattened array, and deletes any elements that
have this flag bit set:
@example
@@ -32857,6 +32783,75 @@ $ @kbd{AWKLIBPATH=$PWD ./gawk -f subarray.awk}
(@DBXREF{Finding Extensions} for more information on the
@env{AWKLIBPATH} environment variable.)
+@node Redirection API
+@subsection Accessing and Manipulating Redirections
+
+The following function allows extensions to access and manipulate redirections.
+
+@table @code
+@item awk_bool_t get_file(const char *name,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ size_t name_len,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const char *filetype,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ int fd,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_input_buf_t **ibufp,
+@itemx @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ const awk_output_buf_t **obufp);
+Look up a file in @command{gawk}'s internal redirection table.
+If @code{name} is @code{NULL} or @code{name_len} is zero, return
+data for the currently open input file corresponding to @code{FILENAME}.
+(This does not access the @code{filetype} argument, so that may be undefined).
+If the file is not already open, attempt to open it.
+The @code{filetype} argument must be zero-terminated and should be one of:
+
+@table @code
+@item ">"
+A file opened for output.
+
+@item ">>"
+A file opened for append.
+
+@item "<"
+A file opened for input.
+
+@item "|>"
+A pipe opened for output.
+
+@item "|<"
+A pipe opened for input.
+
+@item "|&"
+A two-way coprocess.
+@end table
+
+On error, return a @code{false} value. Otherwise, return
+@code{true}, and return additional information about the redirection
+in the @code{ibufp} and @code{obufp} pointers. For input
+redirections, the @code{*ibufp} value should be non-@code{NULL},
+and @code{*obufp} should be @code{NULL}. For output redirections,
+the @code{*obufp} value should be non-@code{NULL}, and @code{*ibufp}
+should be @code{NULL}. For two-way coprocesses, both values should
+be non-@code{NULL}.
+
+In the usual case, the extension is interested in @code{(*ibufp)->fd}
+and/or @code{fileno((*obufp)->fp)}. If the file is not already
+open, and the @code{fd} argument is non-negative, @command{gawk}
+will use that file descriptor instead of opening the file in the
+usual way. If @code{fd} is non-negative, but the file exists already,
+@command{gawk} ignores @code{fd} and returns the existing file. It is
+the caller's responsibility to notice that neither the @code{fd} in
+the returned @code{awk_input_buf_t} nor the @code{fd} in the returned
+@code{awk_output_buf_t} matches the requested value.
+
+Note that supplying a file descriptor is currently @emph{not} supported
+for pipes. However, supplying a file descriptor should work for input,
+output, append, and two-way (coprocess) sockets. If @code{filetype}
+is two-way, @command{gawk} assumes that it is a socket! Note that in
+the two-way case, the input and output file descriptors may differ.
+To check for success, you must check whether either matches.
+@end table
+
+It is anticipated that this API function will be used to implement I/O
+multiplexing and a socket library.
+
@node Extension API Variables
@subsection API Variables
@@ -32881,10 +32876,10 @@ The API versions are available at compile time as constants:
@table @code
@item GAWK_API_MAJOR_VERSION
-The major version of the API.
+The major version of the API
@item GAWK_API_MINOR_VERSION
-The minor version of the API.
+The minor version of the API
@end table
The minor version increases when new functions are added to the API. Such
@@ -32902,14 +32897,14 @@ constant integers:
@table @code
@item api->major_version
-The major version of the running @command{gawk}.
+The major version of the running @command{gawk}
@item api->minor_version
-The minor version of the running @command{gawk}.
+The minor version of the running @command{gawk}
@end table
It is up to the extension to decide if there are API incompatibilities.
-Typically a check like this is enough:
+Typically, a check like this is enough:
@example
if (api->major_version != GAWK_API_MAJOR_VERSION
@@ -32923,7 +32918,7 @@ if (api->major_version != GAWK_API_MAJOR_VERSION
@end example
Such code is included in the boilerplate @code{dl_load_func()} macro
-provided in @file{gawkapi.h} (discussed later, in
+provided in @file{gawkapi.h} (discussed in
@ref{Extension API Boilerplate}).
@node Extension API Informational Variables
@@ -32970,7 +32965,7 @@ as described here. The boilerplate needed is also provided in comments
in the @file{gawkapi.h} header file:
@example
-/* Boiler plate code: */
+/* Boilerplate code: */
int plugin_is_GPL_compatible;
static gawk_api_t *const api;
@@ -33029,7 +33024,7 @@ to @code{NULL}, or to point to a string giving the name and version of
your extension.
@item static awk_ext_func_t func_table[] = @{ @dots{} @};
-This is an array of one or more @code{awk_ext_func_t} structures
+This is an array of one or more @code{awk_ext_func_t} structures,
as described earlier (@pxref{Extension Functions}).
It can then be looped over for multiple calls to
@code{add_ext_func()}.
@@ -33160,7 +33155,7 @@ the @code{stat()} fails. It fills in the following elements:
@table @code
@item "name"
-The name of the file that was @code{stat()}'ed.
+The name of the file that was @code{stat()}ed.
@item "dev"
@itemx "ino"
@@ -33216,7 +33211,7 @@ interprocess communications).
The file is a directory.
@item "fifo"
-The file is a named-pipe (also known as a FIFO).
+The file is a named pipe (also known as a FIFO).
@item "file"
The file is just a regular file.
@@ -33239,7 +33234,7 @@ For some other systems, @dfn{a priori} knowledge is used to provide
a value. Where no value can be determined, it defaults to 512.
@end table
-Several additional elements may be present depending upon the operating
+Several additional elements may be present, depending upon the operating
system and the type of the file. You can test for them in your @command{awk}
program by using the @code{in} operator
(@pxref{Reference to Elements}):
@@ -33269,7 +33264,7 @@ edited slightly for presentation. See @file{extension/filefuncs.c}
in the @command{gawk} distribution for the complete version.}
The file includes a number of standard header files, and then includes
-the @file{gawkapi.h} header file which provides the API definitions.
+the @file{gawkapi.h} header file, which provides the API definitions.
Those are followed by the necessary variable declarations
to make use of the API macros and boilerplate code
(@pxref{Extension API Boilerplate}):
@@ -33310,9 +33305,9 @@ int plugin_is_GPL_compatible;
@cindex programming conventions, @command{gawk} extensions
By convention, for an @command{awk} function @code{foo()}, the C function
that implements it is called @code{do_foo()}. The function should have
-two arguments: the first is an @code{int} usually called @code{nargs},
+two arguments. The first is an @code{int}, usually called @code{nargs},
that represents the number of actual arguments for the function.
-The second is a pointer to an @code{awk_value_t}, usually named
+The second is a pointer to an @code{awk_value_t} structure, usually named
@code{result}:
@example
@@ -33358,7 +33353,7 @@ Finally, the function returns the return value to the @command{awk} level:
The @code{stat()} extension is more involved. First comes a function
that turns a numeric mode into a printable representation
-(e.g., 644 becomes @samp{-rw-r--r--}). This is omitted here for brevity:
+(e.g., octal @code{0644} becomes @samp{-rw-r--r--}). This is omitted here for brevity:
@example
/* format_mode --- turn a stat mode field into something readable */
@@ -33414,9 +33409,9 @@ array_set_numeric(awk_array_t array, const char *sub, double num)
The following function does most of the work to fill in
the @code{awk_array_t} result array with values obtained
-from a valid @code{struct stat}. It is done in a separate function
+from a valid @code{struct stat}. This work is done in a separate function
to support the @code{stat()} function for @command{gawk} and also
-to support the @code{fts()} extension which is included in
+to support the @code{fts()} extension, which is included in
the same file but whose code is not shown here
(@pxref{Extension Sample File Functions}).
@@ -33537,8 +33532,8 @@ the @code{stat()} system call instead of the @code{lstat()} system
call. This is done by using a function pointer: @code{statfunc}.
@code{statfunc} is initialized to point to @code{lstat()} (instead
of @code{stat()}) to get the file information, in case the file is a
-symbolic link. However, if there were three arguments, @code{statfunc}
-is set point to @code{stat()}, instead.
+symbolic link. However, if the third argument is included, @code{statfunc}
+is set to point to @code{stat()}, instead.
Here is the @code{do_stat()} function, which starts with
variable declarations and argument checking:
@@ -33594,7 +33589,7 @@ Next, it gets the information for the file. If the called function
/* always empty out the array */
clear_array(array);
- /* stat the file, if error, set ERRNO and return */
+ /* stat the file; if error, set ERRNO and return */
ret = statfunc(name, & sbuf);
if (ret < 0) @{
update_ERRNO_int(errno);
@@ -33616,7 +33611,9 @@ Finally, it's necessary to provide the ``glue'' that loads the
new function(s) into @command{gawk}.
The @code{filefuncs} extension also provides an @code{fts()}
-function, which we omit here. For its sake there is an initialization
+function, which we omit here
+(@pxref{Extension Sample File Functions}).
+For its sake, there is an initialization
function:
@example
@@ -33741,9 +33738,9 @@ $ @kbd{AWKLIBPATH=$PWD gawk -f testff.awk}
@section The Sample Extensions in the @command{gawk} Distribution
@cindex extensions distributed with @command{gawk}
-This @value{SECTION} provides brief overviews of the sample extensions
+This @value{SECTION} provides a brief overview of the sample extensions
that come in the @command{gawk} distribution. Some of them are intended
-for production use (e.g., the @code{filefuncs}, @code{readdir} and
+for production use (e.g., the @code{filefuncs}, @code{readdir}, and
@code{inplace} extensions). Others mainly provide example code that
shows how to use the extension API.
@@ -33779,14 +33776,14 @@ This is how you load the extension.
@item @code{result = chdir("/some/directory")}
The @code{chdir()} function is a direct hook to the @code{chdir()}
system call to change the current directory. It returns zero
-upon success or less than zero upon error. In the latter case, it updates
-@code{ERRNO}.
+upon success or a value less than zero upon error.
+In the latter case, it updates @code{ERRNO}.
@cindex @code{stat()} extension function
@item @code{result = stat("/some/path", statdata} [@code{, follow}]@code{)}
The @code{stat()} function provides a hook into the
@code{stat()} system call.
-It returns zero upon success or less than zero upon error.
+It returns zero upon success or a value less than zero upon error.
In the latter case, it updates @code{ERRNO}.
By default, it uses the @code{lstat()} system call. However, if passed
@@ -33813,10 +33810,10 @@ array with information retrieved from the filesystem, as follows:
@item @code{"major"} @tab @code{st_major} @tab Device files
@item @code{"minor"} @tab @code{st_minor} @tab Device files
@item @code{"blksize"} @tab @code{st_blksize} @tab All
-@item @code{"pmode"} @tab A human-readable version of the mode value, such as printed by
-@command{ls}. For example, @code{"-rwxr-xr-x"} @tab All
+@item @code{"pmode"} @tab A human-readable version of the mode value, like that printed by
+@command{ls} (for example, @code{"-rwxr-xr-x"}) @tab All
@item @code{"linkval"} @tab The value of the symbolic link @tab Symbolic links
-@item @code{"type"} @tab The type of the file as a string. One of
+@item @code{"type"} @tab The type of the file as a string---one of
@code{"file"},
@code{"blockdev"},
@code{"chardev"},
@@ -33826,15 +33823,15 @@ array with information retrieved from the filesystem, as follows:
@code{"symlink"},
@code{"door"},
or
-@code{"unknown"}.
-Not all systems support all file types. @tab All
+@code{"unknown"}
+(not all systems support all file types) @tab All
@end multitable
@cindex @code{fts()} extension function
@item @code{flags = or(FTS_PHYSICAL, ...)}
@itemx @code{result = fts(pathlist, flags, filedata)}
Walk the file trees provided in @code{pathlist} and fill in the
-@code{filedata} array as described next. @code{flags} is the bitwise
+@code{filedata} array, as described next. @code{flags} is the bitwise
OR of several predefined values, also described in a moment.
Return zero if there were no errors, otherwise return @minus{}1.
@end table
@@ -33890,7 +33887,8 @@ During a traversal, do not cross onto a different mounted filesystem.
@end table
@item filedata
-The @code{filedata} array is first cleared. Then, @code{fts()} creates
+The @code{filedata} array holds the results.
+@code{fts()} first clears it. Then it creates
an element in @code{filedata} for every element in @code{pathlist}.
The index is the name of the directory or file given in @code{pathlist}.
The element for this index is itself an array. There are two cases:
@@ -33932,7 +33930,7 @@ for a file: @code{"path"}, @code{"stat"}, and @code{"error"}.
@end table
The @code{fts()} function returns zero if there were no errors.
-Otherwise it returns @minus{}1.
+Otherwise, it returns @minus{}1.
@quotation NOTE
The @code{fts()} extension does not exactly mimic the
@@ -33974,14 +33972,14 @@ The arguments to @code{fnmatch()} are:
@table @code
@item pattern
-The @value{FN} wildcard to match.
+The @value{FN} wildcard to match
@item string
-The @value{FN} string.
+The @value{FN} string
@item flag
Either zero, or the bitwise OR of one or more of the
-flags in the @code{FNM} array.
+flags in the @code{FNM} array
@end table
The flags are as follows:
@@ -34018,14 +34016,14 @@ This is how you load the extension.
@cindex @code{fork()} extension function
@item pid = fork()
This function creates a new process. The return value is zero in the
-child and the process-ID number of the child in the parent, or @minus{}1
+child and the process ID number of the child in the parent, or @minus{}1
upon error. In the latter case, @code{ERRNO} indicates the problem.
In the child, @code{PROCINFO["pid"]} and @code{PROCINFO["ppid"]} are
updated to reflect the correct values.
@cindex @code{waitpid()} extension function
@item ret = waitpid(pid)
-This function takes a numeric argument, which is the process-ID to
+This function takes a numeric argument, which is the process ID to
wait for. The return value is that of the
@code{waitpid()} system call.
@@ -34053,8 +34051,8 @@ else
@subsection Enabling In-Place File Editing
@cindex @code{inplace} extension
-The @code{inplace} extension emulates GNU @command{sed}'s @option{-i} option
-which performs ``in place'' editing of each input file.
+The @code{inplace} extension emulates GNU @command{sed}'s @option{-i} option,
+which performs ``in-place'' editing of each input file.
It uses the bundled @file{inplace.awk} include file to invoke the extension
properly:
@@ -34068,11 +34066,16 @@ properly:
# Please set INPLACE_SUFFIX to make a backup copy. For example, you may
# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# actions in an ENDFILE rule will be redirected as expected.
+
BEGINFILE @{
- inplace_begin(FILENAME, INPLACE_SUFFIX)
+ if (_inplace_filename != "")
+ inplace_end(_inplace_filename, INPLACE_SUFFIX)
+ inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
@}
-ENDFILE @{
+END @{
inplace_end(FILENAME, INPLACE_SUFFIX)
@}
@end group
@@ -34087,6 +34090,10 @@ If @code{INPLACE_SUFFIX} is not an empty string, the original file is
linked to a backup @value{FN} created by appending that suffix. Finally,
the temporary file is renamed to the original @value{FN}.
+The @code{_inplace_filename} variable serves to keep track of the
+current filename so as to not invoke @code{inplace_end()} before
+processing the first file.
+
If any error occurs, the extension issues a fatal error to terminate
processing immediately without damaging the original file.
@@ -34150,14 +34157,14 @@ they are read, with each entry returned as a record.
The record consists of three fields. The first two are the inode number and the
@value{FN}, separated by a forward slash character.
On systems where the directory entry contains the file type, the record
-has a third field (also separated by a slash) which is a single letter
+has a third field (also separated by a slash), which is a single letter
indicating the type of the file. The letters and their corresponding file
types are shown in @ref{table-readdir-file-types}.
@float Table,table-readdir-file-types
@caption{File types returned by the @code{readdir} extension}
@multitable @columnfractions .1 .9
-@headitem Letter @tab File Type
+@headitem Letter @tab File type
@item @code{b} @tab Block device
@item @code{c} @tab Character device
@item @code{d} @tab Directory
@@ -34185,7 +34192,7 @@ Here is an example:
@@load "readdir"
@dots{}
BEGIN @{ FS = "/" @}
-@{ print "file name is", $2 @}
+@{ print "@value{FN} is", $2 @}
@end example
@node Extension Sample Revout
@@ -34206,8 +34213,7 @@ BEGIN @{
@}
@end example
-The output from this program is:
-@samp{cinap t'nod}.
+The output from this program is @samp{cinap t'nod}.
@node Extension Sample Rev2way
@subsection Two-Way I/O Example
@@ -34262,7 +34268,7 @@ success, or zero upon failure.
@code{reada()} is the inverse of @code{writea()};
it reads the file named as its first argument, filling in
the array named as the second argument. It clears the array first.
-Here too, the return value is one on success and zero upon failure.
+Here too, the return value is one on success, or zero upon failure.
@end table
The array created by @code{reada()} is identical to that written by
@@ -34350,7 +34356,7 @@ it tries to use @code{GetSystemTimeAsFileTime()}.
Attempt to sleep for @var{seconds} seconds. If @var{seconds} is negative,
or the attempt to sleep fails, return @minus{}1 and set @code{ERRNO}.
Otherwise, return zero after sleeping for the indicated amount of time.
-Note that @var{seconds} may be a floating-point (non-integral) value.
+Note that @var{seconds} may be a floating-point (nonintegral) value.
Implementation details: depending on platform availability, this function
tries to use @code{nanosleep()} or @code{select()} to implement the delay.
@end table
@@ -34377,25 +34383,31 @@ project provides a number of @command{gawk} extensions, including one for
processing XML files. This is the evolution of the original @command{xgawk}
(XML @command{gawk}) project.
-As of this writing, there are six extensions:
+As of this writing, there are seven extensions:
@itemize @value{BULLET}
@item
+@code{errno} extension
+
+@item
GD graphics library extension
@item
+MPFR library extension
+(this provides access to a number of MPFR functions that @command{gawk}'s
+native MPFR support does not)
+
+@item
PDF extension
@item
PostgreSQL extension
@item
-MPFR library extension
-(this provides access to a number of MPFR functions which @command{gawk}'s
-native MPFR support does not)
+Redis extension
@item
-Redis extension
+Select extension
@item
XML parser extension, using the @uref{http://expat.sourceforge.net, Expat}
@@ -34445,7 +34457,7 @@ make install @ii{Install the extensions}
If you have installed @command{gawk} in the standard way, then you
will likely not need the @option{--with-gawk} option when configuring
-@code{gawkextlib}. You may also need to use the @command{sudo} utility
+@code{gawkextlib}. You may need to use the @command{sudo} utility
to install both @command{gawk} and @code{gawkextlib}, depending upon
how your system works.
@@ -34470,7 +34482,7 @@ named @code{plugin_is_GPL_compatible}.
@item
Communication between @command{gawk} and an extension is two-way.
-@command{gawk} passes a @code{struct} to the extension which contains
+@command{gawk} passes a @code{struct} to the extension that contains
various data fields and function pointers. The extension can then call
into @command{gawk} via the supplied function pointers to accomplish
certain tasks.
@@ -34483,7 +34495,7 @@ By convention, implementation functions are named @code{do_@var{XXXX}()}
for some @command{awk}-level function @code{@var{XXXX}()}.
@item
-The API is defined in a header file named @file{gawkpi.h}. You must include
+The API is defined in a header file named @file{gawkapi.h}. You must include
a number of standard header files @emph{before} including it in your source file.
@item
@@ -34528,7 +34540,7 @@ getting the count of elements in an array;
creating a new array;
clearing an array;
and
-flattening an array for easy C style looping over all its indices and elements)
+flattening an array for easy C-style looping over all its indices and elements)
@end itemize
@item
@@ -34536,7 +34548,7 @@ The API defines a number of standard data types for representing
@command{awk} values, array elements, and arrays.
@item
-The API provide convenience functions for constructing values.
+The API provides convenience functions for constructing values.
It also provides memory management functions to ensure compatibility
between memory allocated by @command{gawk} and memory allocated by an
extension.
@@ -34562,8 +34574,8 @@ file make this easier to do.
@item
The @command{gawk} distribution includes a number of small but useful
-sample extensions. The @code{gawkextlib} project includes several more,
-larger, extensions. If you wish to write an extension and contribute it
+sample extensions. The @code{gawkextlib} project includes several more
+(larger) extensions. If you wish to write an extension and contribute it
to the community of @command{gawk} users, the @code{gawkextlib} project
is the place to do so.
@@ -34579,6 +34591,24 @@ Add functions to implement system calls such as @code{chown()},
@code{chmod()}, and @code{umask()} to the file operations extension
presented in @ref{Internal File Ops}.
+@c Idea from comp.lang.awk, February 2015
+@item
+Write an input parser that prints a prompt if the input is
+a from a ``terminal'' device. You can use the @code{isatty()}
+function to tell if the input file is a terminal. (Hint: this function
+is usually expensive to call; try to call it just once.)
+The content of the prompt should come from a variable settable
+by @command{awk}-level code.
+You can write the prompt to stanard error. However,
+for best results, open a new file descriptor (or file pointer)
+on @file{/dev/tty} and print the prompt there, in case standard
+error has been redirected.
+
+Why is standard error a better
+choice than standard output for writing the prompt?
+Which reading mechanism should you replace, the one to get
+a record, or the one to read raw bytes?
+
@item
(Hard.)
How would you provide namespaces in @command{gawk}, so that the
@@ -34680,9 +34710,7 @@ online documentation}.
@node V7/SVR3.1
@appendixsec Major Changes Between V7 and SVR3.1
-@c STARTOFRANGE gawkv
@cindex @command{awk}, versions of
-@c STARTOFRANGE gawkv1
@cindex @command{awk}, versions of, changes between V7 and SVR3.1
The @command{awk} language evolved considerably between the release of
@@ -34693,83 +34721,82 @@ cross-references to further details:
@itemize @value{BULLET}
@item
The requirement for @samp{;} to separate rules on a line
-(@pxref{Statements/Lines}).
+(@pxref{Statements/Lines})
@item
User-defined functions and the @code{return} statement
-(@pxref{User-defined}).
+(@pxref{User-defined})
@item
The @code{delete} statement (@pxref{Delete}).
@item
The @code{do}-@code{while} statement
-(@pxref{Do Statement}).
+(@pxref{Do Statement})
@item
The built-in functions @code{atan2()}, @code{cos()}, @code{sin()}, @code{rand()}, and
-@code{srand()} (@pxref{Numeric Functions}).
+@code{srand()} (@pxref{Numeric Functions})
@item
The built-in functions @code{gsub()}, @code{sub()}, and @code{match()}
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
The built-in functions @code{close()} and @code{system()}
-(@pxref{I/O Functions}).
+(@pxref{I/O Functions})
@item
The @code{ARGC}, @code{ARGV}, @code{FNR}, @code{RLENGTH}, @code{RSTART},
-and @code{SUBSEP} predefined variables (@pxref{Built-in Variables}).
+and @code{SUBSEP} predefined variables (@pxref{Built-in Variables})
@item
-Assignable @code{$0} (@pxref{Changing Fields}).
+Assignable @code{$0} (@pxref{Changing Fields})
@item
The conditional expression using the ternary operator @samp{?:}
-(@pxref{Conditional Exp}).
+(@pxref{Conditional Exp})
@item
-The expression @samp{@var{index-variable} in @var{array}} outside of @code{for}
-statements (@pxref{Reference to Elements}).
+The expression @samp{@var{indx} in @var{array}} outside of @code{for}
+statements (@pxref{Reference to Elements})
@item
The exponentiation operator @samp{^}
(@pxref{Arithmetic Ops}) and its assignment operator
-form @samp{^=} (@pxref{Assignment Ops}).
+form @samp{^=} (@pxref{Assignment Ops})
@item
C-compatible operator precedence, which breaks some old @command{awk}
-programs (@pxref{Precedence}).
+programs (@pxref{Precedence})
@item
Regexps as the value of @code{FS}
(@pxref{Field Separators}) and as the
third argument to the @code{split()} function
(@pxref{String Functions}), rather than using only the first character
-of @code{FS}.
+of @code{FS}
@item
Dynamic regexps as operands of the @samp{~} and @samp{!~} operators
-(@pxref{Computed Regexps}).
+(@pxref{Computed Regexps})
@item
The escape sequences @samp{\b}, @samp{\f}, and @samp{\r}
-(@pxref{Escape Sequences}).
+(@pxref{Escape Sequences})
@item
Redirection of input for the @code{getline} function
-(@pxref{Getline}).
+(@pxref{Getline})
@item
Multiple @code{BEGIN} and @code{END} rules
-(@pxref{BEGIN/END}).
+(@pxref{BEGIN/END})
@item
Multidimensional arrays
-(@pxref{Multidimensional}).
+(@pxref{Multidimensional})
@end itemize
-@c ENDOFRANGE gawkv1
@node SVR4
@appendixsec Changes Between SVR3.1 and SVR4
@@ -34780,54 +34807,54 @@ The System V Release 4 (1989) version of Unix @command{awk} added these features
@itemize @value{BULLET}
@item
-The @code{ENVIRON} array (@pxref{Built-in Variables}).
+The @code{ENVIRON} array (@pxref{Built-in Variables})
@c gawk and MKS awk
@item
Multiple @option{-f} options on the command line
-(@pxref{Options}).
+(@pxref{Options})
@c MKS awk
@item
The @option{-v} option for assigning variables before program execution begins
-(@pxref{Options}).
+(@pxref{Options})
@c GNU, Bell Laboratories & MKS together
@item
-The @option{--} signal for terminating command-line options.
+The @option{--} signal for terminating command-line options
@item
The @samp{\a}, @samp{\v}, and @samp{\x} escape sequences
-(@pxref{Escape Sequences}).
+(@pxref{Escape Sequences})
@c GNU, for ANSI C compat
@item
A defined return value for the @code{srand()} built-in function
-(@pxref{Numeric Functions}).
+(@pxref{Numeric Functions})
@item
The @code{toupper()} and @code{tolower()} built-in string functions
for case translation
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
A cleaner specification for the @samp{%c} format-control letter in the
@code{printf} function
-(@pxref{Control Letters}).
+(@pxref{Control Letters})
@item
The ability to dynamically pass the field width and precision (@code{"%*.*d"})
in the argument list of @code{printf} and @code{sprintf()}
-(@pxref{Control Letters}).
+(@pxref{Control Letters})
@item
The use of regexp constants, such as @code{/foo/}, as expressions, where
they are equivalent to using the matching operator, as in @samp{$0 ~ /foo/}
-(@pxref{Using Constant Regexps}).
+(@pxref{Using Constant Regexps})
@item
Processing of escape sequences inside command-line variable assignments
-(@pxref{Assignment Options}).
+(@pxref{Assignment Options})
@end itemize
@node POSIX
@@ -34841,23 +34868,23 @@ introduced the following changes into the language:
@itemize @value{BULLET}
@item
The use of @option{-W} for implementation-specific options
-(@pxref{Options}).
+(@pxref{Options})
@item
The use of @code{CONVFMT} for controlling the conversion of numbers
-to strings (@pxref{Conversion}).
+to strings (@pxref{Conversion})
@item
The concept of a numeric string and tighter comparison rules to go
-with it (@pxref{Typing and Comparison}).
+with it (@pxref{Typing and Comparison})
@item
The use of predefined variables as function parameter names is forbidden
-(@pxref{Definition Syntax}).
+(@pxref{Definition Syntax})
@item
More complete documentation of many of the previously undocumented
-features of the language.
+features of the language
@end itemize
In 2012, a number of extensions that had been commonly available for
@@ -34866,15 +34893,15 @@ many years were finally added to POSIX. They are:
@itemize @value{BULLET}
@item
The @code{fflush()} built-in function for flushing buffered output
-(@pxref{I/O Functions}).
+(@pxref{I/O Functions})
@item
The @code{nextfile} statement
-(@pxref{Nextfile Statement}).
+(@pxref{Nextfile Statement})
@item
The ability to delete all of an array at once with @samp{delete @var{array}}
-(@pxref{Delete}).
+(@pxref{Delete})
@end itemize
@@ -34884,7 +34911,6 @@ not permitted by the POSIX standard.
The 2008 POSIX standard can be found online at
@url{http://www.opengroup.org/onlinepubs/9699919799/}.
-@c ENDOFRANGE gawkv
@node BTL
@appendixsec Extensions in Brian Kernighan's @command{awk}
@@ -34905,22 +34931,22 @@ originally appeared in his version of @command{awk}:
The @samp{**} and @samp{**=} operators
(@pxref{Arithmetic Ops}
and
-@ref{Assignment Ops}).
+@ref{Assignment Ops})
@item
The use of @code{func} as an abbreviation for @code{function}
-(@pxref{Definition Syntax}).
+(@pxref{Definition Syntax})
@item
The @code{fflush()} built-in function for flushing buffered output
-(@pxref{I/O Functions}).
+(@pxref{I/O Functions})
@ignore
@item
The @code{SYMTAB} array, that allows access to @command{awk}'s internal symbol
table. This feature was never documented for his @command{awk}, largely because
it is somewhat shakily implemented. For instance, you cannot access arrays
-or array elements through it.
+or array elements through it
@end ignore
@end itemize
@@ -34930,11 +34956,8 @@ available in his @command{awk}.
@node POSIX/GNU
@appendixsec Extensions in @command{gawk} Not in POSIX @command{awk}
-@c STARTOFRANGE fripls
@cindex compatibility mode (@command{gawk}), extensions
-@c STARTOFRANGE exgnot
@cindex extensions, in @command{gawk}, not in POSIX @command{awk}
-@c STARTOFRANGE posnot
@cindex POSIX, @command{gawk} extensions not included in
The GNU implementation, @command{gawk}, adds a large number of features.
They can all be disabled with either the @option{--traditional} or
@@ -34953,7 +34976,7 @@ Additional predefined variables:
@itemize @value{MINUS}
@item
The
-@code{ARGIND}
+@code{ARGIND},
@code{BINMODE},
@code{ERRNO},
@code{FIELDWIDTHS},
@@ -34965,7 +34988,7 @@ The
and
@code{TEXTDOMAIN}
variables
-(@pxref{Built-in Variables}).
+(@pxref{Built-in Variables})
@end itemize
@item
@@ -34973,15 +34996,15 @@ Special files in I/O redirections:
@itemize @value{MINUS}
@item
-The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr} and
+The @file{/dev/stdin}, @file{/dev/stdout}, @file{/dev/stderr}, and
@file{/dev/fd/@var{N}} special @value{FN}s
-(@pxref{Special Files}).
+(@pxref{Special Files})
@item
The @file{/inet}, @file{/inet4}, and @samp{/inet6} special files for
TCP/IP networking using @samp{|&} to specify which version of the
IP protocol to use
-(@pxref{TCP/IP Networking}).
+(@pxref{TCP/IP Networking})
@end itemize
@item
@@ -34990,37 +35013,41 @@ Changes and/or additions to the language:
@itemize @value{MINUS}
@item
The @samp{\x} escape sequence
-(@pxref{Escape Sequences}).
+(@pxref{Escape Sequences})
@item
Full support for both POSIX and GNU regexps
-(@pxref{Regexp}).
+(@pxref{Regexp})
@item
The ability for @code{FS} and for the third
argument to @code{split()} to be null strings
-(@pxref{Single Character Fields}).
+(@pxref{Single Character Fields})
@item
The ability for @code{RS} to be a regexp
-(@pxref{Records}).
+(@pxref{Records})
@item
The ability to use octal and hexadecimal constants in @command{awk}
program source code
-(@pxref{Nondecimal-numbers}).
+(@pxref{Nondecimal-numbers})
@item
The @samp{|&} operator for two-way I/O to a coprocess
-(@pxref{Two-way I/O}).
+(@pxref{Two-way I/O})
@item
Indirect function calls
-(@pxref{Indirect Calls}).
+(@pxref{Indirect Calls})
@item
Directories on the command line produce a warning and are skipped
-(@pxref{Command-line directories}).
+(@pxref{Command-line directories})
+
+@item
+Output with @code{print} and @code{printf} need not be fatal
+(@pxref{Nonfatal})
@end itemize
@item
@@ -35029,11 +35056,11 @@ New keywords:
@itemize @value{MINUS}
@item
The @code{BEGINFILE} and @code{ENDFILE} special patterns
-(@pxref{BEGINFILE/ENDFILE}).
+(@pxref{BEGINFILE/ENDFILE})
@item
The @code{switch} statement
-(@pxref{Switch Statement}).
+(@pxref{Switch Statement})
@end itemize
@item
@@ -35043,30 +35070,30 @@ Changes to standard @command{awk} functions:
@item
The optional second argument to @code{close()} that allows closing one end
of a two-way pipe to a coprocess
-(@pxref{Two-way I/O}).
+(@pxref{Two-way I/O})
@item
-POSIX compliance for @code{gsub()} and @code{sub()} with @option{--posix}.
+POSIX compliance for @code{gsub()} and @code{sub()} with @option{--posix}
@item
The @code{length()} function accepts an array argument
and returns the number of elements in the array
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
The optional third argument to the @code{match()} function
for capturing text-matching subexpressions within a regexp
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
Positional specifiers in @code{printf} formats for
making translations easier
-(@pxref{Printf Ordering}).
+(@pxref{Printf Ordering})
@item
The @code{split()} function's additional optional fourth
-argument which is an array to hold the text of the field separators
-(@pxref{String Functions}).
+argument, which is an array to hold the text of the field separators
+(@pxref{String Functions})
@end itemize
@item
@@ -35076,16 +35103,16 @@ Additional functions only in @command{gawk}:
@item
The @code{gensub()}, @code{patsplit()}, and @code{strtonum()} functions
for more powerful text manipulation
-(@pxref{String Functions}).
+(@pxref{String Functions})
@item
The @code{asort()} and @code{asorti()} functions for sorting arrays
-(@pxref{Array Sorting}).
+(@pxref{Array Sorting})
@item
The @code{mktime()}, @code{systime()}, and @code{strftime()}
functions for working with timestamps
-(@pxref{Time Functions}).
+(@pxref{Time Functions})
@item
The
@@ -35097,17 +35124,22 @@ The
and
@code{xor()}
functions for bit manipulation
-(@pxref{Bitwise Functions}).
+(@pxref{Bitwise Functions})
@c In 4.1, and(), or() and xor() grew the ability to take > 2 arguments
@item
The @code{isarray()} function to check if a variable is an array or not
-(@pxref{Type Functions}).
+(@pxref{Type Functions})
@item
-The @code{bindtextdomain()}, @code{dcgettext()} and @code{dcngettext()}
+The @code{bindtextdomain()}, @code{dcgettext()}, and @code{dcngettext()}
functions for internationalization
-(@pxref{Programmer i18n}).
+(@pxref{Programmer i18n})
+
+@item
+The @code{intdiv()} function for doing integer
+division and remainder
+(@pxref{Numeric Functions})
@end itemize
@item
@@ -35117,12 +35149,12 @@ Changes and/or additions in the command-line options:
@item
The @env{AWKPATH} environment variable for specifying a path search for
the @option{-f} command-line option
-(@pxref{Options}).
+(@pxref{Options})
@item
The @env{AWKLIBPATH} environment variable for specifying a path search for
the @option{-l} command-line option
-(@pxref{Options}).
+(@pxref{Options})
@item
The
@@ -35151,7 +35183,7 @@ The
and
@option{-V}
short options. Also, the
-ability to use GNU-style long-named options that start with @option{--}
+ability to use GNU-style long-named options that start with @option{--},
and the
@option{--assign},
@option{--bignum},
@@ -35231,7 +35263,7 @@ GCC for VAX and Alpha has not been tested for a while.
@end itemize
@item
-Support for the following obsolete systems was removed from the code
+Support for the following obsolete system was removed from the code
for @command{gawk} @value{PVERSION} 4.1:
@c nested table
@@ -35241,16 +35273,19 @@ Ultrix
@end itemize
@item
-@c FIXME: Verify the version here.
-Support for MirBSD was removed at @command{gawk} @value{PVERSION} 4.2.
+Support for the following systems was removed from the code
+for @command{gawk} @value{PVERSION} 4.2:
+
+@c nested table
+@itemize @value{MINUS}
+@item
+MirBSD
+@end itemize
@end itemize
@c XXX ADD MORE STUFF HERE
-@c ENDOFRANGE fripls
-@c ENDOFRANGE exgnot
-@c ENDOFRANGE posnot
@c This does not need to be in the formal book.
@ifclear FOR_PRINT
@@ -35859,6 +35894,44 @@ with a minimum of two
The dynamic extension interface was completely redone
(@pxref{Dynamic Extensions}).
+@item
+Support for Ultrix was removed.
+
+@end itemize
+
+Version 4.2 introduced the following changes:
+
+@itemize @bullet
+@item
+Changes to @code{ENVIRON} are reflected into @command{gawk}'s
+environment and that of programs that it runs.
+@xref{Auto-set}.
+
+@item
+The @option{--pretty-print} option no longer runs the @command{awk}
+program too.
+@xref{Options}.
+
+@item
+The @command{igawk} program and its manual page are no longer
+installed when @command{gawk} is built.
+@xref{Igawk Program}.
+
+@item
+The @code{intdiv()} function.
+@xref{Numeric Functions}.
+
+@item
+The maximum number of hexdecimal digits in @samp{\x} escapes
+is now two.
+@xref{Escape Sequences}.
+
+@item
+Nonfatal output with @code{print} and @code{printf}.
+@xref{Nonfatal}.
+
+@item
+Support for MirBSD was removed.
@end itemize
@c XXX ADD MORE STUFF HERE
@@ -35874,9 +35947,9 @@ by @command{gawk}, Brian Kernighan's @command{awk}, and @command{mawk},
the three most widely used freely available versions of @command{awk}
(@pxref{Other Versions}).
-@multitable {@file{/dev/stderr} special file} {BWK Awk} {Mawk} {GNU Awk} {Now standard}
-@headitem Feature @tab BWK Awk @tab Mawk @tab GNU Awk @tab Now standard
-@item @samp{\x} Escape sequence @tab X @tab X @tab X @tab
+@multitable {@file{/dev/stderr} special file} {BWK @command{awk}} {@command{mawk}} {@command{gawk}} {Now standard}
+@headitem Feature @tab BWK @command{awk} @tab @command{mawk} @tab @command{gawk} @tab Now standard
+@item @samp{\x} escape sequence @tab X @tab X @tab X @tab
@item @code{FS} as null string @tab X @tab X @tab X @tab
@item @file{/dev/stdin} special file @tab X @tab X @tab X @tab
@item @file{/dev/stdout} special file @tab X @tab X @tab X @tab
@@ -35907,7 +35980,7 @@ in the machine's native character set. Thus, on ASCII-based systems,
@samp{[a-z]} matched all the lowercase letters, and only the lowercase
letters, as the numeric values for the letters from @samp{a} through
@samp{z} were contiguous. (On an EBCDIC system, the range @samp{[a-z]}
-includes additional, non-alphabetic characters as well.)
+includes additional nonalphabetic characters as well.)
Almost all introductory Unix literature explained range expressions
as working in this fashion, and in particular, would teach that the
@@ -35932,7 +36005,7 @@ What does that mean?
In many locales, @samp{A} and @samp{a} are both less than @samp{B}.
In other words, these locales sort characters in dictionary order,
and @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
-instead it might be equivalent to @samp{[ABCXYabcdxyz]}, for example.
+instead, it might be equivalent to @samp{[ABCXYabcdxyz]}, for example.
This point needs to be emphasized: much literature teaches that you should
use @samp{[a-z]} to match a lowercase character. But on systems with
@@ -35961,23 +36034,23 @@ is perfectly valid in ASCII, but is not valid in many Unicode locales,
such as @code{en_US.UTF-8}.
Early versions of @command{gawk} used regexp matching code that was not
-locale aware, so ranges had their traditional interpretation.
+locale-aware, so ranges had their traditional interpretation.
When @command{gawk} switched to using locale-aware regexp matchers,
the problems began; especially as both GNU/Linux and commercial Unix
vendors started implementing non-ASCII locales, @emph{and making them
the default}. Perhaps the most frequently asked question became something
-like ``why does @samp{[A-Z]} match lowercase letters?!?''
+like, ``Why does @samp{[A-Z]} match lowercase letters?!?''
@cindex Berry, Karl
This situation existed for close to 10 years, if not more, and
the @command{gawk} maintainer grew weary of trying to explain that
-@command{gawk} was being nicely standards compliant, and that the issue
+@command{gawk} was being nicely standards-compliant, and that the issue
was in the user's locale. During the development of @value{PVERSION} 4.0,
he modified @command{gawk} to always treat ranges in the original,
pre-POSIX fashion, unless @option{--posix} was used (@pxref{Options}).@footnote{And
thus was born the Campaign for Rational Range Interpretation (or
-RRI). A number of GNU tools have either implemented this change,
+RRI). A number of GNU tools have already implemented this change,
or will soon. Thanks to Karl Berry for coining the phrase ``Rational
Range Interpretation.''}
@@ -35991,9 +36064,10 @@ and
By using this lovely technical term, the standard gives license
to implementors to implement ranges in whatever way they choose.
-The @command{gawk} maintainer chose to apply the pre-POSIX meaning in all
-cases: the default regexp matching; with @option{--traditional} and with
-@option{--posix}; in all cases, @command{gawk} remains POSIX compliant.
+The @command{gawk} maintainer chose to apply the pre-POSIX meaning
+both with the default regexp matching and when @option{--traditional} or
+@option{--posix} are used.
+In all cases @command{gawk} remains POSIX-compliant.
@node Contributors
@appendixsec Major Contributors to @command{gawk}
@@ -36039,7 +36113,7 @@ to around 90 pages.
Richard Stallman
helped finish the implementation and the initial draft of this
@value{DOCUMENT}.
-He is also the founder of the FSF and the GNU project.
+He is also the founder of the FSF and the GNU Project.
@item
@cindex Woods, John
@@ -36203,28 +36277,28 @@ John Haque made the following contributions:
@itemize @value{MINUS}
@item
The modifications to convert @command{gawk}
-into a byte-code interpreter, including the debugger.
+into a byte-code interpreter, including the debugger
@item
-The addition of true arrays of arrays.
+The addition of true arrays of arrays
@item
-The additional modifications for support of arbitrary-precision arithmetic.
+The additional modifications for support of arbitrary-precision arithmetic
@item
The initial text of
-@ref{Arbitrary Precision Arithmetic}.
+@ref{Arbitrary Precision Arithmetic}
@item
The work to merge the three versions of @command{gawk}
-into one, for the 4.1 release.
+into one, for the 4.1 release
@item
-Improved array internals for arrays indexed by integers.
+Improved array internals for arrays indexed by integers
@item
-The improved array sorting features were driven by John together
-with Pat Rankin.
+The improved array sorting features were also driven by John, together
+with Pat Rankin
@end itemize
@cindex Papadopoulos, Panos
@@ -36265,10 +36339,10 @@ helping David Trueman, and as the primary maintainer since around 1994.
@itemize @value{BULLET}
@item
The @command{awk} language has evolved over time. The first release
-was with V7 Unix circa 1978. In 1987, for System V Release 3.1,
+was with V7 Unix, circa 1978. In 1987, for System V Release 3.1,
major additions, including user-defined functions, were made to the language.
Additional changes were made for System V Release 4, in 1989.
-Since then, further minor changes happen under the auspices of the
+Since then, further minor changes have happened under the auspices of the
POSIX standard.
@item
@@ -36284,7 +36358,7 @@ options.
The interaction of POSIX locales and regexp matching in @command{gawk} has been confusing over
the years. Today, @command{gawk} implements Rational Range Interpretation, where
ranges of the form @samp{[a-z]} match @emph{only} the characters numerically between
-@samp{a} through @samp{z} in the machine's native character set. Usually this is ASCII
+@samp{a} through @samp{z} in the machine's native character set. Usually this is ASCII,
but it can be EBCDIC on IBM S/390 systems.
@item
@@ -36299,9 +36373,7 @@ the appropriate credit where credit is due.
@c last two commas are part of see also
@cindex operating systems, See Also GNU/Linux@comma{} PC operating systems@comma{} Unix
-@c STARTOFRANGE gligawk
@cindex @command{gawk}, installing
-@c STARTOFRANGE ingawk
@cindex installing @command{gawk}
This appendix provides instructions for installing @command{gawk} on the
various platforms that are supported by the developers. The primary
@@ -36371,7 +36443,7 @@ will be less busy, and you can usually find one closer to your site.
@command{gawk} is distributed as several @code{tar} files compressed with
different compression programs: @command{gzip}, @command{bzip2},
and @command{xz}. For simplicity, the rest of these instructions assume
-you are using the one compressed with the GNU Zip program, @code{gzip}.
+you are using the one compressed with the GNU Gzip program (@command{gzip}).
Once you have the distribution (e.g.,
@file{gawk-@value{VERSION}.@value{PATCHLEVEL}.tar.gz}),
@@ -36411,7 +36483,6 @@ a local expert.
@node Distribution contents
@appendixsubsec Contents of the @command{gawk} Distribution
-@c STARTOFRANGE gawdis
@cindex @command{gawk}, distribution
The @command{gawk} distribution has a number of C source files,
@@ -36423,12 +36494,12 @@ operating systems:
@table @asis
@item Various @samp{.c}, @samp{.y}, and @samp{.h} files
-The actual @command{gawk} source code.
+These files contain the actual @command{gawk} source code.
@end table
@table @file
@item ABOUT-NLS
-Information about GNU @command{gettext} and translations.
+A file containing information about GNU @command{gettext} and translations.
@item AUTHORS
A file with some information about the authorship of @command{gawk}.
@@ -36458,7 +36529,7 @@ An older list of changes to @command{gawk}.
The GNU General Public License.
@item POSIX.STD
-A description of behaviors in the POSIX standard for @command{awk} which
+A description of behaviors in the POSIX standard for @command{awk} that
are left undefined, or where @command{gawk} may not comply fully, as well
as a list of things that the POSIX standard should describe but does not.
@@ -36509,10 +36580,10 @@ The generated Info file for this @value{DOCUMENT}.
@item doc/gawkinet.texi
The Texinfo source file for
@ifinfo
-@inforef{Top, , General Introduction, gawkinet, TCP/IP Internetworking with @command{gawk}}.
+@inforef{Top, , General Introduction, gawkinet, @value{GAWKINETTITLE}}.
@end ifinfo
@ifnotinfo
-@cite{TCP/IP Internetworking with @command{gawk}}.
+@cite{@value{GAWKINETTITLE}}.
@end ifnotinfo
It should be processed with @TeX{}
(via @command{texi2dvi} or @command{texi2pdf})
@@ -36521,7 +36592,7 @@ with @command{makeinfo} to produce an Info or HTML file.
@item doc/gawkinet.info
The generated Info file for
-@cite{TCP/IP Internetworking with @command{gawk}}.
+@cite{@value{GAWKINETTITLE}}.
@item doc/igawk.1
The @command{troff} source for a manual page describing the @command{igawk}
@@ -36610,7 +36681,6 @@ directory to run your version of @command{gawk} against the test suite.
If @command{gawk} successfully passes @samp{make check}, then you can
be confident of a successful port.
@end table
-@c ENDOFRANGE gawdis
@node Unix Installation
@appendixsec Compiling and Installing @command{gawk} on Unix-Like Systems
@@ -36761,7 +36831,7 @@ can be configured and compiled.
@cindex @option{--disable-lint} configuration option
@cindex configuration option, @code{--disable-lint}
@item --disable-lint
-Disable all lint checking within @code{gawk}. The
+Disable all lint checking within @command{gawk}. The
@option{--lint} and @option{--lint-old} options
(@pxref{Options})
are accepted, but silently do nothing.
@@ -36769,14 +36839,17 @@ Similarly, setting the @code{LINT} variable
(@pxref{User-modified})
has no effect on the running @command{awk} program.
-When used with GCC's automatic dead-code-elimination, this option
+When used with the GNU Compiler Collection's (GCC's)
+automatic dead-code-elimination, this option
cuts almost 23K bytes off the size of the @command{gawk}
executable on GNU/Linux x86_64 systems. Results on other systems and
with other compilers are likely to vary.
Using this option may bring you some slight performance improvement.
+@quotation CAUTION
Using this option will cause some of the tests in the test suite
to fail. This option may be removed at a later date.
+@end quotation
@cindex @option{--disable-nls} configuration option
@cindex configuration option, @code{--disable-nls}
@@ -36873,10 +36946,10 @@ running MS-DOS, any version of MS-Windows, or OS/2.
running MS-DOS and any version of MS-Windows.
@end ifset
In this @value{SECTION}, the term ``Windows32''
-refers to any of Microsoft Windows-95/98/ME/NT/2000/XP/Vista/7/8.
+refers to any of Microsoft Windows 95/98/ME/NT/2000/XP/Vista/7/8.
The limitations of MS-DOS (and MS-DOS shells under the other operating
-systems) has meant that various ``DOS extenders'' are often used with
+systems) have meant that various ``DOS extenders'' are often used with
programs such as @command{gawk}. The varying capabilities of Microsoft
Windows 3.1 and Windows32 can add to the confusion. For an overview
of the considerations, refer to @file{README_d/README.pc} in
@@ -37075,9 +37148,7 @@ multibyte functionality is not available.
@node PC Using
@appendixsubsubsec Using @command{gawk} on PC Operating Systems
-@c STARTOFRANGE opgawx
@cindex operating systems, PC, @command{gawk} on
-@c STARTOFRANGE pcgawon
@cindex PC operating systems, @command{gawk} on
Under MS-DOS and MS-Windows, the Cygwin and MinGW environments support
@@ -37137,7 +37208,7 @@ Under MS-Windows, OS/2 and MS-DOS,
Under MS-Windows and MS-DOS,
@end ifset
@command{gawk} (and many other text programs) silently
-translate end-of-line @samp{\r\n} to @samp{\n} on input and @samp{\n}
+translates end-of-line @samp{\r\n} to @samp{\n} on input and @samp{\n}
to @samp{\r\n} on output. A special @code{BINMODE} variable @value{COMMONEXT}
allows control over these translations and is interpreted as follows:
@@ -37171,7 +37242,7 @@ Setting @code{BINMODE} for standard input or
standard output is accomplished by using an
appropriate @samp{-v BINMODE=@var{N}} option on the command line.
@code{BINMODE} is set at the time a file or pipe is opened and cannot be
-changed mid-stream.
+changed midstream.
The name @code{BINMODE} was chosen to match @command{mawk}
(@pxref{Other Versions}).
@@ -37227,8 +37298,8 @@ moved into the @code{BEGIN} rule.
@command{gawk} can be built and used ``out of the box'' under MS-Windows
if you are using the @uref{http://www.cygwin.com, Cygwin environment}.
-This environment provides an excellent simulation of GNU/Linux, using the
-GNU tools, such as Bash, the GNU Compiler Collection (GCC), GNU Make,
+This environment provides an excellent simulation of GNU/Linux, using
+Bash, GCC, GNU Make,
and other GNU programs. Compilation and installation for Cygwin is the
same as for a Unix system:
@@ -37247,7 +37318,7 @@ and then the @samp{make} proceeds as usual.
@appendixsubsubsec Using @command{gawk} In The MSYS Environment
In the MSYS environment under MS-Windows, @command{gawk} automatically
-uses binary mode for reading and writing files. Thus there is no
+uses binary mode for reading and writing files. Thus, there is no
need to use the @code{BINMODE} variable.
This can cause problems with other Unix-like components that have
@@ -37311,7 +37382,7 @@ With ODS-5 volumes and extended parsing enabled, the case of the target
parameter may need to be exact.
@command{gawk} has been tested under VAX/VMS 7.3 and Alpha/VMS 7.3-1
-using Compaq C V6.4, and Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.
+using Compaq C V6.4, and under Alpha/VMS 7.3, Alpha/VMS 7.3-2, and IA64/VMS 8.3.
The most recent builds used HP C V7.3 on Alpha VMS 8.3 and both
Alpha and IA64 VMS 8.4 used HP C 7.3.@footnote{The IA64 architecture
is also known as ``Itanium.''}
@@ -37359,7 +37430,7 @@ For VAX:
/name=(as_is,short)
@end example
-Compile time macros need to be defined before the first VMS-supplied
+Compile-time macros need to be defined before the first VMS-supplied
header file is included, as follows:
@example
@@ -37406,7 +37477,7 @@ If your @command{gawk} was installed by a PCSI kit into the
@file{GNV$GNU:[vms_help]gawk.hlp}.
The PCSI kit also installs a @file{GNV$GNU:[vms_bin]gawk_verb.cld} file
-which can be used to add @command{gawk} and @command{awk} as DCL commands.
+that can be used to add @command{gawk} and @command{awk} as DCL commands.
For just the current process you can use:
@@ -37415,7 +37486,7 @@ $ @kbd{set command gnv$gnu:[vms_bin]gawk_verb.cld}
@end example
Or the system manager can use @file{GNV$GNU:[vms_bin]gawk_verb.cld} to
-add the @command{gawk} and @command{awk} to the system wide @samp{DCLTABLES}.
+add the @command{gawk} and @command{awk} to the system-wide @samp{DCLTABLES}.
The DCL syntax is documented in the @file{gawk.hlp} file.
@@ -37481,14 +37552,14 @@ The @code{exit} value is a Unix-style value and is encoded into a VMS exit
status value when the program exits.
The VMS severity bits will be set based on the @code{exit} value.
-A failure is indicated by 1 and VMS sets the @code{ERROR} status.
-A fatal error is indicated by 2 and VMS sets the @code{FATAL} status.
+A failure is indicated by 1, and VMS sets the @code{ERROR} status.
+A fatal error is indicated by 2, and VMS sets the @code{FATAL} status.
All other values will have the @code{SUCCESS} status. The exit value is
encoded to comply with VMS coding standards and will have the
@code{C_FACILITY_NO} of @code{0x350000} with the constant @code{0xA000}
added to the number shifted over by 3 bits to make room for the severity codes.
-To extract the actual @command{gawk} exit code from the VMS status use:
+To extract the actual @command{gawk} exit code from the VMS status, use:
@example
unix_status = (vms_status .and. &x7f8) / 8
@@ -37507,7 +37578,7 @@ VAX/VMS floating point uses unbiased rounding. @xref{Round Function}.
VMS reports time values in GMT unless one of the @code{SYS$TIMEZONE_RULE}
or @code{TZ} logical names is set. Older versions of VMS, such as VAX/VMS
-7.3 do not set these logical names.
+7.3, do not set these logical names.
@c @cindex directory search
@c @cindex path, search
@@ -37525,7 +37596,7 @@ translation and not a multitranslation @code{RMS} searchlist.
The VMS GNV package provides a build environment similar to POSIX with ports
of a collection of open source tools. The @command{gawk} found in the GNV
-base kit is an older port. Currently the GNV project is being reorganized
+base kit is an older port. Currently, the GNV project is being reorganized
to supply individual PCSI packages for each component.
See @w{@uref{https://sourceforge.net/p/gnv/wiki/InstallingGNVPackages/}.}
@@ -37585,8 +37656,6 @@ $ @kbd{gawk :== $sys$common:[syshlp.examples.tcpip.snmp]gawk.exe}
This is apparently @value{PVERSION} 2.15.6, which is extremely old. We
recommend compiling and using the current version.
-@c ENDOFRANGE opgawx
-@c ENDOFRANGE pcgawon
@node Bugs
@appendixsec Reporting Problems and Bugs
@@ -37597,12 +37666,10 @@ recommend compiling and using the current version.
@end quotation
@c the radio show, not the book. :-)
-@c STARTOFRANGE dbugg
@cindex debugging @command{gawk}, bug reports
-@c STARTOFRANGE tblgawb
@cindex troubleshooting, @command{gawk}, bug reports
If you have problems with @command{gawk} or think that you have found a bug,
-report it to the developers; we cannot promise to do anything
+report it to the developers; we cannot promise to do anything,
but we might well want to fix it.
Before reporting a bug, make sure you have really found a genuine bug.
@@ -37612,7 +37679,7 @@ to do something or not, report that too; it's a bug in the documentation!
Before reporting a bug or trying to fix it yourself, try to isolate it
to the smallest possible @command{awk} program and input @value{DF} that
-reproduces the problem. Then send us the program and @value{DF},
+reproduce the problem. Then send us the program and @value{DF},
some idea of what kind of Unix system you're using,
the compiler you used to compile @command{gawk}, and the exact results
@command{gawk} gave you. Also say what you expected to occur; this helps
@@ -37627,7 +37694,7 @@ You can get this information with the command @samp{gawk --version}.
Once you have a precise problem description, send email to
@EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org}.
-The @command{gawk} maintainers subscribe to this address and
+The @command{gawk} maintainers subscribe to this address, and
thus they will receive your bug report.
Although you can send mail to the maintainers directly,
the bug reporting address is preferred because the
@@ -37654,8 +37721,8 @@ bug reporting system, you should also send a copy to
This is for two reasons. First, although some distributions forward
bug reports ``upstream'' to the GNU mailing list, many don't, so there is a good
chance that the @command{gawk} maintainers won't even see the bug report! Second,
-mail to the GNU list is archived, and having everything at the GNU project
-keeps things self-contained and not dependant on other organizations.
+mail to the GNU list is archived, and having everything at the GNU Project
+keeps things self-contained and not dependent on other organizations.
@end quotation
Non-bug suggestions are always welcome as well. If you have questions
@@ -37664,7 +37731,7 @@ features, ask on the bug list; we will try to help you out if we can.
If you find bugs in one of the non-Unix ports of @command{gawk},
send an email to the bug list, with a copy to the
-person who maintains that port. They are named in the following list,
+person who maintains that port. The maintainers are named in the following list,
as well as in the @file{README} file in the @command{gawk} distribution.
Information in the @file{README} file should be considered authoritative
if it conflicts with this @value{DOCUMENT}.
@@ -37679,29 +37746,26 @@ The people maintaining the various @command{gawk} ports are:
@cindex Robbins, Arnold
@cindex Zaretskii, Eli
@multitable {MS-Windows with MinGW} {123456789012345678901234567890123456789001234567890}
-@item Unix and POSIX systems @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}.
+@item Unix and POSIX systems @tab Arnold Robbins, @EMAIL{arnold@@skeeve.com,arnold at skeeve dot com}
-@item MS-DOS with DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net}.
+@item MS-DOS with DJGPP @tab Scott Deifik, @EMAIL{scottd.mail@@sbcglobal.net,scottd dot mail at sbcglobal dot net}
-@item MS-Windows with MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}.
+@item MS-Windows with MinGW @tab Eli Zaretskii, @EMAIL{eliz@@gnu.org,eliz at gnu dot org}
@c Leave this in the print version on purpose.
@c OS/2 is not mentioned anywhere else in the print version though.
-@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}.
+@item OS/2 @tab Andreas Buening, @EMAIL{andreas.buening@@nexgo.de,andreas dot buening at nexgo dot de}
-@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}.
+@item VMS @tab John Malmberg, @EMAIL{wb8tyw@@qsl.net,wb8tyw at qsl.net}
-@item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}.
+@item z/OS (OS/390) @tab Dave Pitts, @EMAIL{dpitts@@cozx.com,dpitts at cozx dot com}
@end multitable
If your bug is also reproducible under Unix, send a copy of your
report to the @EMAIL{bug-gawk@@gnu.org,bug-gawk at gnu dot org} email list as well.
-@c ENDOFRANGE dbugg
-@c ENDOFRANGE tblgawb
@node Other Versions
@appendixsec Other Freely Available @command{awk} Implementations
-@c STARTOFRANGE awkim
@cindex @command{awk}, implementations
@ignore
From: emory!amc.com!brennan (Michael Brennan)
@@ -37713,7 +37777,7 @@ Date: Wed, 4 Sep 1996 08:11:48 -0700 (PDT)
@cindex Brennan, Michael
@ifnotdocbook
@quotation
-@i{It's kind of fun to put comments like this in your awk code.}@*
+@i{It's kind of fun to put comments like this in your awk code:}@*
@ @ @ @ @ @ @code{// Do C++ comments work? answer: yes! of course}
@author Michael Brennan
@end quotation
@@ -37754,14 +37818,14 @@ It is available in several archive formats:
@end table
@cindex @command{git} utility
-You can also retrieve it from Git Hub:
+You can also retrieve it from GitHub:
@example
git clone git://github.com/onetrueawk/awk bwkawk
@end example
@noindent
-This command creates a copy of the @uref{http://www.git-scm.com, Git}
+This command creates a copy of the @uref{http://git-scm.com, Git}
repository in a directory named @file{bwkawk}. If you leave that argument
off the @command{git} command line, the repository copy is created in a
directory named @file{awk}.
@@ -37814,7 +37878,7 @@ for a list of extensions in @command{mawk} that are not in POSIX @command{awk}.
@item @command{awka}
Written by Andrew Sumner,
@command{awka} translates @command{awk} programs into C, compiles them,
-and links them with a library of functions that provides the core
+and links them with a library of functions that provide the core
@command{awk} functionality.
It also has a number of extensions.
@@ -37826,7 +37890,7 @@ To get @command{awka}, go to @url{http://sourceforge.net/projects/awka}.
@c andrewsumner@@yahoo.net
The project seems to be frozen; no new code changes have been made
-since approximately 2003.
+since approximately 2001.
@cindex Beebe, Nelson H.F.@:
@cindex @command{pawk} (profiling version of Brian Kernighan's @command{awk})
@@ -37835,17 +37899,17 @@ since approximately 2003.
Nelson H.F.@: Beebe at the University of Utah has modified
BWK @command{awk} to provide timing and profiling information.
It is different from @command{gawk} with the @option{--profile} option
-(@pxref{Profiling}),
+(@pxref{Profiling})
in that it uses CPU-based profiling, not line-count
profiling. You may find it at either
@uref{ftp://ftp.math.utah.edu/pub/pawk/pawk-20030606.tar.gz}
or
@uref{http://www.math.utah.edu/pub/pawk/pawk-20030606.tar.gz}.
-@item Busybox Awk
-@cindex Busybox Awk
-@cindex source code, Busybox Awk
-Busybox is a GPL-licensed program providing small versions of many
+@item BusyBox @command{awk}
+@cindex BusyBox Awk
+@cindex source code, BusyBox Awk
+BusyBox is a GPL-licensed program providing small versions of many
applications within a single executable. It is aimed at embedded systems.
It includes a full implementation of POSIX @command{awk}. When building
it, be careful not to do @samp{make install} as it will overwrite
@@ -37857,7 +37921,7 @@ information, see the @uref{http://busybox.net, project's home page}.
@cindex source code, Solaris @command{awk}
@item The OpenSolaris POSIX @command{awk}
The versions of @command{awk} in @file{/usr/xpg4/bin} and
-@file{/usr/xpg6/bin} on Solaris are more-or-less POSIX-compliant.
+@file{/usr/xpg6/bin} on Solaris are more or less POSIX-compliant.
They are based on the @command{awk} from Mortice Kern Systems for PCs.
We were able to make this code compile and work under GNU/Linux
with 1--2 hours of work. Making it more generally portable (using
@@ -37898,9 +37962,9 @@ features to Python. See @uref{https://github.com/alecthomas/pawk}
for more information. (This is not related to Nelson Beebe's
modified version of BWK @command{awk}, described earlier.)
-@item @w{QSE Awk}
-@cindex QSE Awk
-@cindex source code, QSE Awk
+@item @w{QSE @command{awk}}
+@cindex QSE @command{awk}
+@cindex source code, QSE @command{awk}
This is an embeddable @command{awk} interpreter. For more information,
see @uref{http://code.google.com/p/qse/} and @uref{http://awk.info/?tools/qse}.
@@ -37919,17 +37983,16 @@ since approximately 2008.
@item Other versions
See also the ``Versions and implementations'' section of the
@uref{http://en.wikipedia.org/wiki/Awk_language#Versions_and_implementations,
-Wikipedia article} for information on additional versions.
+Wikipedia article} on @command{awk} for information on additional versions.
@end table
-@c ENDOFRANGE awkim
@node Installation summary
@appendixsec Summary
@itemize @value{BULLET}
@item
-The @command{gawk} distribution is available from GNU project's main
+The @command{gawk} distribution is available from the GNU Project's main
distribution site, @code{ftp.gnu.org}. The canonical build recipe is:
@example
@@ -37941,34 +38004,30 @@ cd gawk-@value{VERSION}.@value{PATCHLEVEL}
@item
@command{gawk} may be built on non-POSIX systems as well. The currently
-supported systems are MS-Windows using DJGPP, MSYS, MinGW and Cygwin,
+supported systems are MS-Windows using DJGPP, MSYS, MinGW, and Cygwin,
@ifclear FOR_PRINT
OS/2 using EMX,
@end ifclear
and both Vax/VMS and OpenVMS.
-Instructions for each system are included in this @value{CHAPTER}.
+Instructions for each system are included in this @value{APPENDIX}.
@item
Bug reports should be sent via email to @email{bug-gawk@@gnu.org}.
-Bug reports should be in English, and should include the version of @command{gawk},
-how it was compiled, and a short program and @value{DF} which demonstrate
+Bug reports should be in English and should include the version of @command{gawk},
+how it was compiled, and a short program and @value{DF} that demonstrate
the problem.
@item
There are a number of other freely available @command{awk}
-implementations. Many are POSIX compliant; others are less so.
+implementations. Many are POSIX-compliant; others are less so.
@end itemize
-@c ENDOFRANGE gligawk
-@c ENDOFRANGE ingawk
@ifclear FOR_PRINT
@node Notes
@appendix Implementation Notes
-@c STARTOFRANGE gawii
@cindex @command{gawk}, implementation issues
-@c STARTOFRANGE impis
@cindex implementation issues, @command{gawk}
This appendix contains information mainly of interest to implementers and
@@ -38044,7 +38103,7 @@ However, if you want to modify @command{gawk} and contribute back your
changes, you will probably wish to work with the development version.
To do so, you will need to access the @command{gawk} source code
repository. The code is maintained using the
-@uref{http://git-scm.com/, Git distributed version control system}.
+@uref{http://git-scm.com, Git distributed version control system}.
You will need to install it if your system doesn't have it.
Once you have done so, use the command:
@@ -38073,11 +38132,8 @@ that has a Git plug-in for working with Git repositories.
@node Adding Code
@appendixsubsec Adding New Features
-@c STARTOFRANGE adfgaw
@cindex adding, features to @command{gawk}
-@c STARTOFRANGE fadgaw
@cindex features, adding to @command{gawk}
-@c STARTOFRANGE gawadf
@cindex @command{gawk}, features, adding
You are free to add any new features you like to @command{gawk}.
However, if you want your changes to be incorporated into the @command{gawk}
@@ -38112,7 +38168,7 @@ for information on getting the latest version of @command{gawk}.)
@item
@ifnotinfo
-Follow the @uref{http://www.gnu.org/prep/standards/, @cite{GNU Coding Standards}}.
+Follow the @cite{GNU Coding Standards}.
@end ifnotinfo
@ifinfo
See @inforef{Top, , Version, standards, GNU Coding Standards}.
@@ -38121,7 +38177,7 @@ This document describes how GNU software should be written. If you haven't
read it, please do so, preferably @emph{before} starting to modify @command{gawk}.
(The @cite{GNU Coding Standards} are available from
the GNU Project's
-@uref{http://www.gnu.org/prep/standards_toc.html, website}.
+@uref{http://www.gnu.org/prep/standards/, website}.
Texinfo, Info, and DVI versions are also available.)
@cindex @command{gawk}, coding style in
@@ -38244,9 +38300,6 @@ Although this sounds like a lot of work, please remember that while you
may write the new code, I have to maintain it and support it. If it
isn't possible for me to do that with a minimum of extra work, then I
probably will not.
-@c ENDOFRANGE adfgaw
-@c ENDOFRANGE gawadf
-@c ENDOFRANGE fadgaw
@node New Ports
@appendixsubsec Porting @command{gawk} to a New Operating System
@@ -38380,7 +38433,6 @@ coding style and brace layout that suits your taste.
@node Derived Files
@appendixsubsec Why Generated Files Are Kept In Git
-@c STARTOFRANGE gawkgit
@cindex Git, use of for @command{gawk} source code
@c From emails written March 22, 2012, to the gawk developers list.
@@ -38569,7 +38621,6 @@ wget http://git.savannah.gnu.org/cgit/gawk.git/snapshot/gawk-@var{branchname}.ta
@noindent
to retrieve a snapshot of the given branch.
-@c ENDOFRANGE gawkgit
@node Future Extensions
@appendixsec Probable Future Extensions
@@ -38950,13 +39001,10 @@ of @command{gawk}, but it @emph{will} be removed in the next major release.
@end itemize
-@c ENDOFRANGE impis
-@c ENDOFRANGE gawii
@node Basic Concepts
@appendix Basic Programming Concepts
@cindex programming, concepts
-@c STARTOFRANGE procon
@cindex programming, concepts
This @value{APPENDIX} attempts to define some of the basic concepts
@@ -39194,7 +39242,6 @@ standard for C. This standard became an ISO standard in 1990.
In 1999, a revised ISO C standard was approved and released.
Where it makes sense, POSIX @command{awk} is compatible with 1999 ISO C.
-@c ENDOFRANGE procon
@node Glossary
@unnumbered Glossary
@@ -39245,6 +39292,21 @@ languages.
These standards often become international standards as well. See also
``ISO.''
+@item Argument
+An argument can be two different things. It can be an option or a
+@value{FN} passed to a command while invoking it from the command line, or
+it can be something passed to a @dfn{function} inside a program, e.g.
+inside @command{awk}.
+
+In the latter case, an argument can be passed to a function in two ways.
+Either it is given to the called function by value, i.e., a copy of the
+value of the variable is made available to the called function, but the
+original variable cannot be modified by the function itself; or it is
+given by reference, i.e., a pointer to the interested variable is passed to
+the function, which can then directly modify it. In @command{awk}
+scalars are passed by value, and arrays are passed by reference.
+See ``Pass By Value/Reference.''
+
@item Array
A grouping of multiple values under the same name.
Most languages just provide sequential arrays.
@@ -39286,6 +39348,25 @@ The GNU version of the standard shell
@end ifinfo
See also ``Bourne Shell.''
+@item Binary
+Base-two notation, where the digits are @code{0}--@code{1}. Since
+electronic circuitry works ``naturally'' in base 2 (just think of Off/On),
+everything inside a computer is calculated using base 2. Each digit
+represents the presence (or absence) of a power of 2 and is called a
+@dfn{bit}. So, for example, the base-two number @code{10101} is
+the same as decimal 21, ((1 x 16) + (1 x 4) + (1 x 1)).
+
+Since base-two numbers quickly become
+very long to read and write, they are usually grouped by 3 (i.e., they are
+read as octal numbers), or by 4 (i.e., they are read as hexadecimal
+numbers). There is no direct way to insert base 2 numbers in a C program.
+If need arises, such numbers are usually inserted as octal or hexadecimal
+numbers. The number of base-two digits that fit into registers used for
+representing integer numbers in computers is a rough indication of the
+computing power of the computer itself. Most computers nowadays use 64
+bits for representing integer numbers in their registers, but 32-bit,
+16-bit and 8-bit registers have been widely used in the past.
+@xref{Nondecimal-numbers}.
@item Bit
Short for ``Binary Digit.''
All values in computer memory ultimately reduce to binary digits: values
@@ -39317,6 +39398,19 @@ The characters @samp{@{} and @samp{@}}. Braces are used in
@command{awk} for delimiting actions, compound statements, and function
bodies.
+@item Bracket Expression
+Inside a @dfn{regular expression}, an expression included in square
+brackets, meant to designate a single character as belonging to a
+specified character class. A bracket expression can contain a list of one
+or more characters, like @samp{[abc]}, a range of characters, like
+@samp{[A-Z]}, or a name, delimited by @samp{:}, that designates a known set
+of characters, like @samp{[:digit:]}. The form of bracket expression
+enclosed between @samp{:} is independent of the underlying representation
+of the character themselves, which could utilize the ASCII, ECBDIC, or
+Unicode codesets, depending on the architecture of the computer system, and on
+localization.
+See also ``Regular Expression.''
+
@item Built-in Function
The @command{awk} language provides built-in functions that perform various
numerical, I/O-related, and string computations. Examples are
@@ -39370,9 +39464,25 @@ points out similarities between @command{awk} and C when appropriate.
In general, @command{gawk} attempts to be as similar to the 1990 version
of ISO C as makes sense.
+@item C Shell
+The C Shell (@command{csh} or its improved version, @command{tcsh}) is a Unix shell that was
+created by Bill Joy in the late 1970s. The C shell was differentiated from
+other shells by its interactive features and overall style, which
+looks more like C. The C Shell is not backward compatible with the Bourne
+Shell, so special attention is required when converting scripts
+written for other Unix shells to the C shell, especially with regard to the management of
+shell variables.
+See also ``Bourne Shell.''
+
@item C++
A popular object-oriented programming language derived from C.
+@item Character Class
+See ``Bracket Expression.''
+
+@item Character List
+See ``Bracket Expression.''
+
@cindex ASCII
@cindex ISO 8859-1
@cindex ISO Latin-1
@@ -39396,7 +39506,59 @@ A preprocessor for @command{pic} that reads descriptions of molecules
and produces @command{pic} input for drawing them.
It was written in @command{awk}
by Brian Kernighan and Jon Bentley, and is available from
-@uref{http://netlib.sandia.gov/netlib/typesetting/chem.gz}.
+@uref{http://netlib.org/typesetting/chem}.
+
+@item Comparison Expression
+A relation that is either true or false, such as @samp{a < b}.
+Comparison expressions are used in @code{if}, @code{while}, @code{do},
+and @code{for}
+statements, and in patterns to select which input records to process.
+(@xref{Typing and Comparison}.)
+
+@cindex compiled programs
+@item Compiler
+A program that translates human-readable source code into
+machine-executable object code. The object code is then executed
+directly by the computer.
+See also ``Interpreter.''
+
+@item Complemented Bracket Expression
+The negation of a @dfn{bracket expression}. All that is @emph{not}
+described by a given bracket expression. The symbol @samp{^} precedes
+the negated bracket expression. E.g.: @samp{[[^:digit:]}
+designates whatever character is not a digit. @samp{[^bad]}
+designates whatever character is not one of the letters @samp{b}, @samp{a},
+or @samp{d}.
+See ``Bracket Expression.''
+
+@item Compound Statement
+A series of @command{awk} statements, enclosed in curly braces. Compound
+statements may be nested.
+(@xref{Statements}.)
+
+@item Computed Regexps
+See ``Dynamic Regular Expressions.''
+
+@item Concatenation
+Concatenating two strings means sticking them together, one after another,
+producing a new string. For example, the string @samp{foo} concatenated with
+the string @samp{bar} gives the string @samp{foobar}.
+(@xref{Concatenation}.)
+
+@item Conditional Expression
+An expression using the @samp{?:} ternary operator, such as
+@samp{@var{expr1} ? @var{expr2} : @var{expr3}}. The expression
+@var{expr1} is evaluated; if the result is true, the value of the whole
+expression is the value of @var{expr2}; otherwise the value is
+@var{expr3}. In either case, only one of @var{expr2} and @var{expr3}
+is evaluated. (@xref{Conditional Exp}.)
+
+@item Control Statement
+A control statement is an instruction to perform a given operation or a set
+of operations inside an @command{awk} program, if a given condition is
+true. Control statements are: @code{if}, @code{for}, @code{while}, and
+@code{do}
+(@pxref{Statements}).
@cindex McIlroy, Doug
@cindex cookie
@@ -39446,39 +39608,6 @@ Doug
@item Coprocess
A subordinate program with which two-way communications is possible.
-@cindex compiled programs
-@item Compiler
-A program that translates human-readable source code into
-machine-executable object code. The object code is then executed
-directly by the computer.
-See also ``Interpreter.''
-
-@item Compound Statement
-A series of @command{awk} statements, enclosed in curly braces. Compound
-statements may be nested.
-(@xref{Statements}.)
-
-@item Concatenation
-Concatenating two strings means sticking them together, one after another,
-producing a new string. For example, the string @samp{foo} concatenated with
-the string @samp{bar} gives the string @samp{foobar}.
-(@xref{Concatenation}.)
-
-@item Conditional Expression
-An expression using the @samp{?:} ternary operator, such as
-@samp{@var{expr1} ? @var{expr2} : @var{expr3}}. The expression
-@var{expr1} is evaluated; if the result is true, the value of the whole
-expression is the value of @var{expr2}; otherwise the value is
-@var{expr3}. In either case, only one of @var{expr2} and @var{expr3}
-is evaluated. (@xref{Conditional Exp}.)
-
-@item Comparison Expression
-A relation that is either true or false, such as @samp{a < b}.
-Comparison expressions are used in @code{if}, @code{while}, @code{do},
-and @code{for}
-statements, and in patterns to select which input records to process.
-(@xref{Typing and Comparison}.)
-
@item Curly Braces
See ``Braces.''
@@ -39524,15 +39653,15 @@ ordinary expression. It could be a string constant, such as
@code{"foo"}, but it may also be an expression whose value can vary.
(@xref{Computed Regexps}.)
+@item Empty String
+See ``Null String.''
+
@item Environment
A collection of strings, of the form @samp{@var{name}=@var{val}}, that each
program has available to it. Users generally place values into the
environment in order to provide information to various programs. Typical
examples are the environment variables @env{HOME} and @env{PATH}.
-@item Empty String
-See ``Null String.''
-
@cindex epoch, definition of
@item Epoch
The date used as the ``beginning of time'' for timestamps.
@@ -39585,19 +39714,15 @@ Format strings control the appearance of output in the
are controlled by the format strings contained in the predefined variables
@code{CONVFMT} and @code{OFMT}. (@xref{Control Letters}.)
+@item Fortran
+Shorthand for FORmula TRANslator, one of the first programming languages
+available for scientific calculations. It was created by John Backus,
+and has been available since 1957. It is still in use today.
+
@item Free Documentation License
This document describes the terms under which this @value{DOCUMENT}
is published and may be copied. (@xref{GNU Free Documentation License}.)
-@item Function
-A specialized group of statements used to encapsulate general
-or program-specific tasks. @command{awk} has a number of built-in
-functions, and also allows you to define your own.
-(@xref{Functions}.)
-
-@item FSF
-See ``Free Software Foundation.''
-
@cindex FSF (Free Software Foundation)
@cindex Free Software Foundation (FSF)
@cindex Stallman, Richard
@@ -39607,6 +39732,26 @@ to the production and distribution of freely distributable software.
It was founded by Richard M.@: Stallman, the author of the original
Emacs editor. GNU Emacs is the most widely used version of Emacs today.
+@item FSF
+See ``Free Software Foundation.''
+
+@item Function
+A part of an @command{awk} program that can be invoked from every point of
+the program, to perform a task. @command{awk} has several built-in
+functions.
+Users can define their own functions in every part of the program.
+Function can be recursive, i.e., they may invoke themselves.
+@xref{Functions}.
+In @command{gawk} it is also possible to have functions shared
+among different programs, and included where required using the
+@code{@@include} directive
+(@pxref{Include Files}).
+In @command{gawk} the name of the function that should be invoked
+can be generated at run time, i.e., dynamically.
+The @command{gawk} extension API provides constructor functions
+(@pxref{Constructor Functions}).
+
+
@item @command{gawk}
The GNU implementation of @command{awk}.
@@ -39729,6 +39874,12 @@ meaning. Keywords are reserved and may not be used as variable names.
and
@code{while}.
+@item Korn Shell
+The Korn Shell (@command{ksh}) is a Unix shell which was developed by David Korn at Bell
+Laboratories in the early 1980s. The Korn Shell is backward-compatible with the Bourne
+shell and includes many features of the C shell.
+See also ``Bourne Shell.''
+
@cindex LGPL (Lesser General Public License)
@cindex Lesser General Public License (LGPL)
@cindex GNU Lesser General Public License
@@ -39737,12 +39888,12 @@ This document describes the terms under which binary library archives
or shared objects,
and their source code may be distributed.
-@item Linux
-See ``GNU/Linux.''
-
@item LGPL
See ``Lesser General Public License.''
+@item Linux
+See ``GNU/Linux.''
+
@item Localization
The process of providing the data necessary for an
internationalized program to work in a particular language.
@@ -39768,6 +39919,14 @@ Characters used within a regexp that do not stand for themselves.
Instead, they denote regular expression operations, such as repetition,
grouping, or alternation.
+@item Nesting
+Nesting is where information is organized in layers, or where objects
+contain other similar objects.
+In @command{gawk} the @code{@@include}
+directive can be nested. The ``natural'' nesting of arithmetic and
+logical operations can be changed using parentheses
+(@pxref{Precedence}).
+
@item No-op
An operation that does nothing.
@@ -39788,6 +39947,11 @@ Octal numbers are written in C using a leading @samp{0},
to indicate their base. Thus, @code{013} is 11 ((1 x 8) + 3).
@xref{Nondecimal-numbers}.
+@item Output Record
+A single chunk of data that is written out by @command{awk}. Usually, an
+@command{awk} output record consists of one or more lines of text.
+@xref{Records}.
+
@item Pattern
Patterns tell @command{awk} which input records are interesting to which
rules.
@@ -39802,6 +39966,9 @@ An acronym describing what is possibly the most frequent
source of computer usage problems. (Problem Exists Between
Keyboard And Chair.)
+@item Plug-in
+See ``Extensions.''
+
@item POSIX
The name for a series of standards
that specify a Portable Operating System interface. The ``IX'' denotes
@@ -39826,6 +39993,9 @@ A sequence of consecutive lines from the input file(s). A pattern
can specify ranges of input lines for @command{awk} to process or it can
specify single lines. (@xref{Pattern Overview}.)
+@item Record
+See ``Input record'' and ``Output record.''
+
@item Recursion
When a function calls itself, either directly or indirectly.
If this is clear, stop, and proceed to the next entry.
@@ -39843,6 +40013,15 @@ operators.
(@xref{Getline},
and @ref{Redirection}.)
+@item Reference Counts
+An internal mechanism in @command{gawk} to minimize the amount of memory
+needed to store the value of string variables. If the value assumed by
+a variable is used in more than one place, only one copy of the value
+itself is kept, and the associated reference count is increased when the
+same value is used by an additional variable, and decresed when the related
+variable is no longer in use. When the reference count goes to zero,
+the memory space used to store the value of the variable is freed.
+
@item Regexp
See ``Regular Expression.''
@@ -39860,6 +40039,15 @@ slashes, such as @code{/foo/}. This regular expression is chosen
when you write the @command{awk} program and cannot be changed during
its execution. (@xref{Regexp Usage}.)
+@item Regular Expression Operators
+See ``Metacharacters.''
+
+@item Rounding
+Rounding the result of an arithmetic operation can be tricky.
+More than one way of rounding exists, and in @command{gawk}
+it is possible to choose which method should be used in a program.
+@xref{Setting the rounding mode}.
+
@item Rule
A segment of an @command{awk} program that specifies how to process single
input records. A rule consists of a @dfn{pattern} and an @dfn{action}.
@@ -39880,12 +40068,12 @@ Regular variables are scalars; arrays and functions are not.
In @command{gawk}, a list of directories to search for @command{awk} program source files.
In the shell, a list of directories to search for executable programs.
-@item Seed
-The initial value, or starting point, for a sequence of random numbers.
-
@item @command{sed}
See ``Stream Editor.''
+@item Seed
+The initial value, or starting point, for a sequence of random numbers.
+
@item Shell
The command interpreter for Unix and POSIX-compliant systems.
The shell works both interactively, and as a programming language
@@ -39919,6 +40107,12 @@ A @value{FN} interpreted internally by @command{gawk}, instead of being handed
directly to the underlying operating system---for example, @file{/dev/stderr}.
(@xref{Special Files}.)
+@item Statement
+An expression inside an @command{awk} program in the action part
+of a pattern--action rule, or inside an
+@command{awk} function. A statement can be a variable assignment,
+an array operation, a loop, etc.
+
@item Stream Editor
A program that reads records from an input stream and processes them one
or more at a time. This is in contrast with batch programs, which may
@@ -39969,9 +40163,14 @@ This is standard time in Greenwich, England, which is used as a
reference time for day and date calculations.
See also ``Epoch'' and ``GMT.''
+@item Variable
+A name for a value. In @command{awk}, variables may be either scalars
+or arrays.
+
@item Whitespace
A sequence of space, TAB, or newline characters occurring inside an input
record or a string.
+
@end table
@end ifclear
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
index 7506dffb..8236d7d2 100644
--- a/doc/texinfo.tex
+++ b/doc/texinfo.tex
@@ -3,11 +3,12 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2014-03-18.17}
+\def\texinfoversion{2015-02-05.16}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015
+% Free Software Foundation, Inc.
%
% This texinfo.tex file is free software: you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
@@ -96,7 +97,9 @@
\let\ptexraggedright=\raggedright
\let\ptexrbrace=\}
\let\ptexslash=\/
+\let\ptexsp=\sp
\let\ptexstar=\*
+\let\ptexsup=\sup
\let\ptext=\t
\let\ptextop=\top
{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
@@ -1010,24 +1013,15 @@ where each line of input produces a line of output.}
% paragraph.
%
\gdef\dosuppressfirstparagraphindent{%
- \gdef\indent{%
- \restorefirstparagraphindent
- \indent
- }%
- \gdef\noindent{%
- \restorefirstparagraphindent
- \noindent
- }%
- \global\everypar = {%
- \kern -\parindent
- \restorefirstparagraphindent
- }%
+ \gdef\indent {\restorefirstparagraphindent \indent}%
+ \gdef\noindent{\restorefirstparagraphindent \noindent}%
+ \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
}
-
+%
\gdef\restorefirstparagraphindent{%
- \global \let \indent = \ptexindent
- \global \let \noindent = \ptexnoindent
- \global \everypar = {}%
+ \global\let\indent = \ptexindent
+ \global\let\noindent = \ptexnoindent
+ \global\everypar = {}%
}
@@ -2090,12 +2084,9 @@ end
\endgroup
}
-
% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families. Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
+% we have to define the \textfont of the standard families. We don't
+% bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
%
\def\resetmathfonts{%
\textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
@@ -2109,8 +2100,8 @@ end
% \tenSTYLE to set the current font.
%
% Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower). These relative commands are used in
-% the LaTeX logo and acronyms.
+% and \lllsize (three sizes lower). These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
%
% This all needs generalizing, badly.
%
@@ -2146,7 +2137,7 @@ end
\let\tenttsl=\secttsl
\def\curfontsize{sec}%
\def\lsize{subsec}\def\lllsize{reduced}%
- \resetmathfonts \setleading{16pt}}
+ \resetmathfonts \setleading{17pt}}
\def\subsecfonts{%
\let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
\let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
@@ -2851,6 +2842,8 @@ end
\let\v=\check
\let\~=\tilde
\let\dotaccent=\dot
+ % have to provide another name for sup operator
+ \let\mathopsup=\sup
$\finishmath
}
\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
@@ -2874,6 +2867,18 @@ end
}
}
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts. This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\selectfonts\lllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}%
+
% ctrl is no longer a Texinfo command, but leave this definition for fun.
\def\ctrl #1{{\tt \rawbackslash \hat}#1}
@@ -4484,7 +4489,6 @@ end
% Called from \indexdummies and \atdummies.
%
\def\commondummies{%
- %
% \definedummyword defines \#1 as \string\#1\space, thus effectively
% preventing its expansion. This is used only for control words,
% not control letters, because the \space would be incorrect for
@@ -4561,6 +4565,7 @@ end
\definedummyword\guilsinglright
\definedummyword\lbracechar
\definedummyword\leq
+ \definedummyword\mathopsup
\definedummyword\minus
\definedummyword\ogonek
\definedummyword\pounds
@@ -4574,6 +4579,8 @@ end
\definedummyword\quotesinglbase
\definedummyword\rbracechar
\definedummyword\result
+ \definedummyword\sub
+ \definedummyword\sup
\definedummyword\textdegree
%
% We want to disable all macros so that they are not expanded by \write.
@@ -4648,6 +4655,7 @@ end
\definedummyword\samp
\definedummyword\strong
\definedummyword\tie
+ \definedummyword\U
\definedummyword\uref
\definedummyword\url
\definedummyword\var
@@ -5739,13 +5747,16 @@ end
%
% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
% Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
%
% To test against our argument.
\def\Ynothingkeyword{Ynothing}
-\def\Yomitfromtockeyword{Yomitfromtoc}
\def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
%
\def\chapmacro#1#2#3{%
+ \checkenv{}% chapters, etc., should not start inside an environment.
+ %
% Insert the first mark before the heading break (see notes for \domark).
\let\prevchapterdefs=\lastchapterdefs
\let\prevsectiondefs=\lastsectiondefs
@@ -5798,6 +5809,7 @@ end
%
{%
\chapfonts \rmisbold
+ \let\footnote=\errfootnoteheading % give better error message
%
% Have to define \lastsection before calling \donoderef, because the
% xref code eventually uses it. On the other hand, it has to be called
@@ -5891,22 +5903,29 @@ end
% Print any size, any type, section title.
%
-% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
-% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
-% section number.
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #4 is the section number.
%
\def\seckeyword{sec}
%
\def\sectionheading#1#2#3#4{%
{%
- \checkenv{}% should not be in an environment.
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % It is ok for the @heading series commands to appear inside an
+ % environment (it's been historically allowed, though the logic is
+ % dubious), but not the others.
+ \ifx\temptype\Yomitfromtockeyword\else
+ \checkenv{}% non-@*heading should not be in an environment.
+ \fi
+ \let\footnote=\errfootnoteheading
%
% Switch to the right set of fonts.
\csname #2fonts\endcsname \rmisbold
%
- \def\sectionlevel{#2}%
- \def\temptype{#3}%
- %
% Insert first mark before the heading break (see notes for \domark).
\let\prevsectiondefs=\lastsectiondefs
\ifx\temptype\Ynothingkeyword
@@ -6333,6 +6352,7 @@ end
% other math active characters (just in case), to plain's definitions.
\mathactive
%
+ % Inverse of the list at the beginning of the file.
\let\b=\ptexb
\let\bullet=\ptexbullet
\let\c=\ptexc
@@ -6348,7 +6368,9 @@ end
\let\+=\tabalign
\let\}=\ptexrbrace
\let\/=\ptexslash
+ \let\sp=\ptexsp
\let\*=\ptexstar
+ %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
\let\t=\ptext
\expandafter \let\csname top\endcsname=\ptextop % we've made it outer
\let\frenchspacing=\plainfrenchspacing
@@ -7414,7 +7436,6 @@ end
%
% \anythingelse will almost certainly be an error of some kind.
-
% \mbodybackslash is the definition of \ in @macro bodies.
% It maps \foo\ => \csname macarg.foo\endcsname => #N
% where N is the macro parameter number.
@@ -7523,8 +7544,7 @@ end
% the catcode regime underwhich the body was input).
%
% If you compile with TeX (not eTeX), and you have macros with 10 or more
-% arguments, you need that no macro has more than 256 arguments, otherwise an
-% error is produced.
+% arguments, no macro can have more than 256 arguments (else error).
\def\parsemargdef#1;{%
\paramno=0\def\paramlist{}%
\let\hash\relax
@@ -8318,14 +8338,7 @@ end
\catcode`\\=\other
%
% Make the characters 128-255 be printing characters.
- {%
- \count1=128
- \def\loop{%
- \catcode\count1=\other
- \advance\count1 by 1
- \ifnum \count1<256 \loop \fi
- }%
- }%
+ {\setnonasciicharscatcodenonglobal\other}%
%
% @ is our escape character in .aux files, and we need braces.
\catcode`\{=1
@@ -8359,9 +8372,6 @@ end
%
% Auto-number footnotes. Otherwise like plain.
\gdef\footnote{%
- \let\indent=\ptexindent
- \let\noindent=\ptexnoindent
- %
\global\advance\footnoteno by \@ne
\edef\thisfootno{$^{\the\footnoteno}$}%
%
@@ -8388,7 +8398,7 @@ end
%
% Nested footnotes are not supported in TeX, that would take a lot
% more work. (\startsavinginserts does not suffice.)
- \let\footnote=\errfootnote
+ \let\footnote=\errfootnotenest
%
% We want to typeset this text as a normal paragraph, even if the
% footnote reference occurs in (for example) a display environment.
@@ -8427,12 +8437,17 @@ end
}
}%end \catcode `\@=11
-\def\errfootnote{%
+\def\errfootnotenest{%
\errhelp=\EMsimple
\errmessage{Nested footnotes not supported in texinfo.tex,
even though they work in makeinfo; sorry}
}
+\def\errfootnoteheading{%
+ \errhelp=\EMsimple
+ \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
% In case a @footnote appears in a vbox, save the footnote text and create
% the real \insert just after the vbox finished. Otherwise, the insertion
% would be lost.
@@ -8856,20 +8871,20 @@ end
{
\catcode`\_ = \active
\globaldefs=1
-\parseargdef\documentlanguage{\begingroup
- \let_=\normalunderscore % normal _ character for filenames
+\parseargdef\documentlanguage{%
\tex % read txi-??.tex file in plain TeX.
% Read the file by the name they passed if it exists.
+ \let_ = \normalunderscore % normal _ character for filename test
\openin 1 txi-#1.tex
\ifeof 1
- \documentlanguagetrywithoutunderscore{#1_\finish}%
+ \documentlanguagetrywithoutunderscore #1_\finish
\else
\globaldefs = 1 % everything in the txi-LL files needs to persist
\input txi-#1.tex
\fi
\closein 1
\endgroup % end raw TeX
-\endgroup}
+}
%
% If they passed de_DE, and txi-de_DE.tex doesn't exist,
% try txi-de.tex.
@@ -8934,6 +8949,7 @@ directory should work if nowhere else does.}
\catcode\count255=#1\relax
\advance\count255 by 1
\repeat
+
}
% @documentencoding sets the definition of non-ASCII characters
@@ -8968,10 +8984,12 @@ directory should work if nowhere else does.}
%
\else \ifx \declaredencoding \utfeight
\setnonasciicharscatcode\active
- \utfeightchardefs
+ % since we already invoked \utfeightchardefs at the top level
+ % (below), do not re-invoke it, then our check for duplicated
+ % definitions triggers. Making non-ascii chars active is enough.
%
\else
- \message{Unknown document encoding #1, ignoring.}%
+ \message{Ignoring unknown document encoding: #1.}%
%
\fi % utfeight
\fi % latnine
@@ -8980,10 +8998,11 @@ directory should work if nowhere else does.}
\fi % ascii
}
+% emacs-page
% A message to be logged when using a character that isn't available
% the default font encoding (OT1).
%
-\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
% Take account of \c (plain) vs. \, (Texinfo) difference.
\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
@@ -9019,12 +9038,10 @@ directory should work if nowhere else does.}
\gdef^^b4{\'{}}
\gdef^^b5{$\mu$}
\gdef^^b6{\P}
- %
- \gdef^^b7{$^.$}
+ \gdef^^b7{\ifmmode\cdot\else $\cdot$\fi}
\gdef^^b8{\cedilla\ }
\gdef^^b9{$^1$}
\gdef^^ba{\ordm}
- %
\gdef^^bb{\guillemetright}
\gdef^^bc{$1\over4$}
\gdef^^bd{$1\over2$}
@@ -9279,6 +9296,18 @@ directory should work if nowhere else does.}
\UTFviiiLoop
\endgroup
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+ \expandafter\ifx\csname uni:#1\endcsname \relax
+ \errhelp = \EMsimple
+ \errmessage{Unicode character U+#1 not supported, sorry}%
+ \else
+ \csname uni:#1\endcsname
+ \fi
+}
+
\begingroup
\catcode`\"=12
\catcode`\<=12
@@ -9287,7 +9316,6 @@ directory should work if nowhere else does.}
\catcode`\;=12
\catcode`\!=12
\catcode`\~=13
-
\gdef\DeclareUnicodeCharacter#1#2{%
\countUTFz = "#1\relax
%\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
@@ -9302,6 +9330,13 @@ directory should work if nowhere else does.}
\expandafter\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter
\gdef\UTFviiiTmp{#2}%
+ %
+ \expandafter\ifx\csname uni:#1\endcsname \relax \else
+ \errmessage{Internal error, already defined: #1}%
+ \fi
+ %
+ % define an additional control sequence for this code point.
+ \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
\endgroup}
\gdef\parseXMLCharref{%
@@ -9339,23 +9374,49 @@ directory should work if nowhere else does.}
\uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
\endgroup
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere. Loading the necessary fonts
+% awaits user request. We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file. But we can try to at
+% least make most of the characters not bomb out.
+%
\def\utfeightchardefs{%
\DeclareUnicodeCharacter{00A0}{\tie}
\DeclareUnicodeCharacter{00A1}{\exclamdown}
\DeclareUnicodeCharacter{00A3}{\pounds}
+ \DeclareUnicodeCharacter{00A7}{\S}
\DeclareUnicodeCharacter{00A8}{\"{ }}
\DeclareUnicodeCharacter{00A9}{\copyright}
\DeclareUnicodeCharacter{00AA}{\ordf}
\DeclareUnicodeCharacter{00AB}{\guillemetleft}
+ \DeclareUnicodeCharacter{00AC}{\ifmmode\lnot\else $\lnot$\fi}
\DeclareUnicodeCharacter{00AD}{\-}
\DeclareUnicodeCharacter{00AE}{\registeredsymbol}
\DeclareUnicodeCharacter{00AF}{\={ }}
\DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B1}{\ifmmode\pm\else $\pm$\fi}
+ \DeclareUnicodeCharacter{00B2}{$^2$}
+ \DeclareUnicodeCharacter{00B3}{$^3$}
\DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B5}{$\mu$}
+ \DeclareUnicodeCharacter{00B6}{\P}
+ \DeclareUnicodeCharacter{00B7}{\ifmmode\cdot\else $\cdot$\fi}
\DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00B9}{$^1$}
\DeclareUnicodeCharacter{00BA}{\ordm}
\DeclareUnicodeCharacter{00BB}{\guillemetright}
+ \DeclareUnicodeCharacter{00BC}{$1\over4$}
+ \DeclareUnicodeCharacter{00BD}{$1\over2$}
+ \DeclareUnicodeCharacter{00BE}{$3\over4$}
\DeclareUnicodeCharacter{00BF}{\questiondown}
\DeclareUnicodeCharacter{00C0}{\`A}
@@ -9382,6 +9443,7 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{00D4}{\^O}
\DeclareUnicodeCharacter{00D5}{\~O}
\DeclareUnicodeCharacter{00D6}{\"O}
+ \DeclareUnicodeCharacter{00D7}{\ifmmode\times\else $\times$\fi}
\DeclareUnicodeCharacter{00D8}{\O}
\DeclareUnicodeCharacter{00D9}{\`U}
\DeclareUnicodeCharacter{00DA}{\'U}
@@ -9415,6 +9477,7 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{00F4}{\^o}
\DeclareUnicodeCharacter{00F5}{\~o}
\DeclareUnicodeCharacter{00F6}{\"o}
+ \DeclareUnicodeCharacter{00F7}{\ifmmode\div\else $\div$\fi}
\DeclareUnicodeCharacter{00F8}{\o}
\DeclareUnicodeCharacter{00F9}{\`u}
\DeclareUnicodeCharacter{00FA}{\'u}
@@ -9434,20 +9497,23 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0107}{\'c}
\DeclareUnicodeCharacter{0108}{\^C}
\DeclareUnicodeCharacter{0109}{\^c}
- \DeclareUnicodeCharacter{0118}{\ogonek{E}}
- \DeclareUnicodeCharacter{0119}{\ogonek{e}}
\DeclareUnicodeCharacter{010A}{\dotaccent{C}}
\DeclareUnicodeCharacter{010B}{\dotaccent{c}}
\DeclareUnicodeCharacter{010C}{\v{C}}
\DeclareUnicodeCharacter{010D}{\v{c}}
\DeclareUnicodeCharacter{010E}{\v{D}}
+ \DeclareUnicodeCharacter{010F}{d'}
+ \DeclareUnicodeCharacter{0110}{\DH}
+ \DeclareUnicodeCharacter{0111}{\dh}
\DeclareUnicodeCharacter{0112}{\=E}
\DeclareUnicodeCharacter{0113}{\=e}
\DeclareUnicodeCharacter{0114}{\u{E}}
\DeclareUnicodeCharacter{0115}{\u{e}}
\DeclareUnicodeCharacter{0116}{\dotaccent{E}}
\DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
\DeclareUnicodeCharacter{011A}{\v{E}}
\DeclareUnicodeCharacter{011B}{\v{e}}
\DeclareUnicodeCharacter{011C}{\^G}
@@ -9457,14 +9523,20 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0120}{\dotaccent{G}}
\DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+ \DeclareUnicodeCharacter{0122}{\cedilla{G}}
+ \DeclareUnicodeCharacter{0123}{\cedilla{g}}
\DeclareUnicodeCharacter{0124}{\^H}
\DeclareUnicodeCharacter{0125}{\^h}
+ \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}
+ \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}
\DeclareUnicodeCharacter{0128}{\~I}
\DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
\DeclareUnicodeCharacter{012A}{\=I}
\DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
\DeclareUnicodeCharacter{012C}{\u{I}}
\DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+ \DeclareUnicodeCharacter{012E}{\ogonek{I}}
+ \DeclareUnicodeCharacter{012F}{\ogonek{i}}
\DeclareUnicodeCharacter{0130}{\dotaccent{I}}
\DeclareUnicodeCharacter{0131}{\dotless{i}}
@@ -9472,15 +9544,29 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0133}{ij}
\DeclareUnicodeCharacter{0134}{\^J}
\DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+ \DeclareUnicodeCharacter{0136}{\cedilla{K}}
+ \DeclareUnicodeCharacter{0137}{\cedilla{k}}
+ \DeclareUnicodeCharacter{0138}{\ifmmode\kappa\else $\kappa$\fi}
\DeclareUnicodeCharacter{0139}{\'L}
\DeclareUnicodeCharacter{013A}{\'l}
+ \DeclareUnicodeCharacter{013B}{\cedilla{L}}
+ \DeclareUnicodeCharacter{013C}{\cedilla{l}}
+ \DeclareUnicodeCharacter{013D}{L'}% should kern
+ \DeclareUnicodeCharacter{013E}{l'}% should kern
+ \DeclareUnicodeCharacter{013F}{L\U{00B7}}
+ \DeclareUnicodeCharacter{0140}{l\U{00B7}}
\DeclareUnicodeCharacter{0141}{\L}
\DeclareUnicodeCharacter{0142}{\l}
\DeclareUnicodeCharacter{0143}{\'N}
\DeclareUnicodeCharacter{0144}{\'n}
+ \DeclareUnicodeCharacter{0145}{\cedilla{N}}
+ \DeclareUnicodeCharacter{0146}{\cedilla{n}}
\DeclareUnicodeCharacter{0147}{\v{N}}
\DeclareUnicodeCharacter{0148}{\v{n}}
+ \DeclareUnicodeCharacter{0149}{'n}
+ \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}
+ \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}
\DeclareUnicodeCharacter{014C}{\=O}
\DeclareUnicodeCharacter{014D}{\=o}
\DeclareUnicodeCharacter{014E}{\u{O}}
@@ -9492,6 +9578,8 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0153}{\oe}
\DeclareUnicodeCharacter{0154}{\'R}
\DeclareUnicodeCharacter{0155}{\'r}
+ \DeclareUnicodeCharacter{0156}{\cedilla{R}}
+ \DeclareUnicodeCharacter{0157}{\cedilla{r}}
\DeclareUnicodeCharacter{0158}{\v{R}}
\DeclareUnicodeCharacter{0159}{\v{r}}
\DeclareUnicodeCharacter{015A}{\'S}
@@ -9503,10 +9591,12 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0160}{\v{S}}
\DeclareUnicodeCharacter{0161}{\v{s}}
- \DeclareUnicodeCharacter{0162}{\cedilla{t}}
- \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0162}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0163}{\cedilla{t}}
\DeclareUnicodeCharacter{0164}{\v{T}}
-
+ \DeclareUnicodeCharacter{0165}{\v{t}}
+ \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}
+ \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}
\DeclareUnicodeCharacter{0168}{\~U}
\DeclareUnicodeCharacter{0169}{\~u}
\DeclareUnicodeCharacter{016A}{\=U}
@@ -9518,6 +9608,8 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{0170}{\H{U}}
\DeclareUnicodeCharacter{0171}{\H{u}}
+ \DeclareUnicodeCharacter{0172}{\ogonek{U}}
+ \DeclareUnicodeCharacter{0173}{\ogonek{u}}
\DeclareUnicodeCharacter{0174}{\^W}
\DeclareUnicodeCharacter{0175}{\^w}
\DeclareUnicodeCharacter{0176}{\^Y}
@@ -9529,6 +9621,7 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{017C}{\dotaccent{z}}
\DeclareUnicodeCharacter{017D}{\v{Z}}
\DeclareUnicodeCharacter{017E}{\v{z}}
+ \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}
\DeclareUnicodeCharacter{01C4}{D\v{Z}}
\DeclareUnicodeCharacter{01C5}{D\v{z}}
@@ -9734,12 +9827,51 @@ directory should work if nowhere else does.}
\DeclareUnicodeCharacter{2261}{\equiv}
}% end of \utfeightchardefs
-
% US-ASCII character definitions.
\def\asciichardefs{% nothing need be done
\relax
}
+% Latin1 (ISO-8859-1) character definitions.
+\def\nonasciistringdefs{%
+ \setnonasciicharscatcode\active
+ \def\defstringchar##1{\def##1{\string##1}}%
+ \defstringchar^^a0\defstringchar^^a1\defstringchar^^a2\defstringchar^^a3%
+ \defstringchar^^a4\defstringchar^^a5\defstringchar^^a6\defstringchar^^a7%
+ \defstringchar^^a8\defstringchar^^a9\defstringchar^^aa\defstringchar^^ab%
+ \defstringchar^^ac\defstringchar^^ad\defstringchar^^ae\defstringchar^^af%
+ %
+ \defstringchar^^b0\defstringchar^^b1\defstringchar^^b2\defstringchar^^b3%
+ \defstringchar^^b4\defstringchar^^b5\defstringchar^^b6\defstringchar^^b7%
+ \defstringchar^^b8\defstringchar^^b9\defstringchar^^ba\defstringchar^^bb%
+ \defstringchar^^bc\defstringchar^^bd\defstringchar^^be\defstringchar^^bf%
+ %
+ \defstringchar^^c0\defstringchar^^c1\defstringchar^^c2\defstringchar^^c3%
+ \defstringchar^^c4\defstringchar^^c5\defstringchar^^c6\defstringchar^^c7%
+ \defstringchar^^c8\defstringchar^^c9\defstringchar^^ca\defstringchar^^cb%
+ \defstringchar^^cc\defstringchar^^cd\defstringchar^^ce\defstringchar^^cf%
+ %
+ \defstringchar^^d0\defstringchar^^d1\defstringchar^^d2\defstringchar^^d3%
+ \defstringchar^^d4\defstringchar^^d5\defstringchar^^d6\defstringchar^^d7%
+ \defstringchar^^d8\defstringchar^^d9\defstringchar^^da\defstringchar^^db%
+ \defstringchar^^dc\defstringchar^^dd\defstringchar^^de\defstringchar^^df%
+ %
+ \defstringchar^^e0\defstringchar^^e1\defstringchar^^e2\defstringchar^^e3%
+ \defstringchar^^e4\defstringchar^^e5\defstringchar^^e6\defstringchar^^e7%
+ \defstringchar^^e8\defstringchar^^e9\defstringchar^^ea\defstringchar^^eb%
+ \defstringchar^^ec\defstringchar^^ed\defstringchar^^ee\defstringchar^^ef%
+ %
+ \defstringchar^^f0\defstringchar^^f1\defstringchar^^f2\defstringchar^^f3%
+ \defstringchar^^f4\defstringchar^^f5\defstringchar^^f6\defstringchar^^f7%
+ \defstringchar^^f8\defstringchar^^f9\defstringchar^^fa\defstringchar^^fb%
+ \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff%
+}
+
+
+% define all the unicode characters we know about, for the sake of @U.
+\utfeightchardefs
+
+
% Make non-ASCII characters printable again for compatibility with
% existing Texinfo documents that may use them, even without declaring a
% document encoding.
@@ -10093,6 +10225,7 @@ directory should work if nowhere else does.}
%
{@catcode`- = @active
@gdef@normalturnoffactive{%
+ @nonasciistringdefs
@let-=@normaldash
@let"=@normaldoublequote
@let$=@normaldollar %$ font-lock fix
@@ -10161,7 +10294,7 @@ directory should work if nowhere else does.}
@c Local variables:
@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
+@c page-delimiter: "^\\\\message\\|emacs-page"
@c time-stamp-start: "def\\\\texinfoversion{"
@c time-stamp-format: "%:y-%02m-%02d.%02H"
@c time-stamp-end: "}"
diff --git a/eval.c b/eval.c
index 95992704..c63dd170 100644
--- a/eval.c
+++ b/eval.c
@@ -25,7 +25,6 @@
#include "awk.h"
-extern void after_beginfile(IOBUF **curfile);
extern double pow(double x, double y);
extern double modf(double x, double *yp);
extern double fmod(double x, double y);
@@ -708,6 +707,8 @@ set_IGNORECASE()
load_casetable();
if (do_traditional)
IGNORECASE = false;
+ else if ((n->flags & (NUMCUR|NUMBER)) != 0)
+ IGNORECASE = ! iszero(n);
else if ((n->flags & (STRING|STRCUR)) != 0) {
if ((n->flags & MAYBE_NUM) == 0) {
(void) force_string(n);
@@ -716,9 +717,7 @@ set_IGNORECASE()
(void) force_number(n);
IGNORECASE = ! iszero(n);
}
- } else if ((n->flags & (NUMCUR|NUMBER)) != 0)
- IGNORECASE = ! iszero(n);
- else
+ } else
IGNORECASE = false; /* shouldn't happen */
set_RS(); /* set_RS() calls set_FS() if need be, for us */
@@ -1026,6 +1025,7 @@ update_ERRNO_int(int errcode)
{
char *cp;
+ update_PROCINFO_num("errno", errcode);
if (errcode) {
cp = strerror(errcode);
cp = gettext(cp);
@@ -1040,6 +1040,7 @@ update_ERRNO_int(int errcode)
void
update_ERRNO_string(const char *string)
{
+ update_PROCINFO_num("errno", 0);
unref(ERRNO_node->var_value);
ERRNO_node->var_value = make_string(string, strlen(string));
}
@@ -1049,6 +1050,7 @@ update_ERRNO_string(const char *string)
void
unset_ERRNO(void)
{
+ update_PROCINFO_num("errno", 0);
unref(ERRNO_node->var_value);
ERRNO_node->var_value = dupnode(Nnull_string);
}
@@ -1181,7 +1183,7 @@ r_get_lhs(NODE *n, bool reference)
/* r_get_field --- get the address of a field node */
-static inline NODE **
+NODE **
r_get_field(NODE *n, Func_ptr *assign, bool reference)
{
long field_num;
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 454efdf8..9f3a0a93 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,8 +1,116 @@
+2015-03-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * testext.c: Move test for deferred variables here.
+
+2015-03-18 Arnold D. Robbins <arnold@skeeve.com>
+
+ * configure: Updated to libtool 2.4.6.
+
+2015-03-18 Arnold D. Robbins <arnold@skeeve.com>
+
+ * inplace.3am (SYNOPSIS): Updated to not show the contents
+ of the extension.
+ (BUGS): Removed.
+
+2015-03-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * inplace.c (do_inplace_begin): Jump through more hoops to satisfy
+ a newer version of clang.
+ * inplace.3am (BUGS): Add new section and documentation.
+
+2015-02-26 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DIST): Add rwarray0.c to the list.
+
+2015-02-11 Arnold D. Robbins <arnold@skeeve.com>
+
+ * filefuncs.c: Punctuation fix.
+
+2015-01-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ Infrastructure updates.
+
+ Automake 1.15. Libtool 2.4.5.
+
+ * configure.ac: Remove gettext macros.
+
+2015-01-07 Arnold D. Robbins <arnold@skeeve.com>
+
+ * testext.c (var_test): Adjust for PROCINFO now being there.
+
+2015-01-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * testext.c (test_deferred): New function to help with testing
+ of deferred variable instantiation.
+ (do_get_file): Remove unused variable array.
+ (func_table): Add test_deferred.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * testext.c (test_get_file): Fix error message.
+ (do_get_file): Implement new function providing low-level access
+ to the get_file API.
+ (func_table): Add "get_file" -> do_get_file.
+ (init_testext): If TESTEXT_QUIET has been set to a numeric value,
+ return quietly.
+
+2015-01-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * testext.c (test_get_file): The get_file hook no longer takes a
+ typelen argument.
+
+2015-01-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ Remove the select extension, since it will be part of gawkextlib.
+ * select.c, siglist.h: Deleted.
+ * Makefile.am (pkgextension_LTLIBRARIES): Remove select.la.
+ (select_la_SOURCES, select_la_LDFLAGS, select_la_LIBADD): Remove.
+ (EXTRA_DIST): Remove siglist.h.
+ * configure.ac (AC_CHECK_HEADERS): Remove signal.h.
+ (AC_CHECK_FUNCS): Remove fcntl, kill, sigaction, and sigprocmask.
+
+2014-12-14 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ Remove the errno extension, since it is now part of gawkextlib.
+ * errno.c, errlist.h: Deleted.
+ * Makefile.am (pkgextension_LTLIBRARIES): Remove errno.la.
+ (errno_la_SOURCES, errno_la_LDFLAGS, errno_la_LIBADD): Remove.
+ (EXTRA_DIST): Remove errlist.h.
+
2014-11-23 Arnold D. Robbins <arnold@skeeve.com>
* inplace.c (do_inplace_begin): Jump through hoops to silence
GCC warnings about return value of chown.
+2014-11-09 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (do_input_fd): New function to return the input file
+ descriptor associated with a file/command.
+ (do_output_fd): New function to return the output file descriptor
+ associated with a file/command.
+ (func_table): Add new functions "input_fd" and "output_fd".
+ * testext.c (test_get_file): Do not use __func__, since it is a C99
+ feature, and gawk does not assume C99.
+
+2014-11-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * errno.c (do_errno2name, do_name2errno): Remove unused variable 'str'.
+ * select.c (do_signal): Remove unused variable 'override'.
+ (grabfd): New helper function to map a gawk file to the appropriate
+ fd for use in the arguments to selectd.
+ (do_select): get_file has 3 new arguments and returns info about both
+ the input and output buf.
+ (do_set_non_blocking): Support changes to get_file API.
+ * testext.c (test_get_file): New test function to check that extension
+ file creation via the get_file API is working.
+
+2014-11-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (set_retry): New function to set PROCINFO[<name>, "RETRY"].
+ (do_set_non_blocking): If called with a file name as opposed to a file
+ descriptor, call the set_retry function to configure PROCINFO to tell
+ io.c to retry I/O for temporary failures.
+
2014-10-12 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.am (uninstall-so): Remove *.lib too, per suggestion
@@ -187,6 +295,108 @@
* gawkdirfd.h (FAKE_FD_VALUE): Move definition up in the file to give
clean compile on MinGW.
+2013-07-07 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * configure.ac (AC_CHECK_FUNCS): Check for fcntl.
+ * select.c (set_non_blocking): Check that fcntl and O_NONBLOCK are
+ available.
+
+2013-07-07 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (signal_handler): On platforms lacking sigaction, reset
+ the signal handler each time a signal is trapped to protect in case
+ the system resets it to default.
+
+2013-07-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (signal_result): New function to set result string from
+ signal function and detect when we need to roll back.
+ (do_signal): Now takes an optional 3rd override argument. Instead
+ of returning -1 or 0, we now return information about the previously
+ installed signal handler: default, ignore, trap, or unknown. An
+ empty string is returned on error. If it is an unknown handler,
+ and override is not non-zero, we roll back the handler and return "".
+
+2013-07-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (set_non_blocking): Do not attempt F_SETFL if F_GETFL fails.
+ (do_set_non_blocking): Add support for case when called with a single
+ "" argument.
+
+2013-07-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (do_signal): If sigaction is unavailable, fall back to
+ signal and hope that it does the right thing.
+
+2013-07-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * configure.ac (AC_CHECK_FUNCS): Add kill and sigprocmask.
+ * select.c (get_signal_number): Change error messages since now may
+ be called by "kill" as well as "select_signal".
+ (do_signal): Add a lint warning if there are more than 2 args.
+ (do_kill): Add new function to send a signal.
+ (do_select): Support platforms where sigprocmask is not available.
+ There will be a race condition on such platforms, but that is not
+ easily avoided.
+
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (do_select): Now that the API flatten_array call has been
+ patched to ensure that the index values are strings, we can remove
+ the code to check for the AWK_NUMBER case.
+
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (do_select): Do not treat a numeric command value as a
+ file descriptor unless the command type is empty.
+
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add errlist.h and siglist.h.
+
+2013-07-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (set_non_blocking): New helper function to call fcntl.
+ (do_set_non_blocking): Add support for the case where there's a single
+ integer fd argument.
+
+2013-07-01 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * select.c (do_set_non_blocking): Implement new set_non_blocking
+ function.
+ (func_table): Add set_non_blocking.
+
+2013-07-01 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * errlist.h: New file containing a list of all the errno values I could
+ find.
+ * errno.c: Implement a new errno extension providing strerror,
+ errno2name, and name2errno.
+ * Makefile.am (pkgextension_LTLIBRARIES): Add errno.la.
+ (errno_la_SOURCES, errno_la_LDFLAGS, errno_la_LIBADD): Build new errno
+ extension.
+ * select.c (ext_version): Fix version string.
+ * siglist.h: Update to newest glibc version.
+
+2013-07-01 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * siglist.h: New file copied from glibc to provide a mapping between
+ signal number and name.
+ * select.c: Add a new "select_signal" function and provide support
+ for trapping signals.
+ (do_select): Add support for a 5th argument to contain an array
+ of returned signals. Improve the argument processing, and add
+ better warning messages.
+
+2013-06-30 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (pkgextension_LTLIBRARIES): Add select.la.
+ (select_la_SOURCES, select_la_LDFLAGS, select_la_LIBADD): Build new
+ select extension.
+ * configure.ac (AC_CHECK_HEADERS): Add signal.h.
+ (AC_CHECK_FUNCS): Add sigaction.
+ * select.c: Implement the new select extension.
+
2013-06-10 Arnold D. Robbins <arnold@skeeve.com>
* configure.ac (AC_HEADER_MAJOR): New macro added.
diff --git a/extension/INSTALL b/extension/INSTALL
index 6e90e07d..20998407 100644
--- a/extension/INSTALL
+++ b/extension/INSTALL
@@ -1,7 +1,7 @@
Installation Instructions
*************************
-Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
Inc.
Copying and distribution of this file, with or without modification,
@@ -12,8 +12,8 @@ without warranty of any kind.
Basic Installation
==================
- Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package. The following
+ Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
diff --git a/extension/Makefile.in b/extension/Makefile.in
index f18cfc1d..24f26433 100644
--- a/extension/Makefile.in
+++ b/extension/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -37,7 +37,17 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -98,32 +108,14 @@ POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
subdir = .
-DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
- $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/configure $(am__configure_deps) \
- $(srcdir)/configh.in ABOUT-NLS $(top_srcdir)/build-aux/depcomp \
- $(dist_man_MANS) COPYING build-aux/ChangeLog build-aux/ar-lib \
- build-aux/compile build-aux/config.guess \
- build-aux/config.rpath build-aux/config.sub build-aux/depcomp \
- build-aux/install-sh build-aux/missing build-aux/ltmain.sh \
- $(top_srcdir)/build-aux/ar-lib $(top_srcdir)/build-aux/compile \
- $(top_srcdir)/build-aux/config.guess \
- $(top_srcdir)/build-aux/config.rpath \
- $(top_srcdir)/build-aux/config.sub \
- $(top_srcdir)/build-aux/install-sh \
- $(top_srcdir)/build-aux/missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/dirfd.m4 \
- $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \
- $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \
- $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
- $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
- $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
@@ -218,6 +210,15 @@ ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+ $(srcdir)/configh.in $(top_srcdir)/build-aux/ar-lib \
+ $(top_srcdir)/build-aux/compile \
+ $(top_srcdir)/build-aux/install-sh \
+ $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \
+ ChangeLog INSTALL NEWS README build-aux/ChangeLog \
+ build-aux/ar-lib build-aux/compile build-aux/config.guess \
+ build-aux/config.rpath build-aux/config.sub build-aux/depcomp \
+ build-aux/install-sh build-aux/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -281,30 +282,18 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
-GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
-GMSGFMT = @GMSGFMT@
-GMSGFMT_015 = @GMSGFMT_015@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTLLIBS = @INTLLIBS@
-INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
LDFLAGS = @LDFLAGS@
-LIBICONV = @LIBICONV@
-LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
-LTLIBICONV = @LTLIBICONV@
-LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
-MSGFMT = @MSGFMT@
-MSGFMT_015 = @MSGFMT_015@
-MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -314,7 +303,6 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
-POSUB = @POSUB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SHLIB_DOT = @SHLIB_DOT@
@@ -328,11 +316,7 @@ SHOBJ_LIBS = @SHOBJ_LIBS@
SHOBJ_STATUS = @SHOBJ_STATUS@
SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@
STRIP = @STRIP@
-USE_NLS = @USE_NLS@
VERSION = @VERSION@
-XGETTEXT = @XGETTEXT@
-XGETTEXT_015 = @XGETTEXT_015@
-XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
@@ -345,22 +329,14 @@ am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
-build = @build@
build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
-host = @host@
host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
@@ -457,7 +433,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -491,7 +466,6 @@ $(srcdir)/configh.in: $(am__configure_deps)
distclean-hdr:
-rm -f config.h stamp-h1
-
install-man3: $(dist_man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
@@ -723,15 +697,15 @@ dist-xz: distdir
$(am__post_remove_distdir)
dist-tarZ: distdir
- @echo WARNING: "Support for shar distribution archives is" \
- "deprecated." >&2
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir)
dist-shar: distdir
- @echo WARNING: "Support for distribution archives compressed with" \
- "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__post_remove_distdir)
@@ -767,17 +741,17 @@ distcheck: dist
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
- mkdir $(distdir)/_build $(distdir)/_inst
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
- && $(am__cd) $(distdir)/_build \
- && ../configure \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
- --srcdir=.. --prefix="$$dc_install_base" \
+ --srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
@@ -961,6 +935,8 @@ uninstall-man: uninstall-man3
pdf-am ps ps-am tags tags-am uninstall uninstall-am \
uninstall-man uninstall-man3
+.PRECIOUS: Makefile
+
# Note that various SHOBJ_* and SHLIB_* variables are defined by
# support/shobj-conf (pulled in by configure.ac and then by automake).
@@ -1040,6 +1016,8 @@ uninstall-so:
$(RM) $(DESTDIR)$(pkgextensiondir)/*.a
$(RM) $(DESTDIR)$(pkgextensiondir)/*.lib
+uninstall-recursive: uninstall-so
+
install-exec-hook:
$(MKDIR_P) "$(DESTDIR)$(pkgextensiondir)" || exit 1; \
for i in $(ALL) ; do \
diff --git a/extension/aclocal.m4 b/extension/aclocal.m4
index e2c91528..1f7805e0 100644
--- a/extension/aclocal.m4
+++ b/extension/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
+[am__api_version='1.15'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.15], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -51,12 +51,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14.1])dnl
+[AM_AUTOMAKE_VERSION([1.15])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -118,7 +118,7 @@ AC_SUBST([AR])dnl
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -163,15 +163,14 @@ AC_SUBST([AR])dnl
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -202,7 +201,7 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -393,7 +392,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -469,7 +468,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -559,8 +558,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
@@ -633,7 +632,11 @@ to "yes", and re-run configure.
END
AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
fi
-fi])
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
@@ -662,7 +665,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -673,7 +676,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -683,7 +686,7 @@ if test x"${install_sh}" != xset; then
fi
AC_SUBST([install_sh])])
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -704,7 +707,7 @@ AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -754,7 +757,7 @@ rm -f confinc confmf
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -793,7 +796,7 @@ fi
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -822,7 +825,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -869,7 +872,7 @@ AC_LANG_POP([C])])
# For backward compatibility.
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -888,7 +891,7 @@ AC_DEFUN([AM_RUN_LOG],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -969,7 +972,7 @@ AC_CONFIG_COMMANDS_PRE(
rm -f conftest.file
])
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1029,7 +1032,7 @@ AC_SUBST([AM_BACKSLASH])dnl
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
])
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1057,7 +1060,7 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1076,7 +1079,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1208,12 +1211,3 @@ AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([m4/dirfd.m4])
-m4_include([m4/gettext.m4])
-m4_include([m4/iconv.m4])
-m4_include([m4/intlmacosx.m4])
-m4_include([m4/lib-ld.m4])
-m4_include([m4/lib-link.m4])
-m4_include([m4/lib-prefix.m4])
-m4_include([m4/nls.m4])
-m4_include([m4/po.m4])
-m4_include([m4/progtest.m4])
diff --git a/extension/build-aux/ChangeLog b/extension/build-aux/ChangeLog
index aa1f5c1f..7721ca35 100644
--- a/extension/build-aux/ChangeLog
+++ b/extension/build-aux/ChangeLog
@@ -1,3 +1,7 @@
+2015-03-18 Arnold D. Robbins <arnold@skeeve.com>
+
+ * config.guess, config.sub, ltmain.sh: Updated, from libtool 2.4.6.
+
2014-04-08 Arnold D. Robbins <arnold@skeeve.com>
* 4.1.1: Release tar ball made.
diff --git a/extension/build-aux/ar-lib b/extension/build-aux/ar-lib
index 67f5f36f..463b9ec0 100755
--- a/extension/build-aux/ar-lib
+++ b/extension/build-aux/ar-lib
@@ -4,7 +4,7 @@
me=ar-lib
scriptversion=2012-03-01.08; # UTC
-# Copyright (C) 2010-2012 Free Software Foundation, Inc.
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
# Written by Peter Rosin <peda@lysator.liu.se>.
#
# This program is free software; you can redistribute it and/or modify
diff --git a/extension/build-aux/compile b/extension/build-aux/compile
index 531136b0..a85b723c 100755
--- a/extension/build-aux/compile
+++ b/extension/build-aux/compile
@@ -3,7 +3,7 @@
scriptversion=2012-10-14.11; # UTC
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
diff --git a/extension/build-aux/config.guess b/extension/build-aux/config.guess
index 4438cd70..dbfb9786 100755
--- a/extension/build-aux/config.guess
+++ b/extension/build-aux/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-01-01'
+timestamp='2015-01-01'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -24,12 +24,12 @@ timestamp='2014-01-01'
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
#
-# Originally written by Per Bothner.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -149,7 +149,7 @@ Linux|GNU|GNU/*)
LIBC=gnu
#endif
EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
;;
esac
@@ -579,8 +579,9 @@ EOF
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
@@ -826,7 +827,7 @@ EOF
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
- i*:MSYS*:*)
+ *:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys
exit ;;
i*:windows32*:*)
@@ -969,10 +970,10 @@ EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
- or1k:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
exit ;;
- or32:Linux:*:*)
+ or32:Linux:*:* | or1k*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
@@ -1371,154 +1372,6 @@ EOF
exit ;;
esac
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
- { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit ;;
- c34*)
- echo c34-convex-bsd
- exit ;;
- c38*)
- echo c38-convex-bsd
- exit ;;
- c4*)
- echo c4-convex-bsd
- exit ;;
- esac
-fi
-
cat >&2 <<EOF
$0: unable to guess system type
diff --git a/extension/build-aux/config.sub b/extension/build-aux/config.sub
index 092cff00..6d2e94c8 100755
--- a/extension/build-aux/config.sub
+++ b/extension/build-aux/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-01-01'
+timestamp='2015-01-01'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ timestamp='2014-01-01'
# of the GNU General Public License, version 3 ("GPLv3").
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -260,7 +260,7 @@ case $basic_machine in
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| epiphany \
- | fido | fr30 | frv \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -283,8 +283,10 @@ case $basic_machine in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
@@ -296,11 +298,11 @@ case $basic_machine in
| nds32 | nds32le | nds32be \
| nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
- | open8 \
- | or1k | or32 \
+ | open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
+ | riscv32 | riscv64 \
| rl78 | rx \
| score \
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
@@ -311,6 +313,7 @@ case $basic_machine in
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
| ubicom32 \
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
| we32k \
| x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
@@ -325,6 +328,9 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
@@ -402,8 +408,10 @@ case $basic_machine in
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
@@ -415,6 +423,7 @@ case $basic_machine in
| nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
+ | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -432,6 +441,7 @@ case $basic_machine in
| ubicom32-* \
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
| vax-* \
+ | visium-* \
| we32k-* \
| x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
@@ -769,6 +779,9 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+ ;;
m68knommu)
basic_machine=m68k-unknown
os=-linux
@@ -824,6 +837,10 @@ case $basic_machine in
basic_machine=powerpc-unknown
os=-morphos
;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
msdos)
basic_machine=i386-pc
os=-msdos
@@ -1369,14 +1386,14 @@ case $os in
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1594,9 +1611,6 @@ case $basic_machine in
mips*-*)
os=-elf
;;
- or1k-*)
- os=-elf
- ;;
or32-*)
os=-coff
;;
diff --git a/extension/build-aux/depcomp b/extension/build-aux/depcomp
index 31788017..fc98710e 100755
--- a/extension/build-aux/depcomp
+++ b/extension/build-aux/depcomp
@@ -3,7 +3,7 @@
scriptversion=2013-05-30.07; # UTC
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -251,6 +251,41 @@ hp)
exit 1
;;
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
xlc)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
diff --git a/extension/build-aux/install-sh b/extension/build-aux/install-sh
index 04367377..0b0fdcbb 100755
--- a/extension/build-aux/install-sh
+++ b/extension/build-aux/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-10-30.23; # UTC
+scriptversion=2013-12-25.23; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -82,7 +82,7 @@ dir_arg=
dst_arg=
copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -139,14 +139,16 @@ while test $# -ne 0; do
-s) stripcmd=$stripprog;;
- -t) dst_arg=$2
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;;
- -T) no_target_directory=true;;
+ -T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
@@ -161,6 +163,16 @@ while test $# -ne 0; do
shift
done
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
@@ -192,6 +204,15 @@ if test $# -eq 0; then
fi
if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
@@ -253,7 +274,7 @@ do
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
- if test -n "$no_target_directory"; then
+ if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
diff --git a/extension/build-aux/missing b/extension/build-aux/missing
index cdea5149..f62bbae3 100755
--- a/extension/build-aux/missing
+++ b/extension/build-aux/missing
@@ -1,9 +1,9 @@
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
-scriptversion=2012-06-26.16; # UTC
+scriptversion=2013-10-28.13; # UTC
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -160,7 +160,7 @@ give_advice ()
;;
autom4te*)
echo "You might have modified some maintainer files that require"
- echo "the 'automa4te' program to be rebuilt."
+ echo "the 'autom4te' program to be rebuilt."
program_details 'autom4te'
;;
bison*|yacc*)
diff --git a/extension/configh.in b/extension/configh.in
index ad837667..40fad076 100644
--- a/extension/configh.in
+++ b/extension/configh.in
@@ -10,22 +10,6 @@
#endif
-/* Define to 1 if translation of program messages to the user's native
- language is requested. */
-#undef ENABLE_NLS
-
-/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
- CoreFoundation framework. */
-#undef HAVE_CFLOCALECOPYCURRENT
-
-/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
- the CoreFoundation framework. */
-#undef HAVE_CFPREFERENCESCOPYAPPVALUE
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
- */
-#undef HAVE_DCGETTEXT
-
/* Define to 1 if you have the declaration of `dirfd', and to 0 if you don't.
*/
#undef HAVE_DECL_DIRFD
@@ -52,15 +36,9 @@
/* Define to 1 if you have the `GetSystemTimeAsFileTime' function. */
#undef HAVE_GETSYSTEMTIMEASFILETIME
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#undef HAVE_GETTEXT
-
/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
-/* Define if you have the iconv() function and it works. */
-#undef HAVE_ICONV
-
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
diff --git a/extension/configure b/extension/configure
index d2a3ab2a..ac7e2622 100755
--- a/extension/configure
+++ b/extension/configure
@@ -621,7 +621,6 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-gt_needs=
ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
@@ -639,31 +638,6 @@ SHOBJ_CFLAGS
SHOBJ_CC
ac_ct_AR
AR
-POSUB
-LTLIBINTL
-LIBINTL
-INTLLIBS
-LTLIBICONV
-LIBICONV
-INTL_MACOSX_LIBS
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-XGETTEXT_EXTRA_OPTIONS
-MSGMERGE
-XGETTEXT_015
-XGETTEXT
-GMSGFMT_015
-MSGFMT_015
-GMSGFMT
-MSGFMT
-GETTEXT_MACRO_VERSION
-USE_NLS
AM_BACKSLASH
AM_DEFAULT_VERBOSITY
AM_DEFAULT_V
@@ -754,11 +728,6 @@ ac_user_opts='
enable_option_checking
enable_dependency_tracking
enable_silent_rules
-enable_nls
-with_gnu_ld
-enable_rpath
-with_libiconv_prefix
-with_libintl_prefix
enable_largefile
'
ac_precious_vars='build_alias
@@ -1371,10 +1340,6 @@ Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
_ACEOF
fi
@@ -1394,19 +1359,8 @@ Optional Features:
speeds up one-time build
--enable-silent-rules less verbose build output (undo: "make V=1")
--disable-silent-rules verbose build output (undo: "make V=0")
- --disable-nls do not use Native Language Support
- --disable-rpath do not hardcode runtime library paths
--disable-largefile omit support for large files
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-gnu-ld assume the C compiler uses GNU ld default=no
- --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
- --without-libiconv-prefix don't search for libiconv in includedir and libdir
- --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
- --without-libintl-prefix don't search for libintl in includedir and libdir
-
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
@@ -1738,52 +1692,6 @@ $as_echo "$ac_res" >&6; }
} # ac_fn_c_check_header_compile
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
# ----------------------------------------------------
# Tries to find if the field MEMBER exists in type AGGR, after including
@@ -1841,6 +1749,52 @@ $as_echo "$ac_res" >&6; }
} # ac_fn_c_check_member
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
# ac_fn_c_check_func LINENO FUNC VAR
# ----------------------------------
# Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -2237,7 +2191,6 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
-gt_needs="$gt_needs "
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
@@ -2338,8 +2291,8 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -3652,7 +3605,7 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
INSTALL="$ac_aux_dir/install-sh -c"
export INSTALL
-am__api_version='1.14'
+am__api_version='1.15'
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -3841,7 +3794,7 @@ else
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -4232,8 +4185,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)'
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}'
@@ -4420,2097 +4373,6 @@ END
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
- # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then :
- enableval=$enable_nls; USE_NLS=$enableval
-else
- USE_NLS=yes
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
-
-
-
-
- GETTEXT_MACRO_VERSION=0.18
-
-
-
-
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "msgfmt", so it can be a program name with args.
-set dummy msgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGFMT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case "$MSGFMT" in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- echo "$as_me: trying $ac_dir/$ac_word..." >&5
- if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
- (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
- test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
- ;;
-esac
-fi
-MSGFMT="$ac_cv_path_MSGFMT"
-if test "$MSGFMT" != ":"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
-$as_echo "$MSGFMT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
-set dummy gmsgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GMSGFMT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $GMSGFMT in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
- ;;
-esac
-fi
-GMSGFMT=$ac_cv_path_GMSGFMT
-if test -n "$GMSGFMT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
-$as_echo "$GMSGFMT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
- case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
- *) MSGFMT_015=$MSGFMT ;;
- esac
-
- case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
- *) GMSGFMT_015=$GMSGFMT ;;
- esac
-
-
-
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "xgettext", so it can be a program name with args.
-set dummy xgettext; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_XGETTEXT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case "$XGETTEXT" in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- echo "$as_me: trying $ac_dir/$ac_word..." >&5
- if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
- (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
- test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
- ;;
-esac
-fi
-XGETTEXT="$ac_cv_path_XGETTEXT"
-if test "$XGETTEXT" != ":"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
-$as_echo "$XGETTEXT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- rm -f messages.po
-
- case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
- *) XGETTEXT_015=$XGETTEXT ;;
- esac
-
-
-
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "msgmerge", so it can be a program name with args.
-set dummy msgmerge; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGMERGE+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case "$MSGMERGE" in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- echo "$as_me: trying $ac_dir/$ac_word..." >&5
- if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
- ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
- test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
- ;;
-esac
-fi
-MSGMERGE="$ac_cv_path_MSGMERGE"
-if test "$MSGMERGE" != ":"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
-$as_echo "$MSGMERGE" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$localedir" || localedir='${datadir}/locale'
-
-
- test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
-
-
- ac_config_commands="$ac_config_commands po-directories"
-
-
-
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
- withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
-$as_echo_n "checking for ld used by GCC... " >&6; }
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | [A-Za-z]:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${acl_cv_path_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
- *GNU* | *'with BFD'*)
- test "$with_gnu_ld" != no && break ;;
- *)
- test "$with_gnu_ld" != yes && break ;;
- esac
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi
-fi
-
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${acl_cv_prog_gnu_ld+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- acl_cv_prog_gnu_ld=yes ;;
-*)
- acl_cv_prog_gnu_ld=no ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
-$as_echo "$acl_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$acl_cv_prog_gnu_ld
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
-$as_echo_n "checking for shared library run path origin... " >&6; }
-if ${acl_cv_rpath+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
-$as_echo "$acl_cv_rpath" >&6; }
- wl="$acl_cv_wl"
- acl_libext="$acl_cv_libext"
- acl_shlibext="$acl_cv_shlibext"
- acl_libname_spec="$acl_cv_libname_spec"
- acl_library_names_spec="$acl_cv_library_names_spec"
- acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- acl_hardcode_direct="$acl_cv_hardcode_direct"
- acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
- # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
- enableval=$enable_rpath; :
-else
- enable_rpath=yes
-fi
-
-
-
-
- acl_libdirstem=lib
- acl_libdirstem2=
- case "$host_os" in
- solaris*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
-$as_echo_n "checking for 64-bit host... " >&6; }
-if ${gl_cv_solaris_64bit+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#ifdef _LP64
-sixtyfour bits
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
- gl_cv_solaris_64bit=yes
-else
- gl_cv_solaris_64bit=no
-fi
-rm -f conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
-$as_echo "$gl_cv_solaris_64bit" >&6; }
- if test $gl_cv_solaris_64bit = yes; then
- acl_libdirstem=lib/64
- case "$host_cpu" in
- sparc*) acl_libdirstem2=lib/sparcv9 ;;
- i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
- esac
- fi
- ;;
- *)
- searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
- if test -n "$searchpath"; then
- acl_save_IFS="${IFS= }"; IFS=":"
- for searchdir in $searchpath; do
- if test -d "$searchdir"; then
- case "$searchdir" in
- */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
- */../ | */.. )
- # Better ignore directories of this form. They are misleading.
- ;;
- *) searchdir=`cd "$searchdir" && pwd`
- case "$searchdir" in
- */lib64 ) acl_libdirstem=lib64 ;;
- esac ;;
- esac
- fi
- done
- IFS="$acl_save_IFS"
- fi
- ;;
- esac
- test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
-
-
-
-
-
-
-
-
-
-
-
-
- use_additional=yes
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
-
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
-
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
-
-# Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
- withval=$with_libiconv_prefix;
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
-
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
-
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/$acl_libdirstem"
- if test "$acl_libdirstem2" != "$acl_libdirstem" \
- && ! test -d "$withval/$acl_libdirstem"; then
- additional_libdir="$withval/$acl_libdirstem2"
- fi
- fi
- fi
-
-fi
-
- LIBICONV=
- LTLIBICONV=
- INCICONV=
- LIBICONV_PREFIX=
- HAVE_LIBICONV=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='iconv '
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
- else
- :
- fi
- else
- found_dir=
- found_la=
- found_so=
- found_a=
- eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
- if test -n "$acl_shlibext"; then
- shrext=".$acl_shlibext" # typically: shrext=.so
- else
- shrext=
- fi
- if test $use_additional = yes; then
- dir="$additional_libdir"
- if test -n "$acl_shlibext"; then
- if test -f "$dir/$libname$shrext"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext"
- else
- if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
- ver=`(cd "$dir" && \
- for f in "$libname$shrext".*; do echo "$f"; done \
- | sed -e "s,^$libname$shrext\\\\.,," \
- | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
- | sed 1q ) 2>/dev/null`
- if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext.$ver"
- fi
- else
- eval library_names=\"$acl_library_names_spec\"
- for f in $library_names; do
- if test -f "$dir/$f"; then
- found_dir="$dir"
- found_so="$dir/$f"
- break
- fi
- done
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- if test -f "$dir/$libname.$acl_libext"; then
- found_dir="$dir"
- found_a="$dir/$libname.$acl_libext"
- fi
- fi
- if test "X$found_dir" != "X"; then
- if test -f "$dir/$libname.la"; then
- found_la="$dir/$libname.la"
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIBICONV; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$acl_shlibext"; then
- if test -f "$dir/$libname$shrext"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext"
- else
- if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
- ver=`(cd "$dir" && \
- for f in "$libname$shrext".*; do echo "$f"; done \
- | sed -e "s,^$libname$shrext\\\\.,," \
- | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
- | sed 1q ) 2>/dev/null`
- if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext.$ver"
- fi
- else
- eval library_names=\"$acl_library_names_spec\"
- for f in $library_names; do
- if test -f "$dir/$f"; then
- found_dir="$dir"
- found_so="$dir/$f"
- break
- fi
- done
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- if test -f "$dir/$libname.$acl_libext"; then
- found_dir="$dir"
- found_a="$dir/$libname.$acl_libext"
- fi
- fi
- if test "X$found_dir" != "X"; then
- if test -f "$dir/$libname.la"; then
- found_la="$dir/$libname.la"
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- if test "$enable_rpath" = no \
- || test "X$found_dir" = "X/usr/$acl_libdirstem" \
- || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
- else
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- if test "$acl_hardcode_direct" = yes; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
- else
- if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- haveit=
- for x in $LDFLAGS $LIBICONV; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
- fi
- if test "$acl_hardcode_minus_L" != no; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
- else
- LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
- else
- LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
- fi
- fi
- additional_includedir=
- case "$found_dir" in
- */$acl_libdirstem | */$acl_libdirstem/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
- if test "$name" = 'iconv'; then
- LIBICONV_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- */$acl_libdirstem2 | */$acl_libdirstem2/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
- if test "$name" = 'iconv'; then
- LIBICONV_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INCICONV; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- if test -n "$found_la"; then
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
- && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
- || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIBICONV; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIBICONV; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
- LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
- ;;
- esac
- done
- fi
- else
- LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
- LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$acl_hardcode_libdir_separator"; then
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
- done
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
- else
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- for found_dir in $ltrpathdirs; do
- LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
- done
- fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
-$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
-if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <CoreFoundation/CFPreferences.h>
-int
-main ()
-{
-CFPreferencesCopyAppValue(NULL, NULL)
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- gt_cv_func_CFPreferencesCopyAppValue=yes
-else
- gt_cv_func_CFPreferencesCopyAppValue=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LIBS="$gt_save_LIBS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
-
-$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
-$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
-if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <CoreFoundation/CFLocale.h>
-int
-main ()
-{
-CFLocaleCopyCurrent();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- gt_cv_func_CFLocaleCopyCurrent=yes
-else
- gt_cv_func_CFLocaleCopyCurrent=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LIBS="$gt_save_LIBS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
- if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-
-$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
-
- fi
- INTL_MACOSX_LIBS=
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
- INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
- fi
-
-
-
-
-
-
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- case " $gt_needs " in
- *" need-formatstring-macros "*) gt_api_version=3 ;;
- *" need-ngettext "*) gt_api_version=2 ;;
- *) gt_api_version=1 ;;
- esac
- gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
- gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
-
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
-
-
- if test $gt_api_version -ge 3; then
- gt_revision_test_code='
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-'
- else
- gt_revision_test_code=
- fi
- if test $gt_api_version -ge 2; then
- gt_expression_test_code=' + * ngettext ("", "", 0)'
- else
- gt_expression_test_code=
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
-$as_echo_n "checking for GNU gettext in libc... " >&6; }
-if eval \${$gt_func_gnugettext_libc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;
-int
-main ()
-{
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$gt_func_gnugettext_libc=yes"
-else
- eval "$gt_func_gnugettext_libc=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$gt_func_gnugettext_libc
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
-
-
-
-
-
- am_save_CPPFLAGS="$CPPFLAGS"
-
- for element in $INCICONV; do
- haveit=
- for x in $CPPFLAGS; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
- fi
- done
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <iconv.h>
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <iconv.h>
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- am_cv_lib_iconv=yes
- am_cv_func_iconv=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LIBS="$am_save_LIBS"
- fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
- if test "$am_cv_func_iconv" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- am_save_LIBS="$LIBS"
- if test $am_cv_lib_iconv = yes; then
- LIBS="$LIBS $LIBICONV"
- fi
- if test "$cross_compiling" = yes; then :
- case "$host_os" in
- aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
- *) am_cv_func_iconv_works="guessing yes" ;;
- esac
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include <iconv.h>
-#include <string.h>
-int main ()
-{
- /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
- returns. */
- {
- iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
- if (cd_utf8_to_88591 != (iconv_t)(-1))
- {
- static const char input[] = "\342\202\254"; /* EURO SIGN */
- char buf[10];
- const char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_utf8_to_88591,
- (char **) &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res == 0)
- return 1;
- }
- }
- /* Test against Solaris 10 bug: Failures are not distinguishable from
- successful returns. */
- {
- iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
- if (cd_ascii_to_88591 != (iconv_t)(-1))
- {
- static const char input[] = "\263";
- char buf[10];
- const char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_ascii_to_88591,
- (char **) &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res == 0)
- return 1;
- }
- }
-#if 0 /* This bug could be worked around by the caller. */
- /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
- {
- iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
- if (cd_88591_to_utf8 != (iconv_t)(-1))
- {
- static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char buf[50];
- const char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_88591_to_utf8,
- (char **) &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if ((int)res > 0)
- return 1;
- }
- }
-#endif
- /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
- provided. */
- if (/* Try standardized names. */
- iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
- /* Try IRIX, OSF/1 names. */
- && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
- /* Try AIX names. */
- && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
- /* Try HP-UX names. */
- && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
- return 1;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- am_cv_func_iconv_works=yes
-else
- am_cv_func_iconv_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- LIBS="$am_save_LIBS"
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
- case "$am_cv_func_iconv_works" in
- *no) am_func_iconv=no am_cv_lib_iconv=no ;;
- *) am_func_iconv=yes ;;
- esac
- else
- am_func_iconv=no am_cv_lib_iconv=no
- fi
- if test "$am_func_iconv" = yes; then
-
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
-
- fi
- if test "$am_cv_lib_iconv" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
- else
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
-
-
-
-
-
-
-
-
-
-
-
- use_additional=yes
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
-
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
-
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
-
-# Check whether --with-libintl-prefix was given.
-if test "${with_libintl_prefix+set}" = set; then :
- withval=$with_libintl_prefix;
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
-
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
-
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/$acl_libdirstem"
- if test "$acl_libdirstem2" != "$acl_libdirstem" \
- && ! test -d "$withval/$acl_libdirstem"; then
- additional_libdir="$withval/$acl_libdirstem2"
- fi
- fi
- fi
-
-fi
-
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- LIBINTL_PREFIX=
- HAVE_LIBINTL=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='intl '
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
- else
- :
- fi
- else
- found_dir=
- found_la=
- found_so=
- found_a=
- eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
- if test -n "$acl_shlibext"; then
- shrext=".$acl_shlibext" # typically: shrext=.so
- else
- shrext=
- fi
- if test $use_additional = yes; then
- dir="$additional_libdir"
- if test -n "$acl_shlibext"; then
- if test -f "$dir/$libname$shrext"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext"
- else
- if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
- ver=`(cd "$dir" && \
- for f in "$libname$shrext".*; do echo "$f"; done \
- | sed -e "s,^$libname$shrext\\\\.,," \
- | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
- | sed 1q ) 2>/dev/null`
- if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext.$ver"
- fi
- else
- eval library_names=\"$acl_library_names_spec\"
- for f in $library_names; do
- if test -f "$dir/$f"; then
- found_dir="$dir"
- found_so="$dir/$f"
- break
- fi
- done
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- if test -f "$dir/$libname.$acl_libext"; then
- found_dir="$dir"
- found_a="$dir/$libname.$acl_libext"
- fi
- fi
- if test "X$found_dir" != "X"; then
- if test -f "$dir/$libname.la"; then
- found_la="$dir/$libname.la"
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIBINTL; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test -n "$acl_shlibext"; then
- if test -f "$dir/$libname$shrext"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext"
- else
- if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
- ver=`(cd "$dir" && \
- for f in "$libname$shrext".*; do echo "$f"; done \
- | sed -e "s,^$libname$shrext\\\\.,," \
- | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
- | sed 1q ) 2>/dev/null`
- if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
- found_dir="$dir"
- found_so="$dir/$libname$shrext.$ver"
- fi
- else
- eval library_names=\"$acl_library_names_spec\"
- for f in $library_names; do
- if test -f "$dir/$f"; then
- found_dir="$dir"
- found_so="$dir/$f"
- break
- fi
- done
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- if test -f "$dir/$libname.$acl_libext"; then
- found_dir="$dir"
- found_a="$dir/$libname.$acl_libext"
- fi
- fi
- if test "X$found_dir" != "X"; then
- if test -f "$dir/$libname.la"; then
- found_la="$dir/$libname.la"
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- if test "$enable_rpath" = no \
- || test "X$found_dir" = "X/usr/$acl_libdirstem" \
- || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
- else
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- if test "$acl_hardcode_direct" = yes; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
- else
- if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- haveit=
- for x in $LDFLAGS $LIBINTL; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
- fi
- if test "$acl_hardcode_minus_L" != no; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
- else
- LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
- else
- LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
- fi
- fi
- additional_includedir=
- case "$found_dir" in
- */$acl_libdirstem | */$acl_libdirstem/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
- if test "$name" = 'intl'; then
- LIBINTL_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- */$acl_libdirstem2 | */$acl_libdirstem2/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
- if test "$name" = 'intl'; then
- LIBINTL_PREFIX="$basedir"
- fi
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INCINTL; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- if test -n "$found_la"; then
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
- && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
- || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
- if test -n "$GCC"; then
- case $host_os in
- linux* | gnu* | k*bsd*-gnu) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIBINTL; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIBINTL; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
- LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
- ;;
- esac
- done
- fi
- else
- LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
- LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$acl_hardcode_libdir_separator"; then
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
- done
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
- else
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$acl_hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- for found_dir in $ltrpathdirs; do
- LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
- done
- fi
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
-$as_echo_n "checking for GNU gettext in libintl... " >&6; }
-if eval \${$gt_func_gnugettext_libintl+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);
-int
-main ()
-{
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$gt_func_gnugettext_libintl=yes"
-else
- eval "$gt_func_gnugettext_libintl=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);
-int
-main ()
-{
-bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- eval "$gt_func_gnugettext_libintl=yes"
-
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"
-fi
-eval ac_res=\$$gt_func_gnugettext_libintl
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- fi
-
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
- || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
-
-
- if test -n "$INTL_MACOSX_LIBS"; then
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
- LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
- fi
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
-
-$as_echo "#define ENABLE_NLS 1" >>confdefs.h
-
- else
- USE_NLS=no
- fi
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
-$as_echo_n "checking whether to use NLS... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
- if test "$USE_NLS" = "yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
-$as_echo_n "checking where the gettext function comes from... " >&6; }
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
-$as_echo "$gt_source" >&6; }
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
-$as_echo_n "checking how to link with libintl... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
-$as_echo "$LIBINTL" >&6; }
-
- for element in $INCINTL; do
- haveit=
- for x in $CPPFLAGS; do
-
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- eval x=\"$x\"
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
- fi
- done
-
- fi
-
-
-$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
-
-
-$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
-
- fi
-
- POSUB=po
- fi
-
-
-
- INTLLIBS="$LIBINTL"
-
-
-
-
-
-
-
-
ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default"
if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then :
@@ -7161,7409 +5023,6 @@ fi
fi
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
- for ac_i in 1 2 3 4 5 6 7; do
- ac_script="$ac_script$as_nl$ac_script"
- done
- echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
- { ac_script=; unset ac_script;}
- if test -z "$SED"; then
- ac_path_SED_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in sed gsed; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
- # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
-*GNU*)
- ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo '' >> "conftest.nl"
- "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_SED_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_SED="$ac_path_SED"
- ac_path_SED_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_SED_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_SED"; then
- as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
- fi
-else
- ac_cv_path_SED=$SED
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
- rm -f conftest.sed
-
-test -z "$SED" && SED=sed
-Xsed="$SED -e 1s/^X//"
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
- then ac_cv_path_FGREP="$GREP -F"
- else
- if test -z "$FGREP"; then
- ac_path_FGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in fgrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_FGREP" || continue
-# Check for GNU ac_path_FGREP and select it if it is found.
- # Check for GNU $ac_path_FGREP
-case `"$ac_path_FGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'FGREP' >> "conftest.nl"
- "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_FGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_FGREP="$ac_path_FGREP"
- ac_path_FGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_FGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_FGREP"; then
- as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_FGREP=$FGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
- FGREP="$ac_cv_path_FGREP"
-
-
-test -z "$GREP" && GREP=grep
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
- withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
-else
- with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test yes = "$GCC"; then
- # Check if gcc -print-prog-name=ld gives a path.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return, which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [\\/]* | ?:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
- # Canonicalize the pathname of ld
- ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
- while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD=$ac_prog
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test yes = "$with_gnu_ld"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
-fi
-if ${lt_cv_path_LD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$LD"; then
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- lt_cv_path_LD=$ac_dir/$ac_prog
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some variants of GNU ld only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
- *GNU* | *'with BFD'*)
- test no != "$with_gnu_ld" && break
- ;;
- *)
- test yes != "$with_gnu_ld" && break
- ;;
- esac
- fi
- done
- IFS=$lt_save_ifs
-else
- lt_cv_path_LD=$LD # Let the user override the test with a path.
-fi
-fi
-
-LD=$lt_cv_path_LD
-if test -n "$LD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # I'd rather use --version here, but apparently some GNU lds only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
- lt_cv_prog_gnu_ld=yes
- ;;
-*)
- lt_cv_prog_gnu_ld=no
- ;;
-esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if ${lt_cv_path_NM+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NM"; then
- # Let the user override the test.
- lt_cv_path_NM=$NM
-else
- lt_nm_to_check=${ac_tool_prefix}nm
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
- lt_nm_to_check="$lt_nm_to_check nm"
- fi
- for lt_tmp_nm in $lt_nm_to_check; do
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- tmp_nm=$ac_dir/$lt_tmp_nm
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
- # Check to see if the nm accepts a BSD-compat flag.
- # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
- # nm: unknown option "B" ignored
- # Tru64's nm complains that /dev/null is an invalid object file
- # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
- case $build_os in
- mingw*) lt_bad_file=conftest.nm/nofile ;;
- *) lt_bad_file=/dev/null ;;
- esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
- *$lt_bad_file* | *'Invalid file or object type'*)
- lt_cv_path_NM="$tmp_nm -B"
- break 2
- ;;
- *)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
- */dev/null*)
- lt_cv_path_NM="$tmp_nm -p"
- break 2
- ;;
- *)
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- ;;
- esac
- ;;
- esac
- fi
- done
- IFS=$lt_save_ifs
- done
- : ${lt_cv_path_NM=no}
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
-if test no != "$lt_cv_path_NM"; then
- NM=$lt_cv_path_NM
-else
- # Didn't find any BSD compatible name lister, look for dumpbin.
- if test -n "$DUMPBIN"; then :
- # Let the user override the test.
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in dumpbin "link -dump"
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DUMPBIN"; then
- ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DUMPBIN=$ac_cv_prog_DUMPBIN
-if test -n "$DUMPBIN"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$DUMPBIN" && break
- done
-fi
-if test -z "$DUMPBIN"; then
- ac_ct_DUMPBIN=$DUMPBIN
- for ac_prog in dumpbin "link -dump"
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DUMPBIN"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
-if test -n "$ac_ct_DUMPBIN"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_DUMPBIN" && break
-done
-
- if test "x$ac_ct_DUMPBIN" = x; then
- DUMPBIN=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DUMPBIN=$ac_ct_DUMPBIN
- fi
-fi
-
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
- *COFF*)
- DUMPBIN="$DUMPBIN -symbols -headers"
- ;;
- *)
- DUMPBIN=:
- ;;
- esac
- fi
-
- if test : != "$DUMPBIN"; then
- NM=$DUMPBIN
- fi
-fi
-test -z "$NM" && NM=nm
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_nm_interface="BSD nm"
- echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
- (eval "$ac_compile" 2>conftest.err)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
- (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
- cat conftest.err >&5
- (eval echo "\"\$as_me:$LINENO: output\"" >&5)
- cat conftest.out >&5
- if $GREP 'External.*some_variable' conftest.out > /dev/null; then
- lt_cv_nm_interface="MS dumpbin"
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
-# find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- i=0
- teststring=ABCD
-
- case $build_os in
- msdosdjgpp*)
- # On DJGPP, this test can blow up pretty badly due to problems in libc
- # (any single argument exceeding 2000 bytes causes a buffer overrun
- # during glob expansion). Even if it were fixed, the result of this
- # check would be larger than it should be.
- lt_cv_sys_max_cmd_len=12288; # 12K is about right
- ;;
-
- gnu*)
- # Under GNU Hurd, this test is not required because there is
- # no limit to the length of command line arguments.
- # Libtool will interpret -1 as no limit whatsoever
- lt_cv_sys_max_cmd_len=-1;
- ;;
-
- cygwin* | mingw* | cegcc*)
- # On Win9x/ME, this test blows up -- it succeeds, but takes
- # about 5 minutes as the teststring grows exponentially.
- # Worse, since 9x/ME are not pre-emptively multitasking,
- # you end up with a "frozen" computer, even though with patience
- # the test eventually succeeds (with a max line length of 256k).
- # Instead, let's just punt: use the minimum linelength reported by
- # all of the supported platforms: 8192 (on NT/2K/XP).
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- mint*)
- # On MiNT this can take a long time and run out of memory.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
- # This has been around since 386BSD, at least. Likely further.
- if test -x /sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
- elif test -x /usr/sbin/sysctl; then
- lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
- else
- lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
- fi
- # And add a safety zone
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- ;;
-
- interix*)
- # We know the value 262144 and hardcode it with a safety zone (like BSD)
- lt_cv_sys_max_cmd_len=196608
- ;;
-
- os2*)
- # The test takes a long time on OS/2.
- lt_cv_sys_max_cmd_len=8192
- ;;
-
- osf*)
- # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
- # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
- # nice to cause kernel panics so lets avoid the loop below.
- # First set a reasonable default.
- lt_cv_sys_max_cmd_len=16384
- #
- if test -x /sbin/sysconfig; then
- case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
- *1*) lt_cv_sys_max_cmd_len=-1 ;;
- esac
- fi
- ;;
- sco3.2v5*)
- lt_cv_sys_max_cmd_len=102400
- ;;
- sysv5* | sco5v6* | sysv4.2uw2*)
- kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
- if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
- else
- lt_cv_sys_max_cmd_len=32768
- fi
- ;;
- *)
- lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
- if test -n "$lt_cv_sys_max_cmd_len" && \
- test undefined != "$lt_cv_sys_max_cmd_len"; then
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
- else
- # Make teststring a little bigger before we do anything with it.
- # a 1K string should be a reasonable start.
- for i in 1 2 3 4 5 6 7 8; do
- teststring=$teststring$teststring
- done
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- while { test X`env echo "$teststring$teststring" 2>/dev/null` \
- = "X$teststring$teststring"; } >/dev/null 2>&1 &&
- test 17 != "$i" # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- # Only check the string length outside the loop.
- lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
- teststring=
- # Add a significant safety factor because C++ compilers can tack on
- # massive amounts of additional arguments before passing them to the
- # linker. It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
- fi
- ;;
- esac
-
-fi
-
-if test -n "$lt_cv_sys_max_cmd_len"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
-fi
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-
-
-
-
-
-: ${CP="cp -f"}
-: ${MV="mv -f"}
-: ${RM="rm -f"}
-
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- lt_unset=unset
-else
- lt_unset=false
-fi
-
-
-
-
-
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- lt_SP2NL='tr \040 \012'
- lt_NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- lt_SP2NL='tr \100 \n'
- lt_NL2SP='tr \r\n \100\100'
- ;;
-esac
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
- ;;
- esac
- ;;
- *-*-cygwin* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
- ;;
- *-*-cygwin* )
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
- * ) # otherwise, assume *nix
- lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
- ;;
- esac
- ;;
- * ) # unhandled hosts (and "normal" native builds)
- lt_cv_to_host_file_cmd=func_convert_file_noop
- ;;
-esac
-
-fi
-
-to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- #assume ordinary cross tools, or native build.
-lt_cv_to_tool_file_cmd=func_convert_file_noop
-case $host in
- *-*-mingw* )
- case $build in
- *-*-mingw* ) # actually msys
- lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
- ;;
- esac
- ;;
-esac
-
-fi
-
-to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_reload_flag='-r'
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-case $host_os in
- cygwin* | mingw* | pw32* | cegcc*)
- if test yes != "$GCC"; then
- reload_cmds=false
- fi
- ;;
- darwin*)
- if test yes = "$GCC"; then
- reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
- else
- reload_cmds='$LD$reload_flag -o $output$reload_objs'
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OBJDUMP"; then
- ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
- ac_ct_OBJDUMP=$OBJDUMP
- # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OBJDUMP"; then
- ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OBJDUMP="objdump"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OBJDUMP" = x; then
- OBJDUMP="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OBJDUMP=$ac_ct_OBJDUMP
- fi
-else
- OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# 'unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# that responds to the $file_magic_cmd with a given extended regex.
-# If you have 'file' or equivalent on your system and you're not sure
-# whether 'pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix[4-9]*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-beos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-bsdi[45]*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
- lt_cv_file_magic_test_file=/shlib/libc.so
- ;;
-
-cygwin*)
- # func_win32_libid is a shell function defined in ltmain.sh
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- ;;
-
-mingw* | pw32*)
- # Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump',
- # unless we find 'file', for example because we are cross-compiling.
- if ( file / ) >/dev/null 2>&1; then
- lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
- lt_cv_file_magic_cmd='func_win32_libid'
- else
- # Keep this pattern in sync with the one in func_win32_libid.
- lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- fi
- ;;
-
-cegcc*)
- # use the weaker test based on 'objdump'. See mingw*.
- lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
- ;;
-
-darwin* | rhapsody*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-freebsd* | dragonfly*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- case $host_cpu in
- i*86 )
- # Not sure whether the presence of OpenBSD here was a mistake.
- # Let's accept both of them until this is cleared up.
- lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
- ;;
- esac
- else
- lt_cv_deplibs_check_method=pass_all
- fi
- ;;
-
-haiku*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
- case $host_cpu in
- ia64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
- lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
- ;;
- hppa*64*)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
- lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
- ;;
- *)
- lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
- ;;
- esac
- ;;
-
-interix[3-9]*)
- # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $LD in
- *-32|*"-32 ") libmagic=32-bit;;
- *-n32|*"-n32 ") libmagic=N32;;
- *-64|*"-64 ") libmagic=64-bit;;
- *) libmagic=never-match;;
- esac
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
- fi
- ;;
-
-newos6*)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libnls.so
- ;;
-
-*nto* | *qnx*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-openbsd* | bitrig*)
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
- else
- lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
- fi
- ;;
-
-osf3* | osf4* | osf5*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-rdos*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-solaris*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
-sysv4 | sysv4.3*)
- case $host_vendor in
- motorola)
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
- lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
- ;;
- ncr)
- lt_cv_deplibs_check_method=pass_all
- ;;
- sequent)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
- ;;
- sni)
- lt_cv_file_magic_cmd='/bin/file'
- lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
- lt_cv_file_magic_test_file=/lib/libc.so
- ;;
- siemens)
- lt_cv_deplibs_check_method=pass_all
- ;;
- pc)
- lt_cv_deplibs_check_method=pass_all
- ;;
- esac
- ;;
-
-tpf*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
-
-file_magic_glob=
-want_nocaseglob=no
-if test "$build" = "$host"; then
- case $host_os in
- mingw* | pw32*)
- if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
- want_nocaseglob=yes
- else
- file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
- fi
- ;;
- esac
-fi
-
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DLLTOOL"; then
- ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
- ac_ct_DLLTOOL=$DLLTOOL
- # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DLLTOOL"; then
- ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DLLTOOL="dlltool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DLLTOOL" = x; then
- DLLTOOL="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DLLTOOL=$ac_ct_DLLTOOL
- fi
-else
- DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_sharedlib_from_linklib_cmd='unknown'
-
-case $host_os in
-cygwin* | mingw* | pw32* | cegcc*)
- # two different shell functions defined in ltmain.sh;
- # decide which one to use based on capabilities of $DLLTOOL
- case `$DLLTOOL --help 2>&1` in
- *--identify-strict*)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
- ;;
- *)
- lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
- ;;
- esac
- ;;
-*)
- # fallback: assume linklib IS sharedlib
- lt_cv_sharedlib_from_linklib_cmd=$ECHO
- ;;
-esac
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
-sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
-test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- for ac_prog in ar
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$AR" && break
- done
-fi
-if test -z "$AR"; then
- ac_ct_AR=$AR
- for ac_prog in ar
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_AR="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_AR" && break
-done
-
- if test "x$ac_ct_AR" = x; then
- AR="false"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-fi
-
-: ${AR=ar}
-: ${AR_FLAGS=cru}
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ar_at_file=no
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- echo conftest.$ac_objext > conftest.lst
- lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -eq "$ac_status"; then
- # Ensure the archiver fails upon bogus file names.
- rm -f conftest.$ac_objext libconftest.a
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
- (eval $lt_ar_try) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if test 0 -ne "$ac_status"; then
- lt_cv_ar_at_file=@
- fi
- fi
- rm -f conftest.* libconftest.a
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
-
-if test no = "$lt_cv_ar_at_file"; then
- archiver_list_spec=
-else
- archiver_list_spec=$lt_cv_ar_at_file
-fi
-
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$STRIP"; then
- ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_STRIP="${ac_tool_prefix}strip"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
- ac_ct_STRIP=$STRIP
- # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_STRIP"; then
- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_STRIP="strip"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_STRIP" = x; then
- STRIP=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- STRIP=$ac_ct_STRIP
- fi
-else
- STRIP="$ac_cv_prog_STRIP"
-fi
-
-test -z "$STRIP" && STRIP=:
-
-
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-test -z "$RANLIB" && RANLIB=:
-
-
-
-
-
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- bitrig* | openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
- ;;
- *)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
-fi
-
-case $host_os in
- darwin*)
- lock_old_archive_extraction=yes ;;
- *)
- lock_old_archive_extraction=no ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if ${lt_cv_sys_global_symbol_pipe+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[BCDT]'
- ;;
-cygwin* | mingw* | pw32* | cegcc*)
- symcode='[ABCDGISTW]'
- ;;
-hpux*)
- if test ia64 = "$host_cpu"; then
- symcode='[ABCDEGRST]'
- fi
- ;;
-irix* | nonstopux*)
- symcode='[BCDEGRST]'
- ;;
-osf*)
- symcode='[BCDEGQRST]'
- ;;
-solaris*)
- symcode='[BDRT]'
- ;;
-sco3.2v5*)
- symcode='[DT]'
- ;;
-sysv4.2uw2*)
- symcode='[DT]'
- ;;
-sysv5* | sco5v6* | unixware* | OpenUNIX*)
- symcode='[ABDT]'
- ;;
-sysv4)
- symcode='[DFNSTU]'
- ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
- symcode='[ABCDGIRSTW]' ;;
-esac
-
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
- # Adjust the below global symbol transforms to fixup imported variables.
- lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
- lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
- lt_c_name_lib_hook="\
- -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
- -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
-else
- # Disable hooks by default.
- lt_cv_sys_global_symbol_to_import=
- lt_cdecl_hook=
- lt_c_name_hook=
- lt_c_name_lib_hook=
-fi
-
-# Transform an extracted symbol line into a proper C declaration.
-# Some systems (esp. on ia64) link data and code symbols differently,
-# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n"\
-$lt_cdecl_hook\
-" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
-$lt_c_name_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
-
-# Transform an extracted symbol line into symbol name with lib prefix and
-# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
-$lt_c_name_lib_hook\
-" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
-" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
-" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
- opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
- ;;
-esac
-
-# Try without a prefix underscore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
- symxfrm="\\1 $ac_symprfx\\2 \\2"
-
- # Write the raw and C identifiers.
- if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- # Fake it for dumpbin and say T for any non-static function,
- # D for any global variable and I for any imported variable.
- # Also find C++ and __fastcall symbols from MSVC++,
- # which start with @ or ?.
- lt_cv_sys_global_symbol_pipe="$AWK '"\
-" {last_section=section; section=\$ 3};"\
-" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
-" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
-" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
-" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
-" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
-" \$ 0!~/External *\|/{next};"\
-" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
-" {if(hide[section]) next};"\
-" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
-" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
-" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
-" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
-" ' prfx=^$ac_symprfx"
- else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
- fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
-
- # Check to see that the pipe works correctly.
- pipe_works=no
-
- rm -f conftest*
- cat > conftest.$ac_ext <<_LT_EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(void);
-void nm_test_func(void){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-_LT_EOF
-
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
- (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
-
- # Make sure that we snagged all the symbols we need.
- if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
- if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<_LT_EOF > conftest.$ac_ext
-/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
-#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
-/* DATA imports from DLLs on WIN32 can't be const, because runtime
- relocations are performed -- see ld's documentation on pseudo-relocs. */
-# define LT_DLSYM_CONST
-#elif defined __osf__
-/* This system does not cope well with relocations in const data. */
-# define LT_DLSYM_CONST
-#else
-# define LT_DLSYM_CONST const
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-_LT_EOF
- # Now generate the symbol file.
- eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
-
- cat <<_LT_EOF >> conftest.$ac_ext
-
-/* The mapping between symbol names and symbols. */
-LT_DLSYM_CONST struct {
- const char *name;
- void *address;
-}
-lt__PROGRAM__LTX_preloaded_symbols[] =
-{
- { "@PROGRAM@", (void *) 0 },
-_LT_EOF
- $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
- cat <<\_LT_EOF >> conftest.$ac_ext
- {0, (void *) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
- return lt__PROGRAM__LTX_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-_LT_EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- lt_globsym_save_LIBS=$LIBS
- lt_globsym_save_CFLAGS=$CFLAGS
- LIBS=conftstm.$ac_objext
- CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s conftest$ac_exeext; then
- pipe_works=yes
- fi
- LIBS=$lt_globsym_save_LIBS
- CFLAGS=$lt_globsym_save_CFLAGS
- else
- echo "cannot find nm_test_func in $nlist" >&5
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&5
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
- fi
- else
- echo "$progname: failed program was:" >&5
- cat conftest.$ac_ext >&5
- fi
- rm -rf conftest* conftst*
-
- # Do not use the global_symbol_pipe unless it works.
- if test yes = "$pipe_works"; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-
-fi
-
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-fi
-
-# Response file support.
-if test "$lt_cv_nm_interface" = "MS dumpbin"; then
- nm_file_list_spec='@'
-elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
- nm_file_list_spec='@'
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
-
-# Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
- withval=$with_sysroot;
-else
- with_sysroot=no
-fi
-
-
-lt_sysroot=
-case $with_sysroot in #(
- yes)
- if test yes = "$GCC"; then
- lt_sysroot=`$CC --print-sysroot 2>/dev/null`
- fi
- ;; #(
- /*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
- ;; #(
- no|'')
- ;; #(
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
-$as_echo "$with_sysroot" >&6; }
- as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
- ;;
-esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
-$as_echo_n "checking for a working dd... " >&6; }
-if ${ac_cv_path_lt_DD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-: ${lt_DD:=$DD}
-if test -z "$lt_DD"; then
- ac_path_lt_DD_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in dd; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_lt_DD" || continue
-if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
-fi
- $ac_path_lt_DD_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_lt_DD"; then
- :
- fi
-else
- ac_cv_path_lt_DD=$lt_DD
-fi
-
-rm -f conftest.i conftest2.i conftest.out
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
-$as_echo "$ac_cv_path_lt_DD" >&6; }
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
-$as_echo_n "checking how to truncate binary pipes... " >&6; }
-if ${lt_cv_truncate_bin+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- printf 0123456789abcdef0123456789abcdef >conftest.i
-cat conftest.i conftest.i >conftest2.i
-lt_cv_truncate_bin=
-if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
- cmp -s conftest.i conftest.out \
- && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
-fi
-rm -f conftest.i conftest2.i conftest.out
-test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
-$as_echo "$lt_cv_truncate_bin" >&6; }
-
-
-
-
-
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
- enableval=$enable_libtool_lock;
-fi
-
-test no = "$enable_libtool_lock" || enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
- # Find out what ABI is being produced by ac_compile, and set mode
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `/usr/bin/file conftest.$ac_objext` in
- *ELF-32*)
- HPUX_IA64_MODE=32
- ;;
- *ELF-64*)
- HPUX_IA64_MODE=64
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-*-*-irix6*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- if test yes = "$lt_cv_prog_gnu_ld"; then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -melf32bsmip"
- ;;
- *N32*)
- LD="${LD-ld} -melf32bmipn32"
- ;;
- *64-bit*)
- LD="${LD-ld} -melf64bmip"
- ;;
- esac
- else
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- fi
- rm -rf conftest*
- ;;
-
-mips64*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo '#line '$LINENO' "configure"' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- emul="${emul}32"
- ;;
- *64-bit*)
- emul="${emul}64"
- ;;
- esac
- case `/usr/bin/file conftest.$ac_objext` in
- *MSB*)
- emul="${emul}btsmip"
- ;;
- *LSB*)
- emul="${emul}ltsmip"
- ;;
- esac
- case `/usr/bin/file conftest.$ac_objext` in
- *N32*)
- emul="${emul}n32"
- ;;
- esac
- LD="${LD-ld} -m $emul"
- fi
- rm -rf conftest*
- ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly. Note that the listed cases only cover the
- # situations where additional linker options are needed (such as when
- # doing 32-bit compilation for a host where ld defaults to 64-bit, or
- # vice versa); the common cases where no linker options are needed do
- # not appear in the list.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
- *32-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_i386_fbsd"
- ;;
- x86_64-*linux*)
- case `/usr/bin/file conftest.o` in
- *x86-64*)
- LD="${LD-ld} -m elf32_x86_64"
- ;;
- *)
- LD="${LD-ld} -m elf_i386"
- ;;
- esac
- ;;
- powerpc64le-*linux*)
- LD="${LD-ld} -m elf32lppclinux"
- ;;
- powerpc64-*linux*)
- LD="${LD-ld} -m elf32ppclinux"
- ;;
- s390x-*linux*)
- LD="${LD-ld} -m elf_s390"
- ;;
- sparc64-*linux*)
- LD="${LD-ld} -m elf32_sparc"
- ;;
- esac
- ;;
- *64-bit*)
- case $host in
- x86_64-*kfreebsd*-gnu)
- LD="${LD-ld} -m elf_x86_64_fbsd"
- ;;
- x86_64-*linux*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- powerpcle-*linux*)
- LD="${LD-ld} -m elf64lppc"
- ;;
- powerpc-*linux*)
- LD="${LD-ld} -m elf64ppc"
- ;;
- s390*-*linux*|s390*-*tpf*)
- LD="${LD-ld} -m elf64_s390"
- ;;
- sparc*-*linux*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS=$CFLAGS
- CFLAGS="$CFLAGS -belf"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_cc_needs_belf=yes
-else
- lt_cv_cc_needs_belf=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
- if test yes != "$lt_cv_cc_needs_belf"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS=$SAVE_CFLAGS
- fi
- ;;
-*-*solaris*)
- # Find out what ABI is being produced by ac_compile, and set linker
- # options accordingly.
- echo 'int i;' > conftest.$ac_ext
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
- *64-bit*)
- case $lt_cv_prog_gnu_ld in
- yes*)
- case $host in
- i?86-*-solaris*|x86_64-*-solaris*)
- LD="${LD-ld} -m elf_x86_64"
- ;;
- sparc*-*-solaris*)
- LD="${LD-ld} -m elf64_sparc"
- ;;
- esac
- # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
- if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
- LD=${LD-ld}_sol2
- fi
- ;;
- *)
- if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
- LD="${LD-ld} -64"
- fi
- ;;
- esac
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
-esac
-
-need_locks=$enable_libtool_lock
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
-set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MANIFEST_TOOL"; then
- ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
-if test -n "$MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
- ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
- # Extract the first word of "mt", so it can be a program name with args.
-set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_MANIFEST_TOOL"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
-if test -n "$ac_ct_MANIFEST_TOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_MANIFEST_TOOL" = x; then
- MANIFEST_TOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
- fi
-else
- MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
-fi
-
-test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_path_mainfest_tool=no
- echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
- $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
- cat conftest.err >&5
- if $GREP 'Manifest Tool' conftest.out > /dev/null; then
- lt_cv_path_mainfest_tool=yes
- fi
- rm -f conftest*
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test yes != "$lt_cv_path_mainfest_tool"; then
- MANIFEST_TOOL=:
-fi
-
-
-
-
-
-
- case $host_os in
- rhapsody* | darwin*)
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$DSYMUTIL"; then
- ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-DSYMUTIL=$ac_cv_prog_DSYMUTIL
-if test -n "$DSYMUTIL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_DSYMUTIL"; then
- ac_ct_DSYMUTIL=$DSYMUTIL
- # Extract the first word of "dsymutil", so it can be a program name with args.
-set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_DSYMUTIL"; then
- ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
-if test -n "$ac_ct_DSYMUTIL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_DSYMUTIL" = x; then
- DSYMUTIL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- DSYMUTIL=$ac_ct_DSYMUTIL
- fi
-else
- DSYMUTIL="$ac_cv_prog_DSYMUTIL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
-set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$NMEDIT"; then
- ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-NMEDIT=$ac_cv_prog_NMEDIT
-if test -n "$NMEDIT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_NMEDIT"; then
- ac_ct_NMEDIT=$NMEDIT
- # Extract the first word of "nmedit", so it can be a program name with args.
-set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_NMEDIT"; then
- ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_NMEDIT="nmedit"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
-if test -n "$ac_ct_NMEDIT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_NMEDIT" = x; then
- NMEDIT=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- NMEDIT=$ac_ct_NMEDIT
- fi
-else
- NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
-set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$LIPO"; then
- ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-LIPO=$ac_cv_prog_LIPO
-if test -n "$LIPO"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_LIPO"; then
- ac_ct_LIPO=$LIPO
- # Extract the first word of "lipo", so it can be a program name with args.
-set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_LIPO"; then
- ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_LIPO="lipo"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
-if test -n "$ac_ct_LIPO"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_LIPO" = x; then
- LIPO=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- LIPO=$ac_ct_LIPO
- fi
-else
- LIPO="$ac_cv_prog_LIPO"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OTOOL"; then
- ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL=$ac_cv_prog_OTOOL
-if test -n "$OTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL"; then
- ac_ct_OTOOL=$OTOOL
- # Extract the first word of "otool", so it can be a program name with args.
-set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OTOOL"; then
- ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL="otool"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
-if test -n "$ac_ct_OTOOL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OTOOL" = x; then
- OTOOL=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OTOOL=$ac_ct_OTOOL
- fi
-else
- OTOOL="$ac_cv_prog_OTOOL"
-fi
-
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
-set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$OTOOL64"; then
- ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-OTOOL64=$ac_cv_prog_OTOOL64
-if test -n "$OTOOL64"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_OTOOL64"; then
- ac_ct_OTOOL64=$OTOOL64
- # Extract the first word of "otool64", so it can be a program name with args.
-set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_OTOOL64"; then
- ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_OTOOL64="otool64"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
-if test -n "$ac_ct_OTOOL64"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_OTOOL64" = x; then
- OTOOL64=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- OTOOL64=$ac_ct_OTOOL64
- fi
-else
- OTOOL64="$ac_cv_prog_OTOOL64"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_apple_cc_single_mod=no
- if test -z "$LT_MULTI_MODULE"; then
- # By default we will add the -single_module flag. You can override
- # by either setting the environment variable LT_MULTI_MODULE
- # non-empty at configure time, or by adding -multi_module to the
- # link flags.
- rm -rf libconftest.dylib*
- echo "int foo(void){return 1;}" > conftest.c
- echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
--dynamiclib -Wl,-single_module conftest.c" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
- -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
- _lt_result=$?
- # If there is a non-empty error log, and "single_module"
- # appears in it, assume the flag caused a linker warning
- if test -s conftest.err && $GREP single_module conftest.err; then
- cat conftest.err >&5
- # Otherwise, if the output was created with a 0 exit code from
- # the compiler, it worked.
- elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
- lt_cv_apple_cc_single_mod=yes
- else
- cat conftest.err >&5
- fi
- rm -rf libconftest.dylib*
- rm -f conftest.*
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_exported_symbols_list=no
- save_LDFLAGS=$LDFLAGS
- echo "_main" > conftest.sym
- LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_ld_exported_symbols_list=yes
-else
- lt_cv_ld_exported_symbols_list=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_ld_force_load=no
- cat > conftest.c << _LT_EOF
-int forced_loaded() { return 2;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
- $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cru libconftest.a conftest.o" >&5
- $AR cru libconftest.a conftest.o 2>&5
- echo "$RANLIB libconftest.a" >&5
- $RANLIB libconftest.a 2>&5
- cat > conftest.c << _LT_EOF
-int main() { return 0;}
-_LT_EOF
- echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
- $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
- _lt_result=$?
- if test -s conftest.err && $GREP force_load conftest.err; then
- cat conftest.err >&5
- elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
- lt_cv_ld_force_load=yes
- else
- cat conftest.err >&5
- fi
- rm -f conftest.err libconftest.a conftest conftest.c
- rm -rf conftest.dSYM
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&6; }
- case $host_os in
- rhapsody* | darwin1.[012])
- _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
- darwin1.*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- esac
- ;;
- esac
- if test yes = "$lt_cv_apple_cc_single_mod"; then
- _lt_dar_single_mod='$single_module'
- fi
- if test yes = "$lt_cv_ld_exported_symbols_list"; then
- _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
- else
- _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
- fi
- if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
- _lt_dsymutil='~$DSYMUTIL $lib || :'
- else
- _lt_dsymutil=
- fi
- ;;
- esac
-
-for ac_header in dlfcn.h
-do :
- ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
-"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-# Set options
-
-
-
- enable_dlopen=no
-
-
- enable_win32_dll=no
-
-
- # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
- enableval=$enable_shared; p=${PACKAGE-default}
- case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
- *)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for pkg in $enableval; do
- IFS=$lt_save_ifs
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- enable_shared=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
- withval=$with_pic; lt_p=${PACKAGE-default}
- case $withval in
- yes|no) pic_mode=$withval ;;
- *)
- pic_mode=default
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for lt_pkg in $withval; do
- IFS=$lt_save_ifs
- if test "X$lt_pkg" = "X$lt_p"; then
- pic_mode=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- pic_mode=default
-fi
-
-
-
-
-
-
-
-
- # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
- enableval=$enable_fast_install; p=${PACKAGE-default}
- case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
- *)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
- for pkg in $enableval; do
- IFS=$lt_save_ifs
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS=$lt_save_ifs
- ;;
- esac
-else
- enable_fast_install=yes
-fi
-
-
-
-
-
-
-
-
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS=$ltmain
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-test -z "$LN_S" && LN_S="ln -s"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test -n "${ZSH_VERSION+set}"; then
- setopt NO_GLOB_SUBST
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- lt_cv_objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
-
-
-
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test set != "${COLLECT_NAMES+set}"; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Global variables:
-ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-old_CC=$CC
-old_CFLAGS=$CFLAGS
-
-# Set sane defaults for various variables
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$LD" && LD=ld
-test -z "$ac_objext" && ac_objext=o
-
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD=$MAGIC_CMD
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/${ac_tool_prefix}file"; then
- lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD=$lt_cv_path_MAGIC_CMD
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS=$lt_save_ifs
- MAGIC_CMD=$lt_save_MAGIC_CMD
- ;;
-esac
-fi
-
-MAGIC_CMD=$lt_cv_path_MAGIC_CMD
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
- if test -n "$ac_tool_prefix"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $MAGIC_CMD in
-[\\/*] | ?:[\\/]*)
- lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
- ;;
-*)
- lt_save_MAGIC_CMD=$MAGIC_CMD
- lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
- ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
- for ac_dir in $ac_dummy; do
- IFS=$lt_save_ifs
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/file"; then
- lt_cv_path_MAGIC_CMD=$ac_dir/"file"
- if test -n "$file_magic_test_file"; then
- case $deplibs_check_method in
- "file_magic "*)
- file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
- MAGIC_CMD=$lt_cv_path_MAGIC_CMD
- if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- $EGREP "$file_magic_regex" > /dev/null; then
- :
- else
- cat <<_LT_EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such. This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem. Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-_LT_EOF
- fi ;;
- esac
- fi
- break
- fi
- done
- IFS=$lt_save_ifs
- MAGIC_CMD=$lt_save_MAGIC_CMD
- ;;
-esac
-fi
-
-MAGIC_CMD=$lt_cv_path_MAGIC_CMD
-if test -n "$MAGIC_CMD"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- else
- MAGIC_CMD=:
- fi
-fi
-
- fi
- ;;
-esac
-
-# Use C for the default configuration in the libtool script
-
-lt_save_CC=$CC
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-objext=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}'
-
-
-
-
-
-
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# If no C compiler flags were specified, use CFLAGS.
-LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-
-# Save the default compiler, since it gets overwritten when the other
-# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
-compiler_DEFAULT=$CC
-
-# save warnings/boilerplate of simple test code
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_compile_test_code" >conftest.$ac_ext
-eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_compiler_boilerplate=`cat conftest.err`
-$RM conftest*
-
-ac_outfile=conftest.$ac_objext
-echo "$lt_simple_link_test_code" >conftest.$ac_ext
-eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-_lt_linker_boilerplate=`cat conftest.err`
-$RM -r conftest*
-
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-if test -n "$compiler"; then
-
-lt_prog_compiler_no_builtin_flag=
-
-if test yes = "$GCC"; then
- case $cc_basename in
- nvcc*)
- lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
- *)
- lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
- esac
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_rtti_exceptions=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_rtti_exceptions=yes
- fi
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
- lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-else
- :
-fi
-
-fi
-
-
-
-
-
-
- lt_prog_compiler_wl=
-lt_prog_compiler_pic=
-lt_prog_compiler_static=
-
-
- if test yes = "$GCC"; then
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_static='-static'
-
- case $host_os in
- aix*)
- # All AIX code is PIC.
- if test ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- fi
- lt_prog_compiler_pic='-fPIC'
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- lt_prog_compiler_pic='-fPIC'
- ;;
- m68k)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the '-m68020' flag to GCC prevents building anything better,
- # like '-m68040'.
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- esac
- ;;
-
- beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- # Although the cygwin gcc ignores -fPIC, still need this for old-style
- # (--disable-auto-import) libraries
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- ;;
-
- haiku*)
- # PIC is the default for Haiku.
- # The "-static" flag exists, but is broken.
- lt_prog_compiler_static=
- ;;
-
- hpux*)
- # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
- # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
- # sets the default TLS model and affects inlining.
- case $host_cpu in
- hppa*64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
- ;;
-
- interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
-
- msdosdjgpp*)
- # Just because we use GCC doesn't mean we suddenly get shared libraries
- # on systems that don't support them.
- lt_prog_compiler_can_build_shared=no
- enable_shared=no
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- lt_prog_compiler_pic='-fPIC -shared'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic=-Kconform_pic
- fi
- ;;
-
- *)
- lt_prog_compiler_pic='-fPIC'
- ;;
- esac
-
- case $cc_basename in
- nvcc*) # Cuda Compiler Driver 2.2
- lt_prog_compiler_wl='-Xlinker '
- if test -n "$lt_prog_compiler_pic"; then
- lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
- fi
- ;;
- esac
- else
- # PORTME Check for flag to pass linker flags through the system compiler.
- case $host_os in
- aix*)
- lt_prog_compiler_wl='-Wl,'
- if test ia64 = "$host_cpu"; then
- # AIX 5 now supports IA64 processor
- lt_prog_compiler_static='-Bstatic'
- else
- lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_prog_compiler_pic='-fno-common'
- case $cc_basename in
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- esac
- ;;
-
- mingw* | cygwin* | pw32* | os2* | cegcc*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
- ;;
-
- hpux9* | hpux10* | hpux11*)
- lt_prog_compiler_wl='-Wl,'
- # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
- # not for PA HP-UX.
- case $host_cpu in
- hppa*64*|ia64*)
- # +Z the default
- ;;
- *)
- lt_prog_compiler_pic='+Z'
- ;;
- esac
- # Is there a better lt_prog_compiler_static that works with the bundled CC?
- lt_prog_compiler_static='$wl-a ${wl}archive'
- ;;
-
- irix5* | irix6* | nonstopux*)
- lt_prog_compiler_wl='-Wl,'
- # PIC (with -KPIC) is the default.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- case $cc_basename in
- # old Intel for x86_64, which still supported -KPIC.
- ecc*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-static'
- ;;
- # icc used to be incompatible with GCC.
- # ICC 10 doesn't accept -KPIC any more.
- icc* | ifort*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- # Lahey Fortran 8.1.
- lf95*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='--shared'
- lt_prog_compiler_static='--static'
- ;;
- nagfor*)
- # NAG Fortran compiler
- lt_prog_compiler_wl='-Wl,-Wl,,'
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
- tcc*)
- # Fabrice Bellard et al's Tiny C Compiler
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group compilers (*not* the Pentium gcc compiler,
- # which looks to be a dead project)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- ccc*)
- lt_prog_compiler_wl='-Wl,'
- # All Alpha code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
- xl* | bgxl* | bgf* | mpixl*)
- # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-qpic'
- lt_prog_compiler_static='-qstaticlink'
- ;;
- *)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
- # Sun Fortran 8.3 passes all unrecognized flags to the linker
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl=''
- ;;
- *Sun\ F* | *Sun*Fortran*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Qoption ld '
- ;;
- *Sun\ C*)
- # Sun C 5.9
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- lt_prog_compiler_wl='-Wl,'
- ;;
- *Intel*\ [CF]*Compiler*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fPIC'
- lt_prog_compiler_static='-static'
- ;;
- *Portland\ Group*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-fpic'
- lt_prog_compiler_static='-Bstatic'
- ;;
- esac
- ;;
- esac
- ;;
-
- newsos6)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *nto* | *qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- lt_prog_compiler_pic='-fPIC -shared'
- ;;
-
- osf3* | osf4* | osf5*)
- lt_prog_compiler_wl='-Wl,'
- # All OSF/1 code is PIC.
- lt_prog_compiler_static='-non_shared'
- ;;
-
- rdos*)
- lt_prog_compiler_static='-non_shared'
- ;;
-
- solaris*)
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- case $cc_basename in
- f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
- lt_prog_compiler_wl='-Qoption ld ';;
- *)
- lt_prog_compiler_wl='-Wl,';;
- esac
- ;;
-
- sunos4*)
- lt_prog_compiler_wl='-Qoption ld '
- lt_prog_compiler_pic='-PIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_prog_compiler_pic='-Kconform_pic'
- lt_prog_compiler_static='-Bstatic'
- fi
- ;;
-
- sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_pic='-KPIC'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- unicos*)
- lt_prog_compiler_wl='-Wl,'
- lt_prog_compiler_can_build_shared=no
- ;;
-
- uts4*)
- lt_prog_compiler_pic='-pic'
- lt_prog_compiler_static='-Bstatic'
- ;;
-
- *)
- lt_prog_compiler_can_build_shared=no
- ;;
- esac
- fi
-
-case $host_os in
- # For platforms that do not support PIC, -DPIC is meaningless:
- *djgpp*)
- lt_prog_compiler_pic=
- ;;
- *)
- lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
- ;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
-lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if ${lt_cv_prog_compiler_pic_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_pic_works=no
- ac_outfile=conftest.$ac_objext
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
- lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- # The option is referenced via a variable to avoid confusing sed.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>conftest.err)
- ac_status=$?
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s "$ac_outfile"; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings other than the usual output.
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_pic_works=yes
- fi
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_pic_works"; then
- case $lt_prog_compiler_pic in
- "" | " "*) ;;
- *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
- esac
-else
- lt_prog_compiler_pic=
- lt_prog_compiler_can_build_shared=no
-fi
-
-fi
-
-
-
-
-
-
-
-
-
-
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if ${lt_cv_prog_compiler_static_works+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_static_works=no
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_static_works=yes
- fi
- else
- lt_cv_prog_compiler_static_works=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
-
-if test yes = "$lt_cv_prog_compiler_static_works"; then
- :
-else
- lt_prog_compiler_static=
-fi
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler_c_o=no
- $RM -r conftest 2>/dev/null
- mkdir conftest
- cd conftest
- mkdir out
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- lt_compiler_flag="-o out/conftest2.$ac_objext"
- # Insert the option either (1) after the last *FLAGS variable, or
- # (2) before a word containing "conftest.", or (3) at the end.
- # Note that $ac_compile itself does not contain backslashes and begins
- # with a dollar sign (not a hyphen), so the echo should work correctly.
- lt_compile=`echo "$ac_compile" | $SED \
- -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
- -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
- -e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
- (eval "$lt_compile" 2>out/conftest.err)
- ac_status=$?
- cat out/conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- if (exit $ac_status) && test -s out/conftest2.$ac_objext
- then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
- $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
- if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
- lt_cv_prog_compiler_c_o=yes
- fi
- fi
- chmod u+w . 2>&5
- $RM conftest*
- # SGI C++ compiler will create directory out/ii_files/ for
- # template instantiation
- test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
- $RM out/* && rmdir out
- cd ..
- $RM -r conftest
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
-
-
-
-
-hard_links=nottested
-if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
- # do not overwrite the value of need_locks provided by the user
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
- hard_links=yes
- $RM conftest*
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- touch conftest.a
- ln conftest.a conftest.b 2>&5 || hard_links=no
- ln conftest.a conftest.b 2>/dev/null && hard_links=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
- if test no = "$hard_links"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
- need_locks=warn
- fi
-else
- need_locks=no
-fi
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
-
- runpath_var=
- allow_undefined_flag=
- always_export_symbols=no
- archive_cmds=
- archive_expsym_cmds=
- compiler_needs_object=no
- enable_shared_with_static_runtimes=no
- export_dynamic_flag_spec=
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
- hardcode_automatic=no
- hardcode_direct=no
- hardcode_direct_absolute=no
- hardcode_libdir_flag_spec=
- hardcode_libdir_separator=
- hardcode_minus_L=no
- hardcode_shlibpath_var=unsupported
- inherit_rpath=no
- link_all_deplibs=unknown
- module_cmds=
- module_expsym_cmds=
- old_archive_from_new_cmds=
- old_archive_from_expsyms_cmds=
- thread_safe_flag_spec=
- whole_archive_flag_spec=
- # include_expsyms should be a list of space-separated symbols to be *always*
- # included in the symbol list
- include_expsyms=
- # exclude_expsyms can be an extended regexp of symbols to exclude
- # it will be wrapped by ' (' and ')$', so one must not match beginning or
- # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
- # as well as any symbol that contains 'd'.
- exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
- # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
- # platforms (ab)use it in PIC code, but their linkers get confused if
- # the symbol is explicitly referenced. Since portable code cannot
- # rely on this symbol name, it's probably fine to never include it in
- # preloaded symbol tables.
- # Exclude shared library initialization/finalization symbols.
- extract_expsyms_cmds=
-
- case $host_os in
- cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test yes != "$GCC"; then
- with_gnu_ld=no
- fi
- ;;
- interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
- with_gnu_ld=yes
- ;;
- openbsd* | bitrig*)
- with_gnu_ld=no
- ;;
- esac
-
- ld_shlibs=yes
-
- # On some targets, GNU ld is compatible enough with the native linker
- # that we're better off using the native interface for both.
- lt_use_gnu_ld_interface=no
- if test yes = "$with_gnu_ld"; then
- case $host_os in
- aix*)
- # The AIX port of GNU ld has always aspired to compatibility
- # with the native linker. However, as the warning in the GNU ld
- # block says, versions before 2.19.5* couldn't really create working
- # shared libraries, regardless of the interface used.
- case `$LD -v 2>&1` in
- *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
- *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
- *\ \(GNU\ Binutils\)\ [3-9]*) ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- ;;
- *)
- lt_use_gnu_ld_interface=yes
- ;;
- esac
- fi
-
- if test yes = "$lt_use_gnu_ld_interface"; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='$wl'
-
- # Set some defaults for GNU ld with shared library support. These
- # are reset later if shared libraries are not supported. Putting them
- # here allows them to be overridden if necessary.
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- export_dynamic_flag_spec='$wl--export-dynamic'
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- supports_anon_versioning=no
- case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
- *GNU\ gold*) supports_anon_versioning=yes ;;
- *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
- *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
- *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
- *\ 2.11.*) ;; # other 2.11 versions
- *) supports_anon_versioning=yes ;;
- esac
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix[3-9]*)
- # On AIX/PPC, the GNU linker is very broken
- if test ia64 != "$host_cpu"; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.19, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to install binutils
-*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
-*** You will then need to restart the configuration process.
-
-_LT_EOF
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds=''
- ;;
- m68k)
- archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
-
- beos*)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw* | pw32* | cegcc*)
- # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
- # as there is no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- export_dynamic_flag_spec='$wl--export-all-symbols'
- allow_undefined_flag=unsupported
- always_export_symbols=no
- enable_shared_with_static_runtimes=yes
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
- exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
-
- if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- # If the export-symbols file already is a .def file, use it as
- # is; otherwise, prepend EXPORTS...
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
- cp $export_symbols $output_objdir/$soname.def;
- else
- echo EXPORTS > $output_objdir/$soname.def;
- cat $export_symbols >> $output_objdir/$soname.def;
- fi~
- $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- haiku*)
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- link_all_deplibs=yes
- ;;
-
- interix[3-9]*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- export_dynamic_flag_spec='$wl-E'
- # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
- # Instead, shared libraries are loaded at an image base (0x10000000 by
- # default) and relocated if they conflict, which is a slow very memory
- # consuming and fragmenting process. To avoid this, we pick a random,
- # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
- # time. Moving up from 0x10000000 also allows more sbrk(2) space.
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- ;;
-
- gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
- tmp_diet=no
- if test linux-dietlibc = "$host_os"; then
- case $cc_basename in
- diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
- esac
- fi
- if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
- && test no = "$tmp_diet"
- then
- tmp_addflag=' $pic_flag'
- tmp_sharedflag='-shared'
- case $cc_basename,$host_cpu in
- pgcc*) # Portland Group C compiler
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- tmp_addflag=' $pic_flag'
- ;;
- pgf77* | pgf90* | pgf95* | pgfortran*)
- # Portland Group f77 and f90 compilers
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- tmp_addflag=' $pic_flag -Mnomain' ;;
- ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
- tmp_addflag=' -i_dynamic' ;;
- efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
- tmp_addflag=' -i_dynamic -nofor_main' ;;
- ifc* | ifort*) # Intel Fortran compiler
- tmp_addflag=' -nofor_main' ;;
- lf95*) # Lahey Fortran 8.1
- whole_archive_flag_spec=
- tmp_sharedflag='--shared' ;;
- nagfor*) # NAGFOR 5.3
- tmp_sharedflag='-Wl,-shared' ;;
- xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
- tmp_sharedflag='-qmkshrobj'
- tmp_addflag= ;;
- nvcc*) # Cuda Compiler Driver 2.2
- whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- compiler_needs_object=yes
- ;;
- esac
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*) # Sun C 5.9
- whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
- compiler_needs_object=yes
- tmp_sharedflag='-G' ;;
- *Sun\ F*) # Sun Fortran 8.3
- tmp_sharedflag='-G' ;;
- esac
- archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
-
- if test yes = "$supports_anon_versioning"; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
- fi
-
- case $cc_basename in
- xlf* | bgf* | bgxlf* | mpixlf*)
- # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
- whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
- if test yes = "$supports_anon_versioning"; then
- archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
- echo "local: *; };" >> $output_objdir/$libname.ver~
- $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
- fi
- ;;
- esac
- else
- ld_shlibs=no
- fi
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris*)
- if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
- case `$LD -v 2>&1` in
- *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
- ld_shlibs=no
- cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
-*** reliably create shared libraries on SCO systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-_LT_EOF
- ;;
- *)
- # For security reasons, it is highly recommended that you always
- # use absolute paths for naming shared libraries, and exclude the
- # DT_RUNPATH tag from executables and libraries. But doing so
- # requires that you compile everything twice, which is a pain.
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test no = "$ld_shlibs"; then
- runpath_var=
- hardcode_libdir_flag_spec=
- export_dynamic_flag_spec=
- whole_archive_flag_spec=
- fi
- else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix[4-9]*)
- if test ia64 = "$host_cpu"; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=
- else
- # If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- # Also, AIX nm treats weak defined symbols like other global
- # defined symbols, whereas GNU nm marks them as "W".
- if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
- fi
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
- for ld_flag in $LDFLAGS; do
- if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- ;;
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- archive_cmds=''
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- file_list_spec='$wl-f,'
-
- if test yes = "$GCC"; then
- case $host_os in aix4.[012]|aix4.[012].*)
- # We only want to do this on AIX 4.2 and lower, the check
- # below for broken collect2 doesn't work under 4.3+
- collect2name=`$CC -print-prog-name=collect2`
- if test -f "$collect2name" &&
- strings "$collect2name" | $GREP resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- :
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- ;;
- esac
- shared_flag='-shared'
- if test yes = "$aix_use_runtimelinking"; then
- shared_flag="$shared_flag "'$wl-G'
- fi
- else
- # not using gcc
- if test ia64 = "$host_cpu"; then
- # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
- # chokes on -Wl,-G. The following line is correct:
- shared_flag='-G'
- else
- if test yes = "$aix_use_runtimelinking"; then
- shared_flag='$wl-G'
- else
- shared_flag='$wl-bM:SRE'
- fi
- fi
- fi
-
- export_dynamic_flag_spec='$wl-bexpall'
- # It seems that -bexpall does not export symbols beginning with
- # underscore (_), so it is better to generate a list of symbols to export.
- always_export_symbols=yes
- if test yes = "$aix_use_runtimelinking"; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='-berok'
- # Determine the default libpath from the value encoded in an
- # empty executable.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- # Check for a 64-bit object if we didn't find anything.
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-fi
-
- hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
- archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
- else
- if test ia64 = "$host_cpu"; then
- hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
- else
- # Determine the default libpath from the value encoded in an
- # empty executable.
- if test set = "${lt_cv_aix_libpath+set}"; then
- aix_libpath=$lt_cv_aix_libpath
-else
- if ${lt_cv_aix_libpath_+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
- lt_aix_libpath_sed='
- /Import File Strings/,/^$/ {
- /^0/ {
- s/^0 *\([^ ]*\) *$/\1/
- p
- }
- }'
- lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- # Check for a 64-bit object if we didn't find anything.
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test -z "$lt_cv_aix_libpath_"; then
- lt_cv_aix_libpath_=/usr/lib:/lib
- fi
-
-fi
-
- aix_libpath=$lt_cv_aix_libpath_
-fi
-
- hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- no_undefined_flag=' $wl-bernotok'
- allow_undefined_flag=' $wl-berok'
- if test yes = "$with_gnu_ld"; then
- # We only use this code for GNU lds that support --whole-archive.
- whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
- else
- # Exported symbols can be pulled into shared objects from archives
- whole_archive_flag_spec='$convenience'
- fi
- archive_cmds_need_lc=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- case $host_cpu in
- powerpc)
- # see comment about AmigaOS4 .so support
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
- archive_expsym_cmds=''
- ;;
- m68k)
- archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- ;;
- esac
- ;;
-
- bsdi[45]*)
- export_dynamic_flag_spec=-rdynamic
- ;;
-
- cygwin* | mingw* | pw32* | cegcc*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- case $cc_basename in
- cl*)
- # Native MSVC
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- file_list_spec='@'
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=.dll
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
- archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
- cp "$export_symbols" "$output_objdir/$soname.def";
- echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
- else
- $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
- fi~
- $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
- linknames='
- # The linker will not automatically build a static lib if we build a DLL.
- # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
- enable_shared_with_static_runtimes=yes
- exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
- # Don't use ranlib
- old_postinstall_cmds='chmod 644 $oldlib'
- postlink_cmds='lt_outputfile="@OUTPUT@"~
- lt_tool_outputfile="@TOOL_OUTPUT@"~
- case $lt_outputfile in
- *.exe|*.EXE) ;;
- *)
- lt_outputfile=$lt_outputfile.exe
- lt_tool_outputfile=$lt_tool_outputfile.exe
- ;;
- esac~
- if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
- $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
- $RM "$lt_outputfile.manifest";
- fi'
- ;;
- *)
- # Assume MSVC wrapper
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # Tell ltmain to make .dll files, not .so files.
- shrext_cmds=.dll
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
- enable_shared_with_static_runtimes=yes
- ;;
- esac
- ;;
-
- darwin* | rhapsody*)
-
-
- archive_cmds_need_lc=no
- hardcode_direct=no
- hardcode_automatic=yes
- hardcode_shlibpath_var=unsupported
- if test yes = "$lt_cv_ld_force_load"; then
- whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
-
- else
- whole_archive_flag_spec=''
- fi
- link_all_deplibs=yes
- allow_undefined_flag=$_lt_dar_allow_undefined
- case $cc_basename in
- ifort*|nagfor*) _lt_dar_can_shared=yes ;;
- *) _lt_dar_can_shared=$GCC ;;
- esac
- if test yes = "$_lt_dar_can_shared"; then
- output_verbose_link_cmd=func_echo_all
- archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
- module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
-
- else
- ld_shlibs=no
- fi
-
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9*)
- if test yes = "$GCC"; then
- archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
- else
- archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
- fi
- hardcode_libdir_flag_spec='$wl+b $wl$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- export_dynamic_flag_spec='$wl-E'
- ;;
-
- hpux10*)
- if test yes,no = "$GCC,$with_gnu_ld"; then
- archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
- fi
- if test no = "$with_gnu_ld"; then
- hardcode_libdir_flag_spec='$wl+b $wl$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- export_dynamic_flag_spec='$wl-E'
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- fi
- ;;
-
- hpux11*)
- if test yes,no = "$GCC,$with_gnu_ld"; then
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- esac
- else
- case $host_cpu in
- hppa*64*)
- archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- ia64*)
- archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
- ;;
- *)
-
- # Older versions of the 11.00 compiler do not understand -b yet
- # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_prog_compiler__b=no
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -b"
- echo "$lt_simple_link_test_code" > conftest.$ac_ext
- if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
- # The linker can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- # Append any errors to the config.log.
- cat conftest.err 1>&5
- $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
- $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
- if diff conftest.exp conftest.er2 >/dev/null; then
- lt_cv_prog_compiler__b=yes
- fi
- else
- lt_cv_prog_compiler__b=yes
- fi
- fi
- $RM -r conftest*
- LDFLAGS=$save_LDFLAGS
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
-
-if test yes = "$lt_cv_prog_compiler__b"; then
- archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-else
- archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-fi
-
- ;;
- esac
- fi
- if test no = "$with_gnu_ld"; then
- hardcode_libdir_flag_spec='$wl+b $wl$libdir'
- hardcode_libdir_separator=:
-
- case $host_cpu in
- hppa*64*|ia64*)
- hardcode_direct=no
- hardcode_shlibpath_var=no
- ;;
- *)
- hardcode_direct=yes
- hardcode_direct_absolute=yes
- export_dynamic_flag_spec='$wl-E'
-
- # hardcode_minus_L: Not really in the search PATH,
- # but as the default location of the library.
- hardcode_minus_L=yes
- ;;
- esac
- fi
- ;;
-
- irix5* | irix6* | nonstopux*)
- if test yes = "$GCC"; then
- archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
- # Try to use the -exported_symbol ld option, if it does not
- # work, assume that -exports_file does not work either and
- # implicitly export all symbols.
- # This should be the same for all languages, so no per-tag cache variable.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- save_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo (void) { return 0; }
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- lt_cv_irix_exported_symbol=yes
-else
- lt_cv_irix_exported_symbol=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
- if test yes = "$lt_cv_irix_exported_symbol"; then
- archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
- fi
- else
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- hardcode_libdir_separator=:
- inherit_rpath=yes
- link_all_deplibs=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- *nto* | *qnx*)
- ;;
-
- openbsd* | bitrig*)
- if test -f /usr/libexec/ld.so; then
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- hardcode_direct_absolute=yes
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- export_dynamic_flag_spec='$wl-E'
- else
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='$wl-rpath,$libdir'
- fi
- else
- ld_shlibs=no
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test yes = "$GCC"; then
- allow_undefined_flag=' $wl-expect_unresolved $wl\*'
- archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test yes = "$GCC"; then
- allow_undefined_flag=' $wl-expect_unresolved $wl\*'
- archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
- hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
- $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
-
- # Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- archive_cmds_need_lc='no'
- hardcode_libdir_separator=:
- ;;
-
- solaris*)
- no_undefined_flag=' -z defs'
- if test yes = "$GCC"; then
- wlarc='$wl'
- archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- else
- case `$CC -V 2>&1` in
- *"Compilers 5.0"*)
- wlarc=''
- archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
- ;;
- *)
- wlarc='$wl'
- archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
- $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
- ;;
- esac
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[0-5] | solaris2.[0-5].*) ;;
- *)
- # The compiler driver will combine and reorder linker options,
- # but understands '-z linker_flag'. GCC discards it without '$wl',
- # but is careful enough not to reorder.
- # Supported since Solaris 2.6 (maybe 2.5.1?)
- if test yes = "$GCC"; then
- whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
- else
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
- fi
- ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- if test sequent = "$host_vendor"; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- case $host_vendor in
- sni)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes # is this really true???
- ;;
- siemens)
- ## LD is ld it makes a PLAMLIB
- ## CC just makes a GrossModule.
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- reload_cmds='$CC -r -o $output$reload_objs'
- hardcode_direct=no
- ;;
- motorola)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- ;;
- esac
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
- no_undefined_flag='$wl-z,text'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
-
- if test yes = "$GCC"; then
- archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- sysv5* | sco3.2v5* | sco5v6*)
- # Note: We CANNOT use -z defs as we might desire, because we do not
- # link with -lc, and that would cause any symbols used from libc to
- # always be unresolved, which means just about no library would
- # ever link correctly. If we're not using GNU ld we use -z text
- # though, which does catch some bad symbols but isn't as heavy-handed
- # as -z defs.
- no_undefined_flag='$wl-z,text'
- allow_undefined_flag='$wl-z,nodefs'
- archive_cmds_need_lc=no
- hardcode_shlibpath_var=no
- hardcode_libdir_flag_spec='$wl-R,$libdir'
- hardcode_libdir_separator=':'
- link_all_deplibs=yes
- export_dynamic_flag_spec='$wl-Bexport'
- runpath_var='LD_RUN_PATH'
-
- if test yes = "$GCC"; then
- archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
-
- if test sni = "$host_vendor"; then
- case $host in
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- export_dynamic_flag_spec='$wl-Blargedynsym'
- ;;
- esac
- fi
- fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
-test no = "$ld_shlibs" && can_build_shared=no
-
-with_gnu_ld=$with_gnu_ld
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc" in
-x|xyes)
- # Assume -lc should be added
- archive_cmds_need_lc=yes
-
- if test yes,yes = "$GCC,$enable_shared"; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- $RM conftest*
- echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
- (eval $ac_compile) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } 2>conftest.err; then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_prog_compiler_wl
- pic_flag=$lt_prog_compiler_pic
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- lt_save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
- (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- then
- lt_cv_archive_cmds_need_lc=no
- else
- lt_cv_archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$lt_save_allow_undefined_flag
- else
- cat conftest.err 1>&5
- fi
- $RM conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
- archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
- ;;
- esac
- fi
- ;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
-
-if test yes = "$GCC"; then
- case $host_os in
- darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
- *) lt_awk_arg='/^libraries:/' ;;
- esac
- case $host_os in
- mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
- *) lt_sed_strip_eq='s|=/|/|g' ;;
- esac
- lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
- case $lt_search_path_spec in
- *\;*)
- # if the path contains ";" then we assume it to be the separator
- # otherwise default to the standard path separator (i.e. ":") - it is
- # assumed that no part of a normal pathname contains ";" but that should
- # okay in the real world where ";" in dirpaths is itself problematic.
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
- ;;
- *)
- lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
- ;;
- esac
- # Ok, now we have the path, separated by spaces, we can step through it
- # and add multilib dir if necessary...
- lt_tmp_lt_search_path_spec=
- lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
- # ...but if some path component already ends with the multilib dir we assume
- # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
- case "$lt_multi_os_dir; $lt_search_path_spec " in
- "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
- lt_multi_os_dir=
- ;;
- esac
- for lt_sys_path in $lt_search_path_spec; do
- if test -d "$lt_sys_path$lt_multi_os_dir"; then
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
- elif test -n "$lt_multi_os_dir"; then
- test -d "$lt_sys_path" && \
- lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
- fi
- done
- lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
-BEGIN {RS = " "; FS = "/|\n";} {
- lt_foo = "";
- lt_count = 0;
- for (lt_i = NF; lt_i > 0; lt_i--) {
- if ($lt_i != "" && $lt_i != ".") {
- if ($lt_i == "..") {
- lt_count++;
- } else {
- if (lt_count == 0) {
- lt_foo = "/" $lt_i lt_foo;
- } else {
- lt_count--;
- }
- }
- }
- }
- if (lt_foo != "") { lt_freq[lt_foo]++; }
- if (lt_freq[lt_foo] == 1) { print lt_foo; }
-}'`
- # AWK program above erroneously prepends '/' to C:/dos/paths
- # for these hosts.
- case $host_os in
- mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
- $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
- esac
- sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
-else
- sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=.so
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
- shlibpath_var=LIBPATH
-
- # AIX 3 has no versioning support, so we append a major version to the name.
- soname_spec='$libname$release$shared_ext$major'
- ;;
-
-aix[4-9]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- hardcode_into_libs=yes
- if test ia64 = "$host_cpu"; then
- # AIX 5 supports IA64
- library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- else
- # With GCC up to 2.95.x, collect2 would create an import file
- # for dependence libraries. The import file would start with
- # the line '#! .'. This would cause the generated library to
- # depend on '.', always an invalid library. This was fixed in
- # development snapshots of GCC prior to 3.0.
- case $host_os in
- aix4 | aix4.[01] | aix4.[01].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
- esac
- # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
- # soname into executable. Probably we can add versioning support to
- # collect2, so additional links can be useful in future.
- if test yes = "$aix_use_runtimelinking"; then
- # If using run time linking (on AIX 4.2 or later) use lib<name>.so
- # instead of lib<name>.a to let people know that these are not
- # typical AIX shared libraries.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- else
- # We preserve .a as extension for shared libraries through AIX4.2
- # and later when we are not doing run time linking.
- library_names_spec='$libname$release.a $libname.a'
- soname_spec='$libname$release$shared_ext$major'
- fi
- shlibpath_var=LIBPATH
- fi
- ;;
-
-amigaos*)
- case $host_cpu in
- powerpc)
- # Since July 2007 AmigaOS4 officially supports .so libraries.
- # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- ;;
- m68k)
- library_names_spec='$libname.ixlibrary $libname.a'
- # Create ${libname}_ixlibrary.a entries in /sys/libs.
- finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
- ;;
- esac
- ;;
-
-beos*)
- library_names_spec='$libname$shared_ext'
- dynamic_linker="$host_os ld.so"
- shlibpath_var=LIBRARY_PATH
- ;;
-
-bsdi[45]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
- sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- # the default ld.so.conf also contains /usr/contrib/lib and
- # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
- # libtool to hard-code these into programs
- ;;
-
-cygwin* | mingw* | pw32* | cegcc*)
- version_type=windows
- shrext_cmds=.dll
- need_version=no
- need_lib_prefix=no
-
- case $GCC,$cc_basename in
- yes,*)
- # gcc
- library_names_spec='$libname.dll.a'
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \$file`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname~
- chmod a+x \$dldir/$dlname~
- if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
- eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
- fi'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
-
- case $host_os in
- cygwin*)
- # Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
- ;;
- mingw* | cegcc*)
- # MinGW DLLs use traditional 'lib' prefix
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- ;;
- pw32*)
- # pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- ;;
- esac
- dynamic_linker='Win32 ld.exe'
- ;;
-
- *,cl*)
- # Native MSVC
- libname_spec='$name'
- soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
- library_names_spec='$libname.dll.lib'
-
- case $build_os in
- mingw*)
- sys_lib_search_path_spec=
- lt_save_ifs=$IFS
- IFS=';'
- for lt_path in $LIB
- do
- IFS=$lt_save_ifs
- # Let DOS variable expansion print the short 8.3 style file name.
- lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
- sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
- done
- IFS=$lt_save_ifs
- # Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
- ;;
- cygwin*)
- # Convert to unix form, then to dos form, then back to unix form
- # but this time dos style (no spaces!) so that the unix form looks
- # like /cygdrive/c/PROGRA~1:/cygdr...
- sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
- sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
- sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- ;;
- *)
- sys_lib_search_path_spec=$LIB
- if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
- # It is most probably a Windows format PATH.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
- else
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
- fi
- # FIXME: find the short name or the path components, as spaces are
- # common. (e.g. "Program Files" -> "PROGRA~1")
- ;;
- esac
-
- # DLL is installed to $(libdir)/../bin by postinstall_cmds
- postinstall_cmds='base_file=`basename \$file`~
- dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
- dldir=$destdir/`dirname \$dlpath`~
- test -d \$dldir || mkdir -p \$dldir~
- $install_prog $dir/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
- dlpath=$dir/\$dldll~
- $RM \$dlpath'
- shlibpath_overrides_runpath=yes
- dynamic_linker='Win32 link.exe'
- ;;
-
- *)
- # Assume MSVC wrapper
- library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
- dynamic_linker='Win32 ld.exe'
- ;;
- esac
- # FIXME: first we should search . and the directory the executable is in
- shlibpath_var=PATH
- ;;
-
-darwin* | rhapsody*)
- dynamic_linker="$host_os dyld"
- version_type=darwin
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
- soname_spec='$libname$release$major$shared_ext'
- shlibpath_overrides_runpath=yes
- shlibpath_var=DYLD_LIBRARY_PATH
- shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-
- sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
- sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
- ;;
-
-dgux*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-freebsd* | dragonfly*)
- # DragonFly does not have aout. When/if they implement a new
- # versioning mechanism, adjust this.
- if test -x /usr/bin/objformat; then
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
- freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
- need_version=no
- need_lib_prefix=no
- ;;
- freebsd-*)
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- need_version=yes
- ;;
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
- freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
- freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
- *) # from 4.6 on, and DragonFly
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
- esac
- ;;
-
-haiku*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- dynamic_linker="$host_os runtime_loader"
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LIBRARY_PATH
- shlibpath_overrides_runpath=no
- sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
- hardcode_into_libs=yes
- ;;
-
-hpux9* | hpux10* | hpux11*)
- # Give a soname corresponding to the major version so that dld.sl refuses to
- # link against other versions.
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- case $host_cpu in
- ia64*)
- shrext_cmds='.so'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.so"
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- if test 32 = "$HPUX_IA64_MODE"; then
- sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
- else
- sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
- fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- hppa*64*)
- shrext_cmds='.sl'
- hardcode_into_libs=yes
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
- shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
- *)
- shrext_cmds='.sl'
- dynamic_linker="$host_os dld.sl"
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- ;;
- esac
- # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
- postinstall_cmds='chmod 555 $lib'
- # or fails outright, so override atomically:
- install_override_mode=555
- ;;
-
-interix[3-9]*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-irix5* | irix6* | nonstopux*)
- case $host_os in
- nonstopux*) version_type=nonstopux ;;
- *)
- if test yes = "$lt_cv_prog_gnu_ld"; then
- version_type=linux # correct to gnu/linux during the next big refactor
- else
- version_type=irix
- fi ;;
- esac
- need_lib_prefix=no
- need_version=no
- soname_spec='$libname$release$shared_ext$major'
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
- case $host_os in
- irix5* | nonstopux*)
- libsuff= shlibsuff=
- ;;
- *)
- case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
- libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
- libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
- libsuff=64 shlibsuff=64 libmagic=64-bit;;
- *) libsuff= shlibsuff= libmagic=never-match;;
- esac
- ;;
- esac
- shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
- sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
- hardcode_into_libs=yes
- ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
- dynamic_linker=no
- ;;
-
-linux*android*)
- version_type=none # Android doesn't support versioned libraries.
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext'
- soname_spec='$libname$release$shared_ext'
- finish_cmds=
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
-
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- dynamic_linker='Android linker'
- # Don't embed -rpath directories since the linker doesn't support them.
- hardcode_libdir_flag_spec='-L$libdir'
- ;;
-
-# This must be glibc/ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
-
- # Some binutils ld are patched to set DT_RUNPATH
- if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- lt_cv_shlibpath_overrides_runpath=no
- save_LDFLAGS=$LDFLAGS
- save_libdir=$libdir
- eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
- LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
- lt_cv_shlibpath_overrides_runpath=yes
-fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- LDFLAGS=$save_LDFLAGS
- libdir=$save_libdir
-
-fi
-
- shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
-
- # This implies no fast_install, which is unacceptable.
- # Some rework will be needed to allow for fast_install
- # before this can be enabled.
- hardcode_into_libs=yes
-
- # Append ld.so.conf contents to the search path
- if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
- fi
-
- # We used to test for /lib/ld.so.1 and disable shared libraries on
- # powerpc, because MkLinux only supported shared libraries with the
- # GNU dynamic linker. Since this was broken with cross compilers,
- # most powerpc-linux boxes support dynamic linking these days and
- # people can always --disable-shared, the test was removed, and we
- # assume the GNU/Linux dynamic linker is in use.
- dynamic_linker='GNU/Linux ld.so'
- ;;
-
-netbsd*)
- version_type=sunos
- need_lib_prefix=no
- need_version=no
- if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- dynamic_linker='NetBSD (a.out) ld.so'
- else
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- dynamic_linker='NetBSD ld.elf_so'
- fi
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- ;;
-
-newsos6)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-*nto* | *qnx*)
- version_type=qnx
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- dynamic_linker='ldqnx.so'
- ;;
-
-openbsd* | bitrig*)
- version_type=sunos
- sys_lib_dlsearch_path_spec=/usr/lib
- need_lib_prefix=no
- if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
- need_version=no
- else
- need_version=yes
- fi
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- ;;
-
-os2*)
- libname_spec='$name'
- shrext_cmds=.dll
- need_lib_prefix=no
- library_names_spec='$libname$shared_ext $libname.a'
- dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
- ;;
-
-osf3* | osf4* | osf5*)
- version_type=osf
- need_lib_prefix=no
- need_version=no
- soname_spec='$libname$release$shared_ext$major'
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
- ;;
-
-rdos*)
- dynamic_linker=no
- ;;
-
-solaris*)
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- # ldd complains unless libraries are executable
- postinstall_cmds='chmod +x $lib'
- ;;
-
-sunos4*)
- version_type=sunos
- library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
- finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- if test yes = "$with_gnu_ld"; then
- need_lib_prefix=no
- fi
- need_version=yes
- ;;
-
-sysv4 | sysv4.3*)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- case $host_vendor in
- sni)
- shlibpath_overrides_runpath=no
- need_lib_prefix=no
- runpath_var=LD_RUN_PATH
- ;;
- siemens)
- need_lib_prefix=no
- ;;
- motorola)
- need_lib_prefix=no
- need_version=no
- shlibpath_overrides_runpath=no
- sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
- ;;
- esac
- ;;
-
-sysv4*MP*)
- if test -d /usr/nec; then
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
- soname_spec='$libname$shared_ext.$major'
- shlibpath_var=LD_LIBRARY_PATH
- fi
- ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=yes
- hardcode_into_libs=yes
- if test yes = "$with_gnu_ld"; then
- sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
- else
- sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
- case $host_os in
- sco3.2v5*)
- sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
- ;;
- esac
- fi
- sys_lib_dlsearch_path_spec='/usr/lib'
- ;;
-
-tpf*)
- # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=linux # correct to gnu/linux during the next big refactor
- need_lib_prefix=no
- need_version=no
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- shlibpath_var=LD_LIBRARY_PATH
- shlibpath_overrides_runpath=no
- hardcode_into_libs=yes
- ;;
-
-uts4*)
- version_type=linux # correct to gnu/linux during the next big refactor
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- soname_spec='$libname$release$shared_ext$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-*)
- dynamic_linker=no
- ;;
-esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
-test no = "$dynamic_linker" && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test yes = "$GCC"; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
- sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
-fi
-if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
- sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" ||
- test -n "$runpath_var" ||
- test yes = "$hardcode_automatic"; then
-
- # We can hardcode non-existent directories.
- if test no != "$hardcode_direct" &&
- # If the only mechanism to avoid hardcoding is shlibpath_var, we
- # have to relink, otherwise we might link with an installed library
- # when we should be linking with a yet-to-be-installed one
- ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
- test no != "$hardcode_minus_L"; then
- # Linking always hardcodes the temporary library directory.
- hardcode_action=relink
- else
- # We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
- fi
-else
- # We cannot hardcode anything, or else we can only hardcode existing
- # directories.
- hardcode_action=unsupported
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
-
-if test relink = "$hardcode_action" ||
- test yes = "$inherit_rpath"; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test yes = "$shlibpath_overrides_runpath" ||
- test no = "$enable_shared"; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-
-
-
-
-
- if test yes != "$enable_dlopen"; then
- enable_dlopen=unknown
- enable_dlopen_self=unknown
- enable_dlopen_self_static=unknown
-else
- lt_cv_dlopen=no
- lt_cv_dlopen_libs=
-
- case $host_os in
- beos*)
- lt_cv_dlopen=load_add_on
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
- ;;
-
- mingw* | pw32* | cegcc*)
- lt_cv_dlopen=LoadLibrary
- lt_cv_dlopen_libs=
- ;;
-
- cygwin*)
- lt_cv_dlopen=dlopen
- lt_cv_dlopen_libs=
- ;;
-
- darwin*)
- # if libdl is installed we need to link against it
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
-
- lt_cv_dlopen=dyld
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=yes
-
-fi
-
- ;;
-
- tpf*)
- # Don't try to run any link tests for TPF. We know it's impossible
- # because TPF is a cross-compiler, and we know how we open DSOs.
- lt_cv_dlopen=dlopen
- lt_cv_dlopen_libs=
- lt_cv_dlopen_self=no
- ;;
-
- *)
- ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_shl_load=yes
-else
- ac_cv_lib_dld_shl_load=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
- lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else
- ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dl_dlopen=yes
-else
- ac_cv_lib_dl_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_svld_dlopen=yes
-else
- ac_cv_lib_svld_dlopen=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
- lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link ();
-int
-main ()
-{
-return dld_link ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_dld_dld_link=yes
-else
- ac_cv_lib_dld_dld_link=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
- lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
- ;;
- esac
-
- if test no = "$lt_cv_dlopen"; then
- enable_dlopen=no
- else
- enable_dlopen=yes
- fi
-
- case $lt_cv_dlopen in
- dlopen)
- save_CPPFLAGS=$CPPFLAGS
- test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
- save_LDFLAGS=$LDFLAGS
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
- save_LIBS=$LIBS
- LIBS="$lt_cv_dlopen_libs $LIBS"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; then :
- lt_cv_dlopen_self=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-/* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else
- {
- if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
-
- if test yes = "$lt_cv_dlopen_self"; then
- wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self_static+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test yes = "$cross_compiling"; then :
- lt_cv_dlopen_self_static=cross
-else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LT_DLGLOBAL RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-# define LT_DLGLOBAL DL_GLOBAL
-# else
-# define LT_DLGLOBAL 0
-# endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
- find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-# ifdef RTLD_LAZY
-# define LT_DLLAZY_OR_NOW RTLD_LAZY
-# else
-# ifdef DL_LAZY
-# define LT_DLLAZY_OR_NOW DL_LAZY
-# else
-# ifdef RTLD_NOW
-# define LT_DLLAZY_OR_NOW RTLD_NOW
-# else
-# ifdef DL_NOW
-# define LT_DLLAZY_OR_NOW DL_NOW
-# else
-# define LT_DLLAZY_OR_NOW 0
-# endif
-# endif
-# endif
-# endif
-#endif
-
-/* When -fvisbility=hidden is used, assume the code has been annotated
- correspondingly for the symbols needed. */
-#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
-int fnord () __attribute__((visibility("default")));
-#endif
-
-int fnord () { return 42; }
-int main ()
-{
- void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
- int status = $lt_dlunknown;
-
- if (self)
- {
- if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
- else
- {
- if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
- else puts (dlerror ());
- }
- /* dlclose (self); */
- }
- else
- puts (dlerror ());
-
- return status;
-}
-_LT_EOF
- if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
- (./conftest; exit; ) >&5 2>/dev/null
- lt_status=$?
- case x$lt_status in
- x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
- x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
- esac
- else :
- # compilation failed
- lt_cv_dlopen_self_static=no
- fi
-fi
-rm -fr conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
- fi
-
- CPPFLAGS=$save_CPPFLAGS
- LDFLAGS=$save_LDFLAGS
- LIBS=$save_LIBS
- ;;
- esac
-
- case $lt_cv_dlopen_self in
- yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
- *) enable_dlopen_self=unknown ;;
- esac
-
- case $lt_cv_dlopen_self_static in
- yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
- *) enable_dlopen_self_static=unknown ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-striplib=
-old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP"; then
- striplib="$STRIP -x"
- old_striplib="$STRIP -S"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- ;;
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ;;
- esac
-fi
-
-
-
-
-
-
-
-
-
-
-
-
- # Report what library types will actually be built
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
- test no = "$can_build_shared" && enable_shared=no
-
- # On AIX, shared libraries and static libraries use the same namespace, and
- # are all built from PIC.
- case $host_os in
- aix3*)
- test yes = "$enable_shared" && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
- fi
- ;;
-
- aix[4-9]*)
- if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
- test yes = "$enable_shared" && enable_static=no
- fi
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
- # Make sure either enable_shared or enable_static is yes.
- test yes = "$enable_shared" || enable_static=yes
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
-
-
-
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-CC=$lt_save_CC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ac_config_commands="$ac_config_commands libtool"
-
-
-
-
-# Only expand once:
-
-
-
-pkgextensiondir='${libdir}/gawk'
-
-
-if test "$GCC" = yes
-then
- CFLAGS="$CFLAGS -Wall" # Don't add -Wextra, hurts older gcc
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for special development options" >&5
-$as_echo_n "checking for special development options... " >&6; }
-if test -f $srcdir/../.developing
-then
- if test "$GCC" = yes
- then
- CFLAGS="$CFLAGS -Wall -fno-builtin -g3 -gdwarf-2"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-for ac_header in fnmatch.h limits.h sys/time.h sys/select.h sys/param.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
- as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$as_ac_Header=yes"
-else
- eval "$as_ac_Header=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_ac_Header
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' dir; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_opendir+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
- ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' x; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if ${ac_cv_search_opendir+:} false; then :
- break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
- ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5
-$as_echo_n "checking whether sys/types.h defines makedev... " >&6; }
-if ${ac_cv_header_sys_types_h_makedev+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-int
-main ()
-{
-return makedev(0, 0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_header_sys_types_h_makedev=yes
-else
- ac_cv_header_sys_types_h_makedev=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5
-$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; }
-
-if test $ac_cv_header_sys_types_h_makedev = no; then
-ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_mkdev_h" = xyes; then :
-
-$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h
-
-fi
-
-
-
- if test $ac_cv_header_sys_mkdev_h = no; then
- ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then :
-
-$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
-
-fi
-
-
- fi
-fi
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
if ${ac_cv_header_time+:} false; then :
@@ -15496,13 +5955,6 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# INIT-COMMANDS
#
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
- # from automake < 1.5.
- eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
- # Capture the value of LINGUAS because we need it to compute CATALOGS.
- LINGUAS="${LINGUAS-%UNSET%}"
-
_ACEOF
@@ -15513,7 +5965,6 @@ for ac_config_target in $ac_config_targets
do
case $ac_config_target in
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
- "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:configh.in" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
@@ -16204,119 +6655,6 @@ $as_echo X"$file" |
done
}
;;
- "po-directories":C)
- for ac_file in $CONFIG_FILES; do
- # Support "outfile[:infile[:infile...]]"
- case "$ac_file" in
- *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- esac
- # PO directories have a Makefile.in generated from Makefile.in.in.
- case "$ac_file" in */Makefile.in)
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
- # Treat a directory as a PO directory if and only if it has a
- # POTFILES.in file. This allows packages to have multiple PO
- # directories under different names or in different locations.
- if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
- rm -f "$ac_dir/POTFILES"
- test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
- cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
- POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
- # on $ac_dir but don't depend on user-specified configuration
- # parameters.
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # The set of available languages was given in configure.in.
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
- fi
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- done
- fi
- test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
- for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
- if test -f "$f"; then
- case "$f" in
- *.orig | *.bak | *~) ;;
- *) cat "$f" >> "$ac_dir/Makefile" ;;
- esac
- fi
- done
- fi
- ;;
- esac
- done ;;
esac
done # for ac_tag
diff --git a/extension/configure.ac b/extension/configure.ac
index 0a9c4376..a1e054c1 100644
--- a/extension/configure.ac
+++ b/extension/configure.ac
@@ -33,10 +33,7 @@ AC_USE_SYSTEM_EXTENSIONS
INSTALL="$ac_aux_dir/install-sh -c"
export INSTALL
-AM_INIT_AUTOMAKE([-Wall -Werror])
-
-AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.18.1])
+AM_INIT_AUTOMAKE([1.15 -Wall -Werror])
dnl checks for structure members
AC_CHECK_MEMBERS([struct stat.st_blksize])
diff --git a/extension/filefuncs.c b/extension/filefuncs.c
index a20e9ff7..ddb1ecda 100644
--- a/extension/filefuncs.c
+++ b/extension/filefuncs.c
@@ -490,7 +490,7 @@ do_stat(int nargs, awk_value_t *result)
/* always empty out the array */
clear_array(array);
- /* stat the file, if error, set ERRNO and return */
+ /* stat the file; if error, set ERRNO and return */
ret = statfunc(name, & sbuf);
if (ret < 0) {
update_ERRNO_int(errno);
diff --git a/extension/inplace.3am b/extension/inplace.3am
index 5ca04be2..f8fc098f 100644
--- a/extension/inplace.3am
+++ b/extension/inplace.3am
@@ -1,21 +1,10 @@
-.TH INPLACE 3am "Jan 15 2013" "Free Software Foundation" "GNU Awk Extension Modules"
+.TH INPLACE 3am "Mar 18 2015" "Free Software Foundation" "GNU Awk Extension Modules"
.SH NAME
inplace \- emulate sed/perl/ruby in-place editing
.SH SYNOPSIS
.ft CW
.nf
-@load "inplace"
-
-# Please set INPLACE_SUFFIX to make a backup copy. For example, you may
-# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
-
-BEGINFILE {
- inplace_begin(FILENAME, INPLACE_SUFFIX)
-}
-
-ENDFILE {
- inplace_end(FILENAME, INPLACE_SUFFIX)
-}
+gawk -i inplace ...
.fi
.ft R
.SH DESCRIPTION
@@ -27,8 +16,7 @@ and
.BR inplace_end() .
These functions are meant to be invoked from the
.I inplace.awk
-wrapper (whose contents are displayed above)
-which is installed when
+wrapper which is installed when
.I gawk
is.
.PP
diff --git a/extension/inplace.c b/extension/inplace.c
index 0693ad92..e3685e30 100644
--- a/extension/inplace.c
+++ b/extension/inplace.c
@@ -171,10 +171,10 @@ do_inplace_begin(int nargs, awk_value_t *result)
/* N.B. chown/chmod should be more portable than fchown/fchmod */
if (chown(state.tname, sbuf.st_uid, sbuf.st_gid) < 0) {
- /* jumping through hoops to silence gcc. :-( */
+ /* jumping through hoops to silence gcc and clang. :-( */
int junk;
junk = chown(state.tname, -1, sbuf.st_gid);
- junk = junk;
+ ++junk;
}
if (chmod(state.tname, sbuf.st_mode) < 0)
diff --git a/extension/m4/ChangeLog b/extension/m4/ChangeLog
index 16055593..93c044de 100644
--- a/extension/m4/ChangeLog
+++ b/extension/m4/ChangeLog
@@ -1,12 +1,20 @@
-2013-12-23 Andrew J. Schorr <aschorr@telemetry-investments.com>
+2015-03-18 Arnold D. Robbins <arnold@skeeve.com>
- * libtool.m4, ltoptions.m4, ltsugar.m4, ltversion.m4, lt~obsolete.m4:
- Remove libtool support.
+ * libtoolm4, ltversion.m4: Updated to libtool 2.4.6.
+
+2015-01-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * gettext.m4, iconv.m4, intlmacosx.m4, po.m4: Removed.
2014-04-08 Arnold D. Robbins <arnold@skeeve.com>
* 4.1.1: Release tar ball made.
+2013-12-23 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * libtool.m4, ltoptions.m4, ltsugar.m4, ltversion.m4, lt~obsolete.m4:
+ Remove libtool support.
+
2013-12-21 Arnold D. Robbins <arnold@skeeve.com>
* libtool.m4, ltoptions.m4, ltversion.m4: Update to
diff --git a/extension/m4/gettext.m4 b/extension/m4/gettext.m4
deleted file mode 100644
index f84e6a5d..00000000
--- a/extension/m4/gettext.m4
+++ /dev/null
@@ -1,383 +0,0 @@
-# gettext.m4 serial 63 (gettext-0.18)
-dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
-
-dnl Macro to add for using GNU gettext.
-
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl default (if it is not specified or empty) is 'no-libtool'.
-dnl INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl depending on --{enable,disable}-{shared,static} and on the presence of
-dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl $(top_builddir)/intl/libintl.a will be created.
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl implementations (in libc or libintl) without the ngettext() function
-dnl will be ignored. If NEEDSYMBOL is specified and is
-dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries. If empty,
-dnl the value `$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl and used.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl Catalog format: none
-dnl Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
-[
- dnl Argument checking.
- ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
- [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
- ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
- [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
- ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
- [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
- define([gt_included_intl],
- ifelse([$1], [external],
- ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
- [yes]))
- define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
- gt_NEEDS_INIT
- AM_GNU_GETTEXT_NEED([$2])
-
- AC_REQUIRE([AM_PO_SUBDIRS])dnl
- ifelse(gt_included_intl, yes, [
- AC_REQUIRE([AM_INTL_SUBDIR])dnl
- ])
-
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- dnl Ideally we would do this search only after the
- dnl if test "$USE_NLS" = "yes"; then
- dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
- dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
- dnl the configure script would need to contain the same shell code
- dnl again, outside any 'if'. There are two solutions:
- dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
- dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
- dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
- dnl documented, we avoid it.
- ifelse(gt_included_intl, yes, , [
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
- ])
-
- dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
- gt_INTL_MACOSX
-
- dnl Set USE_NLS.
- AC_REQUIRE([AM_NLS])
-
- ifelse(gt_included_intl, yes, [
- BUILD_INCLUDED_LIBINTL=no
- USE_INCLUDED_LIBINTL=no
- ])
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- dnl Add a version number to the cache macros.
- case " $gt_needs " in
- *" need-formatstring-macros "*) gt_api_version=3 ;;
- *" need-ngettext "*) gt_api_version=2 ;;
- *) gt_api_version=1 ;;
- esac
- gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
- gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
- ifelse(gt_included_intl, yes, [
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH([included-gettext],
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- ])
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If GNU gettext is available we use this. Else we have
- dnl to fall back to GNU NLS library.
-
- if test $gt_api_version -ge 3; then
- gt_revision_test_code='
-#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-'
- else
- gt_revision_test_code=
- fi
- if test $gt_api_version -ge 2; then
- gt_expression_test_code=' + * ngettext ("", "", 0)'
- else
- gt_expression_test_code=
- fi
-
- AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
- [AC_TRY_LINK([#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
- [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
- [eval "$gt_func_gnugettext_libc=yes"],
- [eval "$gt_func_gnugettext_libc=no"])])
-
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- ifelse(gt_included_intl, yes, , [
- AM_ICONV_LINK
- ])
- dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
- dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
- dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
- dnl even if libiconv doesn't exist.
- AC_LIB_LINKFLAGS_BODY([intl])
- AC_CACHE_CHECK([for GNU gettext in libintl],
- [$gt_func_gnugettext_libintl],
- [gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- dnl Now see whether libintl exists and does not depend on libiconv.
- AC_TRY_LINK([#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);],
- [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
- [eval "$gt_func_gnugettext_libintl=yes"],
- [eval "$gt_func_gnugettext_libintl=no"])
- dnl Now see whether libintl exists and depends on libiconv.
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <libintl.h>
-$gt_revision_test_code
-extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias (const char *);],
- [bindtextdomain ("", "");
-return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
- [LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- eval "$gt_func_gnugettext_libintl=yes"
- ])
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"])
- fi
-
- dnl If an already present or preinstalled GNU gettext() is found,
- dnl use it. But if this macro is used in GNU gettext, and GNU
- dnl gettext is already preinstalled in libintl, we update this
- dnl libintl. (Cf. the install rule in intl/Makefile.in.)
- if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
- || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- dnl Reset the values set by searching for libintl.
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
- ifelse(gt_included_intl, yes, [
- if test "$gt_use_preinstalled_gnugettext" != "yes"; then
- dnl GNU gettext is not found in the C library.
- dnl Fall back on included GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- BUILD_INCLUDED_LIBINTL=yes
- USE_INCLUDED_LIBINTL=yes
- LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
- LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
- LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
- fi
-
- CATOBJEXT=
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions to use GNU gettext tools.
- CATOBJEXT=.gmo
- fi
- ])
-
- if test -n "$INTL_MACOSX_LIBS"; then
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Some extra flags are needed during linking.
- LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
- LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
- fi
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- AC_DEFINE([ENABLE_NLS], [1],
- [Define to 1 if translation of program messages to the user's native language
- is requested.])
- else
- USE_NLS=no
- fi
- fi
-
- AC_MSG_CHECKING([whether to use NLS])
- AC_MSG_RESULT([$USE_NLS])
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([where the gettext function comes from])
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- AC_MSG_RESULT([$gt_source])
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
- AC_MSG_CHECKING([how to link with libintl])
- AC_MSG_RESULT([$LIBINTL])
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
- fi
-
- dnl For backward compatibility. Some packages may be using this.
- AC_DEFINE([HAVE_GETTEXT], [1],
- [Define if the GNU gettext() function is already present or preinstalled.])
- AC_DEFINE([HAVE_DCGETTEXT], [1],
- [Define if the GNU dcgettext() function is already present or preinstalled.])
- fi
-
- dnl We need to process the po/ directory.
- POSUB=po
- fi
-
- ifelse(gt_included_intl, yes, [
- dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
- dnl to 'yes' because some of the testsuite requires it.
- if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
- BUILD_INCLUDED_LIBINTL=yes
- fi
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST([BUILD_INCLUDED_LIBINTL])
- AC_SUBST([USE_INCLUDED_LIBINTL])
- AC_SUBST([CATOBJEXT])
-
- dnl For backward compatibility. Some configure.ins may be using this.
- nls_cv_header_intl=
- nls_cv_header_libgt=
-
- dnl For backward compatibility. Some Makefiles may be using this.
- DATADIRNAME=share
- AC_SUBST([DATADIRNAME])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INSTOBJEXT=.mo
- AC_SUBST([INSTOBJEXT])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- GENCAT=gencat
- AC_SUBST([GENCAT])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLOBJS=
- if test "$USE_INCLUDED_LIBINTL" = yes; then
- INTLOBJS="\$(GETTOBJS)"
- fi
- AC_SUBST([INTLOBJS])
-
- dnl Enable libtool support if the surrounding package wishes it.
- INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
- AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
- ])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLLIBS="$LIBINTL"
- AC_SUBST([INTLLIBS])
-
- dnl Make all documented variables known to autoconf.
- AC_SUBST([LIBINTL])
- AC_SUBST([LTLIBINTL])
- AC_SUBST([POSUB])
-])
-
-
-dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
-m4_define([gt_NEEDS_INIT],
-[
- m4_divert_text([DEFAULTS], [gt_needs=])
- m4_define([gt_NEEDS_INIT], [])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
-AC_DEFUN([AM_GNU_GETTEXT_NEED],
-[
- m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/extension/m4/iconv.m4 b/extension/m4/iconv.m4
deleted file mode 100644
index e2041b9b..00000000
--- a/extension/m4/iconv.m4
+++ /dev/null
@@ -1,214 +0,0 @@
-# iconv.m4 serial 11 (gettext-0.18.1)
-dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-[
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([iconv])
-])
-
-AC_DEFUN([AM_ICONV_LINK],
-[
- dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
- dnl those with the standalone portable GNU libiconv installed).
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-
- dnl Add $INCICONV to CPPFLAGS before performing the following checks,
- dnl because if the user has installed libiconv and not disabled its use
- dnl via --without-libiconv-prefix, he wants to use it. The first
- dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
- am_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-
- AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- [am_cv_func_iconv=yes])
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- [am_cv_lib_iconv=yes]
- [am_cv_func_iconv=yes])
- LIBS="$am_save_LIBS"
- fi
- ])
- if test "$am_cv_func_iconv" = yes; then
- AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
- dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
- am_save_LIBS="$LIBS"
- if test $am_cv_lib_iconv = yes; then
- LIBS="$LIBS $LIBICONV"
- fi
- AC_TRY_RUN([
-#include <iconv.h>
-#include <string.h>
-int main ()
-{
- /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
- returns. */
- {
- iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
- if (cd_utf8_to_88591 != (iconv_t)(-1))
- {
- static const char input[] = "\342\202\254"; /* EURO SIGN */
- char buf[10];
- const char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_utf8_to_88591,
- (char **) &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res == 0)
- return 1;
- }
- }
- /* Test against Solaris 10 bug: Failures are not distinguishable from
- successful returns. */
- {
- iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
- if (cd_ascii_to_88591 != (iconv_t)(-1))
- {
- static const char input[] = "\263";
- char buf[10];
- const char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_ascii_to_88591,
- (char **) &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if (res == 0)
- return 1;
- }
- }
-#if 0 /* This bug could be worked around by the caller. */
- /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
- {
- iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
- if (cd_88591_to_utf8 != (iconv_t)(-1))
- {
- static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
- char buf[50];
- const char *inptr = input;
- size_t inbytesleft = strlen (input);
- char *outptr = buf;
- size_t outbytesleft = sizeof (buf);
- size_t res = iconv (cd_88591_to_utf8,
- (char **) &inptr, &inbytesleft,
- &outptr, &outbytesleft);
- if ((int)res > 0)
- return 1;
- }
- }
-#endif
- /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
- provided. */
- if (/* Try standardized names. */
- iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
- /* Try IRIX, OSF/1 names. */
- && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
- /* Try AIX names. */
- && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
- /* Try HP-UX names. */
- && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
- return 1;
- return 0;
-}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
- [case "$host_os" in
- aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
- *) am_cv_func_iconv_works="guessing yes" ;;
- esac])
- LIBS="$am_save_LIBS"
- ])
- case "$am_cv_func_iconv_works" in
- *no) am_func_iconv=no am_cv_lib_iconv=no ;;
- *) am_func_iconv=yes ;;
- esac
- else
- am_func_iconv=no am_cv_lib_iconv=no
- fi
- if test "$am_func_iconv" = yes; then
- AC_DEFINE([HAVE_ICONV], [1],
- [Define if you have the iconv() function and it works.])
- fi
- if test "$am_cv_lib_iconv" = yes; then
- AC_MSG_CHECKING([how to link with libiconv])
- AC_MSG_RESULT([$LIBICONV])
- else
- dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
- dnl either.
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
- AC_SUBST([LIBICONV])
- AC_SUBST([LTLIBICONV])
-])
-
-dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
-dnl avoid warnings like
-dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
-dnl This is tricky because of the way 'aclocal' is implemented:
-dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
-dnl Otherwise aclocal's initial scan pass would miss the macro definition.
-dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
-dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
-dnl warnings.
-m4_define([gl_iconv_AC_DEFUN],
- m4_version_prereq([2.64],
- [[AC_DEFUN_ONCE(
- [$1], [$2])]],
- [[AC_DEFUN(
- [$1], [$2])]]))
-gl_iconv_AC_DEFUN([AM_ICONV],
-[
- AM_ICONV_LINK
- if test "$am_cv_func_iconv" = yes; then
- AC_MSG_CHECKING([for iconv declaration])
- AC_CACHE_VAL([am_cv_proto_iconv], [
- AC_TRY_COMPILE([
-#include <stdlib.h>
-#include <iconv.h>
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
- am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- AC_MSG_RESULT([
- $am_cv_proto_iconv])
- AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
- [Define as const if the declaration of iconv() needs const.])
- fi
-])
diff --git a/extension/m4/intlmacosx.m4 b/extension/m4/intlmacosx.m4
deleted file mode 100644
index dd910259..00000000
--- a/extension/m4/intlmacosx.m4
+++ /dev/null
@@ -1,51 +0,0 @@
-# intlmacosx.m4 serial 3 (gettext-0.18)
-dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Checks for special options needed on MacOS X.
-dnl Defines INTL_MACOSX_LIBS.
-AC_DEFUN([gt_INTL_MACOSX],
-[
- dnl Check for API introduced in MacOS X 10.2.
- AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
- [gt_cv_func_CFPreferencesCopyAppValue],
- [gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
- [CFPreferencesCopyAppValue(NULL, NULL)],
- [gt_cv_func_CFPreferencesCopyAppValue=yes],
- [gt_cv_func_CFPreferencesCopyAppValue=no])
- LIBS="$gt_save_LIBS"])
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
- AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
- [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
- fi
- dnl Check for API introduced in MacOS X 10.3.
- AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
- [gt_save_LIBS="$LIBS"
- LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
- AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
- [gt_cv_func_CFLocaleCopyCurrent=yes],
- [gt_cv_func_CFLocaleCopyCurrent=no])
- LIBS="$gt_save_LIBS"])
- if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
- AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
- [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
- fi
- INTL_MACOSX_LIBS=
- if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
- INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
- fi
- AC_SUBST([INTL_MACOSX_LIBS])
-])
diff --git a/extension/m4/po.m4 b/extension/m4/po.m4
deleted file mode 100644
index 3c9884ba..00000000
--- a/extension/m4/po.m4
+++ /dev/null
@@ -1,449 +0,0 @@
-# po.m4 serial 17 (gettext-0.18)
-dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-
-AC_PREREQ([2.50])
-
-dnl Checks for all prerequisites of the po subdirectory.
-AC_DEFUN([AM_PO_SUBDIRS],
-[
- AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AC_PROG_MKDIR_P])dnl defined by automake
- AC_REQUIRE([AM_NLS])dnl
-
- dnl Release version of the gettext macros. This is used to ensure that
- dnl the gettext macros and po/Makefile.in.in are in sync.
- AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
-
- dnl Perform the following tests also if --disable-nls has been given,
- dnl because they are needed for "make dist" to work.
-
- dnl Search for GNU msgfmt in the PATH.
- dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
- dnl The second test excludes FreeBSD msgfmt.
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
- (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
-
- dnl Test whether it is GNU msgfmt >= 0.15.
-changequote(,)dnl
- case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
- *) MSGFMT_015=$MSGFMT ;;
- esac
-changequote([,])dnl
- AC_SUBST([MSGFMT_015])
-changequote(,)dnl
- case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
- *) GMSGFMT_015=$GMSGFMT ;;
- esac
-changequote([,])dnl
- AC_SUBST([GMSGFMT_015])
-
- dnl Search for GNU xgettext 0.12 or newer in the PATH.
- dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
- dnl The second test excludes FreeBSD xgettext.
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
- (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
-
- dnl Test whether it is GNU xgettext >= 0.15.
-changequote(,)dnl
- case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
- '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
- *) XGETTEXT_015=$XGETTEXT ;;
- esac
-changequote([,])dnl
- AC_SUBST([XGETTEXT_015])
-
- dnl Search for GNU msgmerge 0.11 or newer in the PATH.
- AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
- [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
-
- dnl Installation directories.
- dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
- dnl have to define it here, so that it can be used in po/Makefile.
- test -n "$localedir" || localedir='${datadir}/locale'
- AC_SUBST([localedir])
-
- dnl Support for AM_XGETTEXT_OPTION.
- test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
- AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
-
- AC_CONFIG_COMMANDS([po-directories], [[
- for ac_file in $CONFIG_FILES; do
- # Support "outfile[:infile[:infile...]]"
- case "$ac_file" in
- *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- esac
- # PO directories have a Makefile.in generated from Makefile.in.in.
- case "$ac_file" in */Makefile.in)
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
- # Treat a directory as a PO directory if and only if it has a
- # POTFILES.in file. This allows packages to have multiple PO
- # directories under different names or in different locations.
- if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
- rm -f "$ac_dir/POTFILES"
- test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
- cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
- POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
- # on $ac_dir but don't depend on user-specified configuration
- # parameters.
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # The set of available languages was given in configure.in.
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
- fi
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- done
- fi
- test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
- for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
- if test -f "$f"; then
- case "$f" in
- *.orig | *.bak | *~) ;;
- *) cat "$f" >> "$ac_dir/Makefile" ;;
- esac
- fi
- done
- fi
- ;;
- esac
- done]],
- [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
- # from automake < 1.5.
- eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
- # Capture the value of LINGUAS because we need it to compute CATALOGS.
- LINGUAS="${LINGUAS-%UNSET%}"
- ])
-])
-
-dnl Postprocesses a Makefile in a directory containing PO files.
-AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
-[
- # When this code is run, in config.status, two variables have already been
- # set:
- # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
- # - LINGUAS is the value of the environment variable LINGUAS at configure
- # time.
-
-changequote(,)dnl
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- # Find a way to echo strings without interpreting backslash.
- if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
- gt_echo='echo'
- else
- if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
- gt_echo='printf %s\n'
- else
- echo_func () {
- cat <<EOT
-$*
-EOT
- }
- gt_echo='echo_func'
- fi
- fi
-
- # A sed script that extracts the value of VARIABLE from a Makefile.
- sed_x_variable='
-# Test if the hold space is empty.
-x
-s/P/P/
-x
-ta
-# Yes it was empty. Look if we have the expected variable definition.
-/^[ ]*VARIABLE[ ]*=/{
- # Seen the first line of the variable definition.
- s/^[ ]*VARIABLE[ ]*=//
- ba
-}
-bd
-:a
-# Here we are processing a line from the variable definition.
-# Remove comment, more precisely replace it with a space.
-s/#.*$/ /
-# See if the line ends in a backslash.
-tb
-:b
-s/\\$//
-# Print the line, without the trailing backslash.
-p
-tc
-# There was no trailing backslash. The end of the variable definition is
-# reached. Clear the hold space.
-s/^.*$//
-x
-bd
-:c
-# A trailing backslash means that the variable definition continues in the
-# next line. Put a nonempty string into the hold space to indicate this.
-s/^.*$/P/
-x
-:d
-'
-changequote([,])dnl
-
- # Set POTFILES to the value of the Makefile variable POTFILES.
- sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
- POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
- # Compute POTFILES_DEPS as
- # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
- POTFILES_DEPS=
- for file in $POTFILES; do
- POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
- done
- POMAKEFILEDEPS=""
-
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
- sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
- ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
- fi
- # Hide the ALL_LINGUAS assigment from automake < 1.5.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- # Compute POFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
- # Compute UPDATEPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
- # Compute DUMMYPOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
- # Compute GMOFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
- # Compute PROPERTIESFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
- # Compute CLASSFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
- # Compute QMFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
- # Compute MSGFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
- # Compute RESOURCESDLLFILES
- # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- GMOFILES=
- PROPERTIESFILES=
- CLASSFILES=
- QMFILES=
- MSGFILES=
- RESOURCESDLLFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
- CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
- QMFILES="$QMFILES $srcdirpre$lang.qm"
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- JAVACATALOGS=
- QTCATALOGS=
- TCLCATALOGS=
- CSHARPCATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
- QTCATALOGS="$QTCATALOGS $lang.qm"
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
- done
- fi
-
- sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
- if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
- # Add dependencies that cannot be formulated as a simple suffix rule.
- for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
- cat >> "$ac_file.tmp" <<EOF
-$frobbedlang.msg: $lang.po
- @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
- \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
- done
- fi
- if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
- # Add dependencies that cannot be formulated as a simple suffix rule.
- for lang in $ALL_LINGUAS; do
- frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
- cat >> "$ac_file.tmp" <<EOF
-$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
- @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
- \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-EOF
- done
- fi
- if test -n "$POMAKEFILEDEPS"; then
- cat >> "$ac_file.tmp" <<EOF
-Makefile: $POMAKEFILEDEPS
-EOF
- fi
- mv "$ac_file.tmp" "$ac_file"
-])
-
-dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
-AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
-[
- XGETTEXT_EXTRA_OPTIONS=
-])
-
-dnl Registers an option to be passed to xgettext in the po subdirectory.
-AC_DEFUN([AM_XGETTEXT_OPTION],
-[
- AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
- XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
-])
diff --git a/extension/testext.c b/extension/testext.c
index 7462265b..e2ddbe87 100644
--- a/extension/testext.c
+++ b/extension/testext.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 2012, 2013, 2014
+ * Copyright (C) 2012, 2013, 2014, 2015
* the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include <fcntl.h>
#include "gawkapi.h"
@@ -302,11 +303,11 @@ var_test(int nargs, awk_value_t *result)
goto out;
}
- /* look up PROCINFO - should fail */
+ /* look up PROCINFO - should succeed fail */
if (sym_lookup("PROCINFO", AWK_ARRAY, & value))
- printf("var_test: sym_lookup of PROCINFO failed - got a value!\n");
+ printf("var_test: sym_lookup of PROCINFO passed - got a value!\n");
else
- printf("var_test: sym_lookup of PROCINFO passed - did not get a value\n");
+ printf("var_test: sym_lookup of PROCINFO failed - did not get a value\n");
/* look up a reserved variable - should pass */
if (sym_lookup("ARGC", AWK_NUMBER, & value))
@@ -374,6 +375,84 @@ out:
}
/*
+ * 3/2015: This test is no longer strictly necessary,
+ * since PROCINFO is no longer a deferred variable.
+ * But we leave it in for safety, anyway.
+ */
+/*
+BEGIN {
+ print "test_deferred returns", test_deferred()
+ print ""
+}
+*/
+static awk_value_t *
+test_deferred(int nargs, awk_value_t *result)
+{
+ awk_value_t arr;
+ awk_value_t index, value;
+ const struct nval {
+ const char *name;
+ double val;
+ } seed[] = {
+ { "fubar", 9.0, },
+ { "rumpus", -5.0, },
+ };
+ struct nval sysval[] = {
+ { "uid", getuid(), },
+ { "api_major", GAWK_API_MAJOR_VERSION, },
+ };
+ size_t i;
+
+ assert(result != NULL);
+ make_number(0.0, result);
+
+ if (nargs != 0) {
+ printf("test_deferred: nargs not right (%d should be 0)\n", nargs);
+ goto out;
+ }
+
+ if (! sym_lookup("PROCINFO", AWK_ARRAY, & arr)) {
+ printf("test_deferred: %d: sym_lookup failed\n", __LINE__);
+ goto out;
+ }
+
+ for (i = 0; i < sizeof(seed)/sizeof(seed[0]); i++) {
+ make_const_string(seed[i].name, strlen(seed[i].name), & index);
+ make_number(seed[i].val, & value);
+ if (! set_array_element(arr.array_cookie, & index, & value)) {
+ printf("test_deferred: %d: set_array_element(%s) failed\n", __LINE__, seed[i].name);
+ goto out;
+ }
+ }
+
+ /* test that it still contains the values we loaded */
+ for (i = 0; i < sizeof(seed)/sizeof(seed[0]); i++) {
+ make_const_string(seed[i].name, strlen(seed[i].name), & index);
+ make_null_string(& value);
+ if (! get_array_element(arr.array_cookie, &index, AWK_NUMBER, & value)) {
+ printf("test_deferred: %d: get_array_element(%s) failed\n", __LINE__, seed[i].name);
+ goto out;
+ }
+ printf("%s = %g\n", seed[i].name, value.num_value);
+ }
+
+ /* check a few automatically-supplied values */
+ for (i = 0; i < sizeof(sysval)/sizeof(sysval[0]); i++) {
+ make_const_string(sysval[i].name, strlen(sysval[i].name), & index);
+ make_null_string(& value);
+ if (! get_array_element(arr.array_cookie, &index, AWK_NUMBER, & value)) {
+ printf("test_deferred: %d: get_array_element(%s) failed\n", __LINE__, sysval[i].name);
+ goto out;
+ }
+ printf("%s matches %d\n", sysval[i].name, (value.num_value == sysval[i].val));
+ }
+
+ make_number(1.0, result);
+out:
+ return result;
+}
+
+/*
BEGIN {
for (i = 1; i <= 10; i++)
test_array[i] = i + 2
@@ -710,6 +789,7 @@ BEGIN {
ret = test_indirect_vars() # should get correct value of NR
printf("test_indirect_var() return %d\n", ret)
delete ARGV[1]
+ print ""
}
*/
@@ -742,6 +822,124 @@ out:
return result;
}
+/*
+BEGIN {
+ outfile = "testexttmp.txt"
+ alias = ".test.alias"
+ print "line 1" > outfile
+ print "line 2" > outfile
+ print "line 3" > outfile
+ close(outfile)
+ ret = test_get_file(outfile, alias)
+ printf "test_get_file returned %d\n", ret
+ nr = 0
+ while ((getline < alias) > 0)
+ printf "File [%s] nr [%s]: %s\n", alias, ++nr, $0
+ close(alias)
+ system("rm " outfile)
+ print ""
+}
+*/
+
+/* test_get_file --- test that we can create a file */
+
+static awk_value_t *
+test_get_file(int nargs, awk_value_t *result)
+{
+ awk_value_t filename, alias;
+ int fd;
+ const awk_input_buf_t *ibuf;
+ const awk_output_buf_t *obuf;
+
+ if (nargs != 2) {
+ printf("%s: nargs not right (%d should be 2)\n", "test_get_file", nargs);
+ return make_number(-1.0, result);
+ }
+
+ if (! get_argument(0, AWK_STRING, & filename)) {
+ printf("%s: cannot get first arg\n", "test_get_file");
+ return make_number(-1.0, result);
+ }
+ if (! get_argument(1, AWK_STRING, & alias)) {
+ printf("%s: cannot get second arg\n", "test_get_file");
+ return make_number(-1.0, result);
+ }
+ if ((fd = open(filename.str_value.str, O_RDONLY)) < 0) {
+ printf("%s: open(%s) failed\n", "test_get_file", filename.str_value.str);
+ return make_number(-1.0, result);
+ }
+ if (! get_file(alias.str_value.str, strlen(alias.str_value.str), "<", fd, &ibuf, &obuf)) {
+ printf("%s: get_file(%s) failed\n", "test_get_file", alias.str_value.str);
+ return make_number(-1.0, result);
+ }
+ if (! ibuf || ibuf->fd != fd) {
+ printf("%s: get_file(%s) returned fd %d instead of %d\n", "test_get_file", alias.str_value.str, ibuf ? ibuf->fd : -1, fd);
+ return make_number(-1.0, result);
+ }
+ return make_number(0.0, result);
+}
+
+/* do_get_file --- provide access to get_file API */
+
+static awk_value_t *
+do_get_file(int nargs, awk_value_t *result)
+{
+ awk_value_t filename, filetype, fd, res;
+ const awk_input_buf_t *ibuf;
+ const awk_output_buf_t *obuf;
+
+ if (nargs != 4) {
+ printf("%s: nargs not right (%d should be 4)\n", "get_file", nargs);
+ return make_number(-1.0, result);
+ }
+
+ if (! get_argument(0, AWK_STRING, & filename)) {
+ printf("%s: cannot get first arg\n", "get_file");
+ return make_number(-1.0, result);
+ }
+ if (! get_argument(1, AWK_STRING, & filetype)) {
+ printf("%s: cannot get second arg\n", "get_file");
+ return make_number(-1.0, result);
+ }
+ if (! get_argument(2, AWK_NUMBER, & fd)) {
+ printf("%s: cannot get third arg\n", "get_file");
+ return make_number(-1.0, result);
+ }
+ if (! get_argument(3, AWK_ARRAY, & res)) {
+ printf("%s: cannot get fourth arg\n", "get_file");
+ return make_number(-1.0, result);
+ }
+ clear_array(res.array_cookie);
+
+ if (! get_file(filename.str_value.str, strlen(filename.str_value.str), filetype.str_value.str, fd.num_value, &ibuf, &obuf)) {
+ printf("%s: get_file(%s, %s, %d) failed\n", "get_file", filename.str_value.str, filetype.str_value.str, (int)(fd.num_value));
+ return make_number(0.0, result);
+ }
+
+ if (ibuf) {
+ awk_value_t idx, val;
+ set_array_element(res.array_cookie,
+ make_const_string("input", 5, & idx),
+ make_number(ibuf->fd, & val));
+ if (ibuf->name)
+ set_array_element(res.array_cookie,
+ make_const_string("input_name", 10, & idx),
+ make_const_string(ibuf->name, strlen(ibuf->name), & val));
+ }
+ if (obuf) {
+ awk_value_t idx, val;
+ set_array_element(res.array_cookie,
+ make_const_string("output", 6, & idx),
+ make_number(obuf->fp ? fileno(obuf->fp) : -1,
+ & val));
+ if (obuf->name)
+ set_array_element(res.array_cookie,
+ make_const_string("output_name", 11, & idx),
+ make_const_string(obuf->name, strlen(obuf->name), & val));
+ }
+ return make_number(1.0, result);
+}
+
/* fill_in_array --- fill in a new array */
static void
@@ -829,6 +1027,7 @@ static awk_ext_func_t func_table[] = {
{ "dump_array_and_delete", dump_array_and_delete, 2 },
{ "try_modify_environ", try_modify_environ, 0 },
{ "var_test", var_test, 1 },
+ { "test_deferred", test_deferred, 0 },
{ "test_errno", test_errno, 0 },
{ "test_array_size", test_array_size, 1 },
{ "test_array_elem", test_array_elem, 2 },
@@ -837,6 +1036,8 @@ static awk_ext_func_t func_table[] = {
{ "test_scalar", test_scalar, 1 },
{ "test_scalar_reserved", test_scalar_reserved, 0 },
{ "test_indirect_vars", test_indirect_vars, 0 },
+ { "test_get_file", test_get_file, 2 },
+ { "get_file", do_get_file, 4 },
};
/* init_testext --- additional initialization function */
@@ -847,6 +1048,10 @@ static awk_bool_t init_testext(void)
static const char message[] = "hello, world"; /* of course */
static const char message2[] = "i am a scalar";
+ /* This is used by the getfile test */
+ if (sym_lookup("TESTEXT_QUIET", AWK_NUMBER, & value))
+ return awk_true;
+
/* add at_exit functions */
awk_atexit(at_exit0, NULL);
awk_atexit(at_exit1, & data_for_1);
diff --git a/extras/Makefile.in b/extras/Makefile.in
index f6416f56..f6741221 100644
--- a/extras/Makefile.in
+++ b/extras/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -38,7 +38,17 @@
#
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -102,8 +112,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = extras
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
- $(top_srcdir)/mkinstalldirs ChangeLog
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/gettext.m4 \
@@ -118,6 +126,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -171,6 +180,8 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(profiledir)"
DATA = $(profile_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs \
+ ChangeLog
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -317,7 +328,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu extras/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu extras/Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -510,6 +520,8 @@ uninstall-am: uninstall-profileDATA
pdf-am ps ps-am tags-am uninstall uninstall-am \
uninstall-profileDATA
+.PRECIOUS: Makefile
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/gawkapi.c b/gawkapi.c
index 06f31929..9d8c6f36 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 2012-2014 the Free Software Foundation, Inc.
+ * Copyright (C) 2012-2015 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Programming Language.
@@ -25,6 +25,11 @@
#include "awk.h"
+/* Declare some globals used by api_get_file: */
+extern IOBUF *curfile;
+extern INSTRUCTION *main_beginfile;
+extern int currule;
+
static awk_bool_t node_to_awk_value(NODE *node, awk_value_t *result, awk_valtype_t wanted);
/*
@@ -783,15 +788,16 @@ api_set_array_element(awk_ext_id_t id, awk_array_t a_cookie,
tmp = awk_value_to_node(index);
aptr = assoc_lookup(array, tmp);
- unref(tmp);
unref(*aptr);
elem = *aptr = awk_value_to_node(value);
if (elem->type == Node_var_array) {
elem->parent_array = array;
elem->vname = estrdup(index->str_value.str,
index->str_value.len);
- make_aname(elem);
}
+ if (array->astore != NULL)
+ (*array->astore)(array, tmp);
+ unref(tmp);
return awk_true;
}
@@ -1035,6 +1041,99 @@ api_release_value(awk_ext_id_t id, awk_value_cookie_t value)
return awk_true;
}
+/* api_get_file --- return a handle to an existing or newly opened file */
+
+static awk_bool_t
+api_get_file(awk_ext_id_t id, const char *name, size_t namelen, const char *filetype,
+ int fd, const awk_input_buf_t **ibufp, const awk_output_buf_t **obufp)
+{
+ const struct redirect *f;
+ int flag; /* not used, sigh */
+ enum redirval redirtype;
+
+ if (name == NULL || namelen == 0) {
+ if (curfile == NULL) {
+ INSTRUCTION *pc;
+ int save_rule;
+ char *save_source;
+
+ if (nextfile(& curfile, false) <= 0)
+ return awk_false;
+
+ pc = main_beginfile;
+ /* save execution state */
+ save_rule = currule;
+ save_source = source;
+
+ for (;;) {
+ if (pc == NULL)
+ fatal(_("cannot find end of BEGINFILE rule"));
+ if (pc->opcode == Op_after_beginfile)
+ break;
+ pc = pc->nexti;
+ }
+ pc->opcode = Op_stop;
+ (void) (*interpret)(main_beginfile);
+ pc->opcode = Op_after_beginfile;
+ after_beginfile(& curfile);
+ /* restore execution state */
+ currule = save_rule;
+ source = save_source;
+ }
+ *ibufp = &curfile->public;
+ *obufp = NULL;
+
+ return awk_true;
+ }
+
+ redirtype = redirect_none;
+ switch (filetype[0]) {
+ case '<':
+ if (filetype[1] == '\0')
+ redirtype = redirect_input;
+ break;
+ case '>':
+ switch (filetype[1]) {
+ case '\0':
+ redirtype = redirect_output;
+ break;
+ case '>':
+ if (filetype[2] == '\0')
+ redirtype = redirect_append;
+ break;
+ }
+ break;
+ case '|':
+ if (filetype[2] == '\0') {
+ switch (filetype[1]) {
+ case '>':
+ redirtype = redirect_pipe;
+ break;
+ case '<':
+ redirtype = redirect_pipein;
+ break;
+ case '&':
+ redirtype = redirect_twoway;
+ break;
+ }
+ }
+ break;
+ }
+
+ if (redirtype == redirect_none) {
+ warning(_("cannot open unrecognized file type `%s' for `%s'"),
+ filetype, name);
+ return awk_false;
+ }
+
+ if ((f = redirect_string(name, namelen, 0, redirtype, &flag, fd, false)) == NULL)
+ return awk_false;
+
+ *ibufp = f->iop ? & f->iop->public : NULL;
+ *obufp = f->output.fp ? & f->output : NULL;
+ return awk_true;
+}
+
/*
* Register a version string for this extension with gawk.
*/
@@ -1120,6 +1219,9 @@ gawk_api_t api_impl = {
calloc,
realloc,
free,
+
+ /* Find/open a file */
+ api_get_file,
};
/* init_ext_api --- init the extension API */
diff --git a/gawkapi.h b/gawkapi.h
index d8215450..3604e906 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -263,7 +263,7 @@ typedef struct awk_two_way_processor {
/* Current version of the API. */
enum {
GAWK_API_MAJOR_VERSION = 1,
- GAWK_API_MINOR_VERSION = 1
+ GAWK_API_MINOR_VERSION = 2
};
/* A number of typedefs related to different types of values. */
@@ -504,7 +504,7 @@ typedef struct gawk_api {
awk_value_t *result);
/*
- * Convert a paramter that was undefined into an array
+ * Convert a parameter that was undefined into an array
* (provide call-by-reference for arrays). Returns false
* if count is too big, or if the argument's type is
* not undefined.
@@ -674,6 +674,39 @@ typedef struct gawk_api {
void *(*api_calloc)(size_t nmemb, size_t size);
void *(*api_realloc)(void *ptr, size_t size);
void (*api_free)(void *ptr);
+
+ /*
+ * Look up a file. If the name is NULL or name_len is 0, it returns
+ * data for the currently open input file corresponding to FILENAME
+ * (and it will not access the filetype argument, so that may be
+ * undefined).
+ * If the file is not already open, it tries to open it.
+ * The "filetype" argument should be one of:
+ * ">", ">>", "<", "|>", "|<", and "|&"
+ * If the file is not already open, and the fd argument is non-negative,
+ * gawk will use that file descriptor instead of opening the file
+ * in the usual way. If the fd is non-negative, but the file exists
+ * already, gawk ignores the fd and returns the existing file. It is
+ * the caller's responsibility to notice that the fd in the returned
+ * awk_input_buf_t does not match the requested value. Note that
+ * supplying a file descriptor is currently NOT supported for pipes.
+ * It should work for input, output, append, and two-way (coprocess)
+ * sockets. If the filetype is two-way, we assume that it is a socket!
+ * Note that in the two-way case, the input and output file descriptors
+ * may differ. To check for success, one must check that either of
+ * them matches.
+ */
+ awk_bool_t (*api_get_file)(awk_ext_id_t id,
+ const char *name,
+ size_t name_len,
+ const char *filetype,
+ int fd,
+ /*
+ * Return values (on success, one or both should
+ * be non-NULL):
+ */
+ const awk_input_buf_t **ibufp,
+ const awk_output_buf_t **obufp);
} gawk_api_t;
#ifndef GAWK /* these are not for the gawk code itself! */
@@ -756,6 +789,9 @@ typedef struct gawk_api {
#define release_value(value) \
(api->api_release_value(ext_id, value))
+#define get_file(name, namelen, filetype, fd, ibuf, obuf) \
+ (api->api_get_file(ext_id, name, namelen, filetype, fd, ibuf, obuf))
+
#define register_ext_version(version) \
(api->api_register_ext_version(ext_id, version))
@@ -846,7 +882,7 @@ make_number(double num, awk_value_t *result)
extern int dl_load(const gawk_api_t *const api_p, awk_ext_id_t id);
#if 0
-/* Boiler plate code: */
+/* Boilerplate code: */
int plugin_is_GPL_compatible;
static gawk_api_t *const api;
diff --git a/getopt.c b/getopt.c
index 7bd42bb6..4de0b9a0 100644
--- a/getopt.c
+++ b/getopt.c
@@ -2,7 +2,7 @@
NOTE: getopt is part of the C library, so if you don't know what
"Keep this file name-space clean" means, talk to drepper@gnu.org
before changing it!
- Copyright (C) 1987-2014 Free Software Foundation, Inc.
+ Copyright (C) 1987-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -613,7 +613,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
fputc_unlocked ('\n', fp);
- if (__builtin_expect (fclose (fp) != EOF, 1))
+ if (__glibc_likely (fclose (fp) != EOF))
{
_IO_flockfile (stderr);
diff --git a/getopt.h b/getopt.h
index 4471bf54..75cd5e8d 100644
--- a/getopt.h
+++ b/getopt.h
@@ -1,5 +1,5 @@
/* Declarations for getopt.
- Copyright (C) 1989-2014 Free Software Foundation, Inc.
+ Copyright (C) 1989-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
diff --git a/getopt1.c b/getopt1.c
index 32f2f6a6..b61041db 100644
--- a/getopt1.c
+++ b/getopt1.c
@@ -1,5 +1,5 @@
/* getopt_long and getopt_long_only entry points for GNU getopt.
- Copyright (C) 1987-2014 Free Software Foundation, Inc.
+ Copyright (C) 1987-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
diff --git a/getopt_int.h b/getopt_int.h
index d255c8ee..03d62277 100644
--- a/getopt_int.h
+++ b/getopt_int.h
@@ -1,5 +1,5 @@
/* Internal declarations for getopt.
- Copyright (C) 1989-2014 Free Software Foundation, Inc.
+ Copyright (C) 1989-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
diff --git a/install-sh b/install-sh
index 04367377..0b0fdcbb 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-10-30.23; # UTC
+scriptversion=2013-12-25.23; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -82,7 +82,7 @@ dir_arg=
dst_arg=
copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -139,14 +139,16 @@ while test $# -ne 0; do
-s) stripcmd=$stripprog;;
- -t) dst_arg=$2
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;;
- -T) no_target_directory=true;;
+ -T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
@@ -161,6 +163,16 @@ while test $# -ne 0; do
shift
done
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
@@ -192,6 +204,15 @@ if test $# -eq 0; then
fi
if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
@@ -253,7 +274,7 @@ do
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
- if test -n "$no_target_directory"; then
+ if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
diff --git a/interpret.h b/interpret.h
index 3a9cab37..a11268de 100644
--- a/interpret.h
+++ b/interpret.h
@@ -1066,7 +1066,15 @@ match_re:
assert(the_func != NULL);
/* call it */
- r = the_func(arg_count);
+ if (the_func == (builtin_func_t) do_sub)
+ r = call_sub(t1->stptr, arg_count);
+ else if (the_func == do_match)
+ r = call_match(arg_count);
+ else if (the_func == do_split || the_func == do_patsplit)
+ r = call_split_func(t1->stptr, arg_count);
+ else
+ r = the_func(arg_count);
+
PUSH(r);
break;
} else if (f->type != Node_func) {
@@ -1313,17 +1321,18 @@ match_re:
fatal(_("`exit' cannot be called in the current context"));
exiting = true;
- t1 = POP_NUMBER();
- exit_val = (int) get_number_si(t1);
- DEREF(t1);
+ if ((t1 = POP_NUMBER()) != Nnull_string) {
+ exit_val = (int) get_number_si(t1);
#ifdef VMS
- if (exit_val == 0)
- exit_val = EXIT_SUCCESS;
- else if (exit_val == 1)
- exit_val = EXIT_FAILURE;
- /* else
- just pass anything else on through */
+ if (exit_val == 0)
+ exit_val = EXIT_SUCCESS;
+ else if (exit_val == 1)
+ exit_val = EXIT_FAILURE;
+ /* else
+ just pass anything else on through */
#endif
+ }
+ DEREF(t1);
if (currule == BEGINFILE || currule == ENDFILE) {
diff --git a/io.c b/io.c
index 1d15d887..cf9dd943 100644
--- a/io.c
+++ b/io.c
@@ -261,7 +261,6 @@ struct recmatch {
static int iop_close(IOBUF *iop);
-struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
static void close_one(void);
static int close_redir(struct redirect *rp, bool exitwarn, two_way_close_type how);
#ifndef PIPES_SIMULATED
@@ -272,7 +271,7 @@ static IOBUF *iop_alloc(int fd, const char *name, int errno_val);
static IOBUF *iop_finish(IOBUF *iop);
static int gawk_pclose(struct redirect *rp);
static int str2mode(const char *mode);
-static int two_way_open(const char *str, struct redirect *rp);
+static int two_way_open(const char *str, struct redirect *rp, int extfd);
static int pty_vs_pipe(const char *command);
static void find_input_parser(IOBUF *iop);
static bool find_output_wrapper(awk_output_buf_t *outbuf);
@@ -596,7 +595,8 @@ inrec(IOBUF *iop, int *errcode)
else
cnt = get_a_record(& begin, iop, errcode);
- if (cnt == EOF) {
+ /* Note that get_a_record may return -2 when I/O would block */
+ if (cnt < 0) {
retval = false;
} else {
INCREMENT_REC(NR);
@@ -724,13 +724,13 @@ redflags2str(int flags)
return genflags2str(flags, redtab);
}
-/* redirect --- Redirection for printf and print commands */
+/* redirect_string --- Redirection for printf and print commands, use string info */
struct redirect *
-redirect(NODE *redir_exp, int redirtype, int *errflg)
+redirect_string(const char *str, size_t explen, bool not_string,
+ int redirtype, int *errflg, int extfd, bool failure_fatal)
{
struct redirect *rp;
- char *str;
int tflag = 0;
int outflag = 0;
const char *direction = "to";
@@ -779,18 +779,16 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
default:
cant_happen();
}
- if (do_lint && (redir_exp->flags & STRCUR) == 0)
+ if (do_lint && not_string)
lintwarn(_("expression in `%s' redirection only has numeric value"),
what);
- redir_exp = force_string(redir_exp);
- str = redir_exp->stptr;
if (str == NULL || *str == '\0')
fatal(_("expression for `%s' redirection has null string value"),
what);
- if (do_lint && (strncmp(str, "0", redir_exp->stlen) == 0
- || strncmp(str, "1", redir_exp->stlen) == 0))
+ if (do_lint && (strncmp(str, "0", explen) == 0
+ || strncmp(str, "1", explen) == 0))
lintwarn(_("filename `%s' for `%s' redirection may be result of logical expression"),
str, what);
@@ -828,8 +826,8 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
#endif /* PIPES_SIMULATED */
/* now check for a match */
- if (strlen(rp->value) == redir_exp->stlen
- && memcmp(rp->value, str, redir_exp->stlen) == 0
+ if (strlen(rp->value) == explen
+ && memcmp(rp->value, str, explen) == 0
&& ((rp->flag & ~(RED_NOBUF|RED_EOF|RED_PTY)) == tflag
|| (outflag != 0
&& (rp->flag & (RED_FILE|RED_WRITE)) == outflag))) {
@@ -840,23 +838,25 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
if (do_lint && rpflag != newflag)
lintwarn(
_("unnecessary mixing of `>' and `>>' for file `%.*s'"),
- (int) redir_exp->stlen, rp->value);
+ (int) explen, rp->value);
break;
}
}
if (rp == NULL) {
+ char *newstr;
new_rp = true;
if (save_rp != NULL) {
rp = save_rp;
efree(rp->value);
} else
emalloc(rp, struct redirect *, sizeof(struct redirect), "redirect");
- emalloc(str, char *, redir_exp->stlen + 1, "redirect");
- memcpy(str, redir_exp->stptr, redir_exp->stlen);
- str[redir_exp->stlen] = '\0';
- rp->value = str;
+ emalloc(newstr, char *, explen + 1, "redirect");
+ memcpy(newstr, str, explen);
+ newstr[explen] = '\0';
+ str = newstr;
+ rp->value = newstr;
rp->flag = tflag;
init_output_wrapper(& rp->output);
rp->output.name = str;
@@ -888,10 +888,20 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
mode = binmode("a");
break;
case redirect_pipe:
+ if (extfd >= 0) {
+ warning(_("get_file cannot create pipe `%s' with fd %d"), str, extfd);
+ return NULL;
+ }
/* synchronize output before new pipe */
(void) flush_io();
os_restore_mode(fileno(stdin));
+ /*
+ * Don't check failure_fatal; see input pipe below.
+ * Note that the failure happens upon failure to fork,
+ * using a non-existant program will still succeed the
+ * popen().
+ */
if ((rp->output.fp = popen(str, binmode("w"))) == NULL)
fatal(_("can't open pipe `%s' for output (%s)"),
str, strerror(errno));
@@ -901,6 +911,10 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
rp->flag |= RED_NOBUF;
break;
case redirect_pipein:
+ if (extfd >= 0) {
+ warning(_("get_file cannot create pipe `%s' with fd %d"), str, extfd);
+ return NULL;
+ }
direction = "from";
if (gawk_popen(str, rp) == NULL)
fatal(_("can't open pipe `%s' for input (%s)"),
@@ -908,7 +922,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
break;
case redirect_input:
direction = "from";
- fd = devopen(str, binmode("r"));
+ fd = (extfd >= 0) ? extfd : devopen(str, binmode("r"));
if (fd == INVALID_HANDLE && errno == EISDIR) {
*errflg = EISDIR;
/* do not free rp, saving it for reuse (save_rp = rp) */
@@ -925,15 +939,19 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
}
break;
case redirect_twoway:
+#ifndef HAVE_SOCKETS
+ if (extfd >= 0) {
+ warning(_("get_file socket creation not supported on this platform for `%s' with fd %d"), str, extfd);
+ return NULL;
+ }
+#endif
direction = "to/from";
- if (! two_way_open(str, rp)) {
-#ifdef HAVE_SOCKETS
- if (inetfile(str, NULL)) {
+ if (! two_way_open(str, rp, extfd)) {
+ if (! failure_fatal || is_non_fatal_redirect(str)) {
*errflg = errno;
/* do not free rp, saving it for reuse (save_rp = rp) */
return NULL;
} else
-#endif
fatal(_("can't open two way pipe `%s' for input/output (%s)"),
str, strerror(errno));
}
@@ -945,7 +963,7 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
if (mode != NULL) {
errno = 0;
rp->output.mode = mode;
- fd = devopen(str, mode);
+ fd = (extfd >= 0) ? extfd : devopen(str, mode);
if (fd > INVALID_HANDLE) {
if (fd == fileno(stdin))
@@ -1009,11 +1027,14 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
* can return -1. For output to file,
* complain. The shell will complain on
* a bad command to a pipe.
+ *
+ * 12/2014: Take nonfatal settings in PROCINFO into account.
*/
if (errflg != NULL)
*errflg = errno;
- if ( redirtype == redirect_output
- || redirtype == redirect_append) {
+ if (failure_fatal && ! is_non_fatal_redirect(str) &&
+ (redirtype == redirect_output
+ || redirtype == redirect_append)) {
/* multiple messages make life easier for translators */
if (*direction == 'f')
fatal(_("can't redirect from `%s' (%s)"),
@@ -1044,6 +1065,18 @@ redirect(NODE *redir_exp, int redirtype, int *errflg)
return rp;
}
+/* redirect --- Redirection for printf and print commands */
+
+struct redirect *
+redirect(NODE *redir_exp, int redirtype, int *errflg, bool failure_fatal)
+{
+ bool not_string = ((redir_exp->flags & STRCUR) == 0);
+
+ redir_exp = force_string(redir_exp);
+ return redirect_string(redir_exp->stptr, redir_exp->stlen, not_string,
+ redirtype, errflg, -1, failure_fatal);
+}
+
/* getredirect --- find the struct redirect for this file or pipe */
struct redirect *
@@ -1058,6 +1091,36 @@ getredirect(const char *str, int len)
return NULL;
}
+/* is_non_fatal_std --- return true if fp is stdout/stderr and nonfatal */
+
+bool
+is_non_fatal_std(FILE *fp)
+{
+ static const char nonfatal[] = "NONFATAL";
+
+ if (in_PROCINFO(nonfatal, NULL, NULL))
+ return true;
+
+ /* yucky logic. sigh. */
+ if (fp == stdout) {
+ return ( in_PROCINFO("-", nonfatal, NULL) != NULL
+ || in_PROCINFO("/dev/stdout", nonfatal, NULL) != NULL);
+ } else if (fp == stderr) {
+ return (in_PROCINFO("/dev/stderr", nonfatal, NULL) != NULL);
+ }
+
+ return false;
+}
+
+/* is_non_fatal_redirect --- return true if redirected I/O should be nonfatal */
+
+bool
+is_non_fatal_redirect(const char *str)
+{
+ return in_PROCINFO("NONFATAL", NULL, NULL) != NULL
+ || in_PROCINFO(str, "NONFATAL", NULL) != NULL;
+}
+
/* close_one --- temporarily close an open file to re-use the fd */
static void
@@ -1430,7 +1493,7 @@ str2mode(const char *mode)
static int
socketopen(int family, int type, const char *localpname,
- const char *remotepname, const char *remotehostname)
+ const char *remotepname, const char *remotehostname, bool *hard_error)
{
struct addrinfo *lres, *lres0;
struct addrinfo lhints;
@@ -1449,8 +1512,11 @@ socketopen(int family, int type, const char *localpname,
lerror = getaddrinfo(NULL, localpname, & lhints, & lres);
if (lerror) {
- if (strcmp(localpname, "0") != 0)
- fatal(_("local port %s invalid in `/inet'"), localpname);
+ if (strcmp(localpname, "0") != 0) {
+ warning(_("local port %s invalid in `/inet'"), localpname);
+ *hard_error = true;
+ return INVALID_HANDLE;
+ }
lres0 = NULL;
lres = & lhints;
} else
@@ -1468,7 +1534,9 @@ socketopen(int family, int type, const char *localpname,
if (rerror) {
if (lres0 != NULL)
freeaddrinfo(lres0);
- fatal(_("remote host and port information (%s, %s) invalid"), remotehostname, remotepname);
+ warning(_("remote host and port information (%s, %s) invalid"), remotehostname, remotepname);
+ *hard_error = true;
+ return INVALID_HANDLE;
}
rres0 = rres;
socket_fd = INVALID_HANDLE;
@@ -1577,6 +1645,7 @@ devopen(const char *name, const char *mode)
char *ptr;
int flag = 0;
struct inet_socket_info isi;
+ int save_errno = 0;
if (strcmp(name, "-") == 0)
return fileno(stdin);
@@ -1619,6 +1688,14 @@ devopen(const char *name, const char *mode)
goto strictopen;
} else if (inetfile(name, & isi)) {
#ifdef HAVE_SOCKETS
+#define DEFAULT_RETRIES 20
+ static unsigned long def_retries = DEFAULT_RETRIES;
+ static bool first_time = true;
+ unsigned long retries = 0;
+ static long msleep = 1000;
+ bool hard_error = false;
+ bool non_fatal = is_non_fatal_redirect(name);
+
cp = (char *) name;
/* socketopen requires NUL-terminated strings */
@@ -1626,13 +1703,6 @@ devopen(const char *name, const char *mode)
cp[isi.remotehost.offset+isi.remotehost.len] = '\0';
/* remoteport comes last, so already NUL-terminated */
- {
-#define DEFAULT_RETRIES 20
- static unsigned long def_retries = DEFAULT_RETRIES;
- static bool first_time = true;
- unsigned long retries = 0;
- static long msleep = 1000;
-
if (first_time) {
char *cp, *end;
unsigned long count = 0;
@@ -1658,25 +1728,41 @@ devopen(const char *name, const char *mode)
msleep *= 1000;
}
}
- retries = def_retries;
+ /*
+ * PROCINFO["NONFATAL"] or PROCINFO[name, "NONFATAL"] overrrides
+ * GAWK_SOCK_RETRIES. The explicit code in the program carries
+ * a bigger stick than the environment variable does.
+ */
+ retries = non_fatal ? 1 : def_retries;
+ errno = 0;
do {
- openfd = socketopen(isi.family, isi.protocol, name+isi.localport.offset, name+isi.remoteport.offset, name+isi.remotehost.offset);
+ openfd = socketopen(isi.family, isi.protocol, name+isi.localport.offset,
+ name+isi.remoteport.offset, name+isi.remotehost.offset,
+ & hard_error);
retries--;
- } while (openfd == INVALID_HANDLE && retries > 0 && usleep(msleep) == 0);
- }
+ } while (openfd == INVALID_HANDLE && ! hard_error && retries > 0 && usleep(msleep) == 0);
+ save_errno = errno;
- /* restore original name string */
- cp[isi.localport.offset+isi.localport.len] = '/';
- cp[isi.remotehost.offset+isi.remotehost.len] = '/';
+ /* restore original name string */
+ cp[isi.localport.offset+isi.localport.len] = '/';
+ cp[isi.remotehost.offset+isi.remotehost.len] = '/';
#else /* ! HAVE_SOCKETS */
- fatal(_("TCP/IP communications are not supported"));
+ fatal(_("TCP/IP communications are not supported"));
#endif /* HAVE_SOCKETS */
}
strictopen:
- if (openfd == INVALID_HANDLE)
+ if (openfd == INVALID_HANDLE) {
openfd = open(name, flag, 0666);
+ /*
+ * ENOENT means there is no such name in the filesystem.
+ * Therefore it's ok to propagate up the error from
+ * getaddrinfo() that's in save_errno.
+ */
+ if (openfd == INVALID_HANDLE && errno == ENOENT && save_errno)
+ errno = save_errno;
+ }
#if defined(__EMX__) || defined(__MINGW32__)
if (openfd == INVALID_HANDLE && errno == EACCES) {
/* On OS/2 and Windows directory access via open() is
@@ -1699,16 +1785,16 @@ strictopen:
/* two_way_open --- open a two way communications channel */
static int
-two_way_open(const char *str, struct redirect *rp)
+two_way_open(const char *str, struct redirect *rp, int extfd)
{
static bool no_ptys = false;
#ifdef HAVE_SOCKETS
/* case 1: socket */
- if (inetfile(str, NULL)) {
+ if (extfd >= 0 || inetfile(str, NULL)) {
int fd, newfd;
- fd = devopen(str, "rw");
+ fd = (extfd >= 0) ? extfd : devopen(str, "rw");
if (fd == INVALID_HANDLE)
return false;
if ((BINMODE & BINMODE_OUTPUT) != 0)
@@ -2168,17 +2254,43 @@ use_pipes:
#ifndef PIPES_SIMULATED /* real pipes */
-/* wait_any --- wait for a child process, close associated pipe */
+/*
+ * wait_any --- if the argument pid is 0, wait for all child processes that
+ * have exited. We loop to make sure to reap all children that have exited to
+ * minimize the risk of running out of process slots. Since we don't process
+ * SIGCHLD, we do not immediately reap exited children. So when we get here,
+ * we want to reap any that have piled up.
+ *
+ * Note: on platforms that do not support waitpid with WNOHANG, when called with
+ * a zero argument, this function will hang until all children have exited.
+ *
+ * AJS, 2013-07-07: I do not see why we need to ignore signals during this
+ * function. This function just waits and updates the pid and status fields.
+ * I don't see why that should interfere with any signal handlers. But I am
+ * reluctant to remove this protection. So I changed to use sigprocmask to
+ * block signals instead to avoid interfering with installed signal handlers.
+ */
static int
wait_any(int interesting) /* pid of interest, if any */
{
- RETSIGTYPE (*hstat)(int), (*istat)(int), (*qstat)(int);
int pid;
int status = 0;
struct redirect *redp;
+#ifdef HAVE_SIGPROCMASK
+ sigset_t set, oldset;
+
+ /* I have no idea why we are blocking signals during this function... */
+ sigemptyset(& set);
+ sigaddset(& set, SIGINT);
+ sigaddset(& set, SIGHUP);
+ sigaddset(& set, SIGQUIT);
+ sigprocmask(SIG_BLOCK, & set, & oldset);
+#else
+ RETSIGTYPE (*hstat)(int), (*istat)(int), (*qstat)(int);
istat = signal(SIGINT, SIG_IGN);
+#endif
#ifdef __MINGW32__
if (interesting < 0) {
status = -1;
@@ -2194,11 +2306,22 @@ wait_any(int interesting) /* pid of interest, if any */
break;
}
}
-#else
+#else /* ! __MINGW32__ */
+#ifndef HAVE_SIGPROCMASK
hstat = signal(SIGHUP, SIG_IGN);
qstat = signal(SIGQUIT, SIG_IGN);
+#endif
for (;;) {
-# ifdef HAVE_SYS_WAIT_H /* POSIX compatible sys/wait.h */
+# if defined(HAVE_WAITPID) && defined(WNOHANG)
+ /*
+ * N.B. If the caller wants status for a specific child process
+ * (i.e. interesting is non-zero), then we must hang until we
+ * get exit status for that child.
+ */
+ if ((pid = waitpid(-1, & status, (interesting ? 0 : WNOHANG))) == 0)
+ /* No children have exited */
+ break;
+# elif defined(HAVE_SYS_WAIT_H) /* POSIX compatible sys/wait.h */
pid = wait(& status);
# else
pid = wait((union wait *) & status);
@@ -2216,10 +2339,16 @@ wait_any(int interesting) /* pid of interest, if any */
if (pid == -1 && errno == ECHILD)
break;
}
+#ifndef HAVE_SIGPROCMASK
signal(SIGHUP, hstat);
signal(SIGQUIT, qstat);
#endif
+#endif /* ! __MINGW32__ */
+#ifndef HAVE_SIGPROCMASK
signal(SIGINT, istat);
+#else
+ sigprocmask(SIG_SETMASK, & oldset, NULL);
+#endif
return status;
}
@@ -2421,7 +2550,7 @@ do_getline_redir(int into_variable, enum redirval redirtype)
assert(redirtype != redirect_none);
redir_exp = TOP();
- rp = redirect(redir_exp, redirtype, & redir_error);
+ rp = redirect(redir_exp, redirtype, & redir_error, false);
DEREF(redir_exp);
decr_sp();
if (rp == NULL) {
@@ -2440,7 +2569,7 @@ do_getline_redir(int into_variable, enum redirval redirtype)
if (errcode != 0) {
if (! do_traditional && (errcode != -1))
update_ERRNO_int(errcode);
- return make_number((AWKNUM) -1.0);
+ return make_number((AWKNUM) cnt);
}
if (cnt == EOF) {
@@ -2490,7 +2619,7 @@ do_getline(int into_variable, IOBUF *iop)
update_ERRNO_int(errcode);
if (into_variable)
(void) POP_ADDRESS();
- return make_number((AWKNUM) -1.0);
+ return make_number((AWKNUM) cnt);
}
if (cnt == EOF)
@@ -3383,10 +3512,45 @@ find_longest_terminator:
return REC_OK;
}
+/* retryable --- return true if PROCINFO[<filename>, "RETRY"] exists */
+
+static inline int
+retryable(IOBUF *iop)
+{
+ return PROCINFO_node && in_PROCINFO(iop->public.name, "RETRY", NULL);
+}
+
+/* errno_io_retry --- Does the I/O error indicate that the operation should be retried later? */
+
+static inline int
+errno_io_retry(void)
+{
+ switch (errno) {
+#ifdef EAGAIN
+ case EAGAIN:
+#endif
+#ifdef EWOULDBLOCK
+#if !defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)
+ case EWOULDBLOCK:
+#endif
+#endif
+#ifdef EINTR
+ case EINTR:
+#endif
+#ifdef ETIMEDOUT
+ case ETIMEDOUT:
+#endif
+ return 1;
+ default:
+ return 0;
+ }
+}
+
/*
* get_a_record --- read a record from IOP into out,
* return length of EOF, set RT.
* Note that errcode is never NULL, and the caller initializes *errcode to 0.
+ * If I/O would block, return -2.
*/
static int
@@ -3430,8 +3594,10 @@ get_a_record(char **out, /* pointer to pointer to data */
iop->flag |= IOP_AT_EOF;
return EOF;
} else if (iop->count == -1) {
- iop->flag |= IOP_AT_EOF;
*errcode = errno;
+ if (errno_io_retry() && retryable(iop))
+ return -2;
+ iop->flag |= IOP_AT_EOF;
return EOF;
} else {
iop->dataend = iop->buf + iop->count;
@@ -3505,6 +3671,8 @@ get_a_record(char **out, /* pointer to pointer to data */
iop->count = iop->public.read_func(iop->public.fd, iop->dataend, amt_to_read);
if (iop->count == -1) {
*errcode = errno;
+ if (errno_io_retry() && retryable(iop))
+ return -2;
iop->flag |= IOP_AT_EOF;
break;
} else if (iop->count == 0) {
@@ -3656,8 +3824,10 @@ pty_vs_pipe(const char *command)
#ifdef HAVE_TERMIOS_H
NODE *val;
- if (PROCINFO_node == NULL)
- return false;
+ /*
+ * N.B. No need to check for NULL PROCINFO_node, since the
+ * in_PROCINFO function now checks that for us.
+ */
val = in_PROCINFO(command, "pty", NULL);
if (val) {
if ((val->flags & MAYBE_NUM) != 0)
@@ -3799,12 +3969,21 @@ in_PROCINFO(const char *pidx1, const char *pidx2, NODE **full_idx)
NODE *r, *sub = NULL;
NODE *subsep = SUBSEP_node->var_value;
+ if (PROCINFO_node == NULL || (pidx1 == NULL && pidx2 == NULL))
+ return NULL;
+
/* full_idx is in+out parameter */
if (full_idx)
sub = *full_idx;
- str_len = strlen(pidx1) + subsep->stlen + strlen(pidx2);
+ if (pidx1 != NULL && pidx2 == NULL)
+ str_len = strlen(pidx1);
+ else if (pidx1 == NULL && pidx2 != NULL)
+ str_len = strlen(pidx2);
+ else
+ str_len = strlen(pidx1) + subsep->stlen + strlen(pidx2);
+
if (sub == NULL) {
emalloc(str, char *, str_len + 1, "in_PROCINFO");
sub = make_str_node(str, str_len, ALREADY_MALLOCED);
@@ -3818,8 +3997,14 @@ in_PROCINFO(const char *pidx1, const char *pidx2, NODE **full_idx)
sub->stlen = str_len;
}
- sprintf(sub->stptr, "%s%.*s%s", pidx1, (int)subsep->stlen,
- subsep->stptr, pidx2);
+ if (pidx1 != NULL && pidx2 == NULL)
+ strcpy(sub->stptr, pidx1);
+ else if (pidx1 == NULL && pidx2 != NULL)
+ strcpy(sub->stptr, pidx2);
+ else
+ sprintf(sub->stptr, "%s%.*s%s", pidx1, (int)subsep->stlen,
+ subsep->stptr, pidx2);
+
r = in_array(PROCINFO_node, sub);
if (! full_idx)
unref(sub);
diff --git a/m4/ChangeLog b/m4/ChangeLog
index 9ef76c4f..41febbdd 100644
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-24 gettextize <bug-gnu-gettext@gnu.org>
+
+ * iconv.m4: Upgrade to gettext-0.19.4.
+ * po.m4: Upgrade to gettext-0.19.4.
+
2014-11-19 gettextize <bug-gnu-gettext@gnu.org>
* gettext.m4: Upgrade to gettext-0.19.3.
diff --git a/m4/iconv.m4 b/m4/iconv.m4
index 4b29c5f2..4e373631 100644
--- a/m4/iconv.m4
+++ b/m4/iconv.m4
@@ -1,4 +1,4 @@
-# iconv.m4 serial 18 (gettext-0.18.2)
+# iconv.m4 serial 19 (gettext-0.18.2)
dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -72,27 +72,33 @@ AC_DEFUN([AM_ICONV_LINK],
if test $am_cv_lib_iconv = yes; then
LIBS="$LIBS $LIBICONV"
fi
- AC_RUN_IFELSE(
- [AC_LANG_SOURCE([[
+ am_cv_func_iconv_works=no
+ for ac_iconv_const in '' 'const'; do
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
#include <iconv.h>
#include <string.h>
-int main ()
-{
- int result = 0;
+
+#ifndef ICONV_CONST
+# define ICONV_CONST $ac_iconv_const
+#endif
+ ]],
+ [[int result = 0;
/* Test against AIX 5.1 bug: Failures are not distinguishable from successful
returns. */
{
iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
if (cd_utf8_to_88591 != (iconv_t)(-1))
{
- static const char input[] = "\342\202\254"; /* EURO SIGN */
+ static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
char buf[10];
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_utf8_to_88591,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res == 0)
result |= 1;
@@ -105,14 +111,14 @@ int main ()
iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
if (cd_ascii_to_88591 != (iconv_t)(-1))
{
- static const char input[] = "\263";
+ static ICONV_CONST char input[] = "\263";
char buf[10];
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_ascii_to_88591,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res == 0)
result |= 2;
@@ -124,14 +130,14 @@ int main ()
iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
if (cd_88591_to_utf8 != (iconv_t)(-1))
{
- static const char input[] = "\304";
+ static ICONV_CONST char input[] = "\304";
static char buf[2] = { (char)0xDE, (char)0xAD };
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = 1;
char *outptr = buf;
size_t outbytesleft = 1;
size_t res = iconv (cd_88591_to_utf8,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
result |= 4;
@@ -144,14 +150,14 @@ int main ()
iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
if (cd_88591_to_utf8 != (iconv_t)(-1))
{
- static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
char buf[50];
- const char *inptr = input;
+ ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_88591_to_utf8,
- (char **) &inptr, &inbytesleft,
+ &inptr, &inbytesleft,
&outptr, &outbytesleft);
if ((int)res > 0)
result |= 8;
@@ -171,17 +177,14 @@ int main ()
&& iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
result |= 16;
return result;
-}]])],
- [am_cv_func_iconv_works=yes],
- [am_cv_func_iconv_works=no],
- [
-changequote(,)dnl
- case "$host_os" in
- aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
- *) am_cv_func_iconv_works="guessing yes" ;;
- esac
-changequote([,])dnl
- ])
+]])],
+ [am_cv_func_iconv_works=yes], ,
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ test "$am_cv_func_iconv_works" = no || break
+ done
LIBS="$am_save_LIBS"
])
case "$am_cv_func_iconv_works" in
diff --git a/m4/po.m4 b/m4/po.m4
index 84659ea5..43012dca 100644
--- a/m4/po.m4
+++ b/m4/po.m4
@@ -1,4 +1,4 @@
-# po.m4 serial 22 (gettext-0.19)
+# po.m4 serial 24 (gettext-0.19)
dnl Copyright (C) 1995-2014 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
diff --git a/main.c b/main.c
index 93f94998..833aa162 100644
--- a/main.c
+++ b/main.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc.
+ * Copyright (C) 1986, 1988, 1989, 1991-2015 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Programming Language.
@@ -24,7 +24,7 @@
*/
/* FIX THIS BEFORE EVERY RELEASE: */
-#define UPDATE_YEAR 2014
+#define UPDATE_YEAR 2015
#include "awk.h"
#include "getopt.h"
@@ -794,10 +794,10 @@ init_vars()
(*(vp->assign))();
}
- /* Set up deferred variables (loaded only when accessed). */
+ /* Load PROCINFO and ENVIRON */
if (! do_traditional)
- register_deferred_variable("PROCINFO", load_procinfo);
- register_deferred_variable("ENVIRON", load_environ);
+ load_procinfo();
+ load_environ();
}
/* path_environ --- put path variable into environment if not already there */
diff --git a/missing b/missing
index cdea5149..f62bbae3 100755
--- a/missing
+++ b/missing
@@ -1,9 +1,9 @@
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
-scriptversion=2012-06-26.16; # UTC
+scriptversion=2013-10-28.13; # UTC
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -160,7 +160,7 @@ give_advice ()
;;
autom4te*)
echo "You might have modified some maintainer files that require"
- echo "the 'automa4te' program to be rebuilt."
+ echo "the 'autom4te' program to be rebuilt."
program_details 'autom4te'
;;
bison*|yacc*)
diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog
index 70fbde64..89dbdb4d 100644
--- a/missing_d/ChangeLog
+++ b/missing_d/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * getaddrinfo.h (gai_strerror): Add declaration.
+ * getaddrinfo.c (gai_strerror): New function.
+ (getaddrinfo): Return errno values instead of just -1.
+
2014-04-08 Arnold D. Robbins <arnold@skeeve.com>
* 4.1.1: Release tar ball made.
diff --git a/missing_d/getaddrinfo.c b/missing_d/getaddrinfo.c
index 677f27d0..f24ac598 100644
--- a/missing_d/getaddrinfo.c
+++ b/missing_d/getaddrinfo.c
@@ -12,6 +12,8 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
+#include <errno.h>
+#include <string.h> /* strerror */
#include "getaddrinfo.h"
@@ -29,12 +31,12 @@ getaddrinfo(const char *hostname, const char *portname,
{
struct addrinfo *out;
if (res == NULL)
- return -1;
+ return EINVAL;
out = (struct addrinfo *) malloc(sizeof(*out));
if (out == NULL) {
*res = NULL;
- return -1;
+ return ENOMEM;
}
memset(out, '\0', sizeof(*out));
@@ -42,7 +44,7 @@ getaddrinfo(const char *hostname, const char *portname,
if (out->ai_addr == NULL) {
free(out);
*res = NULL;
- return -1;
+ return ENOMEM;
}
out->ai_socktype = SOCK_STREAM;
@@ -78,7 +80,7 @@ getaddrinfo(const char *hostname, const char *portname,
= ((struct in_addr *)he->h_addr_list[0])->s_addr;
} else {
freeaddrinfo(out);
- return -1;
+ return EADDRNOTAVAIL;
}
} else {
if (!(out->ai_flags & AI_PASSIVE))
@@ -109,4 +111,10 @@ getaddrinfo(const char *hostname, const char *portname,
return 0;
}
+
+const char *
+gai_strerror(int errcode)
+{
+ return strerror(errcode);
+}
#endif
diff --git a/missing_d/getaddrinfo.h b/missing_d/getaddrinfo.h
index 3d816c93..873d67df 100644
--- a/missing_d/getaddrinfo.h
+++ b/missing_d/getaddrinfo.h
@@ -29,3 +29,5 @@ void freeaddrinfo(struct xaddrinfo * res);
int getaddrinfo(const char * hostname, const char * portname,
struct xaddrinfo * hints, struct xaddrinfo ** res);
+
+const char *gai_strerror(int errcode);
diff --git a/mpfr.c b/mpfr.c
index 571b334b..080ed7fa 100644
--- a/mpfr.c
+++ b/mpfr.c
@@ -1186,7 +1186,7 @@ do_mpfr_srand(int nargs)
return res;
}
-/* do_mpfr_div --- do integer division, return quotient and remainder in dest array */
+/* do_mpfr_intdiv --- do integer division, return quotient and remainder in dest array */
/*
* We define the semantics as:
@@ -1197,7 +1197,7 @@ do_mpfr_srand(int nargs)
*/
NODE *
-do_mpfr_div(int nargs)
+do_mpfr_intdiv(int nargs)
{
NODE *numerator, *denominator, *result;
NODE *num, *denom;
@@ -1206,7 +1206,7 @@ do_mpfr_div(int nargs)
result = POP_PARAM();
if (result->type != Node_var_array)
- fatal(_("div: third argument is not an array"));
+ fatal(_("intdiv: third argument is not an array"));
assoc_clear(result);
denominator = POP_SCALAR();
@@ -1214,9 +1214,9 @@ do_mpfr_div(int nargs)
if (do_lint) {
if ((numerator->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("div: received non-numeric first argument"));
+ lintwarn(_("intdiv: received non-numeric first argument"));
if ((denominator->flags & (NUMCUR|NUMBER)) == 0)
- lintwarn(_("div: received non-numeric second argument"));
+ lintwarn(_("intdiv: received non-numeric second argument"));
}
(void) force_number(numerator);
@@ -1250,7 +1250,7 @@ do_mpfr_div(int nargs)
}
if (mpz_sgn(denom->mpg_i) == 0)
- fatal(_("div: division by zero attempted"));
+ fatal(_("intdiv: division by zero attempted"));
quotient = mpg_integer();
remainder = mpg_integer();
diff --git a/po/ChangeLog b/po/ChangeLog
index 022e5326..3ef4175b 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -1,3 +1,7 @@
+2015-01-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * POTFILES.in: Brought up to date.
+
2014-11-19 gettextize <bug-gnu-gettext@gnu.org>
* Makefile.in.in: Upgrade to gettext-0.19.3.
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 63461e76..0781efc1 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -13,11 +13,17 @@ ext.c
extension/filefuncs.c
extension/fnmatch.c
extension/fork.c
+extension/gawkfts.c
extension/inplace.c
extension/ordchr.c
extension/readdir.c
extension/readfile.c
+extension/revoutput.c
+extension/revtwoway.c
extension/rwarray.c
+extension/rwarray0.c
+extension/stack.c
+extension/testext.c
extension/time.c
field.c
floatcomp.c
diff --git a/po/ca.gmo b/po/ca.gmo
index 465f05a5..290d2016 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 444f09c4..31742b9c 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-02-26 20:18+0100\n"
"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@@ -36,9 +36,9 @@ msgstr "s'ha intentat usar un paràmetre escalar `%s' com a una matriu"
msgid "attempt to use scalar `%s' as an array"
msgstr "s'ha intentat usar la dada escalar `%s' com a una matriu"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "s'ha intentat usar la matriu `%s' en un context escalar"
@@ -97,415 +97,420 @@ msgstr ""
"asorti: no es pot usar una submatriu com a segon argument per al primer "
"argument"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "`%s' no és vàlid com a nom de funció"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "la funció de comparació d'ordenació `%s' no està definida"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s blocs han de tenir una part d'acció"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "cada regla ha de tenir un patró o una part d'acció"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "l'antic awk no suporta múltiples regles `BEGIN' i `END'"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "`%s' és una funció interna, no pot ser redefinida"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
"la constant d'expressió regular `//' sembla un comentari en C++, però no ho "
"és"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
"la constant d'expressió regular `/%s/' sembla un comentari en C, però no ho "
"és"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "valors duplicats de casos al cos de l'expressió switch: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr ""
"s'ha detectat el cas predeterminat `default' duplicat a l'expressió switch "
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "no es permet `break' a fora d'un bucle o bifurcació"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "no es permet `continue' a fora d'un bucle"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "`next' usat a l'acció %s"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "`nextfile' usat a l'acció %s"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "`return' és usat fora del context d'una funció"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"el `print'» simple en la regla BEGIN o END probablement ha de ser `print "
"\"\"'"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "no es permet `delete' amb SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "no es permet `delete' a FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "`delete(array)' és una extensió tawk no portable"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "les canonades bidireccionals multi-etapes no funcionen"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "expressió regular a la dreta d'una assignació"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "expressió regular a l'esquerra de l'operador `~' o `!~'"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr ""
"l'antic awk no dóna suport a la paraula clau `in' excepte després de `for'"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "expressió regular a la dreta de la comparació"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "`getline var' no és vàlid a dins de la regla `%s'"
-
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
+#: awkgram.y:1411
+#, fuzzy, c-format
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr "`getline' no és vàlid a dins de la regla `%s'"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "`getline' no redirigit sense definir dintre de l'acció FINAL"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "l'antic awk no suporta matrius multidimensionals"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "la crida de `length' sense parèntesis no és portable"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "les crides a funcions indirectes són una extensió gawk"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"no es pot usar la variable especial `%s' per a una crida indirecta de funció"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "s'ha intentat usar la funció «%s» com a una matriu"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "expressió de subíndex no vàlida"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "advertiment: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fatal: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "nova línia inesperada o final d'una cadena de caràcters"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "no es pot obrir el fitxer font `%s' per a lectura (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "no es pot obrir la llibreria compartida `%s' per a lectura (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "motiu desconegut"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "no es pot incloure `%s' i usar-lo com un fitxer de programa"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "ja s'ha inclòs el fitxer font `%s'"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "ja s'ha carregat la biblioteca compartida `%s'"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include és una extensió de gawk"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "nom de fitxer buit després de @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load és una extensió de gawk"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "fitxer buit després de @load"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "el text del programa en la línia de comandaments està buit"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "no es pot llegir el fitxer font `%s' (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "el fitxer font `%s' està buit"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "el fitxer font no finalitza amb un retorn de carro"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "expressió regular sense finalitzar acaba amb `\\' al final del fitxer"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "%s: %d: el modificador regex tawk `/.../%c' no funciona a gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "el modificador regex tawk `/.../%c' no funciona a gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "expressió regular sense finalitzar"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "expressió regular sense finalitzar al final del fitxer"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "l'ús de `\\ #...' com a continuació de línia no és portable"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "la barra invertida no és l'últim caràcter en la línia"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX no permet l'operador `**='"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "l'antic awk no suporta l'operador `**='"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX no permet l'operador `**'"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "l'antic awk no suporta l'operador `**='"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "l'operador `^=' no està suportat en l'antic awk"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "l'operador `^' no està suportat en l'antic awk"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "cadena sense finalitzar"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "caràcter `%c' no vàlid en l'expressió"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "`%s' és una extensió de gawk"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX no permet «%s»"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "`%s' no està suportat en l'antic awk"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "`goto' es considera perjudicial!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d no és vàlid com a nombre d'arguments per a %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr "%s: la cadena literal com a últim argument de substitució no té efecte"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s el tercer paràmetre no és un objecte intercanviable"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: el tercer argument és una extensió de gawk"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: el segon argument és una extensió de gawk"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"l'ús de dcgettext(_\"...\") no és correcte: elimineu el guió baix inicial"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr "índex: no es permet una constant regexp com a segon argument"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "funció `%s': paràmetre `%s' ofusca la variable global"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "no es pot obrir `%s' per a escriptura (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "s'està enviant la llista de variables a l'eixida d'error estàndard"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: tancament erroni (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() s'ha cridat dues vegades!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "hi ha hagut variables a l'ombra"
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "nom de la funció `%s' definida prèviament"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "funció `%s»: no pot usar el nom de la funció com a paràmetre"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"funció `%s': no es pot usar la variable especial `%s' com a un paràmetre de "
"funció"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "funció `%s': paràmetre #%d, `%s', duplica al paràmetre #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "es crida a la funció `%s' però no s'ha definit"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "la funció `%s' està definida però no s'ha cridat mai directament"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr ""
"l'expressió regular constant per al paràmetre #%d condueix a un valor booleà"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -514,23 +519,23 @@ msgstr ""
"s'ha cridat a la funció `%s' amb espai entre el nom i el '(',\n"
"o s'ha usat com a variable o matriu"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "s'ha intentat una divisió per zero"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "s'ha intentat una divisió per zero en `%%'"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
"no es pot assignar un valor al resultat d'una expressió post-increment de "
"camp"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "destí no vàlid d'assignació (opcode %s)"
@@ -572,193 +577,203 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: `%s' no és un fitxer obert, canonada o co-procés"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "índex: el primer argument rebut no és una cadena"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "índex: el segon argument rebut no és una cadena"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: s'ha rebut un argument no numèric"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: s'ha rebut un argument de matriu"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "`length(array)' és una extensió de gawk"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: s'ha rebut un argument que no és una cadena"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: s'ha rebut un argument no numèric"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: s'ha rebut l'argument negatiu %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "fatal: s'ha d'usar `count$' a tots els format o a cap"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "l'amplada de camp s'ignorarà per a l'especificador `%%'"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "la precisió s'ignorarà per a l'especificador `%%'"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "l'amplada de camp i la precisió s'ignoraran per a l'especificador `%%'"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "fatal: no es permeten `$' en els formats awk"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fatal: el recompte d'arguments amb `$' ha de ser > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
"fatal: el recompte d'arguments %ld és major que el nombre total d'arguments "
"proporcionats"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "fatal: no es permet `$' després d'un punt en el format"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"fatal: no es proporciona `$' per a l'ample o precisió del camp de posició"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "`l' manca de significat en els formats awk; serà ignorat"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "fatal: `l' no està permès en els formats POSIX de awk"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "`L' manca de significat en els formats awk; serà ignorat"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "fatal: `L' no està permès en els formats POSIX de awk"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "`h' manca de significat en els formats awk; serà ignorat"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "fatal: `h' no està permès en els formats POSIX de awk"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: el valor %g està fora de rang per al format `%%%c'"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: el valor %g està fora de rang per al format `%%%c'"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: el valor %g està fora de rang per al format `%%%c'"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"s'ignorarà el caràcter especificador de format `%c': no s'ha convertit cap "
"argument"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "fatal: no hi ha prou arguments per a satisfer el format d'una cadena"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ desbordament per a aquest"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: l'especificador de format no conté lletra de control"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "s'han proporcionat masses arguments per a la cadena de format"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: sense arguments"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: sense arguments"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: s'ha rebut un argument no numèric"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: cridat amb l'argument negatiu %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: la longitud %g no és >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: la longitud %g no és >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: la longitud sobre un nombre no enter %g serà truncada"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
"substr: la llargada %g és massa gran per a la indexació de cadenes de "
"caràcters, es truncarà a %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: l'índex d'inici %g no és vàlid, usant 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: l'índex d'inici no enter %g serà truncat"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: la cadena font és de longitud zero"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: l'índex d'inici %g sobrepassa l'acabament de la cadena"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -766,189 +781,195 @@ msgstr ""
"substr: la longitud %g a l'índex d'inici %g excedeix la longitud del primer "
"argument (%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr "strftime: el valor de format a PROCINFO[\"strftime\"] té tipus numèric"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: s'ha rebut un segon argument no numèric"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr ""
"strftime: el segon argument és més petit que 0 o massa gran per a time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: el primer argument rebut no és una cadena"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: s'ha rebut una cadena de format buida"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: s'ha rebut un argument que no és una cadena"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: almenys un dels valors està forra del rang predeterminat"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "la funció 'system' no es permet fora del mode entorn de proves"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: s'ha rebut un argument que no és una cadena"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "referència a una variable sense inicialitzar `$%d'"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: s'ha rebut un argument que no és una cadena"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: s'ha rebut un argument que no és una cadena"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: el primer argument rebut no és numèric"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: el segon argument rebut no és numèric"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: s'ha rebut un argument que no és numèric"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: s'ha rebut un argument que no és numèric"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: s'ha rebut un argument que no és numèric"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: el tercer argument no és una matriu"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: el tercer argument de 0 és tractat com a 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: el tercer argument de 0 és tractat com a 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: el primer argument rebut no és numèric"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: el segon argument rebut no és numèric"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): els valors negatius donaran resultats estranys"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): els valors fraccionaris sernn truncats"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr ""
"lshift(%f, %f): un valor de desplaçament massa gran donarà resultats estranys"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: el primer argument rebut no és numèric"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: el segon argument rebut no és numèric"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): els valors negatius donaran resultats estranys"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): els valors fraccionaris seran truncats"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
"rshift(%f, %f): un valor de desplaçament massa gran donarà resultats estranys"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: cridat amb menys de dos arguments"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "exp: l'argument %d no és numèric"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and: l'argument %d amb valor negatiu %g donarà resultats estranys"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: cridat amb menys de dos arguments"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: l'argument %d no és numèric"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "or: l'argument %d amb valor negatiu %g donarà resultats estranys"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xort: cridat amb menys de dos arguments"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: l'argument %d no és numèric"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: l'argument %d del valor negatiu %g donarà resultats estranys"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: s'ha rebut un argument que no és numèric"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): el valor negatiu donarà resultats estranys"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): el valor fraccionari serà truncat"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: `%s' no és una categoria local vàlida"
@@ -1272,40 +1293,49 @@ msgstr "up [N] - mou-te N marcs cap a dalt de la pila."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch var - estableix un punt d'inspecció per a una variable."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - imprimeix la traça de tot els N marcs interiors (exteriors "
+"si N < 0)."
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "error: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "no es pot llegir l'ordre (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "no es pot llegir l'ordre (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "caràcter no vàlida en la instucció"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "ordre desconeguda - \"%.*s\", prova l'ajuda"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "caràcter no vàlid"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "ordre no definida: %s\n"
@@ -1846,68 +1876,70 @@ msgstr "`%s' no està permès al context actual; s'ignorarà la declaració"
msgid "`return' not allowed in current context; statement ignored"
msgstr "`return' no està permès al context actual; s'ignorarà la declaració"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "No hi ha un símbol `%s' al context actual"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "[ sense aparellar"
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "classe no vàlida de caràcters"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "la sintaxi de la classe de caràcters és [[:espai:]], no [:espai:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "seqüència d'escapada \\ sense finalitzar"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Contingut no vàlid de \\{\\}"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "L'expressió regular és massa gran"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "( sense aparellar"
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "no s'ha especificat una sintaxi"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ") sense aparellar"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "tipus de node %d desconegut"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "opcode %d desconegut"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "l'opcode %s no és un operador o una paraula clau"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "desbordament del cau temporal en genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1918,217 +1950,217 @@ msgstr ""
"\t# Pila de crida a les funcions:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "`IGNORECASE' és una extensió de gawk"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "`BINMODE' és una extensió de gawk"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "El valor BINMODE `%s' no és vàlid, es tractarà com 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "`%sFMT' especificació errònia `%s'"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "desactivant `--lint' degut a una assignació a `LINT'"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "referència a un argument sense inicialitzar `%s'"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "referència a una variable sense inicialitzar `%s'"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "s'ha intentat una referència de camp a partir d'un valor no numèric"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "s'ha intentat entrar una referència a partir d'una cadena nul·la"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "s'ha intentat accedir al camp %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "referència a una variable sense inicialitzar `$%ld'"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "s'ha cridat a la funció `%s' amb més arguments dels declarats"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: tipus no esperat `%s'"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "s'ha intentat una divisió per zero en `/='"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "s'ha intentat una divisió per zero en `%%='"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "les extensions no estan permeses en mode de proves"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load són extensions gawk"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: s'ha rebut lib_name nul"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: no es pot obrir la llibreria `%s' (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: biblioteca `%s': no defineix `plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: biblioteca `%s': no es pot cridar a la funció `%s' (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
"load_ext: la biblioteca `%s' amb rutina d'inicialització `%s' ha fallat\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "`extension' és una extensió gawk"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "extension: s'ha rebut lib_name nul"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: no es pot obrir la biblioteca `%s' (%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"extension: biblioteca `%s': no defineix `plugin_is_GPL_compatible' (%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "extension: biblioteca `%s': no es pot cridar a la funció `%s' (%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: nom absent de funció"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: no es pot redefinir la funció `%s'"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: la funció `%s' ja està definida"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: nom de la funció `%s' definida prèviament"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr "make_builtin: no es pot usar el nom intern `%s' com a nom de funció"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: recompte negatiu d'arguments per a la funció `%s'"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: nom absent de funció"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: caràcter `%c' il·legal al nom de funció `%s'"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: no es pot redefinir la funció `%s'"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: la funció `%s' ja està definida"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: nom de la funció `%s' definida prèviament"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr "extension: no es pot usar el nom intern `%s' com a nom de funció"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "la funció `%s' està definida per agafar no més de %d argument(s)"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "funció `%s': falta l'argument #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr ""
"funció `%s': argument #%d: s'ha intentat usar una dada escalar com a una "
"matriu"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr ""
"funció `%s': argument #%d: s'ha intentat usar una matriu com a un escalar"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "no està suportada la càrrega dinàmica de la biblioteca"
@@ -2272,7 +2304,7 @@ msgstr "wait: s'ha cridat amb massa arguments"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: l'edició in situ ja està activa"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin: s'esperaven 2 arguments però s'ha cridat amb %d"
@@ -2305,57 +2337,57 @@ msgstr "inplace_begin: `%s' no és un fitxer regular"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: mkstemp(`%s') ha fallat (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin: ha fallat chmod (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: dup(stdout) ha fallat(%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: dup2(%d, stdout) ha fallat (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace begin: close(%d) ha fallat (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
"inplace_end: no es pot obtenir el primer argument com un nom de fitxer "
"cadena de caràcters"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: no està activa l'edició in situ"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: dup2(%d, stdout) ha fallat (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: close(%d) ha fallat (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: fsetpos(stdout) ha fallat (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: link(`%s', `%s') ha fallat (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: rename(`%s', `%s') ha fallat (%s)"
@@ -2397,50 +2429,54 @@ msgstr "readfile: s'ha cridat amb massa arguments"
msgid "readfile: called with no arguments"
msgstr "readfile: s'ha cridat amb cap argument"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: s'ha cridat amb massa arguments"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: l'argument 0 no és una cadena de caràcters\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: l'argument 1 no és una matriu\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: no s'ha pogut aplanar la matriu\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: no s'ha pogut alliberar la matriu aplanada\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: s'ha cridat amb massa arguments"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: l'argument 0 no és una cadena de caràcters\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: l'argument 1 no és una matriu\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array ha fallat\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element ha fallat\n"
@@ -2469,86 +2505,86 @@ msgstr "sleep: l'argument és negatiu"
msgid "sleep: not supported on this platform"
msgstr "sleep: no està suportat en aquesta plataforma"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF s'inicialitza sobre un valor negatiu"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: el quart argument és una extensió gawk"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: el quart argument no és una matriu"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: el segon argument no és una matriu"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: no es pot usar una submatriu de segon argument per a quart argument"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: no es pot usar una submatriu de segon argument per a quart argument"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: no est pot usar una submatriu de quart argument per a segon argument"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: la cadena nul·la per al tercer argument és una extensió de gawk"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: el quart argument no és una matriu"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: el tercer argument no és una matriu"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: el segon argument no és una matriu"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: no es pot usar la mateixa matriu per a segon i quart argument"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: no es pot usar una submatriu de segon argument per a quart argument"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: no es pot usar una submatriu de quart argument per a segon argument"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "`FIELDWIDTHS' és una extensió de gawk"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "valor FIELDWIDTHS no vàlid, a prop de `%s'"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "la cadena nul·la per a `FS' és una extensió de gawk"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "l'antic awk no suporta expressions regulars com a valor de `FS'"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "`FPAT' és una extensió gawk"
@@ -2564,20 +2600,20 @@ msgstr "node_to_awk_value: s'ha rebut un node nul"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: s'ha rebut un valor nul"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: s'ha rebut una matriu nul·la"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: s'ha rebut un subíndex nul"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: no s'ha pogut convertir l'índex %d\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: no s'ha pogut convertir el valor %d\n"
@@ -2637,299 +2673,281 @@ msgstr "%s: l'opció `-W %s' no admet cap argument\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: l'opció `-W %s' requereix un argument\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "l'argument `%s' de línia d'ordres és un directori: s'ignorarà"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "no es pot obrir el fitxer `%s' per a lectura (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "la finalització del descriptor fd %d (`%s') ha fallat (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "no est permeten redireccions en mode de proves"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "l'expressió en la redirecció `%s' solt té un valor numèric"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "l'expressió per a la redirecció `%s' té un valor de cadena nul·la"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"el fitxer `%s' per a la redirecció `%s' pot ser resultat d'una expressió "
"lògica"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "mescla innecessària de `>' i `>>' per al fitxer `%.*s'"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "no es pot obrir la canonada `%s' per a l'eixida (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "no es pot obrir la canonada `%s' per a l'entrada (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
"no es pot obrir una canonada bidireccional `%s' per a les entrades/eixides "
"(%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "no es pot redirigir des de `%s' (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "no es pot redirigir cap a `%s' (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"s'ha arribat al límit del sistema per a fitxers oberts: es començarà a "
"multiplexar els descriptors de fitxer"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "la finalització de `%s' ha fallat (%s)"
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "masses canonades o fitxers d'entrada oberts"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: el segon argument hauria de ser `to' o `from'"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: `%.*s' no és un fitxer obert, canonada o co-procés"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "finalització d'una redirecció que no s'ha obert"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: la redirecció `%s' no s'obre amb `|&', s'ignora el segon argument"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "estat de fallada (%d) en la finalització de la canonada `%s' (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "estat de falla (%d) en la finalització del fitxer `%s' (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "no s'aporta la finalització explícita del socket `%s'"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "no s'aporta la finalització explícita del co-procés `%s'"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "no s'aporta la finalització explícita de la canonada `%s'"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "no s'aporta la finalització explícita del fitxer `%s'"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "error en escriure a la sortida estàndard (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "error en escriure a la sortida d'error estàndard (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "la neteja de la canonada de `%sx' ha fallat (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "la neteja de la canonada per al co-procés de `%sx' ha fallat (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "la neteja del fitxer `%s' ha fallat (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "port local %s no vàlid a `/inet'"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "amfitrió remot i informació de port (%s, %s) no vàlids"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "no s'aporta cap protocol (conegut) en el nom del fitxer especial `%s'"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "el nom del fitxer especial `%s' està incomplet"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "s'ha de subministrar un nom de sistema remot a `/inet'"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "s'ha de subministrar un port remot a `/inet'"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "les comunicacions TCP/IP no estan suportades"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "no es pot obrir `%s', mode `%s'"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "ha fallat el tancament del pty mestre (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr ""
"ha fallat la finalització de la sortida estàndard en els processos fills (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"ha fallat el trasllat del pty esclau cap a l'eixida estàndard dels processos "
"fills (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr ""
"ha fallat la finalització de l'entrada estàndard en els processos fills (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"ha fallat el trasllat del pty esclau cap a l'entrada estàndard dels "
"processos fills (dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "ha fallat el tancament del pty esclau (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"ha fallat la redirecció cap a l'eixida estàndard dels processos fills (dup: "
"%s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"ha fallat la redirecció cap a l'entrada estàndard dels processos fills (dup: "
"%s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "ha fallat la restauració de l'eixida estàndard en el procés pare\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "ha fallat la restauració de l'entrada estàndard en el procés pare\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "ha fallat la finalització de la canonada (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "`|&' no està suportat"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "no es pot obrir la canonada `%s' (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "no es pot crear el procés fill per a `%s' (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: s'ha rebut un punter nul"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"l'analitzador d'entrades `%s' està en conflicte amb analitzador d'entrades `"
"%s' instal·lat prèviament"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "l'analitzador d'entrada `%s' no ha pogut obrir `%s'"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: s'ha rebut un punter nul"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
@@ -2937,16 +2955,16 @@ msgstr ""
"l'embolcall de sortida `%s' està en conflicte amb l'embolcall de sortida `"
"%s' instal·lat prèviament"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "l'embolcall de sortida `%s' no ha pogut obrir `%s'"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: s'ha rebut un punter nul"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2955,210 +2973,197 @@ msgstr ""
"el processsador de dues vies `%s' està en conflicte amb el processador de "
"dues vies `%s' instal·lat prèviament"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "el processador de dues vies `%s' no ha pogut obrir `%s'"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "el fitxer de dades `%s' està buit"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "no s'ha pogut assignar més memòria d'entrada"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "el valor multicaràcter de `RS' és una extensió de gawk"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "la comunicació IPv6 no està suportada"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "s'ignonarà l'argument buit de `-e/--source'"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: no es reconeix l'opció `-W %s', serà ignorada\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: l'opció requereix un argument -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"la variable d'entorn `POSIXLY_CORRECT' està establerta: usant `--posix'"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "`--posix' solapa a `--traditional'"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "`--posix' i `--traditional' solapen a `--non-decimal-data'"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "executar %s com a setuid root pot ser un problema de seguretat"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "`--posix' anul·la a `--characters-as-bytes'"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "no es pot establir el mode binari en l'entrada estàndard (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "no es pot establir el mode en l'eixida estàndard (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "no es pot establir el mode en l'eixida d'error estàndard (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "no hi ha cap text per al programa!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr "Ús: %s [opcions d'estil POSIX o GNU] -f fitx_prog [--] fitxer ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr "Ús: %s [opcions d'estil POSIX o GNU] [--] %cprograma%c fitxer ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "Opcions POSIX:\t\tOpcions llargues GNU: (estàndard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f fitx_prog\t\t--file=fitx_prog\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs (fs=sep_camp)\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=valor\t\t--assign=var=valor\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Opcions curtes:\t\tOpcions llargues GNU: (extensions)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[file]\t\t--dump-variables[=file]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[file]\t\t--debug[=file]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'program-text'\t--source='program-text'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E file\t\t\t--exec=file\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i includefile\t\t--include=fitxer a incloure\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l library\t\t--load=biblioteca\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[file]\t\t--pretty-print[=file]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[file]\t\t--profile[=file]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3167,7 +3172,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3179,7 +3184,7 @@ msgstr ""
"és la secció `Informant sobre problemes i errors' a la versió impresa.\n"
"Informeu dels errors de traducció a <ca@li.org>\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3189,7 +3194,7 @@ msgstr ""
"De forma predeterminada llegeix l'entrada estàndard i escriu a la sortida "
"estàndar.\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3199,7 +3204,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' fitxer\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3218,7 +3223,7 @@ msgstr ""
"Llicència, o (a la vostra elecció) qualsevol versió posterior.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3232,7 +3237,7 @@ msgstr ""
"Per a més detalls consulteu la Llicència Pública General de GNU.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3240,16 +3245,16 @@ msgstr ""
"Junt amb aquest programa hauríeu d'haver rebut una còpia de la Llicència\n"
"Pública General de GNU; si no és així, vegeu http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft no permet inicialitzar FS a un tabulador en la versió POSIX de awk"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "valor desconegut per a l'especificació de camp: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3258,99 +3263,117 @@ msgstr ""
"%s: `%s' l'argument per a `-v' no està en forma `var=valor'\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "`%s' no és nom legal de variable"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "`%s' no és un valor de variable, s'esperava fitxer `%s=%s'"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr ""
"no es pot usar el nom de la funció integrada `%s' com a nom de variable"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "no es pot usar el nom de la funció interna `%s' com nom de variable"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "excepció de coma flotant"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "error fatal: error intern"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "error fatal: error intern: segfault"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "error fatal: error intern: sobreeiximent de pila"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "no s'ha pre-obert el descriptor fd per a %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "no es pot pre-obrir /dev/null per al descriptor fd %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "s'ignonarà l'argument buit de `-e/--source'"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: no es reconeix l'opció `-W %s', serà ignorada\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'opció requereix un argument -- %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "Valor PREC `%.*s' no és vàlid"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "Valor RNDMODE `%.*s' no és vàlid"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: s'ha rebut un argument que no és numèric"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): el valor negatiu donarà resultats estranys"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): el valor fraccionari serà truncat"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "cmpl(%Zd): els valors negatius donaran resultats estranys"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: s'ha rebut un argument no numèric #%d"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: l'argument #%d té valor no vàlid %Rg, s'usarà 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: l'argument #%d amb valor negatiu %Rg donarà resultats estranys"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: l'argument #%d amb valor fraccional %Rg serà truncat"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%s: l'argument #%d amb valor negatiu %Zd donarà resultats estranys"
@@ -3360,24 +3383,24 @@ msgstr "%s: l'argument #%d amb valor negatiu %Zd donarà resultats estranys"
msgid "cmd. line:"
msgstr "línia cmd.:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "barra invertida al final de la cadena"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "l'antic awk no dóna suport a la seqüencia d'escapada `\\%c'"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX no permet seqüències d'escapada `\\x'"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "no hi ha dígits hexadecimals en la seqüència d'escapada `\\x'"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3386,12 +3409,12 @@ msgstr ""
"probablement no s'han interpretat els caràcters hex escape \\x%.*s of %d de "
"la manera que esperàveu"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "la seqüència d'escapada `\\%c' és tractada com a una simple `%c'"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3420,12 +3443,12 @@ msgid "sending profile to standard error"
msgstr "enviant el perfil a l'eixida d'error estàndard"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s bloc(s)\n"
+"\t# Regla(es)\n"
"\n"
#: profile.c:198
@@ -3442,11 +3465,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "error intern: %s amb vname nul"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "error intern: funció integrada amb fname nul"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3455,12 +3478,12 @@ msgstr ""
"\t# Extensions carregades (-l i/o @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# perfil gawk, creat %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3469,7 +3492,7 @@ msgstr ""
"\n"
"\t# Funcions, llistades alfabèticament\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: tipus desconegut de redireccionament %d"
@@ -3479,74 +3502,111 @@ msgstr "redir2str: tipus desconegut de redireccionament %d"
msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr "el component regexp `%.*s' probablement hauria de ser `[%.*s]'"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Èxit"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "No hi ha concordança"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Expressió regular no vàlida"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Caràcter de comparació no vàlid"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Nom de classe de caràcters no vàlid"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Barra invertida extra al final"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Referència cap endarrere no vàlida"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "[ o [^ desemparellats"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "( o \\( desemparellats"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "\\{ desemparellat"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Contingut no vàlid de \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Final de rang no vàlid"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Memòria exhaurida"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Expressió regular precedent no vàlida"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Fí prematura de l'expressió regular"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "L'expressió regular és massa gran"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ") o \\) desemparellats"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "No hi ha una expressió regular prèvia"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "funció `%s»: no pot usar el nom de la funció com a paràmetre"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "no es pot mostrar el context principal"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "`getline var' no és vàlid a dins de la regla `%s'"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr ""
+#~ "no s'aporta cap protocol (conegut) en el nom del fitxer especial `%s'"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "el nom del fitxer especial `%s' està incomplet"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "s'ha de subministrar un nom de sistema remot a `/inet'"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "s'ha de subministrar un port remot a `/inet'"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s bloc(s)\n"
+#~ "\n"
+
#~ msgid "reference to uninitialized element `%s[\"%s\"]'"
#~ msgstr "referència a un element sense valor inicial `%s[\"%s\"]'"
@@ -3633,9 +3693,6 @@ msgstr "no es pot mostrar el context principal"
#~ msgid "illegal type (%s) in tree_eval"
#~ msgstr "tipus il·legal (%s) en tree_eval"
-#~ msgid "attempt to use function `%s' as array"
-#~ msgstr "s'ha intentat usar la funció «%s» com a una matriu"
-
#~ msgid "`%s' is a function, assignment is not allowed"
#~ msgstr "«%s» és una funció, l'assignació no és permesa"
diff --git a/po/da.gmo b/po/da.gmo
index 0ba7ffc0..83958f48 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index f3840840..8dfedbea 100644
--- a/po/da.po
+++ b/po/da.po
@@ -9,8 +9,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.0.0h\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2012-02-06 10:37+0100\n"
"Last-Translator: Keld Simonsen <keld@keldix.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -40,9 +40,9 @@ msgstr "forsøg på at bruge skalarparameteren '%s' som et array"
msgid "attempt to use scalar `%s' as an array"
msgstr "forsøg på at bruge skalar '%s' som et array"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "forsøg på at bruge array '%s' i skalarsammenhæng"
@@ -98,415 +98,420 @@ msgid "asorti: cannot use a subarray of second arg for first arg"
msgstr ""
"asorti: kan ikke bruge et underarray af andet argument for første argument"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "'%s' er ugyldigt som funktionsnavn"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "funktionen for sorteringssammenligning '%s' er ikke defineret"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s-blokke skal have en handlingsdel"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "hver regel skal have et mønster eller en handlingsdel"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr ""
"gamle versioner af awk understøtter ikke flere 'BEGIN'- eller 'END'-regler"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "'%s' er en indbygget funktion, den kan ikke omdefineres"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr "regexp-konstanten '//' ser ud som en C++-kommentar, men er det ikke"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr "regexp-konstanten '/%s/' ser ud som en C-kommentar, men er det ikke"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "dublet case-værdier i switch-krop %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "dublet 'default' opdaget i switch-krop"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "'break' uden for en løkke eller switch er ikke tilladt"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "'continue' uden for en løkke er ikke tilladt"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "'next' brugt i %s-handling"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "'nextfile' brugt i %s-handling"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "'return' brugt uden for funktion"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"alenestående 'print' i BEGIN eller END-regel skulle muligvis være 'print "
"\"\"'"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr ""
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr ""
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "'delete array' er en ikke-portabel udvidelse fra tawk"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "flertrins dobbeltrettede datakanaler fungerer ikke"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "regulært udtryk i højreleddet af en tildeling"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "regulært udtryk på venstre side af en '~'- eller '!~'-operator"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr ""
"gamle versioner af awk understøtter ikke nøgleordet 'in' undtagen efter 'for'"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "regulært udtryk i højreleddet af en sammenligning"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "'getline var' ugyldig inden i '%s' regel"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "'getline' ugyldig inden i '%s' regel"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr "ikke-omdirigeret 'getline' ugyldig inden i '%s'-regel"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "ikke-omdirigeret 'getline' udefineret inden i END-handling"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "gamle versioner af awk understøtter ikke flerdimensionale array"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "kald af 'length' uden parenteser er ikke portabelt"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "indirekte funktionskald er en gawk-udvidelse"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr "kan ikke bruge specialvariabel '%s' til indirekte funktionskald"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "forsøg på at bruge funktionen '%s' som et array"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "ugyldigt indeksudtryk"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "advarsel: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fatal: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "uventet nylinjetegn eller strengafslutning"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "kan ikke åbne kildefilen '%s' for læsning (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, fuzzy, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "kan ikke åbne kildefilen '%s' for læsning (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "ukendt årsag"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr ""
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "allerede inkluderet kildefil '%s'"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, fuzzy, c-format
msgid "already loaded shared library `%s'"
msgstr "allerede inkluderet kildefil '%s'"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include er en gawk-udvidelse"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "tomt filnavn efter @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
#, fuzzy
msgid "@load is a gawk extension"
msgstr "@include er en gawk-udvidelse"
-#: awkgram.y:2500
+#: awkgram.y:2509
#, fuzzy
msgid "empty filename after @load"
msgstr "tomt filnavn efter @include"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "tom programtekst på kommandolinjen"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "kan ikke læse kildefilen '%s' (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "kildefilen '%s' er tom"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "kildefilen slutter ikke med en ny linje"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "uafsluttet regulært udtryk slutter med '\\' i slutningen af filen"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "%s: %d: regex-ændringstegn '/.../%c' fra tawk virker ikke i gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "regex-ændringstegn '/.../%c' fra tawk virker ikke i gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "uafsluttet regulært udtryk"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "uafsluttet regulært udtryk i slutningen af filen"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "brug af '\\ #...' for linjefortsættelse er ikke portabelt"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "sidste tegn på linjen er ikke en omvendt skråstreg"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX tillader ikke operatoren '**='"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "gamle versioner af awk understøtter ikke operatoren '**='"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX tillader ikke operatoren '**'"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "gamle versioner af awk understøtter ikke operatoren '**'"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "operatoren '^=' understøttes ikke i gamle versioner af awk"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "operatoren '^' understøttes ikke i gamle versioner af awk"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "uafsluttet streng"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "ugyldigt tegn '%c' i udtryk"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "'%s' er en gawk-udvidelse"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX tillader ikke '%s'"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "'%s' understøttes ikke i gamle versioner af awk"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "'goto' anses for skadelig!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d er et ugyldigt antal argumenter for %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s: bogstavelig streng som sidste argument til erstatning har ingen effekt"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s: tredje argument er ikke et ændringsbart objekt"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: tredje argument er en gawk-udvidelse"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: andet argument er en gawk-udvidelse"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"brug af dcgettext(_\"...\") er forkert: fjern det indledende "
"understregningstegn"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"brug af dcgettext(_\"...\") er forkert: fjern det indledende "
"understregningstegn"
-#: awkgram.y:4016
+#: awkgram.y:4044
#, fuzzy
msgid "index: regexp constant as second argument is not allowed"
msgstr "indeks: andet argument er ikke en streng"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "funktionen '%s': parameteren '%s' overskygger en global variabel"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "kunne ikke åbne '%s' for skrivning (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "sender variabelliste til standard fejl"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: lukning mislykkedes (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() kaldt to gange!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "der var skyggede variable."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "funktionsnavnet '%s' er allerede defineret"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "funktionen '%s': kan ikke bruge funktionsnavn som parameternavn"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"funktionen '%s': kan ikke bruge specialvariabel '%s' som en "
"funktionsparameter"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "funktionen '%s': parameter %d, '%s', er samme som parameter %d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "funktionen '%s' kaldt, men aldrig defineret"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "funktionen '%s' defineret, men aldrig kaldt direkte"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "konstant regulært udtryk for parameter %d giver en boolesk værdi"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -515,21 +520,21 @@ msgstr ""
"funktionen '%s' kaldt med blanktegn mellem navnet og '(',\n"
"eller brugt som en variabel eller et array"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "forsøgte at dividere med nul"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "forsøgte at dividere med nul i '%%'"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
-#: awkgram.y:5052
+#: awkgram.y:5006
#, fuzzy, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "%d er et ugyldigt antal argumenter for %s"
@@ -568,189 +573,199 @@ msgstr "fflush: kan ikke rense: filen '%s' åbnet for læsning, ikke skrivning"
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: '%s' er ikke en åben fil, datakanal eller ko-proces"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "indeks: første argument er ikke en streng"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "indeks: andet argument er ikke en streng"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: fik et ikke-numerisk argument"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: fik et array-argument"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "'length(array)' er en gawk-udvidelse"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: fik et argument som ikke er en streng"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: fik et ikke-numerisk argument"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: fik et negativt argument %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "fatal: skal bruge 'count$' på alle formater eller ikke nogen"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "feltbredde ignoreret for '%%'-angivelse"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "præcision ignoreret for '%%'-angivelse"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "feltbredde og præcision ignoreret for '%%'-angivelse"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "fatal: '$' tillades ikke i awk-formater"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fatal: argumentantallet med '$' skal være > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr "fatal: argumentantallet %ld er større end antal givne argumenter"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "fatal: '$' tillades ikke efter et punktum i formatet"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"fatal: intet '$' angivet for bredde eller præcision af positionsangivet felt"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "'l' er meningsløst i awk-formater, ignoreret"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "fatal: 'l' tillades ikke i POSIX awk-formater"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "'L' er meningsløst i awk-formater, ignoreret"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "fatal: 'L' tillades ikke i POSIX awk-formater"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "'h' er meningsløst i awk-formater, ignoreret"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "fatal: 'h' tillades ikke i POSIX awk-formater"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: værdi %g er uden for område for '%%%c'-format"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: værdi %g er uden for område for '%%%c'-format"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: værdi %g er uden for område for '%%%c'-format"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"ignorerer ukendt formatspecificeringstegn '%c': intet argument konverteret"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "fatal: for få argumenter til formatstrengen"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ sluttede her"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: formatspecifikation har intet kommandobogstav"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "for mange argumenter til formatstrengen"
-#: builtin.c:1634
+#: builtin.c:1625
#, fuzzy
msgid "sprintf: no arguments"
msgstr "printf: ingen argumenter"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: ingen argumenter"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: fik ikke-numerisk argument"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: kaldt med negativt argument %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: længden %g er ikke >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: længden %g er ikke >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: længden %g som ikke er et heltal vil blive trunkeret"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr "substr: længden %g for stor til strengindeksering, trunkerer til %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: startindeks %g er ugyldigt, bruger 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: startindeks %g som ikke er et heltal vil blive trunkeret"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: kildestrengen er tom"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: startindeks %g er forbi slutningen på strengen"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -758,191 +773,197 @@ msgstr ""
"substr: længden %g ved startindeks %g overskrider længden af første argument "
"(%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr "strftime: formatværdi i PROCINFO[\"strftime\"] har numerisk type"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: fik et ikke-numerisk andet argument"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr "strftime: andet argument mindre end 0 eller for stort til time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: fik et første argument som ikke er en streng"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: fik en tom formatstreng"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: fik et argument som ikke er en streng"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: mindst én af værdierne er udenfor standardområdet"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "'system'-funktion ikke tilladt i sandkasse-tilstand"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: fik et argument som ikke er en streng"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "reference til ikke-initieret felt '$%d'"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: fik et argument som ikke er en streng"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: fik et argument som ikke er en streng"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: fik et ikke-numerisk første argument"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: fik et ikke-numerisk andet argument"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: fik et ikke-numerisk argument"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: fik et ikke-numerisk argument"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: fik et ikke-numerisk argument"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: tredje argument er ikke et array"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
+msgstr "gensub: 0 i tredje argument behandlet som 1"
+
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
msgstr "gensub: 0 i tredje argument behandlet som 1"
-#: builtin.c:3030
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: fik et ikke-numerisk første argument"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: fik et ikke-numerisk andet argument"
-#: builtin.c:3038
+#: builtin.c:3028
#, fuzzy, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%lf, %lf): negative værdier vil give mærkelige resultater"
-#: builtin.c:3040
+#: builtin.c:3030
#, fuzzy, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%lf, %lf): kommatalsværdier vil blive trunkeret"
-#: builtin.c:3042
+#: builtin.c:3032
#, fuzzy, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr ""
"lshift(%lf, %lf): for store skifteværdier vil give mærkelige resultater"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: fik et ikke-numerisk første argument"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: fik et ikke-numerisk andet argument"
-#: builtin.c:3075
+#: builtin.c:3065
#, fuzzy, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%lf, %lf): negative værdier vil give mærkelige resultater"
-#: builtin.c:3077
+#: builtin.c:3067
#, fuzzy, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%lf, %lf): kommatalsværdier vil blive trunkeret"
-#: builtin.c:3079
+#: builtin.c:3069
#, fuzzy, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
"rshift(%lf, %lf): for store skifteværdier vil give mærkelige resultater"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
#, fuzzy
msgid "and: called with less than two arguments"
msgstr "sqrt: kaldt med negativt argument %g"
-#: builtin.c:3109
+#: builtin.c:3099
#, fuzzy, c-format
msgid "and: argument %d is non-numeric"
msgstr "exp: argumentet %g er uden for det tilladte område"
-#: builtin.c:3113
+#: builtin.c:3103
#, fuzzy, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and(%lf, %lf): negative værdier vil give mærkelige resultater"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
#, fuzzy
msgid "or: called with less than two arguments"
msgstr "sqrt: kaldt med negativt argument %g"
-#: builtin.c:3141
+#: builtin.c:3131
#, fuzzy, c-format
msgid "or: argument %d is non-numeric"
msgstr "exp: argumentet %g er uden for det tilladte område"
-#: builtin.c:3145
+#: builtin.c:3135
#, fuzzy, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
#, fuzzy
msgid "xor: called with less than two arguments"
msgstr "sqrt: kaldt med negativt argument %g"
-#: builtin.c:3173
+#: builtin.c:3163
#, fuzzy, c-format
msgid "xor: argument %d is non-numeric"
msgstr "exp: argumentet %g er uden for det tilladte område"
-#: builtin.c:3177
+#: builtin.c:3167
#, fuzzy, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor(%lf, %lf): negative værdier vil give mærkelige resultater"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: fik et ikke-numerisk argument"
-#: builtin.c:3208
+#: builtin.c:3198
#, fuzzy, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
-#: builtin.c:3210
+#: builtin.c:3200
#, fuzzy, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%lf): kommatalsværdier vil blive trunkeret"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: '%s' er ikke en gyldig lokalitetskategori"
@@ -1224,42 +1245,48 @@ msgstr ""
msgid "watch var - set a watchpoint for a variable."
msgstr ""
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "fejl: "
-#: command.y:1051
+#: command.y:1053
#, fuzzy, c-format
msgid "can't read command (%s)\n"
msgstr "kan ikke omdirigere fra '%s' (%s)"
-#: command.y:1065
+#: command.y:1067
#, fuzzy, c-format
msgid "can't read command (%s)"
msgstr "kan ikke omdirigere fra '%s' (%s)"
-#: command.y:1116
+#: command.y:1118
#, fuzzy
msgid "invalid character in command"
msgstr "Ugyldigt tegnklassenavn"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr ""
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr ""
-#: command.y:1284
+#: command.y:1286
#, fuzzy
msgid "invalid character"
msgstr "Ugyldigt sorteringstegn"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr ""
@@ -1775,69 +1802,71 @@ msgstr "'exit' kan ikke kaldes i den aktuelle kontekst"
msgid "`return' not allowed in current context; statement ignored"
msgstr "'exit' kan ikke kaldes i den aktuelle kontekst"
-#: debug.c:5590
+#: debug.c:5604
#, fuzzy, c-format
msgid "No symbol `%s' in current context"
msgstr "forsøg på at bruge array '%s' i skalarsammenhæng"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr ""
-#: dfa.c:1174
+#: dfa.c:1119
#, fuzzy
msgid "invalid character class"
msgstr "Ugyldigt tegnklassenavn"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr ""
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr ""
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Ugyldigt indhold i \\{\\}"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Regulært udtryk for stort"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr ""
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr ""
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ""
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "ukendt nodetype %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "ukendt opkode %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "opkode %s er ikke en operator eller et nøgleord"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "bufferoverløb i genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1848,94 +1877,94 @@ msgstr ""
"\t# Funktionskaldsstak:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "'IGNORECASE' er en gawk-udvidelse"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "'BINMODE' er en gawk-udvidelse"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "BINMODE værdi '%s' er ugyldig, behandles som 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "forkert '%sFMT'-specifikation '%s'"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "deaktiverer '--lint' på grund af en tildeling til 'LINT'"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "reference til ikke-initieret argument '%s'"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "reference til ikke-initieret variabel '%s'"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "forsøg på at referere til et felt fra ikke-numerisk værdi"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "forsøg på at referere til et felt fra tom streng"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "forsøg på at få adgang til felt %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "reference til ikke-initieret felt '$%ld'"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "funktionen '%s' kaldt med flere argumenter end deklareret"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: uventet type `%s'"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "forsøgte at dividere med nul i '/='"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "forsøgte at dividere med nul i '%%='"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "udvidelser er ikke tilladt i sandkasse-tilstand"
-#: ext.c:92
+#: ext.c:68
#, fuzzy
msgid "-l / @load are gawk extensions"
msgstr "@include er en gawk-udvidelse"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr ""
-#: ext.c:98
+#: ext.c:74
#, fuzzy, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "atalt: extension: kan ikke åbne '%s' (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, fuzzy, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
@@ -1943,31 +1972,31 @@ msgstr ""
"fatalt: extension: bibliotek '%s': definer ikke "
"'plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, fuzzy, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr ""
"fatalt: extension: bibliotek '%s': kan ikke kalde funktionen '%s' (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "'extension' er en gawk-udvidelse"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr ""
-#: ext.c:180
+#: ext.c:156
#, fuzzy, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "atalt: extension: kan ikke åbne '%s' (%s)\n"
-#: ext.c:186
+#: ext.c:162
#, fuzzy, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
@@ -1975,95 +2004,95 @@ msgstr ""
"fatalt: extension: bibliotek '%s': definer ikke "
"'plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:190
+#: ext.c:166
#, fuzzy, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr ""
"fatalt: extension: bibliotek '%s': kan ikke kalde funktionen '%s' (%s)\n"
-#: ext.c:221
+#: ext.c:197
#, fuzzy
msgid "make_builtin: missing function name"
msgstr "extension: mangler funktionsnavn"
-#: ext.c:236
+#: ext.c:212
#, fuzzy, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "extension: kan ikke omdefinere funktion '%s'"
-#: ext.c:240
+#: ext.c:216
#, fuzzy, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "extension: funktionen '%s' er allerede defineret"
-#: ext.c:244
+#: ext.c:220
#, fuzzy, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "extension: funktionsnavnet '%s' er defineret tidligere"
-#: ext.c:246
+#: ext.c:222
#, fuzzy, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr "extension: kan ikke bruge gawk's indbyggede '%s' som funktionsnavn"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: negativt argumentantal for funktion '%s'"
-#: ext.c:276
+#: ext.c:252
#, fuzzy
msgid "extension: missing function name"
msgstr "extension: mangler funktionsnavn"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, fuzzy, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: ugyldigt tegn '%c' i funktionsnavn '%s'"
-#: ext.c:291
+#: ext.c:267
#, fuzzy, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: kan ikke omdefinere funktion '%s'"
-#: ext.c:295
+#: ext.c:271
#, fuzzy, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: funktionen '%s' er allerede defineret"
-#: ext.c:299
+#: ext.c:275
#, fuzzy, c-format
msgid "extension: function name `%s' previously defined"
msgstr "funktionsnavnet '%s' er allerede defineret"
-#: ext.c:301
+#: ext.c:277
#, fuzzy, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr "extension: kan ikke bruge gawk's indbyggede '%s' som funktionsnavn"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "funktionen '%s' defineret til at tage ikke mere end %d argumenter"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "funktion '%s': mangler argument nummer %d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr ""
"funktion '%s': argument nummer %d: forsøg på at bruge skalar som et array"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr ""
"funktion '%s': argument nummer %d: forsøg på at bruge array som en skalar"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr ""
@@ -2226,7 +2255,7 @@ msgstr "sqrt: kaldt med negativt argument %g"
msgid "inplace_begin: in-place editing already active"
msgstr ""
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr ""
@@ -2255,55 +2284,55 @@ msgstr "'%s' er ikke et gyldigt variabelnavn"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, fuzzy, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "%s: lukning mislykkedes (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, fuzzy, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "%s: lukning mislykkedes (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr ""
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, fuzzy, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "%s: lukning mislykkedes (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, fuzzy, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "datakanalsrensning af '%s' mislykkedes (%s)."
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, fuzzy, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "lukning af fd %d ('%s') mislykkedes (%s)"
@@ -2353,52 +2382,56 @@ msgstr "sqrt: kaldt med negativt argument %g"
msgid "readfile: called with no arguments"
msgstr "sqrt: kaldt med negativt argument %g"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
#, fuzzy
msgid "writea: called with too many arguments"
msgstr "sqrt: kaldt med negativt argument %g"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, fuzzy, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "exp: argumentet %g er uden for det tilladte område\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, fuzzy, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "split: fjerde argument er ikke et array\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr ""
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr ""
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
#, fuzzy
msgid "reada: called with too many arguments"
msgstr "sqrt: kaldt med negativt argument %g"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, fuzzy, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "exp: argumentet %g er uden for det tilladte område"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, fuzzy, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "match: tredje argument er ikke et array"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr ""
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr ""
@@ -2431,84 +2464,84 @@ msgstr "exp: argumentet %g er uden for det tilladte område"
msgid "sleep: not supported on this platform"
msgstr ""
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF sat til en negativ værdi"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: fjerde argument er en gawk-udvidelse"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: fjerde argument er ikke et array"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: andet argument er ikke et array"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr "split: kan ikke bruge det samme array som andet og fjerde argument"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: kan ikke bruge et underarray af andet argument som fjerde argument"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: kan ikke bruge et underarray af fjerde argument som andet argument"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: tom streng som tredje argument er en gawk-udvidelse"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: fjerde argument er ikke et array"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: andet argument er ikke et array"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patmatch: tredje argument er ikke et array"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr "patsplit: kan ikke bruge det samme array som andet og fjerde argument"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: kan ikke bruge et underarray af andet argument som fjerde argument"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: kan ikke bruge et underarray af fjerde argument som andet argument"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "'FIELDWIDTHS' er en gawk-udvidelse"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "ugyldig FIELDWIDTHS værdi, nær '%s"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "tom streng som 'FS' er en gawk-udvidelse"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "gamle versioner af awk understøtter ikke regexp'er som værdi for 'FS'"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "'FPAT' er en gawk-udvidelse"
@@ -2524,21 +2557,21 @@ msgstr ""
msgid "node_to_awk_value: received null val"
msgstr ""
-#: gawkapi.c:807
+#: gawkapi.c:809
#, fuzzy
msgid "remove_element: received null array"
msgstr "length: fik et array-argument"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr ""
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr ""
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr ""
@@ -2598,516 +2631,485 @@ msgstr "%s: flaget '-W %s' tillader ikke noget argument\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: flaget '-W %s' kræver et argument\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "kommandolinjeargument '%s' er et katalog, oversprunget"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "kan ikke åbne filen '%s' for læsning (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "lukning af fd %d ('%s') mislykkedes (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "omdirigering ikke tilladt i sandkasse-tilstand"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "udtrykket i '%s'-omdirigering har kun numerisk værdi"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "udtrykket for '%s'-omdirigering har en tom streng som værdi"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"filnavnet '%s' for '%s'-omdirigering kan være resultatet af et logisk udtryk"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "unødig blanding af '>' og '>>' for filen '%.*s'"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "kan ikke åbne datakanalen '%s' for udskrivning (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "kan ikke åbne datakanalen '%s' for indtastning (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr "kan ikke åbne tovejsdatakanalen '%s' for ind-/uddata (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "kan ikke omdirigere fra '%s' (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "kan ikke omdirigere til '%s' (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"nåede systembegrænsningen for åbne filer: begynder at multiplekse "
"fildeskriptorer"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "lukning af '%s' mislykkedes (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "for mange datakanaler eller inddatafiler åbne"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: andet argument skal være 'to' eller 'from'"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: '%.*s' er ikke en åben fil, datakanal eller ko-proces"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "lukning af omdirigering som aldrig blev åbnet"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: omdirigeringen '%s' blev ikke åbnet med '|&', andet argument ignoreret"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "fejlstatus (%d) fra lukning af datakanalen '%s' (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "fejlstatus (%d) fra fillukning af '%s' (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "ingen eksplicit lukning af soklen '%s' angivet"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "ingen eksplicit lukning af ko-processen '%s' angivet"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "ingen eksplicit lukning af datakanalen '%s' angivet"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "ingen eksplicit lukning af filen '%s' angivet"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "fejl ved skrivning til standard ud (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "fejl ved skrivning til standard fejl (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "datakanalsrensning af '%s' mislykkedes (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "ko-procesrensning af datakanalen til '%s' mislykkedes (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "filrensning af '%s' mislykkedes (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "lokal port %s ugyldig i '/inet'"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "fjernvært og portinformation (%s, %s) ugyldige"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "ingen (kendt) protokol opgivet i special-filnavn '%s'"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "special-filnavn '%s' er ufuldstændigt"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "fjernmaskinenavn til '/inet' skal angives"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "fjernport til '/inet' skal angives"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "TCP/IP-kommunikation understøttes ikke"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "kunne ikke åbne '%s', tilstand '%s'"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "lukning af master-pty mislykkedes (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "lukning af standard ud i underproces mislykkedes (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"flytning af slave-pty til standard ud i underproces mislykkedes (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "lukning af standard ind i underproces mislykkedes (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"flytning af slave-pty til standard ind i underproces mislykkedes (dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "lukning af slave-pty mislykkedes (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"flytning af datakanal til standard ud i underproces mislykkedes (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"flytning af datakanalen til standard ind i underproces mislykkedes (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "genskabelse af standard ud i forælderprocessen mislykkedes\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "genskabelse af standard ind i forælderprocessen mislykkedes\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "lukning af datakanalen mislykkedes (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "'|&' understøttes ikke"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "kan ikke åbne datakanalen '%s' (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "kan ikke oprette barneproces for '%s' (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr ""
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr ""
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr ""
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr ""
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr ""
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
"`%s'"
msgstr ""
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr ""
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "datafilen '%s' er tom"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "kunne ikke allokere mere hukommelse til inddata"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "'RS' som flertegnsværdi er en gawk-udvidelse"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "IPv6-kommunikation understøttes ikke"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "tomt argument til '-e/--source' ignoreret"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: flaget '-W %s' ukendt, ignoreret\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: flaget kræver et argument -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr "miljøvariablen 'POSIXLY_CORRECT' sat: aktiverer '--posix'"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "'--posix' tilsidesætter '--traditional'"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "'--posix'/'--traditional' tilsidesætter '--non-decimal-data'"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "at køre %s setuid root kan være et sikkerhedsproblem"
-#: main.c:588
+#: main.c:346
#, fuzzy
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "'--posix' tilsidesætter '--binary'"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "kan ikke sætte binær tilstand på standard ind (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "kan ikke sætte binær tilstand på standard ud (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "kan ikke sætte binær tilstand på standard fejl (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "ingen programtekst overhovedet!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr "Brug: %s [flag i POSIX- eller GNU-stil] -f progfil [--] fil ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr "Brug: %s [flag i POSIX- eller GNU-stil] %cprogram%c fil ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "POSIX-flag:\t\tlange GNU-flag: (standard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f progfil\t\t--file=progfil\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=værdi\t\t--assign=var=værdi\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "POSIX-flag:\t\tlange GNU-flag: (udvidelser)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[fil]\t\t--dump-variables[=fil]\n"
-#: main.c:815
+#: main.c:579
#, fuzzy
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-p[fil]\t\t--profile[=fil]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'programtekst'\t--source='programtekst'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E fil\t\t\t--exec=fil\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr ""
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr ""
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
#, fuzzy
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
#, fuzzy
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-p[fil]\t\t--profile[=fil]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[fil]\t\t--profile[=fil]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3116,7 +3118,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3129,7 +3131,7 @@ msgstr ""
"\n"
"Rapportér kommentarer til oversættelsen til <dansk@dansk-gruppen.dk>.\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3139,7 +3141,7 @@ msgstr ""
"Almindeligvis læser gawk fra standard ind og skriver til standard ud.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3149,7 +3151,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' fil\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3169,7 +3171,7 @@ msgstr ""
"enhver senere version.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3183,7 +3185,7 @@ msgstr ""
"General Public License for yderligere information.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3191,16 +3193,16 @@ msgstr ""
"Du bør have fået en kopi af GNU General Public License sammen\n"
"med dette program. Hvis ikke, så se http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft sætter ikke FS til tab i POSIX-awk"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "ukendt værdi for felt-spec: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3209,102 +3211,120 @@ msgstr ""
"%s: '%s' argument til '-v' ikke på formen 'var=værdi'\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "'%s' er ikke et gyldigt variabelnavn"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "'%s' er ikke et variabelnavn, leder efter fil '%s=%s'"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "kan ikke bruge gawk's indbyggede '%s' som variabelnavn"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "kan ikke bruge funktion '%s' som variabelnavn"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "flydendetalsundtagelse"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "fatal fejl: intern fejl"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "fatal fejl: intern fejl: segmentfejl"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "fatal fejl: intern fejl: stakoverløb"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "ingen fd %d åbnet i forvejen"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "kunne ikke i forvejen åbne /dev/null for fd %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "tomt argument til '-e/--source' ignoreret"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: flaget '-W %s' ukendt, ignoreret\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaget kræver et argument -- %c\n"
+
+#: mpfr.c:557
#, fuzzy, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "BINMODE værdi '%s' er ugyldig, behandles som 3"
-#: mpfr.c:608
+#: mpfr.c:615
#, fuzzy, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "BINMODE værdi '%s' er ugyldig, behandles som 3"
-#: mpfr.c:698
+#: mpfr.c:711
#, fuzzy, c-format
msgid "%s: received non-numeric argument"
msgstr "cos: fik et ikke-numerisk argument"
-#: mpfr.c:800
+#: mpfr.c:820
#, fuzzy
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
-#: mpfr.c:804
+#: mpfr.c:824
#, fuzzy
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%lf): kommatalsværdier vil blive trunkeret"
-#: mpfr.c:816
+#: mpfr.c:836
#, fuzzy, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
-#: mpfr.c:835
+#: mpfr.c:855
#, fuzzy, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "cos: fik et ikke-numerisk argument"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr ""
-#: mpfr.c:857
+#: mpfr.c:877
#, fuzzy
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
-#: mpfr.c:863
+#: mpfr.c:883
#, fuzzy
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "or(%lf, %lf): kommatalsværdier vil blive trunkeret"
-#: mpfr.c:878
+#: mpfr.c:898
#, fuzzy, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
@@ -3314,24 +3334,24 @@ msgstr "compl(%lf): negative værdier vil give mærkelige resultater"
msgid "cmd. line:"
msgstr "kommandolinje:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "omvendt skråstreg i slutningen af strengen"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "gamle versioner af awk understøtter ikke '\\%c' undvigesekvens"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX tillader ikke '\\x'-kontrolsekvenser"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "ingen heksadecimale cifre i '\\x'-kontrolsekvenser"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3340,12 +3360,12 @@ msgstr ""
"den heksadecimale sekvens \\x%.*s på %d tegn nok ikke forstået som du "
"forventer det"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "kontrolsekvensen '\\%c' behandlet som kun '%c'"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3373,12 +3393,12 @@ msgid "sending profile to standard error"
msgstr "sender profilen til standard fejl"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s blokke\n"
+"\t# Regler\n"
"\n"
#: profile.c:198
@@ -3395,24 +3415,24 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "intern fejl: %s med null vname"
-#: profile.c:537
+#: profile.c:538
#, fuzzy
msgid "internal error: builtin with null fname"
msgstr "intern fejl: %s med null vname"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
"\n"
msgstr ""
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# profil til gawk oprettet %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3421,7 +3441,7 @@ msgstr ""
"\n"
"\t# Funktioner, listede alfabetisk\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: uykendt omdirigeringstype %d"
@@ -3431,74 +3451,113 @@ msgstr "redir2str: uykendt omdirigeringstype %d"
msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr "regexp-komponent `%.*s' skulle nok være `[%.*s]'"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Lykkedes"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Mislykkedes"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Ugyldigt regulært udtryk"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Ugyldigt sorteringstegn"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Ugyldigt tegnklassenavn"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Efterfølgende omvendt skråstreg"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Ugyldig bagudreference"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "Ubalanceret [ eller [^"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "Ubalanceret ( eller \\("
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "Ubalanceret \\{"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Ugyldigt indhold i \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Ugyldig intervalslutning"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Hukommelsen opbrugt"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Ugyldigt foregående regulært udtryk"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "For tidligt slut på regulært udtryk"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Regulært udtryk for stort"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr "Ubalanceret ) eller \\)"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Intet foregående regulært udtryk"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "funktionen '%s': kan ikke bruge funktionsnavn som parameternavn"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr ""
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "'getline var' ugyldig inden i '%s' regel"
+
+#~ msgid "`getline' invalid inside `%s' rule"
+#~ msgstr "'getline' ugyldig inden i '%s' regel"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr "ingen (kendt) protokol opgivet i special-filnavn '%s'"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "special-filnavn '%s' er ufuldstændigt"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "fjernmaskinenavn til '/inet' skal angives"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "fjernport til '/inet' skal angives"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s blokke\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr "område på formen `[%c-%c]' er locale-afhængig"
@@ -3570,9 +3629,6 @@ msgstr ""
#~ msgid "Operation Not Supported"
#~ msgstr "Operationen understøttes ikke"
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "forsøg på at bruge funktionen '%s' som et array"
-
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "reference til ikke-initieret element '%s[\"%.*s\"]'"
@@ -3615,9 +3671,6 @@ msgstr ""
#~ msgid "function `%s' not defined"
#~ msgstr "funktionen '%s' er ikke defineret"
-#~ msgid "non-redirected `getline' invalid inside `%s' rule"
-#~ msgstr "ikke-omdirigeret 'getline' ugyldig inden i '%s'-regel"
-
#~ msgid "`nextfile' cannot be called from a `%s' rule"
#~ msgstr "'nextfile' kan ikke kaldes fra en '%s'-regel"
diff --git a/po/de.gmo b/po/de.gmo
index e46946bb..7aa9e12b 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index ca6d5475..fcb31d2a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-01-14 22:23+0200\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-10-23 17:31+0200\n"
"Last-Translator: Philipp Thomas <pth@suse.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -36,9 +36,9 @@ msgstr "Es wird versucht, den skalaren Parameter »%s« als Feld zu verwenden"
msgid "attempt to use scalar `%s' as an array"
msgstr "Es wird versucht, den Skalar »%s« als Array zu verwenden"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1599 builtin.c:1645
-#: builtin.c:1658 builtin.c:2086 builtin.c:2100 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "Es wird versucht, das Feld »%s« in einem Skalarkontext zu verwenden"
@@ -75,421 +75,452 @@ msgstr "asorti: Das erste Argument ist kein Feld"
#: array.c:831
msgid "asort: cannot use a subarray of first arg for second arg"
-msgstr "asort: ein untergeordnetes Feld des ersten Arguments kann nicht als zweites Argument verwendet werden"
+msgstr ""
+"asort: ein untergeordnetes Feld des ersten Arguments kann nicht als zweites "
+"Argument verwendet werden"
#: array.c:832
msgid "asorti: cannot use a subarray of first arg for second arg"
-msgstr "asorti: ein untergeordnetes Feld des ersten Arguments kann nicht als zweites Argument verwendet werden"
+msgstr ""
+"asorti: ein untergeordnetes Feld des ersten Arguments kann nicht als zweites "
+"Argument verwendet werden"
#: array.c:837
msgid "asort: cannot use a subarray of second arg for first arg"
-msgstr "asort: ein untergeordnetes Feld des zweiten Arguments kann nicht als erstes Argument verwendet werden"
+msgstr ""
+"asort: ein untergeordnetes Feld des zweiten Arguments kann nicht als erstes "
+"Argument verwendet werden"
#: array.c:838
msgid "asorti: cannot use a subarray of second arg for first arg"
-msgstr "asorti: ein untergeordnetes Feld des zweiten Arguments kann nicht als erstes Argument verwendet werden"
+msgstr ""
+"asorti: ein untergeordnetes Feld des zweiten Arguments kann nicht als erstes "
+"Argument verwendet werden"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "»%s« ist ein unzulässiger Funktionsname"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "Die Vergleichsfunktion »%s« für das Sortieren ist nicht definiert"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s-Blöcke müssen einen Aktionsteil haben"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "Jede Regel muss entweder ein Muster oder einen Aktionsteil haben"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "Das alte awk erlaubt keine mehrfachen »BEGIN«- oder »END«-Regeln"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "»%s« ist eine eingebaute Funktion und kann nicht umdefiniert werden"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
-msgstr "Die Regulärer-Ausdruck-Konstante »//« sieht wie ein C-Kommentar aus, ist aber keiner"
+msgstr ""
+"Die Regulärer-Ausdruck-Konstante »//« sieht wie ein C-Kommentar aus, ist "
+"aber keiner"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
-msgstr "Die Regulärer-Ausdruck-Konstante »/%s/« sieht wie ein C-Kommentar aus, ist aber keiner"
+msgstr ""
+"Die Regulärer-Ausdruck-Konstante »/%s/« sieht wie ein C-Kommentar aus, ist "
+"aber keiner"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "doppelte Case-Werte im Switch-Block: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "doppeltes »default« im Switch-Block gefunden"
-#: awkgram.y:796 awkgram.y:3699
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
-msgstr "»break« ist außerhalb einer Schleife oder eines Switch-Blocks nicht zulässig"
+msgstr ""
+"»break« ist außerhalb einer Schleife oder eines Switch-Blocks nicht zulässig"
-#: awkgram.y:805 awkgram.y:3691
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "»continue« ist außerhalb einer Schleife nicht zulässig"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "»next« wird in %s-Aktion verwendet"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "»nextfile« wird in %s-Aktion verwendet"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "»return« wird außerhalb einer Funktion verwendet"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
-msgstr "Einfaches »print« in BEGIN- oder END-Regel soll vermutlich »print \"\"« sein"
+msgstr ""
+"Einfaches »print« in BEGIN- oder END-Regel soll vermutlich »print \"\"« sein"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "»delete« ist in Zusammenhang mit SYMTAB nicht zulässig"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "»delete« ist in Zusammenhang mit FUNCTAB nicht zulässig"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "»delete(array)« ist eine gawk-Erweiterung"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "mehrstufige Zweiwege-Pipes funktionieren nicht"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "Regulärer Ausdruck auf der rechten Seite einer Zuweisung"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "Regulärer Ausdruck links vom »~«- oder »!~«-Operator"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "Das alte awk unterstützt das Schlüsselwort »in« nur nach »for«"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "Regulärer Ausdruck rechts von einem Vergleich"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "»getline var« ist ungültig innerhalb der »%s«-Regel"
-
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
+#: awkgram.y:1411
+#, fuzzy, c-format
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr "»getline« ist ungültig innerhalb der »%s«-Regel"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
-msgstr "Nicht-umgelenktes »getline« ist innerhalb der END-Aktion nicht definiert"
+msgstr ""
+"Nicht-umgelenktes »getline« ist innerhalb der END-Aktion nicht definiert"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "Das alte awk unterstützt keine mehrdimensionalen Felder"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "Aufruf von »length« ohne Klammern ist nicht portabel"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "indirekte Funktionsaufrufe sind eine gawk-Erweiterung"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
-msgstr "die besondere Variable »%s« kann nicht für den indirekten Funktionsaufruf verwendet werden"
+msgstr ""
+"die besondere Variable »%s« kann nicht für den indirekten Funktionsaufruf "
+"verwendet werden"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr ""
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "Ungültiger Index-Ausdruck"
-#: awkgram.y:2024 awkgram.y:2044 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "Warnung: "
-#: awkgram.y:2042 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "Fatal: "
-#: awkgram.y:2092
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "Unerwarteter Zeilenumbruch oder Ende der Zeichenkette"
-#: awkgram.y:2359 awkgram.y:2435 awkgram.y:2658 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "Quelldatei »%s« kann nicht zum Lesen geöffnet werden (%s)"
-#: awkgram.y:2360 awkgram.y:2485
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
-msgstr "Die dynamische Bibliothek »%s« kann nicht zum Lesen geöffnet werden (%s)"
+msgstr ""
+"Die dynamische Bibliothek »%s« kann nicht zum Lesen geöffnet werden (%s)"
-#: awkgram.y:2362 awkgram.y:2436 awkgram.y:2486 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "Unbekannte Ursache"
-#: awkgram.y:2371 awkgram.y:2395
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "»%s« kann nicht eingebunden und als Programmdatei verwendet werden"
-#: awkgram.y:2384
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "Quelldatei »%s« wurde bereits eingebunden"
-#: awkgram.y:2385
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "Die dynamische Bibliothek »%s« wurde bereits eingebunden"
-#: awkgram.y:2420
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "»@include« ist eine gawk-Erweiterung"
-#: awkgram.y:2426
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "leerer Dateiname nach @include"
-#: awkgram.y:2470
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "»@load« ist eine Gawk-Erweiterung"
-#: awkgram.y:2476
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "leerer Dateiname nach @load"
-#: awkgram.y:2610
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "Kein Programmtext auf der Kommandozeile"
-#: awkgram.y:2725
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "Die Quelldatei »%s« kann nicht gelesen werden (%s)"
-#: awkgram.y:2736
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "Die Quelldatei »%s« ist leer"
-#: awkgram.y:2913
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "Die Quelldatei hört nicht mit einem Zeilenende auf"
-#: awkgram.y:3018
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
-msgstr "Nicht beendeter regulärer Ausdruck (hört mit '\\' auf) am Ende der Datei"
+msgstr ""
+"Nicht beendeter regulärer Ausdruck (hört mit '\\' auf) am Ende der Datei"
-#: awkgram.y:3042
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
-msgstr "%s: %d: der tawk-Modifizierer für reguläre Ausdrücke »/.../%c« funktioniert nicht in gawk"
+msgstr ""
+"%s: %d: der tawk-Modifizierer für reguläre Ausdrücke »/.../%c« funktioniert "
+"nicht in gawk"
-#: awkgram.y:3046
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
-msgstr "Der tawk-Modifizierer für reguläre Ausdrücke »/.../%c« funktioniert nicht in gawk"
+msgstr ""
+"Der tawk-Modifizierer für reguläre Ausdrücke »/.../%c« funktioniert nicht in "
+"gawk"
-#: awkgram.y:3053
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "Nicht beendeter regulärer Ausdruck"
-#: awkgram.y:3057
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "Nicht beendeter regulärer Ausdruck am Dateiende"
-#: awkgram.y:3116
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
-msgstr "Die Verwendung von »\\#...« zur Fortsetzung von Zeilen ist nicht portabel"
+msgstr ""
+"Die Verwendung von »\\#...« zur Fortsetzung von Zeilen ist nicht portabel"
-#: awkgram.y:3132
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "das letzte Zeichen auf der Zeile ist kein Backslash (»\\«)"
-#: awkgram.y:3193
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX erlaubt den Operator »**=« nicht"
-#: awkgram.y:3195
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "Das alte awk unterstützt den Operator »**=« nicht"
-#: awkgram.y:3204
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX erlaubt den Operator »**« nicht"
-#: awkgram.y:3206
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "Das alte awk unterstützt den Operator »**« nicht"
-#: awkgram.y:3241
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "Das alte awk unterstützt den Operator »^=« nicht"
-#: awkgram.y:3249
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "Das alte awk unterstützt den Operator »^« nicht"
-#: awkgram.y:3342 awkgram.y:3358 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "Nicht beendete Zeichenkette"
-#: awkgram.y:3579
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "Ungültiges Zeichen »%c« in einem Ausdruck"
-#: awkgram.y:3626
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "»%s« ist eine gawk-Erweiterung"
-#: awkgram.y:3631
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX erlaubt »%s« nicht"
-#: awkgram.y:3639
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "»%s« wird im alten awk nicht unterstützt"
-#: awkgram.y:3729
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "»goto« gilt als schlechter Stil!\n"
-#: awkgram.y:3763
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "Unzulässige Argumentzahl %d für %s"
-#: awkgram.y:3798
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr "%s: Ein String als letztes Argument von substitute hat keinen Effekt"
-#: awkgram.y:3803
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "Der dritte Parameter von %s ist ein unveränderliches Objekt"
-#: awkgram.y:3886 awkgram.y:3889
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: Das dritte Argument ist eine gawk-Erweiterung"
-#: awkgram.y:3943 awkgram.y:3946
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: Das zweite Argument ist eine gawk-Erweiterung"
-#: awkgram.y:3958
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"Fehlerhafte Verwendung von dcgettext(_\"...\"): \n"
"Entfernen Sie den führenden Unterstrich"
-#: awkgram.y:3973
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"Fehlerhafte Verwendung von dcngettext(_\"...\"): \n"
"Entfernen Sie den führenden Unterstrich"
-#: awkgram.y:3992
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: eine Regexp-Konstante als zweites Argument ist unzulässig"
-#: awkgram.y:4045
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "Funktion »%s«: Parameter »%s« verdeckt eine globale Variable"
-#: awkgram.y:4102 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "»%s« kann nicht zum Schreiben geöffne werden(%s)"
-#: awkgram.y:4103
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "Die Liste der Variablen wird auf der Standardfehlerausgabe ausgegeben"
-#: awkgram.y:4111
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: close ist gescheitert (%s)"
-#: awkgram.y:4136
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() zweimal aufgerufen!"
-#: awkgram.y:4144
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "es sind verdeckte Variablen vorhanden"
-#: awkgram.y:4215
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "Funktion »%s« wurde bereits definiert"
-#: awkgram.y:4261
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "Funktion »%s«: Funktionsnamen können nicht als Parameternamen benutzen"
-#: awkgram.y:4264
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
-msgstr "Funktion »%s«: die spezielle Variable »%s« kann nicht als Parameter verwendet werden"
+msgstr ""
+"Funktion »%s«: die spezielle Variable »%s« kann nicht als Parameter "
+"verwendet werden"
-#: awkgram.y:4272
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "Funktion »%s«: Parameter #%d, »%s« wiederholt Parameter #%d"
-#: awkgram.y:4359 awkgram.y:4365
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "Aufgerufene Funktion »%s« ist nirgends definiert"
-#: awkgram.y:4369
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "Funktion »%s« wurde definiert aber nirgends aufgerufen"
-#: awkgram.y:4401
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr ""
"Regulärer-Ausdruck-Konstante für Parameter #%d ergibt einen \n"
"logischen Wert"
-#: awkgram.y:4460
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -498,20 +529,23 @@ msgstr ""
"Funktion »%s« wird mit Leerzeichen zwischen Name und »(« aufgerufen, \n"
"oder als Variable oder Feld verwendet"
-#: awkgram.y:4696
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "Division durch Null wurde versucht"
-#: awkgram.y:4705
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "Division durch Null versucht in »%%«"
-#: awkgram.y:5025
-msgid "cannot assign a value to the result of a field post-increment expression"
-msgstr "dem Ergebnis eines Feld-Postinkrementausdruck kann kein Wert zugewiesen werden"
+#: awkgram.y:5003
+msgid ""
+"cannot assign a value to the result of a field post-increment expression"
+msgstr ""
+"dem Ergebnis eines Feld-Postinkrementausdruck kann kein Wert zugewiesen "
+"werden"
-#: awkgram.y:5028
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "Unzulässiges Ziel für eine Zuweisung (Opcode %s)"
@@ -537,383 +571,423 @@ msgstr "exp: das Argument %g liegt außerhalb des gültigen Bereichs"
#: builtin.c:229
#, c-format
msgid "fflush: cannot flush: pipe `%s' opened for reading, not writing"
-msgstr "fflush: Leeren der Puffer nicht möglich, Pipe »%s« ist nur zum Lesen geöffnet"
+msgstr ""
+"fflush: Leeren der Puffer nicht möglich, Pipe »%s« ist nur zum Lesen geöffnet"
#: builtin.c:232
#, c-format
msgid "fflush: cannot flush: file `%s' opened for reading, not writing"
-msgstr "fflush: Leeren der Puffer nicht möglich, Datei »%s« ist nur zum Lesen geöffnet"
+msgstr ""
+"fflush: Leeren der Puffer nicht möglich, Datei »%s« ist nur zum Lesen "
+"geöffnet"
#: builtin.c:244
#, c-format
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: »%s« ist keine geöffnete Datei, Pipe oder Prozess"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: Erstes Argument ist kein String"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: Zweites Argument ist kein string"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "Argument ist keine Zahl"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: Argument ist ein Feld"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "»length(array)« ist eine gawk-Erweiterung"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: Argument ist kein String"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: Argument ist keine Zahl"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: Negatives Argument %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "Fatal: »count$« muss auf alle Formate angewandt werden oder auf keines"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "Feldbreite wird für die »%%«-Angabe ignoriert"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "Genauigkeit wird für die »%%«-Angabe ignoriert"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "Feldbreite und Genauigkeit werden für die »%%«-Angabe ignoriert"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "Fatal: »$« ist in awk-Formaten nicht zulässig"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "Fatal: die Anzahl der Argumen bei »$« muss > 0 sein"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
-msgstr "Fatal: Argumentenanzahl %ld ist größer als die Gesamtzahl angegebener Argumente"
+msgstr ""
+"Fatal: Argumentenanzahl %ld ist größer als die Gesamtzahl angegebener "
+"Argumente"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "Fatal: »$« nach Punkt in Formatangabe nicht zulässig"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr "Fatal: »$« fehlt in positionsabhängiger Feldbreite oder Genauigkeit"
#
-#: builtin.c:1011
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "»l« ist in awk-Formaten bedeutungslos, ignoriert"
-#: builtin.c:1015
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "Fatal: »l« ist in POSIX-awk-Formaten nicht zulässig"
-#: builtin.c:1028
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "»L« ist in awk-Formaten bedeutungslos, ignoriert"
-#: builtin.c:1032
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "Fatal: »L« ist in POSIX-awk-Formaten nicht zulässig"
-#: builtin.c:1045
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "»h« ist in awk-Formaten bedeutungslos, ignoriert"
-#: builtin.c:1049
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "Fatal: »h« ist in POSIX-awk-Formaten nicht zulässig"
-#: builtin.c:1447
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: Wert %g ist außerhalb des Bereichs für Format »%%%c«"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: Wert %g ist außerhalb des Bereichs für Format »%%%c«"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: Wert %g ist außerhalb des Bereichs für Format »%%%c«"
-#: builtin.c:1545
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
-msgstr "das unbekannte Zeichen »%c« in der Formatspezifikation wird ignoriert: keine Argumente umgewandelt"
+msgstr ""
+"das unbekannte Zeichen »%c« in der Formatspezifikation wird ignoriert: keine "
+"Argumente umgewandelt"
-#: builtin.c:1550
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "Fatal: Nicht genügend Argumente für die Formatangabe"
-#: builtin.c:1552
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ hierfür fehlte es"
-#: builtin.c:1559
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: Format-Spezifikation hat keinen Controlcode"
-#: builtin.c:1562
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "Zu viele Argumente für den Formatstring"
-#: builtin.c:1618
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: Keine Argumente"
-#: builtin.c:1641 builtin.c:1652
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: Keine Argumente"
-#: builtin.c:1695
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: das Argument ist keine Zahl"
-#: builtin.c:1699
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: das Argument %g ist negativ"
-#: builtin.c:1730
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: Länge %g ist nicht >= 1"
-#: builtin.c:1732
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: Länge %g ist nicht >= 0"
-#: builtin.c:1739
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: Nicht ganzzahlige Länge %g wird abgeschnitten"
-#: builtin.c:1744
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
-msgstr "substr: Länge %g ist zu groß für Stringindizierung, wird auf %g gekürzt"
+msgstr ""
+"substr: Länge %g ist zu groß für Stringindizierung, wird auf %g gekürzt"
-#: builtin.c:1756
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: Start-Index %g ist ungültig, 1 wird verwendet"
-#: builtin.c:1761
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: Nicht ganzzahliger Start-Wert %g wird abgeschnitten"
-#: builtin.c:1786
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: Quellstring ist leer"
-#: builtin.c:1802
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: Start-Wert %g liegt hinter dem Ende des Strings"
-#: builtin.c:1810
+#: builtin.c:1820
#, c-format
-msgid "substr: length %g at start index %g exceeds length of first argument (%lu)"
-msgstr "substr: Länge %g am Start-Wert %g überschreitet die Länge des ersten Arguments (%lu)"
+msgid ""
+"substr: length %g at start index %g exceeds length of first argument (%lu)"
+msgstr ""
+"substr: Länge %g am Start-Wert %g überschreitet die Länge des ersten "
+"Arguments (%lu)"
-#: builtin.c:1884
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr "strftime: Formatwert in PROCINFO[\"strftime\"] ist numerischen Typs"
-#: builtin.c:1907
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: Das zweite Argument ist keine Zahl"
-#: builtin.c:1911
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
-msgstr "strftime: das zweite Argument ist kleiner als 0 oder zu groß für time_t"
+msgstr ""
+"strftime: das zweite Argument ist kleiner als 0 oder zu groß für time_t"
-#: builtin.c:1918
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: Das erste Argument ist kein String"
-#: builtin.c:1925
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: Der Format-String ist leer"
-#: builtin.c:1991
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: Das Argument ist kein String"
-#: builtin.c:2008
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: mindestens einer der Werte ist außerhalb des normalen Bereichs"
-#: builtin.c:2043
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "Die Funktion »system« ist im Sandbox-Modus nicht erlaubt"
-#: builtin.c:2048
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: Das Argument ist kein String"
-#: builtin.c:2168
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "Referenz auf das nicht initialisierte Feld »$%d«"
-#: builtin.c:2255
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: das Argument ist kein String"
-#: builtin.c:2289
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: das Argument ist kein String"
-#: builtin.c:2325 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: das erste Argument ist keine Zahl"
-#: builtin.c:2327 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: das zweite Argument ist keine Zahl"
-#: builtin.c:2346
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: das Argument ist keine Zahl"
-#: builtin.c:2362
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: das Argument ist keine Zahl"
-#: builtin.c:2415 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: das Argument ist keine Zahl"
-#: builtin.c:2446
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: das dritte Argument ist kein Array"
-#: builtin.c:2718
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: 0 als drittes Argument wird als 1 interpretiert"
-#: builtin.c:3014
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: 0 als drittes Argument wird als 1 interpretiert"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: das erste Argument ist keine Zahl"
-#: builtin.c:3016
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: das zweite Argument ist keine Zahl"
-#: builtin.c:3022
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
-msgstr "lshift(%f, %f): Negative Werte werden zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"lshift(%f, %f): Negative Werte werden zu merkwürdigen Ergebnissen führen"
-#: builtin.c:3024
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): Dezimalteil wird abgeschnitten"
-#: builtin.c:3026
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
-msgstr "lshift(%f, %f): Zu große Shift-Werte werden zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"lshift(%f, %f): Zu große Shift-Werte werden zu merkwürdigen Ergebnissen "
+"führen"
-#: builtin.c:3051
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: das erste Argument ist keine Zahl"
-#: builtin.c:3053
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: das zweite Argument ist keine Zahl"
-#: builtin.c:3059
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
-msgstr "rshift (%f, %f): Negative Werte werden zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"rshift (%f, %f): Negative Werte werden zu merkwürdigen Ergebnissen führen"
-#: builtin.c:3061
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): Dezimalteil wird abgeschnitten"
-#: builtin.c:3063
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
-msgstr "rshift(%f, %f): Zu große Shift-Werte werden zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"rshift(%f, %f): Zu große Shift-Werte werden zu merkwürdigen Ergebnissen "
+"führen"
-#: builtin.c:3088 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: wird mit weniger als zwei Argumenten aufgerufen"
-#: builtin.c:3093
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: das Argument %d ist nicht numerisch"
-#: builtin.c:3097
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
-msgstr "and: der negative Wert %2$g von Argument %1$d wird zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"and: der negative Wert %2$g von Argument %1$d wird zu merkwürdigen "
+"Ergebnissen führen"
-#: builtin.c:3120 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: wird mit weniger als zwei Argumenten aufgerufen"
-#: builtin.c:3125
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: das Argument %d ist nicht numerisch"
-#: builtin.c:3129
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
-msgstr "or: der negative Wert %2$g von Argument %1$d wird zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"or: der negative Wert %2$g von Argument %1$d wird zu merkwürdigen "
+"Ergebnissen führen"
-#: builtin.c:3151 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: wird mit weniger als zwei Argumenten aufgerufen"
-#: builtin.c:3157
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: das Argument %d ist nicht numerisch"
-#: builtin.c:3161
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
-msgstr "xor: der negative Wert %2$g von Argument %1$d wird zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"xor: der negative Wert %2$g von Argument %1$d wird zu merkwürdigen "
+"Ergebnissen führen"
-#: builtin.c:3186 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: das erste Argument ist keine Zahl"
-#: builtin.c:3192
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): Der negative Wert wird zu merkwürdigen Ergebnissen führen"
-#: builtin.c:3194
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): der Dezimalteil wird abgeschnitten"
-#: builtin.c:3363
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: »%s« ist keine gültige Locale-Kategorie"
@@ -945,7 +1019,8 @@ msgstr "save »%s«: Der Befehl ist nicht zulässig."
#: command.y:339
msgid "Can't use command `commands' for breakpoint/watchpoint commands"
-msgstr "Der Befehl »commands« kann nicht für Break- bzw. Watchpoints verwendet werden"
+msgstr ""
+"Der Befehl »commands« kann nicht für Break- bzw. Watchpoints verwendet werden"
#: command.y:341
msgid "no breakpoint/watchpoint has been set yet"
@@ -958,7 +1033,9 @@ msgstr "ungültige Break-/Watchpoint/Nummer"
#: command.y:348
#, c-format
msgid "Type commands for when %s %d is hit, one per line.\n"
-msgstr "Befehle eingeben, die bei Erreichen von %s %d ausgeführt werden sollen, einer pro Zeile.\n"
+msgstr ""
+"Befehle eingeben, die bei Erreichen von %s %d ausgeführt werden sollen, "
+"einer pro Zeile.\n"
#: command.y:350
#, c-format
@@ -1019,24 +1096,36 @@ msgid "non-zero integer value"
msgstr "ganyzahliger Wert ungleich Null"
#: command.y:817
-msgid "backtrace [N] - print trace of all or N innermost (outermost if N < 0) frames."
-msgstr "backtrace [N] - log von allen oder den N innersten (äußersten wenn N < 0) Rahmen."
+msgid ""
+"backtrace [N] - print trace of all or N innermost (outermost if N < 0) "
+"frames."
+msgstr ""
+"backtrace [N] - log von allen oder den N innersten (äußersten wenn N < 0) "
+"Rahmen."
#: command.y:819
-msgid "break [[filename:]N|function] - set breakpoint at the specified location."
-msgstr "break [[Dateiname:]N|funktion - Breakpoint an der angegebenen Stelle setzen.]"
+msgid ""
+"break [[filename:]N|function] - set breakpoint at the specified location."
+msgstr ""
+"break [[Dateiname:]N|funktion - Breakpoint an der angegebenen Stelle setzen.]"
#: command.y:821
msgid "clear [[filename:]N|function] - delete breakpoints previously set."
msgstr "clear [[Dateiname:]N|Funktion - zuvor gesetzte Breakpoints löschen."
#: command.y:823
-msgid "commands [num] - starts a list of commands to be executed at a breakpoint(watchpoint) hit."
-msgstr "commands [Nr] - startet eine Liste von Befehlen, die bei Erreichen eines Break- bzw. Watchpoints ausgeführt werden."
+msgid ""
+"commands [num] - starts a list of commands to be executed at a "
+"breakpoint(watchpoint) hit."
+msgstr ""
+"commands [Nr] - startet eine Liste von Befehlen, die bei Erreichen eines "
+"Break- bzw. Watchpoints ausgeführt werden."
#: command.y:825
msgid "condition num [expr] - set or clear breakpoint or watchpoint condition."
-msgstr "condition Nr [Ausdruck] - Bedingungen für einen Break-/Watchpoint setzen oder löschen."
+msgstr ""
+"condition Nr [Ausdruck] - Bedingungen für einen Break-/Watchpoint setzen "
+"oder löschen."
#: command.y:827
msgid "continue [COUNT] - continue program being debugged."
@@ -1052,7 +1141,8 @@ msgstr "disable [Breakpoints] [Bereich] - angegebene Breakpoints deaktivieren."
#: command.y:833
msgid "display [var] - print value of variable each time the program stops."
-msgstr "display [Var] - den Wert der Variablen bei jedem Programmstop ausgeben."
+msgstr ""
+"display [Var] - den Wert der Variablen bei jedem Programmstop ausgeben."
#: command.y:835
msgid "down [N] - move N frames down the stack."
@@ -1060,11 +1150,15 @@ msgstr "down [N] - N Rahmen nach unten im Stack gehen."
#: command.y:837
msgid "dump [filename] - dump instructions to file or stdout."
-msgstr "dump [Dateiname] - Befehle in eine Datei oder auf der Standardausgabe ausgeben"
+msgstr ""
+"dump [Dateiname] - Befehle in eine Datei oder auf der Standardausgabe "
+"ausgeben"
#: command.y:839
msgid "enable [once|del] [breakpoints] [range] - enable specified breakpoints."
-msgstr "enable [once|del] [Breakpoints] [Bereich] - die angegebenen Breakpoints aktivieren."
+msgstr ""
+"enable [once|del] [Breakpoints] [Bereich] - die angegebenen Breakpoints "
+"aktivieren."
#: command.y:841
msgid "end - end a list of commands or awk statements."
@@ -1076,7 +1170,8 @@ msgstr "eval stmt[p1, p2, ...] - Awk-Ausdrücke auswerten."
#: command.y:845
msgid "finish - execute until selected stack frame returns."
-msgstr "finish - mit Ausführung fortfahren bis auisgewählter Rahmen verlassen wird."
+msgstr ""
+"finish - mit Ausführung fortfahren bis auisgewählter Rahmen verlassen wird."
#: command.y:847
msgid "frame [N] - select and print stack frame number N."
@@ -1084,27 +1179,41 @@ msgstr "frame [N] - den Stackrahmen Nummer N auswählen und ausgeben."
#: command.y:849
msgid "help [command] - print list of commands or explanation of command."
-msgstr "help [Befehl] - gibt eine Liste der Befehle oder die Beschreibung eines einzelnen Befehls aus."
+msgstr ""
+"help [Befehl] - gibt eine Liste der Befehle oder die Beschreibung eines "
+"einzelnen Befehls aus."
#: command.y:851
msgid "ignore N COUNT - set ignore-count of breakpoint number N to COUNT."
-msgstr "ignore N ZÄHLER - setzt den Ignorieren-Zähler von Breakpoint N auf ZÄHLER"
+msgstr ""
+"ignore N ZÄHLER - setzt den Ignorieren-Zähler von Breakpoint N auf ZÄHLER"
#: command.y:853
-msgid "info topic - source|sources|variables|functions|break|frame|args|locals|display|watch."
-msgstr "info Thema - source|sources|variables|functions|break|frame|args|locals|display|watch."
+msgid ""
+"info topic - source|sources|variables|functions|break|frame|args|locals|"
+"display|watch."
+msgstr ""
+"info Thema - source|sources|variables|functions|break|frame|args|locals|"
+"display|watch."
#: command.y:855
msgid "list [-|+|[filename:]lineno|function|range] - list specified line(s)."
-msgstr "list [-|+|[Dateiname:]Zeilennr|Funktion|Breich] - die angegebenen Zeilen ausgeben"
+msgstr ""
+"list [-|+|[Dateiname:]Zeilennr|Funktion|Breich] - die angegebenen Zeilen "
+"ausgeben"
#: command.y:857
msgid "next [COUNT] - step program, proceeding through subroutine calls."
-msgstr "next [ZÄHLER] - Programm schrittweise ausführen aber Subroutinen in einem Rutsch ausführen"
+msgstr ""
+"next [ZÄHLER] - Programm schrittweise ausführen aber Subroutinen in einem "
+"Rutsch ausführen"
#: command.y:859
-msgid "nexti [COUNT] - step one instruction, but proceed through subroutine calls."
-msgstr "nexti [ZÄHLER] - einen Befehl abarbeiten. aber Subroutinen in einem Rutsch ausführen"
+msgid ""
+"nexti [COUNT] - step one instruction, but proceed through subroutine calls."
+msgstr ""
+"nexti [ZÄHLER] - einen Befehl abarbeiten. aber Subroutinen in einem Rutsch "
+"ausführen"
#: command.y:861
msgid "option [name[=value]] - set or display debugger option(s)."
@@ -1124,7 +1233,9 @@ msgstr "quit - Debugger verlassen"
#: command.y:869
msgid "return [value] - make selected stack frame return to its caller."
-msgstr "return [Wert] - den ausgewählten Stapelrahmen yu seinem Aufrufer zurück kehren lassen"
+msgstr ""
+"return [Wert] - den ausgewählten Stapelrahmen yu seinem Aufrufer zurück "
+"kehren lassen"
#: command.y:871
msgid "run - start or restart executing program."
@@ -1139,8 +1250,11 @@ msgid "set var = value - assign value to a scalar variable."
msgstr "set Var = Wert - einer skalaren Variablen einen Wert zuweisen"
#: command.y:879
-msgid "silent - suspends usual message when stopped at a breakpoint/watchpoint."
-msgstr "silent - unterdrückt die übliche Nachricht, wenn ein Break- bzw. Watchpoint erreicht wird."
+msgid ""
+"silent - suspends usual message when stopped at a breakpoint/watchpoint."
+msgstr ""
+"silent - unterdrückt die übliche Nachricht, wenn ein Break- bzw. Watchpoint "
+"erreicht wird."
#: command.y:881
msgid "source file - execute commands from file."
@@ -1148,7 +1262,9 @@ msgstr "source Datei - die Befehle in Datei ausführen"
#: command.y:883
msgid "step [COUNT] - step program until it reaches a different source line."
-msgstr "step [ZÄHLER - Programm schrittweise ausführen bis es eine andere Quellzeile erricht."
+msgstr ""
+"step [ZÄHLER - Programm schrittweise ausführen bis es eine andere Quellzeile "
+"erricht."
#: command.y:885
msgid "stepi [COUNT] - step one instruction exactly."
@@ -1164,11 +1280,17 @@ msgstr "trace on|off - Instruktionen vor der Ausführung ausgeben."
#: command.y:891
msgid "undisplay [N] - remove variable(s) from automatic display list."
-msgstr "undisplay [N] - Variablen von der Liste der automatisch Anzuzeigenden entfernen."
+msgstr ""
+"undisplay [N] - Variablen von der Liste der automatisch Anzuzeigenden "
+"entfernen."
#: command.y:893
-msgid "until [[filename:]N|function] - execute until program reaches a different line or line N within current frame."
-msgstr "until [[Dateiname:]N|Funktion - Ausführen bis das Programm eine andere Zeile erreicht oder N Zeilen im aktuellen Rahmen."
+msgid ""
+"until [[filename:]N|function] - execute until program reaches a different "
+"line or line N within current frame."
+msgstr ""
+"until [[Dateiname:]N|Funktion - Ausführen bis das Programm eine andere Zeile "
+"erreicht oder N Zeilen im aktuellen Rahmen."
#: command.y:895
msgid "unwatch [N] - remove variable(s) from watch list."
@@ -1182,47 +1304,58 @@ msgstr "up [N] - N Rahmen im Kellerspeicher nach oben gehen."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch Var - einen Watchpoint für eine Variable setzen."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - log von allen oder den N innersten (äußersten wenn N < 0) "
+"Rahmen."
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "Fehler: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "der Befehl kann nicht gelesen werden (»%s«)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "der Befehl kann nicht gelesen werden (»%s«)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "Ungültiges Zeichen im Befehl"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "unbekannter Befehl - »%.*s«, versuchen Sie es mit help"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "Ungültiges Zeichen"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "undefinierter Befehl: %s\n"
#: debug.c:252
msgid "set or show the number of lines to keep in history file."
-msgstr "die Anzahl von Zeilen setzen oder anzeigen, die in der Historydatei gespeichert werden sollen."
+msgstr ""
+"die Anzahl von Zeilen setzen oder anzeigen, die in der Historydatei "
+"gespeichert werden sollen."
#: debug.c:254
msgid "set or show the list command window size."
@@ -1274,12 +1407,14 @@ msgstr "Die Quelldatei »%s« kann nicht gefunden werden (%s)"
#: debug.c:529
#, c-format
msgid "WARNING: source file `%s' modified since program compilation.\n"
-msgstr "WARNUNG: Quelldatei »%s« wurde seit der Programmübersetzung verändert.\n"
+msgstr ""
+"WARNUNG: Quelldatei »%s« wurde seit der Programmübersetzung verändert.\n"
#: debug.c:551
#, c-format
msgid "line number %d out of range; `%s' has %d lines"
-msgstr "die Zeilennummer %d ist außerhalb des gültigen Bereichs: »%s« hat %d Zeilen"
+msgstr ""
+"die Zeilennummer %d ist außerhalb des gültigen Bereichs: »%s« hat %d Zeilen"
#: debug.c:611
#, c-format
@@ -1431,7 +1566,8 @@ msgstr "»%s« ist keine skalare Variable"
#: debug.c:1258 debug.c:4994
#, c-format
msgid "attempt to use array `%s[\"%s\"]' in a scalar context"
-msgstr "Es wird versucht, das Feld »%s[\"%s\"]« in einem Skalarkontext zu verwenden"
+msgstr ""
+"Es wird versucht, das Feld »%s[\"%s\"]« in einem Skalarkontext zu verwenden"
#: debug.c:1280 debug.c:5005
#, c-format
@@ -1470,12 +1606,16 @@ msgstr "Es wird versucht, einen Skalar als Feld zu verwenden"
#: debug.c:1856
#, c-format
msgid "Watchpoint %d deleted because parameter is out of scope.\n"
-msgstr "Watchpoint %d wurde gelöscht, weil der Parameter außerhalb des Gültigkeitsbereichs ist.\n"
+msgstr ""
+"Watchpoint %d wurde gelöscht, weil der Parameter außerhalb des "
+"Gültigkeitsbereichs ist.\n"
#: debug.c:1867
#, c-format
msgid "Display %d deleted because parameter is out of scope.\n"
-msgstr "Anzuzeigendes Element %d wurde gelöscht, weil der Parameter außerhalb des Gültigkeitsbereichs ist.\n"
+msgstr ""
+"Anzuzeigendes Element %d wurde gelöscht, weil der Parameter außerhalb des "
+"Gültigkeitsbereichs ist.\n"
#: debug.c:1900
#, c-format
@@ -1504,7 +1644,9 @@ msgstr "Ungültige Rahmennummer"
#: debug.c:2200
#, c-format
msgid "Note: breakpoint %d (enabled, ignore next %ld hits), also set at %s:%d"
-msgstr "Hinweis: Breakpont %d (aktiv, ignoriert für die nächsten %ld Treffer) wird auch an %s:%d gesetzt"
+msgstr ""
+"Hinweis: Breakpont %d (aktiv, ignoriert für die nächsten %ld Treffer) wird "
+"auch an %s:%d gesetzt"
#: debug.c:2207
#, c-format
@@ -1514,7 +1656,9 @@ msgstr "Hinweis: Breakpont %d (aktiv) wird auch an %s:%d gesetzt"
#: debug.c:2214
#, c-format
msgid "Note: breakpoint %d (disabled, ignore next %ld hits), also set at %s:%d"
-msgstr "Hinweis: Breakpont %d (inaktiv, ignoriert für die nächsten %ld Treffer) wird auch von %s:%d gesetzt"
+msgstr ""
+"Hinweis: Breakpont %d (inaktiv, ignoriert für die nächsten %ld Treffer) wird "
+"auch von %s:%d gesetzt"
#: debug.c:2221
#, c-format
@@ -1586,7 +1730,8 @@ msgstr "j"
#: debug.c:2662
#, c-format
msgid "Will ignore next %ld crossing(s) of breakpoint %d.\n"
-msgstr "die nächsten %ld Überschreitungen von Breakpoint %d werden ignoriert.\n"
+msgstr ""
+"die nächsten %ld Überschreitungen von Breakpoint %d werden ignoriert.\n"
#: debug.c:2666
#, c-format
@@ -1596,7 +1741,9 @@ msgstr "wenn Breakpoint %d das nächste mal erreicht wird, wird angehalten\n"
#: debug.c:2783
#, c-format
msgid "Can only debug programs provided with the `-f' option.\n"
-msgstr "Es können nur Programme untersucht werden, die mittels der Option »-f« übergeben wurden.\n"
+msgstr ""
+"Es können nur Programme untersucht werden, die mittels der Option »-f« "
+"übergeben wurden.\n"
#: debug.c:2908
#, c-format
@@ -1620,7 +1767,8 @@ msgstr "Fehler: Neustart nicht möglich da die Operation verboten ist\n"
#: debug.c:2942
#, c-format
msgid "error (%s): cannot restart, ignoring rest of the commands\n"
-msgstr "Fehler (%s): Neustart nicht möglich, der Rest der Befehle wird ignoriert\n"
+msgstr ""
+"Fehler (%s): Neustart nicht möglich, der Rest der Befehle wird ignoriert\n"
#: debug.c:2950
#, c-format
@@ -1649,7 +1797,8 @@ msgstr "ungültige Breakpointnummer %d."
#: debug.c:3020
#, c-format
msgid "Will ignore next %ld crossings of breakpoint %d.\n"
-msgstr "Die nächsten %ld Überschreitungen von Breakpoint %d werden ignoriert.\n"
+msgstr ""
+"Die nächsten %ld Überschreitungen von Breakpoint %d werden ignoriert.\n"
#: debug.c:3207
#, c-format
@@ -1731,74 +1880,79 @@ msgstr "ungültige Zahl"
#: debug.c:5381
#, c-format
msgid "`%s' not allowed in current context; statement ignored"
-msgstr "»%s« ist im aktuellen Kontext nicht zulässig; der Ausdruck wird ignoriert"
+msgstr ""
+"»%s« ist im aktuellen Kontext nicht zulässig; der Ausdruck wird ignoriert"
#: debug.c:5389
msgid "`return' not allowed in current context; statement ignored"
-msgstr "»reeturn« ist im aktuellen Kontext nicht zulässig; der Ausdruck wird ignoriert"
+msgstr ""
+"»reeturn« ist im aktuellen Kontext nicht zulässig; der Ausdruck wird "
+"ignoriert"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Im aktuelln Kontext gibt es kein Symbol »%s«"
-#: dfa.c:998 dfa.c:1001 dfa.c:1021 dfa.c:1031 dfa.c:1043 dfa.c:1094 dfa.c:1103
-#: dfa.c:1106 dfa.c:1111 dfa.c:1124 dfa.c:1191
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "nicht geschlossene ["
-#: dfa.c:1052
+#: dfa.c:1119
msgid "invalid character class"
msgstr "ungültige Zeichenklasse"
-#: dfa.c:1228
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "Die Syntax für Zeichenklassen ist [[:space:]], nicht [:space:]"
-#: dfa.c:1280
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "nicht beendetes \\ Escape"
-#: dfa.c:1427 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Ungültiger Inhalt von \\{\\}"
-#: dfa.c:1430 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Regulärer Ausdruck ist zu groß"
-#: dfa.c:1847
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "nicht geschlossene ("
-#: dfa.c:1973
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "keine Syntax angegeben"
-#: dfa.c:1981
+#: dfa.c:2046
msgid "unbalanced )"
msgstr "nicht geöffnete )"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "Unbekannter Knotentyp %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "Unbekannter Opcode %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "Opcode %s ist weder ein Operator noch ein Schlüsselwort"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "Pufferüberlauf in genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1809,215 +1963,234 @@ msgstr ""
"\t# Funktions-Aufruf-Stack\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "»IGNORECASE« ist eine gawk-Erweiterung"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "»BINMODE« ist eine gawk-Erweiterung"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "BINMODE Wert »%s« ist ungültig und wird als 3 behandelt"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "Falsche »%sFMT«-Angabe »%s«"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "»--lint« wird abgeschaltet, da an »LINT« zugewiesen wird"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "Referenz auf nicht initialisiertes Argument »%s«"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "Referenz auf die nicht initialisierte Variable »%s«"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "Nicht numerischer Wert für Feldreferenz verwendet"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "Referenz auf ein Feld von einem Null-String"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "Versuch des Zugriffs auf Feld %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "Referenz auf das nicht initialisierte Feld »$%ld«"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "Funktion »%s« mit zu vielen Argumenten aufgerufen"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: unerwarteter Typ »%s«"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "Division durch Null versucht in »/=«"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "Division durch Null versucht in »%%=«"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "Erweiterungen sind im Sandbox-Modus nicht erlaubt"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load sind gawk-Erweiterungen"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: NULL lib_name erhalten"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: Bibliothek »%s« kann nicht geöffnet werden (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
-msgid "load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
-msgstr "load_ext: Bibliothek »%s«: definiert »plugin_is_GPL_compatible« nicht (%s)\n"
+msgid ""
+"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
+msgstr ""
+"load_ext: Bibliothek »%s«: definiert »plugin_is_GPL_compatible« nicht (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
-msgstr "load_ext: Bibliothek »%s«: Funktion »%s« kann nicht aufgerufen werden (%s)\n"
+msgstr ""
+"load_ext: Bibliothek »%s«: Funktion »%s« kann nicht aufgerufen werden (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
-msgstr "load_ext: die Initialisierungsroutine %2$s von Bibliothek »%1$s« ist gescheitert\n"
+msgstr ""
+"load_ext: die Initialisierungsroutine %2$s von Bibliothek »%1$s« ist "
+"gescheitert\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "»extension« ist eine gawk-Erweiterung"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "extension: NULL lib_name erhalten"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: Bibliothek »%s« kann nicht geöffnet werden (%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
-msgid "extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
-msgstr "extension: Bibliothek »%s«: definiert »plugin_is_GPL_compatible« nicht (%s)"
+msgid ""
+"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
+msgstr ""
+"extension: Bibliothek »%s«: definiert »plugin_is_GPL_compatible« nicht (%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
-msgstr "extension: Bibliothek »%s«: Funktion »%s« kann nicht aufgerufen werden (%s)"
+msgstr ""
+"extension: Bibliothek »%s«: Funktion »%s« kann nicht aufgerufen werden (%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: Funktionsname fehlt"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: Funktion »%s« kann nicht neu definiert werden"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: Funktion »%s« wurde bereits definiert"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: Funktion »%s« wurde bereits vorher definiert"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
-msgstr "make_builtin: die in gawk eingebaute Funktion »%s« kann nicht als Funktionsname verwendet werden"
+msgstr ""
+"make_builtin: die in gawk eingebaute Funktion »%s« kann nicht als "
+"Funktionsname verwendet werden"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: negative Anzahl von Argumenten für Funktion »%s«"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "Erweiterung: Funktionsname fehlt"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: unzulässiges Zeichen »%c« in Funktionsname »%s«"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: Funktion »%s« kann nicht neu definiert werden"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: Funktion »%s« wurde bereits definiert"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: Funktion »%s« wurde bereits vorher definiert"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
-msgstr "extension: die eingebaute Funktion »%s« kann nicht als Funktionsname verwendet werden"
+msgstr ""
+"extension: die eingebaute Funktion »%s« kann nicht als Funktionsname "
+"verwendet werden"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
-msgstr "Funktion »%s« wird als Funktion definiert, die nie mehr als %d Argument(e) akzeptiert"
+msgstr ""
+"Funktion »%s« wird als Funktion definiert, die nie mehr als %d Argument(e) "
+"akzeptiert"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "Funktion »%s«: fehlendes Argument #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
-msgstr "Funktion »%s«: Argument #%d: Es wird versucht, einen Skalar als Feld zu verwenden"
+msgstr ""
+"Funktion »%s«: Argument #%d: Es wird versucht, einen Skalar als Feld zu "
+"verwenden"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
-msgstr "Funktion »%s«: Argument #%d: Es wird versucht, ein Feld als Skalar zu verwenden"
+msgstr ""
+"Funktion »%s«: Argument #%d: Es wird versucht, ein Feld als Skalar zu "
+"verwenden"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "das dynamische Laden von Bibliotheken wird nicht unterstützt"
#: extension/filefuncs.c:159
msgid "chdir: called with incorrect number of arguments, expecting 1"
-msgstr "chdir: Aufgruf mit einer ungültigen Anzahl von Argumenten, 1 wird erwartet"
+msgstr ""
+"chdir: Aufgruf mit einer ungültigen Anzahl von Argumenten, 1 wird erwartet"
#: extension/filefuncs.c:439
#, c-format
@@ -2088,7 +2261,8 @@ msgstr "fts: ungültiger dritter Parameter\n"
#: extension/filefuncs.c:824
msgid "fts: ignoring sneaky FTS_NOSTAT flag. nyah, nyah, nyah."
-msgstr "fts: die heimtückische Kennung FTS_NOSTAT wird ignoriert, ätsch bätsch."
+msgstr ""
+"fts: die heimtückische Kennung FTS_NOSTAT wird ignoriert, ätsch bätsch."
#: extension/filefuncs.c:841
msgid "fts: clear_array() failed\n"
@@ -2120,7 +2294,8 @@ msgstr "fnmatch ist auf diesem System nicht implementiert\n"
#: extension/fnmatch.c:173
msgid "fnmatch init: could not add FNM_NOMATCH variable"
-msgstr "fnmatch_init: eine FNM_NOMATCH-Variable konnte nicht hinzu gefügt werden"
+msgstr ""
+"fnmatch_init: eine FNM_NOMATCH-Variable konnte nicht hinzu gefügt werden"
#: extension/fnmatch.c:183
#, c-format
@@ -2155,7 +2330,7 @@ msgstr "wait: Aufruf mit zu vielen Argumenten"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: direktes Editieren ist bereits aktiv"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin: erwartet 2 Argumente aber wurde aufgerufen mit %d"
@@ -2167,7 +2342,9 @@ msgstr "inplace_begin: das erste Argument ist kein Dateiname"
#: extension/inplace.c:144
#, c-format
msgid "inplace_begin: disabling in-place editing for invalid FILENAME `%s'"
-msgstr "inplace_begin: direktes Editieren wird deaktiviert wegen des ungültigen Dateinamens »%s«"
+msgstr ""
+"inplace_begin: direktes Editieren wird deaktiviert wegen des ungültigen "
+"Dateinamens »%s«"
#: extension/inplace.c:151
#, c-format
@@ -2184,55 +2361,55 @@ msgstr "inplace_begin: »%s« ist keine reguläre Datei"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: mkstemp(»%s«) ist gescheitert (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin:: chmod ist gescheitert (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: dup(stdout) ist gescheitert (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: dup2(%d, stdout) ist gescheitert (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin: close(%d) ist gescheitert (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr "inplace_end: das erste Argument ist kein Dateiname"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: direktes Editieren ist nicht aktiv"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: dup2(%d, stdout) ist gescheitert (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: close(%d) ist gescheitert (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: fsetpos(stdout) ist gescheitert (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: link(»%s«, »%s«) ist gescheitert (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: rename(»%s«, »%s«) ist gescheitert (%s)"
@@ -2261,165 +2438,181 @@ msgstr "chr: Aufruf ohne Argumente"
msgid "chr: called with inappropriate argument(s)"
msgstr "chr: Aufruf mit ungeeigneten Argumenten"
-#: extension/readdir.c:277
+#: extension/readdir.c:281
#, c-format
msgid "dir_take_control_of: opendir/fdopendir failed: %s"
msgstr "dir_take_control_of: opendir/fdopendir ist gescheitert: %s"
-#: extension/readfile.c:84
+#: extension/readfile.c:113
msgid "readfile: called with too many arguments"
msgstr "readfile: Aufruf mit zu vielen Argumenten"
-#: extension/readfile.c:118
+#: extension/readfile.c:137
msgid "readfile: called with no arguments"
msgstr "readfile: Aufruf ohen Argumente"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: Aufruf mit zu vielen Argumenten"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: das Argument 0 ist keine Zeichenkette\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: das Argument 1 ist kein Feld\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: das Feld konnte nicht niveliert werden\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: das nivelierte Feld konnte nicht frei gegeben werden\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: Aufruf mit zu vielen Argumenten"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: Argument 0 ist keine Zeichenkette\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: Argument 1 ist kein Feld\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array ist gescheitert\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element ist gescheitert\n"
-#: extension/time.c:106
+#: extension/time.c:113
msgid "gettimeofday: ignoring arguments"
msgstr "gettimeofday: die Argumente werden ignoriert"
-#: extension/time.c:137
+#: extension/time.c:144
msgid "gettimeofday: not supported on this platform"
msgstr "gettimeofday: wird auf dieser Plattform nicht unterstützt"
-#: extension/time.c:158
+#: extension/time.c:165
msgid "sleep: called with too many arguments"
msgstr "sleep: Aufruf mit zu vielen Argumenten"
-#: extension/time.c:161
+#: extension/time.c:168
msgid "sleep: missing required numeric argument"
msgstr "sleep: das erforderliche numerische Argument fehlt"
-#: extension/time.c:167
+#: extension/time.c:174
msgid "sleep: argument is negative"
msgstr "sleep: das Argument ist negativ"
-#: extension/time.c:201
+#: extension/time.c:208
msgid "sleep: not supported on this platform"
msgstr "sleep: wird auf dieser Plattform nicht unterstützt"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF wird ein negativer Wert zugewiesen"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: das vierte Argument ist eine gawk-Erweiterung"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: das vierte Argument ist kein Feld"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: das zweite Argument ist kein Feld"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
-msgstr "split: als zweites und viertes Argument kann nicht das gleiche Feld verwendet werden"
+msgstr ""
+"split: als zweites und viertes Argument kann nicht das gleiche Feld "
+"verwendet werden"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
-msgstr "split: Ein untergeordnetes Feld des zweiten Arguments kann nicht als viertes Argument verwendet werden"
+msgstr ""
+"split: Ein untergeordnetes Feld des zweiten Arguments kann nicht als viertes "
+"Argument verwendet werden"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
-msgstr "split: Ein untergeordnetes Feld des vierten Arguments kann nicht als zweites Argument verwendet werden"
+msgstr ""
+"split: Ein untergeordnetes Feld des vierten Arguments kann nicht als zweites "
+"Argument verwendet werden"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: Null-String als drittes Argument ist eine gawk-Erweiterung"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: Das vierte Argument ist kein Feld"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: Das zweite Argument ist kein Feld"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: Das dritte Argument darf nicht Null sein"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
-msgstr "patsplit: als zweites und viertes Argument kann nicht das gleiche Feld verwendet werden"
+msgstr ""
+"patsplit: als zweites und viertes Argument kann nicht das gleiche Feld "
+"verwendet werden"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
-msgstr "patsplit: Ein untergeordnetes Feld des zweiten Arguments kann nicht als viertes Argument verwendet werden"
+msgstr ""
+"patsplit: Ein untergeordnetes Feld des zweiten Arguments kann nicht als "
+"viertes Argument verwendet werden"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
-msgstr "patsplit: Ein untergeordnetes Feld des vierten Arguments kann nicht als zweites Argument verwendet werden"
+msgstr ""
+"patsplit: Ein untergeordnetes Feld des vierten Arguments kann nicht als "
+"zweites Argument verwendet werden"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "»FIELDWIDTHS« ist eine gawk-Erweiterung"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "ungültiger FIELDWIDTHS-Wert nah bei »%s«"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "Null-String für »FS« ist eine gawk-Erweiterung"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "Das alte awk unterstützt keine regulären Ausdrücke als Wert von »FS«"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "»FPAT« ist eine gawk-Erweiterung"
@@ -2435,20 +2628,20 @@ msgstr "node_to_awk_value: Null-Knoten erhalten"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: Null-Wert erhalten"
-#: gawkapi.c:808
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: Null-Feld erhalten"
-#: gawkapi.c:811
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: Null-Index erhalten"
-#: gawkapi.c:948
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: Index %d konnte nicht umgewandelt werden\n"
-#: gawkapi.c:953
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: Wert %d konnte nicht umgewandelt werden\n"
@@ -2508,500 +2701,503 @@ msgstr "%s: Die Option »-W %s« hat keine Argumente\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: Die Option »-W %s« erfordert ein Argument\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
-msgstr "das Kommandozeilen-Argument »%s« ist ein Verzeichnis: wird übersprungen"
+msgstr ""
+"das Kommandozeilen-Argument »%s« ist ein Verzeichnis: wird übersprungen"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "Die Datei »%s« kann nicht zum Lesen geöffnet werden (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "Das Schließen des Dateideskriptors %d (»%s«) ist gescheitert (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "Umlenkungen sind im Sandbox-Modus nicht erlaubt"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
-msgstr "Der Ausdruck in einer Umlenkung mittels »%s« hat nur einen numerischen Wert"
+msgstr ""
+"Der Ausdruck in einer Umlenkung mittels »%s« hat nur einen numerischen Wert"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "Der Ausdruck für eine Umlenkung mittels »%s« ist ein leerer String"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
-msgstr "Der Dateiname »%s« für eine Umlenkung mittels »%s« kann das Ergebnis eines logischen Ausdrucks sein"
+msgstr ""
+"Der Dateiname »%s« für eine Umlenkung mittels »%s« kann das Ergebnis eines "
+"logischen Ausdrucks sein"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "Unnötige Kombination von »>« und »>>« für Datei »%.*s«"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "Die Pipe »%s« kann nicht für die Ausgabe geöffnet werden (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "Die Pipe »%s« kann nicht für die Eingabe geöffnet werden (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
-msgstr "Die bidirektionale Pipe »%s« kann nicht für die Ein-/Ausgabe geöffnet werden (%s)"
+msgstr ""
+"Die bidirektionale Pipe »%s« kann nicht für die Ein-/Ausgabe geöffnet werden "
+"(%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "Von »%s« kann nicht umgelenkt werden (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "Zu »%s« kann nicht umgelenkt werden (%s)"
-#: io.c:1040
-msgid "reached system limit for open files: starting to multiplex file descriptors"
-msgstr "Die Systemgrenze offener Dateien ist erreicht, daher werden nun Dateideskriptoren mehrfach verwendet"
+#: io.c:1073
+msgid ""
+"reached system limit for open files: starting to multiplex file descriptors"
+msgstr ""
+"Die Systemgrenze offener Dateien ist erreicht, daher werden nun "
+"Dateideskriptoren mehrfach verwendet"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "Das Schließen von »%s« ist gescheitert (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "Zu viele Pipes oder Eingabedateien offen"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: Das zweite Argument muss »to« oder »from« sein"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: »%.*s« ist weder offene Datei, noch Pipe oder Ko-Prozess"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "»close« für eine Umlenkung, die nie geöffnet wurde"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
-msgstr "close: Umlenkung »%s« wurde nicht mit »[&« geöffnet, das zweite Argument wird ignoriert"
+msgstr ""
+"close: Umlenkung »%s« wurde nicht mit »[&« geöffnet, das zweite Argument "
+"wird ignoriert"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "Fehlerstatus (%d) beim Schließen der Pipe »%s« (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "Fehlerstatus (%d) beim Schließen der Datei »%s« (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "Das explizite Schließen des Sockets »%s« fehlt"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "Das explizite Schließen des Ko-Prozesses »%s« fehlt"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "Das explizite Schließen der Pipe »%s« fehlt"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "Das explizite Schließen der Datei »%s« fehlt"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "Fehler beim Schreiben auf die Standardausgabe (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "Fehler beim Schreiben auf die Standardfehlerausgabe (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "Das Leeren der Pipe »%s« ist gescheitert (%s)"
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "Ko-Prozess: Das Leeren der Pipe zu »%s« ist gescheitert (%s)"
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "Das Leeren der Datei »%s« ist gescheitert (%s)"
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "Der lokale Port »%s« ist ungültig in »/inet«"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "Die Angaben zu entferntem Host und Port (%s, %s) sind ungültig"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "Es wurde kein (bekanntes) Protokoll im Dateinamen »%s« angegeben"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "Der Dateiname »%s« ist unvollständig"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "Sie müssen in /inet einen Rechnernamen angeben"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "Sie müssen in »/inet« einen Port angeben"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "TCP/IP-Verbindungen werden nicht unterstützt"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "»%s« konnte nicht geöffnet werden, Modus »%s«"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
-msgstr "Das Schließen der übergeordneten Terminal-Gerätedatei ist gescheitert (%s)"
+msgstr ""
+"Das Schließen der übergeordneten Terminal-Gerätedatei ist gescheitert (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "Das Schließen der Standardausgabe im Kindprozess ist gescheitert (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
-msgstr "Das Verschieben der untergeordneten Terminal-Gerätedatei zur Standardausgabe im Kindprozess ist gescheitert (dup: %s)"
+msgstr ""
+"Das Verschieben der untergeordneten Terminal-Gerätedatei zur Standardausgabe "
+"im Kindprozess ist gescheitert (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "Schließen von stdin im Kindprozess gescheitert (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
-msgstr "Das Verschieben der untergeordneten Terminal-Gerätedatei zur Standardeingabe im Kindprozess ist gescheitert (dup: %s)"
+msgstr ""
+"Das Verschieben der untergeordneten Terminal-Gerätedatei zur Standardeingabe "
+"im Kindprozess ist gescheitert (dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
-msgstr "Das Schließen der untergeordneten Terminal-Gerätedatei ist gescheitert (%s)"
+msgstr ""
+"Das Schließen der untergeordneten Terminal-Gerätedatei ist gescheitert (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
-msgstr "Das Verschieben der Pipe zur Standardausgabe im Kindprozess ist gescheitert (dup: %s)"
+msgstr ""
+"Das Verschieben der Pipe zur Standardausgabe im Kindprozess ist gescheitert "
+"(dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
-msgstr "Das Verschieben der Pipe zur Standardeingabe im Kindprozess ist gescheitert (dup: %s)"
+msgstr ""
+"Das Verschieben der Pipe zur Standardeingabe im Kindprozess ist gescheitert "
+"(dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
-msgstr "Das Wiederherstellen der Standardausgabe im Elternprozess ist gescheitert\n"
+msgstr ""
+"Das Wiederherstellen der Standardausgabe im Elternprozess ist gescheitert\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
-msgstr "Das Wiederherstellen der Standardeingabe im Elternprozess ist gescheitert\n"
+msgstr ""
+"Das Wiederherstellen der Standardeingabe im Elternprozess ist gescheitert\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "Das Schließen der Pipe ist gescheitert (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "»|&« wird nicht unterstützt"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "Pipe »%s« kann nicht geöffnet werden (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "Kindprozess für »%s« kann nicht erzeugt werden (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: NULL-Zeiger erhalten"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
-msgstr "Eingabeparser »%s« steht im Konflikt mit dem vorher installierten Eingabeparser »%s«"
+msgstr ""
+"Eingabeparser »%s« steht im Konflikt mit dem vorher installierten "
+"Eingabeparser »%s«"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "Eingabeparser »%s« konnte »%s« nicht öffnen"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: NULL-Zeiger erhalten"
-#: io.c:2873
+#: io.c:2817
#, c-format
-msgid "output wrapper `%s' conflicts with previously installed output wrapper `%s'"
+msgid ""
+"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr "Ausgabeverpackung »%s« steht im Konflikt mit Ausgabeverpackung »%s«"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "Ausgabeverpackung »%s« konnte »%s« nicht öffnen"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: NULL-Zeiger erhalten"
-#: io.c:2930
+#: io.c:2874
#, c-format
-msgid "two-way processor `%s' conflicts with previously installed two-way processor `%s'"
+msgid ""
+"two-way processor `%s' conflicts with previously installed two-way processor "
+"`%s'"
msgstr "Zweiwegeprozessor »%s« steht im Konflikt mit Zweiwegeprozessor »%s«"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "Zweiwegeprozessor »%s« konnte »%s« nicht öffnen"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "Die Datei »%s« ist leer"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "Es konnte kein weiterer Speicher für die Eingabe beschafft werden"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "Multicharacter-Wert von »RS« ist eine gawk-Erweiterung"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "IPv6-Verbindungen werden nicht unterstützt"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "Das leere Argument für »--source« wird ignoriert"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: Die Option »-W %s« ist unbekannt und wird ignoriert\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: Die Option %c erfordert ein Argument\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
-msgstr "Die Umgebungsvariable »POSIXLY_CORRECT« ist gesetzt: »--posix« wird eingeschaltet"
+msgstr ""
+"Die Umgebungsvariable »POSIXLY_CORRECT« ist gesetzt: »--posix« wird "
+"eingeschaltet"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "»--posix« hat Vorrang vor »--traditional«"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "»--posix« /»--traditional« hat Vorrang vor »--non-decimal-data«"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "%s als setuid root auszuführen kann zu Sicherheitsproblemen führen"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "»--posix« hat Vorrang vor »--characters-as-bytes«"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
-msgstr "Das Setzen des Binärermodus für die Standardeingabe ist nicht möglich (%s)"
+msgstr ""
+"Das Setzen des Binärermodus für die Standardeingabe ist nicht möglich (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
-msgstr "Das Setzen des Binärermodus für die Standardausgabe ist nicht möglich (%s)"
+msgstr ""
+"Das Setzen des Binärermodus für die Standardausgabe ist nicht möglich (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
-msgstr "Das Setzen des Binärermodus für die Standardfehlerausgabe ist nicht möglich (%s)"
+msgstr ""
+"Das Setzen des Binärermodus für die Standardfehlerausgabe ist nicht möglich "
+"(%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "Es wurde überhaupt kein Programmtext angegeben!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr "Aufruf: %s [POSIX- oder GNU-Optionen] -f PROGRAMM [--] Datei ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr "Aufruf: %s [POSIX- oder GNU-Optionen] -- %cPROGRAMM%c Datei ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "POSIX-Optionen\t\tlange GNU-Optionen: (standard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f PROGRAMM\t\t--file=PROGRAMM\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F Feldtrenner\t\t\t--field-separator=Feldtrenner\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=Wert\t\t--assign=var=Wert\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "POSIX-Optionen\t\tGNU-Optionen (lang): (Erweiterungen)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d [Datei]\t\t--dump-variables[=Datei]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[Datei]\t\t--debug[=Datei]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'Programmtext'\t--source=Programmtext\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E Datei\t\t\t--exec=Datei\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i einzubindende_datei\t\t--include=einzubindende_datei\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l Bibliothek\t\t--load=Bibliothek\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[Datei]\t\t--pretty-print[=Datei]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p [Datei]\t\t--profile[=Datei]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3010,7 +3206,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3026,7 +3222,7 @@ msgstr ""
"translation-team-de@lists.sourceforge.net\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3037,7 +3233,7 @@ msgstr ""
"auf der Standardausgabe aus.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3047,7 +3243,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3067,7 +3263,7 @@ msgstr ""
"spätere Version.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3080,7 +3276,7 @@ msgstr ""
"leistung einer HANDELBARKEIT oder der EIGNUNG FÃœR EINEN BESTIMMTEN ZWECK.\n"
"Sehen Sie bitte die GNU General Public License für weitere Details.\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3089,16 +3285,16 @@ msgstr ""
"diesem Programm erhalten haben. Wenn nicht, lesen Sie bitte\n"
"http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft setzt FS im POSIX-awk nicht auf Tab"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "unbekannter Wert für eine Feldangabe: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3107,148 +3303,184 @@ msgstr ""
"%s: Argument »%s« von »-v« ist nicht in der Form »Variable=Wert«\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "»%s« ist kein gültiger Variablenname"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "»%s« ist kein Variablenname, es wird nach der Datei »%s=%s« gesucht"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
-msgstr "die eingebaute Funktion »%s« kann nicht als Variablenname verwendet werden"
+msgstr ""
+"die eingebaute Funktion »%s« kann nicht als Variablenname verwendet werden"
# c-format
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "Funktion »%s« kann nicht als Name einer Variablen verwendet werden"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "Fließkomma-Ausnahme"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "Fataler Fehler: interner Fehler"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "Fataler Fehler: interner Fehler: Speicherbegrenzungsfehler"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "Fataler Fehler: interner Fehler: Stapelüberlauf"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "Kein bereits geöffneter Dateideskriptor %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "/dev/null konnte nicht für Dateideskriptor %d geöffnet werden"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "Das leere Argument für »--source« wird ignoriert"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: Die Option »-W %s« ist unbekannt und wird ignoriert\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Die Option %c erfordert ein Argument\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "PREC Wert »%.*s« ist ungültig"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "BINMODE Wert »%.*s« ist ungültig"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: das Argument ist keine Zahl"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): ein negativer Wert wird zu merkwürdigen Ergebnissen führen"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): Dezimalteil wird abgeschnitten"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "cmpl(%Zd): Negative Werte führen zu merkwürdigen Ergebnissen"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: das Argument Nr. %d ist keine Zahl"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
-msgstr "%s: Argument Nr. %d hat den ungültigen Wert %Rg, es wird stattdessen 0 verwendet"
+msgstr ""
+"%s: Argument Nr. %d hat den ungültigen Wert %Rg, es wird stattdessen 0 "
+"verwendet"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
-msgstr "%s: der negative Wert %2$Rg in Argument Nr. %1$d wird zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"%s: der negative Wert %2$Rg in Argument Nr. %1$d wird zu merkwürdigen "
+"Ergebnissen führen"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: der Nachkommateil %2$Rg in Argument Nr. %1$d wird abgeschnitten"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
-msgstr "%1$s: der negative Wert %3$Zd in Argument Nr. %2$d wird zu merkwürdigen Ergebnissen führen"
+msgstr ""
+"%1$s: der negative Wert %3$Zd in Argument Nr. %2$d wird zu merkwürdigen "
+"Ergebnissen führen"
#: msg.c:68
#, c-format
msgid "cmd. line:"
msgstr "Kommandozeile:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "Backslash am Ende der Zeichenkette"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "Das alte awk unterstützt die Escapesequenz »\\%c« nicht"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX erlaubt keine »\\x«-Escapes"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "In der »\\x«-Fluchtsequenz sind keine hexadezimalen Zahlen"
-#: node.c:579
+#: node.c:567
#, c-format
-msgid "hex escape \\x%.*s of %d characters probably not interpreted the way you expect"
-msgstr "Die Hex-Sequenz \\x%.*s aus %d Zeichen wird wahrscheinlich nicht wie gewünscht interpretiert"
+msgid ""
+"hex escape \\x%.*s of %d characters probably not interpreted the way you "
+"expect"
+msgstr ""
+"Die Hex-Sequenz \\x%.*s aus %d Zeichen wird wahrscheinlich nicht wie "
+"gewünscht interpretiert"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "Fluchtsequenz »\\%c« wird wie ein normales »%c« behandelt"
-#: node.c:739
-msgid "Invalid multibyte data detected. There may be a mismatch between your data and your locale."
-msgstr "Es wurden unbekannte Multibyte-Daten gefunden. Ihre Daten entsprechen neventuell nicht der gesetzten Locale"
+#: node.c:726
+msgid ""
+"Invalid multibyte data detected. There may be a mismatch between your data "
+"and your locale."
+msgstr ""
+"Es wurden unbekannte Multibyte-Daten gefunden. Ihre Daten entsprechen "
+"neventuell nicht der gesetzten Locale"
#: posix/gawkmisc.c:177
#, c-format
msgid "%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)"
-msgstr "%s %s »%s«: Die Kennungen des Dateideskriptors konnten nicht abgefragt werden: (fcntl F_GETFD: %s)"
+msgstr ""
+"%s %s »%s«: Die Kennungen des Dateideskriptors konnten nicht abgefragt "
+"werden: (fcntl F_GETFD: %s)"
#: posix/gawkmisc.c:189
#, c-format
msgid "%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)"
-msgstr "%s %s »%s«: close-on-exec konnte nicht gesetzt werden: (fcntl F_SETFD: %s)"
+msgstr ""
+"%s %s »%s«: close-on-exec konnte nicht gesetzt werden: (fcntl F_SETFD: %s)"
#: profile.c:71
#, c-format
@@ -3260,12 +3492,12 @@ msgid "sending profile to standard error"
msgstr "Das Profil wird auf der Standardfehlerausgabe ausgegeben"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s Blöcke\n"
+"\t# Regeln(s)\n"
"\n"
#: profile.c:198
@@ -3282,11 +3514,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "Interner Fehler: %s mit null vname"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "Interner Fehler: eingebaute Fuktion mit leerem fname"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3295,12 +3527,12 @@ msgstr ""
"\t# Erweiterungen geladen (-l und/oder @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# gawk-Profil, erzeugt %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3309,7 +3541,7 @@ msgstr ""
"\n"
"\t# Funktionen in alphabetischer Reihenfolge\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: unbekannter Umlenkungstyp %d"
@@ -3317,72 +3549,109 @@ msgstr "redir2str: unbekannter Umlenkungstyp %d"
#: re.c:607
#, c-format
msgid "regexp component `%.*s' should probably be `[%.*s]'"
-msgstr "Regulärer-Ausdruck-Komponente »%.*s« sollte wahrscheinlich »[%.*s]« sein"
+msgstr ""
+"Regulärer-Ausdruck-Komponente »%.*s« sollte wahrscheinlich »[%.*s]« sein"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Erfolg"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Kein Treffer"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Ungültiger Regulärer Ausdruck"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Ungültiges Zeichen"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Ungültiger Name für eine Zeichenklasse"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Angehängter Backslash"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Ungültige Rück-Referenz"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "[ oder [^ werden nicht geschlossen"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "( oder \\( werden nicht geschlossen"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "\\{ wird nicht geschlossen"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Ungültiger Inhalt von \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Ungültiges Bereichsende"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Kein freier Speicher mehr vorhanden"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Vorangehender regulärer Ausdruck ist ungültig"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Vorzeitiges Ende des regulären Ausdrucks"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Regulärer Ausdruck ist zu groß"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ") oder \\) werden nicht geöffnet"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Kein vorangehender regulärer Ausdruck"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "Funktion »%s«: Funktionsnamen können nicht als Parameternamen benutzen"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "der Hauptkontext kann nicht entfernt werden"
+
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "»getline var« ist ungültig innerhalb der »%s«-Regel"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr "Es wurde kein (bekanntes) Protokoll im Dateinamen »%s« angegeben"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "Der Dateiname »%s« ist unvollständig"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "Sie müssen in /inet einen Rechnernamen angeben"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "Sie müssen in »/inet« einen Port angeben"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s Blöcke\n"
+#~ "\n"
diff --git a/po/es.gmo b/po/es.gmo
index 0bfebbae..09828034 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index d16109a9..9c8c9064 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.0.0h\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2012-01-30 07:42-0600\n"
"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -35,9 +35,9 @@ msgstr "se intentó usar el parámetro escalar `%s como una matriz'"
msgid "attempt to use scalar `%s' as an array"
msgstr "se intentó usar el escalar `%s' como una matriz"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "se intentó usar la matriz `%s' en un contexto escalar"
@@ -97,421 +97,426 @@ msgstr ""
"asorti: no se puede usar una submatriz del segundo argumento para el primer "
"argumento"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "`%s' es inválido como un nombre de función"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "la función de comparación de ordenamiento `%s' no está definida"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "los bloques %s deben tener una parte de acción"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "cada regla debe tener un patrón o una parte de acción"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "el awk antiguo no admite múltiples reglas `BEGIN' o `END'"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "`%s' es una función interna, no se puede redefinir"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
"la constante de expresión regular `//' parece un comentario de C++, pero no "
"lo es"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
"la constante de expresión regular `/%s/' parece un comentario de C, pero no "
"lo es"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "valores case duplicados en el cuerpo de un switch: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "se detectó un `default' duplicado en el cuerpo de un switch"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "no se permite `break' fuera de un bucle o switch"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "no se permite `continue' fuera de un bucle"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "se usó `next' en la acción %s"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "se usó `nextfile' en la acción %s"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "se usó `return' fuera del contexto de la función"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"el `print' simple en la regla BEGIN o END probablemente debe ser `print \"\"'"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr ""
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr ""
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "`delete(array)' es una extensión de tawk que no es transportable"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "las líneas de trabajo de dos vías multiestado no funcionan"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "expresión regular del lado derecho de una asignación"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "expresión regular a la izquierda del operador `~' o `!~'"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr ""
"el awk antiguo no admite la palabra clave `in' excepto después de `for'"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "expresión regular a la derecha de una comparación"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "`getline var' inválido dentro de la regla `%s'"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "`getline' inválido dentro de la regla `%s'"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr "`getline' no redirigido es inválido dentro de la regla `%s'"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "`getline' no redirigido indefinido dentro de la acción de END"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "el awk antiguo no admite matrices multidimensionales"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "la llamada de `length' sin paréntesis no es transportable"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "las llamadas indirectas a función son una extensión de gawk"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"no se puede usar la variable especial `%s' como llamada indirecta a función"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "se intentó usar la función `%s' como una matriz"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "expresión de subíndice inválida"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "aviso: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fatal: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "nueva línea o fin de la cadena inesperados"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "no se puede abrir el fichero fuente `%s' para lectura (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, fuzzy, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "no se puede abrir el fichero fuente `%s' para lectura (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "razón desconocida"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr ""
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "ya se incluyó el fichero fuente `%s'"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, fuzzy, c-format
msgid "already loaded shared library `%s'"
msgstr "ya se incluyó el fichero fuente `%s'"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include es una extensión de gawk"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "nombre de fichero vacío después de @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
#, fuzzy
msgid "@load is a gawk extension"
msgstr "@include es una extensión de gawk"
-#: awkgram.y:2500
+#: awkgram.y:2509
#, fuzzy
msgid "empty filename after @load"
msgstr "nombre de fichero vacío después de @include"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "texto de programa vacío en la linea de órdenes"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "no se puede leer el fichero fuente `%s' (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "el fichero fuente `%s' está vacío"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "el fichero fuente no termina con línea nueva"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "expresión regular sin terminar termina con `\\` al final del fichero"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"%s: %d: el modificador de expresión regular `/.../%c` de tawk no funciona en "
"gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"el modificador de expresión regular `/.../%c` de tawk no funciona en gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "expresión regular sin terminar"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "expresión regular sin terminar al final del fichero"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "el uso de la continuación de línea `\\ #...' no es transportable"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "la barra invertida no es el último caracter en la línea"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX no permite el operador `**='"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "el awk antiguo no admite el operador `**='"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX no permite el operador `**'"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "el awk antiguo no admite el operador `**='"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "el operador `^=' no se admite en el awk antiguo"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "el operador `^' no se admite en el awk antiguo"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "cadena sin terminar"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "caracter '%c' inválido en la expresión"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "`%s' es una extensión de gawk"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX no permite `%s'"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "`%s' no se admite en el awk antiguo"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "¡`goto' se considera dañino!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d es inválido como número de argumentos para %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s: la literal de cadena como último argumento de substitute no tiene efecto"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "el tercer argumento de %s no es un objecto modificable"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: el tercer argumento es una extensión de gawk"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: el segundo argumento es una extensión de gawk"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"el uso de dcgettext(_\"...\") es incorrecto: quite el subrayado inicial"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"el uso de dcngettext(_\"...\") es incorrecto: quite el subrayado inicial"
-#: awkgram.y:4016
+#: awkgram.y:4044
#, fuzzy
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: el segundo argumento recibido no es una cadena"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "función `%s': parámetro `%s' oscurece la variable global"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "no se puede abrir `%s' para escritura (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "se envía la lista de variables a la salida estándar de error"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: falló close (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "¡se llamó shadow_funcs() dos veces!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "hay variables opacadas."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "el nombre de función `%s' se definió previamente"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr ""
"función `%s': no se puede usar un nombre de función como nombre de parámetro"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"función `%s': no se puede usar la variable especial `%s' como un parámetro "
"de función"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "función `%s': parámetro #%d, `%s', duplica el parámetro #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "se llamó a la función `%s' pero nunca se definió"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "se definió la función `%s' pero nunca se llamó directamente"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr ""
"la constante de expresión regular para el parámetro #%d da un valor booleano"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -520,21 +525,21 @@ msgstr ""
"se llamó la función `%s' con espacio entre el nombre y el `(',\n"
"o se usó como una variable o una matriz"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "se intentó una división por cero"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "se intentó una división por cero en `%%'"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
-#: awkgram.y:5052
+#: awkgram.y:5006
#, fuzzy, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "%d es inválido como número de argumentos para %s"
@@ -576,197 +581,207 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: `%s' no es un fichero abierto, tubería o co-proceso"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: el primer argumento recibido no es una cadena"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: el segundo argumento recibido no es una cadena"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: se recibió un argumento que no es númerico"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: se recibió un argumento de matriz"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "`length(array)' es una extensión de gawk"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: se recibió un argumento que no es una cadena"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: se recibió un argumento que no es númerico"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: se recibió el argumento negativo %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "fatal: se debe utilizar `count$' en todos los formatos o en ninguno"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "se descarta la anchura del campo para el especificador `%%'"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "se descarta la precisión para el especificador `%%'"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr ""
"se descartan la anchura del campo y la precisión para el especificador `%%'"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "fatal: no se permite `$' en los formatos de awk"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fatal: la cuenta de argumentos con `$' debe ser > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
"fatal: la cuenta de argumentos %ld es mayor que el número total de "
"argumentos proporcionados"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "fatal: no se permite `$' después de un punto en el formato"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"fatal: no se proporciona `$' para la anchura o la precisión del campo "
"posicional"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "`l' no tiene significado en los formatos de awk; se descarta"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "fatal: no se permite `l' en los formatos POSIX de awk"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "`L' no tiene significado en los formatos de awk; se descarta"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "fatal: no se permite `L' en los formatos POSIX de awk"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "`h' no tiene significado en los formatos de awk; se descarta"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "fatal: no se permite `h' en los formatos POSIX de awk"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: el valor %g está fuera del rango para el formato `%%%c'"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: el valor %g está fuera del rango para el formato `%%%c'"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: el valor %g está fuera del rango para el formato `%%%c'"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"se descarta el carácter especificador de formato `%c' desconocido: no se "
"convirtió ningún argumento"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr ""
"fatal: no hay suficientes argumentos para satisfacer a la cadena de formato"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "se acabó ^ para éste"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: el especificador de formato no tiene letras de control"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "se proporcionaron demasiados argumentos para la cadena de formato"
-#: builtin.c:1634
+#: builtin.c:1625
#, fuzzy
msgid "sprintf: no arguments"
msgstr "printf: sin argumentos"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: sin argumentos"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: se recibió un argumento que no es un númerico"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: la longitud %g no es >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: la longitud %g no es >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: se truncará la longitud no entera %g"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
"substr: la longitud %g es demasiado grande para ser índice de cadena, se "
"trunca a %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: el índice de inicio %g es inválido, se usa 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: se truncará el índice de inicio no entero %g"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: la cadena de origen es de longitud cero"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: el índice de inicio %g está después del fin de la cadena"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -774,196 +789,202 @@ msgstr ""
"substr: la cadena %g en el índice de inicio %g excede la longitud del primer "
"argumento (%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
"strftime: el valor de formato en PROCINFO[\"strftime\"] tiene tipo numérico"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: el segundo argumento recibido no es númerico"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr ""
"strftime: el segundo argumento es menor que 0 o demasiado grande para time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: el primer argumento recibido no es una cadena"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: se recibió una cadena de formato vacía"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: se recibió un argumento que no es una cadena"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr ""
"mktime: por lo menos uno de los valores está fuera del rango por defecto"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "no se permite la función 'system' en modo sandbox"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: se recibió un argumento que no es una cadena"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "referencia al campo sin inicializar `$%d'"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: se recibió un argumento que no es una cadena"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: se recibió un argumento que no es una cadena"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: el primer argumento recibido no es númerico"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: el segundo argumento recibido no es númerico"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: se recibió un argumento que no es númerico"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: se recibió un argumento que no es númerico"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: se recibió un argumento que no es númerico"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: el tercer argumento no es una matriz"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
+msgstr "gensub: el tercer argumento de 0 se trata como 1"
+
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
msgstr "gensub: el tercer argumento de 0 se trata como 1"
-#: builtin.c:3030
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: el primer argumento recibido no es númerico"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: el segundo argumento recibido no es númerico"
-#: builtin.c:3038
+#: builtin.c:3028
#, fuzzy, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%lf, %lf): los valores negativos darán resultados extraños"
-#: builtin.c:3040
+#: builtin.c:3030
#, fuzzy, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%lf, %lf): los valores fraccionarios se truncarán"
-#: builtin.c:3042
+#: builtin.c:3032
#, fuzzy, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr ""
"lshift(%lf, %lf): un valor de desplazamiento muy grande dará resultados "
"extraños"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: el primer argumento recibido no es númerico"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: el segundo argumento recibido no es númerico"
-#: builtin.c:3075
+#: builtin.c:3065
#, fuzzy, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%lf, %lf): los valores negativos darán resultados extraños"
-#: builtin.c:3077
+#: builtin.c:3067
#, fuzzy, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%lf, %lf): los valores fraccionarios serán truncados"
-#: builtin.c:3079
+#: builtin.c:3069
#, fuzzy, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
"rshift(%lf, %lf): un valor de desplazamiento muy grande dará resultados "
"extraños"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
#, fuzzy
msgid "and: called with less than two arguments"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: builtin.c:3109
+#: builtin.c:3099
#, fuzzy, c-format
msgid "and: argument %d is non-numeric"
msgstr "exp: el argumento %g está fuera de rango"
-#: builtin.c:3113
+#: builtin.c:3103
#, fuzzy, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and(%lf, %lf): los valores negativos darán resultados extraños"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
#, fuzzy
msgid "or: called with less than two arguments"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: builtin.c:3141
+#: builtin.c:3131
#, fuzzy, c-format
msgid "or: argument %d is non-numeric"
msgstr "exp: el argumento %g está fuera de rango"
-#: builtin.c:3145
+#: builtin.c:3135
#, fuzzy, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "compl(%lf): el valor negativo dará resultados extraños"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
#, fuzzy
msgid "xor: called with less than two arguments"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: builtin.c:3173
+#: builtin.c:3163
#, fuzzy, c-format
msgid "xor: argument %d is non-numeric"
msgstr "exp: el argumento %g está fuera de rango"
-#: builtin.c:3177
+#: builtin.c:3167
#, fuzzy, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor(%lf, %lf): los valores negativos darán resultados extraños"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: se recibió un argumento que no es númerico"
-#: builtin.c:3208
+#: builtin.c:3198
#, fuzzy, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%lf): el valor negativo dará resultados extraños"
-#: builtin.c:3210
+#: builtin.c:3200
#, fuzzy, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%lf): el valor fraccionario se truncará"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: `%s' no es una categoría local válida"
@@ -1245,42 +1266,48 @@ msgstr ""
msgid "watch var - set a watchpoint for a variable."
msgstr ""
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "error: "
-#: command.y:1051
+#: command.y:1053
#, fuzzy, c-format
msgid "can't read command (%s)\n"
msgstr "no se puede redirigir desde `%s' (%s)"
-#: command.y:1065
+#: command.y:1067
#, fuzzy, c-format
msgid "can't read command (%s)"
msgstr "no se puede redirigir desde `%s' (%s)"
-#: command.y:1116
+#: command.y:1118
#, fuzzy
msgid "invalid character in command"
msgstr "Nombre de clase de caracter inválido"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr ""
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr ""
-#: command.y:1284
+#: command.y:1286
#, fuzzy
msgid "invalid character"
msgstr "Caracter de ordenación inválido"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr ""
@@ -1796,74 +1823,76 @@ msgstr "`exit' no se puede llamar en el contexto actual"
msgid "`return' not allowed in current context; statement ignored"
msgstr "`exit' no se puede llamar en el contexto actual"
-#: debug.c:5590
+#: debug.c:5604
#, fuzzy, c-format
msgid "No symbol `%s' in current context"
msgstr "se intentó usar la matriz `%s' en un contexto escalar"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
#, fuzzy
msgid "unbalanced ["
msgstr "[ desbalanceado"
-#: dfa.c:1174
+#: dfa.c:1119
#, fuzzy
msgid "invalid character class"
msgstr "Nombre de clase de caracter inválido"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr ""
-#: dfa.c:1366
+#: dfa.c:1327
#, fuzzy
msgid "unfinished \\ escape"
msgstr "Escape \\ sin terminar"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Contenido inválido de \\{\\}"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "La expresión regular es demasiado grande"
-#: dfa.c:1936
+#: dfa.c:1912
#, fuzzy
msgid "unbalanced ("
msgstr "( desbalanceado"
-#: dfa.c:2062
+#: dfa.c:2038
#, fuzzy
msgid "no syntax specified"
msgstr "No se especifican los bits de sintaxis de la expresión regular"
-#: dfa.c:2070
+#: dfa.c:2046
#, fuzzy
msgid "unbalanced )"
msgstr ") desbalanceado"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "tipo de nodo %d desconocido"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "código de operación %d desconocido"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "el código de operación %s no es un operador o una palabra clave"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "desbordamiento de almacenamiento temporal en genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1874,94 +1903,94 @@ msgstr ""
"\t# Pila de Llamadas de Funciones:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "`IGNORECASE' es una extensión de gawk"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "`BINMODE' es una extensión de gawk"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "el valor BINMODE `%s' es inválido; se trata como 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "especificación `%sFMT' `%s' errónea"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "se desactiva `--lint' debido a una asignación a `LINT'"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "referencia al argumento sin inicializar `%s'"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "referencia a la variable sin inicializar `%s'"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "se intentó una referencia de campo desde un valor que no es númerico"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "se intentó una referencia de campo desde una cadena nula"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "se intentó acceder al campo %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "referencia al campo sin inicializar `$%ld'"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "se llamó a la función `%s' con más argumentos de los declarados"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: tipo `%s' inesperado"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "se intentó una división por cero en `/='"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "se intentó una división por cero en `%%='"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "no se permiten las extensiones en modo sandbox"
-#: ext.c:92
+#: ext.c:68
#, fuzzy
msgid "-l / @load are gawk extensions"
msgstr "@include es una extensión de gawk"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr ""
-#: ext.c:98
+#: ext.c:74
#, fuzzy, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "fatal: extension: no se puede abrir `%s' (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, fuzzy, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
@@ -1969,32 +1998,32 @@ msgstr ""
"fatal: extension: la biblioteca `%s': no define "
"`plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, fuzzy, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr ""
"fatal: extension: la biblioteca `%s': no puede llamar a la función `"
"%s' (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "`extension' es una extensión de gawk"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr ""
-#: ext.c:180
+#: ext.c:156
#, fuzzy, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "fatal: extension: no se puede abrir `%s' (%s)\n"
-#: ext.c:186
+#: ext.c:162
#, fuzzy, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
@@ -2002,100 +2031,100 @@ msgstr ""
"fatal: extension: la biblioteca `%s': no define "
"`plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:190
+#: ext.c:166
#, fuzzy, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr ""
"fatal: extension: la biblioteca `%s': no puede llamar a la función `"
"%s' (%s)\n"
-#: ext.c:221
+#: ext.c:197
#, fuzzy
msgid "make_builtin: missing function name"
msgstr "extension: falta el nombre de la función"
-#: ext.c:236
+#: ext.c:212
#, fuzzy, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "extension: no se puede redefinir la función `%s'"
-#: ext.c:240
+#: ext.c:216
#, fuzzy, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "extension: la función `%s' ya está definida"
-#: ext.c:244
+#: ext.c:220
#, fuzzy, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "extension: el nombre de función `%s' se definió previamente"
-#: ext.c:246
+#: ext.c:222
#, fuzzy, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"extension: no se puede utilizar la orden interna de gawk `%s' como nombre de "
"función"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: cuenta de argumento negativa para la función `%s'"
-#: ext.c:276
+#: ext.c:252
#, fuzzy
msgid "extension: missing function name"
msgstr "extension: falta el nombre de la función"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, fuzzy, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: carácter ilegal `%c' en el nombre de la función `%s'"
-#: ext.c:291
+#: ext.c:267
#, fuzzy, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: no se puede redefinir la función `%s'"
-#: ext.c:295
+#: ext.c:271
#, fuzzy, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: la función `%s' ya está definida"
-#: ext.c:299
+#: ext.c:275
#, fuzzy, c-format
msgid "extension: function name `%s' previously defined"
msgstr "el nombre de función `%s' se definió previamente"
-#: ext.c:301
+#: ext.c:277
#, fuzzy, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
"extension: no se puede utilizar la orden interna de gawk `%s' como nombre de "
"función"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "la función `%s' se definió para tomar no más de %d argumento(s)"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "función `%s': falta el argumento #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr ""
"función `%s': argumento #%d: se intentó usar un escalar como una matriz"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr ""
"función `%s': argumento #%d: se intentó usar una matriz como un escalar"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr ""
@@ -2258,7 +2287,7 @@ msgstr "sqrt: se llamó con el argumento negativo %g"
msgid "inplace_begin: in-place editing already active"
msgstr ""
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr ""
@@ -2287,55 +2316,55 @@ msgstr "`%s' no es un nombre de variable legal"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, fuzzy, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "%s: falló close (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, fuzzy, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "%s: falló close (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr ""
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, fuzzy, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "%s: falló close (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, fuzzy, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "falló la limpieza de la tubería de `%s' (%s)."
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, fuzzy, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "falló al cerrar el df %d (`%s') (%s)"
@@ -2385,52 +2414,56 @@ msgstr "sqrt: se llamó con el argumento negativo %g"
msgid "readfile: called with no arguments"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
#, fuzzy
msgid "writea: called with too many arguments"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, fuzzy, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "exp: el argumento %g está fuera de rango"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, fuzzy, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "split: el cuarto argumento no es una matriz"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr ""
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr ""
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
#, fuzzy
msgid "reada: called with too many arguments"
msgstr "sqrt: se llamó con el argumento negativo %g"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, fuzzy, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "exp: el argumento %g está fuera de rango"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, fuzzy, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "match: el tercer argumento no es una matriz"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr ""
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr ""
@@ -2463,92 +2496,92 @@ msgstr "exp: el argumento %g está fuera de rango"
msgid "sleep: not supported on this platform"
msgstr ""
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "se definió NF con un valor negativo"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: el cuarto argumento es una extensión de gawk"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: el cuarto argumento no es una matriz"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: el segundo argumento no es una matriz"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: no se puede usar la misma matriz para el segundo y cuarto argumentos"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: no se puede usar una submatriz del segundo argumento para el cuarto "
"argumento"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: no se puede usar una submatriz del cuarto argumento para el segundo "
"argumento"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr ""
"split: la cadena nula para el tercer argumento es una extensión de gawk"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: el cuarto argumento no es una matriz"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: el segundo argumento no es una matriz"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: el tercer argumento no debe ser nulo"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: no se puede usar la misma matriz para el segundo y cuarto "
"argumentos"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: no se puede usar una submatriz del segundo argumento para el "
"cuarto argumento"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: no se puede usar una submatriz del cuarto argumento para el "
"segundo argumento"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "`FIELDWIDTHS' es una extensión gawk"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "valor de FIELDWIDTHS inválido, cerca de `%s'"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "la cadena nula para `FS' es una extensión de gawk"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "el awk antiguo no admite expresiones regulares como valor de `FS'"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "`FPAT' es una extensión de gawk"
@@ -2564,21 +2597,21 @@ msgstr ""
msgid "node_to_awk_value: received null val"
msgstr ""
-#: gawkapi.c:807
+#: gawkapi.c:809
#, fuzzy
msgid "remove_element: received null array"
msgstr "length: se recibió un argumento de matriz"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr ""
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr ""
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr ""
@@ -2638,528 +2671,495 @@ msgstr "%s: la opción '-W %s' no admite ningún argumento\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: la opción '-W %s' requiere un argumento\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "el argumento de la línea de órdenes `%s' es un directorio: se salta"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "no se puede abrir el fichero `%s' para lectura (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "falló al cerrar el df %d (`%s') (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "no se permite la redirección en modo sandbox"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "la expresión en la redirección `%s' sólo tiene valor numérico"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "la expresión para la redirección `%s' tiene un valor de cadena nula"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"el fichero `%s' para la redirección `%s' puede ser resultado de una "
"expresión lógica"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "mezcla innecesaria de `>' y `>>' para el fichero `%.*s'"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "no se puede abrir la tubería `%s' para la salida (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "no se puede abrir la tubería `%s' para la entrada (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr "no se puede abrir la tubería de dos vías `%s' para entrada/salida (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "no se puede redirigir desde `%s' (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "no se puede redirigir a `%s' (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"se alcanzó el límite del sistema para ficheros abiertos: comenzando a "
"multiplexar los descriptores de fichero"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "falló al cerrar `%s' (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "demasiadas tuberías o ficheros de entrada abiertos"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: el segundo argumento debe ser `to' o `from'"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: `%.*s' no es un fichero abierto, tubería o co-proceso"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "se cerró una redirección que nunca se abrió"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: la redirección `%s' no se abrió con `|&', se descarta el segundo "
"argumento"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "estado de fallo (%d) al cerrar la tubería de `%s' (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "estado de fallo (%d) al cerrar el fichero de `%s' (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "no se provee el cerrado explícito del `socket' `%s'"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "no se provee el cerrado explícito del co-proceso `%s'"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "no se provee el cerrado explícito del la tubería `%s'"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "no se provee el cerrado explícito del fichero `%s'"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "error al escribir en la salida estándar (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "error al escribir en la salida estándar de error (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "falló la limpieza de la tubería de `%s' (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "falló la limpieza del co-proceso de la tubería a `%s' (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "falló la limpieza del fichero de `%s' (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "puerto local %s inválido en `/inet'"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "anfitrión remoto e información de puerto (%s, %s) inválidos"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr ""
-"no se proporciona algún protocolo (conocido) en el nombre de fichero "
-"especial `%s'"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "el nombre de fichero especial `%s' está incompleto"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "se debe proporcionar a `/inet' un nombre de anfitrión remoto"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "se debe proporcionar a `/inet' un puerto remoto"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "no se admiten las comunicaciones TCP/IP"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "no se puede abrir `%s', modo `%s'"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "falló al cerrar el pty maestro (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "falló al cerrar la salida estándar en el hijo (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"falló el movimiento del pty esclavo a la salida estándar en el hijo (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "falló al cerrar la entrada estándar en el hijo (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"falló el movimiento del pty esclavo a la entrada estándar en el hijo (dup: "
"%s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "falló al cerrar el pty esclavo (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr "falló el movimiento a la salida estándar en el hijo (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"falló el movimiento de la tubería a la entrada estándar en el hijo (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "falló la restauración de la salida estándar en el proceso padre\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "falló la restauración de la entrada estándar en el proceso padre\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "falló al cerrar la tubería (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "no se admite `|&'"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "no se puede abrir la tubería `%s' (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "no se puede crear el proceso hijo para `%s' (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr ""
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr ""
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr ""
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr ""
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr ""
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
"`%s'"
msgstr ""
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr ""
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "el fichero de datos `%s' está vacío"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "no se puede reservar más memoria de entrada"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "el valor multicaracter de `RS' es una extensión de gawk"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "no se admite la comunicación IPv6"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "se descarta el argumento vacío para `-e/--source'"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: no se reconoce la opción `-W %s', se descarta\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: la opción requiere un argumento -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"la variable de ambiente `POSIXLY_CORRECT' está definida: se activa `--posix'"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "`--posix' se impone a `--traditional'"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "`--posix'/`--traditional' se imponen a `--non-decimal-data'"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "ejecutar %s como setuid root puede ser un problema de seguridad"
-#: main.c:588
+#: main.c:346
#, fuzzy
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "`--posix' se impone a `--binary'"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "no se puede establecer el modo binario en la entrada estándar (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "no se puede establecer el modo binario en la salida estándar (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr ""
"no se puede establecer el modo binario en la salida estándar de error (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "¡No hay ningún programa de texto!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"Modo de empleo: %s [opciones estilo POSIX o GNU] -f fichprog [--] "
"fichero ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
"Modo de empleo: %s [opciones estilo POSIX o GNU] [--] %cprograma%c "
"fichero ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "Opciones POSIX:\t\tOpciones largas GNU: (estándar)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f fichprog\t\t--file=fichprog\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F sc\t\t\t--field-separator=sc\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=valor\t\t--assign=var=valor\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Opciones cortas:\t\tOpciones largas GNU: (extensiones)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[fichero]\t\t--dump-variables[=fichero]\n"
-#: main.c:815
+#: main.c:579
#, fuzzy
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-p[fichero]\t\t--profile[=fichero]\n"
# Esta es la línea más larga de la lista de argumentos.
# Probar con gawk para revisar tabuladores. cfuga
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'texto-prog'\t--source='texto-prog'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E fichero\t\t--exec=fichero\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr ""
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr ""
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
#, fuzzy
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
#, fuzzy
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-p[fichero]\t\t--profile[=fichero]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[fichero]\t\t--profile[=fichero]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3168,7 +3168,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3182,7 +3182,7 @@ msgstr ""
"Reporte los errores de los mensajes en español a <es@li.org>.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3192,7 +3192,7 @@ msgstr ""
"Por defecto lee la entrada estándar y escribe en la salida estándar.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3202,7 +3202,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' fichero\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3222,7 +3222,7 @@ msgstr ""
"(a su elección) cualquier versión posterior.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3236,7 +3236,7 @@ msgstr ""
"Licencia Pública General de GNU para más detalles.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3245,16 +3245,16 @@ msgstr ""
"junto con este programa. Si no es así, consulte\n"
"http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft no establece FS a tabulador en el awk de POSIX"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "valor desconocido para la especificación de campo: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3263,103 +3263,121 @@ msgstr ""
"%s: el argumento `%s' para `-v' no es de la forma `var=valor'\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "`%s' no es un nombre de variable legal"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "`%s' no es un nombre de variable, se busca el fichero `%s=%s'"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr ""
"no se puede utilizar la orden interna de gawk `%s' como nombre de variable"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "no se puede usar la función `%s' como nombre de variable"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "excepción de coma flotante"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "error fatal: error interno"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "error fatal: error interno: falla de segmentación"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "error fatal: error interno: desbordamiento de pila"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "no existe el df %d abierto previamente"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "no se puede abrir previamente /dev/null para el df %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "se descarta el argumento vacío para `-e/--source'"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: no se reconoce la opción `-W %s', se descarta\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: la opción requiere un argumento -- %c\n"
+
+#: mpfr.c:557
#, fuzzy, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "el valor BINMODE `%s' es inválido; se trata como 3"
-#: mpfr.c:608
+#: mpfr.c:615
#, fuzzy, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "el valor BINMODE `%s' es inválido; se trata como 3"
-#: mpfr.c:698
+#: mpfr.c:711
#, fuzzy, c-format
msgid "%s: received non-numeric argument"
msgstr "cos: se recibió un argumento que no es númerico"
-#: mpfr.c:800
+#: mpfr.c:820
#, fuzzy
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%lf): el valor negativo dará resultados extraños"
-#: mpfr.c:804
+#: mpfr.c:824
#, fuzzy
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%lf): el valor fraccionario se truncará"
-#: mpfr.c:816
+#: mpfr.c:836
#, fuzzy, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "compl(%lf): el valor negativo dará resultados extraños"
-#: mpfr.c:835
+#: mpfr.c:855
#, fuzzy, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "cos: se recibió un argumento que no es númerico"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr ""
-#: mpfr.c:857
+#: mpfr.c:877
#, fuzzy
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "compl(%lf): el valor negativo dará resultados extraños"
-#: mpfr.c:863
+#: mpfr.c:883
#, fuzzy
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "or(%lf, %lf): los valores fraccionarios serán truncados"
-#: mpfr.c:878
+#: mpfr.c:898
#, fuzzy, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "compl(%lf): el valor negativo dará resultados extraños"
@@ -3369,24 +3387,24 @@ msgstr "compl(%lf): el valor negativo dará resultados extraños"
msgid "cmd. line:"
msgstr "línea ord.:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "barra invertida al final de la cadena"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "el awk antiguo no admite la secuencia de escape `\\%c'"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX no permite escapes `\\x'"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "no hay dígitos hexadecimales en la secuencia de escape `\\x'"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3395,12 +3413,12 @@ msgstr ""
"el escape hexadecimal \\x%.*s de %d caracteres tal vez no se interprete de "
"la forma esperada"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "la secuencia de escape `\\%c' se trata como una simple `%c'"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3429,12 +3447,12 @@ msgid "sending profile to standard error"
msgstr "se envía el perfil a la salida estándar de error"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# bloque(s) %s\n"
+"\t# Regla(s)\n"
"\n"
#: profile.c:198
@@ -3451,24 +3469,24 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "error interno: %s con vname nulo"
-#: profile.c:537
+#: profile.c:538
#, fuzzy
msgid "internal error: builtin with null fname"
msgstr "error interno: %s con vname nulo"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
"\n"
msgstr ""
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# perfil de gawk, creado %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3477,7 +3495,7 @@ msgstr ""
"\n"
"\t# Funciones, enumeradas alfabéticamente\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: tipo de redirección %d desconocida"
@@ -3488,74 +3506,116 @@ msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
"el componente de expresión regular `%.*s' probablemente debe ser `[%.*s]'"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Éxito"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "No hay coincidencia"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Expresión regular inválida"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Caracter de ordenación inválido"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Nombre de clase de caracter inválido"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Barra invertida extra al final"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Referencia hacia atrás inválida"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "[ o [^ desemparejados"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "( o \\( desemparejados"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "\\{ desemparejado"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Contenido inválido de \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Final de rango inválido"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Memoria agotada"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Expresión regular precedente inválida"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Fin prematuro de la expresión regular"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "La expresión regular es demasiado grande"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ") o \\) desemparejados"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "No hay una expresión regular previa"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr ""
+"función `%s': no se puede usar un nombre de función como nombre de parámetro"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr ""
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "`getline var' inválido dentro de la regla `%s'"
+
+#~ msgid "`getline' invalid inside `%s' rule"
+#~ msgstr "`getline' inválido dentro de la regla `%s'"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr ""
+#~ "no se proporciona algún protocolo (conocido) en el nombre de fichero "
+#~ "especial `%s'"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "el nombre de fichero especial `%s' está incompleto"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "se debe proporcionar a `/inet' un nombre de anfitrión remoto"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "se debe proporcionar a `/inet' un puerto remoto"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# bloque(s) %s\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr "el rango de la forma `[%c-%c]' depende del local"
@@ -3627,9 +3687,6 @@ msgstr ""
#~ msgid "Operation Not Supported"
#~ msgstr "No Se Admite La Operación"
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "se intentó usar la función `%s' como una matriz"
-
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "referencia al elemento sin inicializar `%s[\"%.*s\"]'"
@@ -3673,9 +3730,6 @@ msgstr ""
#~ msgid "function `%s' not defined"
#~ msgstr "la función `%s' no está definida"
-#~ msgid "non-redirected `getline' invalid inside `%s' rule"
-#~ msgstr "`getline' no redirigido es inválido dentro de la regla `%s'"
-
#~ msgid "error reading input file `%s': %s"
#~ msgstr "error al leer el fichero de entrada `%s': %s"
diff --git a/po/fi.gmo b/po/fi.gmo
index 478aa070..ccf63562 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 49014233..96d03c23 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-01-16 13:32+0200\n"
"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -37,9 +37,9 @@ msgstr "yritettiin käyttää skalaariparametria â€%s†taulukkona"
msgid "attempt to use scalar `%s' as an array"
msgstr "yritettiin käyttää skalaaria â€%s†taulukkona"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "yritettiin käyttää taulukkoa â€%s†skalaarikontekstissa"
@@ -98,408 +98,413 @@ msgstr ""
"asorti: toisen argumentin alitaulukon käyttö ensimmäiselle argumentille "
"epäonnistui"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "â€%s†on virheellinen funktionimenä"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "lajitteluvertailufunktiota â€%s†ei ole määritelty"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s lohkoilla on oltava toiminto-osa"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "jokaisella säännöllä on oltava malli tai toiminto-osa"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "vanha awk ei tue useita â€BEGINâ€- tai â€ENDâ€-sääntöjä"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "â€%s†on sisäänrakennettu funktio. Sitä ei voi määritellä uudelleen"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
"säännöllisen lausekkeen vakio â€//†näyttää C++-kommentilta, mutta ei ole"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
"säännöllisen lausekkeen vakio â€/%s/†näyttää C-kommentilta, mutta ei ole"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "kaksi samanlaista case-arvoa switch-rakenteen rungossa: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "kaksoiskappale â€default†havaittu switch-rungossa"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "â€break†ei ole sallittu silmukan tai switch-lauseen ulkopuolella"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "â€continue†ei ole sallittu silmukan ulkopuolella"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "â€next†käytetty %s-toiminnossa"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "â€nextfile†käytetty %s-toiminnossa"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "â€return†käytetty funktiokontekstin ulkopuolella"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"pelkkä â€print†BEGIN- tai END-säännössä pitäisi luultavasti olla â€print \"\"â€"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "â€delete†ei ole sallittu kohteessa SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "â€delete†ei ole sallittu kohteessa FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "â€delete(array)†ei ole siirrettävä tawk-laajennus"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "monivaiheiset kaksisuuntaiset putket eivät toimi"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "säännöllinen lauseke sijoituksen oikealla puolella"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "säännöllinen lauseke â€~â€- tai â€!~â€-operaattorin vasemmalla puolella"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "vanha awk ei tue avainsanaa â€in†paitsi â€forâ€-sanan jälkeen"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "säännöllinen lauseke vertailun oikealla puolella"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "â€getline var†virheellinen säännön â€%s†sisällä"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "â€getline†virheellinen säännön â€%s†sisällä"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr "edelleenohjaamaton â€getline†virheellinen â€%sâ€-säännön sisällä"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "edelleenohjaamaton â€getline†määrittelemätön END-toiminnon sisällä"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "vanha awk ei tue moniulotteisia taulukkoja"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "â€lengthâ€-kutsu ilman sulkumerkkejä ei ole siirrettävä"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "epäsuorat funktiokutsut ovat gawk-laajennus"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr "erikoismuuttujan â€%s†käyttö epäsuoralle funktiokutsulle epäonnistui"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "yritettiin käyttää funktiota â€%s†taulukkona"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "virheellinen indeksointilauseke"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "varoitus: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "tuhoisa: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "odottamaton rivinvaihto tai merkkijonon loppu"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "lähdetiedoston â€%s†avaaminen lukemista varten (%s) epäonnistui"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "jaetun kirjaston â€%s†avaaminen lukemista varten (%s) epäonnistui"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "syy tuntematon"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "kohteen â€%s†sisällyttäminen ja käyttö ohjelmatiedostona epäonnistui"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "on jo sisällytetty lähdetiedostoon â€%sâ€"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "jaettu kirjasto â€%s†on jo ladattu"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include on gawk-laajennus"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "tyhjä tiedostonimi @include:n jälkeen"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load on gawk-laajennus"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "tyhjä tiedostonimi @load:n jälkeen"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "tyhjä ohjelmateksti komentorivillä"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "lähdetiedoston â€%s†(%s) lukeminen epäonnistui"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "lähdetiedosto â€%s†on tyhjä"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "lähdetiedoston lopussa ei ole rivinvaihtoa"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr ""
"päättämätön säännöllinen lauseke loppuu â€\\â€-merkkeihin tiedoston lopussa"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "%s: %d: tawk:n regex-määre â€/.../%c†ei toimi gawk:ssa"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "tawkin regex-määre â€/.../%c†ei toimi gawkissa"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "päättämätön säännöllinen lauseke"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "päättämätön säännöllinen lauseke tiedoston lopussa"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "â€\\ #...â€-rivijatkamisen käyttö ei ole siirrettävä"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "kenoviiva ei ole rivin viimeinen merkki"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX ei salli operaattoria â€**=â€"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "vanha awk ei tue operaattoria â€**=â€"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX ei salli operaattoria â€**â€"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "vanha awk ei tue operaattoria â€**â€"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "operaattoria â€^=†ei tueta vanhassa awk:ssa"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "operaattoria â€^†ei tueta vanhassa awk:ssa"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "päättämätön merkkijono"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "virheellinen merkki ’%c’ lausekkeessa"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "â€%s†on gawk-laajennus"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX ei salli operaattoria â€%sâ€"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "â€%s†ei ole tuettu vanhassa awk-ohjelmassa"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "â€gotoâ€-käskyä pidetään haitallisena!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d on virheellinen argumenttilukumäärä operaattorille %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s: merkkijonoliteraalilla ei ole vaikutusta korvauksen viimeisenä "
"argumenttina"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s kolmas parametri ei ole vaihdettava objekti"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: kolmas argumentti on gawk-laajennus"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: toinen argumentti on gawk-laajennus"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr "dcgettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr "dcngettext(_\"...\")-käyttö on virheellinen: poista alaviiva alusta"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: regexp-vakio toisena argumenttina ei ole sallittu"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "funktio â€%sâ€: parametri â€%s†varjostaa yleismuuttujaa"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "tiedoston â€%s†avaaminen kirjoittamista varten (%s) epäonnistui"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "lähetetään muuttujaluettelo vakiovirheeseen"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: sulkeminen epäonnistui (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() kutsuttu kahdesti!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "siellä oli varjostettuja muuttujia."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "funktionimi â€%s†on jo aikaisemmin määritelty"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "funktio â€%sâ€: funktionimen käyttö parametrinimenä epäonnistui"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"funktio â€%sâ€: erikoismuuttujan â€%s†käyttö funktioparametrina epäonnistui"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "funktio â€%sâ€: parametri #%d, â€%sâ€, samanlainen parametri #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "funktiota â€%s†kutsuttiin, mutta sitä ei ole koskaan määritelty"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "funktio â€%s†määriteltiin, mutta sitä ei ole koskaan kutsuttu suoraan"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "säännöllisen lausekkeen vakio parametrille #%d antaa boolean-arvon"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -508,21 +513,21 @@ msgstr ""
"funktio â€%s†kutsuttu välilyönnillä nimen ja â€(â€-merkin\n"
"välillä, tai käytetty muuttujana tai taulukkona"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "nollalla jakoa yritettiin"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "jakoa nollalla yritettiin operaattorissa â€%%â€"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr "arvon liittäminen kenttäjälkiaskelkasvatuslausekkeeseen epäonnistui"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "virheellinen liittämiskohde (käskykoodi %s)"
@@ -565,192 +570,202 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: â€%s†ei ole avoin tiedosto, putki tai apuprosessi"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: ensimmäinen vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: toinen vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: vastaanotettu taulukkoargumentti"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "â€length(array)†on gawk-laajennus"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: vastaanotettu negatiivinen argumentti %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "kohtalokas: on käytettävä â€count$†kaikilla muodoilla tai ei missään"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "kenttäleveys ohitetaan â€%%%%â€-määritteelle"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "tarkkuus ohitetaan â€%%%%â€-määritteelle"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "kenttäleveys ja tarkkuus ohitetaan â€%%%%â€-määritteelle"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "kohtalokas: â€$â€-argumentti ei ole sallittu awk-muodoissa"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "kohtalokas: argumenttilukumäärän argumentilla â€$†on oltava > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
"kohtalokas: argumenttilukumäärä %ld on suurempi kuin toimitettujen "
"argumenttien lukumäärä"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "kohtalokas: â€$â€-argumentti ei ole sallittu pisteen jälkeen muodossa"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"kohtalokas: ei â€$â€-argumenttia tarjottu sijantikenttäleveydelle tai "
"tarkkuudelle"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "â€l†on merkityksetön awk-muodoissa; ohitetaan"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "kohtalokas: â€l†ei ole sallittu POSIX awk -muodoissa"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "â€L†on merkityksetön awk-muodoissa; ohitetaan"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "kohtalokas: â€L†ei ole sallittu POSIX awk -muodoissa"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "â€h†on merkityksetön awk-muodoissa; ohitetaan"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "kohtalokas: â€h†ei ole sallittu POSIX awk -muodoissa"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: arvo %g on lukualueen ulkopuolella â€%%%câ€-muodolle"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: arvo %g on lukualueen ulkopuolella â€%%%câ€-muodolle"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: arvo %g on lukualueen ulkopuolella â€%%%câ€-muodolle"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"ohitetaan tuntematon muotoargumenttimerkki â€%câ€: ei muunnettu argumenttia"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "kohtalokas: ei kylliksi argumentteja muotomerkkijonon tyydyttämiseksi"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ tällainen loppui kesken"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: muotoargumentilla ei ole ohjauskirjainta"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "muotomerkkijonoon toimitettu liian monta argumenttia"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: ei argumentteja"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: ei argumentteja"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: kutsuttu negatiivisella argumentilla %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: pituus %g ei ole >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: pituus %g ei ole >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: typistetään pituus %g, joka ei ole kokonaisluku"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
"substr: pituus %g liian suuri merkkijononindeksointiin, typistetään arvoon %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: aloitusindeksi %g on virheellinen, käytetään 1:tä"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: typistetään aloitusindeksi %g, joka ei ole kokonaisluku"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: lähdemerkkijono on nollapituinen"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: aloitusindeksi %g on merkkijonon lopun jälkeen"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -758,189 +773,195 @@ msgstr ""
"substr: pituus %g alkuindeksissä %g ylittää ensimmäisen argumentin pituuden "
"(%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
"strftime: muotoarvolla kohteessa PROCINFO[\"strftime\"] on numerotyyppi"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: toinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr ""
"strftime: toinen argumentti on pienempi kuin 0 tai liian suuri time_t-"
"rakenteeseen"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: ensimmäinen vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: vastaanotettu tyhjä muotomerkkijono"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: vähintään yksi arvoista on oletuslukualueen ulkopuolella"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "’system’-funktio ei ole sallittu hiekkalaatikkotilassa"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "viite alustamattomaan kenttään â€$%dâ€"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: vastaanotettu argumentti ei ole merkkijono"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: ensimmäinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: toinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: kolmas argumentti ei ole taulukko"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: 0-arvoinen kolmas argumentti käsitellään kuin 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: 0-arvoinen kolmas argumentti käsitellään kuin 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: ensimmäinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: toinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): negatiiviset arvot antavat outoja tuloksia"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): jaosarvot typistetään"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f): liian suuri siirrosarvo antaa outoja tuloksia"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: ensimmäinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: toinen vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): negatiiviset arvot antavat outoja tuloksia"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): jaosarvot typistetään"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr "rshift(%f, %f): liian suuri siirrosarvo antaa outoja tuloksia"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: kutsuttu vähemmällä kuin kahdella argumentilla"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: argumentti %d ei ole numeeraaliargumentti"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and: argumentin %d negatiivinen arvo %g antaa outoja tuloksia"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: kutsuttu vähemmällä kuin kahdella argumentilla"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: argumentti %d ei ole numeraaliargumentti"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "or: argumentin %d negatiivinen arvo %g antaa outoja tuloksia"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: kutsuttu vähemmällä kuin kahdella argumentilla"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: argumentti %d ei ole numeraaliargumentti"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: argumentin %d negatiivinen arvo %g antaa outoja tuloksia"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: vastaanotettu argumentti ei ole numeerinen"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): negatiivinen arvo antaa outoja tuloksia"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): jaosarvo typistetään"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: â€%s†ei ole kelvollinen paikallinen kategoria"
@@ -1245,40 +1266,49 @@ msgstr "up [N] - siirrä N kehystä ylöspäin pinossa."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch muuttuja - aseta vahtikohta muuttujalle."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - tulosta kaikkien tai N:n sisimmäisen (ulommaisin, jos N < 0) "
+"kehyksen jäljet."
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "virhe: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "komennon (%s) lukeminen epäonnistui\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "komennon (%s) lukeminen epäonnistui"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "virheellinen merkki komennossa"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "tuntematon komento - \"%.*s\", kokeile käskyä help"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "virheellinen merkki"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "määrittelemätön komento: %s\n"
@@ -1817,68 +1847,70 @@ msgstr "â€%s†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaan"
msgid "`return' not allowed in current context; statement ignored"
msgstr "â€return†ei ole sallittu nykyisessä asiayhteydessä; lause ohitetaan"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Symbolia â€%s†ei ole nykyisesssä asiayhteydessä"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "pariton ["
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "virheellinen merkkiluokka"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "merkkiluokkasyntaksi on [[:space:]], ei [:space:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "päättymätön \\-koodinvaihtomerkki"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Virheellinen \\{\\}-sisältö"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Säännöllinen lauseke on liian iso"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "pariton ("
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "syntaksi ei ole määritelty"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr "pariton )"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "tuntematon solmutyyppi %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "tuntematon käskykoodi %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "käskykoodi %s ei ole operaattori tai avainsana"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "puskurin ylivuoto funktiossa genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1889,217 +1921,217 @@ msgstr ""
"\t# Funktiokutsupino:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "â€IGNORECASE†on gawk-laajennus"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "â€BINMODE†on gawk-laajennus"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "BINMODE-arvo â€%s†on virheellinen, käsiteltiin arvona 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "väärä â€%sFMTâ€-määritys â€%sâ€"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "käännetään pois â€--lintâ€-valitsin â€LINTâ€-sijoituksen vuoksi"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "viite alustamattomaan argumenttiin â€%sâ€"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "viite alustamattomaan muuttujaan â€%sâ€"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "yritettiin kenttäviitettä arvosta, joka ei ole numeerinen"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "yritettiin kenttäviitettä null-merkkijonosta"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "yritettiin saantia kenttään %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "viite alustamattomaan kenttään â€$%ldâ€"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "funktio â€%s†kutsuttiin useammalla argumentilla kuin esiteltiin"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: odottamaton tyyppi â€%sâ€"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "jakoa nollalla yritettiin operaatiossa â€/=â€"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "jakoa nollalla yritettiin operaatiossa â€%%=â€"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "laajennuksia ei sallita hiekkalaatikkotilassa"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load ovat gawk-laajennuksia"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: vastaanotettiin NULL lib_name"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: kirjaston â€%s†(%s) avaus epäonnistui\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: kirjasto â€%sâ€: ei määrittele â€plugin_is_GPL_compatible†(%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: kirjasto â€%sâ€: funktion â€%s†(%s) kutsu epäonnistui\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr "load_ext: kirjaston â€%s†alustusrutiini â€%s†epäonnistui\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "â€extension†on gawk-laajennus"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "extension: vastaanotettiin NULL lib_name"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: kirjaston â€%s†(%s) avaus epäonnistui"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"extension: kirjasto â€%sâ€: ei määrittele â€plugin_is_GPL_compatible†(%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "extension: kirjasto â€%sâ€: funktion â€%s†(%s) kutsu epäonnistui"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: puuttuva funktionimi"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: funktion â€%s†uudelleenmäärittely epäonnistui"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: funktio â€%s†on jo määritelty"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: funktionimi â€%s†on määritelty jo aiemmin"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"make_builtin: gawk-ohjelman sisäisen muuttujanimen â€%s†käyttö funktionimenä "
"epäonnistui"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: negatiivinen argumenttilukumäärä funktiolle â€%sâ€"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: puuttuva funktionimi"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: virheellinen merkki â€%c†funktionimessä â€%sâ€"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: funktion â€%s†uudelleenmäärittely epäonnistui"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: funktio â€%s†on jo määritelty"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: funktionimi â€%s†on määritelty jo aiemmin"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
"extension: gawk-ohjelman sisäisen muuttujanimen käyttö â€%s†funktionimenä "
"epäonnistui"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "funktio â€%s†on määritelty ottamaan enemmän kuin %d argumenttia"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "function â€%sâ€: puuttuva argumentti #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "funktio â€%sâ€: argumentti #%d: yritettiin käyttää skalaaria taulukkona"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "funktio â€%sâ€: argumentti #%d: yritettiin käyttää taulukkoa skalaarina"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "kirjaston dynaamista latausta ei tueta"
@@ -2243,7 +2275,7 @@ msgstr "wait: kutsuttu liian monella argumentilla"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: kohdallaanmuokkaus on jo aktivoitu"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr ""
@@ -2277,57 +2309,57 @@ msgstr "inplace_begin: â€%s†ei ole tavallinen tiedosto"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: mkstemp(â€%sâ€) epäonnistui (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin: chmod epäonnistui (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: dup(stdout) epäonnistui (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: dup2(%d, stdout) epäonnistui (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin: close(%d) epäonnistui (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
"inplace_end: ensimmäisen argumentin noutaminen merkkijonotiedostonimenä "
"epäonnistui"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: kohdallaanmuokkaus ei ole aktiivinen"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: dup2(%d, stdout) epäonnistui (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: close(%d) epäonnistui (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: fsetpos(stdout) epäonnistui (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: link(â€%sâ€, â€%sâ€) epäonnistui (%s)."
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: rename(â€%sâ€, â€%sâ€) epäonnistui (%s)"
@@ -2369,50 +2401,54 @@ msgstr "readfile: kutsuttu liian monella argumentilla"
msgid "readfile: called with no arguments"
msgstr "readfile: kutsuttu ilman argumentteja"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: kutsuttu liian monella argumentilla"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: argumentti 0 ei ole merkkijono\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: argumentti 1 ei ole taulukko\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: taulukon litistäminen epäonnistui\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: litistettyä taulukon vapauttaminen epäonnistui\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: kutsuttu liian monilla argumenteilla"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: argumentti 0 ei ole merkkijono\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: argumentti 1 ei ole taulukko\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array epäonnistui\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element epäonnistui\n"
@@ -2441,91 +2477,91 @@ msgstr "sleep: argumentti on negatiivinen"
msgid "sleep: not supported on this platform"
msgstr "sleep: ei ole tuettu tällä alustalla"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF asetettu negatiiviseen arvoon"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: neljäs argumentti on gawk-laajennus"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: neljäs argumentti ei ole taulukko"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: toinen argumentti ei ole taulukko"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: saman taulukon käyttö toiselle ja neljännelle argumentille epäonnistui"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: toisen argumentin käyttö alitaulukkoa neljännelle argumentille "
"epäonnistui"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: neljännen argumentin käyttö alitaulukkoa toiselle argumentille "
"epäonnistui"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: null-merkkijono kolmantena argumenttina on gawk-laajennus"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: neljäs argumentti ei ole taulukko"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: toinen argumentti ei ole taulukko"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: kolmas argumentti ei ole taulukko"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: saman taulukon käyttö toiselle ja neljännelle argumentille "
"epäonnistui"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: toisen argumentin käyttö alitaulukkkoa neljännelle argumentille "
"epäonnistui"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: neljännen argumentin käyttö alitaulukkoa toiselle argumentille "
"epäonnistui"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "â€FIELDWIDTHS†on gawk-laajennus"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "virheellinen FIELDWIDTHS-arvo, lähellä â€%sâ€"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "null-merkkijono â€FSâ€-kenttäerotinmuuttujalle on gawk-laajennus"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "vanha awk ei tue regexp-arvoja â€FSâ€-kenttäerotinmuuttujana"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "â€FPAT†on gawk-laajennus"
@@ -2541,20 +2577,20 @@ msgstr "node_to_awk_value: vastaaotti null-solmun"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: vastaanotti null-arvon"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: vastaanotettu null-taulukko"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: vastaanotti null-alaindeksin"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: indeksin %d muuntaminen epäonnistui\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: arvon %d muuntaminen epäonnistui\n"
@@ -2614,295 +2650,277 @@ msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "komentoriviargumentti â€%s†on hakemisto: ohitettiin"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "tiedoston â€%s†avaaminen lukemista varten (%s) epäonnistui"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "tiedostomäärittelijän %d (â€%sâ€) sulkeminen epäonnistui (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "edelleenohjaus ei ole sallittua hiekkalaatikkotilassa"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "lausekkeella â€%sâ€-uudellenohjauksessa on vain numeerinen arvo"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "lausekkeella â€%sâ€-uudelleenohjauksessa on null-merkkijonoarvo"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"tiedostonimi â€%s†â€%sâ€-uudelleenohjaukselle saattaa olla loogisen lausekkeen "
"tulos"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "turha merkkien â€>†ja â€>>†sekoittaminen tiedostolle â€%.*sâ€"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "putken â€%s†avaaminen tulosteelle (%s) epäonnistui"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "putken â€%s†avaaminen syötteelle (%s) epäonnistui"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
"kaksisuuntaisen putken â€%s†avaaminen syötteelle/tulosteelle (%s) epäonnistui"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "uudelleenohjaus putkesta â€%s†(%s) epäonnistui"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "uudelleenohjaus putkeen â€%s†(%s) epäonnistui"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"saavutettiin avoimien tiedostojen järjestelmäraja: aloitetaan "
"tiedostomäärittelijöiden lomittaminen"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "uudelleenohjauksen â€%s†sulkeminen epäonnistui (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "avoinna liian monta putkea tai syötetiedostoa"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: toisen argumentin on oltava â€to†tai â€fromâ€"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: â€%.*s†ei ole avoin tiedosto, putki tai apuprosessi"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "suljettiin uudelleenohjaus, jota ei avattu koskaan"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: uudelleenohjaus â€%s†ei ole avattu operaattoreilla â€|&â€, toinen "
"argumentti ohitettu"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "virhetila (%d) putken â€%s†sulkemisessa (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "virhetila (%d) tiedoston â€%s†sulkemisessa (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "pistokkeen â€%s†eksplisiittistä sulkemista ei tarjota"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "apuprosessin â€%s†eksplisiittistä sulkemista ei tarjota"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "putken â€%s†eksplisiittistä sulkemista ei tarjota"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "tiedoston â€%s†eksplisiittistä sulkemista ei tarjota"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "virhe kirjoitettaessa vakiotulosteeseen (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "virhe kirjoitettaessa vakiovirheeseen (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "uudelleenohjauksen â€%s†putken tyhjennys epäonnistui (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "putken apuprosessityhjennys uudelleenohjaukseen â€%s†epäonnistui (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "uudelleenohjauksen â€%s†tiedostontyhjennys epäonnistui (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "paikallinen portti %s virheellinen pistokkeessa â€/inetâ€"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "etäkone- ja porttitiedot (%s, %s) ovat virheellisiä"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "ei (tunnettua) yhteyskäytäntöä tarjottu erikoistiedostonimessä â€%sâ€"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "erikoistiedostonimi â€%s†on vaillinainen"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "on tarjottava etäkoneen nimi pistokkeeseen â€/inetâ€"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "on tarjottava etäportti pistokkeeseen â€/inetâ€"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "TCP/IP-viestintää ei tueta"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "laitteen â€%s†avaus epäonnistui, tila â€%sâ€"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "â€master ptyâ€-sulkeminen epäonnistui (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "vakiotulosteen sulkeminen lapsiprosessissa epäonnistui (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"â€slave ptyâ€:n siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui "
"(dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "vakiosyötteen sulkeminen lapsiprosessissa epäonnistui (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"â€slave ptyâ€:n siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui "
"(dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "â€slave ptyâ€:n sulkeminen epäonnistui (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"putken siirtäminen vakiotulosteeseen lapsiprosessissa epäonnistui (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"putken siirtäminen vakiosyötteeseen lapsiprosessissa epäonnistui (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "vakiotulosteen palauttaminen äitiprosessissa epäonnistui\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "vakiosyötön palauttaminen äitiprosessissa epäonnistui\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "putken sulkeminen epäonnistui (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "â€|&†ei tueta"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "putken â€%s†(%s) avaaminen epäonnistui"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "lapsiprosessin luominen komennolle â€%s†(fork: %s) epäonnistui"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: vastaanotettiin NULL-osoitin"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"syötejäsennin â€%s†on ristiriidassa aiemmin asennetun syötejäsentimen â€%s†"
"kanssa"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "syötejäsentäjä â€%s†epäonnistui kohteen â€%s†avaamisessa"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: vastaanotti NULL-osoittimen"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
@@ -2910,16 +2928,16 @@ msgstr ""
"tulostekäärin â€%s†on ristiriidassa aiemmin asennetun tulostekäärimen â€%s†"
"kanssa"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "tulostekäärin â€%s†epäonnistui avaamaan â€%sâ€"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: vastaanotti NULL-osoittimen"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2928,216 +2946,203 @@ msgstr ""
"kaksisuuntainen prosessori â€%s†on ristiriidassa aiemmin asennetun "
"kaksisuuntaisen prosessorin â€%s†kanssa"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "kaksisuuntainen prosessori â€%s†epäonnistui avaamaan â€%sâ€"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "data-tiedosto â€%s†on tyhjä"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "lisäsyötemuistin varaus epäonnistui"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "â€RSâ€-monimerkkiarvo on gawk-laajennus"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "IPv6-viestintää ei tueta"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "tyhjä argumentti valitsimelle â€-e/--source†ohitetaan"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: valitsin â€-W %s†on tunnistamaton, ohitetaan\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: valitsin vaatii argumentin -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"ympäristömuuttuja â€POSIXLY_CORRECT†asetettu: käännetään päälle valitsin â€--"
"posixâ€"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "valitsin â€--posix†korvaa valitsimen â€--traditionalâ€"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr ""
"valitsin â€--posix†tai â€--traditional†korvaa valitsimen â€--non-decimal-dataâ€"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "suorittaminen â€%s setuid rootâ€-käyttäjänä saattaa olla turvapulma"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "valitsin â€--posix†korvaa valitsimen â€--characters-as-bytesâ€"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "binaaritilan asettaminen vakiosyötteessä (%s) epäonnistui"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "binaaritilan asettaminen vakiotulosteessa (%s) epäonnistui"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "binaaritilaa asettaminen vakiovirheessä (%s) epäonnistui"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "ei ohjelmatekstiä ollenkaan!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"Käyttö: %s [POSIX- tai GNU-tyyliset valitsimet] -f ohjelmatiedosto [--] "
"tiedosto ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
"Käyttö: %s [POSIX- tai GNU-tyyliset valitsimet] [--] %cohjelma%c "
"tiedosto ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "POSIX-valitsimet:\t\tGNU-pitkät valitsimet: (vakio)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f ohjelmatiedosto\t\t--file=ohjelmatiedosto\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=arvo\t\t--assign=muuttuja=arvo\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Lyhyet valitsimet:\t\tGNU-pitkät valitsimet: (laajennukset)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[tiedosto]\t\t--dump-variables[=tiedosto]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[tiedosto]\t\t--debug[=tiedosto]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'program-text'\t--source='program-text'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E file\t\t\t--exec=tiedosto\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-po\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i include-tiedosto\t\t--include=include-tiedosto\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l kirjasto\t\t--load=kirjasto\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[tiedosto]\t\t--pretty-print[=tiedosto]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[tiedosto]\t\t--profile[=tiedosto]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3146,7 +3151,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3159,7 +3164,7 @@ msgstr ""
"joka on kappale â€Reporting Problems and Bugs†painetussa versiossa.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3169,7 +3174,7 @@ msgstr ""
"Oletuksena se lukee vakiosyötettä ja kirjoittaa vakiotulosteeseen.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3179,7 +3184,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' tiedosto\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3198,7 +3203,7 @@ msgstr ""
"ehtojen mukaisesti.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3212,7 +3217,7 @@ msgstr ""
"GNU General Public License-ehdoista.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3220,16 +3225,16 @@ msgstr ""
"Sinun pitäisi vastaanottaa kopion GNU General Public Licence-lisenssistä\n"
"tämän ohjelman mukana. Jos näin ei ole, katso http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft ei aseta FS välilehteen POSIX awk:ssa"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "tuntematon arvo kenttämääritteelle: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3238,100 +3243,118 @@ msgstr ""
"%s: â€%s†argumentti valitsimelle â€-v†ei ole â€var=arvoâ€-muodossa\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "â€%s†ei ole laillinen muuttujanimi"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "â€%s†ei ole muuttujanimi, etsitään tiedostoa â€%s=%sâ€"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr ""
"gawk-ohjelman sisäisen â€%sâ€-määrittelyn käyttö muuttujanimenä epäonnistui"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "funktionimen â€%s†käyttö muuttujanimenä epäonnistui"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "liukulukupoikkeus"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "tuhoisa virhe: sisäinen virhe"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "tuhoisa virhe: sisäinen virhe: segmenttivirhe"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "tuhoisa virhe: sisäinen virhe: pinoylivuoto"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "ei avattu uudelleen tiedostomäärittelijää %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr ""
"laitteen /dev/null avaaminen uudelleen tiedostomäärittelijälle %d epäonnistui"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "tyhjä argumentti valitsimelle â€-e/--source†ohitetaan"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: valitsin â€-W %s†on tunnistamaton, ohitetaan\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: valitsin vaatii argumentin -- %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "PREC-arvo â€%.*s†on virheellinen"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "RNDMODE-arvo â€%.*s†on virheellinen"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: vastaanotettu argumentti ei ole numeerinen"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): negatiivinen arvo antaa outoja tuloksia"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): jaosarvo typistetään"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "compl(%Zd): negatiiviset arvot antavat outoja tuloksia"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: vastaanotettu argumentti #%d ei ole numeerinen"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: argumentilla #%d on virheellinen arvo %Rg, käytetään 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: argumentin #%d negatiivinen arvo %Rg antaa outoja tuloksia"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: argumentin #%d jaosarvo %Rg typistetään"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%s: argumentin #%d negatiivinen arvo %Zd antaa outoja tuloksia"
@@ -3341,24 +3364,24 @@ msgstr "%s: argumentin #%d negatiivinen arvo %Zd antaa outoja tuloksia"
msgid "cmd. line:"
msgstr "komentorivi:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "kenoviiva merkkijonon lopussa"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "vanha awk ei tue â€\\%câ€-koodinvaihtosekvenssiä"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX ei salli â€\\xâ€-koodinvaihtoja"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "ei heksadesimaalilukuja â€\\xâ€-koodinvaihtosekvenssissä"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3367,12 +3390,12 @@ msgstr ""
"heksadesimaalikoodinvaihtomerkkejä \\x%.*s / %d ei ole luultavasti tulkittu "
"sillä tavalla kuin odotat"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "koodinvaihtosekvenssi â€\\%c†käsitelty kuin pelkkä â€%câ€"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3401,12 +3424,12 @@ msgid "sending profile to standard error"
msgstr "lähetetään profiili vakiovirheeseen"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s-lohko(t)\n"
+"\t# Säännöt\n"
"\n"
#: profile.c:198
@@ -3423,11 +3446,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "sisäinen virhe: %s null vname-arvolla"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "sisäinen virhe: builtin null-funktionimellä"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3436,12 +3459,12 @@ msgstr ""
"\t# Ladatut laajennukset (-l ja/tai @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# gawk-profiili, luotu %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3450,7 +3473,7 @@ msgstr ""
"\n"
"\t# Funktiot, luetteloitu aakkosjärjestyksessä\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: tuntematon edelleenohjaustyyppi %d"
@@ -3461,80 +3484,116 @@ msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
"säännöllisen lausekkeen komponentin â€%.*s†pitäisi luultavasti olla â€[%.*s]â€"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Onnistui"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Ei täsmäystä"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Virheellinen säännöllinen lauseke"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Virheellinen vertailumerkki"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Virheellinen merkkiluokkanimi"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Jäljessä oleva kenoviiva"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Virheellinen paluuviite"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "Pariton [ tai [^"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "Pariton ( tai \\("
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "Pariton \\{"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Virheellinen \\{\\}-sisältö"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Virheellinen lukualueen loppu"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Muisti loppui"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Virheellinen edeltävä säännöllinen lauseke"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Ennenaikainen säännöllisen lausekkeen loppu"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Säännöllinen lauseke on liian iso"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr "Pariton ) tai \\)"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Ei edellistä säännöllistä lauseketta"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "funktio â€%sâ€: funktionimen käyttö parametrinimenä epäonnistui"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "pääsisällön pop-toiminto epäonnistui"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "â€getline var†virheellinen säännön â€%s†sisällä"
+
+#~ msgid "`getline' invalid inside `%s' rule"
+#~ msgstr "â€getline†virheellinen säännön â€%s†sisällä"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr "ei (tunnettua) yhteyskäytäntöä tarjottu erikoistiedostonimessä â€%sâ€"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "erikoistiedostonimi â€%s†on vaillinainen"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "on tarjottava etäkoneen nimi pistokkeeseen â€/inetâ€"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "on tarjottava etäportti pistokkeeseen â€/inetâ€"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s-lohko(t)\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr "muodon â€[%c-%c]†lukualue on paikallisasetuksesta riippuvainen"
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "yritettiin käyttää funktiota â€%s†taulukkona"
-
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "viite alustamattomaan elementtiin â€%s[\"%.*s\"]â€"
@@ -3613,9 +3672,6 @@ msgstr "pääsisällön pop-toiminto epäonnistui"
#~ msgid "function `%s' not defined"
#~ msgstr "funktio â€%s†ei ole määritelty"
-#~ msgid "non-redirected `getline' invalid inside `%s' rule"
-#~ msgstr "edelleenohjaamaton â€getline†virheellinen â€%sâ€-säännön sisällä"
-
#~ msgid "`nextfile' cannot be called from a `%s' rule"
#~ msgstr "â€nextfile†ei voida kutsua â€%sâ€-säännöstä"
diff --git a/po/fr.gmo b/po/fr.gmo
index c962ab71..26378b48 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 2a951b29..8cfe5517 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,8 +8,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-01-16 00:31+0100\n"
"Last-Translator: Jean-Philippe Guérard <jean-philippe.guerard@corbeaunoir."
"org>\n"
@@ -39,9 +39,9 @@ msgstr "tentative d'utiliser le paramètre scalaire « %s » comme tableau"
msgid "attempt to use scalar `%s' as an array"
msgstr "tentative d'utiliser le scalaire « %s » comme tableau"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "tentative d'utilisation du tableau « %s » dans un contexte scalaire"
@@ -92,420 +92,425 @@ msgstr "asort : le 1er argument ne doit pas être un sous-tableau du 2e"
msgid "asorti: cannot use a subarray of second arg for first arg"
msgstr "asorti : le 1er argument ne doit pas être un sous-tableau du 2e"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "« %s » n'est pas un nom de fonction valide"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "la fonction de comparaison « %s » du tri n'est pas définie"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "les blocs %s doivent avoir une partie action"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "chaque règle doit avoir au moins une partie motif ou action"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "l'ancien awk ne permet pas les « BEGIN » ou « END » multiples"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "« %s » est une fonction interne, elle ne peut être redéfinie"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr "l'expression rationnelle constante « // » n'est pas un commentaire C++"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr "l'expression rationnelle constante « /%s/ » n'est pas un commentaire C"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "le corps du switch comporte des cas répétés : %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "plusieurs « default » ont été détectés dans le corps du switch"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "« break » est interdit en dehors d'une boucle ou d'un switch"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "« continue » est interdit en dehors d'une boucle ou d'un switch"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "« next » est utilisé dans l'action %s"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "« nextfile » est utilisé dans l'action %s"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "« return » est utilisé hors du contexte d'une fonction"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"dans BEGIN ou END, un « print » seul devrait sans doute être un « print "
"\"\" »"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "« delete » est interdit sur SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "« delete » est interdit sur FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "« delete(array) » est une extension non portable de tawk"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "impossible d'utiliser des tubes bidirectionnels en série"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "expression rationnelle à droite d'une affectation"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "expression rationnelle à gauche d'un opérateur « ~ » ou « !~ »"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "l'ancien awk n'autorise le mot-clef « in » qu'après « for »"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "expression rationnelle à droite d'une comparaison"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "« getline var » n'est pas valable dans une règle « %s »"
-
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
+#: awkgram.y:1411
+#, fuzzy, c-format
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr "« getline » n'est pas valable dans une règle « %s »"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "dans une action END, un « getline » non redirigé n'est pas défini"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "l'ancien awk ne dispose pas des tableaux multidimensionnels"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "l'appel de « length » sans parenthèses n'est pas portable"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "les appels indirects de fonctions sont une extension gawk"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"impossible d'utiliser la variable spéciale « %s » pour un appel indirect de "
"fonction"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr ""
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "expression indice incorrecte"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "avertissement : "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fatal : "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "fin de chaîne ou passage à la ligne inattendu"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "impossible d'ouvrir le fichier source « %s » en lecture (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "impossible d'ouvrir la bibliothèque partagée « %s » en lecture (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "raison inconnue"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "impossible d'inclure « %s » et de l'utiliser comme extension"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "le fichier source « %s » a déjà été intégré"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "la bibliothèque partagée « %s » est déjà chargée"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include est une extension gawk"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "Le nom de fichier après @include est vide"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load est une extension gawk"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "Le nom de fichier après @load est vide"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "le programme indiqué en ligne de commande est vide"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "impossible de lire le fichier source « %s » (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "le fichier source « %s » est vide"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "le fichier source ne se termine pas par un passage à la ligne"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr ""
"expression rationnelle non refermée terminée par un « \\ » en fin de fichier"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"%s : %d : le modificateur d'expressions rationnelles « /.../%c » de tawk ne "
"marche pas dans gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"le modificateur d'expressions rationnelles « /.../%c » de tawk ne marche pas "
"dans gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "expression rationnelle non refermée"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "expression rationnelle non refermée en fin de fichier"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr ""
"l'utilisation de « \\ #... » pour prolonger une ligne n'est pas portable"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "la barre oblique inverse n'est pas le dernier caractère de la ligne"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX n'autorise pas l'opérateur « **= »"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "l'ancien awk ne dispose pas de l'opérateur « **= »"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX n'autorise pas l'opérateur « ** »"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "l'ancien awk ne dispose pas de l'opérateur « ** »"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "l'ancien awk ne dispose pas de l'opérateur « ^= »"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "l'ancien awk ne dispose pas de l'opérateur « ^ »"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "chaîne non refermée"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "caractère incorrect « %c » dans l'expression"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "« %s » est une extension gawk"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX n'autorise pas « %s »"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "l'ancien awk ne dispose pas de « %s »"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "« goto est jugé dangereux ! » (Edsger W. Dijkstra)\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d n'est pas un nombre d'arguments valide de %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s : une chaîne littérale en dernier argument d'une substitution est sans "
"effet"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "le 3e paramètre de %s n'est pas un objet modifiable"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match : le 3e argument est une extension gawk"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close : le 2e argument est une extension gawk"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"utilisation incorrecte de dcgettext(_\"...\") : enlevez le souligné de tête"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"utilisation incorrecte de dcngettext(_\"...\") : enlevez le souligné de tête"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr ""
"index : le second argument ne peut être une expression rationnelle constante"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "fonction « %s » : le paramètre « %s » masque la variable globale"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "impossible d'ouvrir « %s » en écriture (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "envoi de la liste des variables vers la sortie d'erreur standard"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s : échec de la fermeture (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadows_funcs() a été appelé deux fois !"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "il y avait des variables masquées."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "nom de fonction « %s » déjà défini"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr ""
"fonction « %s » : impossible d'utiliser un nom de fonction comme paramètre"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"fonction « %s » : impossible d'utiliser la variable spéciale « %s » comme "
"paramètre d'une fonction"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr ""
"fonction « %s » : paramètre #%d, « %s » est un doublon du paramètre #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "fonction « %s » appelée sans être définie"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "fonction « %s » définie mais jamais appelée directement"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "le paramètre #%d, une expr. rationnelle constante, fournit un booléen"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -514,24 +519,24 @@ msgstr ""
"fonction « %s » appelée avec un espace entre son nom\n"
"et « ( », ou utilisée comme variable ou tableau"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "tentative de division par zéro"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "tentative de division par zéro dans « %% »"
# gawk 'BEGIN { $1++ = 1 }'
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
"impossible d'assigner une valeur au résultat de la post-incrémentation d'un "
"champ"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "cible de l'assignement incorrecte (opcode %s)"
@@ -574,189 +579,199 @@ msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr ""
"fflush : « %s » n'est ni un fichier ouvert, ni un tube, ni un co-processus"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index : le premier argument n'est pas une chaîne"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index : le second argument n'est pas une chaîne"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int : l'argument n'est pas numérique"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length : l'argument reçu est un tableau"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "« length(tableau) » est une extension gawk"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length : l'argument n'est pas une chaîne"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log : l'argument n'est pas numérique"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log : l'argument est négatif %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr ""
"fatal : « numéro$ » doit être utilisé pour toutes les formats ou pour aucun"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "taille du champ de la spécification « %% » ignorée"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "précision de la spécification « %% » ignorée"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "taille du champ et précision de la spécification « %% » ignorées"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "fatal : « $ » n'est pas autorisé dans les formats awk"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fatal : le numéro d'argument de « $ » doit être > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
"fatal : le numéro d'argument %ld est > au nombre total d'arguments fournis"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "fatal : dans un format, « $ » ne doit pas suivre un point"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"fatal : aucun « $ » fourni pour la taille ou la précision du champ positionné"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "« l » n'a aucun sens dans un format awk ; ignoré"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "fatal : « l » est interdit dans un format awk POSIX"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "« L » n'a aucun sens dans un format awk ; ignoré"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "fatal : « L » est interdit dans un format awk POSIX"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "« h » n'a aucun sens dans un format awk ; ignoré"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "fatal : « h » est interdit dans un format awk POSIX"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf : valeur %g hors limite pour le format « %%%c »"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf : valeur %g hors limite pour le format « %%%c »"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf : valeur %g hors limite pour le format « %%%c »"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr "caractère de format inconnu « %c » ignoré : aucun argument converti"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "fatal : pas assez d'arguments pour satisfaire la chaîne de formatage"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ à court pour celui-ci"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf : spécification de format sans lettre de contrôle"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "trop d'arguments pour la chaîne de formatage"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf : aucun argument"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf : aucun argument"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt : l'argument n'est pas numérique"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt : appelé avec un argument négatif %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr : la longueur %g n'est pas >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr : la longueur %g n'est pas >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr : la longueur %g n'est pas entière, elle sera tronquée"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr "substr : la longueur %g est trop grande, tronquée à %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr : l'index de début %g n'est pas valide, utilisation de 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr : l'index de début %g n'est pas un entier, il sera tronqué"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr : la chaîne source est de longueur nulle"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr : l'index de début %g est au-delà de la fin de la chaîne"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -764,195 +779,201 @@ msgstr ""
"substr : la longueur %g à partir de %g dépasse la fin du 1er argument (%lu)"
# Exemple : gawk --lint 'BEGIN { PROCINFO["strftime"]=123 ; print strftime() }'
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
"strftime : la valeur de formatage PROCINFO[\"strftime\"] est de type "
"numérique"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime : le second argument n'est pas numérique"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr "strftime: second argument négatif ou trop grand pour time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftim : le premier argument n'est pas une chaîne"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime : la chaîne de formatage est vide"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime : l'argument n'est pas une chaîne"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr ""
"mktime : au moins l'une des valeurs est en dehors de la plage par défaut"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "La fonction « system » est interdite en isolement (mode sandbox)"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system : l'argument n'est pas une chaîne"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "référence à un champ non initialisé « $%d »"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower : l'argument n'est pas une chaîne"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper : l'argument n'est pas une chaîne"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2 : le premier argument n'est pas numérique"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2 : le second argument n'est pas numérique"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin : l'argument n'est pas numérique"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos : l'argument n'est pas numérique"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand : l'argument n'est pas numérique"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match : le 3e argument n'est pas un tableau"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub : le 3e argument vaut 0, il sera traité comme un 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub : le 3e argument vaut 0, il sera traité comme un 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift : le premier argument n'est pas numérique"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift : le second argument reçu n'est pas numérique"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr ""
"lshift(%f, %f) : les valeurs négatives donnent des résultats inattendus"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f) : les valeurs non entières seront tronquées"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f) : un décalage trop grand donne des résultats inattendus"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift : le premier argument n'est pas numérique"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift : le second argument reçu n'est pas numérique"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr ""
"rshift(%f, %f) : les valeurs négatives donneront des résultats inattendus"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f) : les valeurs non entières seront tronquées"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
"rshift(%f, %f) : un décalage trop grand donnera des résultats inattendus"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and : appelé avec moins de 2 arguments"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and : l'argument %d n'est pas numérique"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr ""
"and : l'argument %d est négatif (%g) ce qui aura des résultats inattendus"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or : appelé avec moins de 2 arguments"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or : l'argument %d n'est pas numérique"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr ""
"or : l'argument %d est négatif (%g) ce qui aura des résultats inattendus"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor : appelé avec moins de 2 arguments"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor : l'argument %d n'est pas numérique"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr ""
"xor : l'argument %d est négatif (%g) ce qui aura des résultats inattendus"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl : l'argument n'est pas numérique"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f) : les valeurs négatives donneront des résultats inattendus"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f) : les valeurs non entières seront tronquées"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext : « %s » n'est pas dans un catégorie valide de la locale"
@@ -1256,40 +1277,49 @@ msgstr "up [N] - remonte de N trames dans la pile."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch var - définit un point de surveillance pour une variable."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - affiche la trace de tout ou des N dernières trames (du début "
+"si N < 0)."
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "erreur : "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "impossible de lire la commande (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "impossible de lire la commande (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "la commande contient un caractère incorrect"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "commande inconnue - « %.*s », essayez « help »"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "Caractère incorrect"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "commande inconnue : %s\n"
@@ -1821,68 +1851,70 @@ msgstr "« %s » interdit dans ce contexte ; instruction ignorée"
msgid "`return' not allowed in current context; statement ignored"
msgstr "« return » interdit dans ce contexte ; instruction ignorée"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Pas de symbole « %s » dans le contexte actuel"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "[ non apparié"
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "classe de caractères incorrecte"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "la syntaxe des classes de caractères est [[:space:]], et non [:space:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "échappement \\ non terminé"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Contenu de \\{\\} incorrect"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Expression rationnelle trop grande"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "( non apparié"
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "aucune syntaxe indiquée"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ") non apparié"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "type de nœud %d inconnu"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "code opération %d inconnu"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "le code opération %s n'est pas un opérateur ou un mot-clef"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "débordement de tampon dans genflag2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1893,93 +1925,93 @@ msgstr ""
"\t# Pile des appels de fonctions :\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "« IGNORECASE » est une extension gawk"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "« BINMODE » est une extension gawk"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "la valeur « %s » de BINMODE n'est pas valide, 3 utilisé à la place"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "spécification de « %sFMT » erronée « %s »"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "désactivation de « --lint » en raison d'une affectation à « LINT »"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "référence à un argument non initialisé « %s »"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "référence à une variable non initialisée « %s »"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "tentative de référence à un champ via une valeur non numérique"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "tentative de référence à un champ via une chaîne nulle"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "tentative d'accès au champ %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "référence à un champ non initialisé « $%ld »"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "la fonction « %s » a été appelée avec trop d'arguments"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: type « %s » inattendu"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "tentative de division par zéro dans « /= »"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "tentative de division par zéro dans « %%= »"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "les extensions sont interdites en isolement (mode sandbox)"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load est une extension gawk"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext : lib_name reçu NULL"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext : impossible d'ouvrir la bibliothèque « %s » (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
@@ -1987,34 +2019,34 @@ msgstr ""
"load_ext : bibliothèque « %s » : ne définit pas "
"« plugin_is_GPL_compatible » (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr ""
"load_ext : bibliothèque « %s » : impossible d'appeler la fonction "
"« %s » (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
"load_ext : bibliothèque « %s » : échec de la routine d'initialisation « %s "
"»\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "« extension » est une extension gawk"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "extension : lib_name reçu NULL"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension : impossible d'ouvrir la bibliothèque « %s » (%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
@@ -2022,100 +2054,100 @@ msgstr ""
"extension : bibliothèque « %s » : ne définit pas "
"« plugin_is_GPL_compatible » (%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr ""
"extension : bibliothèque « %s » : impossible d'appeler la fonction "
"« %s » (%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin : nom de fonction manquant"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin : impossible de redéfinir la fonction « %s »"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin : fonction « %s » déjà définie"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin : nom de la fonction « %s » déjà défini"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"make_builtin : impossible d'utiliser la fonction gawk « %s » comme nom de "
"fonction"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin : la fonction « %s » a un nombre négatif d'arguments"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension : nom de fonction manquant"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension : caractère illégal « %c » dans le nom de la fonction « %s »"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension : impossible de redéfinir la fonction « %s »"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension : fonction « %s » est déjà définie"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension : nom de la fonction « %s » déjà défini"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
"extension : impossible d'utiliser la fonction interne gawk « %s » comme nom "
"de fonction"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "fonction « %s » définie comme ayant au maximum« %d » argument(s)"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "fonction « %s » : argument #%d manquant"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr ""
"fonction « %s » : argument #%d : tentative d'utilisation d'un scalaire comme "
"tableau"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr ""
"fonction « %s » : argument #%d : tentative d'utiliser un tableau comme "
"scalaire"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "chargement dynamique des bibliothèques impossible"
@@ -2259,7 +2291,7 @@ msgstr "wait : appelé avec trop d'arguments"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin : modification sur place déjà active"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin : 2 arguments attendu, appelé avec %d"
@@ -2291,56 +2323,56 @@ msgstr "inplace_begin : « %s » n'est pas un fichier ordinaire"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin : échec de mkstemp('%s') (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin : échec de la chmod (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin : échec de dup(stdout) (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin : échec de dup2(%d, stdout) (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin : échec de close(%d) (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
"inplace_end : impossible de récupérer le 1er argument comme nom de fichier"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end : modification sur place non active"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "ipnlace_end : échec de dup2(%d, stdout) (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end : échec de close(%d) (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end : échec de fsetpos(stdout) (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end : échec de link('%s', '%s') (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end : échec de rename('%s', '%s') (%s)"
@@ -2382,50 +2414,54 @@ msgstr "readfile : appelé avec trop d'arguments"
msgid "readfile: called with no arguments"
msgstr "readfile : appelé sans argument"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea : appelé avec trop d'arguments"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea : l'argument 0 n'est pas une chaîne\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea : l'argument 1 n'est pas un tableau\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array : impossible d'aplatir le tableau\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array : impossible de libérer le tableau aplati\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada : appelé avec trop d'arguments"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada : l'argument 0 n'est pas une chaîne\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada : l'argument 1 n'est pas un tableau\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada : échec de clear_array\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array : échec de set_array_element\n"
@@ -2454,88 +2490,88 @@ msgstr "sleep : l'argument est négatif"
msgid "sleep: not supported on this platform"
msgstr "sleep : n'est pas disponible sur cette plateforme"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "une valeur négative a été assignée à NF"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split : le 4e argument est une extension gawk"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split : le 4e argument n'est pas un tableau"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split : le 2e argument n'est pas un tableau"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr "split : impossible d'utiliser le même tableau comme 2e et 4e argument"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split : impossible d'utiliser un sous-tableau du 2e argument en 4e argument"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split : impossible d'utiliser un sous-tableau du 4e argument en 2e argument"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split : utiliser une chaîne vide en 3e argument est une extension gawk"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit : le 4e argument n'est pas un tableau"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit : le 2e argument n'est pas un tableau"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit : le 3e argument n'est pas un tableau"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit : impossible d'utiliser le même tableau comme 2e et 4e argument"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit : impossible d'utiliser un sous-tableau du 2e argument en 4e "
"argument"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit : impossible d'utiliser un sous-tableau du 4e argument en 2e "
"argument"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "« FIELDWIDTHS » est une extension gawk"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "valeur de FIELDWIDTHS incorrecte, près de « %s »"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "utiliser une chaîne vide pour « FS » est une extension gawk"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr ""
"l'ancien awk n'accepte pas les expr. rationnelles comme valeur de « FS »"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "« FPAT » est une extension gawk"
@@ -2551,20 +2587,20 @@ msgstr "node_to_awk_value : node nul reçu"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value : val nul reçu"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element : tableau nul reçu"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element : indice nul reçu"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array : impossible de convertir l'indice %d\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array : impossible de convertir la valeur %d\n"
@@ -2624,312 +2660,293 @@ msgstr "%s : l'option « -W %s » n'accepte pas d'argument\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s : l'option « -W %s » nécessite un argument\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "L'argument « %s » de la ligne de commande est un répertoire : ignoré"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "impossible d'ouvrir le fichier « %s » en lecture (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "échec de la fermeture du fd %d (« %s ») : %s"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "les redirections sont interdites en isolement (mode sandbox)"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "l'expression dans la redirection « %s » n'a qu'une valeur numérique"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "l'expression dans la redirection « %s » donne une chaîne nulle"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"le fichier « %s » de la redirection « %s » pourrait être le résultat d'une "
"expression booléenne"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "mélange non nécessaire de « > » et « >> » pour le fichier « %.*s »"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "impossible d'ouvrir le tube « %s » en sortie (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "impossible d'ouvrir le tube « %s » en entrée (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
"impossible d'ouvrir un tube bidirectionnel « %s » en entrées-sorties (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "impossible de rediriger depuis « %s » (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "impossible de rediriger vers « %s » (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"limite système du nombre de fichiers ouverts atteinte : début du "
"multiplexage des descripteurs de fichiers"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "échec de la fermeture de « %s » (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "trop de fichiers d'entrées ou de tubes ouverts"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close : le second argument doit être « to » ou « from »"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr ""
"close : « %.*s » n'est ni un fichier ouvert, ni un tube ou un co-processus"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "fermeture d'une redirection qui n'a jamais été ouverte"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close : la redirection « %s » n'a pas été ouverte avec « |& », second "
"argument ignoré"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "résultat d'échec (%d) sur la fermeture du tube « %s » (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "résultat d'échec (%d) sur la fermeture du fichier « %s » (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "aucune fermeture explicite du connecteur « %s » fournie"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "aucune fermeture explicite du co-processus « %s » fournie"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "aucune fermeture explicite du tube « %s » fournie"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "aucune fermeture explicite du fichier « %s » fournie"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "erreur lors de l'écriture vers la sortie standard (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "erreur lors de l'écriture vers l'erreur standard (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "échec du vidage du tube « %s » (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "échec du vidage du tube vers « %s » par le co-processus (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "échec du vidage vers le fichier « %s » (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "le port local %s n'est pas valide dans « /inet »"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr ""
"les informations sur l'hôte et le port distants (%s, %s) ne sont pas valides"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr ""
-"aucun protocole (connu) n'a été fourni dans le nom de fichier spécial « %s »"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "nom de fichier spécial « %s » incomplet"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "un nom d'hôte distant doit être fourni à « /inet »"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "un port distant doit être fourni à « /inet »"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "les communications TCP/IP ne sont pas disponibles"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "impossible d'ouvrir « %s », mode « %s »"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "échec de la fermeture du pty maître (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "échec de la fermeture de stdout du processus fils (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"échec du déplacement du pty esclave vers le stdout du processus fils (dup : "
"%s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "échec de fermeture du stdin du processus fils (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"échec du déplacement du pty esclave vers le stdin du processus fils (dup : "
"%s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "échec de la fermeture du pty esclave (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr "échec du déplacement du tube vers stdout du processus fils (dup : %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr "échec de déplacement du tube vers stdin du processus fils (dup : %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "échec de la restauration du stdout dans le processus parent\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "échec de la restauration du stdin dans le processus parent\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "échec de la fermeture du tube (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "« |& » non disponible"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "impossible d'ouvrir le tube « %s » (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "impossible de créer le processus fils pour « %s » (fork : %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser : pointeur NULL reçu"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"l'analyseur d'entrée « %s » est en conflit avec l'analyseur « %s » déjà "
"installé"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "l'analyseur d'entrée « %s » n'a pu ouvrir « %s »"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper : pointeur NULL reçu"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
"le filtre de sortie « %s » est en conflit avec le filtre « %s » déjà installé"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "le filtre de sortie « %s » n'a pu ouvrir « %s »"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor : pointeur NULL reçu"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2938,216 +2955,203 @@ msgstr ""
"le gestionnaire bidirectionnel « %s » est en conflit avec le gestionnaire "
"« %s » déjà installé"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "le gestionnaire bidirectionnel « %s » n'a pu ouvrir « %s »"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "le fichier de données « %s » est vide"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "impossible d'allouer plus de mémoire d'entrée"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr ""
"l'utilisation d'un « RS » de plusieurs caractères est une extension gawk"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "les communications IPv6 ne sont pas disponibles"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "argument vide de l'option « -e / --source » ignoré"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s : option « -W %s » non reconnue, ignorée\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s : l'option requiert un argument - %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"variable d'environnement « POSIXLY__CORRECT » définie : activation de « --"
"posix »"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "« --posix » prend le pas sur « --traditional »"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr ""
"« --posix » et « --traditional » prennent le pas sur « --non-decimal-data »"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr ""
"l'exécution de %s en mode setuid root peut être un problème de sécurité"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "« --posix » prend le pas sur « --characters-as-bytes »"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "impossible d'activer le mode binaire sur stdin (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "impossible d'activer le mode binaire sur stdout (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "impossible d'activer le mode binaire sur stderr (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "aucun programme !"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"Utilisation : %s [options GNU ou POSIX] -f fichier_prog [--] fichier ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
"Utilisation : %s [options GNU ou POSIX] [--] %cprogramme%c fichier ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "Options POSIX :\t\tOptions longues GNU : (standard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f fichier_prog\t\t--file=fichier_prog\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=valeur\t\t--assign=var=valeur\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Options POSIX :\t\tOptions longues GNU : (extensions)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[fichier]\t\t--dump-variables[=fichier]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[fichier]\t\t--debug[=fichier]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'programme'\t\t--source='programme'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E fichier\t\t--exec=fichier\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i fichier\t\t--include=fichier\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l bibliothèque\t\t--load=bibliothèque\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[fichier]\t\t--pretty-print[=fichier]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[fichier]\t\t--profile[=fichier]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3156,7 +3160,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3171,7 +3175,7 @@ msgstr ""
"<traduc CHEZ traduc POINT org>.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3181,7 +3185,7 @@ msgstr ""
"Par défaut, il lit l'entrée standard et écrit sur la sortie standard.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3191,7 +3195,7 @@ msgstr ""
"\tgawk '{ somme += $1 }; END { print somme }' fichier\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3211,7 +3215,7 @@ msgstr ""
"version ultérieure de votre choix.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3226,7 +3230,7 @@ msgstr ""
"General Public License).\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3235,16 +3239,16 @@ msgstr ""
"(GNU General Public License) avec ce programme. Sinon, consultez\n"
"http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft ne définit pas le FS comme étant une tabulation en awk POSIX"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "valeur inconnue pour la définition de champ : %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3253,99 +3257,117 @@ msgstr ""
"%s : « %s » l'argument de « -v » ne respecte pas la forme « var=valeur »\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "« %s » n'est pas un nom de variable valide"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "« %s » n'est pas un nom de variable, recherche du fichier « %s=%s »"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "impossible d'utiliser le mot clef gawk « %s » comme variable"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "impossible d'utiliser la fonction « %s » comme variable"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "exception du traitement en virgule flottante"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "fatal : erreur interne"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "fatal : erreur interne : erreur de segmentation"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "fatal : erreur interne : débordement de la pile"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "aucun descripteur fd %d pré-ouvert"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "impossible de pré-ouvrir /dev/null pour le descripteur fd %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "argument vide de l'option « -e / --source » ignoré"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s : option « -W %s » non reconnue, ignorée\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s : l'option requiert un argument - %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "la valeur « %.*s » de PREC est incorrecte"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "la valeur « %.*s » de RNDMODE est incorrecte"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s : argument reçu non numérique"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg) : les valeurs négatives donneront des résultats inattendus"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg) : les valeurs non entières seront tronquées"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "compl(%Zd) : les valeurs négatives donneront des résultats inattendus"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s : argument reçu non numérique #%d"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s : l'argument #%d a une valeur incorrecte %Rg, utilisation de 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr ""
"%s : argument #%d : la valeur négative %Rg donnera des résultats inattendus"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s : argument #%d : la valeur non entière %Rg sera tronquée"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr ""
@@ -3356,24 +3378,24 @@ msgstr ""
msgid "cmd. line:"
msgstr "ligne de commande:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "barre oblique inverse à la fin de la chaîne"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "l'ancien awk ne dispose pas de la séquence d'échappement « \\%c »"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX n'autorise pas les séquences d'échappement « \\x »"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "aucun chiffre hexadécimal dans la séquence d'échappement « \\x » "
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3382,12 +3404,12 @@ msgstr ""
"la séquence d'échappement hexa. \\x%.*s de %d caractères ne sera "
"probablement pas interprétée comme vous l'imaginez"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "séquence d'échappement « \\%c » traitée comme un simple « %c »"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3417,12 +3439,12 @@ msgid "sending profile to standard error"
msgstr "envoi du profil vers la sortie d'erreur standard"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# Bloc(s) %s\n"
+"\t# Règle(s)\n"
"\n"
#: profile.c:198
@@ -3439,11 +3461,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "erreur interne : %s avec un vname nul"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "erreur interne : fonction interne avec un fname nul"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3452,12 +3474,12 @@ msgstr ""
"\t# Extensions chargées (-l ou @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# profile gawk, créé %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3466,7 +3488,7 @@ msgstr ""
"\n"
"\t# Fonctions, par ordre alphabétique\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str : type de redirection %d inconnu"
@@ -3478,73 +3500,112 @@ msgstr ""
"le composant d'expression rationnelle « %.*s » devrait probablement être "
"« [%.*s] »"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Succès"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Aucune correspondance"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Expression rationnelle incorrecte"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Caractère d'interclassement incorrect"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Nom de classe de caractères incorrect"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Barre oblique inverse finale"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Référence arrière incorrecte"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "[ ou [^ sans correspondance"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "( ou \\( sans correspondance"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "\\{ sans correspondance"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Contenu de \\{\\} incorrect"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Borne finale non valable"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Mémoire épuisée"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Expression rationnelle précédente incorrecte"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Fin prématurée de l'expression rationnelle"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Expression rationnelle trop grande"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ") ou \\) sans correspondance"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Aucune expression rationnelle précédente"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr ""
+"fonction « %s » : impossible d'utiliser un nom de fonction comme paramètre"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "impossible de rétablir (pop) le contexte principal (main)"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "« getline var » n'est pas valable dans une règle « %s »"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr ""
+#~ "aucun protocole (connu) n'a été fourni dans le nom de fichier spécial "
+#~ "« %s »"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "nom de fichier spécial « %s » incomplet"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "un nom d'hôte distant doit être fourni à « /inet »"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "un port distant doit être fourni à « /inet »"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# Bloc(s) %s\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr "les plages « [%c-%c] » sont dépendantes des paramètres régionaux"
diff --git a/po/gawk.pot b/po/gawk.pot
index bb47fa9e..7f778872 100644
--- a/po/gawk.pot
+++ b/po/gawk.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gawk 4.1.1\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Project-Id-Version: gawk 4.1.1c\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -36,9 +36,9 @@ msgstr ""
msgid "attempt to use scalar `%s' as an array"
msgstr ""
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr ""
@@ -89,422 +89,427 @@ msgstr ""
msgid "asorti: cannot use a subarray of second arg for first arg"
msgstr ""
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr ""
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr ""
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr ""
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr ""
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr ""
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr ""
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr ""
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr ""
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr ""
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr ""
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr ""
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr ""
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr ""
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr ""
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr ""
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr ""
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr ""
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr ""
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr ""
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr ""
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr ""
-#: awkgram.y:1417
+#: awkgram.y:1411
#, c-format
-msgid "`getline var' invalid inside `%s' rule"
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr ""
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr ""
-
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr ""
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr ""
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr ""
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr ""
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr ""
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr ""
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr ""
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr ""
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr ""
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr ""
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr ""
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr ""
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr ""
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr ""
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr ""
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr ""
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr ""
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr ""
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr ""
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr ""
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr ""
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr ""
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr ""
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr ""
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr ""
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr ""
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr ""
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr ""
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr ""
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr ""
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr ""
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr ""
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr ""
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr ""
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr ""
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr ""
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr ""
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr ""
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr ""
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr ""
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr ""
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr ""
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr ""
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr ""
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr ""
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr ""
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr ""
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr ""
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr ""
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr ""
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr ""
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr ""
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr ""
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr ""
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr ""
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr ""
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr ""
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
"or used as a variable or an array"
msgstr ""
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr ""
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr ""
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr ""
@@ -542,371 +547,387 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr ""
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr ""
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr ""
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr ""
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr ""
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr ""
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr ""
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr ""
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr ""
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr ""
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr ""
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr ""
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr ""
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr ""
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr ""
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr ""
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr ""
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr ""
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr ""
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr ""
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr ""
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr ""
-#: builtin.c:1463
+#: builtin.c:1055
+#, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr ""
+
+#: builtin.c:1068
+#, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr ""
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr ""
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr ""
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr ""
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr ""
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr ""
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr ""
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr ""
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr ""
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr ""
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr ""
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr ""
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr ""
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr ""
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr ""
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr ""
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr ""
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
msgstr ""
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr ""
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr ""
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr ""
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr ""
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr ""
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr ""
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr ""
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr ""
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr ""
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr ""
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr ""
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr ""
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr ""
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr ""
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr ""
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr ""
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr ""
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr ""
-#: builtin.c:3030
+#: builtin.c:2720
+#, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr ""
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr ""
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr ""
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr ""
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr ""
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr ""
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr ""
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr ""
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr ""
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr ""
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr ""
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr ""
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr ""
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr ""
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr ""
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr ""
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr ""
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr ""
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr ""
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr ""
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr ""
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr ""
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr ""
@@ -1186,40 +1207,46 @@ msgstr ""
msgid "watch var - set a watchpoint for a variable."
msgstr ""
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr ""
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr ""
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr ""
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr ""
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr ""
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr ""
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr ""
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr ""
@@ -1731,68 +1758,68 @@ msgstr ""
msgid "`return' not allowed in current context; statement ignored"
msgstr ""
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr ""
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr ""
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr ""
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr ""
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr ""
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+msgid "invalid content of \\{\\}"
msgstr ""
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+msgid "regular expression too big"
msgstr ""
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr ""
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr ""
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ""
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr ""
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr ""
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr ""
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr ""
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1800,211 +1827,211 @@ msgid ""
"\n"
msgstr ""
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr ""
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr ""
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr ""
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr ""
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr ""
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr ""
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr ""
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr ""
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr ""
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr ""
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr ""
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr ""
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr ""
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr ""
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr ""
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr ""
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr ""
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr ""
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr ""
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr ""
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr ""
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr ""
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr ""
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr ""
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr ""
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr ""
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr ""
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr ""
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr ""
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr ""
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr ""
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr ""
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr ""
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr ""
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr ""
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr ""
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr ""
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr ""
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr ""
@@ -2148,7 +2175,7 @@ msgstr ""
msgid "inplace_begin: in-place editing already active"
msgstr ""
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr ""
@@ -2177,55 +2204,55 @@ msgstr ""
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr ""
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr ""
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr ""
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr ""
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr ""
@@ -2267,50 +2294,54 @@ msgstr ""
msgid "readfile: called with no arguments"
msgstr ""
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr ""
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr ""
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr ""
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr ""
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr ""
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr ""
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr ""
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr ""
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr ""
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr ""
@@ -2339,80 +2370,80 @@ msgstr ""
msgid "sleep: not supported on this platform"
msgstr ""
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr ""
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr ""
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr ""
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr ""
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr ""
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr ""
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr ""
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr ""
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr ""
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr ""
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr ""
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr ""
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr ""
@@ -2428,20 +2459,20 @@ msgstr ""
msgid "node_to_awk_value: received null val"
msgstr ""
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr ""
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr ""
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr ""
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr ""
@@ -2501,504 +2532,472 @@ msgstr ""
msgid "%s: option '-W %s' requires an argument\n"
msgstr ""
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr ""
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr ""
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr ""
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr ""
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr ""
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr ""
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr ""
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr ""
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr ""
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr ""
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr ""
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr ""
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr ""
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr ""
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr ""
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr ""
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr ""
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr ""
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr ""
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr ""
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr ""
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr ""
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr ""
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr ""
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr ""
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr ""
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr ""
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr ""
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr ""
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr ""
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr ""
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr ""
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr ""
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr ""
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr ""
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr ""
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr ""
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr ""
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr ""
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr ""
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr ""
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr ""
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr ""
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr ""
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr ""
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr ""
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr ""
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr ""
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr ""
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr ""
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
"`%s'"
msgstr ""
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr ""
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr ""
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr ""
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr ""
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr ""
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr ""
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr ""
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr ""
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr ""
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr ""
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr ""
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr ""
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr ""
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr ""
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr ""
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr ""
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr ""
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr ""
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr ""
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr ""
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr ""
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr ""
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr ""
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr ""
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr ""
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr ""
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr ""
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr ""
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr ""
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr ""
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr ""
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr ""
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
-msgstr ""
-
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
+#: main.c:586
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr ""
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr ""
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr ""
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr ""
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr ""
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr ""
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr ""
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr ""
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr ""
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr ""
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr ""
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr ""
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr ""
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr ""
@@ -3007,7 +3006,7 @@ msgstr ""
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3015,21 +3014,21 @@ msgid ""
"\n"
msgstr ""
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
"\n"
msgstr ""
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
msgstr ""
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3041,7 +3040,7 @@ msgid ""
"\n"
msgstr ""
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3050,120 +3049,138 @@ msgid ""
"\n"
msgstr ""
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
msgstr ""
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr ""
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr ""
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
"\n"
msgstr ""
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr ""
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr ""
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr ""
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr ""
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr ""
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr ""
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr ""
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr ""
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr ""
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr ""
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr ""
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr ""
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr ""
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr ""
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr ""
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr ""
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr ""
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr ""
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr ""
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr ""
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr ""
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr ""
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr ""
@@ -3173,36 +3190,36 @@ msgstr ""
msgid "cmd. line:"
msgstr ""
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr ""
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr ""
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr ""
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr ""
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
"expect"
msgstr ""
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr ""
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3230,7 +3247,7 @@ msgstr ""
#: profile.c:193
#, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
@@ -3246,30 +3263,30 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr ""
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr ""
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
"\n"
msgstr ""
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr ""
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
"\t# Functions, listed alphabetically\n"
msgstr ""
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr ""
@@ -3279,70 +3296,83 @@ msgstr ""
msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr ""
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr ""
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr ""
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr ""
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr ""
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr ""
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr ""
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+msgid "Unmatched [, [^, [:, [., or [="
msgstr ""
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr ""
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr ""
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr ""
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr ""
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr ""
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr ""
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr ""
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ""
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr ""
-#: symbol.c:741
+#: symbol.c:677
+#, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr ""
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr ""
diff --git a/po/it.gmo b/po/it.gmo
index 73f46395..f7030fd7 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index a5578723..88e537f6 100644
--- a/po/it.po
+++ b/po/it.po
@@ -5,9 +5,9 @@
msgid ""
msgstr ""
"Project-Id-Version: GNU Awk 4.0.73, API: 0.0\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
-"PO-Revision-Date: 2014-06-14 17:50+0100\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
+"PO-Revision-Date: 2014-12-14 22:10+0100\n"
"Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
"Language-Team: Italian <it@li.org>\n"
"Language: it\n"
@@ -34,9 +34,9 @@ msgstr "tentativo di usare il parametro scalare `%s' come un vettore"
msgid "attempt to use scalar `%s' as an array"
msgstr "tentativo di usare scalare '%s' come vettore"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "tentativo di usare vettore `%s' in un contesto scalare"
@@ -95,412 +95,417 @@ msgstr ""
"asorti: non consentito un primo argomento che sia un sottovettore del "
"secondo argomento"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "`%s' non è un nome funzione valido"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "funzione di confronto del sort `%s' non definita"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "blocchi %s richiedono una `azione'"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "ogni regola deve avere una parte `espressione' o una parte `azione'"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "il vecchio awk non supporta più di una regola `BEGIN' o `END'"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "`%s' è una funzione interna, non si può ridefinire"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr "espressione regolare costante `//' sembra un commento C++, ma non lo è"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr "espressione regolare costante `/%s/' sembra un commento C, ma non lo è"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "valori di `case' doppi all'interno di uno `switch': %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "valori di default doppi all'interno di uno `switch'"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "`break' non consentito fuori da un ciclo o da uno `switch'"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "`continue' non consentito fuori da un un ciclo"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "`next' usato in `azione' %s"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "`nextfile' usato in `azione' %s"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "`return' usato fuori da una funzione"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr "`print' da solo in BEGIN o END dovrebbe forse essere `print \"\"'"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "`delete' non consentito in SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "`delete' non consentito in FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "`delete(array)' è un'estensione tawk non-portabile"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "`pipeline' multistadio bidirezionali non funzionano"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "espressione regolare usata per assegnare un valore"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "espressione regolare prima di operatore `~' o `!~'"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "il vecchio awk non supporta la parola-chiave `in' se non dopo `for'"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "espressione regolare a destra in un confronto"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "`getline var' invalida all'interno della regola `%s'"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "`getline' invalida all'interno della regola `%s'"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr "`getline' non ridiretta invalida all'interno della regola `%s'"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "`getline' non ri-diretta indefinita dentro `azione' END"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "il vecchio awk non supporta vettori multidimensionali"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "chiamata a `length' senza parentesi non portabile"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "chiamate a funzione indirette sono un'estensione gawk"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"non riesco a usare la variabile speciale `%s' come parametro indiretto di "
"funzione"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr ""
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "espressione indice invalida"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "attenzione: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fatale: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "carattere 'a capo' o fine stringa non previsti"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "non riesco ad aprire file sorgente `%s' in lettura (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "non riesco ad aprire shared library `%s' in lettura (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "ragione indeterminata"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "non riesco a includere `%s' per usarlo come file di programma"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "file sorgente `%s' già incluso"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "shared library `%s' già inclusa"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include è un'estensione gawk"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "nome-file mancante dopo @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load è un'estensione gawk"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "nome-file mancante dopo @include"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "programma nullo sulla riga comandi"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "non riesco a leggere file sorgente `%s' (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "file sorgente `%s' vuoto"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr "errore PEBKAC: carattere invalido '\\%03o' nel codice sorgente"
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "file sorgente non termina con carattere 'a capo'"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "espressione regolare non completata termina con `\\' a fine file"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"%s: %d: modificatore di espressione regolare tawk `/.../%c' non valido in "
"gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "modificatore di espressione regolare tawk `/.../%c' non valido in gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "espressione regolare non completata"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "espressione regolare non completata a fine file"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "uso di `\\ #...' continuazione riga non portabile"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "'\\' non è l'ultimo carattere della riga"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX non permette l'operatore `**='"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "il vecchio awk non supporta l'operatore `**='"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX non permette l'operatore `**'"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "il vecchio awk non supporta l'operatore `**'"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "l'operatore `^=' non è supportato nel vecchio awk"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "l'operatore `^' non è supportato nel vecchio awk"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "stringa non terminata"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "carattere '%c' non valido in un'espressione"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "`%s' è un'estensione gawk"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX non permette `%s'"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "`%s' non è supportato nel vecchio awk"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "`goto' considerato pericoloso!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d non valido come numero di argomenti per %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr "%s: una stringa come ultimo argomento di `substitute' non ha effetto"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "il terzo parametro di '%s' non è un oggetto modificabile"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: il terzo argomento è un'estensione gawk"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: il secondo argomento è un'estensione gawk"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"uso scorretto di dcgettext(_\"...\"): togliere il carattere '_' iniziale"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"uso scorretto di dcngettext(_\"...\"): togliere il carattere '_' iniziale"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: espressione regolare come secondo argomento non consentita"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "funzione `%s': parametro `%s' nasconde variabile globale"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "non riesco ad aprire `%s' in scrittura (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "mando lista variabili a 'standard error'"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: `close' non riuscita (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() chiamata due volte!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "c'erano variabili nascoste."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "funzione di nome `%s' definita in precedenza"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr ""
"funzione `%s': non è possibile usare nome della funzione come nome parametro"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"funzione `%s': non è possibile usare la variabile speciale `%s' come "
"parametro di funzione"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "funzione `%s': parametro #%d, `%s', duplica parametro #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "funzione `%s' chiamata ma mai definita"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "funzione `%s' definita ma mai chiamata direttamente"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr ""
"espressione regolare di valore costante per parametro #%d genera valore "
"booleano"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -509,23 +514,23 @@ msgstr ""
"funzione `%s' chiamata con spazio tra il nome e `(',\n"
"o usata come variabile o vettore"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "tentativo di dividere per zero"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "tentativo di dividere per zero in `%%'"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
"impossibile assegnare un valore al risultato di un'espressione di post-"
"incremento di un campo"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "destinazione di assegnazione non valida (codice operativo %s)"
@@ -541,7 +546,7 @@ msgstr "standard output"
#: builtin.c:148
msgid "exp: received non-numeric argument"
-msgstr "exp: argomento non-numerico"
+msgstr "exp: l'argomento ricevuto non è numerico"
#: builtin.c:154
#, c-format
@@ -566,189 +571,198 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: `%s' non è un file aperto, una `pipe' o un co-processo"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
-msgstr "index: il primo argomento non è una stringa"
+msgstr "index: il primo argomento ricevuto non è una stringa"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
-msgstr "index: il secondo argomento non è una stringa"
+msgstr "index: il secondo argomento ricevuto non è una stringa"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
-msgstr "int: argomento non-numerico"
+msgstr "int: l'argomento ricevuto non è numerico"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
-msgstr "length: l'argomento fornito è un vettore"
+msgstr "length: l'argomento ricevuto è un vettore"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "`length(array)' è un'estensione gawk"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
-msgstr "length: l'argomento non è una stringa"
+msgstr "length: l'argomento ricevuto non è una stringa"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
-msgstr "log: argomento non-numerico"
+msgstr "log: l'argomento ricevuto non è numerico"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
-msgstr "log: argomento negativo %g"
+msgstr "log: argomento ricevuto negativo %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
-msgstr "fatale: `count$' va usato per ogni `format' o per nessuno"
+msgstr "fatale: `count$' va usato per tutti i formati o per nessuno"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "larghezza campo ignorata per la specifica `%%'"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "precisione ignorata per la specifica `%%'"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "larghezza campo e precisone ignorate per la specifica `%%'"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
-msgstr "fatale: operatore `$' non consentito nei `format' awk"
+msgstr "fatale: operatore `$' non consentito nei formati awk"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fatale: numero argomenti con `$' dev'essere > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr "fatale: numero argomenti %ld > del numero totale argomenti specificati"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
-msgstr "fatale: `$' non consentito dopo il punto in un `format'"
+msgstr "fatale: `$' non consentito dopo il punto in un formato"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr "fatale: manca `$' per i campi posizionali larghezza o precisione"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
-msgstr "`l' non ha senso nei `format' awk; ignorato"
+msgstr "`l' non ha senso nei formati awk; ignorato"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
-msgstr "fatale: `l' non consentito nei `format' POSIX awk"
+msgstr "fatale: `l' non consentito nei formati POSIX awk"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
-msgstr "`L' non ha senso nei `format' awk; ignorato"
+msgstr "`L' non ha senso nei formati awk; ignorato"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
-msgstr "`L' non ha senso nei `format' awk; ignorato"
+msgstr "fatale: `L' non consentito nei formati POSIX awk"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
-msgstr "`h' non ha senso nei `format' awk; ignorato"
+msgstr "`h' non ha senso nei formati awk; ignorato"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
-msgstr "fatale: `h' non consentito nei `format' POSIX awk"
+msgstr "fatale: `h' non consentito nei formati POSIX awk"
+
+#: builtin.c:1055
+#, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: valore %g troppo elevato per il formato %%c"
-#: builtin.c:1463
+#: builtin.c:1068
+#, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: valore %g non è un carattere multibyte valido "
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
-msgstr "[s]printf: valore %g fuori intervallo per il `format' `%%%c'"
+msgstr "[s]printf: valore %g fuori intervallo per il formato `%%%c'"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
-msgstr ""
-"carattere di `format' sconosciuto `%c' ignorato: nessun argomento convertito"
+msgstr "carattere di formato ignoto `%c' ignorato: nessun argomento convertito"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr ""
"fatale: argomenti in numero minore di quelli richiesti dalla stringa di "
-"`format'"
+"formato"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ esauriti a questo punto"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
-msgstr "[s]printf: specifica di `format' senza un carattere di controllo"
+msgstr "[s]printf: specifica di formato senza un carattere di controllo"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
-msgstr "troppi argomenti specificati per questa stringa di `format'"
+msgstr "troppi argomenti specificati per questa stringa di formato"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: nessun argomento"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: nessun argomento"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
-msgstr "sqrt: argomento non-numerico"
+msgstr "sqrt: l'argomento ricevuto non è numerico"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: chiamata con argomento negativo %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: lunghezza %g non >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: lunghezza %g non >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: lunghezza non intera %g: sarà troncata"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr "substr: lunghezza %g troppo elevata per indice stringa, tronco a %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: indice di partenza %g non valido, uso 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: indice di partenza non intero %g: sarà troncato"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: stringa di partenza lunga zero"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: indice di partenza %g oltre la fine della stringa"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -756,187 +770,193 @@ msgstr ""
"substr: lunghezza %g all'indice di partenza %g supera la lunghezza del primo "
"argomento (%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
-"strftime: il valore del `format' in PROCINFO[\"strftime\"] è di tipo numerico"
+"strftime: il valore del formato in PROCINFO[\"strftime\"] è di tipo numerico"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
-msgstr "strftime: secondo argomento non-numerico"
+msgstr "strftime: il secondo argomento ricevuto non è numerico"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
-msgstr "strftime: secondo argomento < 0 o troppo elevato per time_t"
+msgstr "strftime: il secondo argomento è < 0 o troppo elevato per time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
-msgstr "strftime: il primo argomento non è una stringa"
+msgstr "strftime: il primo argomento ricevuto non è una stringa"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
-msgstr "strftime: `format' è una stringa nulla"
+msgstr "strftime: il formato ricevuto è una stringa nulla"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
-msgstr "mktime: l'argomento non è una stringa"
+msgstr "mktime: l'argomento ricevuto non è una stringa"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: almeno un valore è fuori dall'intervallo di default"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "funzione 'system' non consentita in modo `sandbox'"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
-msgstr "system: l'argomento non è una stringa"
+msgstr "system: l'argomento ricevuto non è una stringa"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "riferimento a variabile non inizializzata `$%d'"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
-msgstr "tolower: l'argomento non è una stringa"
+msgstr "tolower: l'argomento ricevuto non è una stringa"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
-msgstr "toupper: l'argomento non è una stringa"
+msgstr "toupper: l'argomento ricevuto non è una stringa"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
-msgstr "atan2: primo argomento non-numerico"
+msgstr "atan2: il primo argomento ricevuto non è numerico"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
-msgstr "atan2: secondo argomento non-numerico"
+msgstr "atan2: il secondo argomento ricevuto non è numerico"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
-msgstr "sin: argomento non-numerico"
+msgstr "sin: l'argomento ricevuto non è numerico"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
-msgstr "cos: argomento non-numerico"
+msgstr "cos: l'argomento ricevuto non è numerico"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
-msgstr "srand: argomento non-numerico"
+msgstr "srand: l'argomento ricevuto non è numerico"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: terzo argomento non-vettoriale"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
-msgstr "gensub: il terzo argomento è 0, trattato come 1"
+#: builtin.c:2705
+#, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
+msgstr "gensub: il terzo argomento `%.*s' trattato come 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: il terzo argomento %g trattato come 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
-msgstr "lshift: primo argomento non-numerico"
+msgstr "lshift: il primo argomento ricevuto non è numerico"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
-msgstr "lshift: secondo argomento non-numerico"
+msgstr "lshift: il secondo argomento ricevuto non è numerico"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): valori negativi daranno risultati strani"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): valori decimali saranno troncati"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f): valori troppo alti daranno risultati strani"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
-msgstr "rshift: primo argomento ricevuto non-numerico"
+msgstr "rshift: il primo argomento ricevuto non è numerico"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
-msgstr "rshift: secondo argomento non-numerico"
+msgstr "rshift: il secondo argomento ricevuto non è numerico"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): valori negativi daranno risultati strani"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): valori decimali saranno troncati"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr "rshift(%f, %f): valori troppo alti daranno risultati strani"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: chiamata con meno di due argomenti"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
-msgstr "and: argomento %d non-numerico"
+msgstr "and: l'argomento %d non è numerico"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and: argomento %d, valore negativo %g darà risultati strani"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: chiamata con meno di due argomenti"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
-msgstr "or: argomento %d non-numerico"
+msgstr "or: l'argomento %d non è numerico"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "or: argomento %d, valore negativo %g darà risultati strani"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: chiamata con meno di due argomenti"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
-msgstr "xor: argomento %d non-numerico"
+msgstr "xor: l'argomento %d non è numerico"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: argomento %d, valore negativo %g darà risultati strani"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
-msgstr "compl: argomento non-numerico"
+msgstr "compl: l'argomento ricevuto non è numerico"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): valore negativo, darà risultati strani"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): valori decimali saranno troncati"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: `%s' non è una categoria `locale' valida"
@@ -1167,7 +1187,7 @@ msgstr "print var [var] - stampa valore di variabile/i o vettore/i."
#: command.y:865
msgid "printf format, [arg], ... - formatted output."
-msgstr "printf format, [arg], ... - output secondo formato specificato."
+msgstr "printf format, [arg], ... - output secondo formato."
#: command.y:867
msgid "quit - exit debugger."
@@ -1228,8 +1248,8 @@ msgid ""
"until [[filename:]N|function] - execute until program reaches a different "
"line or line N within current frame."
msgstr ""
-"until [[nome-file:]N|funzione] - esegui finché il programma arriva una "
-"riga differente, o alla riga N nell'elemento di stack corrente."
+"until [[nome-file:]N|funzione] - esegui finché il programma arriva una riga "
+"differente, o alla riga N nell'elemento di stack corrente."
#: command.y:895
msgid "unwatch [N] - remove variable(s) from watch list."
@@ -1243,40 +1263,48 @@ msgstr "up [N] - spostati di N elementi dello stack verso l'alto."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch var - imposta un watchpoint per una variabile."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"dove [N] - (equivalente a backtrace) stampa tracia di tutti gli elementi o "
+"degli N più interni (più esterni se N <0)"
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "errore: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "non riesco a leggere comando (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "non riesco a leggere comando (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "carattere non valido nel comando"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "comando sconosciuto - \"%.*s\", vedere help"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "carattere non valido"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "comando non definito: %s\n"
@@ -1807,68 +1835,68 @@ msgstr "`%s' non consentito nel contesto corrente; istruzione ignorata"
msgid "`return' not allowed in current context; statement ignored"
msgstr "`return' non consentito nel contesto corrente; istruzione ignorata"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Simbolo `%s' non esiste nel contesto corrente"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "[ non chiusa"
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "character class non valida"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "sintassi character class è [[:spazio:]], non [:spazio:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "sequenza escape \\ non completa"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
-msgstr "Contenuto di \\{\\} non valido"
+#: dfa.c:1474
+msgid "invalid content of \\{\\}"
+msgstr "contenuto di \\{\\} non valido"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
-msgstr "Espressione regolare troppo complessa"
+#: dfa.c:1477
+msgid "regular expression too big"
+msgstr "espressione regolare troppo complessa"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "( non chiusa"
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "nessuna sintassi specificata"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ") non aperta"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "tipo nodo sconosciuto %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "codice operativo sconosciuto %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "codice operativo %s non è un operatore o una parola chiave"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "superamento limiti buffer in 'genflags2str'"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1879,216 +1907,216 @@ msgstr ""
"\t# `Stack' (Pila) Chiamate Funzione:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "`IGNORECASE' è un'estensione gawk"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "`BINMODE' è un'estensione gawk"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "valore di BINMODE `%s' non valido, considerato come 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "specificazione invalida `%sFMT' `%s'"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "disabilito `--lint' a causa di assegnamento a `LINT'"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "riferimento ad argomento non inizializzato `%s'"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "riferimento a variabile non inizializzata `%s'"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "tentativo di riferimento a un campo da valore non-numerico"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "tentativo di riferimento a un campo da una stringa nulla"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "tentativo di accedere al campo %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "riferimento a campo non inizializzato `$%ld'"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "funzione `%s' chiamata con più argomenti di quelli previsti"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: tipo non previsto `%s'"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "divisione per zero tentata in `/='"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "divisione per zero tentata in `%%='"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "le estensioni non sono consentite in modo `sandbox'"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load sono estensioni gawk"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
-msgstr "load_ext: nome libreria ricevuto è NULL"
+msgstr "load_ext: il nome libreria ricevuto è NULL"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: non riesco ad aprire libreria `%s' (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: libreria `%s': non definisce `plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: libreria `%s': non riesco a chiamare funzione `%s' (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
"load_ext: libreria `%s' routine di inizializzazione `%s' non riuscita\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "`extension' è un'estensione gawk"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
-msgstr "extension: nome libreria ricevuto è NULL"
+msgstr "extension: il nome libreria ricevuto è NULL"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: non riesco ad aprire libreria `%s' (%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"extension: libreria `%s': non definisce `plugin_is_GPL_compatible' (%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "extension: libreria `%s': non riesco a chiamare funzione `%s' (%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: manca nome di funzione"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: non riesco a ridefinire funzione `%s'"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: funzione `%s' già definita"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: funzione di nome `%s' definita in precedenza"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"make_builtin: nome funzione interna gawk `%s' non ammesso come nome funzione"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: contatore argomenti negativo per la funzione `%s'"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: manca nome di funzione"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: carattere non ammesso `%c' nel nome di funzione `%s'"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: non riesco a ridefinire funzione `%s'"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: funzione `%s' già definita"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: funzione di nome `%s' definita in precedenza"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
"extension: nome funzione interna gawk `%s' non ammesso come nome funzione"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "funzione `%s' definita per avere al massimo %d argomenti(o)"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "funzione `%s': manca argomento #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "funzione `%s': argomento #%d: tentativo di usare scalare come vettore"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "funzione `%s': argomento #%d: tentativo di usare vettore come scalare"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "caricamento dinamico di libreria non supportato"
@@ -2232,7 +2260,7 @@ msgstr "wait: chiamata con troppi argomenti"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: modifica in-place già attiva"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin: 2 argumenti richiesti, ma chiamata con %d"
@@ -2263,56 +2291,56 @@ msgstr "inplace_begin: `%s' non è un file regolare"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: mkstemp(`%s') non riuscita (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin: chmod non riuscita (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: dup(stdout) non riuscita (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: dup2(%d, stdout) non riuscita (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin: close(%d) non riuscita (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
"inplace_end: non riesco a trovare il 1° argomento come stringa nome-file"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: modifica in-place non attiva"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: dup2(%d, stdout) non riuscita (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: close(%d) non riuscita (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: fsetpos(stdout) non riuscita (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: link(`%s', `%s') non riuscita (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: rename(`%s', `%s') non riuscito (%s)"
@@ -2354,50 +2382,54 @@ msgstr "readfile: chiamata con troppi argomenti"
msgid "readfile: called with no arguments"
msgstr "readfile: chiamata senza argomenti"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: chiamata con troppi argomenti"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: argomento 0 non è una stringa\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: argomento 1 non-vettoriale\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: non sono riuscito a appiattire un vettore\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: non sono riuscito a rilasciare un vettore appiattito\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: chiamata con troppi argomenti"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: argomento 0 non è una stringa\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: argomento 1 non-vettoriale\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array non riuscita\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element non riuscita\n"
@@ -2426,90 +2458,90 @@ msgstr "sleep: l'argomento è negativo"
msgid "sleep: not supported on this platform"
msgstr "sleep: non supportato in questa architettura"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF impostato a un valore negativo"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: il quarto argomento è un'estensione gawk"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: quarto argomento non-vettoriale"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: secondo argomento non-vettoriale"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: non si può usare un unico vettore come secondo e quarto argomento"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: non consentito un quarto argomento che sia un sottovettore del "
"secondo argomento"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: non consentito un secondo argomento che sia un sottovettore del "
"quarto argomento"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: la stringa nulla come terzo arg. è un'estensione gawk"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: secondo argomento non-vettoriale"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: secondo argomento non-vettoriale"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: il terzo argomento non può essere nullo"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: non si può usare un unico vettore come secondo e quarto argomento"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: non consentito un quarto argomento che sia un sottovettore del "
"secondo argomento"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: non consentito un secondo argomento che sia un sottovettore del "
"quarto argomento"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "`FIELDWIDTHS' è un'estensione gawk"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "valore di FIELDWIDTHS non valido, vicino a `%s'"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "la stringa nulla usata come `FS' è un'estensione gawk"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "il vecchio awk non supporta espressioni come valori di `FS'"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "`FPAT' è un'estensione gawk"
@@ -2525,20 +2557,20 @@ msgstr "node_to_awk_value: ricevuto nodo nullo"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: ricevuto valore nullo"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: ricevuto vettore nullo"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: ricevuto indice nullo"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: non sono riuscito a convertire l'indice %d\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: non sono riuscito a convertire il valore %d\n"
@@ -2598,293 +2630,275 @@ msgstr "%s: l'opzione '-W %s' non ammette un argomento\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: l'opzione '-W %s' richiede un argomento\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
-msgstr "l'argomento in linea comando `%s' è una directory: saltato"
+msgstr "l'argomento in riga comando `%s' è una directory: ignorata"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "non riesco ad aprire file `%s' in lettura (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "chiusura di fd %d (`%s') non riuscita (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "ri-direzione non consentita in modo `sandbox'"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "espressione nella ri-direzione `%s' ha solo un valore numerico"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "espressione nella ri-direzione `%s' ha per valore la stringa nulla"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"nome-file `%s' per la ri-direzione `%s' può essere il risultato di una "
"espressione logica"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "mistura non necessaria di `>' e `>>' per il file `%.*s'"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "non riesco ad aprire `pipe' `%s' in scrittura (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "non riesco ad aprire `pipe' `%s' in lettura (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
"non riesco ad aprire `pipe' bidirezionale `%s' in lettura/scrittura (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "non riesco a ri-dirigere da `%s' (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "non riesco a ri-dirigere a `%s' (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"numero massimo consentito di file aperti raggiunto: comincio a riutilizzare "
"i descrittori di file"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "chiusura di `%s' non riuscita (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "troppe `pipe' o file di input aperti"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: il secondo argomento deve essere `a' o `da'"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: `%.*s' non è un file aperto, una `pipe' o un co-processo"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "chiusura di una ri-direzione mai aperta"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr "close: ri-direzione `%s' non aperta con `|&', ignoro secondo argomento"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "errore ritornato (%d) dalla chiusura della `pipe' `%s' (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "errore ritornato (%d) dalla chiusura del file `%s' (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "nessuna chiusura esplicita richiesta per `socket' `%s'"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "nessuna chiusura esplicita richiesta per co-processo `%s'"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "nessuna chiusura esplicita richiesta per `pipe' `%s'"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "nessuna chiusura esplicita richiesta per file `%s'"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "errore scrivendo 'standard output' (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "errore scrivendo 'standard error' (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "scaricamento di `pipe' `%s' non riuscito (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "scaricamento da co-processo di `pipe' a `%s' non riuscito (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "scaricamento di file `%s' non riuscito (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "porta locale %s invalida in `/inet'"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "host remoto e informazione di porta (%s, %s) invalidi"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "nessuno protocollo (noto) specificato nel filename speciale `%s'"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "nome-file speciale `%s' incompleto"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "va fornito nome di `host' remoto a `/inet'"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "va fornita porta remota a `/inet'"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "comunicazioni TCP/IP non supportate"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "non riesco ad aprire `%s', modo `%s'"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "close di `pty' principale non riuscita (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "close di `stdout' nel processo-figlio non riuscita (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"trasferimento di `pty' secondaria a `stdout' nel processo-figlio non "
"riuscita (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "close di `stdin' nel processo-figlio non riuscita (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"trasferimento di 'pty' secondaria a 'stdin' nel processo-figlio non riuscito "
"(dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "close di 'pty' secondaria non riuscita (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"passaggio di `pipe' a `stdout' nel processo-figlio non riuscito (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"passaggio di pipe a `stdin' nel processo-figlio non riuscito (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "ripristino di `stdout' nel processo-padre non riuscito\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "ripristino di `stdin' nel processo-padre non riuscito\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "close di 'pipe' non riuscita (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "`|&' non supportato"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "non riesco ad aprire `pipe' `%s' (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "non riesco a creare processo-figlio per `%s' (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: ricevuto puntatore NULL"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"input parser `%s' in conflitto con l'input parser `%s' installato in "
"precedenza"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "l'input parser `%s' non è riuscito ad aprire `%s'"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: ricevuto puntatore NULL"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
@@ -2892,16 +2906,16 @@ msgstr ""
"output wrapper `%s' in conflitto con l'output wrapper `%s' installato in "
"precedenza"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "l'output wrapper `%s' non è riuscito ad aprire `%s'"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: ricevuto puntatore NULL"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2910,209 +2924,195 @@ msgstr ""
"processore doppio `%s' in conflitto con il processore doppio installato in "
"precedenza `%s'"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "il processore doppio `%s' non è riuscito ad aprire `%s'"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "file dati `%s' vuoto"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "non riesco ad allocare ulteriore memoria per l'input"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "valore multicarattere per `RS' è un'estensione gawk"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "comunicazioni IPv6 non supportate"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "argomento di `-e/--source' nullo, ignorato"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: opzione `-W %s' non riconosciuta, ignorata\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: l'opzione richiede un argomento -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr "variable d'ambiente `POSIXLY_CORRECT' impostata: attivo `--posix'"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "`--posix' annulla `--traditional'"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "`--posix'/`--traditional' annulla `--non-decimal-data'"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "eseguire %s con `setuid' root può essere un rischio per la sicurezza"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "`--posix' annulla `--characters-as-bytes'"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "non è possibile impostare modalità binaria su `stdin'(%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "non è possibile impostare modalità binaria su `stdout'(%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "non è possibile impostare modalità binaria su `stderr'(%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "manca del tutto il testo del programma!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr "Uso: %s [opzioni in stile POSIX o GNU] -f file-prog. [--] file ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr "Usage: %s [opzioni in stile POSIX o GNU] [--] %cprogramma%c file ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "Opzioni POSIX:\t\topzioni lunghe GNU: (standard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f fileprog\t\t--file=file-prog.\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=valore\t\t--assign=var=valore\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Opzioni brevi:\t\topzioni lunghe GNU: (estensioni)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[file]\t\t--dump-variables[=file]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[file]\t\t--debug[=file]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'testo-del-programma'\t--source='testo-del-programma'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E file\t\t\t--exec=file\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i include_file\t\t--include=include_file\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l libreria\t\t--load=libreria\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
-msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
+msgstr "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[file]\t\t--pretty-print[=file]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[file]\t\t--profile[=file]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3121,7 +3121,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3134,7 +3134,7 @@ msgstr ""
"Problemi di traduzione, segnalare ad: azc100@gmail.com.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3144,7 +3144,7 @@ msgstr ""
"Senza parametri, legge da 'standard input' e scrive su 'standard output'.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3154,7 +3154,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3173,7 +3173,7 @@ msgstr ""
"Licenza, o (a tua scelta) a una qualsiasi versione successiva.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3187,7 +3187,7 @@ msgstr ""
"Vedi la 'GNU General Public License' per ulteriori dettagli.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3196,16 +3196,16 @@ msgstr ""
"assieme a questo programma; se non è così, vedi http://www.gnu.org/"
"licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft non imposta FS a `tab' nell'awk POSIX"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "valore non noto per specifica campo: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3214,98 +3214,116 @@ msgstr ""
"%s: `%s' argomento di `-v' non in forma `var=valore'\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "`%s' non è un nome di variabile ammesso"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "`%s' non è un nome di variabile, cerco il file `%s=%s'"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "nome funzione interna gawk `%s' non ammesso come nome variabile"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "non è possibile usare nome di funzione `%s' come nome di variabile"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "eccezione floating point"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "errore fatale: errore interno"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "errore fatale: errore interno: segfault"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "errore fatale: errore interno: stack overflow"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "manca `fd' pre-aperta %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "non riesco a pre-aprire /dev/null per `fd' %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "argomento di `-e/--source' nullo, ignorato"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr "-M ignorato: supporto per MPFR/GMP non generato"
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: opzione `-W %s' non riconosciuta, ignorata\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'opzione richiede un argomento -- %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "valore PREC `%.*s' non valido"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "valore di RNDMODE `%.*s' non valido"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
-msgstr "%s: ricevuto argomento non-numerico"
+msgstr "%s: l'argomento ricevuto non è numerico"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): valore negativo, darà risultati strani"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "comp(%Rg): valore decimale sarà troncato"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "cmpl(%Zd): valori negativi, daranno risultati strani"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
-msgstr "%s:ricevuto argomento non-numerico #%d"
+msgstr "%s: l'argomento ricevuto non è numerico #%d"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: argomento #%d con valore non valido %Rg, uso 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: argomento #%d con valore negativo %Rg, darà risultati strani"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: argomento #%d, valore decimale sarà troncato"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%s: argomento #%d con valore negativo %Zd, darà risultati strani"
@@ -3315,24 +3333,24 @@ msgstr "%s: argomento #%d con valore negativo %Zd, darà risultati strani"
msgid "cmd. line:"
msgstr "riga com.:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "'\\' a fine stringa"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "il vecchio awk non supporta la sequenza di escape '\\%c'"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX non permette escape `\\x'"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "niente cifre esadecimali nella sequenza di escape `\\x'"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3341,12 +3359,12 @@ msgstr ""
"sequenza di escape esadec.\\x%.*s di %d caratteri probabilmente non "
"interpretata nel modo previsto"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "sequenza di escape `\\%c' considerata come semplice `%c'"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3377,10 +3395,10 @@ msgstr "mando profilo a 'standard error'"
#: profile.c:193
#, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# blocco(hi) %s\n"
+"\t# %s regola(e)\n"
"\n"
#: profile.c:198
@@ -3397,11 +3415,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "errore interno: %s con `vname' nullo"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "errore interno: funzione interna con `fname' nullo"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3410,12 +3428,12 @@ msgstr ""
"\t# Estensioni caricate (-l e/o @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# profilo gawk, creato %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3424,7 +3442,7 @@ msgstr ""
"\n"
"\t# Funzioni, in ordine alfabetico\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: tipo di ri-direzione non noto %d"
@@ -3435,71 +3453,96 @@ msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
"componente di espressione `%.*s' dovrebbe probabilmente essere `[%.*s]'"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Successo"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Nessuna corrispondenza"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Espressione regolare invalida"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Carattere di ordinamento non valido"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Nome di 'classe di caratteri' non valido"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "'\\' finale"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Riferimento indietro non valido"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
-msgstr "[ o [^ non chiusa"
+#: regcomp.c:160
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[, [^, [:, [. o [= non chiusa"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "( o \\( non chiusa"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "\\{ non chiusa"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Contenuto di \\{\\} non valido"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Fine di intervallo non valido"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Memoria esaurita"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Espressione regolare precedente invalida"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Fine di espressione regolare inaspettata"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Espressione regolare troppo complessa"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ") o \\) non aperta"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Nessuna espressione regolare precedente"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr ""
+"funzione `%s': non è possibile usare nome della funzione come nome parametro"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "non posso salire più in alto nello stack"
+#~ msgid "div: third argument is not an array"
+#~ msgstr "div: terzo argomento non-vettoriale"
+
+#~ msgid "div: received non-numeric first argument"
+#~ msgstr "div: il primo argomento ricevuto non è numerico"
+
+#~ msgid "div: received non-numeric second argument"
+#~ msgstr "div: il secondo argomento ricevuto non è numerico"
+
+#~ msgid "div: division by zero attempted"
+#~ msgstr "div: tentativo di dividere per zero"
diff --git a/po/ja.gmo b/po/ja.gmo
index 64b16819..732821c7 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 19321711..4a19b5b8 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-11-07 12:26+0000\n"
"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -37,9 +37,9 @@ msgstr "スカラー仮引数 `%s' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™"
msgid "attempt to use scalar `%s' as an array"
msgstr "スカラー `%s' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "スカラーコンテキストã§é…列 `%s' を使用ã™ã‚‹è©¦ã¿ã§ã™"
@@ -90,407 +90,412 @@ msgstr "asort: 第二引数ã®éƒ¨åˆ†é…列を第一引数用ã«ä½¿ç”¨ã™ã‚‹ã“ã
msgid "asorti: cannot use a subarray of second arg for first arg"
msgstr "asorti: 第二引数ã®éƒ¨åˆ†é…列を第一引数用ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "`%s' ã¯é–¢æ•°åã¨ã—ã¦ã¯ç„¡åŠ¹ã§ã™"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "ソート比較関数 `%s' ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s ブロックã«ã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³éƒ¨ãŒå¿…é ˆã§ã™"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "å„ルールã«ã¯ãƒ‘ターンã¾ãŸã¯ã‚¢ã‚¯ã‚·ãƒ§ãƒ³éƒ¨ãŒå¿…é ˆã§ã™ã€‚"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "å¤ã„ awk ã¯è¤‡æ•°ã® `BEGIN' ã¾ãŸã¯ `END' ルールをサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "`%s' ã¯çµ„è¾¼ã¿é–¢æ•°ã§ã™ã€‚å†å®šç¾©ã§ãã¾ã›ã‚“"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr "æ­£è¦è¡¨ç¾å®šæ•° `//' 㯠C++コメントã«ä¼¼ã¦ã„ã¾ã™ãŒã€é•ã„ã¾ã™ã€‚"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr "æ­£è¦è¡¨ç¾å®šæ•° `/%s/' 㯠C コメントã«ä¼¼ã¦ã„ã¾ã™ãŒã€ç•°ãªã‚Šã¾ã™"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "switch æ–‡ã®ä¸­ã§é‡è¤‡ã—㟠case 値ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "switch æ–‡ã®ä¸­ã§é‡è¤‡ã—㟠`default' ãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸ"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "`break' ã¯ãƒ«ãƒ¼ãƒ—ã¾ãŸã¯ switch ã®å¤–ã§ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "`continue' ã¯ãƒ«ãƒ¼ãƒ—ã®å¤–ã§ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "%s アクション内㧠`next' ãŒä½¿ç”¨ã•ã‚Œã¾ã—ãŸ"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "`nextfile' ㌠%s アクション内ã§ä½¿ç”¨ã•ã‚Œã¾ã—ãŸ"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "`return' ãŒé–¢æ•°å®šç¾©æ–‡ã®å¤–ã§ä½¿ã‚ã‚Œã¾ã—ãŸ"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"BEGIN ã¾ãŸã¯ END ルール内ã®å¼•æ•°ã®ç„¡ã„ `print' 㯠`print \"\"' ã ã¨æ€ã‚ã‚Œã¾ã™"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr ""
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr ""
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "`delete(array)' ã¯ç§»æ¤æ€§ã®ç„¡ã„ tawk æ‹¡å¼µã§ã™"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "多段階ã§åŒæ–¹å‘パイプを利用ã—ãŸå¼ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "æ­£è¦è¡¨ç¾ãŒä»£å…¥å¼ã®å³è¾ºã«ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "`~' ã‚„ `!~' 演算å­ã®å·¦è¾ºã«æ­£è¦è¡¨ç¾ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "å¤ã„ awk ã§ã¯ `in' 予約語㯠`for' ã®å¾Œã‚’除ãサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "比較å¼ã®å³è¾ºã«æ­£è¦è¡¨ç¾ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "`%s' ルールã®å†…部ã§ã¯ `getline var' ã¯ç„¡åŠ¹ã§ã™"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "`%s' ルールã®å†…部ã§ã¯ `getline' ã¯ç„¡åŠ¹ã§ã™"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr "`%s' ルールã®å†…å´ã§ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã¦ã„ãªã„ `getline' ã¯ç„¡åŠ¹ã§ã™"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "リダイレクトã•ã‚Œã¦ã„ãªã„ `getline' 㯠END アクションã§ã¯æœªå®šç¾©ã§ã™ã€‚"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "å¤ã„ awk ã¯å¤šæ¬¡å…ƒé…列をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "å°æ‹¬å¼§ãŒç„¡ã„ `length' ã¯ç§»æ¤æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "間接関数呼ã³å‡ºã—㯠gawk æ‹¡å¼µã§ã™"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr "特別ãªå¤‰æ•° `%s' ã¯é–“接関数呼ã³å‡ºã—用ã«ã¯ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "関数 `%s' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "添字ã®å¼ãŒç„¡åŠ¹ã§ã™"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "警告: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "致命的: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "予期ã—ãªã„改行ã¾ãŸã¯æ–‡å­—列終端ã§ã™"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "ソースファイル `%s' を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "共有ライブラリ `%s' を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "原因ä¸æ˜Ž"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr ""
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "ソースファイル `%s' ã¯æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "共有ライブラリ `%s' ã¯æ—¢ã«èª­ã¿è¾¼ã¾ã‚Œã¦ã„ã¾ã™"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include 㯠gawk æ‹¡å¼µã§ã™"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "@include ã®å¾Œã«ç©ºã®ãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã™"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load 㯠gawk æ‹¡å¼µã§ã™"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "@load ã®å¾Œã«ç©ºã®ãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã™"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "コマンド行ã®ãƒ—ログラム表記ãŒç©ºã§ã™"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "ソースファイル `%s' を読ã¿è¾¼ã‚ã¾ã›ã‚“ (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "ソースファイル `%s' ã¯ç©ºã§ã™"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "ソースファイルãŒæ”¹è¡Œã§çµ‚ã£ã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "終端ã•ã‚Œã¦ã„ãªã„æ­£è¦è¡¨ç¾ãŒãƒ•ã‚¡ã‚¤ãƒ«æœ€å¾Œã® `\\' ã§çµ‚ã£ã¦ã„ã¾ã™ã€‚"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "%s: %d: tawk ã®æ­£è¦è¡¨ç¾ä¿®é£¾å­ `/.../%c' 㯠gawk ã§ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "tawk ã®æ­£è¦è¡¨ç¾ä¿®é£¾å­ `/.../%c' 㯠gawk ã§ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "æ­£è¦è¡¨ç¾ãŒçµ‚端ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "ファイルã®ä¸­ã§æ­£è¦è¡¨ç¾ãŒçµ‚端ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "`\\ #...' å½¢å¼ã®è¡Œç¶™ç¶šã¯ç§»æ¤æ€§ãŒã‚ã‚Šã¾ã›ã‚“"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒè¡Œæœ€å¾Œã®æ–‡å­—ã«ãªã£ã¦ã„ã¾ã›ã‚“。"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX ã§ã¯æ¼”ç®—å­ `**=' ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `**=' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX ã§ã¯æ¼”ç®—å­ `**' ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `**' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `^=' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "å¤ã„ awk ã¯æ¼”ç®—å­ `^' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "文字列ãŒçµ‚端ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "å¼å†…ã«ç„¡åŠ¹ãªæ–‡å­— '%c' ãŒã‚ã‚Šã¾ã™"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "`%s' 㯠gawk æ‹¡å¼µã§ã™"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX ã§ã¯ `%s' ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "å¤ã„ awk 㯠`%s' をサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "`goto' ã¯æœ‰å®³ã ã¨è¦‹ãªã•ã‚Œã¦ã„ã¾ã™!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d 㯠%s 用ã®å¼•æ•°ã®æ•°ã¨ã—ã¦ã¯ç„¡åŠ¹ã§ã™"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr "%s: 文字列リテラルを置ãæ›ãˆæœ€å¾Œã®å¼•æ•°ã«ä½¿ç”¨ã™ã‚‹ã¨åŠ¹æžœãŒã‚ã‚Šã¾ã›ã‚“"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s 第三仮引数ã¯å¯å¤‰ã‚ªãƒ–ジェクトã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: 第三引数㯠gawk æ‹¡å¼µã§ã™"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: 第二引数㯠gawk æ‹¡å¼µã§ã™"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"dcgettext(_\"...\")ã®ä½¿ç”¨æ³•ãŒé–“é•ã£ã¦ã„ã¾ã™: 先頭ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢(_)を削除ã—"
"ã¦ãã ã•ã„"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"dcngettext(_\"...\")ã®ä½¿ç”¨æ³•ãŒé–“é•ã£ã¦ã„ã¾ã™: 先頭ã®ã‚¢ãƒ³ãƒ€ãƒ¼ã‚¹ã‚³ã‚¢(_)を削除ã—"
"ã¦ãã ã•ã„"
-#: awkgram.y:4016
+#: awkgram.y:4044
#, fuzzy
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "関数 `%s': 仮引数 `%s' ãŒå¤§åŸŸå¤‰æ•°ã‚’覆ã„éš ã—ã¦ã„ã¾ã™"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "`%s' を書込ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ã§ã—㟠(%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "変数リストを標準エラーã«é€ã£ã¦ã„ã¾ã™"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() を二回呼ã³å‡ºã—ã¦ã„ã¾ã™!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "覆ã„éš ã•ã‚ŒãŸå¤‰æ•°ãŒã‚ã‚Šã¾ã—ãŸ"
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "関数å `%s' ã¯å‰ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "関数 `%s': 関数åを仮引数åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr "関数 `%s': 特別ãªå¤‰æ•° `%s' ã¯é–¢æ•°ã®ä»®å¼•æ•°ã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "関数 `%s': 仮引数 #%d, `%s' ãŒä»®å¼•æ•° #%d ã¨é‡è¤‡ã—ã¦ã„ã¾ã™"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "未定義ã®é–¢æ•° `%s' を呼ã³å‡ºã—ã¾ã—ãŸ"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "関数 `%s' ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã™ãŒã€ä¸€åº¦ã‚‚直接呼ã³å‡ºã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "仮引数 #%d 用ã®æ­£è¦è¡¨ç¾å®šæ•°ã¯çœŸå½å€¤ã‚’出力ã—ã¾ã™"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -499,21 +504,21 @@ msgstr ""
"関数å㨠`(' ã®é–“ã«ã‚¹ãƒšãƒ¼ã‚¹ã‚’入れã¦é–¢æ•° `%s' を呼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚\n"
"ã¾ãŸã¯ã€å¤‰æ•°ã‹é…列ã¨ã—ã¦ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "ゼロã«ã‚ˆã‚‹é™¤ç®—ãŒè©¦ã¿ã‚‰ã‚Œã¾ã—ãŸ"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "`%%' 内ã§ã‚¼ãƒ­ã«ã‚ˆã‚‹é™¤ç®—ãŒè©¦ã¿ã‚‰ã‚Œã¾ã—ãŸ"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
-#: awkgram.y:5052
+#: awkgram.y:5006
#, fuzzy, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "%d 㯠%s 用ã®å¼•æ•°ã®æ•°ã¨ã—ã¦ã¯ç„¡åŠ¹ã§ã™"
@@ -555,188 +560,198 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: `%s' ãŒé–‹ã‹ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã€ãƒ‘イプã€ãƒ—ロセス共有ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: 文字列ã§ã¯ç„¡ã„第一引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: 文字列ã§ã¯ç„¡ã„第二引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: 数値ã§ã¯ç„¡ã„引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: é…列引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "`length(array)' 㯠gawk æ‹¡å¼µã§ã™"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: 文字列ã§ã¯ç„¡ã„引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: 数値ã§ã¯ç„¡ã„引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: è² ã®å¼•æ•° %g ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr ""
"致命的: `count$’ ã¯å…¨ã¦ã®æ›¸å¼ä½¿ç”¨ã™ã‚‹ã€ã¾ãŸã¯å…¨ã¦ã«ä½¿ç”¨ã—ãªã„ã®ã„ãšã‚Œã‹ã§ãªã‘"
"ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "`%%' 指定用ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å¹…ã¯ç„¡è¦–ã•ã‚Œã¾ã™"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "`%%' 指定用ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å¹…ã¯ç„¡è¦–ã•ã‚Œã¾ã™"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "`%%' 指定用ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å¹…ãŠã‚ˆã³ç²¾åº¦ã¯ç„¡è¦–ã•ã‚Œã¾ã™"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "致命的: `$' 㯠awk å½¢å¼å†…ã§ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "致命的: `$' ã§æŒ‡å®šã™ã‚‹å¼•æ•°ã®ç•ªå·ã¯æ­£ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr "致命的: 引数ã®ç•ªå· %ld ã¯å¼•æ•°ã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸæ•°ã‚ˆã‚Šå¤§ãã„ã§ã™"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "致命的: `$' ã¯æ›¸å¼æŒ‡å®šå†…ã®ãƒ”リオド `.' ã®å¾Œã«ä½¿ç”¨ã§ãã¾ã›ã‚“"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr "致命的: フィールド幅ã€ã¾ãŸã¯ç²¾åº¦ã®æŒ‡å®šå­ã« `$' ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "awk ã®æ›¸å¼æŒ‡å®šã§ã¯ `l' ã¯ç„¡æ„味ã§ã™ã€‚無視ã—ã¾ã™"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "致命的: POSIX awk 書å¼å†…ã§ã¯ `l' ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "awk ã®æ›¸å¼æŒ‡å®šã§ã¯ `L' ã¯ç„¡æ„味ã§ã™ã€‚無視ã—ã¾ã™ã€‚"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "致命的: POSIX awk 書å¼å†…ã§ã¯ `L' ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "awk ã®æ›¸å¼æŒ‡å®šã§ã¯ `h' ã¯ç„¡æ„味ã§ã™ã€‚無視ã—ã¾ã™ã€‚"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "致命的: POSIX awk 書å¼å†…ã§ã¯ `h' ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: 値 %g ã¯æ›¸å¼ `%%%c' ã®ç¯„囲外ã§ã™"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: 値 %g ã¯æ›¸å¼ `%%%c' ã®ç¯„囲外ã§ã™"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: 値 %g ã¯æ›¸å¼ `%%%c' ã®ç¯„囲外ã§ã™"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr "ä¸æ˜Žãªæ›¸å¼æŒ‡å®šæ–‡å­— `%c' を無視ã—ã¦ã„ã¾ã™: 変æ›ã•ã‚Œã‚‹å¼•æ•°ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "致命的: 書å¼æ–‡å­—列を満ãŸã™å分ãªæ•°ã®å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ ã“ã“ã‹ã‚‰è¶³ã‚Šã¾ã›ã‚“"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: 書å¼æŒ‡å®šå­ã«åˆ¶å¾¡æ–‡å­—ãŒã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "書å¼æ–‡å­—列ã«ä¸Žãˆã‚‰ã‚Œã¦ã„る引数ãŒå¤šã™ãŽã¾ã™"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: 引数ãŒã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: 引数ãŒã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: 数値ã§ã¯ç„¡ã„引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: é•·ã• %g ㌠1 以上ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: é•·ã• %g ㌠0 以上ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: 文字数 %g ã®å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã¾ã™ã€‚"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr "substr: 文字数 %g ã¯æœ€å¤§å€¤ã‚’超ãˆã¦ã„ã¾ã™ã€‚%g を使ã„ã¾ã™ã€‚"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: 開始インデックス %g ãŒç„¡åŠ¹ã§ã™ã€‚1を使用ã—ã¾ã™"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: 開始インデックス %g ãŒéžæ•´æ•°ã®ãŸã‚ã€å€¤ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: 文字列ã®é•·ã•ãŒã‚¼ãƒ­ã§ã™ã€‚"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: 開始インデックス %g ãŒæ–‡å­—列終端ã®å¾Œã«ã‚ã‚Šã¾ã™"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -744,187 +759,193 @@ msgstr ""
"substr: 開始インデックス %2$g ã‹ã‚‰ã®é•·ã• %1$g ã¯ç¬¬ä¸€å¼•æ•°ã®é•·ã•ã‚’超ãˆã¦ã„ã¾ã™ "
"(%3$lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr "strftime: PROCINFO[\"strftime\"] ã®æ›¸å¼ã®å€¤ã¯æ•°å€¤åž‹ã§ã™"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr ""
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: éžæ–‡å­—列ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: 空ã®æ›¸å¼æ–‡å­—列をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: éžæ–‡å­—列引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: 一ã¤ä»¥ä¸Šã®å€¤ãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ç¯„囲を超ãˆã¦ã„ã¾ã™"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "サンドボックスモードã§ã¯ 'system' 関数ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: 文字列ã§ã¯ç„¡ã„引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„フィールド `$%d' ã¸ã®å‚ç…§ã§ã™"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: éžæ–‡å­—列引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: éžæ–‡å­—列引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: éžæ•°å€¤ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: 第三引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: 第三引数㌠0 ã§ã™ã€‚1 を代ã‚ã‚Šã«ä½¿ç”¨ã—ã¾ã™"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: 第三引数㌠0 ã§ã™ã€‚1 を代ã‚ã‚Šã«ä½¿ç”¨ã—ã¾ã™"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: éžæ•°å€¤ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f): シフト値ãŒå¤§ãéŽãŽã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: éžæ•°å€¤ã®ç¬¬ä¸€å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: éžæ•°å€¤ã®ç¬¬äºŒå¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr "rshift(%f, %f): シフト値ãŒå¤§ãéŽãŽã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: 2個未満ã®å¼•æ•°ã§å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: 引数 %d ãŒéžæ•°å€¤ã§ã™"
-#: builtin.c:3113
+#: builtin.c:3103
#, fuzzy, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: 2個未満ã®å¼•æ•°ã§å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: 引数 %d ãŒéžæ•°å€¤ã§ã™"
-#: builtin.c:3145
+#: builtin.c:3135
#, fuzzy, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "compl(%lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
#, fuzzy
msgid "xor: called with less than two arguments"
msgstr "xor: 2個未満ã®å¼•æ•°ã§å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: 引数 %d ãŒéžæ•°å€¤ã§ã™"
-#: builtin.c:3177
+#: builtin.c:3167
#, fuzzy, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: `%s' ã¯ç„¡åŠ¹ãªãƒ­ã‚±ãƒ¼ãƒ«åŒºåˆ†ã§ã™"
@@ -1204,41 +1225,47 @@ msgstr ""
msgid "watch var - set a watchpoint for a variable."
msgstr ""
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "エラー: "
-#: command.y:1051
+#: command.y:1053
#, fuzzy, c-format
msgid "can't read command (%s)\n"
msgstr "`%s' ã‹ã‚‰ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã¾ã›ã‚“ (%s)"
-#: command.y:1065
+#: command.y:1067
#, fuzzy, c-format
msgid "can't read command (%s)"
msgstr "`%s' ã‹ã‚‰ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã¾ã›ã‚“ (%s)"
-#: command.y:1116
+#: command.y:1118
#, fuzzy
msgid "invalid character in command"
msgstr "無効ãªæ–‡å­—クラスåã§ã™"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr ""
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr ""
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "無効ãªæ–‡å­—ã§ã™"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr ""
@@ -1753,69 +1780,71 @@ msgstr ""
msgid "`return' not allowed in current context; statement ignored"
msgstr ""
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr ""
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr ""
-#: dfa.c:1174
+#: dfa.c:1119
#, fuzzy
msgid "invalid character class"
msgstr "無効ãªæ–‡å­—クラスåã§ã™"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr ""
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr ""
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "\\{\\} ã®ä¸­èº«ãŒç„¡åŠ¹ã§ã™"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "æ­£è¦è¡¨ç¾ãŒå¤§ãã™ãŽã¾ã™"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr ""
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr ""
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ""
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "ä¸æ˜ŽãªãƒŽãƒ¼ãƒ‰åž‹ %d ã§ã™"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "ä¸æ˜Žãªã‚ªãƒšã‚³ãƒ¼ãƒ‰ %d ã§ã™"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "オペコード %s ã¯æ¼”ç®—å­ã¾ãŸã¯äºˆç´„語ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "genflags2str 内ã§ãƒãƒƒãƒ•ã‚¡ã‚ªãƒ¼ãƒãƒ¼ãƒ•ãƒ­ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1826,94 +1855,94 @@ msgstr ""
"\t# 呼出関数スタック:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "`IGNORECASE' 㯠gawk æ‹¡å¼µã§ã™"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "`BINMODE' 㯠gawk æ‹¡å¼µã§ã™"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "BINMODE 値 `%s' ã¯ç„¡åŠ¹ã§ã™ã€‚代ã‚ã‚Šã« 3 を使用ã—ã¾ã™"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "誤ã£ãŸ `%sFMT' 指定 `%s' ã§ã™"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "`LINT' ã¸ã®ä»£å…¥ã«å¾“ã„ `--lint' を無効ã«ã—ã¾ã™"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„引数 `%s' ã¸ã®å‚ç…§ã§ã™"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„変数 `%s' ã¸ã®å‚ç…§ã§ã™"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "éžæ•°å€¤ã‚’使用ã—ãŸãƒ•ã‚¤ãƒ¼ãƒ«ãƒ‰å‚ç…§ã®è©¦ã¿ã§ã™"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "NULL 文字列を使用ã—ã¦ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®å‚照を試ã¿ã¦ã„ã¾ã™"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "フィールド %ld ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã®è©¦ã¿ã§ã™"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„フィールド `$%ld' ã¸ã®å‚ç…§ã§ã™"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "宣言ã•ã‚Œã¦ã„る数より多ã„引数を使ã£ã¦é–¢æ•° `%s' を呼ã³å‡ºã—ã¾ã—ãŸ"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: 予期ã—ãªã„åž‹ `%s' ã§ã™"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "`/=' 内ã§ã‚¼ãƒ­ã«ã‚ˆã‚‹é™¤ç®—ãŒè¡Œã‚ã‚Œã¾ã—ãŸ"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "`%%=' 内ã§ã‚¼ãƒ­ã«ã‚ˆã‚‹é™¤ç®—ãŒè¡Œã‚ã‚Œã¾ã—ãŸ"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "サンドボックスモード内ã§ã¯æ‹¡å¼µã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: ext.c:92
+#: ext.c:68
#, fuzzy
msgid "-l / @load are gawk extensions"
msgstr "@include 㯠gawk æ‹¡å¼µã§ã™"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr ""
-#: ext.c:98
+#: ext.c:74
#, fuzzy, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "致命的: extension: `%s' ã‚’é–‹ãã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, fuzzy, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
@@ -1921,32 +1950,32 @@ msgstr ""
"致命的: extension: ライブラリ `%s': `plugin_is_GPL_compatible' ãŒå®šç¾©ã•ã‚Œã¦ã„"
"ã¾ã›ã‚“ (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, fuzzy, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr ""
"致命的: extension: ライブラリ `%s': 関数 `%s' を呼ã³å‡ºã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ "
"(%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "`extension' 㯠gawk æ‹¡å¼µã§ã™"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr ""
-#: ext.c:180
+#: ext.c:156
#, fuzzy, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "致命的: extension: `%s' ã‚’é–‹ãã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ (%s)\n"
-#: ext.c:186
+#: ext.c:162
#, fuzzy, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
@@ -1954,93 +1983,93 @@ msgstr ""
"致命的: extension: ライブラリ `%s': `plugin_is_GPL_compatible' ãŒå®šç¾©ã•ã‚Œã¦ã„"
"ã¾ã›ã‚“ (%s)\n"
-#: ext.c:190
+#: ext.c:166
#, fuzzy, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr ""
"致命的: extension: ライブラリ `%s': 関数 `%s' を呼ã³å‡ºã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ "
"(%s)\n"
-#: ext.c:221
+#: ext.c:197
#, fuzzy
msgid "make_builtin: missing function name"
msgstr "extension: 関数åãŒã‚ã‚Šã¾ã›ã‚“"
-#: ext.c:236
+#: ext.c:212
#, fuzzy, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "extension: 関数 `%s' ã‚’å†å®šç¾©ã§ãã¾ã›ã‚“"
-#: ext.c:240
+#: ext.c:216
#, fuzzy, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "extension: 関数 `%s' ã¯æ—¢ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™"
-#: ext.c:244
+#: ext.c:220
#, fuzzy, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "extension: 関数å `%s' ã¯å‰ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™"
-#: ext.c:246
+#: ext.c:222
#, fuzzy, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr "extension: gawk ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ `%s' ã¯é–¢æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: 関数 `%s' ã®å¼•æ•°ã®æ•°ãŒè² ã§ã™"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: 関数åãŒã‚ã‚Šã¾ã›ã‚“"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: 関数å `%2$s' ã®ä¸­ã§ä¸æ­£ãªæ–‡å­— `%1$c' ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: 関数 `%s' ã‚’å†å®šç¾©ã§ãã¾ã›ã‚“"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: 関数 `%s' ã¯æ—¢ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: 関数å `%s' ã¯å‰ã«å®šç¾©ã•ã‚Œã¦ã„ã¾ã™"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr "extension: gawk ã«çµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ `%s' ã¯é–¢æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "関数 `%s' ã«ä½¿ãˆã‚‹å¼•æ•°ã®æ•°ã¯ `%d' 以下ã¨å®šç¾©ã•ã‚Œã¦ã„ã¾ã™"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "関数 `%s': 引数 #%d ãŒã‚ã‚Šã¾ã›ã‚“"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "関数 `%s': 引数 #%d: スカラーをé…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "関数 `%s': 引数 #%d: é…列をスカラーã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr ""
@@ -2200,7 +2229,7 @@ msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
msgid "inplace_begin: in-place editing already active"
msgstr ""
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr ""
@@ -2229,55 +2258,55 @@ msgstr ""
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, fuzzy, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, fuzzy, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr ""
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, fuzzy, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "%s: é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, fuzzy, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "パイプ `%s' をフラッシュã§ãã¾ã›ã‚“ (%s)。"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, fuzzy, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "fd %d (`%s') ã‚’é–‰ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ (%s)"
@@ -2327,52 +2356,56 @@ msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
msgid "readfile: called with no arguments"
msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
#, fuzzy
msgid "writea: called with too many arguments"
msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, fuzzy, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, fuzzy, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "split: 第四引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr ""
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr ""
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
#, fuzzy
msgid "reada: called with too many arguments"
msgstr "sqrt: è² ã®å€¤ %g を引数ã«ä½¿ç”¨ã—ã¦å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, fuzzy, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, fuzzy, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "adump: 引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr ""
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr ""
@@ -2405,80 +2438,80 @@ msgstr "exp: 引数 %g ãŒç¯„囲外ã§ã™"
msgid "sleep: not supported on this platform"
msgstr ""
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF ãŒè² ã®å€¤ã«è¨­å®šã•ã‚Œã¦ã„ã¾ã™"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: 第四引数㯠gawk æ‹¡å¼µã§ã™"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: 第四引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: 第二引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr "split: 第二引数ã¨ç¬¬å››å¼•æ•°ã«åŒã˜é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr "split: 第四引数ã«ç¬¬äºŒå¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr "split: 第二引数ã«ç¬¬å››å¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: 第三引数㫠NULL 文字列を使用ã™ã‚‹ã“ã¨ã¯ gawk æ‹¡å¼µã§ã™"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: 第四引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: 第二引数ãŒé…列ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: 第三引数ã¯éž NULL ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr "patsplit: 第二引数ã¨ç¬¬å››å¼•æ•°ã«åŒã˜é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr "patsplit: 第四引数ã«ç¬¬äºŒå¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr "patsplit: 第二引数ã«ç¬¬å››å¼•æ•°ã®éƒ¨åˆ†é…列を使用ã™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "`FIELDWIDTHS' 㯠gawk æ‹¡å¼µã§ã™"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "`%s' 付近㮠FIELDWIDTHS 値ãŒç„¡åŠ¹ã§ã™"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "`FS' ã« NULL 文字列を使用ã™ã‚‹ã®ã¯ gawk æ‹¡å¼µã§ã™"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "å¤ã„ awk 㯠`FS' ã®å€¤ã¨ã—ã¦æ­£è¦è¡¨ç¾ã‚’サãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "`FPAT' 㯠gawk æ‹¡å¼µã§ã™"
@@ -2494,21 +2527,21 @@ msgstr ""
msgid "node_to_awk_value: received null val"
msgstr ""
-#: gawkapi.c:807
+#: gawkapi.c:809
#, fuzzy
msgid "remove_element: received null array"
msgstr "length: é…列引数をå—ã‘å–ã‚Šã¾ã—ãŸ"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr ""
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr ""
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr ""
@@ -2568,522 +2601,490 @@ msgstr "%s: オプション '-W %s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: オプション '-W %s' ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "コマンドライン引数 `%s' ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™: スキップã•ã‚Œã¾ã—ãŸ"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "ファイル `%s' を読ã¿è¾¼ã¿ç”¨ã«é–‹ã‘ã¾ã›ã‚“ (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "fd %d (`%s') ã‚’é–‰ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "サンドボックスモード内ã§ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "`%s' リダイレクトã®å‘½ä»¤å¼ã«æ•°å€¤ã—ã‹è¨˜è¿°ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "`%s' リダイレクトã®å‘½ä»¤å¼ãŒç©ºåˆ—ã§ã™ã€‚"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"`%2$s' リダイレクトã«è«–ç†æ¼”ç®—ã®çµæžœã¨æ€ã‚れるファイルå `%1$s' ãŒä½¿ã‚ã‚Œã¦ã„ã¾"
"ã™ã€‚"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "ファイル `%.*s' ã§å¿…è¦ä»¥ä¸Šã« `>' 㨠`>>' を組åˆã›ã¦ã„ã¾ã™ã€‚"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "出力用ã«ãƒ‘イプ `%s' ã‚’é–‹ã‘ã¾ã›ã‚“ (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "入力用ã«ãƒ‘イプ `%s' ã‚’é–‹ã‘ã¾ã›ã‚“ (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr "入出力用ã®åŒæ–¹å‘パイプ `%s' ãŒé–‹ã‘ã¾ã›ã‚“ (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "`%s' ã‹ã‚‰ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã¾ã›ã‚“ (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "`%s' ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã§ãã¾ã›ã‚“ (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"é–‹ã„ã¦ã„るファイルã®æ•°ãŒã‚·ã‚¹ãƒ†ãƒ åˆ¶é™ã«é”ã—ã¾ã—ãŸã€‚ファイル記述å­ã‚’多é‡åŒ–ã—ã¾"
"ã™ã€‚"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "`%s' ã‚’é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "é–‹ã„ã¦ã„るパイプã¾ãŸã¯å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ•°ãŒå¤šéŽãŽã¾ã™ã€‚"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: 第二引数㯠`to' ã¾ãŸã¯ `from' ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: `%.*s' ã¯é–‹ã„ã¦ã„るファイルã€ãƒ‘イプã€ãƒ—ロセス共有ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "é–‹ã„ã¦ãªã„リダイレクトを閉ã˜ã‚ˆã†ã¨ã—ã¦ã„ã¾ã™"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: リダイレクト `%s' 㯠`|&' を使用ã—ã¦é–‹ã‹ã‚Œã¦ã„ã¾ã›ã‚“。第二引数ã¯ç„¡è¦–ã•"
"ã‚Œã¾ã—ãŸ"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "パイプ `%2$s' ã‚’é–‰ã˜ãŸã¨ãã®çŠ¶æ…‹ã‚³ãƒ¼ãƒ‰ãŒå¤±æ•— (%1$d) ã§ã—㟠(%3$s)。"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "ファイル `%2$s' ã‚’é–‰ã˜ãŸã¨ãã®çŠ¶æ…‹ã‚³ãƒ¼ãƒ‰ãŒå¤±æ•— (%1$d) ã§ã—㟠(%3$s)。"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "ソケット `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "並行プロセス `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "パイプ `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "ファイル `%s' を明示ã—ã¦é–‰ã˜ã¦ã„ã¾ã›ã‚“。"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "標準出力ã¸ã®æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼ (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "標準エラーã¸ã®æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼ (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "パイプ `%s' をフラッシュã§ãã¾ã›ã‚“ (%s)。"
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "`%s' ã¸æŽ¥ç¶šã™ã‚‹ãƒ‘イプを並行プロセスã‹ã‚‰ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ã§ãã¾ã›ã‚“ (%s)。"
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "ファイル `%s' をフラッシュã§ãã¾ã›ã‚“ (%s)。"
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "`/inet' 内ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒãƒ¼ãƒˆ %s ãŒç„¡åŠ¹ã§ã™"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "リモートã®ãƒ›ã‚¹ãƒˆãŠã‚ˆã³ãƒãƒ¼ãƒˆæƒ…å ± (%s, %s) ãŒç„¡åŠ¹ã§ã™"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr ""
-"スペシャルファイルå `%s' ã«ï¼ˆèªè­˜ã§ãる)プロトコルãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "スペシャルファイルå `%s' ã¯ä¸å®Œå…¨ã§ã™"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "`/inet' ã«ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆåを与ãˆãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "`/inet' ã«ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒ¼ãƒˆç•ªå·ã‚’与ãˆãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "TCP/IP 通信ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "`%s' をモード `%s' ã§é–‹ã‘ã¾ã›ã‚“"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "マスター pty ã‚’é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "å­ãƒ—ロセスãŒæ¨™æº–出力を閉ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr "å­ãƒ—ロセスãŒã‚¹ãƒ¬ãƒ¼ãƒ– pty を標準出力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "å­ãƒ—ロセスãŒæ¨™æº–入力を閉ã˜ã‚‰ã‚Œã¾ã›ã‚“ (%s)。"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr "å­ãƒ—ロセスãŒã‚¹ãƒ¬ãƒ¼ãƒ– pty を標準入力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "スレーブ pty ã‚’é–‰ã˜ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—㟠(%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr "å­ãƒ—ロセスãŒãƒ‘イプを標準出力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr "å­ãƒ—ロセスãŒãƒ‘イプを標準入力ã«ç§»å‹•ã§ãã¾ã›ã‚“ (dup: %s)。"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "親プロセスãŒæ¨™æº–出力を復旧ã§ãã¾ã›ã‚“。\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "親プロセスãŒæ¨™æº–入力を復旧ã§ãã¾ã›ã‚“。\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "パイプを閉ã˜ã‚‰ã‚Œã¾ã›ã‚“ (%s)。"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "`|&' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "パイプ `%s' ãŒé–‹ã‘ã¾ã›ã‚“ (%s)。"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "`%s' 用ã®å­ãƒ—ロセスを実行ã§ãã¾ã›ã‚“ (fork: %s)。"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr ""
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr ""
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr ""
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr ""
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr ""
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
"`%s'"
msgstr ""
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr ""
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "データファイル `%s' ã¯ç©ºã§ã™ã€‚"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "入力用メモリーをã“れ以上確ä¿ã§ãã¾ã›ã‚“。"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "複数ã®æ–‡å­—ã‚’ `RS' ã«ä½¿ç”¨ã™ã‚‹ã®ã¯ gawk 特有ã®æ‹¡å¼µã§ã™ã€‚"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "IPv6 通信ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "`-e/--source' ã¸ã®ç©ºã®å¼•æ•°ã¯ç„¡è¦–ã•ã‚Œã¾ã—ãŸ"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: オプション `-W %s' ã¯èªè­˜ã§ãã¾ã›ã‚“。無視ã•ã‚Œã¾ã—ãŸ\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: 引数ãŒå¿…è¦ãªã‚ªãƒ—ション -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"環境変数 `POSIXLY_CORRECT' ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ã€‚オプション `--posix' を有効ã«"
"ã—ã¾ã™"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "オプション `--posix' 㯠`--traditional' を無効ã«ã—ã¾ã™ã€‚"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr ""
"オプション `--posix'/`--traditional' 㯠`--non-decimal-data' を無効ã«ã—ã¾ã™ã€‚"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr ""
"setuid root 㧠%s を実行ã™ã‚‹ã¨ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ä¸Šã®å•é¡ŒãŒç™ºç”Ÿã™ã‚‹å ´åˆãŒã‚ã‚Šã¾"
"ã™ã€‚"
-#: main.c:588
+#: main.c:346
#, fuzzy
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "`--posix' 㯠`--binary' を上書ãã—ã¾ã™"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "標準入力をãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã«è¨­å®šã§ãã¾ã›ã‚“ (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "標準出力をãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã«è¨­å®šã§ãã¾ã›ã‚“ (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "標準エラーをãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã«è¨­å®šã§ãã¾ã›ã‚“ (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "プログラム文ãŒå…¨ãã‚ã‚Šã¾ã›ã‚“!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"使用法: %s [POSIX ã¾ãŸã¯ GNU å½¢å¼ã®ã‚ªãƒ—ション] -f progfile [--] file ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
"使用法: %s [POSIX ã¾ãŸã¯ GNU å½¢å¼ã®ã‚ªãƒ—ション] [--] %cprogram%c file ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "POSIX オプション:\t\tGNU é•·ã„å½¢å¼ã®ã‚ªãƒ—ション: (標準)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f progfile\t\t--file=progfile\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=val\t\t--assign=var=val\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "短ã„オプション:\t\tGNU é•·ã„å½¢å¼ã®ã‚ªãƒ—ション: (æ‹¡å¼µ)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[file]\t\t--dump-variables[=file]\n"
-#: main.c:815
+#: main.c:579
#, fuzzy
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-p[file]\t\t--profile[=file]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'program-text'\t--source='program-text'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E file\t\t\t--exec=file\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr ""
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr ""
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
#, fuzzy
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
#, fuzzy
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-p[file]\t\t--profile[=file]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[file]\t\t--profile[=file]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3092,7 +3093,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3107,7 +3108,7 @@ msgstr ""
"翻訳ã«é–¢ã™ã‚‹ãƒã‚°ã¯<translation-team-ja@lists.sourceforge.net>ã«å ±å‘Šã—ã¦ãã ã•"
"ã„。\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3117,7 +3118,7 @@ msgstr ""
"デフォルト設定ã§ã¯ã€æ¨™æº–入力を読ã¿è¾¼ã¿ã€æ¨™æº–出力ã«æ›¸ã出ã—ã¾ã™ã€‚\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3127,7 +3128,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3146,7 +3147,7 @@ msgstr ""
"(at your option) any later version.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3160,7 +3161,7 @@ msgstr ""
"GNU General Public License for more details.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3168,16 +3169,16 @@ msgstr ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "POSIX awk ã§ã¯ -Ft 㯠FS をタブã«è¨­å®šã—ã¾ã›ã‚“"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "フィールド指定ã«ä¸æ˜Žãªå€¤ãŒã‚ã‚Šã¾ã™: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3186,102 +3187,120 @@ msgstr ""
"%s: オプション `-v' ã®å¼•æ•° `%s' ㌠`変数=代入値' ã®å½¢å¼ã«ãªã£ã¦ã„ã¾ã›ã‚“。\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "`%s' ã¯ä¸æ­£ãªå¤‰æ•°åã§ã™"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "`%s' ã¯å¤‰æ•°åã§ã¯ã‚ã‚Šã¾ã›ã‚“。`%s=%s' ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’探ã—ã¾ã™ã€‚"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "gawk ã«çµ„ã¿è¾¼ã¿ã® `%s' ã¯å¤‰æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "関数 `%s' ã¯å¤‰æ•°åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "浮動å°æ•°ç‚¹ä¾‹å¤–"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "致命的エラー: 内部エラー"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "致命的エラー: 内部エラー: セグメンテーションé•å"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "致命的エラー: 内部エラー: スタックオーãƒãƒ¼ãƒ•ãƒ­ãƒ¼"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "fd %d ãŒäº‹å‰ã«é–‹ã„ã¦ã„ã¾ã›ã‚“。"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "事å‰ã« fd %d 用㫠/dev/null ã‚’é–‹ã‘ã¾ã›ã‚“。"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "`-e/--source' ã¸ã®ç©ºã®å¼•æ•°ã¯ç„¡è¦–ã•ã‚Œã¾ã—ãŸ"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: オプション `-W %s' ã¯èªè­˜ã§ãã¾ã›ã‚“。無視ã•ã‚Œã¾ã—ãŸ\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: 引数ãŒå¿…è¦ãªã‚ªãƒ—ション -- %c\n"
+
+#: mpfr.c:557
#, fuzzy, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "BINMODE 値 `%s' ã¯ç„¡åŠ¹ã§ã™ã€‚代ã‚ã‚Šã« 3 を使用ã—ã¾ã™"
-#: mpfr.c:608
+#: mpfr.c:615
#, fuzzy, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "BINMODE 値 `%s' ã¯ç„¡åŠ¹ã§ã™ã€‚代ã‚ã‚Šã« 3 を使用ã—ã¾ã™"
-#: mpfr.c:698
+#: mpfr.c:711
#, fuzzy, c-format
msgid "%s: received non-numeric argument"
msgstr "cos: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: mpfr.c:800
+#: mpfr.c:820
#, fuzzy
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: mpfr.c:804
+#: mpfr.c:824
#, fuzzy
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%lf): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™"
-#: mpfr.c:816
+#: mpfr.c:836
#, fuzzy, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "compl(%lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: mpfr.c:835
+#: mpfr.c:855
#, fuzzy, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "cos: éžæ•°å€¤ã®å¼•æ•°ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr ""
-#: mpfr.c:857
+#: mpfr.c:877
#, fuzzy
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "and(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
-#: mpfr.c:863
+#: mpfr.c:883
#, fuzzy
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "and(%lf, %lf): å°æ•°ç‚¹ä»¥ä¸‹ã¯åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã™"
-#: mpfr.c:878
+#: mpfr.c:898
#, fuzzy, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "and(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾ã™"
@@ -3291,24 +3310,24 @@ msgstr "and(%lf, %lf): è² ã®æ•°å€¤ã‚’使用ã™ã‚‹ã¨ç•°å¸¸ãªçµæžœã«ãªã‚Šã¾
msgid "cmd. line:"
msgstr "コマンドライン:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "文字列ã®çµ‚ã‚Šã«ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "å¤ã„ awk 㯠`\\%c' エスケープシーケンスをサãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX ã§ã¯ `\\x' エスケープã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "`\\x' エスケープシーケンスã«å六進数ãŒã‚ã‚Šã¾ã›ã‚“"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3317,12 +3336,12 @@ msgstr ""
"å六進エスケープ \\x%.*s (%d 文字) ã¯ãŠãらã予期ã—ãŸã‚ˆã†ã«ã¯è§£é‡ˆã•ã‚Œãªã„ã§"
"ã—ょã†"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "エスケープシーケンス `\\%c' 㯠`%c' ã¨åŒç­‰ã«æ‰±ã‚ã‚Œã¾ã™"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3350,12 +3369,12 @@ msgid "sending profile to standard error"
msgstr "プロファイルを標準エラーã«é€ã£ã¦ã„ã¾ã™"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s ブロック\n"
+"\t# ルール\n"
"\n"
#: profile.c:198
@@ -3372,24 +3391,24 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "内部エラー: %s ã® vname ãŒç„¡åŠ¹ã§ã™ã€‚"
-#: profile.c:537
+#: profile.c:538
#, fuzzy
msgid "internal error: builtin with null fname"
msgstr "内部エラー: %s ã® vname ãŒç„¡åŠ¹ã§ã™ã€‚"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
"\n"
msgstr ""
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# gawk プロファイルã€ä½œæˆæ—¥æ™‚ %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3398,7 +3417,7 @@ msgstr ""
"\n"
"\t# 関数一覧(アルファベット順)\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: ä¸æ˜Žãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆåž‹ %d ã§ã™"
@@ -3408,76 +3427,113 @@ msgstr "redir2str: ä¸æ˜Žãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆåž‹ %d ã§ã™"
msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr "æ­£è¦è¡¨ç¾ã®è¦ç´  `%.*s' ã¯ãŠãらã `[%.*s]' ã§ã‚ã‚‹ã¹ãã§ã™"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "æˆåŠŸã§ã™"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "一致ã—ã¾ã›ã‚“"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "無効ãªæ­£è¦è¡¨ç¾ã§ã™"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "無効ãªç…§åˆæ–‡å­—ã§ã™"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "無効ãªæ–‡å­—クラスåã§ã™"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "終端ã®ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "無効ãªå‰æ–¹å‚ç…§ã§ã™"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "[ ã¾ãŸã¯ [^ ãŒä¸ä¸€è‡´ã§ã™"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "( ã¾ãŸã¯ \\( ãŒä¸ä¸€è‡´ã§ã™"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "\\{ ãŒä¸ä¸€è‡´ã§ã™"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "\\{\\} ã®ä¸­èº«ãŒç„¡åŠ¹ã§ã™"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "無効ãªç¯„囲終了ã§ã™"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "メモリを使ã„æžœãŸã—ã¾ã—ãŸ"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "無効ãªå‰æ–¹æ­£è¦è¡¨ç¾ã§ã™"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "æ­£è¦è¡¨ç¾ãŒé€”中ã§çµ‚了ã—ã¾ã—ãŸ"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "æ­£è¦è¡¨ç¾ãŒå¤§ãã™ãŽã¾ã™"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ") ã¾ãŸã¯ \\) ãŒä¸ä¸€è‡´ã§ã™"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "以å‰ã«æ­£è¦è¡¨ç¾ãŒã‚ã‚Šã¾ã›ã‚“"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "関数 `%s': 関数åを仮引数åã¨ã—ã¦ä½¿ç”¨å‡ºæ¥ã¾ã›ã‚“"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr ""
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "関数 `%s' ã‚’é…列ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹è©¦ã¿ã§ã™"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "`%s' ルールã®å†…部ã§ã¯ `getline var' ã¯ç„¡åŠ¹ã§ã™"
+
+#~ msgid "`getline' invalid inside `%s' rule"
+#~ msgstr "`%s' ルールã®å†…部ã§ã¯ `getline' ã¯ç„¡åŠ¹ã§ã™"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr ""
+#~ "スペシャルファイルå `%s' ã«ï¼ˆèªè­˜ã§ãる)プロトコルãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "スペシャルファイルå `%s' ã¯ä¸å®Œå…¨ã§ã™"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "`/inet' ã«ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆåを与ãˆãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "`/inet' ã«ã¯ãƒªãƒ¢ãƒ¼ãƒˆãƒãƒ¼ãƒˆç•ªå·ã‚’与ãˆãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s ブロック\n"
+#~ "\n"
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„è¦ç´  `%s[\"%.*s\"]' ã¸ã®å‚ç…§ã§ã™"
@@ -3561,9 +3617,6 @@ msgstr ""
#~ msgid "function `%s' not defined"
#~ msgstr "関数 `%s' ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#~ msgid "non-redirected `getline' invalid inside `%s' rule"
-#~ msgstr "`%s' ルールã®å†…å´ã§ã¯ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã•ã‚Œã¦ã„ãªã„ `getline' ã¯ç„¡åŠ¹ã§ã™"
-
#~ msgid "`nextfile' cannot be called from a `%s' rule"
#~ msgstr "`nextfile' 㯠`%s' ルールã‹ã‚‰å‘¼ã³å‡ºã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“"
diff --git a/po/ms.gmo b/po/ms.gmo
index 6123c873..12601818 100644
--- a/po/ms.gmo
+++ b/po/ms.gmo
Binary files differ
diff --git a/po/ms.po b/po/ms.po
index 09ec6472..cb09870e 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.0.75\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2013-04-19 10:45+0800\n"
"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>\n"
"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
@@ -38,9 +38,9 @@ msgstr "cubaan untuk menggunakan parameter skalar `%s' sebagai tatasusunan"
msgid "attempt to use scalar `%s' as an array"
msgstr "cubaan untuk menggunakan skalar `%s' sebagai tatasusunan"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "cubaan untuk menggunakan tatasusunan `%s' dalam konteks skalar"
@@ -91,422 +91,427 @@ msgstr ""
msgid "asorti: cannot use a subarray of second arg for first arg"
msgstr ""
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr ""
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr ""
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr ""
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr ""
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr ""
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr ""
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr ""
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr ""
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr ""
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr ""
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr ""
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr ""
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr ""
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr ""
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr ""
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr ""
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr ""
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr ""
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr ""
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr ""
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr ""
-#: awkgram.y:1417
+#: awkgram.y:1411
#, c-format
-msgid "`getline var' invalid inside `%s' rule"
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr ""
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr ""
-
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr ""
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr ""
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr ""
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr ""
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr ""
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr ""
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr ""
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr ""
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr ""
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr ""
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr ""
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr ""
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr ""
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr ""
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr ""
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr ""
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr ""
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr ""
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr ""
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr ""
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr ""
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr ""
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr ""
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr ""
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr ""
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr ""
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr ""
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr ""
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr ""
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr ""
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr ""
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr ""
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr ""
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr ""
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr ""
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr ""
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr ""
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr ""
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr ""
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr ""
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr ""
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr ""
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr ""
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr ""
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr ""
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr ""
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr ""
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr ""
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr ""
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr ""
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr ""
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr ""
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr ""
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr ""
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr ""
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr ""
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr ""
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
"or used as a variable or an array"
msgstr ""
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr ""
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr ""
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr ""
@@ -544,371 +549,387 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr ""
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr ""
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr ""
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr ""
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr ""
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr ""
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr ""
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr ""
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr ""
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr ""
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr ""
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr ""
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr ""
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr ""
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr ""
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr ""
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr ""
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr ""
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr ""
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr ""
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr ""
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr ""
-#: builtin.c:1463
+#: builtin.c:1055
+#, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr ""
+
+#: builtin.c:1068
+#, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr ""
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr ""
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr ""
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr ""
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr ""
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr ""
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr ""
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr ""
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr ""
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr ""
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr ""
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr ""
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr ""
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr ""
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr ""
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr ""
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr ""
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
msgstr ""
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr ""
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr ""
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr ""
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr ""
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr ""
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr ""
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr ""
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr ""
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr ""
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr ""
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr ""
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr ""
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr ""
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr ""
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr ""
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr ""
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr ""
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr ""
-#: builtin.c:3030
+#: builtin.c:2720
+#, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr ""
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr ""
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr ""
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr ""
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr ""
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr ""
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr ""
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr ""
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr ""
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr ""
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr ""
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr ""
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr ""
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr ""
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr ""
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr ""
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr ""
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr ""
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr ""
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr ""
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr ""
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr ""
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr ""
@@ -1188,40 +1209,46 @@ msgstr ""
msgid "watch var - set a watchpoint for a variable."
msgstr ""
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr ""
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr ""
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr ""
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr ""
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr ""
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr ""
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr ""
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr ""
@@ -1733,68 +1760,68 @@ msgstr ""
msgid "`return' not allowed in current context; statement ignored"
msgstr ""
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr ""
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr ""
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr ""
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr ""
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr ""
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+msgid "invalid content of \\{\\}"
msgstr ""
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+msgid "regular expression too big"
msgstr ""
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr ""
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr ""
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ""
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr ""
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr ""
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr ""
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr ""
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1802,211 +1829,211 @@ msgid ""
"\n"
msgstr ""
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr ""
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr ""
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr ""
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr ""
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr ""
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr ""
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr ""
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr ""
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr ""
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr ""
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr ""
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr ""
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr ""
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr ""
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr ""
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr ""
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr ""
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr ""
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr ""
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr ""
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr ""
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr ""
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr ""
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr ""
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr ""
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr ""
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr ""
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr ""
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr ""
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr ""
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr ""
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr ""
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr ""
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr ""
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr ""
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr ""
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr ""
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr ""
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr ""
@@ -2150,7 +2177,7 @@ msgstr ""
msgid "inplace_begin: in-place editing already active"
msgstr ""
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr ""
@@ -2179,55 +2206,55 @@ msgstr ""
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr ""
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr ""
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr ""
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr ""
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr ""
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr ""
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr ""
@@ -2269,50 +2296,54 @@ msgstr ""
msgid "readfile: called with no arguments"
msgstr ""
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr ""
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr ""
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr ""
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr ""
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr ""
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr ""
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr ""
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr ""
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr ""
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr ""
@@ -2341,80 +2372,80 @@ msgstr ""
msgid "sleep: not supported on this platform"
msgstr ""
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr ""
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr ""
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr ""
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr ""
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr ""
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr ""
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr ""
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr ""
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr ""
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr ""
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr ""
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr ""
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr ""
@@ -2430,20 +2461,20 @@ msgstr ""
msgid "node_to_awk_value: received null val"
msgstr ""
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr ""
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr ""
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr ""
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr ""
@@ -2503,504 +2534,472 @@ msgstr ""
msgid "%s: option '-W %s' requires an argument\n"
msgstr ""
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr ""
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr ""
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr ""
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr ""
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr ""
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr ""
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr ""
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr ""
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr ""
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr ""
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr ""
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr ""
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr ""
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr ""
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr ""
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr ""
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr ""
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr ""
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr ""
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr ""
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr ""
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr ""
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr ""
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr ""
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr ""
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr ""
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr ""
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr ""
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr ""
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr ""
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr ""
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr ""
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr ""
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr ""
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr ""
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr ""
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr ""
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr ""
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr ""
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr ""
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr ""
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr ""
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr ""
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr ""
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr ""
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr ""
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr ""
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr ""
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr ""
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr ""
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
"`%s'"
msgstr ""
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr ""
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr ""
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr ""
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr ""
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr ""
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr ""
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr ""
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr ""
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr ""
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr ""
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr ""
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr ""
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr ""
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr ""
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr ""
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr ""
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr ""
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr ""
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr ""
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr ""
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr ""
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr ""
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr ""
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr ""
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr ""
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr ""
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr ""
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr ""
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr ""
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr ""
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr ""
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr ""
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
-msgstr ""
-
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
+#: main.c:586
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr ""
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr ""
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr ""
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr ""
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr ""
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr ""
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr ""
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr ""
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr ""
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr ""
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr ""
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr ""
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr ""
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr ""
@@ -3009,7 +3008,7 @@ msgstr ""
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3017,21 +3016,21 @@ msgid ""
"\n"
msgstr ""
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
"\n"
msgstr ""
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
msgstr ""
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3043,7 +3042,7 @@ msgid ""
"\n"
msgstr ""
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3052,120 +3051,138 @@ msgid ""
"\n"
msgstr ""
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
msgstr ""
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr ""
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr ""
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
"\n"
msgstr ""
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr ""
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr ""
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr ""
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr ""
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr ""
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr ""
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr ""
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr ""
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr ""
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr ""
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr ""
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr ""
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr ""
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr ""
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr ""
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr ""
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr ""
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr ""
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr ""
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr ""
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr ""
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr ""
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr ""
@@ -3175,36 +3192,36 @@ msgstr ""
msgid "cmd. line:"
msgstr ""
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr ""
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr ""
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr ""
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr ""
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
"expect"
msgstr ""
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr ""
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3232,7 +3249,7 @@ msgstr ""
#: profile.c:193
#, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
@@ -3248,30 +3265,30 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr ""
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr ""
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
"\n"
msgstr ""
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr ""
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
"\t# Functions, listed alphabetically\n"
msgstr ""
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr ""
@@ -3281,70 +3298,83 @@ msgstr ""
msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr ""
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr ""
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr ""
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr ""
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr ""
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr ""
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr ""
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+msgid "Unmatched [, [^, [:, [., or [="
msgstr ""
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr ""
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr ""
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr ""
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr ""
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr ""
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr ""
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr ""
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr ""
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr ""
-#: symbol.c:741
+#: symbol.c:677
+#, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr ""
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr ""
diff --git a/po/nl.gmo b/po/nl.gmo
index 76c57134..9b707e8e 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index dc037a99..990b072d 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,8 +9,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-02-04 11:18+0100\n"
"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -40,9 +40,9 @@ msgstr "scalaire parameter '%s' wordt gebruikt als array"
msgid "attempt to use scalar `%s' as an array"
msgstr "scalair '%s' wordt gebruikt als array"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "array '%s' wordt gebruikt in een scalaire context"
@@ -101,406 +101,411 @@ msgstr ""
"asorti: een subarray van het tweede argument kan niet als eerste argument "
"gebruikt worden"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "'%s' is ongeldig als functienaam"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "sorteervergelijkingsfunctie '%s' is niet gedefinieerd"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s-blokken horen een actiedeel te hebben"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "elke regel hoort een patroon of een actiedeel te hebben"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "oude 'awk' staat meerdere 'BEGIN'- en 'END'-regels niet toe"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "'%s' is een ingebouwde functie en is niet te herdefiniëren"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr "regexp-constante '//' lijkt op C-commentaar, maar is het niet"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr "regexp-constante '/%s/' lijkt op C-commentaar, maar is het niet"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "dubbele 'case'-waarde in 'switch'-opdracht: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "dubbele 'default' in 'switch'-opdracht"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "'break' buiten een lus of 'switch'-opdracht is niet toegestaan"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "'continue' buiten een lus is niet toegestaan"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "'next' wordt gebruikt in %s-actie"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "'nextfile' wordt gebruikt in %s-actie"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "'return' wordt gebruikt buiten functiecontext"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"kale 'print' in BEGIN- of END-regel moet vermoedelijk 'print \"\"' zijn"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "'delete' is niet toegestaan met SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "'delete' is niet toegestaan met FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "'delete(array)' is een niet-overdraagbare 'tawk'-uitbreiding"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "meerfase-tweerichtings-pijplijnen werken niet"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "reguliere expressie rechts van toewijzing"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "reguliere expressie links van operator '~' of '!~'"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "oude 'awk' kent het sleutelwoord 'in' niet, behalve na 'for'"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "reguliere expressie rechts van vergelijking"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "'getline var' is ongeldig binnen een '%s'-regel"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "'getline' is ongeldig binnen een '%s'-regel"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr "niet-omgeleide 'getline' is ongeldig binnen een '%s'-regel"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "niet-omgeleide 'getline' is ongedefinieerd binnen een END-actie"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "oude 'awk' kent geen meerdimensionale arrays"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "aanroep van 'length' zonder haakjes is niet overdraagbaar"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "indirecte functieaanroepen zijn een gawk-uitbreiding"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"kan speciale variabele '%s' niet voor indirecte functieaanroep gebruiken"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "functie '%s' wordt gebruikt als array"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "ongeldige index-expressie"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "waarschuwing: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fataal: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "onverwacht regeleinde of einde van string"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "kan bronbestand '%s' niet openen om te lezen (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "kan gedeelde bibliotheek '%s' niet openen om te lezen (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "reden onbekend"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "kan '%s' niet invoegen en als programmabestand gebruiken"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "bronbestand '%s' is reeds ingesloten"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "gedeelde bibliotheek '%s' is reeds geladen"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "'@include' is een gawk-uitbreiding"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "lege bestandsnaam na '@include'"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "'@load' is een gawk-uitbreiding"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "lege bestandsnaam na '@load'"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "lege programmatekst op opdrachtregel"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "kan bronbestand '%s' niet lezen (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "bronbestand '%s' is leeg"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "bronbestand eindigt niet met een regeleindeteken (LF)"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "onafgesloten reguliere expressie eindigt met '\\' aan bestandseinde"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "%s: %d: regexp-optie '/.../%c' van 'tawk' werkt niet in gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "regexp-optie '/.../%c' van 'tawk' werkt niet in gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "onafgesloten reguliere expressie"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "onafgesloten reguliere expressie aan bestandseinde"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "gebruik van regelvoortzetting '\\ #...' is niet overdraagbaar"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "backslash is niet het laatste teken op de regel"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX staat operator '**=' niet toe"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "oude 'awk' kent de operator '**=' niet"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX staat operator '**' niet toe"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "oude 'awk' kent de operator '**' niet"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "oude 'awk' kent de operator '^=' niet"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "oude 'awk' kent de operator '^' niet"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "onafgesloten string"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "ongeldig teken '%c' in expressie"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "'%s' is een gawk-uitbreiding"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX staat '%s' niet toe"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "oude 'awk' kent '%s' niet"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "'goto' wordt als schadelijk beschouwd!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d is een ongeldig aantal argumenten voor %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr "%s: een stringwaarde als laatste vervangingsargument heeft geen effect"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s: derde parameter is geen veranderbaar object"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: derde argument is een gawk-uitbreiding"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: tweede argument is een gawk-uitbreiding"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr "dcgettext(_\"...\") is onjuist: verwijder het liggende streepje"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr "dcngettext(_\"...\") is onjuist: verwijder het liggende streepje"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr ""
"index: een reguliere-expressie-constante als tweede argument is niet "
"toegestaan"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "functie '%s': parameter '%s' schaduwt een globale variabele"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "kan '%s' niet openen om te schrijven (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "variabelenlijst gaat naar standaardfoutuitvoer"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: sluiten is mislukt (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() twee keer aangeroepen!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "er waren geschaduwde variabelen."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "functienaam '%s' is al eerder gedefinieerd"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "functie '%s': kan functienaam niet als parameternaam gebruiken"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"functie '%s': kan speciale variabele '%s' niet als functieparameter gebruiken"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "functie '%s': parameter #%d, '%s', dupliceert parameter #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "functie '%s' wordt aangeroepen maar is nergens gedefinieerd"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "functie '%s' is gedefinieerd maar wordt nergens direct aangeroepen"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "regexp-constante als parameter #%d levert booleanwaarde op"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -509,23 +514,23 @@ msgstr ""
"functie '%s' wordt aangeroepen met een spatie tussen naam en '(',\n"
"of wordt gebruikt als variabele of array"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "deling door nul"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "deling door nul in '%%'"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
"kan geen waarde toewijzen aan het resultaat van een post-increment-expressie "
"van een veld"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "ongeldig doel van toewijzing (opcode %s)"
@@ -567,188 +572,198 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: '%s' is geen open bestand, pijp, of co-proces"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: eerste argument is geen string"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: tweede argument is geen string"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: argument is geen getal"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: argument is een array"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "'length(array)' is een gawk-uitbreiding"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: argument is geen string"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: argument is geen getal"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: argument %g is negatief"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "fataal: 'count$' hoort in alle opmaken gebruikt te worden, of in geen"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "veldbreedte wordt genegeerd voor opmaakaanduiding '%%'"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "veldprecisie wordt genegeerd voor opmaakaanduiding '%%'"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "veldbreedte en -precisie worden genegeerd voor opmaakaanduiding '%%'"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "fataal: '$' is niet toegestaan in awk-opmaak"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fataal: het aantal argumenten met '$' moet > 0 zijn"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr "fataal: argumentental %ld is groter dan het gegeven aantal argumenten"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "fataal: '$' is niet toegestaan na een punt in de opmaak"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr "fataal: geen '$' opgegeven bij positionele veldbreedte of -precisie"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "'l' is betekenisloos in awk-opmaak; genegeerd"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "fataal: 'l' is niet toegestaan in POSIX awk-opmaak"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "'L' is betekenisloos in awk-opmaak; genegeerd"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "fataal: 'L' is niet toegestaan in POSIX awk-opmaak"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "'h' is betekenisloos in awk-opmaak; genegeerd"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "fataal: 'h' is niet toegestaan in POSIX awk-opmaak"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: waarde %g ligt buiten toegestaan bereik voor opmaak '%%%c'"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: waarde %g ligt buiten toegestaan bereik voor opmaak '%%%c'"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: waarde %g ligt buiten toegestaan bereik voor opmaak '%%%c'"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"onbekend opmaakteken '%c' wordt genegeerd: geen argument is geconverteerd"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "fataal: niet genoeg argumenten voor opmaakstring"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "niet genoeg ^ voor deze"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: opmaakaanduiding mist een stuurletter"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "te veel argumenten voor opmaakstring"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: geen argumenten"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: geen argumenten"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: argument is geen getal"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: argument %g is negatief"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: lengte %g is niet >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: lengte %g is niet >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: lengte %g is geen integer; wordt afgekapt"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
"substr: lengte %g is te groot voor stringindexering; wordt verkort tot %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: startindex %g is ongeldig; 1 wordt gebruikt"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: startindex %g is geen integer; wordt afgekapt"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: bronstring heeft lengte nul"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: startindex %g ligt voorbij het einde van de string"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -756,186 +771,192 @@ msgstr ""
"substr: lengte %g bij startindex %g is groter dan de lengte van het eerste "
"argument (%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr "strftime: opmaakwaarde in PROCINFO[\"strftime\"] is numeriek"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: tweede argument is geen getal"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr "strftime: tweede argument is kleiner dan nul of te groot voor 'time_t'"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: eerste argument is geen string"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: opmaakstring is leeg"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: argument is geen string"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: minstens één van waarden valt buiten het standaardbereik"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "'system'-functie is niet toegestaan in sandbox-modus"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: argument is geen string"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "verwijzing naar ongeïnitialiseerd veld '$%d'"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: argument is geen string"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: argument is geen string"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: eerste argument is geen getal"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: tweede argument is geen getal"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: argument is geen getal"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: argument is geen getal"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: argument is geen getal"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: derde argument is geen array"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: derde argument is 0; wordt beschouwd als 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: derde argument is 0; wordt beschouwd als 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: eerste argument is geen getal"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: tweede argument is geen getal"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): negatieve waarden geven rare resultaten"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): cijfers na de komma worden afgekapt"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f): te grote opschuifwaarden geven rare resultaten"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: eerste argument is geen getal"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: tweede argument is geen getal"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): negatieve waarden geven rare resultaten"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): cijfers na de komma worden afgekapt"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr "rshift(%f, %f): te grote opschuifwaarden geven rare resultaten"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: aangeroepen met minder dan twee argumenten"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: argument %d is niet-numeriek"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and: negatieve waarde %2$g van argument %1$d geeft rare resultaten"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: aangeroepen met minder dan twee argumenten"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: argument %d is niet-numeriek"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "or: negatieve waarde %2$g van argument %1$d geeft rare resultaten"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: aangeroepen met minder dan twee argumenten"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: argument %d is niet-numeriek"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: negatieve waarde %2$g van argument %1$d geeft rare resultaten"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: argument is geen getal"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): negatieve waarden geven rare resultaten"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): cijfers na de komma worden afgekapt"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: '%s' is geen geldige taalregio-deelcategorie"
@@ -1249,40 +1270,49 @@ msgstr "up [AANTAL] - dit aantal frames naar boven in de stack gaan"
msgid "watch var - set a watchpoint for a variable."
msgstr "watch VAR - een kijkpunt voor een variabele zetten"
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - een trace weergeven van alle of N binnenste frames (of "
+"buitenste als N < 0)"
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "fout: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "kan commando niet lezen (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "kan commando niet lezen (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "ongeldig teken in commando"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "onbekend commando - \"%.*s\", probeer help"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "ongeldig teken"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "ongedefinieerd commando: %s\n"
@@ -1811,68 +1841,70 @@ msgstr "'%s' is niet toegestaan in huidige context; statement is genegeerd"
msgid "`return' not allowed in current context; statement ignored"
msgstr "'return' is niet toegestaan in huidige context; statement is genegeerd"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Geen symbool '%s' in huidige context"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "ongepaarde ["
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "ongeldige tekenklasse"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "syntax van tekenklasse is [[:space:]], niet [:space:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "onafgemaakte \\-stuurcode"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Ongeldige inhoud van \\{\\}"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Reguliere expressie is te groot"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "ongepaarde ("
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "geen syntax opgegeven"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr "ongepaarde )"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "onbekend knooptype %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "onbekende opcode %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "opcode %s is geen operator noch sleutelwoord"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "bufferoverloop in genflags2str()"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1883,215 +1915,215 @@ msgstr ""
"\t# Functieaanroepen-stack:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "'IGNORECASE' is een gawk-uitbreiding"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "'BINMODE' is een gawk-uitbreiding"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "BINMODE-waarde '%s' is ongeldig, wordt behandeld als 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "onjuiste opgave van '%sFMT': '%s'"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "'--lint' wordt uitgeschakeld wegens toewijzing aan 'LINT'"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "verwijzing naar ongeïnitialiseerd argument '%s'"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "verwijzing naar ongeïnitialiseerde variabele '%s'"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "veldverwijzingspoging via een waarde die geen getal is"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "veldverwijzingspoging via een lege string"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "toegangspoging tot veld %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "verwijzing naar ongeïnitialiseerd veld '$%ld'"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "functie '%s' aangeroepen met meer argumenten dan gedeclareerd"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack(): onverwacht type '%s'"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "deling door nul in '/='"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "deling door nul in '%%='"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "uitbreidingen zijn niet toegestaan in sandbox-modus"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / '@load' zijn gawk-uitbreidingen"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: lege bibliotheeknaam ontvangen"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: kan bibliotheek '%s' niet openen (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: bibliotheek '%s' definieert 'plugin_is_GPL_compatible' niet (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: bibliotheek '%s' kan functie '%s' niet aanroepen (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr "load_ext: bibliotheek '%s': initialisatiefunctie '%s' is mislukt\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "'extension' is een gawk-uitbreiding"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "uitbreiding: lege bibliotheeknaam ontvangen"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: kan bibliotheek '%s' niet openen (%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"extension: bibliotheek '%s' definieert 'plugin_is_GPL_compatible' niet (%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "extension: bibliotheek '%s' kan functie '%s' niet aanroepen (%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: ontbrekende functienaam"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: kan functie '%s' niet herdefiniëren"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: functie '%s' is al gedefinieerd"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: functienaam '%s' is al eerder gedefinieerd"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"make_builtin: kan in gawk ingebouwde '%s' niet als functienaam gebruiken"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: negatief aantal argumenten voor functie '%s'"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: ontbrekende functienaam"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: ongeldig teken '%c' in functienaam '%s'"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: kan functie '%s' niet herdefiniëren"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: functie '%s' is al gedefinieerd"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: functienaam '%s' is al eerder gedefinieerd"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr "extension: kan in gawk ingebouwde '%s' niet als functienaam gebruiken"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr ""
"functie '%s' is gedefinieerd om niet meer dan %d argument(en) te accepteren"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "functie '%s': ontbrekend argument #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "functie '%s': argument #%d: een scalair wordt gebruikt als array"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "functie '%s': argument #%d: een array wordt gebruikt als scalair"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "het dynamisch laden van de bibliotheek wordt niet ondersteund"
@@ -2237,7 +2269,7 @@ msgstr "wait: aangeroepen met te veel argumenten"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin(): in-situ-bewerken is al actief"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin(): verwachtte twee argumenten maar is aangeroepen met %d"
@@ -2269,56 +2301,56 @@ msgstr "inplace_begin(): '%s' is geen normaal bestand"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin(): mkstemp('%s') is mislukt (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin(): chmod is mislukt (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin(): dup(stdout) is mislukt (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin(): dup2(%d, stdout) is mislukt (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin(): close(%d) is mislukt (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr ""
"inplace_end(): kan eerste argument niet als bestandsnaamstring oppakken"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end(): in-situ-bewerken is niet actief"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end(): dup2(%d, stdout) is mislukt (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end(): close(%d) is mislukt (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end(): fsetpos(stdout) is mislukt (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end(): link('%s', '%s') is mislukt (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end(): rename('%s', '%s') is mislukt (%s)"
@@ -2360,50 +2392,54 @@ msgstr "readfile: aangeroepen met te veel argumenten"
msgid "readfile: called with no arguments"
msgstr "readfile: aangeroepen zonder argumenten"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: aangeroepen met te veel argumenten"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: argument 0 is geen string\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: argument 1 is geen array\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: kan array niet pletten\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: kan geplet array niet vrijgeven\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: aangeroepen met te veel argumenten"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: argument 0 is geen string\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: argument 1 is geen array\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array() is mislukt\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element() is mislukt\n"
@@ -2432,92 +2468,92 @@ msgstr "sleep: argument is negatief"
msgid "sleep: not supported on this platform"
msgstr "sleep: wordt op dit platform niet ondersteund"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF is op een negatieve waarde gezet"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: vierde argument is een gawk-uitbreiding"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: vierde argument is geen array"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: tweede argument is geen array"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: hetzelfde array kan niet zowel als tweede als als vierde argument "
"gebruikt worden"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: een subarray van het tweede argument kan niet als vierde argument "
"gebruikt worden"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: een subarray van het vierde argument kan niet als tweede argument "
"gebruikt worden"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: lege string als derde argument is een gawk-uitbreiding"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: vierde argument is geen array"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: tweede argument is geen array"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: derde argument moet niet-nil zijn"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: hetzelfde array kan niet zowel als tweede als als vierde argument "
"gebruikt worden"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: een subarray van het tweede argument kan niet als vierde argument "
"gebruikt worden"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: een subarray van het vierde argument kan niet als tweede argument "
"gebruikt worden"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "'FIELDWIDTHS' is een gawk-uitbreiding"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "ongeldige waarde voor FIELDWIDTHS, nabij '%s'"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "een lege string als 'FS' is een gawk-uitbreiding"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "oude 'awk' staat geen reguliere expressies toe als waarde van 'FS'"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "'FPAT' is een gawk-uitbreiding"
@@ -2533,20 +2569,20 @@ msgstr "node_to_awk_value(): lege knoop ontvangen"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value(): lege waarde ontvangen"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element(): leeg array ontvangen"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element(): lege index ontvangen"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array(): kan index %d niet converteren\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array(): kan waarde %d niet converteren\n"
@@ -2606,307 +2642,289 @@ msgstr "%s: optie '-W %s' staat geen argument toe\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: optie '-W %s' vereist een argument\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "opdrachtregelargument '%s' is een map -- overgeslagen"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "kan bestand '%s' niet openen om te lezen (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "sluiten van bestandsdescriptor %d ('%s') is mislukt (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "omleiding is niet toegestaan in sandbox-modus"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "expressie in omleiding '%s' heeft alleen een getal als waarde"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "expressie voor omleiding '%s' heeft een lege string als waarde"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"bestandsnaam '%s' voor omleiding '%s' kan het resultaat zijn van een "
"logische expressie"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "onnodige mix van '>' en '>>' voor bestand '%.*s'"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "kan pijp '%s' niet openen voor uitvoer (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "kan pijp '%s' niet openen voor invoer (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr "kan tweerichtings-pijp '%s' niet openen voor in- en uitvoer (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "kan niet omleiden van '%s' (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "kan niet omleiden naar '%s' (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"systeemgrens voor aantal open bestanden is bereikt: begonnen met multiplexen"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "sluiten van '%s' is mislukt (%s)"
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "te veel pijpen of invoerbestanden geopend"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: tweede argument moet 'to' of 'from' zijn"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: '%.*s' is geen open bestand, pijp, of co-proces"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "sluiten van een nooit-geopende omleiding"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: omleiding '%s' is niet geopend met '|&'; tweede argument wordt "
"genegeerd"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "afsluitwaarde %d bij mislukte sluiting van pijp '%s' (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "afsluitwaarde %d bij mislukte sluiting van bestand '%s' (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "geen expliciete sluiting van socket '%s' aangegeven"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "geen expliciete sluiting van co-proces '%s' aangegeven"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "geen expliciete sluiting van pijp '%s' aangegeven"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "geen expliciete sluiting van bestand '%s' aangegeven"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "fout tijdens schrijven van standaarduitvoer (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "fout tijdens schrijven van standaardfoutuitvoer (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "leegmaken van pijp '%s' is mislukt (%s)"
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "leegmaken door co-proces van pijp naar '%s' is mislukt (%s)"
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "leegmaken van bestand '%s' is mislukt (%s)"
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "lokale poort %s is ongeldig in '/inet'"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "host- en poortinformatie (%s, %s) zijn ongeldig"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "geen (bekend) protocol aangegeven in speciale bestandsnaam '%s'"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "speciale bestandsnaam '%s' is onvolledig"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "'/inet' heeft een gindse hostnaam nodig"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "'/inet' heeft een gindse poort nodig"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "TCP/IP-communicatie wordt niet ondersteund"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "kan '%s' niet openen -- modus '%s'"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "kan meester-pty van dochterproces niet sluiten (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "kan standaarduitvoer van dochterproces niet sluiten (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"kan slaaf-pty niet overzetten naar standaarduitvoer van dochterproces (dup: "
"%s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "kan standaardinvoer van dochterproces niet sluiten (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"kan slaaf-pty niet overzetten naar standaardinvoer van dochterproces (dup: "
"%s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "kan slaaf-pty niet sluiten (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"kan pijp niet overzetten naar standaarduitvoer van dochterproces (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"kan pijp niet overzetten naar standaardinvoer van dochterproces (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "kan standaarduitvoer van ouderproces niet herstellen\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "kan standaardinvoer van ouderproces niet herstellen\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "kan pijp niet sluiten (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "'|&' wordt niet ondersteund"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "kan pijp '%s' niet openen (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "kan voor '%s' geen dochterproces starten (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser(): NULL-pointer gekregen"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr "invoer-parser '%s' botst met eerder geïnstalleerde invoer-parser '%s'"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "invoer-parser '%s' kan '%s' niet openen"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper(): NULL-pointer gekregen"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
"uitvoer-wrapper '%s' botst met eerder geïnstalleerde uitvoer-wrapper '%s'"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "uitvoer-wrapper '%s' kan '%s' niet openen"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor(): NULL-pointer gekregen"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2914,213 +2932,200 @@ msgid ""
msgstr ""
"tweeweg-processor '%s' botst met eerder geïnstalleerde tweeweg-processor '%s'"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "tweeweg-processor '%s' kan '%s' niet openen"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "databestand '%s' is leeg"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "kan geen extra invoergeheugen meer toewijzen"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "een 'RS' van meerdere tekens is een gawk-uitbreiding"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "IPv6-communicatie wordt niet ondersteund"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "argument van '-e/--source' is leeg; genegeerd"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: optie '-W %s' is onbekend; genegeerd\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: optie vereist een argument -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr "omgevingsvariabele 'POSIXLY_CORRECT' is gezet: '--posix' ingeschakeld"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "'--posix' overstijgt '--traditional'"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "'--posix'/'--traditional' overstijgen '--non-decimal-data'"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "het uitvoeren van %s als 'setuid root' kan een veiligheidsrisico zijn"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "'--posix' overstijgt '--characters-as-bytes'"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "kan standaardinvoer niet in binaire modus zetten (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "kan standaarduitvoer niet in binaire modus zetten (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "kan standaardfoutuitvoer niet in binaire modus zetten (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "helemaal geen programmatekst!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr "Gebruik: %s [opties] -f programmabestand [--] bestand...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
" of: %s [opties] [--] %cprogrammatekst%c bestand...\n"
"\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "\tPOSIX-opties:\t\tEquivalente GNU-opties: (standaard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f programmabestand\t--file=programmabestand\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F veldscheidingsteken\t--field-separator=veldscheidingsteken\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr ""
"\t-v var=waarde\t\t--assign=var=waarde\n"
"\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "\tKorte opties:\t\tEquivalente GNU-opties: (uitbreidingen)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[bestand]\t\t--dump-variables[=bestand]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[bestand]\t\t--debug[=bestand]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'programmatekst'\t--source='programmatekst'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E bestand\t\t--exec=bestand\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i include-bestand\t\t--include=include-bestand\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l bibliotheek\t\t--load=bibliotheek\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fataal]\t\t--lint[=fataal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[bestand]\t\t--pretty-print[=bestand]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[bestand]\t\t--profile[=bestand]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t\t--parsedebug\n"
@@ -3129,7 +3134,7 @@ msgstr "\t-Y\t\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3142,7 +3147,7 @@ msgstr ""
"Meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3152,7 +3157,7 @@ msgstr ""
"Standaard leest het van standaardinvoer en schrijft naar standaarduitvoer.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3162,7 +3167,7 @@ msgstr ""
"\tgawk '{ som += $1 }; END { print som }' bestand\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3180,7 +3185,7 @@ msgstr ""
"uitgegeven door de Free Software Foundation, naar keuze ofwel onder\n"
"versie 3 of onder een nieuwere versie van die licentie.\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3194,7 +3199,7 @@ msgstr ""
"Zie de GNU General Public License voor meer details.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3203,16 +3208,16 @@ msgstr ""
"ontvangen te hebben; is dit niet het geval, dan kunt u deze licentie\n"
"ook vinden op http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft maakt van FS geen tab in POSIX-awk"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "onbekende waarde voor veldspecificatie: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3221,99 +3226,117 @@ msgstr ""
"%s: argument '%s' van '-v' is niet van de vorm 'var=waarde'\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "'%s' is geen geldige variabelenaam"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "'%s' is geen variabelenaam; zoekend naar bestand '%s=%s'"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "kan in gawk ingebouwde '%s' niet als variabelenaam gebruiken"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "kan functie '%s' niet als variabelenaam gebruiken"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "drijvendekomma-berekeningsfout"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "fatale fout: **interne fout**"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "fatale fout: **interne fout**: segmentatiefout"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "fatale fout: **interne fout**: stack is vol"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "geen reeds-geopende bestandsdescriptor %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "kan /dev/null niet openen voor bestandsdescriptor %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "argument van '-e/--source' is leeg; genegeerd"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: optie '-W %s' is onbekend; genegeerd\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: optie vereist een argument -- %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "PREC-waarde '%.*s' is ongeldig"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "RNDMODE-waarde '%.*s' is ongeldig"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: niet-numeriek argument ontvangen"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): negatieve waarden geven rare resultaten"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): cijfers na de komma worden afgekapt"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "compl(%Zd): negatieve waarden geven rare resultaten"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: niet-numeriek argument #%d ontvangen"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: argument #%d heeft ongeldige waarde %Rg; 0 wordt gebruikt"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: negatieve waarde %2$Rg van argument #%1$d geeft rare resultaten"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr ""
"%s: cijfers na de komma van waarde %2$Rg van argument #%1$d worden afgekapt"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%1$s: negatieve waarde %3$Zd van argument #%2$d geeft rare resultaten"
@@ -3323,24 +3346,24 @@ msgstr "%1$s: negatieve waarde %3$Zd van argument #%2$d geeft rare resultaten"
msgid "cmd. line:"
msgstr "commandoregel:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "backslash aan het einde van de string"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "oude 'awk' kent de stuurcodereeks '\\%c' niet"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX staat stuurcode '\\x' niet toe"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "geen hex cijfers in stuurcodereeks '\\x'"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3349,12 +3372,12 @@ msgstr ""
"hexadecimale stuurcode \\x%.*s van %d tekens wordt waarschijnlijk niet "
"afgehandeld zoals u verwacht"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "stuurcodereeks '\\%c' behandeld als normale '%c'"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3384,12 +3407,12 @@ msgid "sending profile to standard error"
msgstr "profiel gaat naar standaardfoutuitvoer"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s-blok(ken)\n"
+"\t# Regel(s)\n"
"\n"
#: profile.c:198
@@ -3406,11 +3429,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "**interne fout**: %s met lege 'vname'"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "**interne fout**: ingebouwde functie met lege 'fname'"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3419,12 +3442,12 @@ msgstr ""
"\t# Geladen uitbreidingen ('-l' en/of '@load')\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# gawk-profiel, gemaakt op %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3433,7 +3456,7 @@ msgstr ""
"\n"
"\t# Functies, alfabetisch geordend\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str(): onbekend omleidingstype %d"
@@ -3444,82 +3467,118 @@ msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
"component '%.*s' van reguliere expressie moet vermoedelijk '[%.*s]' zijn"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Gelukt"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Geen overeenkomsten"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Ongeldige reguliere expressie"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Ongeldig samengesteld teken"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Ongeldige tekenklassenaam"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Backslash aan het eind"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Ongeldige terugverwijzing"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "Ongepaarde [ of [^"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "Ongepaarde ( of \\("
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "Ongepaarde \\{"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Ongeldige inhoud van \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Ongeldig bereikeinde"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Onvoldoende geheugen beschikbaar"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Ongeldige voorafgaande reguliere expressie"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Voortijdig einde van reguliere expressie"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Reguliere expressie is te groot"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr "Ongepaarde ) of \\)"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Geen eerdere reguliere expressie"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "functie '%s': kan functienaam niet als parameternaam gebruiken"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "kan hoofdcontext niet poppen"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "'getline var' is ongeldig binnen een '%s'-regel"
+
+#~ msgid "`getline' invalid inside `%s' rule"
+#~ msgstr "'getline' is ongeldig binnen een '%s'-regel"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr "geen (bekend) protocol aangegeven in speciale bestandsnaam '%s'"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "speciale bestandsnaam '%s' is onvolledig"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "'/inet' heeft een gindse hostnaam nodig"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "'/inet' heeft een gindse poort nodig"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s-blok(ken)\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr ""
#~ "de betekenis van een bereik van de vorm '[%c-%c]' is afhankelijk van de "
#~ "taalregio"
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "functie '%s' wordt gebruikt als array"
-
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "verwijzing naar ongeïnitialiseerd element '%s[\"%.*s\"]'"
@@ -3598,9 +3657,6 @@ msgstr "kan hoofdcontext niet poppen"
#~ msgid "function `%s' not defined"
#~ msgstr "functie '%s' is niet gedefinieerd"
-#~ msgid "non-redirected `getline' invalid inside `%s' rule"
-#~ msgstr "niet-omgeleide 'getline' is ongeldig binnen een '%s'-regel"
-
#~ msgid "`nextfile' cannot be called from a `%s' rule"
#~ msgstr "'nextfile' kan niet aangeroepen worden in een '%s'-regel"
diff --git a/po/pl.gmo b/po/pl.gmo
index b2c8e5fa..02842916 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 95ddbec2..d7f71e93 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,8 +8,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-03-22 17:49+0100\n"
"Last-Translator: Wojciech Polak <polak@gnu.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -39,9 +39,9 @@ msgstr "próba użycia parametru `%s' skalaru jako tablicy"
msgid "attempt to use scalar `%s' as an array"
msgstr "próba użycia skalaru `%s' jako tablicy"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "próba użycia tablicy `%s' w kontekście skalaru"
@@ -96,417 +96,423 @@ msgid "asorti: cannot use a subarray of second arg for first arg"
msgstr ""
"asorti: nie można użyć podtablicy drugiego argumentu dla pierwszego argumentu"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "nieprawidłowa nazwa funkcji `%s'"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "funkcja porównująca w sortowaniu `%s' nie została zdefiniowna"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s bloków musi posiadać część dotyczącą akcji"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "każda reguła musi posiadać wzorzec lub część dotyczącą akcji"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "stary awk nie wspiera wielokrotnych reguł `BEGIN' lub `END'"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr ""
"`%s' jest funkcją wbudowaną, więc nie może zostać ponownie zdefiniowana"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
"stałe wyrażenie regularne `//' wygląda jak komentarz C++, ale nim nie jest"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
"stałe wyrażenie regularne `/%s/' wygląda jak komentarz C, ale nim nie jest"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "powielone wartości case w ciele switch: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "wykryto powielony `default' w ciele switch"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "instrukcja `break' poza pętlą lub switch'em jest niedozwolona"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "instrukcja `continue' poza pętlą jest niedozwolona"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "`next' użyty w akcji %s"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "`nextfile' użyty w akcji %s"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "`return' użyty poza kontekstem funkcji"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"zwykły `print' w regułach BEGIN lub END powinien prawdopodobnie być jako "
"`print \"\"'"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "`delete' nie jest dozwolony z SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "`delete' nie jest dozwolony z FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "`delete(tablica)' jest nieprzenośnym rozszerzeniem tawk"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "wieloetapowe dwukierunkowe linie potokowe nie działają"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "wyrażanie regularne po prawej stronie przypisania"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "wyrażenie regularne po lewej stronie operatora `~' lub `!~'"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr ""
"stary awk nie wspiera słowa kluczowego `in', z wyjątkiem po słowie `for'"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "wyrażenie regularne po prawej stronie porównania"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "nieprawidłowy `getline var' wewnątrz reguły `%s'"
-
-#: awkgram.y:1420
+#: awkgram.y:1411
#, c-format
-msgid "`getline' invalid inside `%s' rule"
-msgstr "nieprawidłowy `getline' wewnątrz reguły `%s'"
+msgid "non-redirected `getline' invalid inside `%s' rule"
+msgstr ""
+"komenda `getline' bez przekierowania jest nieprawidłowa wewnątrz reguły `%s'"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr ""
"komenda `getline' bez przekierowania nie jest zdefiniowana wewnÄ…trz akcji END"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "stary awk nie wspiera wielowymiarowych tablic"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "wywołanie `length' bez nawiasów jest nieprzenośne"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "pośrednie wywołania funkcji są rozszerzeniem gawk"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"nie można użyć specjalnej zmiennej `%s' do pośredniego wywołania funkcji"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "próba użycia funkcji `%s' jako tablicy"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "nieprawidłowe wyrażenie indeksowe"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "ostrzeżenie: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "fatalny błąd: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "niespodziewany znak nowego wiersza lub końca łańcucha"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "nie można otworzyć pliku źródłowego `%s' do czytania (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "nie można otworzyć współdzielonej biblioteki `%s' do czytania (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "nieznany powód"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "nie można dołączyć `%s' i używać go jako pliku programu"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "plik źródłowy `%s' jest już załączony"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "biblioteka współdzielona jest już załadowana `%s'"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include jest rozszerzeniem gawk"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "pusta nazwa pliku po @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load jest rozszerzeniem gawk"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "pusta nazwa pliku po @load"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "pusty tekst programu w linii poleceń"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "nie można otworzyć pliku źródłowego `%s' (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "plik źródłowy `%s' jest pusty"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "plik źródłowy nie posiada na końcu znaku nowego wiersza"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr ""
"niezakończone prawidłowo wyrażenie regularne kończy się znakiem `\\' na "
"końcu pliku"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"%s: %d: modyfikator wyrażenia regularnego `/.../%c' tawk nie działa w gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr "modyfikator wyrażenia regularnego `/.../%c' tawk nie działa w gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "niezakończone wyrażenie regularne"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "niezakończone wyrażenie regularne na końcu pliku"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "użycie `\\ #...' kontynuacji linii nie jest przenośne"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "backslash nie jest ostatnim znakiem w wierszu"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX nie zezwala na operator `**='"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "stary awk nie wspiera operatora `**='"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX nie zezwala na operator `**'"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "stary awk nie wspiera operatora `**'"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "operator `^=' nie jest wspierany w starym awk"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "operator `^' nie jest wspierany w starym awk"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "niezakończony łańcuch"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "nieprawidłowy znak '%c' w wyrażeniu"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "`%s' jest rozszerzeniem gawk"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX nie zezwala na `%s'"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "`%s' nie jest wspierany w starym awk"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "`goto' uważane za szkodliwe!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d jest nieprawidłowe jako liczba argumentów dla %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s: literał łańcuchowy jako ostatni argument podstawienia nie ma żadnego "
"efektu"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s trzeci parametr nie jest zmiennym obiektem"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: trzeci argument jest rozszerzeniem gawk"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: drugi argument jest rozszerzeniem gawk"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr "nieprawidłowe użycie dcgettext(_\"...\"): usuń znak podkreślenia"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr "nieprawidłowe użycie dcngettext(_\"...\"): usuń znak podkreślenia"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: stały regexp jako drugi argument nie jest dozwolony"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "funkcja `%s': parametr `%s' zasłania globalną zmienną"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "nie można otworzyć `%s' do zapisu (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "wysyłanie listy zmiennych na standardowe wyjście diagnostyczne"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: zamknięcie nie powiodło się (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() wywołana podwójnie!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "wystąpiły przykryte zmienne."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "nazwa funkcji `%s' została zdefiniowana poprzednio"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "funkcja `%s': nie można użyć nazwy funkcji jako nazwy parametru"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"funkcja `%s': nie można użyć specjalnej zmiennej `%s' jako parametru funkcji"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "funkcja `%s': parametr #%d, `%s', powiela parametr #%d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "funkcja `%s' została wywołana, ale nigdy nie została zdefiniowana"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr ""
"funkcja `%s' została zdefiniowana, ale nigdy nie została wywołana "
"bezpośrednio"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "stałe wyrażenie regularne dla parametru #%d daje wartość logiczną"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -516,21 +522,21 @@ msgstr ""
"`(',\n"
"lub użyta jako zmienna lub jako tablica"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "próba dzielenia przez zero"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "próba dzielenia przez zero w `%%'"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr "nie można przypisać wartości do wyniku tego wyrażenia"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "nieprawidłowy cel przypisania (opcode %s)"
@@ -570,193 +576,203 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: `%s' nie jest ani otwartym plikiem, ani potokiem, ani procesem"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: otrzymano pierwszy argument, który nie jest łańcuchem"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: otrzymano drugi argument, który nie jest łańcuchem"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: otrzymano argument, który nie jest liczbą"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: otrzymano argument, który jest tablicą"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "`length(tablica)' jest rozszerzeniem gawk"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: otrzymano argument, który nie jest łańcuchem"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: otrzymano argument, który nie jest liczbą"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: otrzymano ujemny argument %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "fatal: należy użyć `count$' we wszystkich formatach lub nic"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "szerokość pola jest ignorowana dla specyfikatora `%%'"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "precyzja jest ignorowana dla specyfikatora `%%'"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "szerokość pola i precyzja są ignorowane dla specyfikatora `%%'"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "fatal: `$' jest niedozwolony w formatach awk"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "fatal: argument count z `$' musi być > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
"fatal: argument count %ld większy niż całkowita suma argumentów dostarczonych"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "fatal: `$' jest niedozwolony po kropce w formacie"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr "fatal: brak `$' dla pozycyjnej szerokości pola lub precyzji"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "`l' jest bezsensowny w formatach awk; zignorowany"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "fatal: `l' jest niedozwolony w formatach POSIX awk"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "`L' jest bezsensowny w formatach awk; zignorowany"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "fatal: `L' jest niedozwolony w formatach POSIX awk"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "`h' jest bezsensowny w formatach awk; zignorowany"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "fatal: `h' jest niedozwolony w formatach POSIX awk"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: wartość %g jest poza zasięgiem dla formatu `%%%c'"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: wartość %g jest poza zasięgiem dla formatu `%%%c'"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: wartość %g jest poza zasięgiem dla formatu `%%%c'"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"pominięcie nieznanego formatu specyfikatora znaku `%c': nie skonwertowano "
"argumentu"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr ""
"fatal: brak wystarczającej liczby argumentów, aby zaspokoić łańcuch "
"formatujÄ…cy"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "zabrakło ^"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: specyfikator formatu nie posiada kontrolnej litery"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "zbyt dużo podanych argumentów w łańcuchu formatującym"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: brak argumentów"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: brak argumentów"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: otrzymano argument, który nie jest liczbą"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: wywołana z ujemnym argumentem %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: długość %g nie jest >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: długość %g nie jest >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: długość %g, która nie jest liczbą całkowitą, zostanie obcięta"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr "substr: długość %g zbyt duża dla indeksu łańcucha, obcinanie do %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: początkowy indeks %g jest nieprawidłowy, nastąpi użycie 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr ""
"substr: początkowy indeks %g, który nie jest liczbą całkowitą, zostanie "
"obcięty"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: łańcuch źródłowy ma zerową długość"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: początkowy indeks %g leży poza końcem łańcucha"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -764,187 +780,193 @@ msgstr ""
"substr: długość %g zaczynając od %g przekracza długość pierwszego argumentu "
"(%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
"strftime: wartość formatu w PROCINFO[\"strftime\"] posiada typ numeryczny"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: otrzymano drugi argument, który nie jest liczbą"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr "strftime: drugi argument mniejszy od 0 lub zbyt duży dla time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: otrzymano pierwszy argument, który nie jest łańcuchem"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: otrzymano pusty łańcuch formatujący"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: otrzymano argument, który nie jest łańcuchem"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: przynajmniej jedna z wartości jest poza domyślnym zakresem"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "funkcja 'system' nie jest dozwolona w trybie piaskownicy"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: otrzymano argument, który nie jest łańcuchem"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "odwołanie do niezainicjowanego pola `$%d'"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: otrzymano argument, który nie jest łańcuchem"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: otrzymano argument, który nie jest łańcuchem"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: otrzymano pierwszy argument, który nie jest liczbą"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: otrzymano drugi argument, który nie jest liczbą"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: otrzymano argument, który nie jest liczbą"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: otrzymano argument, który nie jest liczbą"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: otrzymano argument, który nie jest liczbą"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: otrzymano trzeci argument, który nie jest tablicą"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: trzeci argument 0 potraktowany jako 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: trzeci argument 0 potraktowany jako 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: otrzymano pierwszy argument, który nie jest liczbą"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: otrzymano drugi argument, który nie jest liczbą"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): ujemne wartości spowodują dziwne wyniki"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): ułamkowe wartości zostaną obcięte"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f): zbyt duża wartość przesunięcia spowoduje dziwne wyniki"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: otrzymano pierwszy argument, który nie jest liczbą"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: otrzymano drugi argument, który nie jest liczbą"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): ujemne wartości spowodują dziwne wyniki"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): ułamkowe wartości zostaną obcięte"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr "rshift(%f, %f): zbyt duża wartość przesunięcia spowoduje dziwne wyniki"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: wywołano z mniej niż dwoma argumentami"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: argument %d nie jest liczbÄ…"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and: argument %d ujemna wartość %g spowoduje dziwne wyniki"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: wywołano z mniej niż dwoma argumentami"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: argument %d nie jest liczbÄ…"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "or: argument %d ujemna wartość %g spowoduje dziwne wyniki"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: wywołano z mniej niż dwoma argumentami"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: argument %d nie jest liczbÄ…"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: argument %d ujemna wartość %g spowoduje dziwne wyniki"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: otrzymano argument, który nie jest liczbą"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): ujemne wartości spowodują dziwne wyniki"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): ułamkowe wartości zostaną obcięte"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: `%s' nie jest prawidłową kategorią lokalizacji"
@@ -1224,40 +1246,46 @@ msgstr ""
msgid "watch var - set a watchpoint for a variable."
msgstr ""
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "błąd: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "nie można odczytać komendy (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "nie można odczytać komendy (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "nieprawidłowy znak w komendzie"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "nieznana komenda - \"%.*s\", spróbuj pomoc"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "nieprawidłowy znak"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "niezdefiniowana komenda: %s\n"
@@ -1778,68 +1806,70 @@ msgid "`return' not allowed in current context; statement ignored"
msgstr ""
"instrukcja `return' nie może być wywołana w tym kontekście; zignorowano"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Brak symbolu `%s' w bieżącym kontekście"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "[ nie do pary"
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "nieprawidłowa klasa znaku"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "składnia klasy znaku to [[:space:]], a nie [:space:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "niedokończona sekwencja ucieczki \\"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Nieprawidłowa zawartość \\{\\}"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Wyrażenie regularne jest zbyt duże"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "( nie do pary"
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "nie podano składni"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr ") nie do pary"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "nieznany typ węzła %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "nieznany opcode %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "opcode %s nie jest operatorem ani słowem kluczowym"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "przepełnienie bufora w genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1850,216 +1880,216 @@ msgstr ""
"\t# Stos Wywoławczy Funkcji:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "`IGNORECASE' jest rozszerzeniem gawk"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "`BINMODE' jest rozszerzeniem gawk"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "wartość BINMODE `%s' jest nieprawidłowa, przyjęto ją jako 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "zła specyfikacja `%sFMT' `%s'"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "wyłączenie `--lint' z powodu przypisania do `LINT'"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "odwołanie do niezainicjowanego argumentu `%s'"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "odwołanie do niezainicjowanej zmiennej `%s'"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "próba odwołania do pola poprzez nienumeryczną wartość"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "próba odwołania z zerowego łańcucha"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "próba dostępu do pola %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "odwołanie do niezainicjowanego pola `$%ld'"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr ""
"funkcja `%s' została wywołana z większą ilością argumentów niż zostało to "
"zadeklarowane"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: niespodziewany typ `%s'"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "próba dzielenia przez zero w `/='"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "próba dzielenia przez zero w `%%='"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "rozszerzenia nie sÄ… dozwolone w trybie piaskownicy"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load sÄ… rozszerzeniami gawk"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: otrzymano NULL lib_name"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: nie można otworzyć biblioteki `%s' (%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: biblioteka `%s': nie definiuje `plugin_is_GPL_compatible' (%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: biblioteka `%s': nie można wywołać funkcji `%s' (%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
"load_ext: funkcja inicjalizująca `%s' biblioteki `%s' nie powiodła się\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "`extension' jest rozszerzeniem gawk"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "extension: otrzymano NULL lib_name"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: nie można otworzyć biblioteki `%s' (%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"extension: biblioteka `%s': nie definiuje `plugin_is_GPL_compatible' (%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "extension: biblioteka `%s': nie można wywołać funkcji `%s' (%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: brakujÄ…ca nazwa funkcji"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: nie można zredefiniować funkcji `%s'"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: funkcja `%s' została już zdefiniowana"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: nazwa funkcji `%s' została zdefiniowana wcześniej"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr "make_builtin: nie można użyć wbudowanej w gawk `%s' jako nazwy funkcji"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: ujemny licznik argumentów dla funkcji `%s'"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: brakujÄ…ca nazwa funkcji"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: nieprawidłowy znak `%c' w nazwie funkcji `%s'"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: nie można zredefiniować funkcji `%s'"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: funkcja `%s' została już zdefiniowana"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: nazwa funkcji `%s' została zdefiniowana wcześniej"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr "extension: nie można użyć wbudowanej w gawk `%s' jako nazwy funkcji"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "funkcja `%s' zdefiniowana aby pobrać nie więcej niż %d argument(ów)"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "funkcja `%s': brakuje #%d argumentu"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "funkcja `%s': argument #%d: próba użycia skalaru jako tablicy"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "funkcja `%s': argument #%d: próba użycia tablicy jako skalaru"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "dynamiczne Å‚adowanie biblioteki nie jest wspierane"
@@ -2203,7 +2233,7 @@ msgstr "wait: wywołana ze zbyt dużą ilością argumentów"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: edycja w miejscu jest już aktywna"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin: spodziewano się 2 argumentów, a otrzymano %d"
@@ -2234,55 +2264,55 @@ msgstr "inplace_begin: `%s' nie jest zwykłym plikiem"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: wywołanie mkstemp(`%s') nie powiodło się (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin: funkcja chmod nie powiodła się (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: wywołanie dup(stdout) nie powiodło się (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: wywołanie dup2(%d, stdout) nie powiodło się (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin: wywołanie close(%d) nie powiodło się (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr "inplace_end: nie można pobrać pierwszego argumentu jako nazwy pliku"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: edycja w miejscu nie jest aktywna"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: wywołanie dup2(%d, stdout) nie powiodło się (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: wywołanie close(%d) nie powiodło się (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: wywołanie fsetpos(stdout) nie powiodło się (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: wywołanie link(`%s', `%s') nie powiodło się (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: wywołanie rename(`%s', `%s') nie powiodło się (%s)"
@@ -2324,50 +2354,54 @@ msgstr "readfile: wywołana ze zbyt dużą ilością argumentów"
msgid "readfile: called with no arguments"
msgstr "readfile: wywołano bez argumentów"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: wywołana ze zbyt dużą ilością argumentów"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: argument 0 nie jest tekstem\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: argument 1 nie jest tablicÄ…\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: nie można spłaszczyć tablicy\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: nie można było zwolnić spłaszczonej tablicy\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: wywołana ze zbyt dużą ilością argumentów"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: argument 0 nie jest tekstem\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: argument 1 nie jest tablicÄ…\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array nie powiodła się\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element nie powiodła się\n"
@@ -2396,88 +2430,88 @@ msgstr "sleep: argument jest ujemny"
msgid "sleep: not supported on this platform"
msgstr "sleep: funkcja nie jest wspierana na tej platformie"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF ustawiony na wartość ujemną"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: czwarty argument jest rozszerzeniem gawk"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: czwarty argument nie jest tablicÄ…"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: drugi argument nie jest tablicÄ…"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: nie można użyć tej samej tablicy dla drugiego i czwartego argumentu"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: nie można użyć podtablicy drugiego argumentu dla czwartego argumentu"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: nie można użyć podtablicy czwartego argumentu dla drugiego argumentu"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: zerowy łańcuch dla trzeciego argumentu jest rozszerzeniem gawk"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: czwarty argument nie jest tablicÄ…"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: drugi argument nie jest tablicÄ…"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: trzeci argument nie może być pusty"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: nie można użyć tej samej tablicy dla drugiego i czwartego argumentu"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: nie można użyć podtablicy drugiego argumentu dla czwartego "
"argumentu"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: nie można użyć podtablicy czwartego argumentu dla drugiego "
"argumentu"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "`FIELDWIDTHS' jest rozszerzeniem gawk"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "nieprawidłowa wartość FIELDWIDTHS, w pobliżu `%s'"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "zerowy łańcuch dla `FS' jest rozszerzeniem gawk"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "stary awk nie wspiera wyrażeń regularnych jako wartości `FS'"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "`FPAT' jest rozszerzeniem gawk"
@@ -2493,20 +2527,20 @@ msgstr "node_to_awk_value: otrzymano null node"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: otrzymano null val"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: otrzymano tablicÄ™ null"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: otrzymano null subscript"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: nie można było skonwertować indeksu %d\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: nie można było skonwertować wartości %d\n"
@@ -2566,318 +2600,300 @@ msgstr "%s: opcja '-W %s' nie może mieć argumentów\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: opcja '-W %s' wymaga argumentu\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "argument linii poleceń `%s' jest katalogiem: pominięto"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "nie można otworzyć pliku `%s' do czytania (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "zamknięcie fd %d (`%s') nie powiodło się (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "przekierowanie nie jest dozwolone w trybie piaskownicy"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "wyrażenie w przekierowaniu `%s' ma tylko wartość numeryczną"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "wyrażenie dla przekierowania `%s' ma zerową wartość łańcucha"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"nazwa pliku `%s' dla przekierowania `%s' może być rezultatem logicznego "
"wyrażenia"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "niepotrzebne mieszanie `>' i `>>' dla pliku `%.*s'"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "nie można otworzyć potoku `%s' jako wyjścia (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "nie można otworzyć potoku `%s' jako wejścia (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr ""
"nie można otworzyć dwukierunkowego potoku `%s' jako wejścia/wyjścia (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "nie można przekierować z `%s' (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "nie można przekierować do `%s' (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"osiągnięto systemowy limit otwartych plików: rozpoczęcie multipleksowania "
"deskryptorów plików"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "zamknięcie `%s' nie powiodło się (%s)."
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "zbyt dużo otwartych potoków lub plików wejściowych"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: drugim argumentem musi być `to' lub `from'"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr ""
"close: `%.*s' nie jest ani otwartym plikiem, ani potokiem, ani procesem"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "zamknięcie przekierowania, które nigdy nie zostało otwarte"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: przekierowanie `%s' nie zostało otwarte z `|&', drugi argument "
"zignorowany"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "status awarii (%d) podczas zamykania potoku `%s' (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "status awarii (%d) podczas zamykania pliku `%s' (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "brak jawnego zamknięcia gniazdka `%s'"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "brak jawnego zamknięcia procesu pomocniczego `%s'"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "brak jawnego zamknięcia potoku `%s'"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "brak jawnego zamknięcia pliku `%s'"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "błąd podczas zapisu na standardowe wyjście (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "błąd podczas zapisu na standardowe wyjście diagnostyczne (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "opróżnienie potoku `%s' nie powiodło się (%s)."
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr ""
"opróżnienie potoku do `%s' przez proces pomocniczy nie powiodło się (%s)."
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "opróżnienie pliku `%s' nie powiodło się (%s)."
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "nieprawidłowy lokalny port %s w `/inet'"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "informacje o zdalnym hoście i porcie są nieprawidłowe (%s, %s)"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "nie dostarczono (znanego) protokołu w specjalnym pliku `%s'"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "specjalna nazwa pliku `%s' jest niekompletna"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "należy dostarczyć nazwę zdalnego hosta do `/inet'"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "należy dostarczyć numer zdalnego portu do `/inet'"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "Komunikacja TCP/IP nie jest wspierana"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "nie można otworzyć `%s', tryb `%s'"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "zamknięcie nadrzędnego pty nie powiodło się (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr ""
"zamknięcie standardowego wyjścia w procesie potomnym nie powiodło się (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"przesunięcie podległego pty na standardowe wyjście w procesie potomnym nie "
"powiodło się (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr ""
"zamknięcie standardowego wejścia w procesie potomnym nie powiodło się (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"przesunięcie podległego pty na standardowe wejście w procesie potomnym nie "
"powiodło się (dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "zamknięcie podległego pty nie powiodło się (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"przesunięcie potoku na standardowe wyjście w procesie potomnym nie powiodło "
"siÄ™ (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"przesunięcie potoku na standardowe wejście w procesie potomnym nie powiodło "
"siÄ™ (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr ""
"odzyskanie standardowego wyjścia w procesie potomnym nie powiodło się\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr ""
"odzyskanie standardowego wejścia w procesie potomnym nie powiodło się\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "zamknięcie potoku nie powiodło się (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "`|&' nie jest wspierany"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "nie można otworzyć potoku `%s' (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "nie można utworzyć procesu potomnego dla `%s' (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: otrzymano wskaźnik NULL"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"parser wejścia `%s' konfliktuje z poprzednio zainstalowanym parserem `%s'"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "parser wejścia `%s': nie powiodło się otwarcie `%s'"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: otrzymano wskaźnik NULL"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
"otoczka wyjścia `%s' konfliktuje z poprzednio zainstalowaną otoczką `%s'"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "otoczka wyjścia `%s': nie powiodło się otwarcie `%s'"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: otrzymano wskaźnik NULL"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2886,212 +2902,199 @@ msgstr ""
"dwukierunkowy procesor `%s' konfliktuje z poprzednio zainstalowanym "
"procesorem `%s'"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "dwukierunkowy procesor `%s' zawiódł w otwarciu `%s'"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "plik danych `%s' jest pusty"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "nie można zarezerwować więcej pamięci wejściowej"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "wieloznakowa wartość `RS' jest rozszerzeniem gawk"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "Komunikacja IPv6 nie jest wspierana"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "pusty argument dla opcji `-e/--source' został zignorowany"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: opcja `-W %s' nierozpoznana i zignorowana\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: opcja musi mieć argument -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"zmienna środowiskowa `POSIXLY_CORRECT' ustawiona: `--posix' został włączony"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "opcja `--posix' zostanie użyta nad `--traditional'"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "`--posix'/`--traditional' użyte nad opcją `--non-decimal-data'"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr ""
"uruchamianie %s setuid root może być problemem pod względem bezpieczeństwa"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "opcja `--posix' zostanie użyta nad `--characters-as-bytes'"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "nie można ustawić trybu binarnego na standardowym wejściu (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "nie można ustawić trybu binarnego na standardowym wyjściu (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "nie można ustawić trybu binarnego na wyjściu diagnostycznym (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "brak tekstu programu!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"Użycie: %s [styl opcji POSIX lub GNU] -f plik_z_programem [--] plik ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr "Użycie: %s [styl opcji POSIX lub GNU] [--] %cprogram%c plik ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "Opcje POSIX:\t\tDÅ‚ugie opcje GNU (standard):\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f program\t\t--file=program\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v zmienna=wartość\t--assign=zmienna=wartość\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Krótkie opcje:\t\tDługie opcje GNU: (rozszerzenia)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[plik]\t\t--dump-variables[=plik]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[plik]\t\t--debug[=plik]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'tekst-programu'\t--source='tekst-programu'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E plik\t\t\t--exec=plik\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i plikinclude\t\t--include=plikinclude\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l biblioteka\t\t--load=biblioteka\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[plik]\t\t--pretty-print[=plik]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[plik]\t\t--profile[=plik]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3100,7 +3103,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3113,7 +3116,7 @@ msgstr ""
"dokumentacji.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3123,7 +3126,7 @@ msgstr ""
"Program domyślnie czyta standardowe wejście i zapisuje standardowe wyjście.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3133,7 +3136,7 @@ msgstr ""
"\tgawk '{ suma += $1 }; END { print suma }' plik\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3152,7 +3155,7 @@ msgstr ""
"tej Licencji lub którejś z późniejszych wersji.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3167,7 +3170,7 @@ msgstr ""
"PowszechnÄ… LicencjÄ™ PublicznÄ… GNU.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3176,16 +3179,16 @@ msgstr ""
"Powszechnej Licencji Publicznej GNU (GNU General Public License);\n"
"jeśli zaś nie - odwiedź stronę http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft nie ustawia FS na znak tabulatora w POSIX awk"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "nieznana wartość dla specyfikacji pola: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3194,98 +3197,116 @@ msgstr ""
"%s: argument `%s' dla `-v' nie jest zgodny ze składnią `zmienna=wartość'\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "`%s' nie jest dozwolonÄ… nazwÄ… zmiennej"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "`%s' nie jest nazwÄ… zmiennej, szukanie pliku `%s=%s'"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "nie można użyć wbudowanej w gawk `%s' jako nazwy zmiennej"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "nie można użyć funkcji `%s' jako nazwy zmiennej"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "wyjÄ…tek zmiennopozycyjny"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "fatalny błąd: wewnętrzny błąd"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "fatalny błąd: wewnętrzny błąd: błąd segmentacji"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "fatalny błąd: wewnętrzny błąd: przepełnienie stosu"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "brak już otwartego fd %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "nie można otworzyć zawczasu /dev/null dla fd %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "pusty argument dla opcji `-e/--source' został zignorowany"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: opcja `-W %s' nierozpoznana i zignorowana\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcja musi mieć argument -- %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "wartość PREC `%.*s' jest nieprawidłowa"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "wartość RNDMODE `%.*s' jest nieprawidłowa"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: otrzymano argument, który nie jest liczbą"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): ujemne wartości spowodują dziwne wyniki"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): ułamkowe wartości zostaną obcięte"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "cmpl(%Zd): ujemne wartości spowodują dziwne wyniki"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: otrzymano argument #%d, który nie jest liczbą"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: argument #%d ma nieprawidłową wartość %Rg, użyto 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: argument #%d ujemna wartość %Rg spowoduje dziwne wyniki"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: argument #%d ułamkowa wartość %Rg zostanie obcięta"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%s: argument #%d ujemna wartość %Zd spowoduje dziwne wyniki"
@@ -3295,24 +3316,24 @@ msgstr "%s: argument #%d ujemna wartość %Zd spowoduje dziwne wyniki"
msgid "cmd. line:"
msgstr "linia poleceń:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "backslash na końcu łańcucha"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "stary awk nie wspiera sekwencji ucieczki `\\%c'"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX nie zezwala na sekwencjÄ™ ucieczki `\\x'"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "brak liczb szesnastkowych w sekwencji ucieczki `\\x'"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3321,12 +3342,12 @@ msgstr ""
"szesnastkowa sekwencja ucieczki \\x%.*s %d znaków prawdopodobnie nie została "
"zinterpretowana jak tego oczekujesz"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "sekwencja ucieczki `\\%c' potraktowana jako zwykłe `%c'"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3354,12 +3375,12 @@ msgid "sending profile to standard error"
msgstr "wysyłanie profilu na standardowe wyjście diagnostyczne"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s blok(i)\n"
+"\t# Reguła(i)\n"
"\n"
#: profile.c:198
@@ -3376,11 +3397,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "wewnętrzny błąd: %s z zerowym vname"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "wewnętrzny błąd: builtin z fname null"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3389,12 +3410,12 @@ msgstr ""
"\t# Załadowane rozszerzenia (-l i/lub @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# profil programu gawk, utworzony %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3403,7 +3424,7 @@ msgstr ""
"\n"
"\t# Funkcje, spis alfabetyczny\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: nieznany typ przekierowania %d"
@@ -3413,80 +3434,116 @@ msgstr "redir2str: nieznany typ przekierowania %d"
msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr "komponent regexp `%.*s' powinien być prawdopodobnie `[%.*s]'"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Sukces"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Brak dopasowania"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Nieprawidłowe wyrażenie regularne"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Nieprawidłowy znak porównania"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Nieprawidłowa nazwa klasy znaku"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Końcowy znak backslash"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Nieprawidłowe odwołanie wsteczne"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "Niedopasowany znak [ lub [^"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "Niedopasowany znak ( lub \\("
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "Niedopasowany znak \\{"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Nieprawidłowa zawartość \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Nieprawidłowy koniec zakresu"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Pamięć wyczerpana"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Nieprawidłowe poprzedzające wyrażenie regularne"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Przedwczesny koniec wyrażenia regularnego"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Wyrażenie regularne jest zbyt duże"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr "Niedopasowany znak ) lub \\)"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Brak poprzedniego wyrażenia regularnego"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "funkcja `%s': nie można użyć nazwy funkcji jako nazwy parametru"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "nie można zdjąć głównego kontekstu"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "nieprawidłowy `getline var' wewnątrz reguły `%s'"
+
+#~ msgid "`getline' invalid inside `%s' rule"
+#~ msgstr "nieprawidłowy `getline' wewnątrz reguły `%s'"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr "nie dostarczono (znanego) protokołu w specjalnym pliku `%s'"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "specjalna nazwa pliku `%s' jest niekompletna"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "należy dostarczyć nazwę zdalnego hosta do `/inet'"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "należy dostarczyć numer zdalnego portu do `/inet'"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s blok(i)\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr "zasięg formy `[%c-%c]' jest zależny od lokalizacji"
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "próba użycia funkcji `%s' jako tablicy"
-
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "odwołanie do niezainicjowanego elementu `%s[\"%.*s\"]'"
@@ -3565,11 +3622,6 @@ msgstr "nie można zdjąć głównego kontekstu"
#~ msgid "function `%s' not defined"
#~ msgstr "funkcja `%s' nie została zdefiniowana"
-#~ msgid "non-redirected `getline' invalid inside `%s' rule"
-#~ msgstr ""
-#~ "komenda `getline' bez przekierowania jest nieprawidłowa wewnątrz reguły `"
-#~ "%s'"
-
#~ msgid "error reading input file `%s': %s"
#~ msgstr "błąd podczas czytania z pliku `%s': %s"
diff --git a/po/sv.gmo b/po/sv.gmo
index acc069b3..70c34bbb 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 50eb2736..5c53e5f8 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -10,8 +10,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk 4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-09-22 09:12+0200\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -39,9 +39,9 @@ msgstr "försök att använda skalärparametern â€%s†som en vektor"
msgid "attempt to use scalar `%s' as an array"
msgstr "försök att använda skalären â€%s†som en vektor"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "försök att använda vektorn â€%s†i skalärsammanhang"
@@ -100,413 +100,418 @@ msgstr ""
"asorti: det går inte att använda en delvektor av andra argumentet som första "
"argument"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "â€%s†är ogiltigt som ett funktionsnamn"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "jämförelsefunktionen â€%s†för sortering är inte definierad"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "%s-block måste ha en åtgärdsdel"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "varje regel måste ha ett mönster eller en åtgärdsdel"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr "gamla awk stöder inte flera â€BEGINâ€- eller â€ENDâ€-regler"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "â€%s“ är en inbyggd funktion, den kan inte definieras om"
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr "regexp-konstanten \"//\" ser ut som en C++-kommentar men är inte det"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr "regexp-konstanten \"/%s/\" ser ut som en C-kommentar men är inte det"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "upprepade case-värden i switch-sats: %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr "flera \"default\" upptäcktes i switch-sats"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr "\"break\" är inte tillåtet utanför en slinga eller switch"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "\"continue\" är inte tillåtet utanför en slinga"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "\"next\" använt i %s-åtgärd"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "\"nextfile\" använt i %s-åtgärd"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "\"return\" använd utanför funktion"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"ensamt \"print\" i BEGIN eller END-regel bör troligen vara 'print \"\"'"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "â€delete†är inte tillÃ¥tet med SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "â€delete†är inte tillÃ¥tet med FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "\"delete(array)\" är en icke portabel tawk-utökning"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "flerstegs dubbelriktade rör fungerar inte"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "reguljärt uttryck i högerledet av en tilldelning"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "reguljärt uttryck på vänster sida om en \"~\"- eller \"!~\"-operator"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "gamla awk stöder inte operatorn \"**\""
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "reguljärt uttryck i högerledet av en jämförelse"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "\"getline var\" är ogiltigt inuti \"%s\"-regel"
-
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
+#: awkgram.y:1411
+#, fuzzy, c-format
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr "\"getline är ogiltigt inuti \"%s\"-regel"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr "icke omdirigerad \"getline\" odefinierad inuti END-åtgärd"
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "gamla awk stöder inte flerdimensionella vektorer"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr "anrop av \"length\" utan parenteser är inte portabelt"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "indirekta funktionsanrop är en gawk-utökning"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr ""
"det går inte att använda specialvariabeln \"%s\" för indirekta fuktionsanrop"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr ""
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "ogiltig indexuttryck"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "varning: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "ödesdigert: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "oväntat nyradstecken eller slut på strängen"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "kan inte öppna källfilen \"%s\" för läsning (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "kan inte öppna det delade biblioteket â€%s†för läsning (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "okänd anledning"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "kan inte inkludera â€%s†och använda den som en programfil"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "inkluderade redan källfilen \"%s\""
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "inkluderade redan det delade biblioteket â€%sâ€"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include är en gawk-utökning"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "tomt filnamn efter @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load är en gawk-utökning"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "tomt filnamn efter @load"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "tom programtext på kommandoraden"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "kan inte läsa källfilen \"%s\" (%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "källfilen \"%s\" är tom"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "källfilen slutar inte med en ny rad"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr "oavslutat reguljärt uttryck slutar med \"\\\" i slutet av filen"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"%s: %d: tawk-modifierare för reguljära uttryck \"/.../%c\" fungerar inte i "
"gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"tawk-modifierare för reguljära uttryck \"/.../%c\" fungerar inte i gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "oavslutat reguljärt uttryck"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "oavslutat reguljärt uttryck i slutet av filen"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "Användning av \"\\ #...\" för radfortsättning är inte portabelt"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "sista tecknet på raden är inte ett omvänt snedstreck"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX tillåter inte operatorn \"**=\""
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "gamla awk stöder inte operatorn \"**=\""
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX tillåter inte operatorn \"**\""
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "gamla awk stöder inte operatorn \"**\""
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "operatorn \"^=\" stöds inte i gamla awk"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "operatorn \"^\" stöds inte i gamla awk"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "oavslutad sträng"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "ogiltigt tecken \"%c\" i uttryck"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "\"%s\" är en gawk-utökning"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX tillåter inte \"%s\""
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "\"%s\" stöds inte i gamla awk"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "\"goto\" anses skadlig!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "%d är ett ogiltigt antal argument för %s"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s: bokstavlig sträng som sista argument till ersättning har ingen effekt"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "%s: tredje argumentet är inte ett ändringsbart objekt"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: tredje argumentet är en gawk-utökning"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: andra argumentet är en gawk-utökning"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"användandet av dcgettext(_\"...\") är felaktigt: ta bort det inledande "
"understrykningstecknet"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr ""
"användandet av dcngettext(_\"...\") är felaktigt: ta bort det inledande "
"understrykningstecknet"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr "index: reguljäruttryck som andra argumentet är inte tillåtet"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "funktionen \"%s\": parametern \"%s\" överskuggar en global variabel"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "kunde inte öppna \"%s\" för skrivning (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "skickar variabellista till standard fel"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: misslyckades att stänga (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() anropad två gånger!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "det fanns överskuggade variabler."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "funktionsnamnet \"%s\" är definierat sedan tidigare"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "funktionen \"%s\": kan inte använda funktionsnamn som parameternamn"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr ""
"funktionen \"%s\": det går inte att använda specialvariabeln \"%s\" som en "
"funktionsparameter"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "funktionen \"%s\": parameter %d, \"%s\", är samma som parameter %d"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "funktionen \"%s\" anropad men aldrig definierad"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "funktionen \"%s\" definierad men aldrig anropad direkt"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "konstant reguljärt uttryck för parameter %d ger ett booleskt värde"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -515,23 +520,23 @@ msgstr ""
"funktionen \"%s\" anropad med blanktecken mellan namnet och \"(\",\n"
"eller använd som variabel eller vektor"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "försökte dividera med noll"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "försökte dividera med noll i \"%%\""
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr ""
"kan inte tilldela ett värde till uttryck som är en efterinkrementering av "
"ett fält"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "ogiltigt mål för tilldelning (op-kod %s)"
@@ -571,189 +576,199 @@ msgstr ""
msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr "fflush: \"%s\" är inte en öppen fil, rör eller koprocess"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: första argumentet är inte en sträng"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: andra argumentet är inte en sträng"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: fick ett ickenumeriskt argument"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: fick ett vektorargument"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "\"length(array)\" är en gawk-utökning"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: fick ett argument som inte är en sträng"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: fick ett ickenumeriskt argument"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: fick ett negativt argumentet %g"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "ödesdigert: måste använda \"count$\" på alla eller inga format"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "fältbredd ignoreras för \"%%\"-specificerare"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "precision ignoreras för \"%%\"-specificerare"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "fältbredd och precision ignoreras för \"%%\"-specificerare"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "ödesdigert: \"$\" tillåts inte i awk-format"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "ödesdigert: argumentantalet med \"$\" måste vara > 0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr "ödesdigert: argumentantalet %ld är större än antalet givna argument"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "ödesdigert: \"$\" tillåts inte efter en punkt i formatet"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"ödesdigert: inget \"$\" bifogat för positionsangiven fältbredd eller "
"precision"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "\"l\" är meningslös i awk-format, ignorerad"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "ödesdigert: \"l\" tillåts inte i POSIX awk-format"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "\"L\" är meningslös i awk-format, ignorerad"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "ödesdigert: \"L\" tillåts inte i POSIX awk-format"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "\"h\" är meningslös i awk-format, ignorerad"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "ödesdigert: \"h\" tillåts inte i POSIX awk-format"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: värdet %g är utanför \"%%%c\"-formatets giltiga intervall"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: värdet %g är utanför \"%%%c\"-formatets giltiga intervall"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: värdet %g är utanför \"%%%c\"-formatets giltiga intervall"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"ignorerar okänt formatspecifikationstecken \"%c\": inget argument konverterat"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "ödesdigert: för få argument för formatsträngen"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "^ tog slut här"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: formatspecificeraren har ingen kommandobokstav"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "för många argument för formatsträngen"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: inga argument"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: inga argument"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: fick ickenumeriskt argument"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: anropad med negativt argument %g"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: längden %g är inte >= 1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: längden %g är inte >= 0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: längden %g som inte är ett heltal kommer huggas av"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr "substr: längden %g är för stor för strängindexering, huggas av till %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: startindex %g är ogiltigt, använder 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr "substr: startindex %g som inte är ett heltal kommer huggas av"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: källsträngen är tom"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: startindex %g är bortom strängens slut"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -761,186 +776,192 @@ msgstr ""
"substr: längden %g vid startindex %g överskrider det första argumentets "
"längd (%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr "strftime: formatvärde i PROCINFO[\"strftime\"] har numerisk typ"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: fick ett ickenumeriskt andra argument"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr "strftime: andra argumentet mindre än 0 eller för stort för time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: fick ett första argument som inte är en sträng"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: fick en tom formatsträng"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: fick ett argument som inte är en sträng"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: åtminstone ett av värdena är utanför standardintervallet"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "funktionen \"system\" är inte tillåten i sandlådeläge"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: fick ett argument som inte är en sträng"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "referens till icke initierat fält \"$%d\""
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: fick ett argument som inte är en sträng"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: fick ett argument som inte är en sträng"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: fick ett ickenumeriskt första argument"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: fick ett ickenumeriskt andra argument"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: fick ett ickenumeriskt argument"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: fick ett ickenumeriskt argument"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: fick ett ickenumeriskt argument"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: tredje argumentet är inte en vektor"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: nollan i tredje argumentet behandlad som en etta"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: nollan i tredje argumentet behandlad som en etta"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: fick ett ickenumeriskt första argument"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: fick ett ickenumeriskt andra argument"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): negativa värden kommer ge konstiga resultat"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): flyttalsvärden kommer huggas av"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr "lshift(%f, %f): för stort skiftvärde kommer ge konstiga resultat"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: fick ett ickenumeriskt första argument"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: fick ett ickenumeriskt andra argument"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): negativa värden kommer ge konstiga resultat"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): flyttalsvärden kommer huggas av"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr "rshift(%f, %f): för stor skiftvärde kommer ge konstiga resultat"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: anropad med mindre än två argument"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: argument %d är inte numeriskt"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr "and: argument %d med negativt värde %g kommer ge konstiga resultat"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: anropad med färre än två argument"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: argument %d är inte numeriskt"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr "or: argument %d med negativt värde %g kommer ge konstiga resultat"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: anropad med färre än två argument"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: argument %d är inte numeriskt"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: argument %d med negativt värde %g kommer ge konstiga resultat"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: fick ett ickenumeriskt argument"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): negativt värde kommer ge konstiga resultat"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): flyttalsvärde kommer huggas av"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: \"%s\" är inte en giltig lokalkategori"
@@ -1238,40 +1259,49 @@ msgstr "up [N] - flytta N ramar uppåt i stacken."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch var - sätt en observationspunkt för en variabel."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - skriv ett spår över alla eller N innersta (yttersta om N < "
+"0) ramar."
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "fel: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "kan inte läsa kommando (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "kan inte läsa kommandot (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "ogiltigt tecken i kommandot"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "okänt kommando - \"%.*s\", försök med help"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "ogiltigt tecken"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "odefinierat kommando: %s\n"
@@ -1800,68 +1830,70 @@ msgid "`return' not allowed in current context; statement ignored"
msgstr ""
"â€return†är inte tillÃ¥tet i det aktuella sammanhanget; satsen ignoreras"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Ingen symbol â€%s†i aktuell omgivning"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "obalanserad ["
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "ogiltig teckenklass"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "syntaxen för teckenklass är [[:space:]], inte [:space:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "oavslutad \\-följd"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Ogiltigt innehåll i \\{\\}"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Reguljärt uttryck för stort"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "obalanserad ("
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "ingen syntax angiven"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr "obalanserad )"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "okänd nodtyp %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "okänd op-kod %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "op-kod %s är inte en operator eller ett nyckelord"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "buffertöverflöd i genflags2str"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1872,216 +1904,216 @@ msgstr ""
"\t# Funktionsanropsstack:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "\"IGNORECASE\" är en gawk-utökning"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "\"BINMODE\" är en gawk-utökning"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "BINMODE-värde \"%s\" är ogiltigt, behandlas som 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "felaktig \"%sFMT\"-specifikation \"%s\""
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "slår av \"--lint\" på grund av en tilldelning till \"LINT\""
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "referens till icke initierat argument \"%s\""
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "referens till icke initierad variabel \"%s\""
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "försök att fältreferera från ickenumeriskt värde"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "försök till fältreferens från en tom sträng"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "försök att komma åt fält nummer %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "referens till icke initierat fält \"$%ld\""
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "funktionen \"%s\" anropad med fler argument än vad som deklarerats"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: oväntad typ \"%s\""
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "försökte dividera med noll i \"/=\""
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "försökte dividera med noll i \"%%=\""
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "utökningar är inte tillåtna i sandlådeläge"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load är gawk-utökningar"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: mottog NULL-lib_name"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: kan inte öppna biblioteket â€%s†(%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: biblioteket â€%sâ€: definierar inte â€plugin_is_GPL_compatible†(%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: biblioteket â€%sâ€: kan inte anropa funktionen â€%s†(%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr ""
"load_ext: initieringsrutinen â€%2$s†i biblioteket â€%1$s†misslyckades\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "\"extension\" är en gawk-utökning"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "utökning: mottog NULL-lib_name"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "extension: kan inte öppna biblioteket â€%s†(%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"extension: biblioteket â€%sâ€: definierar inte â€plugin_is_GPL_compatible†(%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "extension: biblioteket â€%sâ€: kan inte anropa funktionen â€%s†(%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: funktionsnamn saknas"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: det gÃ¥r inte att definiera om funktionen â€%sâ€"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: funktionen â€%s†är redan definierad"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: funktionsnamnet â€%s†är definierat sedan tidigare"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"make_builtin: kan inte använda gawks inbyggda â€%s†som ett funktionsnamn"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: negativt argumentantal för funktionen \"%s\""
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: saknar funktionsnamn"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: ogiltigt tecken \"%c\" i funktionsnamnet \"%s\""
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: det går inte att definiera om funktionen \"%s\""
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: funktionen \"%s\" är redan definierad"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "extension: funktionsnamnet \"%s\" är definierat sedan tidigare"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
"extension: kan inte använda gawks inbyggda \"%s\" som ett funktionsnamn"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "funktionen \"%s\" definierades för att ta maximalt %d argument"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "funktionen \"%s\": argument %d saknas"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "funktionen \"%s\": argument %d: försök att använda skalär som vektor"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "funktionen \"%s\": argument %d: försök att använda vektor som skalär"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "dynamisk laddning av bibliotek stödjs inte"
@@ -2225,7 +2257,7 @@ msgstr "wait: anropad med för många argument"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: redigering på plats är redan aktivt"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin: förväntar sig 2 argument men anropad med %d"
@@ -2255,55 +2287,55 @@ msgstr "inplace_begin: â€%s†är inte en vanlig fil"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: mkstemp(â€%sâ€) misslyckades (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin: chmod misslyckades (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: dup(standard ut) misslyckades (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: dup2(%d, standard ut) misslyckades (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin: close(%d) misslyckades (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr "inplace_end: kan inte hämta 1:a argumentet som en filnamnssträng"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: redigering på plats är inte aktivt"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: dup2(%d, standard ut) misslyckades (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: close(%d) misslyckades (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: fsetpos(standard ut) misslyckades (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: link(â€%sâ€, â€%sâ€) misslyckades (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: rename(â€%sâ€, â€%sâ€) misslyckades (%s)"
@@ -2345,50 +2377,54 @@ msgstr "readfile: anropad med för många argument"
msgid "readfile: called with no arguments"
msgstr "readfile: anropad utan argument"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: anropad med för många argument"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: argument 0 är inte en sträng\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: argument 1 är inte en vektor\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: kunde inte platta till vektor\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: kunde inte släppa en tillplattad vektor\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: anropad med för många argument"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: argument 0 är inte en sträng\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: argument 1 är inte en vektor\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array misslyckades\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element misslyckades\n"
@@ -2417,90 +2453,90 @@ msgstr "sleep: argumentet är negativt"
msgid "sleep: not supported on this platform"
msgstr "sleep: stödjs inte på denna plattform"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "NF satt till ett negativt värde"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split: fjärde argumentet är en gawk-utökning"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split: fjärde argumentet är inte en vektor"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: andra argumentet är inte en vektor"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split: det går inte att använda samma vektor som andra och fjärde argument"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split: det går inte att använda en delvektor av andra argumentet som fjärde "
"argument"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split: det går inte att använda en delvektor av fjärde argumentet som andra "
"argument"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr "split: tom sträng som tredje argument är en gawk-utökning"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: fjärde argumentet är inte en vektor"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: andra argumentet är inte en vektor"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: tredje argumentet får inte vara tomt"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit: det går inte att använda samma vektor som andra och fjärde argument"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit: det går inte att använda en delvektor av andra argumentet som "
"fjärde argument"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit: det går inte att använda en delvektor av fjärde argumentet som "
"andra argument"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "\"FIELDWIDTHS\" är en gawk-utökning"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "ogiltigt FIELDWITHS-värde i närheten av \"%s\""
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "tom sträng som \"FS\" är en gawk-utökning"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "gamla awk stöder inte reguljära uttryck som värden på \"FS\""
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "\"FPAT\" är en gawk-utökning"
@@ -2516,20 +2552,20 @@ msgstr "node_to_awk_value: mottog null-nod"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: mottog null-värde"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: fick en null-vektor"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: mottog null-index"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: kunde inte konvertera index %d\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: kunde inte konvertera värdet %d\n"
@@ -2589,288 +2625,269 @@ msgstr "%s: flaggan \"-W %s\" tillåter inte något argument\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: flaggan \"-W %s\" kräver ett argument\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "kommandoradsargumentet \"%s\" är en katalog: hoppas över"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "kan inte öppna filen \"%s\" för läsning (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "stängning av fd %d (\"%s\") misslyckades (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "omdirigering är inte tillåten i sandlådeläge"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "uttrycket i \"%s\"-omdirigering har bara numeriskt värde"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "uttrycket för \"%s\"-omdirigering har en tom sträng som värde"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"filnamnet \"%s\" för \"%s\"-omdirigering kan vara resultatet av ett logiskt "
"uttryck"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "onödig blandning av \">\" och \">>\" för filen \"%.*s\""
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "kan inte öppna röret \"%s\" för utmatning (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "kan inte öppna röret \"%s\" för inmatning (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr "kan inte öppna tvåvägsröret \"%s\" för in-/utmatning (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "kan inte dirigera om från \"%s\" (%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "kan inte dirigera om till \"%s\" (%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"nådde systembegränsningen för öppna filer: börjar multiplexa fildeskriptorer"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "stängning av \"%s\" misslyckades (%s)"
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "för många rör eller indatafiler öppna"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: andra argumentet måste vara \"to\" eller \"from\""
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr "close: \"%.*s\" är inte en öppen fil, rör eller koprocess"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "stängning av omdirigering som aldrig öppnades"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: omdirigeringen \"%s\" öppnades inte med \"|&\", andra argumentet "
"ignorerat"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "felstatus (%d) från rörstängning av \"%s\" (%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "felstatus (%d) från filstängning av \"%s\" (%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "ingen explicit stängning av uttaget \"%s\" tillhandahållen"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "ingen explicit stängning av koprocessen \"%s\" tillhandahållen"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "ingen explicit stängning av röret \"%s\" tillhandahållen"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "ingen explicit stängning av filen \"%s\" tillhandahållen"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "fel vid skrivning till standard ut (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "fel vid skrivning till standard fel (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "rörspolning av \"%s\" misslyckades (%s)"
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "koprocesspolning av röret till \"%s\" misslyckades (%s)"
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "filspolning av \"%s\" misslyckades (%s)"
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "lokal port %s ogiltig i \"/inet\""
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "ogiltig information (%s, %s) för fjärrvärd och fjärrport"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr ""
-"inget (känt) protokoll tillhandahållet i det speciella filnamnet \"%s\""
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "speciellt filnamn \"%s\" är ofullständigt"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "måste tillhandahålla ett fjärrdatornamn till \"/inet\""
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "måste tillhandahålla en fjärrport till \"/inet\""
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "TCP/IP-kommunikation stöds inte"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "kunde inte öppna \"%s\", läge \"%s\""
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "stängning av huvudpty misslyckades (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "stängning av standard ut i barnet misslyckades (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr "flyttandet av slavpty till standard ut i barnet misslyckades (dup: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "stängning av standard in i barnet misslyckades (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr "flyttandet av slavpty till standard in i barnet misslyckades (dup: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "stängning av slavpty misslyckades (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr "flyttande av rör till standard ut i barnet misslyckades (dup: %s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr "flyttande av rör till standard in i barnet misslyckades (dup: %s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "återställande av standard ut i föräldraprocessen misslyckades\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "återställande av standard in i föräldraprocessen misslyckades\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "stängning av röret misslyckades (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "\"|&\" stöds inte"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "kan inte öppna röret \"%s\" (%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "kan inte skapa barnprocess för \"%s\" (fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: mottog NULL-pekare"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"inmatningstolken â€%s†stÃ¥r i konflikt med tidigare installerad "
"inmatningstolk â€%sâ€"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "inmatningstolken â€%s†misslyckades att öppna â€%sâ€"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: mottog NULL-pekare"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
@@ -2878,16 +2895,16 @@ msgstr ""
"utmatningsomslag â€%s†stÃ¥r i konflikt med tidigare installerat "
"utmatningsomslag â€%sâ€"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "utmatningsomslag â€%s†misslyckades att öppna â€%sâ€"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: mottog NULL-pekare"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2896,210 +2913,197 @@ msgstr ""
"tvÃ¥vägsprocessorn â€%s†stÃ¥r i konflikt med tidigare installerad "
"tvÃ¥vägsprocessor â€%sâ€"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "tvÃ¥vägsprocessorn â€%s†misslyckades att öppna â€%sâ€"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "datafilen \"%s\" är tom"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "kunde inte allokera mer indataminne"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "flerteckensvärdet av \"RS\" är en gawk-utökning"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "IPv6-kommunikation stöds inte"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "tomt argument till \"-e/--source\" ignorerat"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: flaggan \"-W %s\" okänd, ignorerad\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: flaggan kräver ett argument -- %c\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr "miljövariabeln \"POSIXLY_CORRECT\" satt: slår på \"--posix\""
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "\"--posix\" åsidosätter \"--traditional\""
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr "\"--posix\"/\"--traditional\" åsidosätter \"--non-decimal-data\""
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "att köra %s setuid root kan vara ett säkerhetsproblem"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "â€--posix†åsidosätter â€--character-as-bytesâ€"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "kan inte sätta binärläge på standard in (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "kan inte sätta binärläge på standard ut (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "kan inte sätta binärläge på standard fel (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "ingen programtext alls!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"Användning: %s [POSIX- eller GNU-stilsflaggor] -f progfil [--] fil ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr "Användning: %s [POSIX- eller GNU-stilsflaggor] %cprogram%c fil ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "POSIX-flaggor:\t\tGNU långa flaggor: (standard)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f progfil\t\t--file=progfil\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=fs\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr "\t-v var=värde\t\t--assign=var=värde\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Korta flaggor:\t\tGNU långa flaggor: (utökningar)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[fil]\t\t\t--dump-variables[=fil]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[fil]\t\t\t--debug[=fil]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e 'programtext'\t--source='programtext'\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E fil\t\t\t--exec=fil\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i inkluderingsfil\t--include=inkluderingsfil\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l bibliotek\t\t--load=bibliotek\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[fil]\t\t\t--pretty-print[=fil]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[fil]\t\t\t--profile[=fil]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr "\t-W nostalgia\t\t--nostalgia\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3108,7 +3112,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3122,7 +3126,7 @@ msgstr ""
"Rapportera synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3132,7 +3136,7 @@ msgstr ""
"Normalt läser det från standard in och skriver till standard ut.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3142,7 +3146,7 @@ msgstr ""
"\tgawk '{ sum += $1 }; END { print sum }' fil\n"
"\tgawk -F: '{ print $1 }' /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3161,7 +3165,7 @@ msgstr ""
"någon senare version.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3175,7 +3179,7 @@ msgstr ""
"General Public License för ytterligare information.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3183,114 +3187,132 @@ msgstr ""
"Du bör ha fått en kopia av GNU General Public License tillsammans\n"
"med detta program. Om inte, se http://www.gnu.org/licenses/.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft sätter inte FS till tab i POSIX-awk"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "okänt värde till fältspecifikation: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
"\n"
msgstr "%s: Argumentet \"%s\" till \"-v\" är inte på formatet \"var=värde\"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "\"%s\" är inte ett giltigt variabelnamn"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "\"%s\" är inte ett variabelnamn, letar efter filen \"%s=%s\""
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "kan inte använda gawks inbyggda \"%s\" som ett funktionsnamn"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "kan inte använda funktionen \"%s\" som variabelnamn"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "flyttalsundantag"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "ödesdigert fel: internt fel"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "ödesdigert fel: internt fel: segmenteringsfel"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "ödesdigert fel: internt fel: stackspill"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "ingen föröppnad fd %d"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "kunde inte föröppna /dev/null för fd %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "tomt argument till \"-e/--source\" ignorerat"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: flaggan \"-W %s\" okänd, ignorerad\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaggan kräver ett argument -- %c\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "PREC-värdet â€%.*s†är ogiltigt"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "RNDMODE-värdet â€%.*s†är ogiltigt"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: fick ett ickenumeriskt argument"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): negativt värde kommer ge konstiga resultat"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): flyttalsvärden kommer huggas av"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "cmpl(%Zd): negativt värde kommer ge konstiga resultat"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: fick ett ickenumeriskt argument nr. %d"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: argument nr. %d har ogiltigt värde %Rg, använder 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: argument nr. %d negativa värde %Rg kommer ge konstiga resultat"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: argument nr. %d flyttalsvärde %Rg kommer huggas av"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%s: argument nr. %d negativa värde %Zd kommer ge konstiga resultat"
@@ -3300,24 +3322,24 @@ msgstr "%s: argument nr. %d negativa värde %Zd kommer ge konstiga resultat"
msgid "cmd. line:"
msgstr "kommandorad:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "omvänt snedstreck i slutet av strängen"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "gamla awk stöder inte kontrollsekvensen \"\\%c\""
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX tillåter inte \"\\x\"-kontrollsekvenser"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "inga hexadecimala siffror i \"\\x\"-kontrollsekvenser"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3326,12 +3348,12 @@ msgstr ""
"hexkod \\x%.*s med %d tecken tolkas förmodligen inte på det sätt du "
"förväntar dig"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "kontrollsekvensen \"\\%c\" behandlad som bara \"%c\""
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3359,12 +3381,12 @@ msgid "sending profile to standard error"
msgstr "skickar profilen till standard fel"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s-block\n"
+"\t# Regel/regler\n"
"\n"
#: profile.c:198
@@ -3381,11 +3403,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "internt fel: %s med null vname"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "internt fel: inbyggd med tomt fname"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3394,12 +3416,12 @@ msgstr ""
"\t# Laddade utvidgningar (-l och/eller @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# gawkprofil, skapad %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3408,7 +3430,7 @@ msgstr ""
"\n"
"\t# Funktioner, listade alfabetiskt\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: okänd omdirigeringstyp %d"
@@ -3419,70 +3441,107 @@ msgid "regexp component `%.*s' should probably be `[%.*s]'"
msgstr ""
"komponenten \"%.*s\" i reguljäruttryck skall förmodligen vara \"[%.*s]\""
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Lyckades"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Misslyckades"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Ogiltigt reguljärt uttryck"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Ogiltigt kollationeringstecken"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Ogiltigt teckenklassnamn"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Eftersläpande omvänt snedstreck"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Ogiltig bakåtrerefens"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "Obalanserad [ eller [^"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "Obalanserad ( eller \\("
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "Obalanserad \\{"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Ogiltigt innehåll i \\{\\}"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Ogiltigt omfångsslut"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Minnet slut"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Ogiltigt föregående reguljärt uttryck"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "För tidigt slut på reguljärt uttryck"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Reguljärt uttryck för stort"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr "Obalanserad ) eller \\)"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Inget föregående reguljärt uttryck"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "funktionen \"%s\": kan inte använda funktionsnamn som parameternamn"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "kan inte poppa huvudsammanhang"
+
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "\"getline var\" är ogiltigt inuti \"%s\"-regel"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr ""
+#~ "inget (känt) protokoll tillhandahållet i det speciella filnamnet \"%s\""
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "speciellt filnamn \"%s\" är ofullständigt"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "måste tillhandahålla ett fjärrdatornamn till \"/inet\""
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "måste tillhandahålla en fjärrport till \"/inet\""
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s-block\n"
+#~ "\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index 10c710dc..3d4f023d 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index faa458a1..2bd6f429 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,8 +8,8 @@
msgid ""
msgstr ""
"Project-Id-Version: gawk-4.1.0b\n"
-"Report-Msgid-Bugs-To: arnold@skeeve.com\n"
-"POT-Creation-Date: 2014-04-08 19:23+0300\n"
+"Report-Msgid-Bugs-To: bug-gawk@gnu.org\n"
+"POT-Creation-Date: 2015-02-26 20:05+0200\n"
"PO-Revision-Date: 2014-01-16 14:52+0700\n"
"Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -40,9 +40,9 @@ msgstr "cố dùng tham số vô hướng “%s†như là mảng"
msgid "attempt to use scalar `%s' as an array"
msgstr "cố dùng “%s†vô hướng như là mảng"
-#: array.c:409 array.c:576 builtin.c:85 builtin.c:1615 builtin.c:1661
-#: builtin.c:1674 builtin.c:2102 builtin.c:2116 eval.c:1122 eval.c:1126
-#: eval.c:1531
+#: array.c:409 array.c:576 builtin.c:85 builtin.c:1606 builtin.c:1652
+#: builtin.c:1665 builtin.c:2092 builtin.c:2106 eval.c:1149 eval.c:1153
+#: eval.c:1558
#, c-format
msgid "attempt to use array `%s' in a scalar context"
msgstr "cố gắng dùng mảng “%s†trong một ngữ cảnh vô hướng"
@@ -101,422 +101,427 @@ msgstr ""
"asorti (một chương trình xắp xếp thứ tự): không thể sử dụng mảng con của "
"tham số thứ hai cho tham số thứ nhất"
-#: array.c:1314
+#: array.c:1313
#, c-format
msgid "`%s' is invalid as a function name"
msgstr "“%s†không phải là tên hàm hợp lệ"
-#: array.c:1318
+#: array.c:1317
#, c-format
msgid "sort comparison function `%s' is not defined"
msgstr "chÆ°a định nghÄ©a hàm so sánh xắp xếp “%sâ€"
-#: awkgram.y:233
+#: awkgram.y:226
#, c-format
msgid "%s blocks must have an action part"
msgstr "Má»i khối %s phải có má»™t phần kiểu hành Ä‘á»™ng"
-#: awkgram.y:236
+#: awkgram.y:229
msgid "each rule must have a pattern or an action part"
msgstr "Má»i quy tắc phải có má»™t mẫu hay phần kiểu hành Ä‘á»™ng"
-#: awkgram.y:325 awkgram.y:336
+#: awkgram.y:320 awkgram.y:331
msgid "old awk does not support multiple `BEGIN' or `END' rules"
msgstr ""
"awk cÅ© không há»— trợ nhiá»u quy tắc kiểu “BEGIN†(bắt đầu) hay “END†(kết thúc)"
-#: awkgram.y:373
+#: awkgram.y:368
#, c-format
msgid "`%s' is a built-in function, it cannot be redefined"
msgstr "“%s†là một hàm có sẵn nên nó không thể được định nghĩa lại."
-#: awkgram.y:419
+#: awkgram.y:417
msgid "regexp constant `//' looks like a C++ comment, but is not"
msgstr ""
"hằng biểu thức chính quy “//†trông giống như một chú thích C++, nhưng mà "
"không phải"
-#: awkgram.y:423
+#: awkgram.y:421
#, c-format
msgid "regexp constant `/%s/' looks like a C comment, but is not"
msgstr ""
"hằng biểu thức chính quy “/%s/†trông giống như một chú thích C, nhưng mà "
"không phải"
-#: awkgram.y:515
+#: awkgram.y:513
#, c-format
msgid "duplicate case values in switch body: %s"
msgstr "gặp giá trị case trùng trong thân chuyển đổi (switch body): %s"
-#: awkgram.y:536
+#: awkgram.y:534
msgid "duplicate `default' detected in switch body"
msgstr ""
"đã phát hiện trùng “default†trong thân cấu trúc Ä‘iá»u khiển chá»n lá»±a (switch)"
-#: awkgram.y:796 awkgram.y:3723
+#: awkgram.y:794 awkgram.y:3751
msgid "`break' is not allowed outside a loop or switch"
msgstr ""
"không cho phép “break†(ngắt) nằm ở ngoại vòng lặp hay cấu trúc chá»n lá»±a"
-#: awkgram.y:805 awkgram.y:3715
+#: awkgram.y:803 awkgram.y:3743
msgid "`continue' is not allowed outside a loop"
msgstr "không cho phép “continue†(tiếp tục) ở ngoài một vòng lặp"
-#: awkgram.y:815
+#: awkgram.y:813
#, c-format
msgid "`next' used in %s action"
msgstr "“next†(kế tiếp) được dùng trong hành động %s"
-#: awkgram.y:824
+#: awkgram.y:822
#, c-format
msgid "`nextfile' used in %s action"
msgstr "“nextfile†(tập tin kế tiếp) được dùng trong hành động %s"
-#: awkgram.y:848
+#: awkgram.y:846
msgid "`return' used outside function context"
msgstr "“return†(trở vá») được dùng ở ngoại ngữ cảnh hàm"
-#: awkgram.y:922
+#: awkgram.y:920
msgid "plain `print' in BEGIN or END rule should probably be `print \"\"'"
msgstr ""
"“print†(in) thÆ°á»ng trong quy tắc “BEGIN†(bắt đầu) hay “END†(kết thúc) gần "
"nhÆ° chắc chắn nên là “printâ€â€â€"
-#: awkgram.y:988 awkgram.y:1037
+#: awkgram.y:986 awkgram.y:1035
msgid "`delete' is not allowed with SYMTAB"
msgstr "“delete†không được phép với SYMTAB"
-#: awkgram.y:990 awkgram.y:1039
+#: awkgram.y:988 awkgram.y:1037
msgid "`delete' is not allowed with FUNCTAB"
msgstr "“delete†không được phép với FUNCTAB"
-#: awkgram.y:1024 awkgram.y:1028
+#: awkgram.y:1022 awkgram.y:1026
msgid "`delete(array)' is a non-portable tawk extension"
msgstr "“delete array†(xoá mảng) là phần mở rộng gawk không khả chuyển"
-#: awkgram.y:1149
+#: awkgram.y:1147
msgid "multistage two-way pipelines don't work"
msgstr "Ä‘Æ°á»ng ống dẫn hai chiếu Ä‘a giai Ä‘oạn không phải hoạt Ä‘á»™ng được"
-#: awkgram.y:1264
+#: awkgram.y:1262
msgid "regular expression on right of assignment"
msgstr "biểu thức chính quy nằm bên phải phép gán"
-#: awkgram.y:1275
+#: awkgram.y:1273
msgid "regular expression on left of `~' or `!~' operator"
msgstr "biểu thức chính quy nằm bên trái toán tá»­ “~†hay “!~â€"
-#: awkgram.y:1291 awkgram.y:1442
+#: awkgram.y:1289 awkgram.y:1431
msgid "old awk does not support the keyword `in' except after `for'"
msgstr "awk cÅ© không há»— trợ từ khoá “inâ€, trừ khi nằm sau “forâ€"
-#: awkgram.y:1301
+#: awkgram.y:1299
msgid "regular expression on right of comparison"
msgstr "biểu thức chính quy nằm bên phải sự so sánh"
-#: awkgram.y:1417
-#, c-format
-msgid "`getline var' invalid inside `%s' rule"
-msgstr "“getline var†không hợp lệ bên trong quy tắc “%sâ€"
-
-#: awkgram.y:1420
-#, c-format
-msgid "`getline' invalid inside `%s' rule"
+#: awkgram.y:1411
+#, fuzzy, c-format
+msgid "non-redirected `getline' invalid inside `%s' rule"
msgstr "“getline†không hợp lệ trong quy tắc “%sâ€"
-#: awkgram.y:1425
+#: awkgram.y:1414
msgid "non-redirected `getline' undefined inside END action"
msgstr ""
"trong hành động “END†(kết thúc) có “getline†(lấy dòng) không được chuyển "
"hướng lại và chưa được định nghĩa."
-#: awkgram.y:1444
+#: awkgram.y:1433
msgid "old awk does not support multidimensional arrays"
msgstr "awk cÅ© không há»— trợ mảng Ä‘a chiá»u"
-#: awkgram.y:1541
+#: awkgram.y:1530
msgid "call of `length' without parentheses is not portable"
msgstr ""
"lá»i gá»i “length†(Ä‘á»™ dài) mà không có dấu ngoặc Ä‘Æ¡n là không tÆ°Æ¡ng thích "
"trên các hệ thống khác"
-#: awkgram.y:1607
+#: awkgram.y:1596
msgid "indirect function calls are a gawk extension"
msgstr "cuá»™c gá»i hàm gián tiếp là má»™t phần mở rá»™ng gawk"
-#: awkgram.y:1620
+#: awkgram.y:1609
#, c-format
msgid "can not use special variable `%s' for indirect function call"
msgstr "không thể dùng biến đặc biệt “%s†cho cú gá»i hàm gián tiếp"
-#: awkgram.y:1698
+#: awkgram.y:1635
+#, fuzzy, c-format
+msgid "attempt to use non-function `%s' in function call"
+msgstr "cố gắng dùng hàm “%s†như mảng"
+
+#: awkgram.y:1699
msgid "invalid subscript expression"
msgstr "biểu thức in thấp không hợp lệ"
-#: awkgram.y:2048 awkgram.y:2068 gawkapi.c:206 gawkapi.c:224 msg.c:126
+#: awkgram.y:2045 awkgram.y:2065 gawkapi.c:206 gawkapi.c:224 msg.c:126
msgid "warning: "
msgstr "cảnh báo: "
-#: awkgram.y:2066 gawkapi.c:192 gawkapi.c:221 msg.c:158
+#: awkgram.y:2063 gawkapi.c:192 gawkapi.c:221 msg.c:158
msgid "fatal: "
msgstr "lá»—i nghiêm trá»ng: "
-#: awkgram.y:2116
+#: awkgram.y:2113
msgid "unexpected newline or end of string"
msgstr "gặp dòng má»›i hay kết thúc chuá»—i bất ngá»"
-#: awkgram.y:2383 awkgram.y:2459 awkgram.y:2682 debug.c:523 debug.c:539
+#: awkgram.y:2392 awkgram.y:2468 awkgram.y:2691 debug.c:523 debug.c:539
#: debug.c:2812 debug.c:5055
#, c-format
msgid "can't open source file `%s' for reading (%s)"
msgstr "không thể mở tập tin nguồn “%s†để Ä‘á»c (%s)"
-#: awkgram.y:2384 awkgram.y:2509
+#: awkgram.y:2393 awkgram.y:2518
#, c-format
msgid "can't open shared library `%s' for reading (%s)"
msgstr "không thể mở tập thÆ° viện chia sẻ “%s†để Ä‘á»c (%s)"
-#: awkgram.y:2386 awkgram.y:2460 awkgram.y:2510 builtin.c:135 debug.c:5206
+#: awkgram.y:2395 awkgram.y:2469 awkgram.y:2519 builtin.c:135 debug.c:5206
msgid "reason unknown"
msgstr "không rõ lý do"
-#: awkgram.y:2395 awkgram.y:2419
+#: awkgram.y:2404 awkgram.y:2428
#, c-format
msgid "can't include `%s' and use it as a program file"
msgstr "không thể bao gồm “%s†và dùng nó như là tập tin chương trình"
-#: awkgram.y:2408
+#: awkgram.y:2417
#, c-format
msgid "already included source file `%s'"
msgstr "đã sẵn bao gồm tập tin nguồn “%sâ€"
-#: awkgram.y:2409
+#: awkgram.y:2418
#, c-format
msgid "already loaded shared library `%s'"
msgstr "thư viện dùng chung “%s†đã được sẵn được tải rồi"
-#: awkgram.y:2444
+#: awkgram.y:2453
msgid "@include is a gawk extension"
msgstr "@include là phần mở rộng của gawk"
-#: awkgram.y:2450
+#: awkgram.y:2459
msgid "empty filename after @include"
msgstr "tập tin trống sau @include"
-#: awkgram.y:2494
+#: awkgram.y:2503
msgid "@load is a gawk extension"
msgstr "@load là một phần mở rộng gawk"
-#: awkgram.y:2500
+#: awkgram.y:2509
msgid "empty filename after @load"
msgstr "tên tập tin trống sau @load"
-#: awkgram.y:2634
+#: awkgram.y:2643
msgid "empty program text on command line"
msgstr "gặp đoạn chữ chương trình rỗng nằm trên dòng lệnh"
-#: awkgram.y:2749
+#: awkgram.y:2758
#, c-format
msgid "can't read sourcefile `%s' (%s)"
msgstr "không thể Ä‘á»c tập tin nguồn “%s†(%s)"
-#: awkgram.y:2760
+#: awkgram.y:2769
#, c-format
msgid "source file `%s' is empty"
msgstr "tập tin nguồn “%s†là rỗng"
-#: awkgram.y:2937
+#: awkgram.y:2828
+#, c-format
+msgid "PEBKAC error: invalid character '\\%03o' in source code"
+msgstr ""
+
+#: awkgram.y:2959
msgid "source file does not end in newline"
msgstr "tập tin nguồn không kết thúc với một dòng mới"
-#: awkgram.y:3042
+#: awkgram.y:3062
msgid "unterminated regexp ends with `\\' at end of file"
msgstr ""
"biểu thức chính quy chưa được chấm dứt kết thúc với “\\†tại kết thúc của "
"tập tin"
-#: awkgram.y:3066
+#: awkgram.y:3089
#, c-format
msgid "%s: %d: tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"%s: %d: bộ sửa đổi biểu thức chính quy tawk “/.../%c†không hoạt động được "
"trong gawk"
-#: awkgram.y:3070
+#: awkgram.y:3093
#, c-format
msgid "tawk regex modifier `/.../%c' doesn't work in gawk"
msgstr ""
"bộ sửa đổi biểu thức chính quy tawk “/.../%c†không hoạt động được trong gawk"
-#: awkgram.y:3077
+#: awkgram.y:3100
msgid "unterminated regexp"
msgstr "biểu thức chính quy chưa được chấm dứt"
-#: awkgram.y:3081
+#: awkgram.y:3104
msgid "unterminated regexp at end of file"
msgstr "biểu thức chính quy chưa được chấm dứt nằm tại kết thúc của tập tin"
-#: awkgram.y:3140
+#: awkgram.y:3162
msgid "use of `\\ #...' line continuation is not portable"
msgstr "không thể mang khả năng dùng “\\#...†để tiếp tục dòng"
-#: awkgram.y:3156
+#: awkgram.y:3178
msgid "backslash not last character on line"
msgstr "dấu gạch ngược không phải là ký tự cuối cùng nằm trên dòng"
-#: awkgram.y:3217
+#: awkgram.y:3239
msgid "POSIX does not allow operator `**='"
msgstr "POSIX không cho phép toán tá»­ “**=â€"
-#: awkgram.y:3219
+#: awkgram.y:3241
msgid "old awk does not support operator `**='"
msgstr "awk cÅ© không há»— trợ toán tá»­ “**=â€"
-#: awkgram.y:3228
+#: awkgram.y:3250
msgid "POSIX does not allow operator `**'"
msgstr "POSIX không cho phép toán tá»­ “**â€"
-#: awkgram.y:3230
+#: awkgram.y:3252
msgid "old awk does not support operator `**'"
msgstr "awk cÅ© không há»— trợ toán tá»­ “**â€"
-#: awkgram.y:3265
+#: awkgram.y:3287
msgid "operator `^=' is not supported in old awk"
msgstr "awk cÅ© không há»— trợ toán tá»­ “^=â€"
-#: awkgram.y:3273
+#: awkgram.y:3295
msgid "operator `^' is not supported in old awk"
msgstr "awk cÅ© không há»— trợ toán tá»­ “^â€"
-#: awkgram.y:3366 awkgram.y:3382 command.y:1178
+#: awkgram.y:3392 awkgram.y:3410 command.y:1180
msgid "unterminated string"
msgstr "chuỗi không được chấm dứt"
-#: awkgram.y:3603
+#: awkgram.y:3631
#, c-format
msgid "invalid char '%c' in expression"
msgstr "có ký tự không hợp lệ “%c†nằm trong biểu thức"
-#: awkgram.y:3650
+#: awkgram.y:3678
#, c-format
msgid "`%s' is a gawk extension"
msgstr "“%s†là một phần mở rộng gawk"
-#: awkgram.y:3655
+#: awkgram.y:3683
#, c-format
msgid "POSIX does not allow `%s'"
msgstr "POSIX không cho phép “%sâ€"
-#: awkgram.y:3663
+#: awkgram.y:3691
#, c-format
msgid "`%s' is not supported in old awk"
msgstr "awk kiểu cÅ© không há»— trợ “%sâ€"
-#: awkgram.y:3753
+#: awkgram.y:3781
msgid "`goto' considered harmful!\n"
msgstr "“goto†được xem là có hại!\n"
-#: awkgram.y:3787
+#: awkgram.y:3815
#, c-format
msgid "%d is invalid as number of arguments for %s"
msgstr "“%d†không hợp lệ khi là số đối số cho “%sâ€"
-#: awkgram.y:3822
+#: awkgram.y:3850
#, c-format
msgid "%s: string literal as last arg of substitute has no effect"
msgstr ""
"%s: khi đối số cuối cùng của sự thay thế, hằng mã nguồn chuỗi không có tác "
"dụng"
-#: awkgram.y:3827
+#: awkgram.y:3855
#, c-format
msgid "%s third parameter is not a changeable object"
msgstr "tham số thứ ba %s không phải là một đối tượng có thể thay đổi"
-#: awkgram.y:3910 awkgram.y:3913
+#: awkgram.y:3938 awkgram.y:3941
msgid "match: third argument is a gawk extension"
msgstr "match: (khớp) đối số thứ ba là phần mở rộng gawk"
-#: awkgram.y:3967 awkgram.y:3970
+#: awkgram.y:3995 awkgram.y:3998
msgid "close: second argument is a gawk extension"
msgstr "close: (đóng) đối số thứ hai là phần mở rộng gawk"
-#: awkgram.y:3982
+#: awkgram.y:4010
msgid "use of dcgettext(_\"...\") is incorrect: remove leading underscore"
msgstr "dùng “dcgettext(_\"...\")†không đúng: hãy gỡ bỠgạch dưới nằm trước"
-#: awkgram.y:3997
+#: awkgram.y:4025
msgid "use of dcngettext(_\"...\") is incorrect: remove leading underscore"
msgstr "dùng “dcgettext(_\"...\")†không đúng: hãy gỡ bỠgạch dưới nằm trước"
-#: awkgram.y:4016
+#: awkgram.y:4044
msgid "index: regexp constant as second argument is not allowed"
msgstr ""
"index: (chỉ mục) không cho phép hằng biểu thức chính quy làm đối số thứ hai"
-#: awkgram.y:4069
+#: awkgram.y:4097
#, c-format
msgid "function `%s': parameter `%s' shadows global variable"
msgstr "hàm “%sâ€: tham số “%s†che biến toàn cục"
-#: awkgram.y:4126 debug.c:4041 debug.c:4084 debug.c:5204
+#: awkgram.y:4154 debug.c:4041 debug.c:4084 debug.c:5204
#, c-format
msgid "could not open `%s' for writing (%s)"
msgstr "không mở được “%s†để ghi (%s)"
-#: awkgram.y:4127
+#: awkgram.y:4155
msgid "sending variable list to standard error"
msgstr "đang gởi danh sách biến tới thiết bị lỗi chuẩn"
-#: awkgram.y:4135
+#: awkgram.y:4163
#, c-format
msgid "%s: close failed (%s)"
msgstr "%s: gặp lỗi khi đóng (%s)"
-#: awkgram.y:4160
+#: awkgram.y:4188
msgid "shadow_funcs() called twice!"
msgstr "shadow_funcs() (hàm bóng) được gá»i hai lần!"
-#: awkgram.y:4168
+#: awkgram.y:4196
msgid "there were shadowed variables."
msgstr "có biến bị bóng."
-#: awkgram.y:4239
+#: awkgram.y:4267
#, c-format
msgid "function name `%s' previously defined"
msgstr "tên hàm “%s†trước đây đã được định nghĩa rồi"
-#: awkgram.y:4285
+#: awkgram.y:4313
#, c-format
msgid "function `%s': can't use function name as parameter name"
msgstr "hàm “%sâ€: không thể dùng tên hàm nhÆ° là tên tham số"
-#: awkgram.y:4288
+#: awkgram.y:4316
#, c-format
msgid "function `%s': can't use special variable `%s' as a function parameter"
msgstr "hàm “%sâ€: không thể dùng biến đặc biệt “%s†nhÆ° là tham số hàm"
-#: awkgram.y:4296
+#: awkgram.y:4324
#, c-format
msgid "function `%s': parameter #%d, `%s', duplicates parameter #%d"
msgstr "hàm “%sâ€: tham số “#%dâ€, “%sâ€, nhân đôi tham số “#%dâ€"
-#: awkgram.y:4383 awkgram.y:4389
+#: awkgram.y:4411 awkgram.y:4417
#, c-format
msgid "function `%s' called but never defined"
msgstr "hàm “%s†được gá»i nhÆ°ng mà chÆ°a định nghÄ©a"
-#: awkgram.y:4393
+#: awkgram.y:4421
#, c-format
msgid "function `%s' defined but never called directly"
msgstr "hàm “%s†được định nghÄ©a nhÆ°ng mà chÆ°a được gá»i trá»±c tiếp bao giá»"
-#: awkgram.y:4425
+#: awkgram.y:4453
#, c-format
msgid "regexp constant for parameter #%d yields boolean value"
msgstr "hằng biểu thức chính quy cho tham số “#%d†làm giá trị luận lý (bun)"
-#: awkgram.y:4484
+#: awkgram.y:4468
#, c-format
msgid ""
"function `%s' called with space between name and `(',\n"
@@ -525,21 +530,21 @@ msgstr ""
"hàm “%s†được gá»i vá»›i dấu cách nằm giữa tên và “(â€\n"
"hoặc được dùng như là biến hay mảng"
-#: awkgram.y:4720
+#: awkgram.y:4674
msgid "division by zero attempted"
msgstr "gặp phép chia cho số không"
-#: awkgram.y:4729
+#: awkgram.y:4683
#, c-format
msgid "division by zero attempted in `%%'"
msgstr "gặp phép chia cho số không trong “%%â€"
-#: awkgram.y:5049
+#: awkgram.y:5003
msgid ""
"cannot assign a value to the result of a field post-increment expression"
msgstr "không thể gán giá trị cho kết quả của biểu thức trÆ°á»ng tăng-trÆ°á»›c"
-#: awkgram.y:5052
+#: awkgram.y:5006
#, c-format
msgid "invalid target of assignment (opcode %s)"
msgstr "gán Ä‘ich không hợp lệ (mã thi hành “%sâ€)"
@@ -582,194 +587,204 @@ msgid "fflush: `%s' is not an open file, pipe or co-process"
msgstr ""
"fflush: “%s†không phải là tập tin, ống dẫn hay đồng tiến trình được mở"
-#: builtin.c:362
+#: builtin.c:351
msgid "index: received non-string first argument"
msgstr "index: (chỉ số) đã nhận đối số thứ nhất không phải là chuỗi"
-#: builtin.c:364
+#: builtin.c:353
msgid "index: received non-string second argument"
msgstr "index: (chỉ số) đã nhận đối số thứ hai không phải là chuỗi"
-#: builtin.c:488 mpfr.c:757
+#: builtin.c:466 mpfr.c:777
msgid "int: received non-numeric argument"
msgstr "int: (số nguyên?) đã nhận đối số không phải thuộc số"
-#: builtin.c:525
+#: builtin.c:503
msgid "length: received array argument"
msgstr "length: (chiá»u dài) đã nhận mảng đối số"
-#: builtin.c:528
+#: builtin.c:506
msgid "`length(array)' is a gawk extension"
msgstr "“length(array)†(độ dài mảng) là một phần mở rộng gawk"
-#: builtin.c:544
+#: builtin.c:525
msgid "length: received non-string argument"
msgstr "length: (chiá»u dài) đã nhận đối số không phải chuá»—i"
-#: builtin.c:575
+#: builtin.c:554
msgid "log: received non-numeric argument"
msgstr "log: (nhật ký) đã nhận đối số không phải thuộc số"
-#: builtin.c:578
+#: builtin.c:557
#, c-format
msgid "log: received negative argument %g"
msgstr "log: (nhật ký) đã nhận đối số âm “%gâ€"
-#: builtin.c:776 builtin.c:781
+#: builtin.c:755 builtin.c:760 builtin.c:911
msgid "fatal: must use `count$' on all formats or none"
msgstr "lá»—i nghiêm trá»ng: phải dùng “count$†vá»›i má»i dạng thức hay không gì cả"
-#: builtin.c:851
+#: builtin.c:830
#, c-format
msgid "field width is ignored for `%%' specifier"
msgstr "chiá»u rá»™ng trÆ°á»ng bị bá» qua đối vá»›i bá»™ chỉ định “%%â€"
-#: builtin.c:853
+#: builtin.c:832
#, c-format
msgid "precision is ignored for `%%' specifier"
msgstr "Ä‘á»™ chính xác bị bá» qua đối vá»›i bá»™ chỉ định “%%â€"
-#: builtin.c:855
+#: builtin.c:834
#, c-format
msgid "field width and precision are ignored for `%%' specifier"
msgstr "chiá»u rá»™ng trÆ°á»ng và Ä‘á»™ chính xác bị bá» qua đối vá»›i bá»™ chỉ định “%%â€"
-#: builtin.c:906
+#: builtin.c:885
msgid "fatal: `$' is not permitted in awk formats"
msgstr "lá»—i nghiêm trá»ng: không cho phép “$†trong định dạng awk"
-#: builtin.c:915
+#: builtin.c:894
msgid "fatal: arg count with `$' must be > 0"
msgstr "lá»—i nghiêm trá»ng: số lượng đối số vá»›i “$†phải >0"
-#: builtin.c:919
+#: builtin.c:898
#, c-format
msgid "fatal: arg count %ld greater than total number of supplied arguments"
msgstr ""
"lá»—i nghiêm trá»ng: số lượng đối số %ld lá»›n hÆ¡n tổng số đối số được cung cấp"
-#: builtin.c:923
+#: builtin.c:902
msgid "fatal: `$' not permitted after period in format"
msgstr "lá»—i nghiêm trá»ng: không cho phép “$†nằm sau dấu chấm trong định dạng"
-#: builtin.c:939
+#: builtin.c:921
msgid "fatal: no `$' supplied for positional field width or precision"
msgstr ""
"lá»—i nghiêm trá»ng: chÆ°a cung cấp “$†cho Ä‘á»™ rá»™ng trÆ°á»ng thuá»™c vị trí hay cho "
"độ chính xác"
-#: builtin.c:1009
+#: builtin.c:991
msgid "`l' is meaningless in awk formats; ignored"
msgstr "chữ “l†không có nghĩa trong định dạng awk nên bị bỠqua"
-#: builtin.c:1013
+#: builtin.c:995
msgid "fatal: `l' is not permitted in POSIX awk formats"
msgstr "lá»—i nghiêm trá»ng: không cho phép chữ “l†nằm trong định dạng awk POSIX"
-#: builtin.c:1026
+#: builtin.c:1008
msgid "`L' is meaningless in awk formats; ignored"
msgstr "chữ “L†không có nghĩa trong định dạng awk nên bị bỠqua"
-#: builtin.c:1030
+#: builtin.c:1012
msgid "fatal: `L' is not permitted in POSIX awk formats"
msgstr "lá»—i nghiêm trá»ng: không cho phép chữ “L†nằm trong định dạng awk POSIX"
-#: builtin.c:1043
+#: builtin.c:1025
msgid "`h' is meaningless in awk formats; ignored"
msgstr "chữ “h†không có nghĩa trong định dạng awk nên bị bỠqua"
-#: builtin.c:1047
+#: builtin.c:1029
msgid "fatal: `h' is not permitted in POSIX awk formats"
msgstr "lá»—i nghiêm trá»ng: không cho phép chữ “h†nằm trong định dạng awk POSIX"
-#: builtin.c:1463
+#: builtin.c:1055
+#, fuzzy, c-format
+msgid "[s]printf: value %g is too big for %%c format"
+msgstr "[s]printf: giá trị %g ở ngoại phạm vi cho dạng thức “%%%câ€"
+
+#: builtin.c:1068
+#, fuzzy, c-format
+msgid "[s]printf: value %g is not a valid wide character"
+msgstr "[s]printf: giá trị %g ở ngoại phạm vi cho dạng thức “%%%câ€"
+
+#: builtin.c:1454
#, c-format
msgid "[s]printf: value %g is out of range for `%%%c' format"
msgstr "[s]printf: giá trị %g ở ngoại phạm vi cho dạng thức “%%%câ€"
-#: builtin.c:1561
+#: builtin.c:1552
#, c-format
msgid "ignoring unknown format specifier character `%c': no argument converted"
msgstr ""
"Ä‘ang bá» qua ký tá»± ghi rõ định dạng không rõ “%câ€: không có đối số được "
"chuyển đổi"
-#: builtin.c:1566
+#: builtin.c:1557
msgid "fatal: not enough arguments to satisfy format string"
msgstr "lá»—i nghiêm trá»ng: chÆ°a có đủ đối số để đáp ứng chuá»—i định dạng"
-#: builtin.c:1568
+#: builtin.c:1559
msgid "^ ran out for this one"
msgstr "bị hết “^†cho cái này"
-#: builtin.c:1575
+#: builtin.c:1566
msgid "[s]printf: format specifier does not have control letter"
msgstr "[s]printf: chỉ định định dạng không có ký hiệu Ä‘iá»u khiển"
-#: builtin.c:1578
+#: builtin.c:1569
msgid "too many arguments supplied for format string"
msgstr "quá nhiá»u đối số được cung cấp cho chuá»—i định dạng"
-#: builtin.c:1634
+#: builtin.c:1625
msgid "sprintf: no arguments"
msgstr "sprintf: không có đối số"
-#: builtin.c:1657 builtin.c:1668
+#: builtin.c:1648 builtin.c:1659
msgid "printf: no arguments"
msgstr "printf: không có đối số"
-#: builtin.c:1711
+#: builtin.c:1702
msgid "sqrt: received non-numeric argument"
msgstr "sqrt: (căn bậc hai) đã nhận đối số không phải thuộc số"
-#: builtin.c:1715
+#: builtin.c:1706
#, c-format
msgid "sqrt: called with negative argument %g"
msgstr "sqrt: (căn bậc hai) đã gá»i vá»›i đối số âm “%gâ€"
-#: builtin.c:1746
+#: builtin.c:1737
#, c-format
msgid "substr: length %g is not >= 1"
msgstr "substr: (chuỗi con) độ dài %g không phải ≥1"
-#: builtin.c:1748
+#: builtin.c:1739
#, c-format
msgid "substr: length %g is not >= 0"
msgstr "substr: (chuỗi con) độ dài %g không phải ≥0"
-#: builtin.c:1755
+#: builtin.c:1753
#, c-format
msgid "substr: non-integer length %g will be truncated"
msgstr "substr: (chuá»—i con) sẽ cắt xén Ä‘á»™ dài không phải số nguyên “%gâ€"
-#: builtin.c:1760
+#: builtin.c:1758
#, c-format
msgid "substr: length %g too big for string indexing, truncating to %g"
msgstr ""
"substr: (chuỗi con) độ dài %g là quá lớn cho chỉ số chuỗi, nên xén ngắn "
"thành %g"
-#: builtin.c:1772
+#: builtin.c:1770
#, c-format
msgid "substr: start index %g is invalid, using 1"
msgstr "substr: (chuỗi con) chỉ số đầu “%g†không hợp lệ nên dùng 1"
-#: builtin.c:1777
+#: builtin.c:1775
#, c-format
msgid "substr: non-integer start index %g will be truncated"
msgstr ""
"substr: (chuỗi con) chỉ số đầu không phải số nguyên “%g†sẽ bị cắt ngắn"
-#: builtin.c:1802
+#: builtin.c:1798
msgid "substr: source string is zero length"
msgstr "substr: (chuỗi con) chuỗi nguồn có độ dài số không"
-#: builtin.c:1818
+#: builtin.c:1812
#, c-format
msgid "substr: start index %g is past end of string"
msgstr "substr: (chuỗi con) chỉ số đầu %g nằm sau kết thúc của chuỗi"
-#: builtin.c:1826
+#: builtin.c:1820
#, c-format
msgid ""
"substr: length %g at start index %g exceeds length of first argument (%lu)"
@@ -777,191 +792,197 @@ msgstr ""
"substr: (chuỗi con) độ dài %g chỉ số đầu %g vượt quá độ dài của đối số đầu "
"(%lu)"
-#: builtin.c:1900
+#: builtin.c:1890
msgid "strftime: format value in PROCINFO[\"strftime\"] has numeric type"
msgstr ""
"strftime: giá trị định dạng trong PROCINFO[â€strftimeâ€] phải thuá»™c kiểu số"
-#: builtin.c:1923
+#: builtin.c:1913
msgid "strftime: received non-numeric second argument"
msgstr "strftime: đã nhận đối số thứ hai khác thuộc số"
-#: builtin.c:1927
+#: builtin.c:1917
msgid "strftime: second argument less than 0 or too big for time_t"
msgstr "strftime: tham số thứ hai nhỠhơn 0 hay quá lớn dành cho time_t"
-#: builtin.c:1934
+#: builtin.c:1924
msgid "strftime: received non-string first argument"
msgstr "strftime: đã nhận đối số thứ nhất khác chuỗi"
-#: builtin.c:1941
+#: builtin.c:1931
msgid "strftime: received empty format string"
msgstr "strftime: đã nhận chuỗi định dạng rỗng"
-#: builtin.c:2007
+#: builtin.c:1997
msgid "mktime: received non-string argument"
msgstr "mktime: đã nhận đối số khác chuỗi"
-#: builtin.c:2024
+#: builtin.c:2014
msgid "mktime: at least one of the values is out of the default range"
msgstr "mktime: ít nhất một của những giá trị nằm ở ngoại phạm vi mặc định"
-#: builtin.c:2059
+#: builtin.c:2049
msgid "'system' function not allowed in sandbox mode"
msgstr "hàm “system†không cho phép ở chế độ khuôn đúc"
-#: builtin.c:2064
+#: builtin.c:2054
msgid "system: received non-string argument"
msgstr "system: (hệ thống) đã nhận đối số khác chuỗi"
-#: builtin.c:2184
+#: builtin.c:2174
#, c-format
msgid "reference to uninitialized field `$%d'"
msgstr "gặp tham chiếu đến trÆ°á»ng chÆ°a được khởi tạo “$%dâ€"
-#: builtin.c:2271
+#: builtin.c:2259
msgid "tolower: received non-string argument"
msgstr "tolower: (đến thấp hơn) đã nhận đối số khác chuỗi"
-#: builtin.c:2305
+#: builtin.c:2290
msgid "toupper: received non-string argument"
msgstr "toupper: (đến cao hơn) đã nhận đối số khác chuỗi"
-#: builtin.c:2341 mpfr.c:672
+#: builtin.c:2323 mpfr.c:679
msgid "atan2: received non-numeric first argument"
msgstr "atan2: đã nhận đối số thứ nhất khác thuộc số"
-#: builtin.c:2343 mpfr.c:674
+#: builtin.c:2325 mpfr.c:681
msgid "atan2: received non-numeric second argument"
msgstr "atan2: đã nhận đối số thứ hai khác thuộc số"
-#: builtin.c:2362
+#: builtin.c:2344
msgid "sin: received non-numeric argument"
msgstr "sin: đã nhận đối số không phải thuộc số"
-#: builtin.c:2378
+#: builtin.c:2360
msgid "cos: received non-numeric argument"
msgstr "cos: đã nhận đối số không phải thuộc số"
-#: builtin.c:2431 mpfr.c:1156
+#: builtin.c:2413 mpfr.c:1176
msgid "srand: received non-numeric argument"
msgstr "srand: đã nhận đối số không phải thuộc số"
-#: builtin.c:2462
+#: builtin.c:2444
msgid "match: third argument is not an array"
msgstr "match: (khớp) đối số thứ ba không phải là mảng"
-#: builtin.c:2734
-msgid "gensub: third argument of 0 treated as 1"
+#: builtin.c:2705
+#, fuzzy, c-format
+msgid "gensub: third argument `%.*s' treated as 1"
msgstr "gensub: đối số thứ ba của 0 được xử lý như 1"
-#: builtin.c:3030
+#: builtin.c:2720
+#, fuzzy, c-format
+msgid "gensub: third argument %g treated as 1"
+msgstr "gensub: đối số thứ ba của 0 được xử lý như 1"
+
+#: builtin.c:3020
msgid "lshift: received non-numeric first argument"
msgstr "lshift: đã nhận đối số đầu không phải thuộc số"
-#: builtin.c:3032
+#: builtin.c:3022
msgid "lshift: received non-numeric second argument"
msgstr "lshift: (dịch bên trái) đã nhận đối số thứ hai khác thuộc số"
-#: builtin.c:3038
+#: builtin.c:3028
#, c-format
msgid "lshift(%f, %f): negative values will give strange results"
msgstr "lshift(%f, %f): giá trị âm sẽ gây ra kết quả không như mong muốn"
-#: builtin.c:3040
+#: builtin.c:3030
#, c-format
msgid "lshift(%f, %f): fractional values will be truncated"
msgstr "lshift(%f, %f): giá trị thuộc phân số sẽ bị cắt ngắn"
-#: builtin.c:3042
+#: builtin.c:3032
#, c-format
msgid "lshift(%f, %f): too large shift value will give strange results"
msgstr ""
"lshift(%f, %f): giá trị dịch quá lớn sẽ gây ra kết quả không như mong muốn"
-#: builtin.c:3067
+#: builtin.c:3057
msgid "rshift: received non-numeric first argument"
msgstr "rshift: đã nhận đối số thứ nhất khác thuộc số"
-#: builtin.c:3069
+#: builtin.c:3059
msgid "rshift: received non-numeric second argument"
msgstr "rshift: (dịch phải) đã nhận đối số thứ hai khác thuộc số"
-#: builtin.c:3075
+#: builtin.c:3065
#, c-format
msgid "rshift(%f, %f): negative values will give strange results"
msgstr "rshift(%f, %f): giá trị âm sẽ gây ra kết quả không như mong muốn"
-#: builtin.c:3077
+#: builtin.c:3067
#, c-format
msgid "rshift(%f, %f): fractional values will be truncated"
msgstr "rshift(%f, %f): giá trị thuộc kiểu phân số sẽ bị xén ngắn"
-#: builtin.c:3079
+#: builtin.c:3069
#, c-format
msgid "rshift(%f, %f): too large shift value will give strange results"
msgstr ""
"rshift(%f, %f): giá trị dịch quá lớn sẽ gây ra kết quả không như mong muốn"
-#: builtin.c:3104 mpfr.c:968
+#: builtin.c:3094 mpfr.c:988
msgid "and: called with less than two arguments"
msgstr "and: được gá»i vá»›i ít hÆ¡n hai đối số"
-#: builtin.c:3109
+#: builtin.c:3099
#, c-format
msgid "and: argument %d is non-numeric"
msgstr "and: đối số %d không phải thuộc số"
-#: builtin.c:3113
+#: builtin.c:3103
#, c-format
msgid "and: argument %d negative value %g will give strange results"
msgstr ""
"and: (và) đối số %d giá trị âm %g sẽ đưa lại kết quả không như mong muốn"
-#: builtin.c:3136 mpfr.c:1000
+#: builtin.c:3126 mpfr.c:1020
msgid "or: called with less than two arguments"
msgstr "or: (hoặc) được gá»i vá»›i ít hÆ¡n hai đối số"
-#: builtin.c:3141
+#: builtin.c:3131
#, c-format
msgid "or: argument %d is non-numeric"
msgstr "or: (hoặc) đối số %d không thuộc kiểu số"
-#: builtin.c:3145
+#: builtin.c:3135
#, c-format
msgid "or: argument %d negative value %g will give strange results"
msgstr ""
"or: (hoặc) đối số %d giá trị âm %g sẽ đưa lại kết quả không như mong muốn"
-#: builtin.c:3167 mpfr.c:1031
+#: builtin.c:3157 mpfr.c:1051
msgid "xor: called with less than two arguments"
msgstr "xor: được gá»i vá»›i ít hÆ¡n hai đối số"
-#: builtin.c:3173
+#: builtin.c:3163
#, c-format
msgid "xor: argument %d is non-numeric"
msgstr "xor: đối số %d không thuộc kiểu số"
-#: builtin.c:3177
+#: builtin.c:3167
#, c-format
msgid "xor: argument %d negative value %g will give strange results"
msgstr "xor: đối số %d giá trị âm %g sẽ đưa lại kết quả không như mong muốn"
-#: builtin.c:3202 mpfr.c:787
+#: builtin.c:3192 mpfr.c:807
msgid "compl: received non-numeric argument"
msgstr "compl: (biên dịch) đã nhận được đối số không-phải-số"
-#: builtin.c:3208
+#: builtin.c:3198
#, c-format
msgid "compl(%f): negative value will give strange results"
msgstr "compl(%f): giá trị âm sẽ gây ra kết quả không như mong đợi"
-#: builtin.c:3210
+#: builtin.c:3200
#, c-format
msgid "compl(%f): fractional value will be truncated"
msgstr "compl(%f): giá trị thuộc phân số sẽ bị cắt ngắn"
-#: builtin.c:3379
+#: builtin.c:3369
#, c-format
msgid "dcgettext: `%s' is not a valid locale category"
msgstr "dcgettext: “%s†không phải là má»™t phân loại miá»n địa phÆ°Æ¡ng hợp lệ"
@@ -1261,40 +1282,49 @@ msgstr "up [N] - chuyển xuống N khung stack."
msgid "watch var - set a watchpoint for a variable."
msgstr "watch var - đặt điểm theo dõi cho một biến."
-#: command.y:1011 debug.c:401 msg.c:135
+#: command.y:901
+#, fuzzy
+msgid ""
+"where [N] - (same as backtrace) print trace of all or N innermost (outermost "
+"if N < 0) frames."
+msgstr ""
+"backtrace [N] - in vết của tất cả hay N khung trong cùng nhất (ngoài cùng "
+"nhất nếu N < 0)."
+
+#: command.y:1013 debug.c:401 msg.c:135
#, c-format
msgid "error: "
msgstr "lá»—i: "
-#: command.y:1051
+#: command.y:1053
#, c-format
msgid "can't read command (%s)\n"
msgstr "không thể Ä‘á»c lệnh (%s)\n"
-#: command.y:1065
+#: command.y:1067
#, c-format
msgid "can't read command (%s)"
msgstr "không thể Ä‘á»c lệnh (%s)"
-#: command.y:1116
+#: command.y:1118
msgid "invalid character in command"
msgstr "ký tự trong câu lệnh không hợp lệ"
-#: command.y:1152
+#: command.y:1154
#, c-format
msgid "unknown command - \"%.*s\", try help"
msgstr "không hiểu lệnh - “%.*sâ€, hãy gõ lệnh trợ giúp “helpâ€"
-#: command.y:1222
+#: command.y:1224
#, c-format
msgid "%s"
msgstr "%s"
-#: command.y:1284
+#: command.y:1286
msgid "invalid character"
msgstr "ký tự không hợp lệ"
-#: command.y:1455
+#: command.y:1457
#, c-format
msgid "undefined command: %s\n"
msgstr "lệnh chưa định nghĩa: %s\n"
@@ -1821,68 +1851,70 @@ msgstr "“%s†không được phép trong ngữ cảnh hiện hành; câu lá»
msgid "`return' not allowed in current context; statement ignored"
msgstr "“return†không được phép trong ngữ cảnh hiện hành; câu lệnh bị bỠqua"
-#: debug.c:5590
+#: debug.c:5604
#, c-format
msgid "No symbol `%s' in current context"
msgstr "Không có ký hiệu “%s†trong ngữ cảnh hiện thá»i"
-#: dfa.c:1118 dfa.c:1121 dfa.c:1142 dfa.c:1150 dfa.c:1162 dfa.c:1197
-#: dfa.c:1206 dfa.c:1209 dfa.c:1214 dfa.c:1228 dfa.c:1275
+#: dfa.c:1063 dfa.c:1066 dfa.c:1085 dfa.c:1095 dfa.c:1107 dfa.c:1143
+#: dfa.c:1152 dfa.c:1155 dfa.c:1160 dfa.c:1174 dfa.c:1222
msgid "unbalanced ["
msgstr "thiếu dấu ngoặc vuông mở ["
-#: dfa.c:1174
+#: dfa.c:1119
msgid "invalid character class"
msgstr "sai lớp ký tự"
-#: dfa.c:1316
+#: dfa.c:1265
msgid "character class syntax is [[:space:]], not [:space:]"
msgstr "cú pháp lớp ký tự là [[:dấu_cách:]], không phải [:dấu_cách:]"
-#: dfa.c:1366
+#: dfa.c:1327
msgid "unfinished \\ escape"
msgstr "chưa kết thúc dãy thoát \\"
-#: dfa.c:1513 regcomp.c:161
-msgid "Invalid content of \\{\\}"
+#: dfa.c:1474
+#, fuzzy
+msgid "invalid content of \\{\\}"
msgstr "Nội dung của “\\{\\}†không hợp lệ"
-#: dfa.c:1516 regcomp.c:176
-msgid "Regular expression too big"
+#: dfa.c:1477
+#, fuzzy
+msgid "regular expression too big"
msgstr "Biểu thức chính quy quá lớn"
-#: dfa.c:1936
+#: dfa.c:1912
msgid "unbalanced ("
msgstr "thiếu dấu ("
-#: dfa.c:2062
+#: dfa.c:2038
msgid "no syntax specified"
msgstr "chưa chỉ rõ cú pháp"
-#: dfa.c:2070
+#: dfa.c:2046
msgid "unbalanced )"
msgstr "thiếu dấu )"
-#: eval.c:394
+#: eval.c:396
#, c-format
msgid "unknown nodetype %d"
msgstr "không biết kiểu nút %d"
-#: eval.c:405 eval.c:419
+#: eval.c:407 eval.c:421
#, c-format
msgid "unknown opcode %d"
msgstr "gặp opcode (mã thao tác) không rõ %d"
-#: eval.c:416
+#: eval.c:418
#, c-format
msgid "opcode %s not an operator or keyword"
msgstr "mã lệnh %s không phải là một toán tử hoặc từ khoá"
-#: eval.c:472
+#: eval.c:474
msgid "buffer overflow in genflags2str"
msgstr "tràn bộ đệm trong “genflags2str†(tạo ra cỠđến chuỗi)"
-#: eval.c:675
+#: eval.c:676
#, c-format
msgid ""
"\n"
@@ -1893,217 +1925,217 @@ msgstr ""
"\t# Ngăn xếp gá»i hàm:\n"
"\n"
-#: eval.c:704
+#: eval.c:705
msgid "`IGNORECASE' is a gawk extension"
msgstr "“IGNORECASE†(bá» qua chữ HOA/thÆ°á»ng) là phần mở rá»™ng gawk"
-#: eval.c:736
+#: eval.c:737
msgid "`BINMODE' is a gawk extension"
msgstr "“BINMODE†(chế độ nhị phân) là phần mở rộng gawk"
-#: eval.c:794
+#: eval.c:795
#, c-format
msgid "BINMODE value `%s' is invalid, treated as 3"
msgstr "Giá trị BINMODE (chế độ nhị phân) “%s†không hợp lệ nên đã coi là 3"
-#: eval.c:885
+#: eval.c:912
#, c-format
msgid "bad `%sFMT' specification `%s'"
msgstr "đặc tả “%sFMT†sai “%sâ€"
-#: eval.c:969
+#: eval.c:996
msgid "turning off `--lint' due to assignment to `LINT'"
msgstr "Ä‘ang tắt “--lint†do việc gán cho “LINTâ€"
-#: eval.c:1147
+#: eval.c:1174
#, c-format
msgid "reference to uninitialized argument `%s'"
msgstr "gặp tham chiếu đến đối số chÆ°a được khởi tạo “%sâ€"
-#: eval.c:1148
+#: eval.c:1175
#, c-format
msgid "reference to uninitialized variable `%s'"
msgstr "gặp tham chiếu đến biến chÆ°a được khởi tạo “%sâ€"
-#: eval.c:1166
+#: eval.c:1193
msgid "attempt to field reference from non-numeric value"
msgstr "cố gắng tham chiếu trÆ°á»ng từ giá trị khác thuá»™c số"
-#: eval.c:1168
+#: eval.c:1195
msgid "attempt to field reference from null string"
msgstr "cố gắng tham chiếu trÆ°á»ng từ chuá»—i trống rá»—ng"
-#: eval.c:1176
+#: eval.c:1203
#, c-format
msgid "attempt to access field %ld"
msgstr "cố gắng để truy cập trÆ°á»ng %ld"
-#: eval.c:1185
+#: eval.c:1212
#, c-format
msgid "reference to uninitialized field `$%ld'"
msgstr "tham chiếu đến trÆ°á»ng chÆ°a được khởi tạo “$%ldâ€"
-#: eval.c:1272
+#: eval.c:1299
#, c-format
msgid "function `%s' called with more arguments than declared"
msgstr "hàm “%s†được gá»i vá»›i nhiá»u số đối số hÆ¡n số được khai báo"
-#: eval.c:1473
+#: eval.c:1500
#, c-format
msgid "unwind_stack: unexpected type `%s'"
msgstr "unwind_stack: không cần kiểu “%sâ€"
-#: eval.c:1569
+#: eval.c:1596
msgid "division by zero attempted in `/='"
msgstr "gặp phép chia cho số không trong “/=â€"
-#: eval.c:1576
+#: eval.c:1603
#, c-format
msgid "division by zero attempted in `%%='"
msgstr "gặp phép chia cho số không trong “%%=â€"
-#: ext.c:89 ext.c:171
+#: ext.c:65 ext.c:147
msgid "extensions are not allowed in sandbox mode"
msgstr "phần mở rộng không cho phép ở chế độ khuôn đúc"
-#: ext.c:92
+#: ext.c:68
msgid "-l / @load are gawk extensions"
msgstr "-l / @load là một phần mở rộng gawk"
-#: ext.c:95
+#: ext.c:71
msgid "load_ext: received NULL lib_name"
msgstr "load_ext: nhận được NULL lib_name"
-#: ext.c:98
+#: ext.c:74
#, c-format
msgid "load_ext: cannot open library `%s' (%s)\n"
msgstr "load_ext: không thể mở thư viện “%s†(%s)\n"
-#: ext.c:104
+#: ext.c:80
#, c-format
msgid ""
"load_ext: library `%s': does not define `plugin_is_GPL_compatible' (%s)\n"
msgstr ""
"load_ext: thÆ° viện “%sâ€: chÆ°a định nghÄ©a “plugin_is_GPL_compatible†(%s)\n"
-#: ext.c:110
+#: ext.c:86
#, c-format
msgid "load_ext: library `%s': cannot call function `%s' (%s)\n"
msgstr "load_ext: thÆ° viện “%sâ€: không thể gá»i hàm “%s†(%s)\n"
-#: ext.c:114
+#: ext.c:90
#, c-format
msgid "load_ext: library `%s' initialization routine `%s' failed\n"
msgstr "load_ext: thư viện “%s†thủ tục khởi tạo “%s†gặp lỗi\n"
-#: ext.c:174
+#: ext.c:150
msgid "`extension' is a gawk extension"
msgstr "“extension†là một phần mở rộng gawk"
-#: ext.c:177
+#: ext.c:153
msgid "extension: received NULL lib_name"
msgstr "extension: nhận được NULL lib_name"
-#: ext.c:180
+#: ext.c:156
#, c-format
msgid "extension: cannot open library `%s' (%s)"
msgstr "phần mở rộng: không thể mở thư viện “%s†(%s)"
-#: ext.c:186
+#: ext.c:162
#, c-format
msgid ""
"extension: library `%s': does not define `plugin_is_GPL_compatible' (%s)"
msgstr ""
"phần mở rá»™ng: thÆ° viện “%sâ€: chÆ°a định nghÄ©a “plugin_is_GPL_compatible†(%s)"
-#: ext.c:190
+#: ext.c:166
#, c-format
msgid "extension: library `%s': cannot call function `%s' (%s)"
msgstr "phần mở rá»™ng: thÆ° viện “%sâ€: không thể gá»i hàm “%s†(%s)"
-#: ext.c:221
+#: ext.c:197
msgid "make_builtin: missing function name"
msgstr "make_builtin: thiếu tên hàm"
-#: ext.c:236
+#: ext.c:212
#, c-format
msgid "make_builtin: can't redefine function `%s'"
msgstr "make_builtin: không thể định nghÄ©a lại hàm “%sâ€"
-#: ext.c:240
+#: ext.c:216
#, c-format
msgid "make_builtin: function `%s' already defined"
msgstr "make_builtin: hàm “%s†đã được định nghĩa rồi"
-#: ext.c:244
+#: ext.c:220
#, c-format
msgid "make_builtin: function name `%s' previously defined"
msgstr "make_builtin: hàm “%s†đã được định nghĩa trước đây rồi"
-#: ext.c:246
+#: ext.c:222
#, c-format
msgid "make_builtin: can't use gawk built-in `%s' as function name"
msgstr ""
"make_builtin: không thể sử dụng “%s†như là một hàm được xây dựng sẵn trong "
"gawk"
-#: ext.c:249 ext.c:304
+#: ext.c:225 ext.c:280
#, c-format
msgid "make_builtin: negative argument count for function `%s'"
msgstr "make_builtin: đối số dành cho số đếm bị âm cho hàm “%sâ€"
-#: ext.c:276
+#: ext.c:252
msgid "extension: missing function name"
msgstr "extension: (phần mở rộng) tên hàm còn thiếu"
-#: ext.c:279 ext.c:283
+#: ext.c:255 ext.c:259
#, c-format
msgid "extension: illegal character `%c' in function name `%s'"
msgstr "extension: (phần mở rá»™ng) gặp ký tá»± cấm “%c†nằm trong tên hàm “%sâ€"
-#: ext.c:291
+#: ext.c:267
#, c-format
msgid "extension: can't redefine function `%s'"
msgstr "extension: (phần mở rá»™ng) không thể định nghÄ©a lại hàm “%sâ€"
-#: ext.c:295
+#: ext.c:271
#, c-format
msgid "extension: function `%s' already defined"
msgstr "extension: (phần mở rộng) hàm “%s†đã được định nghĩa"
-#: ext.c:299
+#: ext.c:275
#, c-format
msgid "extension: function name `%s' previously defined"
msgstr "tên hàm “%s†đã được định nghĩa trước đó"
-#: ext.c:301
+#: ext.c:277
#, c-format
msgid "extension: can't use gawk built-in `%s' as function name"
msgstr ""
"extension: (phần mở rá»™ng) không thể dùng Ä‘iá»u có sẵn của gawk “%s†nhÆ° là "
"tên hàm"
-#: ext.c:375
+#: ext.c:351
#, c-format
msgid "function `%s' defined to take no more than %d argument(s)"
msgstr "hàm “%s†được định nghĩa để chấp nhấn %d đối số tối đa"
-#: ext.c:378
+#: ext.c:354
#, c-format
msgid "function `%s': missing argument #%d"
msgstr "hàm “%sâ€: thiếu đối số #%d"
-#: ext.c:395
+#: ext.c:371
#, c-format
msgid "function `%s': argument #%d: attempt to use scalar as an array"
msgstr "hàm “%sâ€: đối số thứ %d: cố gắng dùng kiểu vô hÆ°á»›ng nhÆ° là mảng"
-#: ext.c:399
+#: ext.c:375
#, c-format
msgid "function `%s': argument #%d: attempt to use array as a scalar"
msgstr "hàm “%sâ€: đối số thứ %d: cố gắng dùng mảng nhÆ° là kiểu vô hÆ°á»›ng"
-#: ext.c:413
+#: ext.c:389
msgid "dynamic loading of library not supported"
msgstr "tải động của thư viện không được hỗ trợ"
@@ -2247,7 +2279,7 @@ msgstr "wait: được gá»i vá»›i quá nhiá»u đối số"
msgid "inplace_begin: in-place editing already active"
msgstr "inplace_begin: sửa in-place đã sẵn được kích hoạt rồi"
-#: extension/inplace.c:133 extension/inplace.c:207
+#: extension/inplace.c:133 extension/inplace.c:210
#, c-format
msgid "inplace_begin: expects 2 arguments but called with %d"
msgstr "inplace_begin: cần 2 đối số nhÆ° lại được gá»i vá»›i %d"
@@ -2276,55 +2308,55 @@ msgstr "inplace_begin: “%s†không phải là tập tin thÆ°á»ng"
msgid "inplace_begin: mkstemp(`%s') failed (%s)"
msgstr "inplace_begin: mkstemp(“%sâ€) gặp lá»—i (%s)"
-#: extension/inplace.c:178
+#: extension/inplace.c:181
#, c-format
msgid "inplace_begin: chmod failed (%s)"
msgstr "inplace_begin: chmod gặp lỗi (%s)"
-#: extension/inplace.c:185
+#: extension/inplace.c:188
#, c-format
msgid "inplace_begin: dup(stdout) failed (%s)"
msgstr "inplace_begin: dup(stdout) gặp lỗi (%s)"
-#: extension/inplace.c:188
+#: extension/inplace.c:191
#, c-format
msgid "inplace_begin: dup2(%d, stdout) failed (%s)"
msgstr "inplace_begin: dup2(%d, stdout) gặp lỗi (%s)"
-#: extension/inplace.c:191
+#: extension/inplace.c:194
#, c-format
msgid "inplace_begin: close(%d) failed (%s)"
msgstr "inplace_begin: close(%d) gặp lỗi (%s)"
-#: extension/inplace.c:210
+#: extension/inplace.c:213
msgid "inplace_end: cannot retrieve 1st argument as a string filename"
msgstr "inplace_end: không thể lấy lại đối số thứ nhất như là một tên tập tin"
-#: extension/inplace.c:217
+#: extension/inplace.c:220
msgid "inplace_end: in-place editing not active"
msgstr "inplace_end: việc sửa in-place không được kích hoạt"
-#: extension/inplace.c:223
+#: extension/inplace.c:226
#, c-format
msgid "inplace_end: dup2(%d, stdout) failed (%s)"
msgstr "inplace_end: dup2(%d, stdout) gặp lỗi (%s)"
-#: extension/inplace.c:226
+#: extension/inplace.c:229
#, c-format
msgid "inplace_end: close(%d) failed (%s)"
msgstr "inplace_end: close(%d) gặp lỗi (%s)"
-#: extension/inplace.c:230
+#: extension/inplace.c:233
#, c-format
msgid "inplace_end: fsetpos(stdout) failed (%s)"
msgstr "inplace_end: fsetpos(stdout) gặp lỗi (%s)"
-#: extension/inplace.c:243
+#: extension/inplace.c:246
#, c-format
msgid "inplace_end: link(`%s', `%s') failed (%s)"
msgstr "inplace_end: link(“%sâ€, “%sâ€) gặp lá»—i (%s)"
-#: extension/inplace.c:253
+#: extension/inplace.c:256
#, c-format
msgid "inplace_end: rename(`%s', `%s') failed (%s)"
msgstr "inplace_end: rename(“%sâ€, “%sâ€) gặp lá»—i (%s)"
@@ -2366,50 +2398,54 @@ msgstr "readfile: được gá»i vá»›i quá nhiá»u đối số"
msgid "readfile: called with no arguments"
msgstr "readfile: được gá»i mà không có đối số"
-#: extension/rwarray.c:124
+#: extension/revoutput.c:125
+msgid "revoutput: could not initialize REVOUT variable"
+msgstr ""
+
+#: extension/rwarray.c:124 extension/rwarray0.c:109
msgid "writea: called with too many arguments"
msgstr "writea: được gá»i vá»›i quá nhiá»u đối số"
-#: extension/rwarray.c:131
+#: extension/rwarray.c:131 extension/rwarray0.c:116
#, c-format
msgid "do_writea: argument 0 is not a string\n"
msgstr "do_writea: đối số 0 không phải là một chuỗi\n"
-#: extension/rwarray.c:137
+#: extension/rwarray.c:137 extension/rwarray0.c:122
#, c-format
msgid "do_writea: argument 1 is not an array\n"
msgstr "do_writea: đối số 1 không phải là một mảng\n"
-#: extension/rwarray.c:184
+#: extension/rwarray.c:184 extension/rwarray0.c:169
#, c-format
msgid "write_array: could not flatten array\n"
msgstr "write_array: không thể làm phẳng mảng\n"
-#: extension/rwarray.c:198
+#: extension/rwarray.c:198 extension/rwarray0.c:183
#, c-format
msgid "write_array: could not release flattened array\n"
msgstr "write_array: không thể giải phóng mảng được làm phẳng\n"
-#: extension/rwarray.c:280
+#: extension/rwarray.c:280 extension/rwarray0.c:265
msgid "reada: called with too many arguments"
msgstr "reada: được gá»i vá»›i quá nhiá»u đối số"
-#: extension/rwarray.c:287
+#: extension/rwarray.c:287 extension/rwarray0.c:272
#, c-format
msgid "do_reada: argument 0 is not a string\n"
msgstr "do_reada: đối số 0 không phải là một chuỗi\n"
-#: extension/rwarray.c:293
+#: extension/rwarray.c:293 extension/rwarray0.c:278
#, c-format
msgid "do_reada: argument 1 is not an array\n"
msgstr "do_reada: đối số 1 không phải là một mảng\n"
-#: extension/rwarray.c:337
+#: extension/rwarray.c:337 extension/rwarray0.c:322
#, c-format
msgid "do_reada: clear_array failed\n"
msgstr "do_reada: clear_array gặp lỗi\n"
-#: extension/rwarray.c:374
+#: extension/rwarray.c:374 extension/rwarray0.c:358
#, c-format
msgid "read_array: set_array_element failed\n"
msgstr "read_array: set_array_element gặp lỗi\n"
@@ -2438,93 +2474,93 @@ msgstr "sleep: đối số âm"
msgid "sleep: not supported on this platform"
msgstr "sleep: không được há»— trợ trên ná»n tảng này"
-#: field.c:345
+#: field.c:346
msgid "NF set to negative value"
msgstr "“NF†được đặt thành giá trị âm"
-#: field.c:971 field.c:978 field.c:982
+#: field.c:958 field.c:965 field.c:969
msgid "split: fourth argument is a gawk extension"
msgstr "split (chia tách): đối số thứ tư là phần mở rộng gawk"
-#: field.c:975
+#: field.c:962
msgid "split: fourth argument is not an array"
msgstr "split (chia tách): đối số thứ tư không phải là mảng"
-#: field.c:989
+#: field.c:976
msgid "split: second argument is not an array"
msgstr "split: (chia tách) đối số thứ hai không phải là mảng"
-#: field.c:993
+#: field.c:980
msgid "split: cannot use the same array for second and fourth args"
msgstr ""
"split (chia tách): không thể sử dụng cùng một mảng có cả đối số thứ hai và "
"thứ tư"
-#: field.c:998
+#: field.c:985
msgid "split: cannot use a subarray of second arg for fourth arg"
msgstr ""
"split (phân tách): không thể sử dụng mảng con của tham số thứ hai cho tham "
"số thứ tư"
-#: field.c:1001
+#: field.c:988
msgid "split: cannot use a subarray of fourth arg for second arg"
msgstr ""
"split (phân tách): không thể sử dụng mảng con của tham số thứ tư cho tham số "
"thứ hai"
-#: field.c:1032
+#: field.c:1019
msgid "split: null string for third arg is a gawk extension"
msgstr ""
"split: (chia tách) chuỗi vô giá trị cho đối số thứ ba là phần mở rộng gawk"
-#: field.c:1072
+#: field.c:1059
msgid "patsplit: fourth argument is not an array"
msgstr "patsplit: đối số thứ tư không phải là mảng"
-#: field.c:1077
+#: field.c:1064
msgid "patsplit: second argument is not an array"
msgstr "patsplit: đối số thứ hai không phải là mảng"
-#: field.c:1083
+#: field.c:1070
msgid "patsplit: third argument must be non-null"
msgstr "patsplit: đối số thứ ba không phải không rỗng"
-#: field.c:1087
+#: field.c:1074
msgid "patsplit: cannot use the same array for second and fourth args"
msgstr ""
"patsplit (chương trình chia tách): không thể sử dụng cùng một mảng cho cả "
"hai đối số thứ hai và thứ tư"
-#: field.c:1092
+#: field.c:1079
msgid "patsplit: cannot use a subarray of second arg for fourth arg"
msgstr ""
"patsplit (chương trình phân tách): không thể sử dụng mảng con của tham số "
"thứ hai cho tham số thứ tư"
-#: field.c:1095
+#: field.c:1082
msgid "patsplit: cannot use a subarray of fourth arg for second arg"
msgstr ""
"patsplit (chương trình phân tách): không thể sử dụng mảng con của tham số "
"thứ tư cho tham số thứ hai"
-#: field.c:1133
+#: field.c:1120
msgid "`FIELDWIDTHS' is a gawk extension"
msgstr "“FIELDWIDTHS†(Ä‘á»™ rá»™ng trÆ°á»ng) là phần mở rá»™ng gawk"
-#: field.c:1197
+#: field.c:1184
#, c-format
msgid "invalid FIELDWIDTHS value, near `%s'"
msgstr "giá trị FIELDWIDTHS (Ä‘á»™ rá»™ng trÆ°á»ng) không hợp lệ, gần “%sâ€"
-#: field.c:1270
+#: field.c:1257
msgid "null string for `FS' is a gawk extension"
msgstr "chuỗi vô giá trị cho “FS†là phần mở rộng gawk"
-#: field.c:1274
+#: field.c:1261
msgid "old awk does not support regexps as value of `FS'"
msgstr "awk cÅ© không há»— trợ biểu thức chính quy làm giá trị của “FSâ€"
-#: field.c:1393
+#: field.c:1380
msgid "`FPAT' is a gawk extension"
msgstr "“FPAT†là phần mở rộng của gawk"
@@ -2540,20 +2576,20 @@ msgstr "node_to_awk_value: nút nhận được là null"
msgid "node_to_awk_value: received null val"
msgstr "node_to_awk_value: biến nhận được là null"
-#: gawkapi.c:807
+#: gawkapi.c:809
msgid "remove_element: received null array"
msgstr "remove_element: mảng nhận được là null"
-#: gawkapi.c:810
+#: gawkapi.c:812
msgid "remove_element: received null subscript"
msgstr "remove_element: nhận được là null"
-#: gawkapi.c:947
+#: gawkapi.c:949
#, c-format
msgid "api_flatten_array: could not convert index %d\n"
msgstr "api_flatten_array: không thể chuyển đổi chỉ số %d\n"
-#: gawkapi.c:952
+#: gawkapi.c:954
#, c-format
msgid "api_flatten_array: could not convert value %d\n"
msgstr "api_flatten_array: không thể chuyển đổi giá trị %d\n"
@@ -2613,313 +2649,295 @@ msgstr "%s: tùy chá»n “-W %s†không cho phép đối số\n"
msgid "%s: option '-W %s' requires an argument\n"
msgstr "%s: tùy chá»n “-W %s†yêu cầu má»™t đối số\n"
-#: io.c:392
+#: io.c:423
#, c-format
msgid "command line argument `%s' is a directory: skipped"
msgstr "tham số dòng lệnh “%s†là một thư mục: đã bị bỠqua"
-#: io.c:395 io.c:513
+#: io.c:426 io.c:544
#, c-format
msgid "cannot open file `%s' for reading (%s)"
msgstr "không mở được tập tin “%s†để Ä‘á»c (%s)"
-#: io.c:640
+#: io.c:671
#, c-format
msgid "close of fd %d (`%s') failed (%s)"
msgstr "lá»—i đóng fd %d (“%sâ€) (%s)"
-#: io.c:716
+#: io.c:749
msgid "redirection not allowed in sandbox mode"
msgstr "chuyển hướng không cho phép ở chế độ khuôn đúc"
-#: io.c:750
+#: io.c:783
#, c-format
msgid "expression in `%s' redirection only has numeric value"
msgstr "biểu thức trong Ä‘iá»u chuyển hÆ°á»›ng “%s†chỉ có giá trị thuá»™c số"
-#: io.c:756
+#: io.c:789
#, c-format
msgid "expression for `%s' redirection has null string value"
msgstr "biểu thức cho Ä‘iá»u chuyển hÆ°á»›ng “%s†có giá trị chuá»—i vô giá trị"
-#: io.c:761
+#: io.c:794
#, c-format
msgid "filename `%s' for `%s' redirection may be result of logical expression"
msgstr ""
"tên tập tin “%s†cho Ä‘iá»u chuyển hÆ°á»›ng “%s†có lẽ là kết quả của biểu thức "
"luận lý"
-#: io.c:809
+#: io.c:842
#, c-format
msgid "unnecessary mixing of `>' and `>>' for file `%.*s'"
msgstr "không cần hợp “>†và “>>†cho tập tin “%.*sâ€"
-#: io.c:863
+#: io.c:896
#, c-format
msgid "can't open pipe `%s' for output (%s)"
msgstr "không thể mở ống dẫn “%s†để xuất (%s)"
-#: io.c:873
+#: io.c:906
#, c-format
msgid "can't open pipe `%s' for input (%s)"
msgstr "không thể mở ống dẫn “%s†để nhập (%s)"
-#: io.c:904
+#: io.c:937
#, c-format
msgid "can't open two way pipe `%s' for input/output (%s)"
msgstr "không thể mở ống dẫn hai chiá»u “%s†để nhập/xuất (%s)"
-#: io.c:986
+#: io.c:1019
#, c-format
msgid "can't redirect from `%s' (%s)"
msgstr "không thể chuyển hướng từ “%s†(%s)"
-#: io.c:989
+#: io.c:1022
#, c-format
msgid "can't redirect to `%s' (%s)"
msgstr "không thể chuyển hướng đến “%s†(%s)"
-#: io.c:1040
+#: io.c:1073
msgid ""
"reached system limit for open files: starting to multiplex file descriptors"
msgstr ""
"đã tá»›i giá»›i hạn hệ thống vá» tập tin được mở nên bắt đầu phối hợp nhiá»u dòng "
"Ä‘iá»u mô tả tập tin"
-#: io.c:1056
+#: io.c:1089
#, c-format
msgid "close of `%s' failed (%s)."
msgstr "lỗi đóng “%s†(%s)"
-#: io.c:1064
+#: io.c:1097
msgid "too many pipes or input files open"
msgstr "quá nhiá»u ống dẫn hay tập tin nhập được mở"
-#: io.c:1086
+#: io.c:1119
msgid "close: second argument must be `to' or `from'"
msgstr "close: (đóng) đối số thứ hai phải là “to†(đến) hay “from†(từ)"
-#: io.c:1103
+#: io.c:1136
#, c-format
msgid "close: `%.*s' is not an open file, pipe or co-process"
msgstr ""
"close: (đóng) “%.*s†không phải là tập tin, ống dẫn hay đồng tiến trình đã "
"được mở"
-#: io.c:1108
+#: io.c:1141
msgid "close of redirection that was never opened"
msgstr "đóng một chuyển hướng mà nó chưa từng được mở"
-#: io.c:1205
+#: io.c:1238
#, c-format
msgid "close: redirection `%s' not opened with `|&', second argument ignored"
msgstr ""
"close: chuyển hướng “%s†không được mở bởi “|&†nên đối số thứ hai bị bỠqua"
-#: io.c:1222
+#: io.c:1255
#, c-format
msgid "failure status (%d) on pipe close of `%s' (%s)"
msgstr "trạng thái thất bại (%d) khi đóng ống dẫn “%s†(%s)"
-#: io.c:1225
+#: io.c:1258
#, c-format
msgid "failure status (%d) on file close of `%s' (%s)"
msgstr "trạng thái thất bại (%d) khi đóng tập tin “%s†(%s)"
-#: io.c:1245
+#: io.c:1278
#, c-format
msgid "no explicit close of socket `%s' provided"
msgstr "không cung cấp lệnh đóng ổ cắm “%s†rõ ràng"
-#: io.c:1248
+#: io.c:1281
#, c-format
msgid "no explicit close of co-process `%s' provided"
msgstr "không cung cấp lệnh đóng đồng tiến trình “%s†rõ ràng"
-#: io.c:1251
+#: io.c:1284
#, c-format
msgid "no explicit close of pipe `%s' provided"
msgstr "không cung cấp lệnh đóng Ä‘Æ°á»ng ống dẫn lệnh “%s†rõ ràng"
-#: io.c:1254
+#: io.c:1287
#, c-format
msgid "no explicit close of file `%s' provided"
msgstr "không cung cấp lệnh đóng tập tin “%s†rõ ràng"
-#: io.c:1284 io.c:1342 main.c:864 main.c:906
+#: io.c:1317 io.c:1375 main.c:628 main.c:670
#, c-format
msgid "error writing standard output (%s)"
msgstr "gặp lỗi khi ghi đầu ra tiêu chuẩn (%s)"
-#: io.c:1289 io.c:1348 main.c:866
+#: io.c:1322 io.c:1381 main.c:630
#, c-format
msgid "error writing standard error (%s)"
msgstr "gặp lỗi khi ghi thiết bị lỗi chuẩn (%s)"
-#: io.c:1297
+#: io.c:1330
#, c-format
msgid "pipe flush of `%s' failed (%s)."
msgstr "lỗi xoá sạch ống dẫn “%s†(%s)"
-#: io.c:1300
+#: io.c:1333
#, c-format
msgid "co-process flush of pipe to `%s' failed (%s)."
msgstr "lỗi xoá sạch ống dẫn đồng tiến trình đến “%s†(%s)"
-#: io.c:1303
+#: io.c:1336
#, c-format
msgid "file flush of `%s' failed (%s)."
msgstr "lỗi xoá sạch tập tin “%s†(%s)"
-#: io.c:1420
+#: io.c:1453
#, c-format
msgid "local port %s invalid in `/inet'"
msgstr "cổng cục bá»™ %s không hợp lệ trong “/inetâ€"
-#: io.c:1438
+#: io.c:1471
#, c-format
msgid "remote host and port information (%s, %s) invalid"
msgstr "thông tin vỠmáy/cổng ở xa (%s, %s) không phải hợp lệ"
-#: io.c:1590
-#, c-format
-msgid "no (known) protocol supplied in special filename `%s'"
-msgstr "trong tên tập tin đặc biệt “%s†không cung cấp giao thức (đã biết) nào"
-
-#: io.c:1604
-#, c-format
-msgid "special file name `%s' is incomplete"
-msgstr "tên tập tin đặc biệt “%s†chưa xong"
-
-#: io.c:1621
-msgid "must supply a remote hostname to `/inet'"
-msgstr "phải cung cấp một tên máy chủ cho </inet>"
-
-#: io.c:1639
-msgid "must supply a remote port to `/inet'"
-msgstr "phải cung cấp một cổng máy chủ cho </inet>"
-
-#: io.c:1685
+#: io.c:1673
msgid "TCP/IP communications are not supported"
msgstr "truyá»n thông TCP/IP không được há»— trợ"
-#: io.c:1867
+#: io.c:1854
#, c-format
msgid "could not open `%s', mode `%s'"
msgstr "không mở được “%sâ€, chế Ä‘á»™ “%sâ€"
-#: io.c:1917
+#: io.c:1904
#, c-format
msgid "close of master pty failed (%s)"
msgstr "gặp lỗi khi đóng thiết bị cuối giả (%s)"
-#: io.c:1919 io.c:2105 io.c:2305
+#: io.c:1906 io.c:2092 io.c:2293
#, c-format
msgid "close of stdout in child failed (%s)"
msgstr "lỗi đóng đầu ra tiêu chuẩn trong tiến trình con (%s)"
-#: io.c:1922
+#: io.c:1909
#, c-format
msgid "moving slave pty to stdout in child failed (dup: %s)"
msgstr ""
"gặp lỗi khi di chuyển pty (thiết bị cuối giả) phụ thuộc đến thiết bị đầu ra "
"tiêu chuẩn trong con (trùng: %s)"
-#: io.c:1924 io.c:2110
+#: io.c:1911 io.c:2097
#, c-format
msgid "close of stdin in child failed (%s)"
msgstr "lỗi đóng thiết bị nhập chuẩn trong tiến trình con (%s)"
-#: io.c:1927
+#: io.c:1914
#, c-format
msgid "moving slave pty to stdin in child failed (dup: %s)"
msgstr ""
"lá»—i di chuyển pty (thiết bị cuối giả) phụ tá»›i thiết bị nhập chuẩn trong Ä‘iá»u "
"con (nhân đôi: %s)"
-#: io.c:1929 io.c:1951
+#: io.c:1916 io.c:1938
#, c-format
msgid "close of slave pty failed (%s)"
msgstr "đóng pty (thiết bị cuối giả) phụ thuộc gặp lỗi (%s)"
-#: io.c:2040 io.c:2108 io.c:2276 io.c:2308
+#: io.c:2027 io.c:2095 io.c:2264 io.c:2296
#, c-format
msgid "moving pipe to stdout in child failed (dup: %s)"
msgstr ""
"lỗi di chuyển ống dẫn đến thiết bị xuất chuẩn trong tiến trình con (trùng: "
"%s)"
-#: io.c:2047 io.c:2113
+#: io.c:2034 io.c:2100
#, c-format
msgid "moving pipe to stdin in child failed (dup: %s)"
msgstr ""
"lỗi di chuyển ống dẫn đến thiết bị nhập chuẩn trong tiến trình con (trùng: "
"%s)"
-#: io.c:2073 io.c:2298
+#: io.c:2060 io.c:2286
msgid "restoring stdout in parent process failed\n"
msgstr "phục hồi đầu ra tiêu chuẩn trong tiến trình mẹ gặp lỗi\n"
-#: io.c:2081
+#: io.c:2068
msgid "restoring stdin in parent process failed\n"
msgstr "phục hồi đầu vào tiêu chuẩn trong tiến trình mẹ gặp lỗi\n"
-#: io.c:2116 io.c:2310 io.c:2324
+#: io.c:2103 io.c:2298 io.c:2313
#, c-format
msgid "close of pipe failed (%s)"
msgstr "đóng ống dẫn gặp lỗi (%s)"
-#: io.c:2174
+#: io.c:2162
msgid "`|&' not supported"
msgstr "“|&†không được hỗ trợ"
-#: io.c:2261
+#: io.c:2249
#, c-format
msgid "cannot open pipe `%s' (%s)"
msgstr "không thể mở ống dẫn “%s†(%s)"
-#: io.c:2318
+#: io.c:2307
#, c-format
msgid "cannot create child process for `%s' (fork: %s)"
msgstr "không thể tạo tiến trình con cho “%s†(fork: %s)"
-#: io.c:2790
+#: io.c:2734
msgid "register_input_parser: received NULL pointer"
msgstr "register_input_parser: nhận được con trỠNULL"
-#: io.c:2818
+#: io.c:2762
#, c-format
msgid "input parser `%s' conflicts with previously installed input parser `%s'"
msgstr ""
"bộ phân tích đầu vào “%s†xung đột với bộ phân tích đầu vào được cài đặt "
"trÆ°á»›c đó “%sâ€"
-#: io.c:2825
+#: io.c:2769
#, c-format
msgid "input parser `%s' failed to open `%s'"
msgstr "bá»™ phân tích đầu vào “%s†gặp lá»—i khi mở “%sâ€"
-#: io.c:2845
+#: io.c:2789
msgid "register_output_wrapper: received NULL pointer"
msgstr "register_output_wrapper: nhận được con trỠNULL"
-#: io.c:2873
+#: io.c:2817
#, c-format
msgid ""
"output wrapper `%s' conflicts with previously installed output wrapper `%s'"
msgstr ""
"bá»™ bao kết xuất “%s†xung Ä‘á»™t vá»›i bá»™ bao kết xuất được cài đặt trÆ°á»›c đó “%sâ€"
-#: io.c:2880
+#: io.c:2824
#, c-format
msgid "output wrapper `%s' failed to open `%s'"
msgstr "bá»™ bao kết xuất “%s†gặp lá»—i khi mở “%sâ€"
-#: io.c:2901
+#: io.c:2845
msgid "register_output_processor: received NULL pointer"
msgstr "register_output_processor: nhận được con trỠNULL"
-#: io.c:2930
+#: io.c:2874
#, c-format
msgid ""
"two-way processor `%s' conflicts with previously installed two-way processor "
@@ -2928,221 +2946,208 @@ msgstr ""
"bộ xử lý hai hướng “%s†xung đột với bộ xử lý hai hướng đã được cài đặt "
"trÆ°á»›c đó “%sâ€"
-#: io.c:2939
+#: io.c:2883
#, c-format
msgid "two way processor `%s' failed to open `%s'"
msgstr "bá»™ xá»­ lý hai hÆ°á»›ng “%s†gặp lá»—i khi mở “%sâ€"
-#: io.c:3064
+#: io.c:3008
#, c-format
msgid "data file `%s' is empty"
msgstr "tập tin dữ liệu “%s†là rỗng"
-#: io.c:3106 io.c:3114
+#: io.c:3050 io.c:3058
msgid "could not allocate more input memory"
msgstr "không thể cấp phát bộ nhớ nhập thêm nữa"
-#: io.c:3682
+#: io.c:3636
msgid "multicharacter value of `RS' is a gawk extension"
msgstr "giá trị đa ký tự của “RS†là phần mở rộng gawk"
-#: io.c:3771
+#: io.c:3783
msgid "IPv6 communication is not supported"
msgstr "Truyá»n thông trên IPv6 không được há»— trợ"
-#: main.c:405
-msgid "empty argument to `-e/--source' ignored"
-msgstr "đối số rá»—ng cho tuỳ chá»n “-e/--source†bị bá» qua"
-
-#: main.c:495
-#, c-format
-msgid "%s: option `-W %s' unrecognized, ignored\n"
-msgstr "%s: tùy chá»n “-W %s†không được nhận diện nên bị bá» qua\n"
-
-#: main.c:541
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: tùy chá»n cần đến đối số “-- %câ€\n"
-
-#: main.c:562
+#: main.c:321
msgid "environment variable `POSIXLY_CORRECT' set: turning on `--posix'"
msgstr ""
"biến môi trÆ°á»ng “POSIXLY_CORRECT†(đúng kiểu POSIX) đã được đặt; Ä‘ang bật "
"tùy chá»n “--posixâ€"
-#: main.c:568
+#: main.c:327
msgid "`--posix' overrides `--traditional'"
msgstr "tùy chá»n “--posix†có quyá»n cao hÆ¡n “--traditional†(truyá»n thống)"
-#: main.c:579
+#: main.c:338
msgid "`--posix'/`--traditional' overrides `--non-decimal-data'"
msgstr ""
"“--posixâ€/“--traditional†(cổ Ä‘iển) có quyá»n cao hÆ¡n “--non-decimal-"
"data†(dữ liệu khác thập phân)"
-#: main.c:583
+#: main.c:342
#, c-format
msgid "running %s setuid root may be a security problem"
msgstr "việc chạy %s với tư cách “setuid root†có thể rủi rỠbảo mật"
-#: main.c:588
+#: main.c:346
msgid "`--posix' overrides `--characters-as-bytes'"
msgstr "“--posix†đè lên “--characters-as-bytesâ€"
-#: main.c:647
+#: main.c:404
#, c-format
msgid "can't set binary mode on stdin (%s)"
msgstr "không thể đặt chế độ nhị phân trên đầu vào tiêu chuẩn (%s)"
-#: main.c:650
+#: main.c:407
#, c-format
msgid "can't set binary mode on stdout (%s)"
msgstr "không thể đặt chế độ nhị phân trên đầu ra tiêu chuẩn (%s)"
-#: main.c:652
+#: main.c:409
#, c-format
msgid "can't set binary mode on stderr (%s)"
msgstr "không thể đặt chế độ nhị phân trên đầu ra lỗi tiêu chuẩn (%s)"
-#: main.c:710
+#: main.c:469
msgid "no program text at all!"
msgstr "không có đoạn chữ chương trình nào cả!"
-#: main.c:799
+#: main.c:563
#, c-format
msgid "Usage: %s [POSIX or GNU style options] -f progfile [--] file ...\n"
msgstr ""
"Cách dùng: %s [tùy chá»n kiểu POSIX hay GNU] -f tập_tin_chÆ°Æ¡ng_trình [--] "
"tập_tin ...\n"
-#: main.c:801
+#: main.c:565
#, c-format
msgid "Usage: %s [POSIX or GNU style options] [--] %cprogram%c file ...\n"
msgstr ""
"Cách dùng: %s [tùy chá»n kiểu POSIX hay GNU] [--] %cchÆ°Æ¡ng_trình%c "
"tập_tin ...\n"
-#: main.c:806
+#: main.c:570
msgid "POSIX options:\t\tGNU long options: (standard)\n"
msgstr "Tùy chá»n POSIX:\t\t\tTùy chá»n dài GNU: (tiêu chuẩn)\n"
-#: main.c:807
+#: main.c:571
msgid "\t-f progfile\t\t--file=progfile\n"
msgstr "\t-f tập_tin_chương_trình\t--file=tập_tin_chương_trình\n"
-#: main.c:808
+#: main.c:572
msgid "\t-F fs\t\t\t--field-separator=fs\n"
msgstr "\t-F fs\t\t\t--field-separator=ký_hiệu_phân_cách_trÆ°á»ng\n"
-#: main.c:809
+#: main.c:573
msgid "\t-v var=val\t\t--assign=var=val\n"
msgstr ""
"\t-v var=giá_trị\t\t--assign=biến=giá_trị\n"
"(assign: gán)\n"
-#: main.c:810
+#: main.c:574
msgid "Short options:\t\tGNU long options: (extensions)\n"
msgstr "Tuỳ chá»n ngắn:\t\t\tTuỳ chá»n GNU dạng dài: (mở rá»™ng)\n"
-#: main.c:811
+#: main.c:575
msgid "\t-b\t\t\t--characters-as-bytes\n"
msgstr "\t-b\t\t\t--characters-as-bytes\n"
-#: main.c:812
+#: main.c:576
msgid "\t-c\t\t\t--traditional\n"
msgstr "\t-c\t\t\t--traditional\n"
-#: main.c:813
+#: main.c:577
msgid "\t-C\t\t\t--copyright\n"
msgstr "\t-C\t\t\t--copyright\n"
-#: main.c:814
+#: main.c:578
msgid "\t-d[file]\t\t--dump-variables[=file]\n"
msgstr "\t-d[tập_tin]\t\t--dump-variables[=tập_tin]\n"
-#: main.c:815
+#: main.c:579
msgid "\t-D[file]\t\t--debug[=file]\n"
msgstr "\t-D[tập_tin]\t\t--debug[=tập_tin]\n"
-#: main.c:816
+#: main.c:580
msgid "\t-e 'program-text'\t--source='program-text'\n"
msgstr "\t-e “program-textâ€\t--source=“program-textâ€\n"
-#: main.c:817
+#: main.c:581
msgid "\t-E file\t\t\t--exec=file\n"
msgstr "\t-E file\t\t\t--exec=tập_tin\n"
-#: main.c:818
+#: main.c:582
msgid "\t-g\t\t\t--gen-pot\n"
msgstr "\t-g\t\t\t--gen-pot\n"
-#: main.c:819
+#: main.c:583
msgid "\t-h\t\t\t--help\n"
msgstr "\t-h\t\t\t--help\n"
-#: main.c:820
+#: main.c:584
msgid "\t-i includefile\t\t--include=includefile\n"
msgstr "\t-i includefile\t\t--include=tập-tin-bao-gồm\n"
-#: main.c:821
+#: main.c:585
msgid "\t-l library\t\t--load=library\n"
msgstr "\t-l library\t\t--load=thư-viện\n"
-#: main.c:822
-msgid "\t-L [fatal]\t\t--lint[=fatal]\n"
+#: main.c:586
+#, fuzzy
+msgid "\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"
msgstr "\t-L [fatal]\t\t--lint[=fatal]\n"
-#: main.c:823
-msgid "\t-n\t\t\t--non-decimal-data\n"
-msgstr "\t-n\t\t\t--non-decimal-data\n"
-
-#: main.c:824
+#: main.c:587
msgid "\t-M\t\t\t--bignum\n"
msgstr "\t-M\t\t\t--bignum\n"
-#: main.c:825
+#: main.c:588
msgid "\t-N\t\t\t--use-lc-numeric\n"
msgstr "\t-N\t\t\t--use-lc-numeric\n"
-#: main.c:826
+#: main.c:589
+msgid "\t-n\t\t\t--non-decimal-data\n"
+msgstr "\t-n\t\t\t--non-decimal-data\n"
+
+#: main.c:590
msgid "\t-o[file]\t\t--pretty-print[=file]\n"
msgstr "\t-o[tập_tin]\t\t--pretty-print[=tập_tin]\n"
-#: main.c:827
+#: main.c:591
msgid "\t-O\t\t\t--optimize\n"
msgstr "\t-O\t\t\t--optimize (tạm dịch: tối_ưu_hoá)\n"
-#: main.c:828
+#: main.c:592
msgid "\t-p[file]\t\t--profile[=file]\n"
msgstr "\t-p[tập_tin]\t\t--profile[=tập_tin]\n"
-#: main.c:829
+#: main.c:593
msgid "\t-P\t\t\t--posix\n"
msgstr "\t-P\t\t\t--posix\n"
-#: main.c:830
+#: main.c:594
msgid "\t-r\t\t\t--re-interval\n"
msgstr "\t-r\t\t\t--re-interval\n"
-#: main.c:831
+#: main.c:595
msgid "\t-S\t\t\t--sandbox\n"
msgstr "\t-S\t\t\t--sandbox\n"
-#: main.c:832
+#: main.c:596
msgid "\t-t\t\t\t--lint-old\n"
msgstr "\t-t\t\t\t--lint-old\n"
-#: main.c:833
+#: main.c:597
msgid "\t-V\t\t\t--version\n"
msgstr "\t-V\t\t\t--version\n"
-#: main.c:835
+#: main.c:599
msgid "\t-W nostalgia\t\t--nostalgia\n"
msgstr ""
"\t-W nostalgia\t\t--nostalgia\n"
"(nỗi luyến tiếc quá khứ)\n"
-#: main.c:838
+#: main.c:602
msgid "\t-Y\t\t--parsedebug\n"
msgstr "\t-Y\t\t--parsedebug\n"
@@ -3151,7 +3156,7 @@ msgstr "\t-Y\t\t--parsedebug\n"
#. for this application. Please add _another line_ with the
#. address for translation bugs.
#. no-wrap
-#: main.c:847
+#: main.c:611
msgid ""
"\n"
"To report bugs, see node `Bugs' in `gawk.info', which is\n"
@@ -3166,7 +3171,7 @@ msgstr ""
"Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n"
"\n"
-#: main.c:851
+#: main.c:615
msgid ""
"gawk is a pattern scanning and processing language.\n"
"By default it reads standard input and writes standard output.\n"
@@ -3176,7 +3181,7 @@ msgstr ""
"Mặc định, nó Ä‘á»c từ đầu vào tiêu chuẩn và ghi ra đầu ra tiêu chuẩn.\n"
"\n"
-#: main.c:855
+#: main.c:619
msgid ""
"Examples:\n"
"\tgawk '{ sum += $1 }; END { print sum }' file\n"
@@ -3186,7 +3191,7 @@ msgstr ""
"\tgawk \"{ sum += $1 }; END { print sum }\" file\n"
"\tgawk -F: \"{ print $1 }\" /etc/passwd\n"
-#: main.c:880
+#: main.c:644
#, c-format
msgid ""
"Copyright (C) 1989, 1991-%d Free Software Foundation.\n"
@@ -3205,7 +3210,7 @@ msgstr ""
"của Giấy Phép này, hoặc là (tùy chá»n) bất kỳ phiên bản má»›i hÆ¡n.\n"
"\n"
-#: main.c:888
+#: main.c:652
msgid ""
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
@@ -3219,7 +3224,7 @@ msgstr ""
"Hãy xem Giấy phép Công Chung GNU (GPL) để biết chi tiết.\n"
"\n"
-#: main.c:894
+#: main.c:658
msgid ""
"You should have received a copy of the GNU General Public License\n"
"along with this program. If not, see http://www.gnu.org/licenses/.\n"
@@ -3227,16 +3232,16 @@ msgstr ""
"Bạn nên nhận một bản sao của Giấy Phép Công Cộng GNU cùng với chương\n"
"trình này. Nếu chưa có, bạn xem tại <http://www.gnu.org/licenses/>.\n"
-#: main.c:931
+#: main.c:695
msgid "-Ft does not set FS to tab in POSIX awk"
msgstr "-Ft không đặt FS (hệ thống tập tin?) vào tab trong awk POSIX"
-#: main.c:1208
+#: main.c:982
#, c-format
msgid "unknown value for field spec: %d\n"
msgstr "không hiểu giá trị dành cho đặc tả trÆ°á»ng: %d\n"
-#: main.c:1306
+#: main.c:1080
#, c-format
msgid ""
"%s: `%s' argument to `-v' not in `var=value' form\n"
@@ -3245,98 +3250,116 @@ msgstr ""
"%s: đối số “%s†cho “-v†không có dạng “biến=giá_trịâ€\n"
"\n"
-#: main.c:1332
+#: main.c:1106
#, c-format
msgid "`%s' is not a legal variable name"
msgstr "“%s†không phải là tên biến hợp lệ"
-#: main.c:1335
+#: main.c:1109
#, c-format
msgid "`%s' is not a variable name, looking for file `%s=%s'"
msgstr "“%s†không phải là tên biến; Ä‘ang tìm tập tin “%s=%sâ€"
-#: main.c:1339
+#: main.c:1113
#, c-format
msgid "cannot use gawk builtin `%s' as variable name"
msgstr "không thể dùng builtin (dựng sẵn) của gawk “%s†như là tên biến"
-#: main.c:1344
+#: main.c:1118
#, c-format
msgid "cannot use function `%s' as variable name"
msgstr "không thể dùng hàm “%s†như là tên biến"
-#: main.c:1397
+#: main.c:1171
msgid "floating point exception"
msgstr "ngoại lệ số thực dấu chấm động"
-#: main.c:1404
+#: main.c:1178
msgid "fatal error: internal error"
msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™"
-#: main.c:1419
+#: main.c:1193
msgid "fatal error: internal error: segfault"
msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™: lá»—i phân Ä‘oạn"
-#: main.c:1431
+#: main.c:1205
msgid "fatal error: internal error: stack overflow"
msgstr "lá»—i nghiêm trá»ng: lá»—i ná»™i bá»™: tràn ngăn xếp"
-#: main.c:1490
+#: main.c:1264
#, c-format
msgid "no pre-opened fd %d"
msgstr "không có fd (bộ mô tả tập tin) %d đã mở trước"
-#: main.c:1497
+#: main.c:1271
#, c-format
msgid "could not pre-open /dev/null for fd %d"
msgstr "không thể mở trước “/dev/null†cho fd %d"
-#: mpfr.c:550
+#: main.c:1485
+msgid "empty argument to `-e/--source' ignored"
+msgstr "đối số rá»—ng cho tuỳ chá»n “-e/--source†bị bá» qua"
+
+#: main.c:1556
+msgid "-M ignored: MPFR/GMP support not compiled in"
+msgstr ""
+
+#: main.c:1577
+#, c-format
+msgid "%s: option `-W %s' unrecognized, ignored\n"
+msgstr "%s: tùy chá»n “-W %s†không được nhận diện nên bị bá» qua\n"
+
+#: main.c:1630
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: tùy chá»n cần đến đối số “-- %câ€\n"
+
+#: mpfr.c:557
#, c-format
msgid "PREC value `%.*s' is invalid"
msgstr "giá trị PREC “%.*s†là không hợp lệ"
-#: mpfr.c:608
+#: mpfr.c:615
#, c-format
msgid "RNDMODE value `%.*s' is invalid"
msgstr "giá trị RNDMODE “%.*s†là không hợp lệ"
-#: mpfr.c:698
+#: mpfr.c:711
#, c-format
msgid "%s: received non-numeric argument"
msgstr "%s: đã nhận đối số không phải thuộc số"
-#: mpfr.c:800
+#: mpfr.c:820
msgid "compl(%Rg): negative value will give strange results"
msgstr "compl(%Rg): giá trị âm sẽ gây ra kết quả không như mong muốn"
-#: mpfr.c:804
+#: mpfr.c:824
msgid "comp(%Rg): fractional value will be truncated"
msgstr "compl(%Rg): giá trị thuộc phân số sẽ bị cắt ngắn"
-#: mpfr.c:816
+#: mpfr.c:836
#, c-format
msgid "cmpl(%Zd): negative values will give strange results"
msgstr "cmpl(%Zd): giá trị âm sẽ gây ra kết quả không như mong muốn"
-#: mpfr.c:835
+#: mpfr.c:855
#, c-format
msgid "%s: received non-numeric argument #%d"
msgstr "%s: đã nhận đối số không phải thuộc số #%d"
-#: mpfr.c:845
+#: mpfr.c:865
msgid "%s: argument #%d has invalid value %Rg, using 0"
msgstr "%s: đối số #%d có giá trị không hợp lệ %Rg, dùng 0"
-#: mpfr.c:857
+#: mpfr.c:877
msgid "%s: argument #%d negative value %Rg will give strange results"
msgstr "%s: đối số #%d giá trị âm %Rg sẽ gây ra kết quả không như mong muốn"
-#: mpfr.c:863
+#: mpfr.c:883
msgid "%s: argument #%d fractional value %Rg will be truncated"
msgstr "%s: đối số #%d giá trị phần phân số %Rg sẽ bị cắt cụt"
-#: mpfr.c:878
+#: mpfr.c:898
#, c-format
msgid "%s: argument #%d negative value %Zd will give strange results"
msgstr "%s: đối số #%d có giá trị âm %Zd sẽ đưa ra kết quả không như mong muốn"
@@ -3346,24 +3369,24 @@ msgstr "%s: đối số #%d có giá trị âm %Zd sẽ Ä‘Æ°a ra kết quả khÃ
msgid "cmd. line:"
msgstr "dòng lệnh:"
-#: node.c:421
+#: node.c:409
msgid "backslash at end of string"
msgstr "gặp dấu gạch ngược tại kết thúc của chuỗi"
-#: node.c:500
+#: node.c:488
#, c-format
msgid "old awk does not support the `\\%c' escape sequence"
msgstr "awk cÅ© không há»— trợ thoát chuá»—i “\\%câ€"
-#: node.c:551
+#: node.c:539
msgid "POSIX does not allow `\\x' escapes"
msgstr "POSIX không cho phép thoát chuá»—i “\\xâ€"
-#: node.c:557
+#: node.c:545
msgid "no hex digits in `\\x' escape sequence"
msgstr "không có số thập lúc nằm trong thoát chuá»—i “\\xâ€"
-#: node.c:579
+#: node.c:567
#, c-format
msgid ""
"hex escape \\x%.*s of %d characters probably not interpreted the way you "
@@ -3372,12 +3395,12 @@ msgstr ""
"thoát chuá»—i thập lục \\x%.*s chứa %d ký tá»± mà rất có thể không phải được Ä‘á»c "
"bằng cách dự định"
-#: node.c:594
+#: node.c:582
#, c-format
msgid "escape sequence `\\%c' treated as plain `%c'"
msgstr "thoát chuỗi “\\%c†được xử lý như là “%c†chuẩn"
-#: node.c:739
+#: node.c:726
msgid ""
"Invalid multibyte data detected. There may be a mismatch between your data "
"and your locale."
@@ -3407,12 +3430,12 @@ msgid "sending profile to standard error"
msgstr "đang gởi hồ sơ cho thiết bị lỗi chuẩn"
#: profile.c:193
-#, c-format
+#, fuzzy, c-format
msgid ""
-"\t# %s block(s)\n"
+"\t# %s rule(s)\n"
"\n"
msgstr ""
-"\t# %s khối\n"
+"\t# Quy tắc\n"
"\n"
#: profile.c:198
@@ -3429,11 +3452,11 @@ msgstr ""
msgid "internal error: %s with null vname"
msgstr "lỗi nội bộ: %s với vname (tên biến?) vô giá trị"
-#: profile.c:537
+#: profile.c:538
msgid "internal error: builtin with null fname"
msgstr "lỗi nội bộ: phần dựng sẵn với fname là null"
-#: profile.c:949
+#: profile.c:958
#, c-format
msgid ""
"\t# Loaded extensions (-l and/or @load)\n"
@@ -3442,12 +3465,12 @@ msgstr ""
"\t# Các phần mở rộng được tải (-l và/hoặc @load)\n"
"\n"
-#: profile.c:972
+#: profile.c:981
#, c-format
msgid "\t# gawk profile, created %s\n"
msgstr "\t# hồ sơ gawk, được tạo %s\n"
-#: profile.c:1475
+#: profile.c:1521
#, c-format
msgid ""
"\n"
@@ -3456,7 +3479,7 @@ msgstr ""
"\n"
"\t# Danh sách các hàm theo thứ tự abc\n"
-#: profile.c:1513
+#: profile.c:1559
#, c-format
msgid "redir2str: unknown redirection type %d"
msgstr "redir2str: không hiểu kiểu chuyển hướng %d"
@@ -3468,80 +3491,114 @@ msgstr ""
"thành phần của biểu thức chính qui (regexp) “%.*s†gần như chắc chắn nên là "
"“[%.*s]â€"
-#: regcomp.c:131
+#: regcomp.c:139
msgid "Success"
msgstr "Thành công"
-#: regcomp.c:134
+#: regcomp.c:142
msgid "No match"
msgstr "Không khớp"
-#: regcomp.c:137
+#: regcomp.c:145
msgid "Invalid regular expression"
msgstr "Biểu thức chính quy không hợp lệ"
-#: regcomp.c:140
+#: regcomp.c:148
msgid "Invalid collation character"
msgstr "Ký tự đối chiếu không hợp lệ"
-#: regcomp.c:143
+#: regcomp.c:151
msgid "Invalid character class name"
msgstr "Tên hạng ký tự không hợp lệ"
-#: regcomp.c:146
+#: regcomp.c:154
msgid "Trailing backslash"
msgstr "Gặp dấu gạch ngược thừa"
-#: regcomp.c:149
+#: regcomp.c:157
msgid "Invalid back reference"
msgstr "Tham chiếu ngược không hợp lệ"
-#: regcomp.c:152
-msgid "Unmatched [ or [^"
+#: regcomp.c:160
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
msgstr "ChÆ°a khá»›p “[†hay “[^â€"
-#: regcomp.c:155
+#: regcomp.c:163
msgid "Unmatched ( or \\("
msgstr "ChÆ°a khá»›p “(†hay “\\(â€"
-#: regcomp.c:158
+#: regcomp.c:166
msgid "Unmatched \\{"
msgstr "ChÆ°a khá»›p “\\{â€"
-#: regcomp.c:164
+#: regcomp.c:169
+msgid "Invalid content of \\{\\}"
+msgstr "Nội dung của “\\{\\}†không hợp lệ"
+
+#: regcomp.c:172
msgid "Invalid range end"
msgstr "Kết thúc phạm vi không hợp lệ"
-#: regcomp.c:167
+#: regcomp.c:175
msgid "Memory exhausted"
msgstr "Hết bộ nhớ"
-#: regcomp.c:170
+#: regcomp.c:178
msgid "Invalid preceding regular expression"
msgstr "Biểu thức chính quy nằm trước không hợp lệ"
-#: regcomp.c:173
+#: regcomp.c:181
msgid "Premature end of regular expression"
msgstr "Kết thúc quá sớm của biểu thức chính quy"
-#: regcomp.c:179
+#: regcomp.c:184
+msgid "Regular expression too big"
+msgstr "Biểu thức chính quy quá lớn"
+
+#: regcomp.c:187
msgid "Unmatched ) or \\)"
msgstr "ChÆ°a khá»›p “)†hoặc “\\)â€"
-#: regcomp.c:704
+#: regcomp.c:712
msgid "No previous regular expression"
msgstr "Không có biểu thức chính quy nằm trước"
-#: symbol.c:741
+#: symbol.c:677
+#, fuzzy, c-format
+msgid "function `%s': can't use function `%s' as a parameter name"
+msgstr "hàm “%sâ€: không thể dùng tên hàm nhÆ° là tên tham số"
+
+#: symbol.c:809
msgid "can not pop main context"
msgstr "không thể pop (lấy ra) ngữ cảnh chính"
+#~ msgid "`getline var' invalid inside `%s' rule"
+#~ msgstr "“getline var†không hợp lệ bên trong quy tắc “%sâ€"
+
+#~ msgid "no (known) protocol supplied in special filename `%s'"
+#~ msgstr ""
+#~ "trong tên tập tin đặc biệt “%s†không cung cấp giao thức (đã biết) nào"
+
+#~ msgid "special file name `%s' is incomplete"
+#~ msgstr "tên tập tin đặc biệt “%s†chưa xong"
+
+#~ msgid "must supply a remote hostname to `/inet'"
+#~ msgstr "phải cung cấp một tên máy chủ cho </inet>"
+
+#~ msgid "must supply a remote port to `/inet'"
+#~ msgstr "phải cung cấp một cổng máy chủ cho </inet>"
+
+#~ msgid ""
+#~ "\t# %s block(s)\n"
+#~ "\n"
+#~ msgstr ""
+#~ "\t# %s khối\n"
+#~ "\n"
+
#~ msgid "range of the form `[%c-%c]' is locale dependent"
#~ msgstr "vùng của dạng thức “[%c-%c]†phụ thuộc vào vị trí"
-#~ msgid "attempt to use function `%s' as an array"
-#~ msgstr "cố gắng dùng hàm “%s†như mảng"
-
#~ msgid "reference to uninitialized element `%s[\"%.*s\"]'"
#~ msgstr "tham chiếu đến phần tá»­ chÆ°a khởi tạo “%s[â€%.*sâ€]â€"
diff --git a/profile.c b/profile.c
index 59542ab9..3e9ef783 100644
--- a/profile.c
+++ b/profile.c
@@ -26,6 +26,7 @@
#include "awk.h"
static void pprint(INSTRUCTION *startp, INSTRUCTION *endp, bool in_for_header);
+static void end_line(INSTRUCTION *ip);
static void pp_parenthesize(NODE *n);
static void parenthesize(int type, NODE *left, NODE *right);
static char *pp_list(int nargs, const char *paren, const char *delim);
@@ -176,70 +177,82 @@ pprint(INSTRUCTION *startp, INSTRUCTION *endp, bool in_for_header)
NODE *t1;
char *str;
NODE *t2;
- INSTRUCTION *ip;
+ INSTRUCTION *ip1;
+ INSTRUCTION *ip2;
NODE *m;
char *tmp;
int rule;
- long lind;
static int rule_count[MAXRULE];
for (pc = startp; pc != endp; pc = pc->nexti) {
if (pc->source_line > 0)
sourceline = pc->source_line;
+ /* skip leading EOL comment as it has already been printed */
+ if (pc->opcode == Op_comment
+ && pc->memory->comment_type == EOL_COMMENT)
+ continue;
switch (pc->opcode) {
case Op_rule:
+ /*
+ * Rules are three instructions long.
+ * See append_rule in awkgram.y.
+ * The first has the Rule Op Code, nexti etc.
+ * The second, (pc + 1) has firsti and lasti:
+ * the first/last ACTION instructions for this rule.
+ * The third has first_line and last_line:
+ * the first and last source line numbers.
+ */
source = pc->source_file;
rule = pc->in_rule;
if (rule != Rule) {
- ip = (pc + 1)->firsti;
-
- /* print pre-begin/end comments */
- if (ip->opcode == Op_comment) {
- print_comment(ip, 0);
- ip = ip->nexti;
- }
+ /* Allow for pre-non-rule-block comment */
+ if (pc->nexti != (pc +1)->firsti
+ && pc->nexti->opcode == Op_comment
+ && pc->nexti->memory->comment_type == FULL_COMMENT)
+ print_comment(pc->nexti, -1);
+ ip1 = (pc + 1)->firsti;
+ ip2 = (pc + 1)->lasti;
if (do_profile) {
if (! rule_count[rule]++)
fprintf(prof_fp, _("\t# %s rule(s)\n\n"), ruletab[rule]);
indent(0);
}
- fprintf(prof_fp, "%s {\n", ruletab[rule]);
+ fprintf(prof_fp, "%s {", ruletab[rule]);
+ end_line(pc);
} else {
if (do_profile && ! rule_count[rule]++)
fprintf(prof_fp, _("\t# Rule(s)\n\n"));
- ip = pc->nexti;
- lind = ip->exec_count;
- /* print pre-block comments */
- if (ip->opcode == Op_exec_count && ip->nexti->opcode == Op_comment)
- ip = ip->nexti;
- if (ip->opcode == Op_comment) {
- print_comment(ip, lind);
- if (ip->nexti->nexti == (pc + 1)->firsti)
- ip = ip->nexti->nexti;
- }
- if (ip != (pc + 1)->firsti) { /* non-empty pattern */
- indent(lind);
- pprint(ip->nexti, (pc + 1)->firsti, false);
- t1 = pp_pop();
- fprintf(prof_fp, "%s {", t1->pp_str);
- pp_free(t1);
- ip = (pc + 1)->firsti;
-
- if (do_profile && ip->exec_count > 0)
- fprintf(prof_fp, " # %ld", ip->exec_count);
-
- fprintf(prof_fp, "\n");
+ ip1 = pc->nexti;
+ indent(ip1->exec_count);
+ if (ip1 != (pc + 1)->firsti) { /* non-empty pattern */
+ pprint(ip1->nexti, (pc + 1)->firsti, false);
+ /* Allow for case where the "pattern" is just a comment */
+ if (ip1->nexti->nexti->nexti != (pc +1)->firsti
+ || ip1->nexti->opcode != Op_comment) {
+ t1 = pp_pop();
+ fprintf(prof_fp, "%s {", t1->pp_str);
+ pp_free(t1);
+ } else
+ fprintf(prof_fp, "{");
+ ip1 = (pc + 1)->firsti;
+ ip2 = (pc + 1)->lasti;
+
+ if (do_profile && ip1->exec_count > 0)
+ fprintf(prof_fp, " # %ld", ip1->exec_count);
+
+ end_line(ip1);
} else {
fprintf(prof_fp, "{\n");
- ip = (pc + 1)->firsti;
+ ip1 = (pc + 1)->firsti;
+ ip2 = (pc + 1)->lasti;
}
- ip = ip->nexti;
+ ip1 = ip1->nexti;
}
indent_in();
- pprint(ip, (pc + 1)->lasti, false);
+ pprint(ip1, ip2, false);
indent_out();
if (do_profile)
indent(0);
@@ -328,7 +341,7 @@ cleanup:
pp_free(t2);
pp_free(t1);
if (! in_for_header)
- fprintf(prof_fp, "\n");
+ end_line(pc);
break;
default:
@@ -454,7 +467,7 @@ cleanup:
pp_free(t2);
pp_free(t1);
if (! in_for_header)
- fprintf(prof_fp, "\n");
+ end_line(pc);
break;
case Op_concat:
@@ -475,7 +488,7 @@ cleanup:
} else
fprintf(prof_fp, "%s %s", op2str(Op_K_delete), array);
if (! in_for_header)
- fprintf(prof_fp, "\n");
+ end_line(pc);
pp_free(t1);
}
break;
@@ -587,7 +600,7 @@ cleanup:
fprintf(prof_fp, "%s%s", op2str(pc->opcode), tmp);
efree(tmp);
if (! in_for_header)
- fprintf(prof_fp, "\n");
+ end_line(pc);
break;
case Op_push_re:
@@ -705,33 +718,33 @@ cleanup:
t1 = pp_pop();
fprintf(prof_fp, "%s", t1->pp_str);
if (! in_for_header)
- fprintf(prof_fp, "\n");
+ end_line(pc);
pp_free(t1);
break;
case Op_line_range:
- ip = pc + 1;
- pprint(pc->nexti, ip->condpair_left, false);
- pprint(ip->condpair_left->nexti, ip->condpair_right, false);
+ ip1 = pc + 1;
+ pprint(pc->nexti, ip1->condpair_left, false);
+ pprint(ip1->condpair_left->nexti, ip1->condpair_right, false);
t2 = pp_pop();
t1 = pp_pop();
str = pp_group3(t1->pp_str, ", ", t2->pp_str);
pp_free(t1);
pp_free(t2);
pp_push(Op_line_range, str, CAN_FREE);
- pc = ip->condpair_right;
+ pc = ip1->condpair_right;
break;
case Op_K_while:
- ip = pc + 1;
- indent(ip->while_body->exec_count);
+ ip1 = pc + 1;
+ indent(ip1->while_body->exec_count);
fprintf(prof_fp, "%s (", op2str(pc->opcode));
- pprint(pc->nexti, ip->while_body, false);
+ pprint(pc->nexti, ip1->while_body, false);
t1 = pp_pop();
fprintf(prof_fp, "%s) {\n", t1->pp_str);
pp_free(t1);
indent_in();
- pprint(ip->while_body->nexti, pc->target_break, false);
+ pprint(ip1->while_body->nexti, pc->target_break, false);
indent_out();
indent(SPACEOVER);
fprintf(prof_fp, "}\n");
@@ -739,13 +752,13 @@ cleanup:
break;
case Op_K_do:
- ip = pc + 1;
+ ip1 = pc + 1;
indent(pc->nexti->exec_count);
fprintf(prof_fp, "%s {\n", op2str(pc->opcode));
indent_in();
- pprint(pc->nexti->nexti, ip->doloop_cond, false);
+ pprint(pc->nexti->nexti, ip1->doloop_cond, false);
indent_out();
- pprint(ip->doloop_cond, pc->target_break, false);
+ pprint(ip1->doloop_cond, pc->target_break, false);
indent(SPACEOVER);
t1 = pp_pop();
fprintf(prof_fp, "} %s (%s)\n", op2str(Op_K_while), t1->pp_str);
@@ -754,24 +767,24 @@ cleanup:
break;
case Op_K_for:
- ip = pc + 1;
- indent(ip->forloop_body->exec_count);
+ ip1 = pc + 1;
+ indent(ip1->forloop_body->exec_count);
fprintf(prof_fp, "%s (", op2str(pc->opcode));
/* If empty for looop header, print it a little more nicely. */
if ( pc->nexti->opcode == Op_no_op
- && ip->forloop_cond == pc->nexti
+ && ip1->forloop_cond == pc->nexti
&& pc->target_continue->opcode == Op_jmp) {
fprintf(prof_fp, ";;");
} else {
- pprint(pc->nexti, ip->forloop_cond, true);
+ pprint(pc->nexti, ip1->forloop_cond, true);
fprintf(prof_fp, "; ");
- if (ip->forloop_cond->opcode == Op_no_op &&
- ip->forloop_cond->nexti == ip->forloop_body)
+ if (ip1->forloop_cond->opcode == Op_no_op &&
+ ip1->forloop_cond->nexti == ip1->forloop_body)
fprintf(prof_fp, "; ");
else {
- pprint(ip->forloop_cond, ip->forloop_body, true);
+ pprint(ip1->forloop_cond, ip1->forloop_body, true);
t1 = pp_pop();
fprintf(prof_fp, "%s; ", t1->pp_str);
pp_free(t1);
@@ -781,7 +794,7 @@ cleanup:
}
fprintf(prof_fp, ") {\n");
indent_in();
- pprint(ip->forloop_body->nexti, pc->target_continue, false);
+ pprint(ip1->forloop_body->nexti, pc->target_continue, false);
indent_out();
indent(SPACEOVER);
fprintf(prof_fp, "}\n");
@@ -793,20 +806,20 @@ cleanup:
char *array;
const char *item;
- ip = pc + 1;
+ ip1 = pc + 1;
t1 = pp_pop();
array = t1->pp_str;
- m = ip->forloop_cond->array_var;
+ m = ip1->forloop_cond->array_var;
if (m->type == Node_param_list)
item = func_params[m->param_cnt].param;
else
item = m->vname;
- indent(ip->forloop_body->exec_count);
+ indent(ip1->forloop_body->exec_count);
fprintf(prof_fp, "%s (%s%s%s) {\n", op2str(Op_K_arrayfor),
item, op2str(Op_in_array), array);
indent_in();
pp_free(t1);
- pprint(ip->forloop_body->nexti, pc->target_break, false);
+ pprint(ip1->forloop_body->nexti, pc->target_break, false);
indent_out();
indent(SPACEOVER);
fprintf(prof_fp, "}\n");
@@ -815,13 +828,13 @@ cleanup:
break;
case Op_K_switch:
- ip = pc + 1;
+ ip1 = pc + 1;
fprintf(prof_fp, "%s (", op2str(pc->opcode));
- pprint(pc->nexti, ip->switch_start, false);
+ pprint(pc->nexti, ip1->switch_start, false);
t1 = pp_pop();
fprintf(prof_fp, "%s) {\n", t1->pp_str);
pp_free(t1);
- pprint(ip->switch_start, ip->switch_end, false);
+ pprint(ip1->switch_start, ip1->switch_end, false);
indent(SPACEOVER);
fprintf(prof_fp, "}\n");
pc = pc->target_break;
@@ -848,12 +861,12 @@ cleanup:
fprintf(prof_fp, "%s) {", t1->pp_str);
pp_free(t1);
- ip = pc->branch_if;
- if (ip->exec_count > 0)
- fprintf(prof_fp, " # %ld", ip->exec_count);
- fprintf(prof_fp, "\n");
+ ip1 = pc->branch_if;
+ if (ip1->exec_count > 0)
+ fprintf(prof_fp, " # %ld", ip1->exec_count);
+ end_line(pc);
indent_in();
- pprint(ip->nexti, pc->branch_else, false);
+ pprint(ip1->nexti, pc->branch_else, false);
indent_out();
pc = pc->branch_else;
if (pc->nexti->opcode == Op_no_op) {
@@ -878,11 +891,11 @@ cleanup:
size_t len;
pprint(pc->nexti, pc->branch_if, false);
- ip = pc->branch_if;
- pprint(ip->nexti, pc->branch_else, false);
- ip = pc->branch_else->nexti;
+ ip1 = pc->branch_if;
+ pprint(ip1->nexti, pc->branch_else, false);
+ ip1 = pc->branch_else->nexti;
- pc = ip->nexti;
+ pc = ip1->nexti;
assert(pc->opcode == Op_cond_exp);
pprint(pc->nexti, pc->branch_end, false);
@@ -923,6 +936,21 @@ cleanup:
}
}
+/* end_line --- end pretty print line with new line or on-line comment */
+
+void
+end_line(INSTRUCTION *ip)
+{
+ if (ip->nexti->opcode == Op_comment
+ && ip->nexti->memory->comment_type == EOL_COMMENT) {
+ fprintf(prof_fp, "\t");
+ print_comment(ip->nexti, -1);
+ ip = ip->nexti->nexti;
+ }
+ else
+ fprintf(prof_fp, "\n");
+}
+
/* pp_string_fp --- printy print a string to the fp */
/*
@@ -1008,7 +1036,8 @@ print_comment(INSTRUCTION* pc, long in)
count = pc->memory->stlen;
text = pc->memory->stptr;
- indent(in); /* is this correct? Where should comments go? */
+ if (in >= 0)
+ indent(in); /* is this correct? Where should comments go? */
for (; count > 0; count--, text++) {
if (after_newline) {
indent(in);
@@ -1361,16 +1390,30 @@ pp_number(NODE *n)
{
#define PP_PRECISION 6
char *str;
+ size_t count;
- emalloc(str, char *, PP_PRECISION + 10, "pp_number");
#ifdef HAVE_MPFR
- if (is_mpg_float(n))
- mpfr_sprintf(str, "%0.*R*g", PP_PRECISION, ROUND_MODE, n->mpg_numbr);
- else if (is_mpg_integer(n))
+ if (is_mpg_float(n)) {
+ count = mpfr_get_prec(n->mpg_numbr) / 3; /* ~ 3.22 binary digits per decimal digit */
+ emalloc(str, char *, count, "pp_number");
+ /*
+ * 3/2015: Format string used to be "%0.*R*g". That padded
+ * with leading zeros. But it doesn't do that for regular
+ * numbers in the non-MPFR case.
+ */
+ mpfr_sprintf(str, "%.*R*g", PP_PRECISION, ROUND_MODE, n->mpg_numbr);
+ } else if (is_mpg_integer(n)) {
+ count = mpz_sizeinbase(n->mpg_i, 10) + 2; /* +1 for sign, +1 for NUL at end */
+ emalloc(str, char *, count, "pp_number");
mpfr_sprintf(str, "%Zd", n->mpg_i);
- else
+ } else
#endif
- sprintf(str, "%0.*g", PP_PRECISION, n->numbr);
+ {
+ count = PP_PRECISION + 10;
+ emalloc(str, char *, count, "pp_number");
+ sprintf(str, "%0.*g", PP_PRECISION, n->numbr);
+ }
+
return str;
#undef PP_PRECISION
}
@@ -1586,7 +1629,7 @@ pp_func(INSTRUCTION *pc, void *data ATTRIBUTE_UNUSED)
/* print any function comment */
if (fp->opcode == Op_comment && fp->source_line == 0) {
- print_comment(fp, 0);
+ print_comment(fp, -1); /* -1 ==> don't indent */
fp = fp->nexti;
}
diff --git a/re.c b/re.c
index edb5bc48..7abb9430 100644
--- a/re.c
+++ b/re.c
@@ -616,40 +616,3 @@ again:
done:
s[length] = save;
}
-
-/* regexflags2str --- make regex flags printable */
-
-const char *
-regexflags2str(int flags)
-{
- static const struct flagtab regextab[] = {
- { RE_BACKSLASH_ESCAPE_IN_LISTS, "RE_BACKSLASH_ESCAPE_IN_LISTS" },
- { RE_BK_PLUS_QM, "RE_BK_PLUS_QM" },
- { RE_CHAR_CLASSES, "RE_CHAR_CLASSES" },
- { RE_CONTEXT_INDEP_ANCHORS, "RE_CONTEXT_INDEP_ANCHORS" },
- { RE_CONTEXT_INDEP_OPS, "RE_CONTEXT_INDEP_OPS" },
- { RE_CONTEXT_INVALID_OPS, "RE_CONTEXT_INVALID_OPS" },
- { RE_DOT_NEWLINE, "RE_DOT_NEWLINE" },
- { RE_DOT_NOT_NULL, "RE_DOT_NOT_NULL" },
- { RE_HAT_LISTS_NOT_NEWLINE, "RE_HAT_LISTS_NOT_NEWLINE" },
- { RE_INTERVALS, "RE_INTERVALS" },
- { RE_LIMITED_OPS, "RE_LIMITED_OPS" },
- { RE_NEWLINE_ALT, "RE_NEWLINE_ALT" },
- { RE_NO_BK_BRACES, "RE_NO_BK_BRACES" },
- { RE_NO_BK_PARENS, "RE_NO_BK_PARENS" },
- { RE_NO_BK_REFS, "RE_NO_BK_REFS" },
- { RE_NO_BK_VBAR, "RE_NO_BK_VBAR" },
- { RE_NO_EMPTY_RANGES, "RE_NO_EMPTY_RANGES" },
- { RE_UNMATCHED_RIGHT_PAREN_ORD, "RE_UNMATCHED_RIGHT_PAREN_ORD" },
- { RE_NO_POSIX_BACKTRACKING, "RE_NO_POSIX_BACKTRACKING" },
- { RE_NO_GNU_OPS, "RE_NO_GNU_OPS" },
- { RE_DEBUG, "RE_DEBUG" },
- { RE_INVALID_INTERVAL_ORD, "RE_INVALID_INTERVAL_ORD" },
- { RE_ICASE, "RE_ICASE" },
- { RE_CARET_ANCHORS_HERE, "RE_CARET_ANCHORS_HERE" },
- { RE_CONTEXT_INVALID_DUP, "RE_CONTEXT_INVALID_DUP" },
- { 0, NULL }
- };
-
- return genflags2str(flags, regextab);
-}
diff --git a/regcomp.c b/regcomp.c
index 70468c82..f58cb091 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
@@ -17,6 +17,14 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
+
static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
size_t length, reg_syntax_t syntax);
static void re_compile_fastmap_iter (regex_t *bufp,
@@ -3163,6 +3171,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
re_token_t token2;
start_elem.opr.name = start_name_buf;
+ start_elem.type = COLL_SYM;
ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa,
syntax, first_round);
if (BE (ret != REG_NOERROR, 0))
@@ -3206,6 +3215,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
if (is_range_exp == 1)
{
end_elem.opr.name = end_name_buf;
+ end_elem.type = COLL_SYM;
ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2,
dfa, syntax, 1);
if (BE (ret != REG_NOERROR, 0))
@@ -3479,8 +3489,6 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
int32_t idx1, idx2;
unsigned int ch;
size_t len;
- /* This #include defines a local function! */
-# include <locale/weight.h>
/* Calculate the index for equivalence class. */
cp = name;
table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
@@ -3490,7 +3498,7 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
_NL_COLLATE_EXTRAMB);
indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
_NL_COLLATE_INDIRECTMB);
- idx1 = findidx (&cp, -1);
+ idx1 = findidx (table, indirect, extra, &cp, -1);
if (BE (idx1 == 0 || *cp != '\0', 0))
/* This isn't a valid character. */
return REG_ECOLLATE;
@@ -3502,7 +3510,7 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
{
char_buf[0] = ch;
cp = char_buf;
- idx2 = findidx (&cp, 1);
+ idx2 = findidx (table, indirect, extra, &cp, 1);
/*
idx2 = table[ch];
*/
diff --git a/regex.c b/regex.c
index f56e8692..ed6a4f5d 100644
--- a/regex.c
+++ b/regex.c
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
diff --git a/regex.h b/regex.h
index 3d26a606..d1c478ec 100644
--- a/regex.h
+++ b/regex.h
@@ -1,6 +1,6 @@
/* Definitions for data structures and routines for the regular
expression library.
- Copyright (C) 1985, 1989-2014 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1989-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
diff --git a/regex_internal.c b/regex_internal.c
index 9e427081..5a5b9363 100644
--- a/regex_internal.c
+++ b/regex_internal.c
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
diff --git a/regex_internal.h b/regex_internal.h
index 3fc2fc58..9aab5e52 100644
--- a/regex_internal.h
+++ b/regex_internal.h
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002-2014 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
@@ -79,7 +79,6 @@ is_blank (int c)
# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
# define _RE_DEFINE_LOCALE_FUNCTIONS 1
# include <locale/localeinfo.h>
-# include <locale/elem-hash.h>
# include <locale/coll-lookup.h>
# endif
#endif
@@ -792,7 +791,7 @@ re_string_elem_size_at (const re_string_t *pstr, int idx)
indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
_NL_COLLATE_INDIRECTMB);
p = pstr->mbs + idx;
- findidx (&p, pstr->len - idx);
+ findidx (table, indirect, extra, &p, pstr->len - idx);
return p - pstr->mbs - idx;
}
else
diff --git a/regexec.c b/regexec.c
index 77795f69..30f2ec74 100644
--- a/regexec.c
+++ b/regexec.c
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
@@ -3762,6 +3762,10 @@ group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state,
one collating element like '.', '[a-z]', opposite to the other nodes
can only accept one byte. */
+# ifdef _LIBC
+# include <locale/weight.h>
+# endif
+
static int
internal_function
check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
@@ -3883,8 +3887,6 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
const int32_t *table, *indirect;
const unsigned char *weights, *extra;
const char *collseqwc;
- /* This #include defines a local function! */
-# include <locale/weight.h>
/* match with collating_symbol? */
if (cset->ncoll_syms)
@@ -3940,7 +3942,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
indirect = (const int32_t *)
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
- int32_t idx = findidx (&cp, elem_len);
+ int32_t idx = findidx (table, indirect, extra, &cp, elem_len);
if (idx > 0)
for (i = 0; i < cset->nequiv_classes; ++i)
{
diff --git a/symbol.c b/symbol.c
index e89214c0..845d3797 100644
--- a/symbol.c
+++ b/symbol.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 1986, 1988, 1989, 1991-2013 the Free Software Foundation, Inc.
+ * Copyright (C) 1986, 1988, 1989, 1991-2015 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Programming Language.
@@ -565,7 +565,6 @@ load_symbols()
sym_array->parent_array = PROCINFO_node;
sym_array->vname = estrdup("identifiers", 11);
- make_aname(sym_array);
user = make_string("user", 4);
extension = make_string("extension", 9);
@@ -626,6 +625,67 @@ load_symbols()
unref(array);
}
+/* check_param_names --- make sure no parameter is the name of a function */
+
+bool
+check_param_names(void)
+{
+ int i, j;
+ NODE **list;
+ NODE *f;
+ long max;
+ bool result = true;
+ NODE n;
+
+ if (func_table->table_size == 0)
+ return result;
+
+ max = func_table->table_size * 2;
+
+ memset(& n, 0, sizeof n);
+ n.type = Node_val;
+ n.flags = STRING|STRCUR;
+ n.stfmt = -1;
+
+ /*
+ * assoc_list() returns an array with two elements per awk array
+ * element. Elements i and i+1 in the C array represent the key
+ * and value of element j in the awk array. Thus the loops use += 2
+ * to go through the awk array.
+ *
+ * In this case, the name is in list[i], and the function is
+ * in list[i+1]. Just what we need.
+ */
+
+ list = assoc_list(func_table, "@unsorted", ASORTI);
+
+ for (i = 0; i < max; i += 2) {
+ f = list[i+1];
+ if (f->type == Node_builtin_func || f->param_cnt == 0)
+ continue;
+
+ /* loop over each param in function i */
+ for (j = 0; j < f->param_cnt; j++) {
+ /* compare to function names */
+
+ /* use a fake node to avoid malloc/free of make_string */
+ n.stptr = f->fparms[j].param;
+ n.stlen = strlen(f->fparms[j].param);
+
+ if (in_array(func_table, & n)) {
+ error(
+ _("function `%s': can't use function `%s' as a parameter name"),
+ list[i]->stptr,
+ f->fparms[j].param);
+ result = false;
+ }
+ }
+ }
+
+ efree(list);
+ return result;
+}
+
#define pool_size d.dl
#define freei x.xi
static INSTRUCTION *pool_list;
diff --git a/test/ChangeLog b/test/ChangeLog
index de7e66d3..f9e49945 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,186 @@
+2015-04-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * id.ok, mpfrsqrt.awk: Update after rename of div() --> intdiv().
+
+2015-03-31 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (indirectbuiltin): New test.
+ * indirectbuiltin.awk, indirectbuiltin.ok: New files.
+
+2015-03-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am: Remove defvar test and reference to files; test
+ code moved into extension/testext.c.
+ * defvar.awk, defvar.ok: Removed.
+ * testext.ok: Updated.
+
+2015-03-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * id.ok: Update after fixes in code.
+
+2015-03-24 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add exitval3.awk and exitval3.ok.
+ (BASIC_TESTS): Add new test exitval3.
+ * exitval3.awk, exitval3.ok: New files.
+
+2015-03-17 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * inplace1.ok, inplace2.ok, inplace3.ok: Update error message line
+ numbers to reflect changes to inplace.awk.
+
+2015-03-17 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (mpfrmemok1): New test.
+ * mpfrmemok1.awk, mpfrmemok1.ok: New files.
+
+2015-03-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (fpat4): New test.
+ * fpat4.awk, fpat4.ok: New files.
+
+2015-03-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * nonfatal3.awk, nonfatal3.ok: Adjust for portability.
+ Thanks to Hermann Peifer for the report.
+
+2015-03-06 Arnold D. Robbins <arnold@skeeve.com>
+
+ * charasbytes.awk, ofs1.awk, range1.awk, sortglos.awk,
+ sortglos.in: Remove execute permission.
+
+2015-03-02 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * nonfatal1.awk: Do not print ERRNO, since the value appears to be
+ platform-dependent. Instead, print (ERRNO != "").
+ * nonfatal1.ok: Update.
+
+2015-02-28 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add nonfatal3.{awk,ok}.
+ (GAWK_EXT_TESTS): Add nonfatal3.
+ * nonfatal1.awk: Replace "ti10/357" with "local:host/25", since
+ "local:host" should be a universally bad hostname due to the
+ invalid ":" character.
+ * nonfatal1.ok: Update.
+ * nonfatal3.{awk,ok}: New test for connecting to a TCP port where
+ nobody is listening.
+
+2015-02-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * nonfatal1.ok: Update after code changes.
+
+2015-02-26 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (EXTRA_DIST): Add profile0.in which got forgotten
+ earlier. Ooops.
+
+2015-02-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (crlf): New test.
+ * crlf.awk, crlf.ok: New files.
+
+2015-02-10 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (profile0): New test.
+ * profile0.awk, profile0.in, profile0.ok: New files.
+
+2015-02-08 Arnold D. Robbins <arnold@skeeve.com>
+
+ * nonfatal1.awk, nonfatal2.awk: String is now "NONFATAL".
+
+2015-02-06 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (nonfatal1, nonfatal2): New tests.
+ * nonfatal1.awk, nonfatal1.ok: New files.
+ * nonfatal2.awk, nonfatal2.ok: New files.
+
+2015-02-01 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (paramasfunc1, paramasfunc2): Now need --posix.
+ * indirectcall.awk: Restore after code change.
+
+2015-01-30 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (callparam, paramasfunc1, paramasfunc2): New tests.
+ * callparam.awk, callparam.ok: New files.
+ * paramasfunc1.awk, paramasfunc1.ok: New files.
+ * paramasfunc2.awk, paramasfunc2.ok: New files.
+ * exit.sh, indirectcall.awk: Update after code change.
+
+2015-01-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (profile8): Actually add the test and the files.
+ Thanks to Hermann Peifer for the report.
+
+2015-01-16 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (profile8): New test.
+ * profile8.awk, profile8.ok: New files.
+
+2015-01-14 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (dumpvars): Grep out ENVIRON and PROCINFO since
+ those can be different depending on who runs the test.
+ * dumpvars.ok, id.ok: Updated after code changes.
+
+2015-01-07 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (regexpbrack): New test.
+ * regexpbrack.awk, regexpbrack.in, regexpbrack.ok: New files.
+
+ Unrelated:
+
+ * Makefile.am (printfbad4): New test.
+ * printfbad4.awk, printfbad4.ok: New files.
+
+ Unrelated:
+
+ * testext.ok: Adjust for code changes.
+
+2015-01-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add defvar.awk and defvar.ok.
+ (SHLIB_TESTS): Add defvar.
+ (defvar): New test.
+ * defvar.awk, defvar.ok: New files.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add getfile.awk and getfile.ok.
+ (SHLIB_TESTS): Add getfile.
+ (getfile): New test.
+ * getfile.awk, getfile.ok: New files.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add timeout.awk and timeout.ok.
+ (BASIC_TESTS): Remove errno.
+ (GAWK_EXT_TESTS): Add errno and timeout.
+ * timeout.awk, timeout.ok: New files.
+
+2015-01-05 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Add errno.awk, errno.in, and errno.ok.
+ (BASIC_TESTS): Add errno.
+ (errno): New test.
+ * errno.awk, errno.in, errno.ok: New files.
+
+2014-12-24 Arnold D. Robbins <arnold@skeeve.com>
+
+ * Makefile.am (badbuild): New test.
+ * badbuild.awk, badbuild.in, badbuild.ok: New files.
+
+2014-12-24 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (check): If tests don't pass, run 'make diffout'
+ and exit 1. Should help distros to notice when they have built
+ gawk incorrectly. (Can you say "Fedora", boys and girls?)
+
+2014-12-12 Arnold D. Robbins <arnold@skeeve.com>
+
+ * profile5.ok: Updated after code changes.
+
2014-11-26 Arnold D. Robbins <arnold@skeeve.com>
* Gentests: Fix gensub call after adding warning.
@@ -10,12 +193,17 @@
* Makefile.am (sortglos): New test.
* sortglos.awk, sortglos.in, sortglos.ok: New files.
+ Thanks to Antonio Columbo.
2014-11-09 Arnold D. Robbins <arnold@skeeve.com>
* mbprintf4.awk: Add record and line number for debugging.
* mpprint4.ok: Adjust.
+2014-11-06 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * testext.ok: Add results from new test_get_file test.
+
2014-11-02 Arnold D. Robbins <arnold@skeeve.com>
* Makefile.am (profile7): New test.
diff --git a/test/Makefile.am b/test/Makefile.am
index a00e011e..b45eaf95 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,7 +1,7 @@
#
# test/Makefile.am --- automake input file for gawk
#
-# Copyright (C) 1988-2014 the Free Software Foundation, Inc.
+# Copyright (C) 1988-2015 the Free Software Foundation, Inc.
#
# This file is part of GAWK, the GNU implementation of the
# AWK Programming Language.
@@ -123,12 +123,17 @@ EXTRA_DIST = \
badargs.ok \
badassign1.awk \
badassign1.ok \
+ badbuild.awk \
+ badbuild.in \
+ badbuild.ok \
beginfile1.awk \
beginfile1.ok \
beginfile2.in \
beginfile2.ok \
beginfile2.sh \
binmode1.ok \
+ callparam.awk \
+ callparam.ok \
charasbytes.awk \
charasbytes.in \
charasbytes.ok \
@@ -164,6 +169,8 @@ EXTRA_DIST = \
concat4.ok \
convfmt.awk \
convfmt.ok \
+ crlf.awk \
+ crlf.ok \
datanonl.awk \
datanonl.in \
datanonl.ok \
@@ -205,6 +212,9 @@ EXTRA_DIST = \
dynlj.ok \
eofsplit.awk \
eofsplit.ok \
+ errno.awk \
+ errno.in \
+ errno.ok \
exit.ok \
exit.sh \
exit2.awk \
@@ -214,6 +224,8 @@ EXTRA_DIST = \
exitval2.awk \
exitval2.ok \
exitval2.w32 \
+ exitval3.awk \
+ exitval3.ok \
fcall_exit.awk \
fcall_exit.ok \
fcall_exit2.awk \
@@ -278,6 +290,8 @@ EXTRA_DIST = \
fpat3.awk \
fpat3.in \
fpat3.ok \
+ fpat4.awk \
+ fpat4.ok \
fpatnull.awk \
fpatnull.in \
fpatnull.ok \
@@ -331,6 +345,8 @@ EXTRA_DIST = \
gensub.ok \
gensub2.awk \
gensub2.ok \
+ getfile.awk \
+ getfile.ok \
getline.awk \
getline.in \
getline.ok \
@@ -420,6 +436,8 @@ EXTRA_DIST = \
include.awk \
include.ok \
include2.ok \
+ indirectbuiltin.awk \
+ indirectbuiltin.ok \
indirectcall.awk \
indirectcall.in \
indirectcall.ok \
@@ -528,6 +546,8 @@ EXTRA_DIST = \
mpfrexprange.ok \
mpfrieee.awk \
mpfrieee.ok \
+ mpfrmemok1.awk \
+ mpfrmemok1.ok \
mpfrnegzero.awk \
mpfrnegzero.ok \
mpfrnr.awk \
@@ -592,6 +612,12 @@ EXTRA_DIST = \
nondec.ok \
nondec2.awk \
nondec2.ok \
+ nonfatal1.awk \
+ nonfatal1.ok \
+ nonfatal2.awk \
+ nonfatal2.ok \
+ nonfatal3.awk \
+ nonfatal3.ok \
nonl.awk \
nonl.ok \
noparms.awk \
@@ -639,6 +665,10 @@ EXTRA_DIST = \
out1.ok \
out2.ok \
out3.ok \
+ paramasfunc1.awk \
+ paramasfunc1.ok \
+ paramasfunc2.awk \
+ paramasfunc2.ok \
paramdup.awk \
paramdup.ok \
paramres.awk \
@@ -689,6 +719,8 @@ EXTRA_DIST = \
printfbad2.ok \
printfbad3.awk \
printfbad3.ok \
+ printfbad4.awk \
+ printfbad4.ok \
printfloat.awk \
printhuge.awk \
printhuge.ok \
@@ -699,6 +731,9 @@ EXTRA_DIST = \
prmreuse.ok \
procinfs.awk \
procinfs.ok \
+ profile0.awk \
+ profile0.in \
+ profile0.ok \
profile2.ok \
profile3.awk \
profile3.ok \
@@ -710,6 +745,8 @@ EXTRA_DIST = \
profile6.ok \
profile7.awk \
profile7.ok \
+ profile8.awk \
+ profile8.ok \
prt1eval.awk \
prt1eval.ok \
prtoeval.awk \
@@ -741,6 +778,9 @@ EXTRA_DIST = \
regeq.awk \
regeq.in \
regeq.ok \
+ regexpbrack.awk \
+ regexpbrack.in \
+ regexpbrack.ok \
regexprange.awk \
regexprange.ok \
reginttrad.awk \
@@ -917,6 +957,8 @@ EXTRA_DIST = \
testext.ok \
time.awk \
time.ok \
+ timeout.awk \
+ timeout.ok \
tradanch.awk \
tradanch.in \
tradanch.ok \
@@ -976,11 +1018,11 @@ BASIC_TESTS = \
arrayref arrymem1 arryref2 arryref3 arryref4 arryref5 arynasty \
arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \
aryprm8 arysubnm asgext awkpath \
- back89 backgsub badassign1 \
- childin clobber closebad clsflnam compare compare2 concat1 concat2 \
+ back89 backgsub badassign1 badbuild \
+ callparam childin clobber closebad clsflnam compare compare2 concat1 concat2 \
concat3 concat4 convfmt \
datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \
- eofsplit exit2 exitval1 exitval2 \
+ eofsplit exit2 exitval1 exitval2 exitval3 \
fcall_exit fcall_exit2 fldchg fldchgnf fnamedat fnarray fnarray2 \
fnaryscl fnasgnm fnmisc fordel forref forsimp fsbs fsrs fsspcoln \
fstabplus funsemnl funsmnam funstack \
@@ -995,10 +1037,11 @@ BASIC_TESTS = \
nlinstr nlstrina noeffect nofile nofmtch noloop1 noloop2 nonl \
noparms nors nulrsend numindex numsubstr \
octsub ofmt ofmta ofmtbig ofmtfidl ofmts ofs1 onlynl opasnidx opasnslf \
+ paramasfunc1 paramasfunc2 \
paramdup paramres paramtyp paramuninitglobal parse1 parsefld parseme \
pcntplus posix2008sub prdupval prec printf0 printf1 prmarscl prmreuse \
prt1eval prtoeval \
- rand randtest range1 rebt8b1 redfilnm regeq regexprange regrange reindops \
+ rand randtest range1 rebt8b1 redfilnm regeq regexpbrack regexprange regrange reindops \
reparse resplit rri1 rs rsnul1nl rsnulbig rsnulbig2 rstest1 rstest2 \
rstest3 rstest4 rstest5 rswhite \
scalar sclforin sclifin sortempty sortglos splitargv splitarr splitdef \
@@ -1015,23 +1058,26 @@ UNIX_TESTS = \
GAWK_EXT_TESTS = \
aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \
backw badargs beginfile1 beginfile2 binmode1 charasbytes \
- colonwarn clos1way dbugeval delsub devfd devfd1 devfd2 dumpvars exit \
- fieldwdth fpat1 fpat2 fpat3 fpatnull fsfwfs funlen \
+ colonwarn clos1way crlf dbugeval delsub devfd devfd1 devfd2 dumpvars errno exit \
+ fieldwdth fpat1 fpat2 fpat3 fpat4 fpatnull fsfwfs funlen \
functab1 functab2 functab3 fwtest fwtest2 fwtest3 \
genpot gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
icasefs icasers id igncdym igncfs ignrcas2 ignrcase \
incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \
- include include2 indirectcall indirectcall2 \
+ include include2 indirectbuiltin indirectcall indirectcall2 \
lint lintold lintwarn \
manyfiles match1 match2 match3 mbstr1 \
nastyparm next nondec nondec2 \
- patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
- profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
+ nonfatal1 nonfatal2 nonfatal3 \
+ patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge procinfs \
+ profile0 profile1 profile2 profile3 profile4 profile5 profile6 profile7 \
+ profile8 pty1 \
rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline rsglstdin rsstart1 \
rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
splitarg4 strftime \
strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \
- symtab7 symtab8 symtab9
+ symtab7 symtab8 symtab9 \
+ timeout
EXTRA_TESTS = inftest regtest
@@ -1039,8 +1085,8 @@ INET_TESTS = inetdayu inetdayt inetechu inetecht
MACHINE_TESTS = double1 double2 fmtspcl intformat
-MPFR_TESTS = mpfrnr mpfrnegzero mpfrrem mpfrrnd mpfrieee mpfrexprange \
- mpfrsort mpfrsqrt mpfrbigint
+MPFR_TESTS = mpfrnr mpfrnegzero mpfrmemok1 mpfrrem mpfrrnd mpfrieee \
+ mpfrexprange mpfrsort mpfrsqrt mpfrbigint
LOCALE_CHARSET_TESTS = \
asort asorti backbigs1 backsmalls1 backsmalls2 \
@@ -1048,7 +1094,7 @@ LOCALE_CHARSET_TESTS = \
mbprintf1 mbprintf2 mbprintf3 mbprintf4 rebt8b2 rtlenmb sort1 sprintfc
SHLIB_TESTS = \
- fnmatch filefuncs fork fork2 fts functab4 inplace1 inplace2 inplace3 \
+ fnmatch filefuncs fork fork2 fts functab4 getfile inplace1 inplace2 inplace3 \
ordchr ordchr2 readdir readfile readfile2 revout revtwoway rwarray testext time
# List of the tests which should be run with --lint option:
@@ -1102,7 +1148,7 @@ check: msg \
charset-msg-start charset-tests charset-msg-end \
shlib-msg-start shlib-tests shlib-msg-end \
mpfr-msg-start mpfr-tests mpfr-msg-end
- @$(MAKE) pass-fail
+ @$(MAKE) pass-fail || { $(MAKE) diffout; exit 1; }
basic: $(BASIC_TESTS)
@@ -1307,6 +1353,11 @@ devfd::
@$(AWK) 1 /dev/fd/4 /dev/fd/5 4<"$(srcdir)"/devfd.in4 5<"$(srcdir)"/devfd.in5 >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+errno:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fflush::
@echo $@
@"$(srcdir)"/fflush.sh >_$@
@@ -1673,7 +1724,13 @@ beginfile2:
dumpvars::
@echo $@
@AWKPATH="$(srcdir)" $(AWK) --dump-variables 1 < "$(srcdir)"/$@.in >/dev/null 2>&1 || echo EXIT CODE: $$? >>_$@
- @mv awkvars.out _$@
+ @grep -v ENVIRON < awkvars.out | grep -v PROCINFO > _$@; rm awkvars.out
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+profile0:
+ @echo $@
+ @$(AWK) --profile=ap-$@.out -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in > /dev/null
+ @sed 1,2d < ap-$@.out > _$@; rm ap-$@.out
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
profile1:
@@ -1719,6 +1776,11 @@ profile7:
@sed 1,2d < ap-$@.out > _$@; rm ap-$@.out
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+profile8:
+ @echo $@
+ @$(AWK) --pretty-print=_$@ -f "$(srcdir)"/$@.awk > /dev/null
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
posix2008sub:
@echo $@
@$(AWK) --posix -f "$(srcdir)"/$@.awk > _$@ 2>&1
@@ -1785,6 +1847,11 @@ mpfrrem:
@$(AWK) -M -f "$(srcdir)"/$@.awk > _$@ 2>&1
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+mpfrmemok1:
+ @echo $@
+ @$(AWK) -p/dev/stdout -M -f "$(srcdir)"/$@.awk 2>&1 | sed 1d > _$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
jarebug::
@echo $@
@"$(srcdir)"/$@.sh "$(AWKPROG)" "$(srcdir)"/$@.awk "$(srcdir)"/$@.in "_$@"
@@ -1884,6 +1951,11 @@ testext::
@$(AWK) -f ./testext.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ testext.awk
+getfile:
+ @echo $@
+ @$(AWK) -v TESTEXT_QUIET=1 -ltestext -f $(srcdir)/$@.awk $(srcdir)/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
readdir:
@if [ "`uname`" = Linux ] && [ "`stat -f . 2>/dev/null | awk 'NR == 2 { print $$NF }'`" = nfs ]; then \
echo This test may fail on GNU/Linux systems when run on an NFS filesystem.; \
@@ -2003,6 +2075,15 @@ genpot:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk --gen-pot >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+paramasfunc1::
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --posix >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+paramasfunc2::
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --posix >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
# Targets generated for other tests:
include Maketests
diff --git a/test/Makefile.in b/test/Makefile.in
index 93a989b5..8053df5c 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -17,7 +17,7 @@
#
# test/Makefile.am --- automake input file for gawk
#
-# Copyright (C) 1988-2014 the Free Software Foundation, Inc.
+# Copyright (C) 1988-2015 the Free Software Foundation, Inc.
#
# This file is part of GAWK, the GNU implementation of the
# AWK Programming Language.
@@ -37,7 +37,17 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -100,9 +110,6 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-DIST_COMMON = $(srcdir)/Maketests $(srcdir)/Makefile.in \
- $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs ChangeLog \
- README
subdir = test
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
@@ -118,6 +125,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -142,6 +150,8 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Maketests \
+ $(top_srcdir)/mkinstalldirs ChangeLog README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -370,12 +380,17 @@ EXTRA_DIST = \
badargs.ok \
badassign1.awk \
badassign1.ok \
+ badbuild.awk \
+ badbuild.in \
+ badbuild.ok \
beginfile1.awk \
beginfile1.ok \
beginfile2.in \
beginfile2.ok \
beginfile2.sh \
binmode1.ok \
+ callparam.awk \
+ callparam.ok \
charasbytes.awk \
charasbytes.in \
charasbytes.ok \
@@ -411,6 +426,8 @@ EXTRA_DIST = \
concat4.ok \
convfmt.awk \
convfmt.ok \
+ crlf.awk \
+ crlf.ok \
datanonl.awk \
datanonl.in \
datanonl.ok \
@@ -452,6 +469,9 @@ EXTRA_DIST = \
dynlj.ok \
eofsplit.awk \
eofsplit.ok \
+ errno.awk \
+ errno.in \
+ errno.ok \
exit.ok \
exit.sh \
exit2.awk \
@@ -461,6 +481,8 @@ EXTRA_DIST = \
exitval2.awk \
exitval2.ok \
exitval2.w32 \
+ exitval3.awk \
+ exitval3.ok \
fcall_exit.awk \
fcall_exit.ok \
fcall_exit2.awk \
@@ -525,6 +547,8 @@ EXTRA_DIST = \
fpat3.awk \
fpat3.in \
fpat3.ok \
+ fpat4.awk \
+ fpat4.ok \
fpatnull.awk \
fpatnull.in \
fpatnull.ok \
@@ -578,6 +602,8 @@ EXTRA_DIST = \
gensub.ok \
gensub2.awk \
gensub2.ok \
+ getfile.awk \
+ getfile.ok \
getline.awk \
getline.in \
getline.ok \
@@ -667,6 +693,8 @@ EXTRA_DIST = \
include.awk \
include.ok \
include2.ok \
+ indirectbuiltin.awk \
+ indirectbuiltin.ok \
indirectcall.awk \
indirectcall.in \
indirectcall.ok \
@@ -775,6 +803,8 @@ EXTRA_DIST = \
mpfrexprange.ok \
mpfrieee.awk \
mpfrieee.ok \
+ mpfrmemok1.awk \
+ mpfrmemok1.ok \
mpfrnegzero.awk \
mpfrnegzero.ok \
mpfrnr.awk \
@@ -839,6 +869,12 @@ EXTRA_DIST = \
nondec.ok \
nondec2.awk \
nondec2.ok \
+ nonfatal1.awk \
+ nonfatal1.ok \
+ nonfatal2.awk \
+ nonfatal2.ok \
+ nonfatal3.awk \
+ nonfatal3.ok \
nonl.awk \
nonl.ok \
noparms.awk \
@@ -886,6 +922,10 @@ EXTRA_DIST = \
out1.ok \
out2.ok \
out3.ok \
+ paramasfunc1.awk \
+ paramasfunc1.ok \
+ paramasfunc2.awk \
+ paramasfunc2.ok \
paramdup.awk \
paramdup.ok \
paramres.awk \
@@ -936,6 +976,8 @@ EXTRA_DIST = \
printfbad2.ok \
printfbad3.awk \
printfbad3.ok \
+ printfbad4.awk \
+ printfbad4.ok \
printfloat.awk \
printhuge.awk \
printhuge.ok \
@@ -946,6 +988,9 @@ EXTRA_DIST = \
prmreuse.ok \
procinfs.awk \
procinfs.ok \
+ profile0.awk \
+ profile0.in \
+ profile0.ok \
profile2.ok \
profile3.awk \
profile3.ok \
@@ -957,6 +1002,8 @@ EXTRA_DIST = \
profile6.ok \
profile7.awk \
profile7.ok \
+ profile8.awk \
+ profile8.ok \
prt1eval.awk \
prt1eval.ok \
prtoeval.awk \
@@ -988,6 +1035,9 @@ EXTRA_DIST = \
regeq.awk \
regeq.in \
regeq.ok \
+ regexpbrack.awk \
+ regexpbrack.in \
+ regexpbrack.ok \
regexprange.awk \
regexprange.ok \
reginttrad.awk \
@@ -1164,6 +1214,8 @@ EXTRA_DIST = \
testext.ok \
time.awk \
time.ok \
+ timeout.awk \
+ timeout.ok \
tradanch.awk \
tradanch.in \
tradanch.ok \
@@ -1222,11 +1274,11 @@ BASIC_TESTS = \
arrayref arrymem1 arryref2 arryref3 arryref4 arryref5 arynasty \
arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \
aryprm8 arysubnm asgext awkpath \
- back89 backgsub badassign1 \
- childin clobber closebad clsflnam compare compare2 concat1 concat2 \
+ back89 backgsub badassign1 badbuild \
+ callparam childin clobber closebad clsflnam compare compare2 concat1 concat2 \
concat3 concat4 convfmt \
datanonl defref delargv delarpm2 delarprm delfunc dfamb1 dfastress dynlj \
- eofsplit exit2 exitval1 exitval2 \
+ eofsplit exit2 exitval1 exitval2 exitval3 \
fcall_exit fcall_exit2 fldchg fldchgnf fnamedat fnarray fnarray2 \
fnaryscl fnasgnm fnmisc fordel forref forsimp fsbs fsrs fsspcoln \
fstabplus funsemnl funsmnam funstack \
@@ -1241,10 +1293,11 @@ BASIC_TESTS = \
nlinstr nlstrina noeffect nofile nofmtch noloop1 noloop2 nonl \
noparms nors nulrsend numindex numsubstr \
octsub ofmt ofmta ofmtbig ofmtfidl ofmts ofs1 onlynl opasnidx opasnslf \
+ paramasfunc1 paramasfunc2 \
paramdup paramres paramtyp paramuninitglobal parse1 parsefld parseme \
pcntplus posix2008sub prdupval prec printf0 printf1 prmarscl prmreuse \
prt1eval prtoeval \
- rand randtest range1 rebt8b1 redfilnm regeq regexprange regrange reindops \
+ rand randtest range1 rebt8b1 redfilnm regeq regexpbrack regexprange regrange reindops \
reparse resplit rri1 rs rsnul1nl rsnulbig rsnulbig2 rstest1 rstest2 \
rstest3 rstest4 rstest5 rswhite \
scalar sclforin sclifin sortempty sortglos splitargv splitarr splitdef \
@@ -1261,29 +1314,32 @@ UNIX_TESTS = \
GAWK_EXT_TESTS = \
aadelete1 aadelete2 aarray1 aasort aasorti argtest arraysort \
backw badargs beginfile1 beginfile2 binmode1 charasbytes \
- colonwarn clos1way dbugeval delsub devfd devfd1 devfd2 dumpvars exit \
- fieldwdth fpat1 fpat2 fpat3 fpatnull fsfwfs funlen \
+ colonwarn clos1way crlf dbugeval delsub devfd devfd1 devfd2 dumpvars errno exit \
+ fieldwdth fpat1 fpat2 fpat3 fpat4 fpatnull fsfwfs funlen \
functab1 functab2 functab3 fwtest fwtest2 fwtest3 \
genpot gensub gensub2 getlndir gnuops2 gnuops3 gnureops \
icasefs icasers id igncdym igncfs ignrcas2 ignrcase \
incdupe incdupe2 incdupe3 incdupe4 incdupe5 incdupe6 incdupe7 \
- include include2 indirectcall indirectcall2 \
+ include include2 indirectbuiltin indirectcall indirectcall2 \
lint lintold lintwarn \
manyfiles match1 match2 match3 mbstr1 \
nastyparm next nondec nondec2 \
- patsplit posix printfbad1 printfbad2 printfbad3 printhuge procinfs \
- profile1 profile2 profile3 profile4 profile5 profile6 profile7 pty1 \
+ nonfatal1 nonfatal2 nonfatal3 \
+ patsplit posix printfbad1 printfbad2 printfbad3 printfbad4 printhuge procinfs \
+ profile0 profile1 profile2 profile3 profile4 profile5 profile6 profile7 \
+ profile8 pty1 \
rebuf regnul1 regnul2 regx8bit reginttrad reint reint2 rsgetline rsglstdin rsstart1 \
rsstart2 rsstart3 rstest6 shadow sortfor sortu split_after_fpat \
splitarg4 strftime \
strtonum switch2 symtab1 symtab2 symtab3 symtab4 symtab5 symtab6 \
- symtab7 symtab8 symtab9
+ symtab7 symtab8 symtab9 \
+ timeout
EXTRA_TESTS = inftest regtest
INET_TESTS = inetdayu inetdayt inetechu inetecht
MACHINE_TESTS = double1 double2 fmtspcl intformat
-MPFR_TESTS = mpfrnr mpfrnegzero mpfrrem mpfrrnd mpfrieee mpfrexprange \
- mpfrsort mpfrsqrt mpfrbigint
+MPFR_TESTS = mpfrnr mpfrnegzero mpfrmemok1 mpfrrem mpfrrnd mpfrieee \
+ mpfrexprange mpfrsort mpfrsqrt mpfrbigint
LOCALE_CHARSET_TESTS = \
asort asorti backbigs1 backsmalls1 backsmalls2 \
@@ -1291,7 +1347,7 @@ LOCALE_CHARSET_TESTS = \
mbprintf1 mbprintf2 mbprintf3 mbprintf4 rebt8b2 rtlenmb sort1 sprintfc
SHLIB_TESTS = \
- fnmatch filefuncs fork fork2 fts functab4 inplace1 inplace2 inplace3 \
+ fnmatch filefuncs fork fork2 fts functab4 getfile inplace1 inplace2 inplace3 \
ordchr ordchr2 readdir readfile readfile2 revout revtwoway rwarray testext time
@@ -1350,7 +1406,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Maketests $(am__configur
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu test/Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -1359,6 +1414,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
+$(srcdir)/Maketests $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -1517,6 +1573,8 @@ uninstall-am:
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
pdf-am ps ps-am tags-am uninstall uninstall-am
+.PRECIOUS: Makefile
+
# Message stuff is to make it a little easier to follow.
# Make the pass-fail last and dependent on others to avoid
@@ -1530,7 +1588,7 @@ check: msg \
charset-msg-start charset-tests charset-msg-end \
shlib-msg-start shlib-tests shlib-msg-end \
mpfr-msg-start mpfr-tests mpfr-msg-end
- @$(MAKE) pass-fail
+ @$(MAKE) pass-fail || { $(MAKE) diffout; exit 1; }
basic: $(BASIC_TESTS)
@@ -1733,6 +1791,11 @@ devfd::
@$(AWK) 1 /dev/fd/4 /dev/fd/5 4<"$(srcdir)"/devfd.in4 5<"$(srcdir)"/devfd.in5 >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+errno:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fflush::
@echo $@
@"$(srcdir)"/fflush.sh >_$@
@@ -2099,7 +2162,13 @@ beginfile2:
dumpvars::
@echo $@
@AWKPATH="$(srcdir)" $(AWK) --dump-variables 1 < "$(srcdir)"/$@.in >/dev/null 2>&1 || echo EXIT CODE: $$? >>_$@
- @mv awkvars.out _$@
+ @grep -v ENVIRON < awkvars.out | grep -v PROCINFO > _$@; rm awkvars.out
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+profile0:
+ @echo $@
+ @$(AWK) --profile=ap-$@.out -f "$(srcdir)"/$@.awk "$(srcdir)"/$@.in > /dev/null
+ @sed 1,2d < ap-$@.out > _$@; rm ap-$@.out
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
profile1:
@@ -2144,6 +2213,11 @@ profile7:
@sed 1,2d < ap-$@.out > _$@; rm ap-$@.out
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+profile8:
+ @echo $@
+ @$(AWK) --pretty-print=_$@ -f "$(srcdir)"/$@.awk > /dev/null
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
posix2008sub:
@echo $@
@$(AWK) --posix -f "$(srcdir)"/$@.awk > _$@ 2>&1
@@ -2210,6 +2284,11 @@ mpfrrem:
@$(AWK) -M -f "$(srcdir)"/$@.awk > _$@ 2>&1
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+mpfrmemok1:
+ @echo $@
+ @$(AWK) -p/dev/stdout -M -f "$(srcdir)"/$@.awk 2>&1 | sed 1d > _$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
jarebug::
@echo $@
@"$(srcdir)"/$@.sh "$(AWKPROG)" "$(srcdir)"/$@.awk "$(srcdir)"/$@.in "_$@"
@@ -2309,6 +2388,11 @@ testext::
@$(AWK) -f ./testext.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ testext.awk
+getfile:
+ @echo $@
+ @$(AWK) -v TESTEXT_QUIET=1 -ltestext -f $(srcdir)/$@.awk $(srcdir)/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
readdir:
@if [ "`uname`" = Linux ] && [ "`stat -f . 2>/dev/null | awk 'NR == 2 { print $$NF }'`" = nfs ]; then \
echo This test may fail on GNU/Linux systems when run on an NFS filesystem.; \
@@ -2426,6 +2510,16 @@ genpot:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk --gen-pot >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+paramasfunc1::
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --posix >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+paramasfunc2::
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk --posix >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
Gt-dummy:
# file Maketests, generated from Makefile.am by the Gentests program
addcomma:
@@ -2553,6 +2647,16 @@ badassign1:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+badbuild:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+callparam:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
childin:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -2648,6 +2752,11 @@ exitval2:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+exitval3:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fcall_exit:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3120,6 +3229,11 @@ regeq:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+regexpbrack:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
regexprange:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3375,6 +3489,11 @@ backw:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+crlf:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
delsub:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3400,6 +3519,11 @@ fpat3:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+fpat4:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fpatnull:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3510,6 +3634,11 @@ include:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+indirectbuiltin:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
indirectcall:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3560,6 +3689,21 @@ nondec:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+nonfatal1:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+nonfatal2:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+nonfatal3:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
patsplit:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3580,6 +3724,11 @@ printfbad3:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+printfbad4:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
procinfs:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -3680,6 +3829,11 @@ symtab7:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+timeout:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
double1:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/Maketests b/test/Maketests
index 85c13d5d..219d592d 100644
--- a/test/Maketests
+++ b/test/Maketests
@@ -125,6 +125,16 @@ badassign1:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+badbuild:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+callparam:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
childin:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -220,6 +230,11 @@ exitval2:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+exitval3:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fcall_exit:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -692,6 +707,11 @@ regeq:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+regexpbrack:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
regexprange:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -947,6 +967,11 @@ backw:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+crlf:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
delsub:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -972,6 +997,11 @@ fpat3:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+fpat4:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
fpatnull:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -1082,6 +1112,11 @@ include:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+indirectbuiltin:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
indirectcall:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -1132,6 +1167,21 @@ nondec:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+nonfatal1:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+nonfatal2:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
+nonfatal3:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
patsplit:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -1152,6 +1202,11 @@ printfbad3:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+printfbad4:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
procinfs:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@@ -1252,6 +1307,11 @@ symtab7:
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
@-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+timeout:
+ @echo $@
+ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
double1:
@echo $@
@AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
diff --git a/test/badbuild.awk b/test/badbuild.awk
new file mode 100644
index 00000000..12a6caeb
--- /dev/null
+++ b/test/badbuild.awk
@@ -0,0 +1,6 @@
+$1 == $2 == $3 {
+ print "Gawk was built incorrectly."
+ print "Use bison, not byacc or something else!"
+ print "(Really, why aren't you using the awkgram.c in the distribution?)"
+ exit 42
+}
diff --git a/test/badbuild.in b/test/badbuild.in
new file mode 100644
index 00000000..560711d4
--- /dev/null
+++ b/test/badbuild.in
@@ -0,0 +1 @@
+a a 1
diff --git a/test/badbuild.ok b/test/badbuild.ok
new file mode 100644
index 00000000..6d60f5a9
--- /dev/null
+++ b/test/badbuild.ok
@@ -0,0 +1,3 @@
+gawk: badbuild.awk:1: $1 == $2 == $3 {
+gawk: badbuild.awk:1: ^ syntax error
+EXIT CODE: 1
diff --git a/test/callparam.awk b/test/callparam.awk
new file mode 100644
index 00000000..b925db01
--- /dev/null
+++ b/test/callparam.awk
@@ -0,0 +1,6 @@
+BEGIN { f() }
+
+function f( a, b)
+{
+ a = b()
+}
diff --git a/test/callparam.ok b/test/callparam.ok
new file mode 100644
index 00000000..00a027e8
--- /dev/null
+++ b/test/callparam.ok
@@ -0,0 +1,2 @@
+gawk: callparam.awk:5: error: attempt to use non-function `b' in function call
+EXIT CODE: 1
diff --git a/test/charasbytes.awk b/test/charasbytes.awk
index feb195c8..feb195c8 100755..100644
--- a/test/charasbytes.awk
+++ b/test/charasbytes.awk
diff --git a/test/crlf.awk b/test/crlf.awk
new file mode 100644
index 00000000..79be9eb6
--- /dev/null
+++ b/test/crlf.awk
@@ -0,0 +1,11 @@
+BEGIN {
+ print \
+ "hi there"
+ print "hello \
+world"
+ if ("foo" ~ /fo\
+o/)
+ print "matches"
+ else
+ print "does not match!"
+}
diff --git a/test/crlf.ok b/test/crlf.ok
new file mode 100644
index 00000000..0ba071b5
--- /dev/null
+++ b/test/crlf.ok
@@ -0,0 +1,3 @@
+hi there
+hello world
+matches
diff --git a/test/errno.awk b/test/errno.awk
new file mode 100644
index 00000000..bcb77614
--- /dev/null
+++ b/test/errno.awk
@@ -0,0 +1,10 @@
+BEGIN {
+ # check that PROCINFO["errno"] is working properly
+ getline
+ if (close(FILENAME)) {
+ print "Error `" ERRNO "' closing input file"
+ print "errno =", PROCINFO["errno"]
+ }
+ getline < (FILENAME "/bogus")
+ print (PROCINFO["errno"] > 0), ERRNO
+}
diff --git a/test/errno.in b/test/errno.in
new file mode 100644
index 00000000..a92d664b
--- /dev/null
+++ b/test/errno.in
@@ -0,0 +1,3 @@
+line 1
+line 2
+line 3
diff --git a/test/errno.ok b/test/errno.ok
new file mode 100644
index 00000000..181afdaf
--- /dev/null
+++ b/test/errno.ok
@@ -0,0 +1,3 @@
+Error `close of redirection that was never opened' closing input file
+errno = 0
+1 Not a directory
diff --git a/test/exit.sh b/test/exit.sh
index 9510dcdc..3922f83c 100755
--- a/test/exit.sh
+++ b/test/exit.sh
@@ -30,7 +30,7 @@ x='function f(){ exit}; BEGINFILE {f()}; NR>1{ f()}; END{print NR}'
$AWK 'BEGIN { print "a\nb" }' | $AWK "$x"
echo "-- 5"
-y='function strip(f) { sub(/.*\//, "", f); return f };'
+y='function strip(val) { sub(/.*\//, "", val); return val };'
x='BEGINFILE{if(++i==1) exit;}; END{print i, strip(FILENAME)}'
$AWK "$y$x" /dev/null $0
diff --git a/test/exitval3.awk b/test/exitval3.awk
new file mode 100644
index 00000000..33e8c433
--- /dev/null
+++ b/test/exitval3.awk
@@ -0,0 +1,2 @@
+BEGIN { exit 42 }
+END { exit }
diff --git a/test/exitval3.ok b/test/exitval3.ok
new file mode 100644
index 00000000..20f64b8c
--- /dev/null
+++ b/test/exitval3.ok
@@ -0,0 +1 @@
+EXIT CODE: 42
diff --git a/test/fpat4.awk b/test/fpat4.awk
new file mode 100644
index 00000000..79cd6a7f
--- /dev/null
+++ b/test/fpat4.awk
@@ -0,0 +1,105 @@
+BEGIN {
+ false = 0
+ true = 1
+
+ fpat[1] = "([^,]*)|(\"[^\"]+\")"
+ fpat[2] = fpat[1]
+ fpat[3] = fpat[1]
+ fpat[4] = "aa+"
+ fpat[5] = fpat[4]
+ fpat[6] = "[a-z]"
+
+ data[1] = "Robbins,,Arnold,"
+ data[2] = "Smith,,\"1234 A Pretty Place, NE\",Sometown,NY,12345-6789,USA"
+ data[3] = "Robbins,Arnold,\"1234 A Pretty Place, NE\",Sometown,NY,12345-6789,USA"
+ data[4] = "bbbaaacccdddaaaaaqqqq"
+ data[5] = "bbbaaacccdddaaaaaqqqqa" # should get trailing qqqa
+ data[6] = "aAbBcC"
+
+ for (i = 1; i in data; i++) {
+ printf("Splitting: <%s>\n", data[i])
+ n = mypatsplit(data[i], fields, fpat[i], seps)
+ m = patsplit(data[i], fields2, fpat[i], seps2)
+ print "n =", n, "m =", m
+ if (n != m) {
+ printf("ERROR: counts wrong!\n") > "/dev/stderr"
+ exit 1
+ }
+ for (j = 1; j <= n; j++) {
+ printf("fields[%d] = <%s>\tfields2[%d] = <%s>\n", j, fields[j], j, fields2[j])
+ if (fields[j] != fields2[j]) {
+ printf("ERROR: data %d, field %d mismatch!\n", i, j) > "/dev/stderr"
+ exit 1
+ }
+ }
+ for (j = 0; j in seps; j++) {
+ printf("seps[%d] = <%s>\tseps2[%d] = <%s>\n", j, seps[j], j, seps2[j])
+ if (seps[j] != seps2[j]) {
+ printf("ERROR: data %d, separator %d mismatch!\n", i, j) > "/dev/stderr"
+ exit 1
+ }
+ }
+ }
+}
+
+function mypatsplit(string, array, pattern, seps,
+ eosflag, non_empty, nf) # locals
+{
+ delete array
+ delete seps
+ if (length(string) == 0)
+ return 0
+
+ eosflag = non_empty = false
+ nf = 0
+ while (match(string, pattern)) {
+ if (RLENGTH > 0) { # easy case
+ non_empty = true
+ if (! (nf in seps)) {
+ if (RSTART == 1) # match at front of string
+ seps[nf] = ""
+ else
+ seps[nf] = substr(string, 1, RSTART - 1)
+ }
+ array[++nf] = substr(string, RSTART, RLENGTH)
+ string = substr(string, RSTART+RLENGTH)
+ if (length(string) == 0)
+ break
+ } else if (non_empty) {
+ # last match was non-empty, and at the
+ # current character we get a zero length match,
+ # which we don't want, so skip over it
+ non_empty = false
+ seps[nf] = substr(string, 1, 1)
+ string = substr(string, 2)
+ } else {
+ # 0 length match
+ if (! (nf in seps)) {
+ if (RSTART == 1)
+ seps[nf] = ""
+ else
+ seps[nf] = substr(string, 1, RSTART - 1)
+ }
+ array[++nf] = ""
+ if (! non_empty && ! eosflag) { # prev was empty
+ seps[nf] = substr(string, 1, 1)
+ }
+ if (RSTART == 1) {
+ string = substr(string, 2)
+ } else {
+ string = substr(string, RSTART + 1)
+ }
+ non_empty = false
+ }
+ if (length(string) == 0) {
+ if (eosflag)
+ break
+ else
+ eosflag = true
+ }
+ }
+ if (length(string) > 0)
+ seps[nf] = string
+
+ return length(array)
+}
diff --git a/test/fpat4.ok b/test/fpat4.ok
new file mode 100644
index 00000000..b4430aba
--- /dev/null
+++ b/test/fpat4.ok
@@ -0,0 +1,65 @@
+Splitting: <Robbins,,Arnold,>
+n = 4 m = 4
+fields[1] = <Robbins> fields2[1] = <Robbins>
+fields[2] = <> fields2[2] = <>
+fields[3] = <Arnold> fields2[3] = <Arnold>
+fields[4] = <> fields2[4] = <>
+seps[0] = <> seps2[0] = <>
+seps[1] = <,> seps2[1] = <,>
+seps[2] = <,> seps2[2] = <,>
+seps[3] = <,> seps2[3] = <,>
+Splitting: <Smith,,"1234 A Pretty Place, NE",Sometown,NY,12345-6789,USA>
+n = 7 m = 7
+fields[1] = <Smith> fields2[1] = <Smith>
+fields[2] = <> fields2[2] = <>
+fields[3] = <"1234 A Pretty Place, NE"> fields2[3] = <"1234 A Pretty Place, NE">
+fields[4] = <Sometown> fields2[4] = <Sometown>
+fields[5] = <NY> fields2[5] = <NY>
+fields[6] = <12345-6789> fields2[6] = <12345-6789>
+fields[7] = <USA> fields2[7] = <USA>
+seps[0] = <> seps2[0] = <>
+seps[1] = <,> seps2[1] = <,>
+seps[2] = <,> seps2[2] = <,>
+seps[3] = <,> seps2[3] = <,>
+seps[4] = <,> seps2[4] = <,>
+seps[5] = <,> seps2[5] = <,>
+seps[6] = <,> seps2[6] = <,>
+Splitting: <Robbins,Arnold,"1234 A Pretty Place, NE",Sometown,NY,12345-6789,USA>
+n = 7 m = 7
+fields[1] = <Robbins> fields2[1] = <Robbins>
+fields[2] = <Arnold> fields2[2] = <Arnold>
+fields[3] = <"1234 A Pretty Place, NE"> fields2[3] = <"1234 A Pretty Place, NE">
+fields[4] = <Sometown> fields2[4] = <Sometown>
+fields[5] = <NY> fields2[5] = <NY>
+fields[6] = <12345-6789> fields2[6] = <12345-6789>
+fields[7] = <USA> fields2[7] = <USA>
+seps[0] = <> seps2[0] = <>
+seps[1] = <,> seps2[1] = <,>
+seps[2] = <,> seps2[2] = <,>
+seps[3] = <,> seps2[3] = <,>
+seps[4] = <,> seps2[4] = <,>
+seps[5] = <,> seps2[5] = <,>
+seps[6] = <,> seps2[6] = <,>
+Splitting: <bbbaaacccdddaaaaaqqqq>
+n = 2 m = 2
+fields[1] = <aaa> fields2[1] = <aaa>
+fields[2] = <aaaaa> fields2[2] = <aaaaa>
+seps[0] = <bbb> seps2[0] = <bbb>
+seps[1] = <cccddd> seps2[1] = <cccddd>
+seps[2] = <qqqq> seps2[2] = <qqqq>
+Splitting: <bbbaaacccdddaaaaaqqqqa>
+n = 2 m = 2
+fields[1] = <aaa> fields2[1] = <aaa>
+fields[2] = <aaaaa> fields2[2] = <aaaaa>
+seps[0] = <bbb> seps2[0] = <bbb>
+seps[1] = <cccddd> seps2[1] = <cccddd>
+seps[2] = <qqqqa> seps2[2] = <qqqqa>
+Splitting: <aAbBcC>
+n = 3 m = 3
+fields[1] = <a> fields2[1] = <a>
+fields[2] = <b> fields2[2] = <b>
+fields[3] = <c> fields2[3] = <c>
+seps[0] = <> seps2[0] = <>
+seps[1] = <A> seps2[1] = <A>
+seps[2] = <B> seps2[2] = <B>
+seps[3] = <C> seps2[3] = <C>
diff --git a/test/getfile.awk b/test/getfile.awk
new file mode 100644
index 00000000..6ee783f6
--- /dev/null
+++ b/test/getfile.awk
@@ -0,0 +1,35 @@
+function basename(x) {
+ return gensub(/^.*\//, "", 1, x)
+}
+
+BEGIN {
+ print "BEGIN"
+
+ cmd = "echo hello; echo goodbye"
+ rc = get_file(cmd, "<<", -1, res)
+ print "expected error result", rc, ERRNO
+ print "get_file returned", get_file(cmd, "|<", -1, res)
+ print "input_name", basename(res["input_name"])
+ print (cmd | getline x)
+ print x
+
+ # check that calling get_file on "" triggers the BEGINFILE rule
+ print "get_file returned", get_file("", "", -1, res)
+ print "input_name", basename(res["input_name"])
+ print "end BEGIN"
+}
+
+BEGINFILE {
+ printf "BEGINFILE (%s) ERRNO (%s)\n", basename(FILENAME), ERRNO
+}
+
+ENDFILE {
+ printf "ENDFILE (%s) ERRNO (%s)\n", basename(FILENAME), ERRNO
+}
+
+END {
+ print "END"
+ print (cmd | getline x)
+ print x
+ print close(cmd)
+}
diff --git a/test/getfile.ok b/test/getfile.ok
new file mode 100644
index 00000000..92c915f2
--- /dev/null
+++ b/test/getfile.ok
@@ -0,0 +1,17 @@
+BEGIN
+gawk: ./getfile.awk:9: warning: cannot open unrecognized file type `<<' for `echo hello; echo goodbye'
+get_file: get_file(echo hello; echo goodbye, <<, -1) failed
+expected error result 0
+get_file returned 1
+input_name echo hello; echo goodbye
+1
+hello
+BEGINFILE (getfile.awk) ERRNO ()
+get_file returned 1
+input_name getfile.awk
+end BEGIN
+ENDFILE (getfile.awk) ERRNO ()
+END
+1
+goodbye
+0
diff --git a/test/id.ok b/test/id.ok
index 4cb39b32..bd26b473 100644
--- a/test/id.ok
+++ b/test/id.ok
@@ -14,6 +14,7 @@ sprintf -> builtin
ROUNDMODE -> scalar
strftime -> builtin
systime -> builtin
+length -> builtin
and -> builtin
srand -> builtin
FNR -> scalar
@@ -23,7 +24,6 @@ cos -> builtin
TEXTDOMAIN -> scalar
ORS -> scalar
split -> builtin
-div -> builtin
RSTART -> scalar
compl -> builtin
bindtextdomain -> builtin
@@ -62,6 +62,7 @@ sub -> builtin
OFMT -> scalar
RLENGTH -> scalar
substr -> builtin
+intdiv -> builtin
FPAT -> scalar
RS -> scalar
xor -> builtin
@@ -71,3 +72,4 @@ lshift -> builtin
SYMTAB -> array
strtonum -> builtin
toupper -> builtin
+ENVIRON -> array
diff --git a/test/indirectbuiltin.awk b/test/indirectbuiltin.awk
new file mode 100644
index 00000000..4d5291d2
--- /dev/null
+++ b/test/indirectbuiltin.awk
@@ -0,0 +1,371 @@
+function print_result(category, fname, builtin_result, indirect_result)
+{
+ if (builtin_result == indirect_result)
+ printf("%s: %s: pass\n", category, fname)
+ else {
+ printf("%s: %s: fail: builtin: %s \tindirect: %s\n", category, fname,
+ builtin_result, indirect_result)
+ exit 1
+ }
+}
+
+
+BEGIN {
+# math functions
+
+ fun = "and"
+ b1 = and(0x11, 0x01)
+ i1 = @fun(0x11, 0x01)
+ print_result("math", fun, b1, i1)
+
+ fun = "atan2"
+ b1 = atan2(-1, 0)
+ i1 = @fun(-1, 0)
+ print_result("math", fun, b1, i1)
+
+ fun = "compl"
+ b1 = compl(0x1111)
+ i1 = @fun(0x1111)
+ print_result("math", fun, b1, i1)
+
+ fun = "cos"
+ b1 = cos(3.1415927 / 4)
+ i1 = @fun(3.1415927 / 4)
+ print_result("math", fun, b1, i1)
+
+ fun = "exp"
+ b1 = exp(2)
+ i1 = @fun(2)
+ print_result("math", fun, b1, i1)
+
+ fun = "int"
+ b1 = int(3.1415927)
+ i1 = @fun(3.1415927)
+ print_result("math", fun, b1, i1)
+
+ fun = "log"
+ b1 = log(10)
+ i1 = @fun(10)
+ print_result("math", fun, b1, i1)
+
+ fun = "lshift"
+ b1 = lshift(1, 2)
+ i1 = @fun(1, 2)
+ print_result("math", fun, b1, i1)
+
+ fun = "or"
+ b1 = or(0x10, 0x01)
+ i1 = @fun(0x10, 0x01)
+ print_result("math", fun, b1, i1)
+
+ fun = "rand"
+ srand(1)
+ b1 = rand();
+ srand(1)
+ i1 = @fun()
+ print_result("math", fun, b1, i1)
+
+ fun = "rshift"
+ b1 = rshift(0x10, 1)
+ i1 = @fun(0x10, 1)
+ print_result("math", fun, b1, i1)
+
+ fun = "sin"
+ b1 = sin(3.1415927 / 4)
+ i1 = @fun(3.1415927 / 4)
+ print_result("math", fun, b1, i1)
+
+ fun = "sqrt"
+ b1 = sqrt(2)
+ i1 = @fun(2)
+ print_result("math", fun, b1, i1)
+
+ srand()
+ fun = "srand"
+ b1 = srand()
+ i1 = @fun()
+ print_result("math", fun, b1, i1)
+
+ fun = "xor"
+ b1 = xor(0x11, 0x01)
+ i1 = @fun(0x11, 0x01)
+ print_result("math", fun, b1, i1)
+
+# string functions
+
+ fun = "gensub"
+ b1 = gensub("f", "q", "g", "ff11bb")
+ i1 = @fun("f", "q", "g", "ff11bb")
+ print_result("string", fun, b1, i1)
+
+ fun = "gsub"
+ $0 = "ff11bb"
+ b1 = gsub("f", "q")
+ b2 = $0
+ $0 = "ff11bb"
+ i1 = @fun("f", "q")
+ i2 = $0
+ print_result("string", fun, b1, i1)
+ if (b2 != i2) {
+ printf("string: %s: fail: $0 (%s) != $0 (%s)\n",
+ fun, b2, i2)
+ exit 1
+ }
+
+ fun = "index"
+ b1 = index("hi, how are you", "how")
+ i1 = @fun("hi, how are you", "how")
+ print_result("string", fun, b1, i1)
+
+ fun = "dcgettext"
+ b1 = dcgettext("hello, world")
+ i1 = @fun("hello, world")
+ print_result("string", fun, b1, i1)
+
+ fun = "dcngettext"
+ b1 = dcngettext("hello, world", "howdy", 2)
+ i1 = @fun("hello, world", "howdy", 2)
+ print_result("string", fun, b1, i1)
+
+ fun = "length"
+ b1 = length("hi, how are you")
+ i1 = @fun("hi, how are you")
+ print_result("string", fun, b1, i1)
+
+ fun = "sprintf"
+ b1 = sprintf("%s world", "hello")
+ i1 = @fun("%s world", "hello")
+ print_result("string", fun, b1, i1)
+
+ fun = "strtonum"
+ b1 = strtonum("0xdeadbeef")
+ i1 = @fun("0xdeadbeef")
+ print_result("string", fun, b1, i1)
+
+ fun = "sub"
+ $0 = "ff11bb"
+ b1 = sub("f", "q")
+ b2 = $0
+ $0 = "ff11bb"
+ i1 = @fun("f", "q")
+ i2 = $0
+ print_result("string", fun, b1, i1)
+ if (b2 != i2) {
+ printf("string: %s: fail: $0 (%s) != $0 (%s)\n",
+ fun, b2, i2)
+ exit 1
+ }
+
+ fun = "substr"
+ b1 = substr("0xdeadbeef", 7, 4)
+ i1 = @fun("0xdeadbeef", 7, 4)
+ print_result("string", fun, b1, i1)
+
+ fun = "tolower"
+ b1 = tolower("0xDeAdBeEf")
+ i1 = @fun("0xDeAdBeEf")
+ print_result("string", fun, b1, i1)
+
+ fun = "toupper"
+ b1 = toupper("0xDeAdBeEf")
+ i1 = @fun("0xDeAdBeEf")
+ print_result("string", fun, b1, i1)
+
+# time functions
+
+ fun = "mktime"
+ b1 = mktime("1990 02 11 12 00 00")
+ i1 = @fun("1990 02 11 12 00 00")
+ print_result("time", fun, b1, i1)
+
+ then = b1
+ fun = "strftime"
+ b1 = strftime(PROCINFO["strftime"], then)
+ i1 = @fun(PROCINFO["strftime"], then)
+ print_result("time", fun, b1, i1)
+
+ fun = "systime"
+ b1 = systime()
+ i1 = @fun()
+ print_result("time", fun, b1, i1)
+
+# regexp functions
+
+ fun = "match"
+ b1 = match("o+", "fooob")
+ rstart = RSTART
+ rlength = RLENGTH
+ i1 = @fun("o+", "fooob")
+ print_result("regexp", fun, b1, i1)
+ if (rstart != RSTART) {
+ printf("match: failure: biRSTART (%d) != iRSTART (%d)\n",
+ rstart, RSTART)
+ exit 1
+ }
+ if (rlength != RLENGTH) {
+ printf("match: failure: biRLENGTH (%d) != iRLENGTH (%d)\n",
+ rlength, RLENGTH)
+ exit 1
+ }
+
+ ############## start patsplit ##############
+ fun = "patsplit"
+ delete data
+ delete data2
+ delete seps
+ delete seps2
+ b1 = patsplit("a:b:c:d", data, ":", seps)
+ i1 = @fun("a:b:c:d", data2, ":", seps2)
+ print_result("regexp", fun, b1, i1)
+ for (i in data) {
+ if ((! (i in data2)) || data[i] != data2[i]) {
+ printf("patsplit1a: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
+ i, data[i], i, data2[i])
+ exit 1
+ }
+ }
+ for (i in seps) {
+ if ((! (i in seps2)) || seps[i] != seps2[i]) {
+ printf("patsplit1b: fail: builtin seps[%d] (%s) != indirect seps[%d] (%s)\n",
+ i, seps[i], i, seps2[i])
+ exit 1
+ }
+ }
+
+ fun = "patsplit"
+ delete data
+ delete data2
+ b1 = patsplit("a:b:c:d", data, ":")
+ i1 = @fun("a:b:c:d", data2, ":")
+ print_result("regexp", fun, b1, i1)
+ for (i in data) {
+ if ((! (i in data2)) || data[i] != data2[i]) {
+ printf("patsplit2: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
+ i, data[i], i, data2[i])
+ exit 1
+ }
+ }
+
+ fun = "patsplit"
+ delete data
+ delete data2
+ FPAT = "[a-z]+"
+ b1 = patsplit("a b c d", data)
+ i1 = @fun("a b c d", data2)
+ print_result("regexp", fun, b1, i1)
+ for (i in data) {
+ if ((! (i in data2)) || data[i] != data2[i]) {
+ printf("patsplit3: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
+ i, data[i], i, data2[i])
+ exit 1
+ }
+ }
+ ############## end patsplit ##############
+
+ ############## start split ##############
+ fun = "split"
+ delete data
+ delete data2
+ delete seps
+ delete seps2
+ b1 = split("a:b:c:d", data, ":", seps)
+ i1 = @fun("a:b:c:d", data2, ":", seps2)
+ print_result("regexp", fun, b1, i1)
+ for (i in data) {
+ if ((! (i in data2)) || data[i] != data2[i]) {
+ printf("split1a: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
+ i, data[i], i, data2[i])
+ exit 1
+ }
+ }
+ for (i in seps) {
+ if ((! (i in seps2)) || seps[i] != seps2[i]) {
+ printf("split1b: fail: builtin seps[%d] (%s) != indirect seps[%d] (%s)\n",
+ i, seps[i], i, seps2[i])
+ exit 1
+ }
+ }
+
+ fun = "split"
+ delete data
+ delete data2
+ b1 = split("a:b:c:d", data, ":")
+ i1 = @fun("a:b:c:d", data2, ":")
+ print_result("regexp", fun, b1, i1)
+ for (i in data) {
+ if ((! (i in data2)) || data[i] != data2[i]) {
+ printf("split2: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
+ i, data[i], i, data2[i])
+ exit 1
+ }
+ }
+
+ fun = "split"
+ delete data
+ delete data2
+ b1 = split("a b c d", data)
+ i1 = @fun("a b c d", data2)
+ print_result("regexp", fun, b1, i1)
+ for (i in data) {
+ if ((! (i in data2)) || data[i] != data2[i]) {
+ printf("split3: fail: builtin data[%d] (%s) != indirect data[%d] (%s)\n",
+ i, data[i], i, data2[i])
+ exit 1
+ }
+ }
+ ############## end split ##############
+
+# array functions
+
+ split("z y x w v u t", data)
+ fun = "asort"
+ asort(data, newdata)
+ @fun(data, newdata2)
+ print_result("array", fun, b1, i1)
+ for (i in newdata) {
+ if (! (i in newdata2) || newdata[i] != newdata2[i]) {
+ print fun ": failed, index", i
+ exit
+ }
+ }
+
+ for (i in data)
+ data2[data[i]] = i
+
+ fun = "asorti"
+ asorti(data2, newdata)
+ @fun(data2, newdata2)
+ print_result("array", fun, b1, i1)
+ for (i in newdata) {
+ if (! (i in newdata2) || newdata[i] != newdata2[i]) {
+ print fun ": failed, index", i, "value", newdata[i], newdata2[i]
+ exit
+ }
+ }
+
+ arr[1] = arr[2] = 42
+ fun = "isarray"
+ b1 = isarray(arr)
+ i1 = @fun(arr)
+ print_result("array", fun, b1, i1)
+
+# i/o functions
+
+ print("hi") > "x1.out"
+ print("hi") > "x2.out"
+
+ fun = "fflush"
+ b1 = fflush("x1.out")
+ i1 = @fun("x2.out")
+ print_result("i/o", fun, b1, i1)
+
+ fun = "close"
+ b1 = close("x1.out")
+ i1 = @fun("x2.out")
+ print_result("i/o", fun, b1, i1)
+
+ fun = "system"
+ b1 = system("rm x1.out")
+ i1 = @fun("rm x2.out")
+ print_result("i/o", fun, b1, i1)
+}
diff --git a/test/indirectbuiltin.ok b/test/indirectbuiltin.ok
new file mode 100644
index 00000000..312bbd76
--- /dev/null
+++ b/test/indirectbuiltin.ok
@@ -0,0 +1,43 @@
+math: and: pass
+math: atan2: pass
+math: compl: pass
+math: cos: pass
+math: exp: pass
+math: int: pass
+math: log: pass
+math: lshift: pass
+math: or: pass
+math: rand: pass
+math: rshift: pass
+math: sin: pass
+math: sqrt: pass
+math: srand: pass
+math: xor: pass
+string: gensub: pass
+string: gsub: pass
+string: index: pass
+string: dcgettext: pass
+string: dcngettext: pass
+string: length: pass
+string: sprintf: pass
+string: strtonum: pass
+string: sub: pass
+string: substr: pass
+string: tolower: pass
+string: toupper: pass
+time: mktime: pass
+time: strftime: pass
+time: systime: pass
+regexp: match: pass
+regexp: patsplit: pass
+regexp: patsplit: pass
+regexp: patsplit: pass
+regexp: split: pass
+regexp: split: pass
+regexp: split: pass
+array: asort: pass
+array: asorti: pass
+array: isarray: pass
+i/o: fflush: pass
+i/o: close: pass
+i/o: system: pass
diff --git a/test/inplace1.ok b/test/inplace1.ok
index ffcb768d..82562235 100644
--- a/test/inplace1.ok
+++ b/test/inplace1.ok
@@ -1,5 +1,5 @@
before
-gawk: inplace:9: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
+gawk: inplace:14: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
stdin start
is bar replaced?
stdin end
diff --git a/test/inplace2.ok b/test/inplace2.ok
index ffcb768d..82562235 100644
--- a/test/inplace2.ok
+++ b/test/inplace2.ok
@@ -1,5 +1,5 @@
before
-gawk: inplace:9: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
+gawk: inplace:14: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
stdin start
is bar replaced?
stdin end
diff --git a/test/inplace3.ok b/test/inplace3.ok
index 7cd960bc..a7b7254f 100644
--- a/test/inplace3.ok
+++ b/test/inplace3.ok
@@ -1,11 +1,11 @@
before
-gawk: inplace:9: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
+gawk: inplace:14: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
stdin start
is bar replaced?
stdin end
after
Before
-gawk: inplace:9: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
+gawk: inplace:14: warning: inplace_begin: disabling in-place editing for invalid FILENAME `-'
stdin start
is foo replaced?
stdin end
diff --git a/test/mpfrmemok1.awk b/test/mpfrmemok1.awk
new file mode 100644
index 00000000..9331a34d
--- /dev/null
+++ b/test/mpfrmemok1.awk
@@ -0,0 +1,7 @@
+# This program tests that -M works with profiling.
+# It does not do anything real, but there should not be glibc memory
+# errors and it should be valgrind-clean too.
+
+BEGIN {
+ v = 0x0100000000000000000000000000000000
+}
diff --git a/test/mpfrmemok1.ok b/test/mpfrmemok1.ok
new file mode 100644
index 00000000..2389a2d5
--- /dev/null
+++ b/test/mpfrmemok1.ok
@@ -0,0 +1,7 @@
+
+ # BEGIN rule(s)
+
+ BEGIN {
+ 1 v = 340282366920938463463374607431768211456
+ }
+
diff --git a/test/mpfrsqrt.awk b/test/mpfrsqrt.awk
index 23a15c92..3fb1f5f8 100644
--- a/test/mpfrsqrt.awk
+++ b/test/mpfrsqrt.awk
@@ -14,7 +14,7 @@ a=11111111111111111111111111111111111111111111111111111111111
print sqrt(a^2)
#print sq_root(a^2)
-# ADR: Added for gawk-4.1-stable which doesn't have built-in div() function
+# ADR: Added for gawk-4.1-stable which doesn't have built-in intdiv() function
if (PROCINFO["version"] < "4.1.60")
print sq_root2(a^2)
else
@@ -27,9 +27,9 @@ function sq_root(x, temp,r,z)
z=0
while (abs(z-temp)>1)
{ z=temp
- div(x,temp,r)
+ intdiv(x,temp,r)
temp=r["quotient"] + temp
- div(temp,2,r)
+ intdiv(temp,2,r)
temp=r["quotient"]
}
return temp
diff --git a/test/nonfatal1.awk b/test/nonfatal1.awk
new file mode 100644
index 00000000..a9228f3a
--- /dev/null
+++ b/test/nonfatal1.awk
@@ -0,0 +1,6 @@
+BEGIN {
+ PROCINFO["NONFATAL"]
+ # note that ":" is not a valid hostname character
+ print |& "/inet/tcp/0/local:host/25"
+ print (ERRNO != "")
+}
diff --git a/test/nonfatal1.ok b/test/nonfatal1.ok
new file mode 100644
index 00000000..51583f2c
--- /dev/null
+++ b/test/nonfatal1.ok
@@ -0,0 +1,2 @@
+gawk: nonfatal1.awk:4: warning: remote host and port information (local:host, 25) invalid
+1
diff --git a/test/nonfatal2.awk b/test/nonfatal2.awk
new file mode 100644
index 00000000..fedbba43
--- /dev/null
+++ b/test/nonfatal2.awk
@@ -0,0 +1,5 @@
+BEGIN {
+ PROCINFO["NONFATAL"] = 1
+ print > "/dev/no/such/file"
+ print ERRNO
+}
diff --git a/test/nonfatal2.ok b/test/nonfatal2.ok
new file mode 100644
index 00000000..ddc88691
--- /dev/null
+++ b/test/nonfatal2.ok
@@ -0,0 +1 @@
+No such file or directory
diff --git a/test/nonfatal3.awk b/test/nonfatal3.awk
new file mode 100644
index 00000000..b2a4ec9e
--- /dev/null
+++ b/test/nonfatal3.awk
@@ -0,0 +1,6 @@
+BEGIN {
+ PROCINFO["NONFATAL"]
+ # valid host but bogus port
+ print |& "/inet/tcp/0/localhost/0"
+ print ERRNO != ""
+}
diff --git a/test/nonfatal3.ok b/test/nonfatal3.ok
new file mode 100644
index 00000000..d00491fd
--- /dev/null
+++ b/test/nonfatal3.ok
@@ -0,0 +1 @@
+1
diff --git a/test/ofs1.awk b/test/ofs1.awk
index 83b3c2a5..83b3c2a5 100755..100644
--- a/test/ofs1.awk
+++ b/test/ofs1.awk
diff --git a/test/paramasfunc1.awk b/test/paramasfunc1.awk
new file mode 100644
index 00000000..b0d06849
--- /dev/null
+++ b/test/paramasfunc1.awk
@@ -0,0 +1,9 @@
+BEGIN{ X() }
+
+function X( abc)
+{
+ abc = "stamp out "
+ print abc abc()
+}
+
+function abc() { return "dark corners" }
diff --git a/test/paramasfunc1.ok b/test/paramasfunc1.ok
new file mode 100644
index 00000000..9ee95116
--- /dev/null
+++ b/test/paramasfunc1.ok
@@ -0,0 +1,3 @@
+gawk: paramasfunc1.awk:6: error: attempt to use non-function `abc' in function call
+gawk: error: function `X': can't use function `abc' as a parameter name
+EXIT CODE: 1
diff --git a/test/paramasfunc2.awk b/test/paramasfunc2.awk
new file mode 100644
index 00000000..849b3d1b
--- /dev/null
+++ b/test/paramasfunc2.awk
@@ -0,0 +1,10 @@
+BEGIN{ X() }
+
+function abc() { return "dark corners" }
+
+function X( abc)
+{
+ abc = "stamp out "
+ print abc abc()
+}
+
diff --git a/test/paramasfunc2.ok b/test/paramasfunc2.ok
new file mode 100644
index 00000000..2cdf4f66
--- /dev/null
+++ b/test/paramasfunc2.ok
@@ -0,0 +1,3 @@
+gawk: paramasfunc2.awk:8: error: attempt to use non-function `abc' in function call
+gawk: error: function `X': can't use function `abc' as a parameter name
+EXIT CODE: 1
diff --git a/test/printfbad4.awk b/test/printfbad4.awk
new file mode 100644
index 00000000..dd9220ae
--- /dev/null
+++ b/test/printfbad4.awk
@@ -0,0 +1,5 @@
+BEGIN {
+ for (i = 1; i <= 10; i++) {
+ printf "%03$*d %2$d \n", 4, 5, i
+ }
+}
diff --git a/test/printfbad4.ok b/test/printfbad4.ok
new file mode 100644
index 00000000..71eed3d6
--- /dev/null
+++ b/test/printfbad4.ok
@@ -0,0 +1,2 @@
+gawk: printfbad4.awk:3: fatal: fatal: must use `count$' on all formats or none
+EXIT CODE: 2
diff --git a/test/profile0.awk b/test/profile0.awk
new file mode 100644
index 00000000..a42e94df
--- /dev/null
+++ b/test/profile0.awk
@@ -0,0 +1 @@
+NR == 1
diff --git a/test/profile0.in b/test/profile0.in
new file mode 100644
index 00000000..7bba8c8e
--- /dev/null
+++ b/test/profile0.in
@@ -0,0 +1,2 @@
+line 1
+line 2
diff --git a/test/profile0.ok b/test/profile0.ok
new file mode 100644
index 00000000..2e3c5728
--- /dev/null
+++ b/test/profile0.ok
@@ -0,0 +1,6 @@
+ # Rule(s)
+
+ 2 NR == 1 { # 1
+ 1 print $0
+ }
+
diff --git a/test/profile5.ok b/test/profile5.ok
index 4c944627..5bf04dcf 100644
--- a/test/profile5.ok
+++ b/test/profile5.ok
@@ -2,8 +2,7 @@ BEGIN {
_addlib("_BASE")
}
-############################################################################
-
+#___________________________________________________________________________________
BEGIN {
BINMODE = "rw"
SUBSEP = "\000"
@@ -24,8 +23,7 @@ BEGIN {
_addlib("_INSTRUC")
}
-#############################################################################
-
+#___________________________________________________________________________________
BEGIN {
_delay_perfmsdelay = 11500
}
@@ -38,19 +36,11 @@ BEGIN {
BEGIN {
}
-###########################################################################
-
-
-
-
-
-
-BEGIN {
+BEGIN { ###########################################################################
_addlib("_EXTFN")
}
-#############################################################################
-
+#___________________________________________________________________________________
BEGIN {
delete _XCHR
delete _ASC
@@ -78,7 +68,6 @@ BEGIN {
_QSTR[_CHR[i]] = _QSTRQ[_CHR[i]]
}
_QSTR["\\"] = "\\\\"
- #; _QSTR["\""]="\\\""
#_____________________________________________________________________________
_CHR["CR"] = "\r"
@@ -117,8 +106,7 @@ BEGIN {
_addlib("_SYSIO")
}
-#############################################################################
-
+#___________________________________________________________________________________
BEGIN {
_SYS_STDCON = "CON"
_CON_WIDTH = (match(_cmd("MODE " _SYS_STDCON " 2>NUL"), /Columns:[ \t]*([0-9]+)/, A) ? strtonum(A[1]) : 80)
@@ -128,8 +116,7 @@ BEGIN {
_addlib("_FILEIO")
}
-#############################################################################
-
+#___________________________________________________________________________________
BEGIN {
if (_SYS_STDOUT == "") {
_SYS_STDOUT = "/dev/stdout"
@@ -151,7 +138,7 @@ BEGIN {
_addlib("_tOBJ")
}
-#############################################################################
+#___________________________________________________________________________________
BEGIN {
_tInBy = "\212._tInBy"
_tgenuid_init()
@@ -183,8 +170,7 @@ BEGIN {
_addlib("_ERRLOG")
}
-#############################################################################
-
+#___________________________________________________________________________________
BEGIN {
if (_gawk_scriptlevel < 1) {
_ERRLOG_TF = 1
@@ -206,11 +192,7 @@ BEGIN {
_shortcut_init()
}
-#########################################################
-
-
-
-BEGIN {
+BEGIN { #########################################################
_addlib("_eXTFN")
}
@@ -219,10 +201,7 @@ BEGIN {
_extfn_init()
}
-############################################################
-
-
-BEGIN {
+BEGIN { ############################################################
_addlib("_sHARE")
}
@@ -231,9 +210,7 @@ BEGIN {
}
BEGIN {
- _addlib("_DS")
- ###############################################################################
-
+ _addlib("_DS") ###############################################################################
_PRODUCT_NAME = "Deployment Solution Control"
_PRODUCT_VERSION = "1.0"
_PRODUCT_COPYRIGHT = "Copyright (C) 2013 by CosumoGEN"
@@ -300,7 +277,29 @@ BEGIN {
_initsys()
}
-############################################################################
+#_________________________________________________________________________________________
+##########################################################################################
+
+
+
+
+
+
+
+#BootDevice BuildNumber BuildType Caption CodeSet CountryCode CreationClassName CSCreationClassName CSDVersion CSName CurrentTimeZone DataExecutionPrevention_32BitApplications DataExecutionPrevention_Available DataExecutionPrevention_Drivers DataExecutionPrevention_SupportPolicy Debug Description Distributed EncryptionLevel ForegroundApplicationBoost FreePhysicalMemory FreeSpaceInPagingFiles FreeVirtualMemory InstallDate LargeSystemCache LastBootUpTime LocalDateTime Locale Manufacturer MaxNumberOfProcesses MaxProcessMemorySize MUILanguages Name NumberOfLicensedUsers NumberOfProcesses NumberOfUsers OperatingSystemSKU Organization OSArchitecture OSLanguage OSProductSuite OSType OtherTypeDescription PAEEnabled PlusProductID PlusVersionNumber Primary ProductType RegisteredUser SerialNumber ServicePackMajorVersion ServicePackMinorVersion SizeStoredInPagingFiles Status SuiteMask SystemDevice SystemDirectory SystemDrive TotalSwapSpaceSize TotalVirtualMemorySize TotalVisibleMemorySize Version WindowsDirectory
+#\Device\HarddiskVolume1 7601 Multiprocessor Free Microsoft Windows Server 2008 R2 Enterprise 1252 1 Win32_OperatingSystem Win32_ComputerSystem Service Pack 1 CPU 180 TRUE TRUE TRUE 3 FALSE FALSE 256 0 6925316 33518716 41134632 20110502192745.000000+180 20130426120425.497469+180 20130510134606.932000+180 0409 Microsoft Corporation -1 8589934464 {"en-US"} Microsoft Windows Server 2008 R2 Enterprise |C:\Windows|\Device\Harddisk0\Partition2 0 116 2 10 64-bit 1033 274 18 TRUE 3 Windows User 55041-507-2389175-84833 1 0 33554432 OK 274 \Device\HarddiskVolume2 C:\Windows\system32 C: 50311020 16758448 6.1.7601 C:\Windows
+
+
+
+
+
+
+
+
+
+
+
+
BEGIN {
a = ENVIRON["EGAWK_CMDLINE"]
@@ -321,13 +320,43 @@ BEGIN {
_END()
}
-########################################################################
-
+#_____________________________________________________________________________
END {
_EXIT()
}
-###############################################################################
+#_______________________________________________________________________
+########################################################################
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
END {
if (_gawk_scriptlevel < 1) {
@@ -339,8 +368,17 @@ END {
}
}
-###############################################################################
-
+##########################################################################################
+# PUBLIC:
+#_____________________________________________________________________________
+# _rFBRO(ptr) - Return ptr of first-bro. [TESTED]
+# If !ptr then returns "".
+#_____________________________________________________________________________
+# _rLBRO(ptr) - Return ptr of last-bro. [TESTED]
+# If !ptr then returns "".
+#_____________________________________________________________________________
+# _rQBRO(ptr) - Returns brothers total quantity. [TESTED]
+# If !ptr then returns "".
END {
if (_gawk_scriptlevel < 1) {
if (! _fileio_notdeltmpflag) {
@@ -350,7 +388,297 @@ END {
}
}
-###############################################################################
+#___________________________________________________________________________________
+####################################################################################
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#___________________________________________________________________________________
+# fn _dirtree(array,pathmask)
+#
+# Return in `array' file tree from pathmask:
+# array["file.filerdne"]="size date time"
+# array["subdir.filerd"]["file.filerdne"]="size date time"
+# array["subdir.filerd"]["file.filerd"][...]
+#
+# The array will be cleared before any action. Function return pathmask w/o ltabspc and rtabspc.
+#___________________________________________________________________________________
+
+
+
+
+
+# OK: change internal function's names to: w\o "_"
+# OK: FLENGTH: should cover r-spcs
+# OK: optimize REXP
+# OK: add new symbols to dir/file names ( ! and + )
+# OK: create _getfilepath()
+# OK: del - conflict with WROOTDIR (do not update it)
+# OK: dir/del - support for filemask ( * and ? )
+# OK: how to define code injections: header\ender; and HANDLERS
+# OK: units in header\ender? conline division...
+# OK: _FILEPATH problem: it will not been defined at the moment when subscript0 starts - at the start TMPRD="_tmp"
+# OK: del: if del("dir\\") - then all ok except it NOT deleted "dir\\" - _del function removed(renamed to __del)
+# OK: tmpdirs: it delete only autotmp dir and only from script0
+# OK: MICROTEST: global testing of filepath (UNC! CORRECT RESULTS! )
+# question about cache: did new just now generated absolute filepath cached in FILECACHE? its seems like NO
+# check _untmp: CONFLICT: if file or dir from autotmp dir will be untmp then it anyway will be deleted; but file or dir from other point never be deleted anyway - so what is the point of untmp?????
+#ERRLOG: _setmpath: warning!!!!!
+
+#___________________________________________________________________________________
+####################################################################################
+# PUBLIC:
+#___________________________________________________________________________________
+#
+# fn _rdfile(_filepath)
+#
+# Read and return data from file specified in _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function read and return data from file. No any changes in data occured.
+# Function use _filerdne function internally. If some syntax error
+# found in _filepath then function return "".
+# If some error occured while reading data from file then fuction return ""
+# and error-text is in ERRNO(and no close-file action will be occured!).
+# If reading data completed successfully then function try to close
+# file and if while closing file some error occured then function
+# returns "" and error-text is in ERRNO.
+# Otherwise function returns readed data.
+#_____________________________________________________________________________
+#
+# fn _wrfile(_filepath,_data)
+#
+# Write data into file specified in _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function write _data to file. No any changes in data occured.
+# Function use _filerdne function internally. If some syntax error
+# found in _filepath then function return "".
+# If some error occured while writing data to file then fuction return ""
+# and error-text is in ERRNO(and no close-file action will be occured!).
+# If writing data completed successfully then function try to close
+# file and if while closing file some error occured then function
+# returns "" and error-text is in ERRNO.
+# Otherwise function returns _filepath(re-processed).
+#___________________________________________________________________________________
+#
+# fn _filepath(_filepath)
+#
+# Return re-processed root-dir-name-ext of _filepath.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _filerdne(_filepath)
+#
+# Return re-processed root-dir-filename of _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function return result only if in _filepath present file-name(name
+# and/or extension) - otherwise its return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _filerdn(_filepath)
+#
+# Return re-processed root-dir-name of _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function return result only if in _filepath present name field -
+# - otherwise its return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _filerd(_filepath)
+#
+# Return re-processed root-dir of _filepath.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _filer(_filepath)
+#
+# Return re-processed root of _filepath.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _filed(_filepath)
+#
+# Return re-processed dir of _filepath.
+# If _filepath=="" then no action occured and return "".
+# There is only one case when dir string can be =="" - when in
+# _filepath specified unmounted drive(MS-format) and from-
+# current-location address used(like Z:file.ext). In this
+# case no rootdir-cache-record will be created.
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+# fn _filene(_filepath)
+#
+# Return re-processed name-ext of _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function return result only if in _filepath present file-name(name
+# and/or extension) - otherwise its return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _filen(_filepath)
+#
+# Return re-processed name of _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function return result only if in _filepath present name field -
+# - otherwise its return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#_____________________________________________________________________________
+#
+# fn _file(_filepath)
+#
+# Return re-processed ext of _filepath.
+# If _filepath=="" then no action occured and return "".
+# Function return result only if in _filepath present ext field -
+# - otherwise its return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+#___________________________________________________________________________________
+#
+# fn _dir(_ARR,_filepathmask)
+#
+# Get file-/folder-list of root-folder of _filepathmask.
+# If _filepathmask=="" then no action occured and return "".
+# _filepathmask can contain symbols like `*' and `?' as like
+# its used in `dir'-shell command.
+# Function gets file-/folder-list of specified root-dir-_filepathmask
+# and return this list in array _ARR - where each element:
+#
+# index - is the _filepath of file-or-folder name-ext
+# value - contains 3 fields separated by " ":
+# 1. =="D" if this is folder
+# ==/[0-9]+/ if this is file - size of file in bytes
+# 2. ==date-of-creation of file or folder
+# 3. ==time-of-creation of file or folder
+#
+# Function returns quantity of items in ARR.
+#___________________________________________________________________________________
+#
+# fn _filexist(_filepath)
+#
+# Test if file or path or drive specified in _filepath is exist.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+# Function returns _filepath if _filepath is exist. Otherwise
+# function return 0.
+#_____________________________________________________________________________
+#
+# fn _filenotexist(_filepath)
+#
+# Test if file or path or drive specified in _filepath is not exist.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+# Function returns 1 if _filepath is not exist. Otherwise function
+# return 0.
+#_____________________________________________________________________________
+#
+# fn _newdir(_filepath)
+#
+# Create path specified in root-dir-_filepath.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+# Function returns root-dir of _filepath.
+#_______________________________________________________________________
+#
+# fn _newdir(_filepath)
+#
+# Create path specified in root-dir-_filepath. If this folder
+# already exist then it will be completely cleared.
+# If _filepath=="" then no action occured and return "".
+# If some syntax error found in _filepath then function return ""
+# (and NO _filepath-cache-record will be created!).
+# Function returns root-dir of _filepath.
+#___________________________________________________________________________________
+#
+# fn _getmpfile(_filepath,_currfilepath)
+#
+# Return ....
+#
+#_____________________________________________________________________________
+#
+# fn _getmpdir(_filepath,_currfilepath)
+#
+# Return ...
+#
+#_____________________________________________________________________________
+#
+# Temporary files folder.
+#
+# Temporary files folder location is defined by _FILEIO_TMPRD.
+# If it wasn't been initialized before program run or not been initialized
+# by ENVIRON["TMPDIR"] then it will defined as the:
+# `current rootdir(stored in _FILEIO_RD)\programname.TMP'
+# In this case if its already exist then it will completely cleared when _FILEIO
+# library initialization processed.
+# And at the program uninitialization processed it will completely
+# cleared if _FILEIO_TMPCLRFLAG is true.
+#___________________________________________________________________________________
+#
+# var _FILEIO_RD (ENVIRON["CD"])
+#
+# This var can be set before running program. It can contain path which
+# will be used as default current dir while program run.
+# If this var is set before program runs - then it will be refreshed by the
+# _filerd it will be used as default current dir while program run.
+# If this var is not set before program runs - then ENVIRON["CD"] can also
+# set up default current dir while program run. If it set before program
+# begin then it will be refreshed by the _filerd - and also writed into
+# _FILEIO_RD.
+# If both _FILEIO_RD and ENVIRON["CD"] are not set before program begins
+# then real current root\dir will be writed into both _FILEIO_RD and
+# ENVIRON["CD"] and it will be used as default current dir while program run.
+#
+#___________________________________________________________________________________
+#
+# var _FILEIO_TMPRD (ENVIRON["TMPRD"])
+#
+# This var can be set before running program. It can contain path which
+# will be used as default temporary files root-folder while program run.
+# If this var is set before program runs - then it will be refreshed by the
+# _filerd - and also writed into ENVIRON["TMPRD"].
+# If this var is not set before program runs - then ENVIRON["TMPRD"] can also
+# set up default temporary files root-folder while program run. If it set
+# before program begin then it will be refreshed by the _filerd - and
+# also writed into _FILEIO_TMPRD.
+# If both _FILEIO_TMPRD and ENVIRON["TMPRD"] are not set before program begins
+# then new folder into path specified by the _FILEIO_RD(after its handling)
+# will be writed into both _FILEIO_TMPRD and ENVIRON["TMPRD"] and it
+# will be used as default temporary files root-folder while program run.
+#___________________________________________________________________________________
+#
+# var _FILEPATH
+#
+# This var contain filepath of working script. It should be setting up externally.
+#
+# var _gawk_scriptlevel
+#___________________________________________________________________________________
+####################################################################################
END {
if (_constatstrln > 0) {
_constat()
@@ -376,7 +704,6 @@ END {
#_______________________________________________________________________
function W(p, p0, p1)
{
- #####################################################
if (isarray(p0)) {
delete p0[p]
if (isarray(p1)) {
@@ -410,7 +737,6 @@ function W(p, p0, p1)
}
##########################################################
-
function _ARR(c, t, P)
{
switch (c) {
@@ -440,7 +766,6 @@ function _ARR(c, t, P)
}
##########################################################
-
function _BASE(c, t, P, A)
{
switch (c) {
@@ -494,7 +819,6 @@ function _BASE(c, t, P, A)
#____________________________________________________________________________
function _DS(c, t, P, a, A)
{
- ######################################################
switch (c) {
case "_lib_CMDLN":
#___________________________________________________________
@@ -520,12 +844,9 @@ function _DS(c, t, P, a, A)
#______________________________________________________________________________________________
function _END()
{
- #################################################################################
-
}
########################################################
-
function _ERRLOG(c, t, P, a, b, A)
{
switch (c) {
@@ -597,12 +918,9 @@ function _ERRLOG(c, t, P, a, b, A)
#______________________________________________________________________________________________
function _EXIT()
{
- ################################################################################
-
}
########################################################
-
function _EXTFN(c, t, P)
{
switch (c) {
@@ -632,7 +950,6 @@ function _EXTFN(c, t, P)
}
#######################################################
-
function _FILEIO(c, t, P, A)
{
switch (c) {
@@ -679,11 +996,9 @@ function _FILEIO(c, t, P, A)
}
}
-############################################################
#_____________________________________________________________________________
function _FILEVER(c, t, P, a, A)
{
- #################################################
switch (c) {
case "_lib_CMDLN":
#___________________________________________________________
@@ -720,13 +1035,10 @@ function _INIT(f)
#___________________________________________________________________________________
function _INITBASE()
{
- ################################################################
-
_egawk_utilpath = ENVIRON["EGAWK_PATH"] "BIN\\UTIL\\"
}
######################################################
-
function _INSTRUC(c, t, P)
{
switch (c) {
@@ -764,7 +1076,6 @@ function _INSTRUC(c, t, P)
#_____________________________________________________________________________
function _N(F, v, p)
{
- ###########################################################
for (p in _UIDS) {
delete _UIDS[p]
return _nN_i0(p, F, v)
@@ -773,7 +1084,6 @@ function _N(F, v, p)
}
#####################################################
-
function _SHORTCUT(c, t, P)
{
switch (c) {
@@ -805,7 +1115,6 @@ function _SHORTCUT(c, t, P)
#______________________________________________________________________________________________
function _START(t, i, A)
{
- #########################################################################
_torexp_init()
test_uid()
return
@@ -915,7 +1224,6 @@ function _START(t, i, A)
}
#########################################################
-
function _SYSIO(c, t, P)
{
switch (c) {
@@ -969,7 +1277,6 @@ function _W(p, A, v)
#_______________________________________________________________________
function _Zexparr(S, s, t, i)
{
- ##############################################
t = ""
if (isarray(S)) {
for (i in S) {
@@ -1021,7 +1328,6 @@ function _Zexparr_i3(t)
#_______________________________________________________________________
function _Zimparr(D, t, A, B)
{
- ##############################################
if (isarray(D)) {
split(t, A, /\x10/, B)
t = _Zimparr_i0(A, B, _Zimparr_i1(D, A, B, 1))
@@ -1072,7 +1378,6 @@ function _Zimparr_i2(t)
#_____________________________________________________________________________
function _Zimport(t, p, A, c, i, n, B)
{
- ##############################################
if (p) {
c = split(t, B, /\x0A/)
for (i = 1; i <= c; i++) {
@@ -1147,7 +1452,6 @@ function _accmpu(A, a, n)
#_______________________________________________________________________
function _add(S, sf, D, df)
{
- ################################################
if (sf in S) {
if (isarray(S[sf])) {
if (df in D) {
@@ -1171,7 +1475,6 @@ function _add(S, sf, D, df)
#_________________________________________________________________
function _addarr(D, S)
{
- #############################################
if (isarray(S)) {
_addarr_i0(D, S)
}
@@ -1196,7 +1499,6 @@ function _addarr_i0(D, S, i)
#_______________________________________________________________________
function _addarrmask(D, S, M)
{
- #############################################
for (_addarrmaski0 in M) {
if (_addarrmaski0 in S) {
if (isarray(S[_addarrmaski0])) {
@@ -1229,14 +1531,12 @@ function _addarrmask(D, S, M)
#_______________________________________________________________________
function _addf(A, f)
{
- #####################################################
A["B"][""] = A["F"][A["B"][f] = A["B"][""]] = f
}
#___________________________________________________________
function _addfile(f, d, a, b)
{
- ##################################
if ((f = _wfilerdnehnd(f)) == "" || _filene(f) == "") {
ERRNO = "Filename error"
return
@@ -1262,7 +1562,6 @@ function _addfile(f, d, a, b)
#_____________________________________________________________________________
function _addlib(f)
{
- ###########################################################
_addf(_LIBAPI, f)
}
@@ -1273,15 +1572,12 @@ function _addlib(f)
#_______________________________________________________________________
function _addlist(A, v)
{
- ##################################################
A[++A[0]] = v
}
-############################################
#_______________________________________________________________________
function _bearray(A)
{
- ####################################################
if (isarray(A) || A == 0 && A == "") {
return 1
}
@@ -1290,7 +1586,6 @@ function _bearray(A)
#_________________________________________________________________
function _bframe(A, t, p)
{
- ###########################################
return _bframe_i0(A, t, p, A[""])
}
@@ -1322,7 +1617,6 @@ function _bframe_i0(A, t, p, f)
#_______________________________________________________________________
function _cfguid(p, optr, pfx, sfx, hstrcnt, lstrchr)
{
- #################### 0 #
delete _UIDOBL[p]
if (_isptr(optr)) {
if (optr == p) {
@@ -1391,7 +1685,6 @@ function _cfguidl(p, H, L, hi, h, hl, li)
#____________________________________________________________________________________________________
function _check(p)
{
- ####################################################################################
_dll_check(p)
_file_check(p)
_serv_check(p)
@@ -1401,14 +1694,12 @@ function _check(p)
#_______________________________________________________________________
function _chrline(t, ts, w, s)
{
- #############################################
return ((t = " " _tabtospc(t, ts) ((t ? (t ~ /[ \t]$/ ? "" : " ") : ""))) _getchrln((s ? s : "_"), ((w ? w : _CON_WIDTH - 1)) - length(t)) _CHR["EOL"])
}
#_____________________________________________________________________________
function _cmd(c, i, A)
{
- #######################################################
_fio_cmda = RS
RS = ".{1,}"
_fio_cmdb = BINMODE
@@ -1426,7 +1717,6 @@ function _cmd(c, i, A)
#_______________________________________________________________________
function _cmparr(A0, A1, R, a, i)
{
- ##########################################
a = 0
delete R
for (i in A0) {
@@ -1452,7 +1742,6 @@ function _cmparr(A0, A1, R, a, i)
#_____________________________________________________________________________
function _con(t, ts, a, b, c, d, i, r, A, B)
{
- ##########################################
d = RLENGTH
if ((c = split(r = t, A, /\x0D?\x0A/, B)) > 0) {
a = BINMODE
@@ -1494,7 +1783,6 @@ function _con(t, ts, a, b, c, d, i, r, A, B)
#_______________________________________________________________________
function _conin(t, a, b)
{
- #################################################
_constatpush()
_constat()
a = BINMODE
@@ -1516,14 +1804,12 @@ function _conin(t, a, b)
#_______________________________________________________________________
function _conl(t, ts)
{
- ####################################################
return _con(t ((t ~ /\x0A$/ ? "" : _CHR["EOL"])), ts)
}
#_______________________________________________________________________
function _conline(t, ts)
{
- #################################################
return _con(_chrline(t, ts))
}
@@ -1540,7 +1826,6 @@ function _conlq(t, ts)
#_______________________________________________________________________
function _constat(t, ts, ln, a)
{
- ###########################################
if (_constatstrln > (ln = length(t = _constatgtstr(_constatstr = _tabtospc(t, ts), _CON_WIDTH - 1 - _conlastrln)))) {
t = t _getchrln(" ", _constatstrln - ln)
}
@@ -1577,7 +1862,6 @@ function _constatgtstr(t, ln, a, b)
#_______________________________________________________________________
function _constatpop()
{
- ##################################################
if (_CONSTATPUSH[0] > 0) {
return _constat(_CONSTATPUSH[_CONSTATPUSH[0]--])
}
@@ -1587,7 +1871,6 @@ function _constatpop()
#_______________________________________________________________________
function _constatpush(t, ts)
{
- #############################################
_CONSTATPUSH[++_CONSTATPUSH[0]] = _constatstr
if (t) {
_constat(t, ts)
@@ -1604,7 +1887,6 @@ function _creport(p, t, f, z)
#_________________________________________________________________________________________
function _defdir(pp, n, f, v, p)
{
- #############################################################
_[p = _wLCHLD(pp, _n("TYPE", "defdir"))]["NAME"] = n
_[p]["DIR"] = f
return p
@@ -1613,7 +1895,6 @@ function _defdir(pp, n, f, v, p)
#_________________________________________________________________________________________
function _defdll(pp, n, rn, p)
{
- ##############################################################
_[p = _wLCHLD(pp, _n("TYPE", "defdll"))]["NAME"] = n
_[p]["REGPATH"] = _[pp]["REGPATH"] rn
_[p]["ERRHOST"] = pp
@@ -1654,7 +1935,6 @@ function _defescarr(D, r, S, i, c, t)
#_________________________________________________________________________________________
function _defile(pp, n, f, v, p)
{
- #############################################################
_[p = _wLCHLD(pp, _n("TYPE", "defile"))]["NAME"] = n
_[p]["FILE"] = f
if (! (v == 0 && v == "")) {
@@ -1666,14 +1946,12 @@ function _defile(pp, n, f, v, p)
#_______________________________________________________________________
function _defn(f, c, v)
{
- ###################################################
FUNCTAB[c f] = v
}
#_________________________________________________________________________________________
function _defreg(pp, n, f, v, p)
{
- #############################################################
_[p = _wLCHLD(pp, _n("TYPE", "defreg"))]["NAME"] = n
_[p]["REGPATH"] = f
if (! (v == 0 && v == "")) {
@@ -1684,7 +1962,6 @@ function _defreg(pp, n, f, v, p)
#_______________________________________________________________________________________________
function _defsolution(pp, n, rn, p)
{
- ###############################################################
_[p = _wLCHLD(pp, _n("TYPE", "solution"))]["NAME"] = n
_[p]["REGPATH"] = rn
_[p]["ERRHOST"] = pp
@@ -1694,7 +1971,6 @@ function _defsolution(pp, n, rn, p)
#_________________________________________________________________________________________
function _defsrv(pp, n, f, v, p)
{
- #############################################################
_[p = _wLCHLD(pp, _n("TYPE", "defsrv"))]["NAME"] = n
_[p]["SERVNAME"] = f
return p
@@ -1703,7 +1979,6 @@ function _defsrv(pp, n, f, v, p)
#_______________________________________________________________________
function _del(f, c, a, A)
{
- #################################################
if (match(f, /\\[ \t]*$/)) {
if ((c = toupper(_filerd(f))) && length(f) == FLENGTH) {
_cmd("rd " c " /S /Q 2>NUL")
@@ -1732,7 +2007,6 @@ function _del(f, c, a, A)
#_______________________________________________________________________
function _delay(t, a)
{
- ###################################################
for (a = 1; a <= t; a++) {
_delayms()
}
@@ -1741,7 +2015,6 @@ function _delay(t, a)
#_________________________________________________________________
function _delayms(a)
{
- #############################################
for (a = 1; a <= _delay_perfmsdelay; a++) {
}
}
@@ -1749,7 +2022,6 @@ function _delayms(a)
#_______________________________________________________________________
function _deletepfx(A, f, B, le, i)
{
- ########################################
le = length(f)
for (i in A) {
if (substr(toupper(i), 1, le) == f) {
@@ -1762,7 +2034,6 @@ function _deletepfx(A, f, B, le, i)
#_________________________________________________________________
function _delf(A, f)
{
- ###############################################
A["B"][A["F"][A["B"][f]] = A["F"][f]] = A["B"][f]
delete A["F"][f]
delete A["B"][f]
@@ -1771,7 +2042,6 @@ function _delf(A, f)
#_______________________________________________________________________
function _deluid(p)
{
- ################################################# 1 #
if (p in _CLASSPTR) {
_deluida0 = _CLASSPTR[p]
if (_deluida0 in _UIDOBL) {
@@ -1785,7 +2055,6 @@ function _deluid(p)
#_______________________________________________________________________
function _dir(A, rd, i, r, f, ds, pf, B, C)
{
- ####################################
delete A
gsub(/(^[ \t]*)|([ \t]*$)/, "", rd)
if (rd == "") {
@@ -1815,7 +2084,6 @@ function _dir(A, rd, i, r, f, ds, pf, B, C)
#_________________________________________________________________
function _dirtree(A, f, B)
{
- #########################################
gsub(/(^[ \t]*)|([ \t]*$)/, "", f)
delete A
A[""]
@@ -1852,8 +2120,7 @@ function _dll_check(pp)
{
_dllchktv = ""
_missfl = 1
- _tframe("_dll_check_i0", pp, _REG, pp)
- #also check that all dll have same version; also check that all dlls have success and then report that DS plug-in version n - installed
+ _tframe("_dll_check_i0", pp, _REG, pp) #also check that all dll have same version; also check that all dlls have success and then report that DS plug-in version n - installed
if (1 || "AGENT" in _[pp]) {
if (_dllchktv != _[pp][".Product Version"]) {
_dllerr(_[pp]["AGENT"], "agent version (" _[pp][".Product Version"] ") do not match all lib versions: " _dllchktv "'")
@@ -1888,7 +2155,6 @@ function _dll_check_i0(p, R, pp, p2, i, i2, r, f, v, rs, d, tv, tf)
}
}
}
- #{ rs=_missfl=1; _[p]["." gensub(/^([^\\]+\\)+(.*)\..../,"\\2","G",i)]=R[i] } }
if (rs) {
if ((i = ".Install Path") in _[p] && (i = ".Product Version") in _[p]) {
_[p]["STATUS"] = "PRESENT"
@@ -1982,7 +2248,6 @@ function _drawuid(p, cn, ch, o)
#_______________________________________________________________________
function _dumparr(A, t, lv, a)
{
- ############################################
b = PROCINFO["sorted_in"]
PROCINFO["sorted_in"] = "_lengthsort"
if (isarray(A)) {
@@ -2047,7 +2312,6 @@ function _dumparr_i1(A, lv, ls, ln, t, t2, i, a, f)
#_____________________________________________________________________________
function _dumpobj(p, f, t, s)
{
- ###################################################
s = _dumpobj_i0(p, f, t = t "." p "{")
if (p = _rFCHLD(p)) {
return (s = s _dumpobjm(p, f, (s ? _getchrln(" ", length(t) - 1) : t " ")))
@@ -2115,14 +2379,12 @@ function _dumpobj_i4(t)
#_________________________________________________________________
function _dumpobj_nc(p, f, t)
{
- #######################################
return _dumpobj_i0(p, f, t "." p "{ ")
}
#_________________________________________________________________
function _dumpobjm(p, f, t, s, t2)
{
- ###################################
t2 = _getchrln(" ", length(t))
do {
s = s _dumpobj(p, f, t)
@@ -2134,7 +2396,6 @@ function _dumpobjm(p, f, t, s, t2)
#_________________________________________________________________
function _dumpobjm_nc(p, f, t, s, t2)
{
- ################################
t2 = _getchrln(" ", length(t))
do {
s = s _dumpobj_nc(p, f, t)
@@ -2174,7 +2435,6 @@ function _dumpval(v, n)
}
########################################################
-
function _eXTFN(c, t, P)
{
switch (c) {
@@ -2212,7 +2472,6 @@ function _endpass(t)
#_______________________________________________________________________
function _err(t, a, b)
{
- ###################################################
a = BINMODE
b = ORS
BINMODE = "rw"
@@ -2227,14 +2486,12 @@ function _err(t, a, b)
#_________________________________________________________________
function _errnl(t)
{
- ################################################
return _err(t ((t ~ /\x0A$/ ? "" : _CHR["EOL"])))
}
#_______________________________________________________________________
function _error(t, d, A)
{
- #################################################
if (_ERRLOG_EF) {
A["TYPE"] = "ERROR"
A["TEXT"] = t
@@ -2245,14 +2502,12 @@ function _error(t, d, A)
#_______________________________________________________________________
function _exit(c)
{
- #######################################################
exit c
}
#_____________________________________________________________________________
function _export_data(t, i, A)
{
- #################################################
A["DATA"] = t
A["ID"] = i
_expout("_DATA: " _Zexparr(A) "\n")
@@ -2264,7 +2519,6 @@ function _export_data(t, i, A)
#_____________________________________________________________________________
function _expout(t, d, a, b)
{
- ####################################################
a = BINMODE
b = ORS
BINMODE = "rw"
@@ -2287,8 +2541,6 @@ function _expout(t, d, a, b)
function _extfn_init()
{
- ##############################################################
-
_formatstrs_init()
_formatstrd_init()
_formatrexp_init()
@@ -2321,7 +2573,6 @@ function _faccr_i0(A, t, p, P, f, r)
#_______________________________________________________________________
function _fatal(t, d, A)
{
- #################################################
if (_ERRLOG_FF) {
A["TYPE"] = "FATAL"
A["TEXT"] = t
@@ -2352,11 +2603,9 @@ function _ffaccr(A, t, p, P)
return _faccr_i0(A["F"], t, p, P)
}
-##################
#_______________________________________________________________________
function _fframe(A, t, p)
{
- #################################################
return _fframe_i0(A, t, p, A[""])
}
@@ -2369,7 +2618,6 @@ function _fframe_i0(A, t, p, f)
#_________________________________________________________________
function _file(f)
{
- #################################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2418,7 +2666,6 @@ function _file_check_i0(p, pp, p1, p2, f, v)
#_________________________________________________________________
function _filed(f, dd, d)
{
- ##########################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2443,7 +2690,6 @@ function _filed(f, dd, d)
#_________________________________________________________________
function _filen(f)
{
- ################################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2453,7 +2699,6 @@ function _filen(f)
#_________________________________________________________________
function _filene(f)
{
- ###############################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2463,7 +2708,6 @@ function _filene(f)
#_________________________________________________________________
function _filenotexist(f, a)
{
- ######################################
if (f == "") {
return ""
}
@@ -2481,7 +2725,6 @@ function _filenotexist(f, a)
#_______________________________________________________________________
function _filepath(f, dd)
{
- ################################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2491,7 +2734,6 @@ function _filepath(f, dd)
#_________________________________________________________________
function _filer(f, dd)
{
- #############################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2507,7 +2749,6 @@ function _filer(f, dd)
#_________________________________________________________________
function _filerd(f, dd)
{
- ############################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2517,7 +2758,6 @@ function _filerd(f, dd)
#_________________________________________________________________
function _filerdn(f, dd)
{
- ###########################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2527,7 +2767,6 @@ function _filerdn(f, dd)
#_________________________________________________________________
function _filerdne(f, dd)
{
- ##########################################
if ((f = _filerdnehnd(f)) == "") {
return ""
}
@@ -2598,7 +2837,6 @@ function _filerdnehnd(st, c, r, d, n, A)
#_______________________________________________________________________
function _filexist(f, a)
{
- ################################################
if (f == "") {
return ""
}
@@ -2617,7 +2855,6 @@ function _filexist(f, a)
#_______________________________________________________________________
function _fn(f, p0, p1, p2)
{
- ################################################
if (f in FUNCTAB) {
return @f(p0, p1, p2)
}
@@ -2626,7 +2863,6 @@ function _fn(f, p0, p1, p2)
#_______________________________________________________________________
function _foreach(A, f, r, p0, p1, p2, i, p)
{
- ####################################
if (isarray(A)) {
_TMP0[p = _n()]["."] = 1
_foreach_i0(A, f, _TMP0[p], p0, p1, p2)
@@ -2695,7 +2931,6 @@ function _formatstrd_init()
_FORMATSTRDESC["\t"] = "\\t"
}
-#__________________________________________________________________________________
####################################################################################
@@ -2765,7 +3000,6 @@ function _gen(D, t)
#_____________________________________________________________________________
function _gensubfn(t, r, f, p0, A)
{
- ###############################################
if (match(t, r, A)) {
return (substr(t, 1, RSTART - 1) (@f(_th0(substr(t, RSTART, RLENGTH), t = substr(t, RSTART + RLENGTH)), A, p0)) _gensubfn(t, r, f, p0))
}
@@ -2775,7 +3009,6 @@ function _gensubfn(t, r, f, p0, A)
#_____________________________________________________________________________
function _get_errout(p)
{
- #######################################################
return _tframe("_get_errout_i0", p)
}
@@ -2830,7 +3063,6 @@ function _get_errout_i3(p, t, ts, cl, cp, cr, a, b)
#_____________________________________________________________________________
function _get_logout(p)
{
- #######################################################
return _tframe("_get_logout_i0", p)
}
@@ -2854,7 +3086,6 @@ function _get_logout_i0(p, t, n, a)
#_______________________________________________________________________
function _getchrln(s, w)
{
- #################################################
if (s == "") {
return
}
@@ -2880,14 +3111,12 @@ function _getchrln(s, w)
#_______________________________________________________________________
function _getdate()
{
- #####################################################
return strftime("%F")
}
#_____________________________________________________________________________
function _getfilepath(t, f, al, b, A)
{
- ############################################
ERRNO = ""
if (match(t, /^[ \t]*(("([^"]*)"[ \t]*)|([`']([^']*)'[ \t]*)|(([^ \t]+)[ \t]*))/, A)) {
al = RLENGTH
@@ -2906,7 +3135,6 @@ function _getfilepath(t, f, al, b, A)
function _getfilever(f)
{
- #############################################################
split(_cmd(_fileverpath " \"" f "\""), _GETFILEVERA0, /[ \t]+/)
if (_GETFILEVERA0[5]) {
return _GETFILEVERA0[5]
@@ -2916,14 +3144,12 @@ function _getfilever(f)
#_________________________________________________________________
function _getime()
{
- ################################################
return strftime("%H:%M:%S")
}
#_________________________________________________________________
function _getmpdir(f, dd)
{
- ##########################################
if (! dd || ! (dd = _filerd(dd))) {
dd = _FILEIO_TMPRD
}
@@ -2936,7 +3162,6 @@ function _getmpdir(f, dd)
#_________________________________________________________________
function _getmpfile(f, dd)
{
- #########################################
if (! dd || ! (dd = _filerd(dd))) {
dd = _FILEIO_TMPRD
}
@@ -2949,7 +3174,6 @@ function _getmpfile(f, dd)
#_______________________________________________________________________
function _getperf(o, t, a)
{
- ###############################################
(o == "" ? ++_getperf_opcurr : _getperf_opcurr = o)
if ((a = _getsecond()) != _getperf_last) {
_getperf_opsec = (_getperf_opcurr - _getperf_opstart) / ((_getperf_last = a) - _getperf_start)
@@ -3045,14 +3269,12 @@ function _getreg_i1(D, r, R, a, i, il, ir, rc, B)
#_________________________________________________________________
function _getsecond()
{
- #############################################
return systime()
}
#___________________________________________________________
function _getsecondsync(a, c, b, c2)
{
- ##########################
a = systime()
while (a == systime()) {
++c
@@ -3063,7 +3285,6 @@ function _getsecondsync(a, c, b, c2)
#_______________________________________________________________________
function _getuid(p)
{
- ################################################# 1 #
if (p in _UIDOBL) {
for (_tptr in _UIDOBLV[_getuida0 = _UIDOBL[p]]) {
delete _UIDOBLV[_getuida0][_tptr]
@@ -3096,7 +3317,6 @@ function _handle8494(t)
#_____________________________________________________________________________
function _hexnum(n, l)
{
- #########################################################
if (l + 0 < 1) {
l = 2
}
@@ -3106,7 +3326,6 @@ function _hexnum(n, l)
#_________________________________________________________________
function _igetperf(t, s, o)
{
- ######################################### # t-test period in seconds(==0 ? no period; s(=true/false)-output/not output status; o-qnt of ops before test start
if (t == 0 && t == "" && s == 0 && s == "" && o == 0 && o == "") {
if (_getperf_fn !~ /not$/ && _constatstr == _getperf_stat) {
_constat(_getperf_statstr)
@@ -3137,7 +3356,6 @@ function _import_data(t, p, p2, a)
#_______________________________________________________________________
function _info(t, d, A)
{
- ##################################################
if (_ERRLOG_IF) {
A["TYPE"] = "INFO"
A["TEXT"] = t
@@ -3209,7 +3427,6 @@ function _initsys()
#_______________________________________________________________________
function _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
{
- ################### 1 #
if (cs == 0 && cs == "") {
cs = p
p = _getuid()
@@ -3271,7 +3488,6 @@ function _inituidefault(h, l, H, L)
#_______________________________________________________________________
function _ins(S, sf, D, df)
{
- ################################################
if (sf in S) {
if (isarray(S[sf])) {
if (df in D) {
@@ -3295,19 +3511,16 @@ function _ins(S, sf, D, df)
#_________________________________________________________________
function _insf(A, f)
{
- ###############################################
A["F"][""] = A["B"][A["F"][f] = A["F"][""]] = f
}
#_________________________________________________________________
function _insframe(A, f)
{
- ###########################################
A[f] = A[""]
A[""] = f
}
-########################
#_________________________________________________________________
function _inspass(A, f)
{
@@ -3320,7 +3533,6 @@ function _inspass(A, f)
#_______________________________________________________________________
function _isptr(p)
{
- ################################################## 1 #
if (isarray(p)) {
is = _NOP
it = "A"
@@ -3341,7 +3553,6 @@ function _isptr(p)
#_______________________________________________________________________
function _istr(p)
{
- ################################################### 1 #
if (isarray(p)) {
is = _NOP
it = "A"
@@ -3358,7 +3569,6 @@ function _istr(p)
#_________________________________________________________________
function _lengthsort(i1, v1, i2, v2)
{
- ##############################
return ((length(i1) < length(i2) ? -1 : (length(i1) > length(i2) ? 1 : (i1 < i2 ? -1 : 1))))
}
@@ -3401,14 +3611,12 @@ function _lib_NAMEVER()
#_____________________________________________________________________________
function _ln(t)
{
- ###############################################################
return ((t ~ /\x0A$/ ? t : t _CHR["EOL"]))
}
#_________________________________________________________________
function _log(A, p, a, B)
{
- ###########################################
if (isarray(A)) {
A["TIME"] = _getime()
A["DATE"] = _getdate()
@@ -3429,7 +3637,6 @@ function _log(A, p, a, B)
#_________________________________________________________________
function _lspctab(t, ts, l, l1, l2, A)
{
- ################################
while (match(t, /^(\t*)( *)((\t*)(.*))$/, A)) {
if (A[1, "length"] >= l) {
return substr(t, l + 1)
@@ -3471,7 +3678,6 @@ function _macsfx94(F, D, C, p1, p2, p3)
#_______________________________________________________________________
function _movarr(D, S)
{
- ###################################################
delete D
D[""]
delete D[""]
@@ -3589,7 +3795,6 @@ function _mpusub(F, D, C, d, p1, p2, p3, q)
#_______________________________________________________________________
function _n(F, v, p)
{
- #####################################################
for (p in _UIDSDEL) {
delete _UIDSDEL[p]
delete _ptr[p]
@@ -3652,7 +3857,6 @@ function _nN_i0(p, F, v)
#_________________________________________________________________
function _newclrdir(f)
{
- ############################################
if ((f = _filerd(f)) == "") {
return
}
@@ -3665,7 +3869,6 @@ function _newclrdir(f)
#_______________________________________________________________________
function _newdir(f)
{
- #####################################################
if ((f = _filerd(f)) == "") {
return
}
@@ -3676,7 +3879,6 @@ function _newdir(f)
return f
}
-##############################
#_______________________________________________________________________
function _nop(p0, p1, p2, p3)
{
@@ -3700,7 +3902,6 @@ function _nop(p0, p1, p2, p3)
#_________________________________________________________________
function _nretarr(A, i, v, r, q)
{
- #####################################
if ((i = (i == "" ? 1 : i + 0)) <= (q = A[_ARRLEN])) {
if (i <= (r = q - 16)) {
_ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i]
@@ -3720,7 +3921,6 @@ function _nretarr(A, i, v, r, q)
#___________________________________________________________
function _nretarrd(A, i, v, r, q)
{
- ##############################
if ((i = (i == "" ? 1 : i + 0)) <= (q = A[_ARRLEN])) {
if (i <= (r = q - 16)) {
_ARRSTR = A[i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i] A[++i]
@@ -3745,7 +3945,6 @@ function _nretarrd(A, i, v, r, q)
#___________________________________________________________________________________
function _out(t, a, b)
{
- ###############################################################
a = BINMODE
b = ORS
BINMODE = "rw"
@@ -3760,7 +3959,6 @@ function _out(t, a, b)
#_________________________________________________________________
function _outnl(t)
{
- ################################################
return _out(t ((t ~ /\x0A$/ ? "" : _CHR["EOL"])))
}
@@ -3815,7 +4013,6 @@ function _p8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
#_______________________________________________________________________
function _pass(A, f, t, p2, i, a)
{
- ###########################################
a = _endpass_v0
_endpass_v0 = ""
i = 1
@@ -3838,7 +4035,6 @@ function _pass(A, f, t, p2, i, a)
#_____________________________________________________________________________
function _patharr0(D, q, i, h, A, B)
{
- ##############################################
delete D
if (0 < (q = split(gensub(/\\/, "/", "G", gensub(/ *([:$\\\/]) */, "\\1", "G", gensub(/(^[ \t]+)|([ \t]+$)/, "", "G", q))), A, /\/+/, B))) {
if (2 > (h = length(B[1]))) {
@@ -3927,9 +4123,6 @@ function _patharr0_i1(D, A, i, q, t, c)
}
#############################################################################
-
-
-
function _pmap(m, s1, s2, s3, s4, s5, s6, s7, s8)
{
if (match(m, /^([^\(]+)\(([^\)]*)\)$/, _QMAP)) {
@@ -3988,7 +4181,6 @@ function _pr8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, p4, p5, p6, p7, p8)
#_________________________________________________________________
function _printarr(A, t, lv, r, a)
{
- ####################################
a = PROCINFO["sorted_in"]
PROCINFO["sorted_in"] = "_lengthsort"
_printarrexp = (r ? r : "")
@@ -4094,7 +4286,6 @@ function _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7)
#_______________________________________________________________________
function _qstr(t, c, A, B)
{
- ################################################
c = ""
for (t = split(t, A, /[\x00-\x1F\\"]/, B); t >= 0; t--) {
c = _QSTR[B[t]] A[t + 1] c
@@ -4105,17 +4296,14 @@ function _qstr(t, c, A, B)
#_________________________________________________________________
function _qstrq(t)
{
- ################################################
gsub(/\\/, "\\\\", t)
gsub(/"/, "\\\"", t)
return t
}
-################################################################
#_____________________________________________________________________________
function _rEG(c, t, P, a, A)
{
- #####################################################
switch (c) {
case "_lib_CMDLN":
#___________________________________________________________
@@ -4141,7 +4329,6 @@ function _rEG(c, t, P, a, A)
#_______________________________________________________________________
function _rFBRO(p)
{
- ######################################################
if (p) {
if (p in _tPARENT) {
return _tFCHLD[_tPARENT[p]]
@@ -4157,18 +4344,15 @@ function _rFBRO(p)
#_______________________________________________________________________
function _rFCHLD(p)
{
- #####################################################
if (p && p in _tFCHLD) {
return _tFCHLD[p]
}
return ""
}
-######################## p="", !v
#_______________________________________________________________________
function _rLBRO(p)
{
- ######################################################
if (p) {
if (p in _tPARENT) {
return _tLCHLD[_tPARENT[p]]
@@ -4181,11 +4365,9 @@ function _rLBRO(p)
return p
}
-######################## p=""
#_______________________________________________________________________
function _rLCHLD(p)
{
- #####################################################
if (p && p in _tLCHLD) {
return _tLCHLD[p]
}
@@ -4195,48 +4377,39 @@ function _rLCHLD(p)
#_______________________________________________________________________
function _rLINK(p)
{
- ######################################################
return ((p in _tLINK ? _tLINK[p] : ""))
}
-######################## p=""
#_______________________________________________________________________
function _rNEXT(p)
{
- ######################################################
if (p && p in _tNEXT) {
return _tNEXT[p]
}
return ""
}
-######################## p=""
#_______________________________________________________________________
function _rPARENT(p)
{
- ####################################################
if (p && p in _tPARENT) {
return _tPARENT[p]
}
return ""
}
-######################## p=""
#_______________________________________________________________________
function _rPREV(p)
{
- ######################################################
if (p && p in _tPREV) {
return _tPREV[p]
}
return ""
}
-######################## p=""
#_______________________________________________________________________
function _rQBRO(p, c, p1)
{
- ################################################
if (p) {
if (p in _tPARENT) {
return _tQCHLD[_tPARENT[p]]
@@ -4256,11 +4429,9 @@ function _rQBRO(p, c, p1)
return p
}
-######################## p=""
#_______________________________________________________________________
function _rQCHLD(p)
{
- #####################################################
if (p && p in _tQCHLD) {
return _tQCHLD[p]
}
@@ -4273,7 +4444,6 @@ function _rQCHLD(p)
#_____________________________________________________________________________
function _rSQFIRST(g, p, A)
{
- #####################################################
if (isarray(A)) {
return _rSQFIRSTA(g, p, A)
}
@@ -4285,7 +4455,6 @@ function _rSQFIRST(g, p, A)
#_________________________________________________________________
function _rSQFIRSTA(g, p, A)
{
- ########################################
_SQTOPTR[g] = p
_SQSTACK[g][0] = 0
if ((p = _rsqgetptr(g, p)) in A) {
@@ -4297,7 +4466,6 @@ function _rSQFIRSTA(g, p, A)
#_______________________________________________________________________
function _rSQNEXT(g, p, A)
{
- ################################################
if (isarray(A)) {
return _rSQNEXTA(g, p, A)
}
@@ -4307,7 +4475,6 @@ function _rSQNEXT(g, p, A)
#_________________________________________________________________
function _rSQNEXTA(g, p, A)
{
- #########################################
if (p == _SQTOPTR[g]) {
if (_SQSTACK[g][0] > 0) {
_SQTOPTR[g] = _SQSTACK[g][_SQSTACK[g][0]--]
@@ -4353,7 +4520,6 @@ function _rd_shortcut(D, f)
#_______________________________________________________________________
function _rdfile(f, i, A)
{
- ################################################
if ((f = _filerdne(f)) == "" || _filene(f) == "") {
ERRNO = "Filename error"
return
@@ -4406,7 +4572,6 @@ function _rdfile(f, i, A)
# fn _getsecondsync()
function _rdreg(D, p)
{
- ################################################################
_rdregp0 = "reg query \"" p "\" /S /reg:64 2>NUL"
_rdregfld = _rdregkey = 0
_rdregq0 = split(gensub(/[\x0D?\x0A]{2,}/, _CHR["EOL"], "G", _cmd(_rdregp0)), _RDREGA0, /\x0D?\x0A/)
@@ -4545,7 +4710,6 @@ function _registryinit()
#_____________________________________________________________________________
function _regpath0(D, i, s, q, S)
{
- ############################################ 0 #
if (i = _patharr0(S, i)) {
if ("name" in S) {
D["name"] = S["name"]
@@ -4569,7 +4733,6 @@ function _regpath0(D, i, s, q, S)
#_________________________________________________________________________________________
function _report(p)
{
- #######################################################################
_report_t0 = _reportparnt = ""
_report_i0(p)
_tframe("_report_i0", p)
@@ -4667,7 +4830,6 @@ function _reporterr(p, t3, pp, t, t2)
#_____________________________________________________________________________
function _retarr(A, i, p, a, q)
{
- ##################################################
if (isarray(A)) {
i = (i == "" ? 0 : i + 0)
q = A[_ARRLEN] + 0
@@ -4691,7 +4853,6 @@ function _retarr_i0(A, q, i, a)
#_________________________________________________________________
function _retarrd(A, v, i)
{
- #########################################
if (1 in A) {
return (A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] A[11] A[12] A[13] A[14] A[15] A[16] (((i = 17) in A ? _retarrd_i0(A, i) v : v)))
}
@@ -4729,7 +4890,6 @@ function _rexpfnend(t)
#_____________________________________________________________________________
function _rexpstr(r, i, c, A)
{
- ###################################################
c = split(r, A, "")
r = ""
for (i = 1; i <= c; i++) {
@@ -4771,7 +4931,6 @@ function _rpp(q, D, S)
#_________________________________________________________________________________________
function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D)
{
- ############################################# old; regedit
if (! _registrytmpfile) {
_registryinit()
}
@@ -4889,11 +5048,9 @@ function _rxpfn(R, t, p, i, f, A)
return _rexpfnend(t)
}
-##############################################################
#_____________________________________________________________________________
function _sHARE(c, t, P, a, A)
{
- ###################################################
switch (c) {
case "_lib_CMDLN":
#___________________________________________________________
@@ -4916,11 +5073,9 @@ function _sHARE(c, t, P, a, A)
}
}
-################################################################
#_____________________________________________________________________________
function _sYS(c, t, P, a, A)
{
- #####################################################
switch (c) {
case "_lib_CMDLN":
#___________________________________________________________
@@ -4967,7 +5122,6 @@ function _serv_check_i0(p, p0, p1, p2, p3, i, q, c)
#_______________________________________________________________________
function _setarrsort(f, a)
{
- ##############################################
a = PROCINFO["sorted_in"]
if (! f) {
delete PROCINFO["sorted_in"]
@@ -4980,7 +5134,6 @@ function _setarrsort(f, a)
#_______________________________________________________________________
function _setmpath(p, a)
{
- ################################################
ERRNO = ""
if (p && (a = _filerd(p))) {
if (_FILEIO_TMPRD) {
@@ -5018,7 +5171,6 @@ function _setmpath(p, a)
function _sharelist(D, h, q, c, l, A, B)
{
- #################################################
delete D
c = _sharextool " \\\\" ((h == "" ? h = ENVIRON["COMPUTERNAME"] : h)) " 2>&1"
if (match(c = _cmd(c), /\x0AShare[^\x0A]*Remark/)) {
@@ -5038,7 +5190,6 @@ function _sharelist(D, h, q, c, l, A, B)
#_____________________________________________________________________________
function _sharepath(h, s, A)
{
- ###################################################
s = _sharextool " \\\\" ((h == "" ? h = ENVIRON["COMPUTERNAME"] : h)) "\\\"" s "\" 2>&1"
if (match(s = _cmd(s), /\x0APath[ \t]+([^\x0D\x0A]+)/, _SHAREPATHA0)) {
return gensub(/[ \t\\\/]*$/, "\\\\", 1, _SHAREPATHA0[1])
@@ -5048,17 +5199,14 @@ function _sharepath(h, s, A)
function _shortcut(D, S)
{
- #############################################################
if (isarray(D)) {
if (isarray(S)) {
_addarrmask(D, S, _SHORTCUTWSTRUC)
} else {
if (S == 0 && S == "") {
- # array,array2* - copy from array2 to array shorcut-specific elements
_addarrmask(D, _SHORTCUTDEFAULT, _SHORTCUTWSTRUC)
} else {
if (_isnotfileptr(S)) {
- # array* - define shortcut-specific elements in array by default values
_addarrmask(D, _[S], _SHORTCUTWSTRUC)
} else {
if (_rd_shortcut(D, S)) {
@@ -5067,22 +5215,18 @@ function _shortcut(D, S)
}
}
}
- # array,ptr* - copy from array _[ptr] to array shorcut-specific elements
} else {
if (D == 0 && D == "") {
return _NOP
} else {
if (_isnotfileptr(D)) {
- # -* - no action(return -)
if (isarray(S)) {
_addarrmask(_[D], S, _SHORTCUTWSTRUC)
} else {
if (S == 0 && S == "") {
- # ptr,array* - copy from array to array _[ptr] shorcut-specific elements
_addarrmask(_[D], _SHORTCUTDEFAULT, _SHORTCUTWSTRUC)
} else {
if (_isnotfileptr(S)) {
- # ptr* - define shortcut-specifc elements in array _[ptr] by default values
_addarrmask(_[D], _[S], _SHORTCUTWSTRUC)
} else {
if (_rd_shortcut(_[D], S)) {
@@ -5091,9 +5235,7 @@ function _shortcut(D, S)
}
}
}
- # ptr,ptr2* - copy from array _[ptr2] to array _[ptr] shorcut-specific elements
} else {
- # ptr,filepath* - define in array _[ptr] shortcut-specific elements by reading its from shortcut file filepath(load shortcut)
if (isarray(S) && _wr_shortcut(D, S)) {
return
} else {
@@ -5109,11 +5251,9 @@ function _shortcut(D, S)
}
}
}
- # filepath,ptr* - [over]write shorcut file filepath; shortcut parameters will be defined by shortcut-specific elements in array _[ptr](save shortcut)
}
}
}
- # filepath,filepath2* - [over]write shorcut file filepath; shortcut parameters will be defined from shortcut file filepath2(copy shortcut)
return 1
}
@@ -5299,7 +5439,6 @@ function _splitpath_test()
#_______________________________________________________________________
function _splitstr(A, t, r)
{
- ########################################### 1 #
if (_istr(t)) {
if (_splitstr_i0(A, t) > 0) {
return _splitstrp0
@@ -5475,7 +5614,6 @@ function _subseqon(B, r, F, f, s, e, q, i, A)
function _sysinfo(D, h)
{
- ##############################################################
h = "wmic /NODE: \"" h "\" OS 2>NUL"
if (split(_cmd(h), _SYSINFOA0, /[\x0D\x0A]+/) == 3) {
_sysinfol0 = length(h = _SYSINFOA0[2]) + 1
@@ -5488,7 +5626,6 @@ function _sysinfo(D, h)
}
#########################################################
-
function _tOBJ(c, t, P)
{
switch (c) {
@@ -5519,7 +5656,6 @@ function _tOBJ(c, t, P)
#_______________________________________________________________________
function _tOBJ_CLEANUP(p)
{
- ##############################################
for (p in UIDSDEL) {
delete _ptr[p]
delete _tPREV[p]
@@ -5538,7 +5674,6 @@ function _tOBJ_CLEANUP(p)
#_______________________________________________________________________
function _tabtospc(t, ts, xc, a, c, n, A, B)
{
- ##################################
if (! ts) {
ts = _TAB_STEP_DEFAULT
}
@@ -5575,7 +5710,6 @@ function _tapi(p, f, p0, p1, p2, p3, c)
#_____________________________________________________________________________
function _tbframe(f, p, p0, p1)
{
- ##################################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tbframe_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -5594,7 +5728,6 @@ function _tbframe_i0(f, p, p0, p1, a)
#_______________________________________________________________________
function _tbframex(f, p, p0, p1)
{
- ###########################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tbframex_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -5613,7 +5746,6 @@ function _tbframex_i0(f, p, p0, p1)
#_____________________________________________________________________________
function _tbpass(f, p, p0, p1)
{
- ###################################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tbpass_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -5632,7 +5764,6 @@ function _tbpass_i0(f, p, p0, p1, a)
#_____________________________________________________________________________
function _tbpassx(f, p, p0, p1)
{
- ##################################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tbpassx_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -5651,7 +5782,6 @@ function _tbpassx_i0(f, p, p0, p1)
#_____________________________________________________________________________
function _tbrochld(p, f, pp)
{
- ################################################### # TEST!!!
if (p) {
if (p in _tFCHLD) {
f = _tFCHLD[p]
@@ -5743,35 +5873,30 @@ function _tbrochld(p, f, pp)
#_________________________________________________________________
function _tbrunframe(f, p, p0, p1)
{
- ###################################
return _tbframe((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_________________________________________________________________
function _tbrunframex(f, p, p0, p1)
{
- ##################################
return _tbframex((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_________________________________________________________________
function _tbrunpass(f, p, p0, p1)
{
- ####################################
return _tbpass((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_________________________________________________________________
function _tbrunpassx(f, p, p0, p1)
{
- ###################################
return _tbpassx((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_____________________________________________________________________________
function _tdel(p, i)
{
- ##########################################################
if (p in _) {
_texclude(p)
for (i in _ptr[p]) {
@@ -5833,7 +5958,6 @@ function _tdel_i1(A, i)
#_____________________________________________________________________________
function _tdelete(p, v)
{
- ####################################################### # REMAKE EXCLUDE
if (p) {
_wLCHLD(_tDELPTR, p)
}
@@ -5843,7 +5967,6 @@ function _tdelete(p, v)
#_________________________________________________________________
function _tdelitem(p)
{
- #############################################
if (p) {
if ("HOST" in _PTR[p] && "ITEMNAME" in _[p]) {
return _wLCHLD(_PTR[_PTR[p]["HOST"]]["ITEM"][_[p]["ITEMNAME"]], p)
@@ -5856,7 +5979,6 @@ function _tdelitem(p)
#_______________________________________________________________________
function _tend(a, b)
{
- #####################################################
if (b == "") {
return (_t_ENDF[_t_ENDF[0]] = a)
} else {
@@ -5867,7 +5989,6 @@ function _tend(a, b)
#_____________________________________________________________________________
function _texclude(p, v, pp)
{
- ################################################### # TEST!!!
if (p in _) {
if (p in _tPARENT) {
pp = _tPARENT[p]
@@ -5916,7 +6037,6 @@ function _texclude(p, v, pp)
#_____________________________________________________________________________
function _tframe(fF, p, p0, p1, p2)
{
- ###############################################
delete _t_ENDF[++_t_ENDF[0]]
p = (_isptr(p) ? (isarray(fF) ? _tframe_i1(fF, p, p0, p1, p2) : _tframe_i0(fF, p, p0, p1, p2)) : "")
--_t_ENDF[0]
@@ -5926,7 +6046,6 @@ function _tframe(fF, p, p0, p1, p2)
#_____________________________________________________________________________
function _tframe0(f, p, p0, p1, p2, p3, A)
{
- #########################################
if (_isptr(p)) {
if (isarray(f)) {
return _tframe0_i0(f, p)
@@ -5993,7 +6112,6 @@ function _tframe0_i2(A, m, p)
#_________________________________________________________________
function _tframe1(f, p, p0, p1, p2, p3, A)
{
- #############################
if (_isptr(p)) {
if (isarray(f)) {
return _tframe1_i0(f, p, p0)
@@ -6049,7 +6167,6 @@ function _tframe1_i2(A, m, p, p0)
#_________________________________________________________________
function _tframe2(f, p, p0, p1, p2, p3, A)
{
- #############################
if (_isptr(p)) {
if (isarray(f)) {
return _tframe2_i0(f, p, p0, p1)
@@ -6105,7 +6222,6 @@ function _tframe2_i2(A, m, p, p0, p1)
#_________________________________________________________________
function _tframe3(f, p, p0, p1, p2, p3, A)
{
- #############################
if (_isptr(p)) {
if (isarray(f)) {
return _tframe3_i0(f, p, p0, p1, p2)
@@ -6161,7 +6277,6 @@ function _tframe3_i2(A, m, p, p0, p1, p2)
#_________________________________________________________________
function _tframe4(f, p, p0, p1, p2, p3, A)
{
- #############################
if (_isptr(p)) {
if (isarray(f)) {
return _tframe4_i0(f, p, p0, p1, p2, p3)
@@ -6235,7 +6350,6 @@ function _tframe_i1(F, p, p0, p1, p2, a)
#_______________________________________________________________________
function _tframex(f, p, p0, p1)
{
- ############################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tframex_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -6347,7 +6461,6 @@ function _tgenuid_init(a, b, A)
#_______________________________________________________________________
function _tgetitem(p, n, a, b)
{
- ############################################
if (p) {
if (isarray(_PTR[p]["ITEM"]) && n in _PTR[p]["ITEM"]) {
a = _PTR[p]["ITEM"][n]
@@ -6366,7 +6479,6 @@ function _tgetitem(p, n, a, b)
#_________________________________________________________________
function _tgetsp(p)
{
- ###############################################
return _tSTACK[p][0]
}
@@ -6378,28 +6490,24 @@ function _th0(p, p1, p2, p3)
return p
}
-##########################################
#_________________________________________________________________
function _th1(p0, p, p2, p3)
{
return p
}
-##############################
#_________________________________________________________________
function _th10(p0, p1)
{
return (p1 p0)
}
-##############################
#_________________________________________________________________
function _th2(p0, p1, r, p3)
{
return p
}
-##############################
#_________________________________________________________________
function _th3(p0, p1, p2, r)
{
@@ -6409,7 +6517,6 @@ function _th3(p0, p1, p2, r)
#_________________________________________________________________
function _tifend(l)
{
- ###############################################
return ((_t_ENDF[0] + l in _t_ENDF ? (_t_ENDF[_t_ENDF[0] + l] ? _t_ENDF[_t_ENDF[0] + l] : 1) : ""))
}
@@ -6579,7 +6686,6 @@ function _tlist_i1(L, p)
#_________________________________________________________________
function _tmbframe(f, p, p0, p1, t)
{
- ##################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
t = t _tbframe_i0(f, p, p0, p1, p = (p in _tPREV ? _tPREV[p] : ""))
}
@@ -6589,7 +6695,6 @@ function _tmbframe(f, p, p0, p1, t)
#_________________________________________________________________
function _tmbframex(f, p, p0, p1, t)
{
- #################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
t = t _tbframex_i0(f, p, p0, p1)
p = (p in _tPREV ? _tPREV[p] : "")
@@ -6600,7 +6705,6 @@ function _tmbframex(f, p, p0, p1, t)
#_________________________________________________________________
function _tmbpass(f, p, p0, p1)
{
- ######################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
p0 = _tbpass_i0(f, p, p0, p1, p = (p in _tPREV ? _tPREV[p] : ""))
}
@@ -6610,7 +6714,6 @@ function _tmbpass(f, p, p0, p1)
#_________________________________________________________________
function _tmbpassx(f, p, p0, p1)
{
- #####################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
p0 = _tbpassx_i0(f, p, p0, p1)
p = (p in _tPREV ? _tPREV[p] : "")
@@ -6621,7 +6724,6 @@ function _tmbpassx(f, p, p0, p1)
#_________________________________________________________________
function _tmframe(f, p, p0, p1, p2)
{
- ###################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tmframe_i0(f, p, p0, p1, p2) : "")
--_t_ENDF[0]
@@ -6649,7 +6751,6 @@ function _tmframe_i1(F, p, p0, p1, p2, t)
#_________________________________________________________________
function _tmframex(f, p, p0, p1, t)
{
- ##################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
t = t _tframex_i0(f, p, p0, p1)
p = (p in _tNEXT ? _tNEXT[p] : "")
@@ -6660,7 +6761,6 @@ function _tmframex(f, p, p0, p1, t)
#_________________________________________________________________
function _tmpass(f, p, p0, p1)
{
- #######################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
p0 = _tbpass_i0(f, p, p0, p1, p = (p in _tNEXT ? _tNEXT[p] : ""))
}
@@ -6670,7 +6770,6 @@ function _tmpass(f, p, p0, p1)
#_________________________________________________________________
function _tmpassx(f, p, p0, p1)
{
- ######################################
while (p && ! (_t_ENDF[0] in _t_ENDF)) {
p0 = _tbpassx_i0(f, p, p0, p1)
p = (p in _tNEXT ? _tNEXT[p] : "")
@@ -6714,7 +6813,6 @@ function _torexp_rexp(t)
#_____________________________________________________________________________
function _tpass(f, p, p0, p1)
{
- ####################################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tpass_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -6733,7 +6831,6 @@ function _tpass_i0(f, p, p0, p1, a)
#_____________________________________________________________________________
function _tpassx(f, p, p0, p1)
{
- ###################################################
delete _t_ENDF[++_t_ENDF[0]]
f = (p ? _tpassx_i0(f, p, p0, p1) : "")
--_t_ENDF[0]
@@ -6752,7 +6849,6 @@ function _tpassx_i0(f, p, p0, p1)
#_________________________________________________________________
function _tpop(p, aA, a)
{
- ###########################################
if ((a = _tSTACK[p][0]) > 0) {
_tSTACK[p][0]--
if (isarray(_tSTACK[p][a])) {
@@ -6768,7 +6864,6 @@ function _tpop(p, aA, a)
#_____________________________________________________________________________
function _tpush(p, aA, a)
{
- ######################################################
if (isarray(aA)) {
delete _tSTACK[p][a = ++_tSTACK[p][0]]
_tSTACK[p][a][""]
@@ -6807,7 +6902,6 @@ function _tr(n, cs, H)
#_______________________________________________________________________
function _trace(t, d, A)
{
- #################################################
if (_ERRLOG_TF) {
A["TYPE"] = "TRACE"
A["TEXT"] = t
@@ -6818,7 +6912,6 @@ function _trace(t, d, A)
#_________________________________________________________________
function _trunframe(f, p, p0, p1, p2)
{
- #################################
return _tframe((f ? f : "_trunframe_i0"), p, p0, p1, p2)
}
@@ -6834,28 +6927,24 @@ function _trunframe_i0(p, p0, p1, p2, f)
#_________________________________________________________________
function _trunframex(f, p, p0, p1)
{
- ###################################
return _tframex((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_________________________________________________________________
function _trunpass(f, p, p0, p1)
{
- #####################################
return _tpass((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_________________________________________________________________
function _trunpassx(f, p, p0, p1)
{
- ####################################
return _tpassx((f ? f : "_trunframe_i0"), p, p0, p1)
}
#_________________________________________________________________
function _tsetsp(p, v)
{
- #############################################
return (_tSTACK[p][0] = v)
}
@@ -7036,7 +7125,6 @@ function _typa(p, A)
#_______________________________________________________________________
function _tzend(a, b)
{
- #####################################################
if (b == 0 && b == "") {
return (_TEND[_TEND[_ARRLEN]] = a)
} else {
@@ -7176,7 +7264,6 @@ function _unstr(t)
#_________________________________________________________________
function _untmp(f, a)
{
- #############################################
if (f = filepath(f)) {
if (match(f, /\\$/)) {
_deletepfx(_FILEIO_RDTMP, a = toupper(f))
@@ -7228,7 +7315,6 @@ function _var(v, t)
#_______________________________________________________________________
function _verb(t, d, A)
{
- ##################################################
if (_ERRLOG_VF) {
A["TYPE"] = "VERB"
A["TEXT"] = t
@@ -7239,7 +7325,6 @@ function _verb(t, d, A)
#_________________________________________________________________
function _wFBRO(p, v, a)
{
- ###########################################
if (p) {
if (v) {
for (a = p; a in _tPARENT; ) {
@@ -7247,7 +7332,6 @@ function _wFBRO(p, v, a)
return v
}
}
- ######################## v is parentesis of p
if (p in _tPARENT) {
p = _tPARENT[p]
if (v in _tNEXT) {
@@ -7346,19 +7430,15 @@ function _wFBRO(p, v, a)
if (v == 0) {
return v
}
- ######################## p=ptr, v=0
return v
}
} else {
- ######################## p=ptr, v=""
if (p == 0) {
return v
}
- ######################## p=0
if (v) {
return _texclude(v)
}
- ######################## p="", v=ptr - exclude v
return v
}
}
@@ -7366,19 +7446,16 @@ function _wFBRO(p, v, a)
#_________________________________________________________________
function _wFCHLD(p, v, a)
{
- ##########################################
if (p) {
if (v) {
if (p == v) {
return v
}
- ######################## p=v=ptr
for (a = p; a in _tPARENT; ) {
if ((a = _tPARENT[a]) == v) {
return v
}
}
- ######################## v is parentesis of p
if (v in _tNEXT) {
if (v in _tPREV) {
_tPREV[_tNEXT[a] = _tNEXT[v]] = a = _tPREV[v]
@@ -7438,7 +7515,6 @@ function _wFCHLD(p, v, a)
} else {
if (v == 0) {
if (p in _tFCHLD) {
- ######################## p=ptr, v=0 > delete all chld
v = _tFCHLD[p]
delete _tFCHLD[p]
delete _tLCHLD[p]
@@ -7451,11 +7527,9 @@ function _wFCHLD(p, v, a)
return v
}
} else {
- ######################## p=ptr, v="" > ignore action
if (p == 0) {
return v
}
- ######################## p=0
return v
}
}
@@ -7463,7 +7537,6 @@ function _wFCHLD(p, v, a)
#_________________________________________________________________
function _wLBRO(p, v, a)
{
- ###########################################
if (p) {
if (v) {
for (a = p; a in _tPARENT; ) {
@@ -7471,7 +7544,6 @@ function _wLBRO(p, v, a)
return v
}
}
- ######################## v is parentesis of p
if (p in _tPARENT) {
p = _tPARENT[p]
if (v in _tPREV) {
@@ -7570,19 +7642,15 @@ function _wLBRO(p, v, a)
if (v == 0) {
return v
}
- ######################## p=ptr, v=0
return v
}
} else {
- ######################## p=ptr, v=""
if (p == 0) {
return v
}
- ######################## p=0
if (v) {
return _texclude(v)
}
- ######################## p="", v=ptr - exclude v
return v
}
}
@@ -7590,19 +7658,16 @@ function _wLBRO(p, v, a)
#_________________________________________________________________
function _wLCHLD(p, v, a)
{
- ##########################################
if (p) {
if (v) {
if (p == v) {
return v
}
- ######################## p=v=ptr
for (a = p; a in _tPARENT; ) {
if ((a = _tPARENT[a]) == v) {
return v
}
}
- ######################## v is parentesis of p
if (v in _tPREV) {
if (v in _tNEXT) {
_tNEXT[_tPREV[a] = _tPREV[v]] = a = _tNEXT[v]
@@ -7662,7 +7727,6 @@ function _wLCHLD(p, v, a)
} else {
if (v == 0) {
if (p in _tFCHLD) {
- ######################## p=ptr, v=0 > delete all chld
v = _tFCHLD[p]
delete _tFCHLD[p]
delete _tLCHLD[p]
@@ -7675,11 +7739,9 @@ function _wLCHLD(p, v, a)
return v
}
} else {
- ######################## p=ptr, v="" > ignore action
if (p == 0) {
return v
}
- ######################## p=0
return v
}
}
@@ -7687,26 +7749,22 @@ function _wLCHLD(p, v, a)
#_________________________________________________________________
function _wLINK(p, v)
{
- ##############################################
return (_tLINK[p] = v)
}
#_________________________________________________________________
function _wNEXT(p, v, a, b)
{
- #########################################
if (p) {
if (v) {
if (p == v) {
return v
}
- ######################## p=v=ptr
for (a = p; a in _tPARENT; ) {
if ((a = _tPARENT[a]) == v) {
return v
}
}
- ######################## v is parentesis of p
if (v in _tPREV) {
if (p == (a = _tPREV[v])) {
return v
@@ -7759,19 +7817,15 @@ function _wNEXT(p, v, a, b)
if (v == 0) {
return v
}
- ######################## p=ptr, v=0
return v
}
} else {
- ######################## p=ptr, v=""
if (p == 0) {
return v
}
- ######################## p=0
if (v) {
return _texclude(v)
}
- ######################## p="", v=ptr - exclude v
return v
}
}
@@ -7779,26 +7833,22 @@ function _wNEXT(p, v, a, b)
#_________________________________________________________________
function _wPARENT(p, v)
{
- ############################################
return v
}
#_________________________________________________________________
function _wPREV(p, v, a, b)
{
- #########################################
if (p) {
if (v) {
if (p == v) {
return v
}
- ######################## p=v=ptr
for (a = p; a in _tPARENT; ) {
if ((a = _tPARENT[a]) == v) {
return v
}
}
- ######################## v is parentesis of p
if (v in _tNEXT) {
if (p == (a = _tNEXT[v])) {
return v
@@ -7851,19 +7901,15 @@ function _wPREV(p, v, a, b)
if (v == 0) {
return v
}
- ######################## p=ptr, v=0
return v
}
} else {
- ######################## p=ptr, v=""
if (p == 0) {
return v
}
- ######################## p=0
if (v) {
return _texclude(v)
}
- ######################## p="", v=ptr - exclude v
return v
}
}
@@ -7871,21 +7917,17 @@ function _wPREV(p, v, a, b)
#_________________________________________________________________
function _wQBRO(p, v)
{
- ##############################################
return v
}
#_________________________________________________________________
function _wQCHLD(p, v)
{
- #############################################
if (p) {
if (v) {
} else {
- ######################## p=ptr, v=ptr
if (v == 0) {
if (p in _tFCHLD) {
- ######################## p=ptr, v=0 > delete all chld
v = _tFCHLD[p]
delete _tFCHLD[p]
delete _tLCHLD[p]
@@ -7898,11 +7940,9 @@ function _wQCHLD(p, v)
return v
}
} else {
- ######################## p=ptr, v="" > ignore action
if (p == 0) {
return v
}
- ######################## p=0
return v
}
}
@@ -7910,7 +7950,6 @@ function _wQCHLD(p, v)
#_______________________________________________________________________
function _warning(t, d, A)
{
- ###############################################
if (_ERRLOG_WF) {
A["TYPE"] = "WARNING"
A["TEXT"] = t
@@ -7962,7 +8001,6 @@ function _wr_shortcut(f, S)
#_________________________________________________________________
function _wrfile(f, d, a, b)
{
- #########################################
if ((f = _wfilerdnehnd(f)) == "" || _filene(f) == "") {
ERRNO = "Filename error"
return
@@ -7988,7 +8026,6 @@ function _wrfile(f, d, a, b)
#___________________________________________________________
function _wrfile1(f, d, a, b)
{
- ##################################
if ((f = _wfilerdnehnd(f)) == "" || _filene(f) == "") {
ERRNO = "Filename error"
return
@@ -8014,7 +8051,6 @@ function _wrfile1(f, d, a, b)
#_______________________________________________________________________
function _yexport(p)
{
- #####################################################
return _tframe("_yexport_i0", p)
}
@@ -8035,7 +8071,6 @@ function _yexport_i0(p, p0, p1, p2)
#_________________________________________________________________
function cmp_str_idx(i1, v1, i2, v2)
{
- ##############################
return ((i1 < i2 ? -1 : 1))
}
@@ -8190,7 +8225,6 @@ function hujf(a, b, c)
#___________________________________________________________
function ncmp_str_idx(i1, v1, i2, v2)
{
- #######################
return ((i1 < i2 ? 1 : -1))
}
@@ -8317,5 +8351,4 @@ function zorr(A, i, r)
#_____________________________________________________________________________
function zzer()
{
- ################################################################
}
diff --git a/test/profile8.awk b/test/profile8.awk
new file mode 100644
index 00000000..16252cea
--- /dev/null
+++ b/test/profile8.awk
@@ -0,0 +1,9 @@
+# Some
+# header
+# comments
+
+# Add up
+{ sum += $1 }
+
+# Print sum
+END { print sum }
diff --git a/test/profile8.ok b/test/profile8.ok
new file mode 100644
index 00000000..34f7a96b
--- /dev/null
+++ b/test/profile8.ok
@@ -0,0 +1,14 @@
+# Some
+# header
+# comments
+
+# Add up
+{
+ sum += $1
+}
+
+# Print sum
+END {
+ print sum
+}
+
diff --git a/test/range1.awk b/test/range1.awk
index aca5db50..aca5db50 100755..100644
--- a/test/range1.awk
+++ b/test/range1.awk
diff --git a/test/regexpbrack.awk b/test/regexpbrack.awk
new file mode 100644
index 00000000..136cd194
--- /dev/null
+++ b/test/regexpbrack.awk
@@ -0,0 +1,2 @@
+/[]+()0-9.,$%/'"-]*$/
+/^[]+()0-9.,$%/'"-]*$/
diff --git a/test/regexpbrack.in b/test/regexpbrack.in
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/regexpbrack.in
diff --git a/test/regexpbrack.ok b/test/regexpbrack.ok
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/regexpbrack.ok
diff --git a/test/sortglos.awk b/test/sortglos.awk
index e4f910d7..e4f910d7 100755..100644
--- a/test/sortglos.awk
+++ b/test/sortglos.awk
diff --git a/test/sortglos.in b/test/sortglos.in
index b24373de..b24373de 100755..100644
--- a/test/sortglos.in
+++ b/test/sortglos.in
diff --git a/test/testext.ok b/test/testext.ok
index 9b36bf72..897a7336 100644
--- a/test/testext.ok
+++ b/test/testext.ok
@@ -15,7 +15,7 @@ try_modify_environ: set_array_element of ENVIRON failed
try_modify_environ: marking element "testext" for deletion
try_del_environ() could not delete element - pass
try_del_environ() could not add an element - pass
-var_test: sym_lookup of PROCINFO passed - did not get a value
+var_test: sym_lookup of PROCINFO passed - got a value!
var_test: sym_lookup of ARGC passed - got a value!
var_test: sym_update of ARGC failed - correctly
var_test: sym_update("testvar") succeeded
@@ -23,6 +23,12 @@ var_test() returned 1, test_var = 42
test_errno() returned 1, ERRNO = No child processes
+fubar = 9
+rumpus = -5
+uid matches 1
+api_major matches 1
+test_deferred returns 1
+
length of test_array is 10, should be 10
test_array_size: incoming size is 10
test_array_size() returned 1, length is now 0
@@ -69,6 +75,12 @@ test_scalar_reserved: could not update new_value2 for ARGC - pass
test_indirect_var: sym_lookup of NR passed
test_indirect_var: value of NR is 3
test_indirect_var() return 1
+
+test_get_file returned 0
+File [.test.alias] nr [1]: line 1
+File [.test.alias] nr [2]: line 2
+File [.test.alias] nr [3]: line 3
+
answer_num = 42
message_string = hello, world
new_array["hello"] = "world"
diff --git a/test/timeout.awk b/test/timeout.awk
new file mode 100644
index 00000000..ccf4537d
--- /dev/null
+++ b/test/timeout.awk
@@ -0,0 +1,26 @@
+BEGIN {
+ cmd = "echo hello; sleep 1; echo goodbye"
+
+ print "With timeouts"
+ PROCINFO[cmd, "READ_TIMEOUT"] = 300
+ while ((rc = (cmd | getline x)) > 0)
+ print x
+ if (rc < 0)
+ print rc, (PROCINFO["errno"] != 0), (ERRNO != "")
+ print (close(cmd) != 0)
+
+ PROCINFO[cmd, "RETRY"]
+ print ""
+ print "With timeouts and retries"
+ while (((rc = (cmd | getline x)) > 0) || (rc == -2)) {
+ if (rc > 0) {
+ print x
+ n = 0
+ }
+ else
+ print ++n, "timed out; trying again"
+ }
+ if (rc < 0)
+ print rc, (PROCINFO["errno"] != 0), (ERRNO != "")
+ print (close(cmd) != 0)
+}
diff --git a/test/timeout.ok b/test/timeout.ok
new file mode 100644
index 00000000..a388747b
--- /dev/null
+++ b/test/timeout.ok
@@ -0,0 +1,12 @@
+With timeouts
+hello
+-1 1 1
+1
+
+With timeouts and retries
+hello
+1 timed out; trying again
+2 timed out; trying again
+3 timed out; trying again
+goodbye
+0
diff --git a/ylwrap b/ylwrap
index 7befa46d..7c2d927f 100755
--- a/ylwrap
+++ b/ylwrap
@@ -1,9 +1,9 @@
#! /bin/sh
# ylwrap - wrapper for lex/yacc invocations.
-scriptversion=2012-07-14.08; # UTC
+scriptversion=2013-01-12.17; # UTC
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
#
# Written by Tom Tromey <tromey@cygnus.com>.
#
@@ -40,12 +40,13 @@ get_dirname ()
# guard FILE
# ----------
# The CPP macro used to guard inclusion of FILE.
-guard()
+guard ()
{
- printf '%s\n' "$from" \
- | sed \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
- -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'
+ printf '%s\n' "$1" \
+ | sed \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
+ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \
+ -e 's/__*/_/g'
}
# quote_for_sed [STRING]
@@ -95,17 +96,17 @@ esac
# The input.
-input="$1"
+input=$1
shift
# We'll later need for a correct munging of "#line" directives.
input_sub_rx=`get_dirname "$input" | quote_for_sed`
-case "$input" in
+case $input in
[\\/]* | ?:[\\/]*)
# Absolute path; do nothing.
;;
*)
# Relative path. Make it absolute.
- input="`pwd`/$input"
+ input=`pwd`/$input
;;
esac
input_rx=`get_dirname "$input" | quote_for_sed`
@@ -121,12 +122,18 @@ fi
# The parser itself, the first file, is the destination of the .y.c
# rule in the Makefile.
parser=$1
+
# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
# instance, we rename #include "y.tab.h" into #include "parse.h"
# during the conversion from y.tab.c to parse.c.
-rename_sed=
-while test "$#" -ne 0; do
- if test "$1" = "--"; then
+sed_fix_filenames=
+
+# Also rename header guards, as Bison 2.7 for instance uses its header
+# guard in its implementation file.
+sed_fix_header_guards=
+
+while test $# -ne 0; do
+ if test x"$1" = x"--"; then
shift
break
fi
@@ -141,20 +148,19 @@ while test "$#" -ne 0; do
shift
to=$1
shift
- rename_sed="${rename_sed}s|"`quote_for_sed "$from"`"|$to|g;"
+ sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
+ sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
done
# The program to run.
-prog="$1"
+prog=$1
shift
# Make any relative path in $prog absolute.
-case "$prog" in
+case $prog in
[\\/]* | ?:[\\/]*) ;;
- *[\\/]*) prog="`pwd`/$prog" ;;
+ *[\\/]*) prog=`pwd`/$prog ;;
esac
-# FIXME: add hostname here for parallel makes that run commands on
-# other machines. But that might take us over the 14-char limit.
dirname=ylwrap$$
do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
@@ -174,13 +180,13 @@ ret=$?
if test $ret -eq 0; then
for from in *
do
- to=`printf '%s\n' "$from" | sed "$rename_sed"`
+ to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
if test -f "$from"; then
# If $2 is an absolute path name, then just use that,
# otherwise prepend '../'.
case $to in
[\\/]* | ?:[\\/]*) target=$to;;
- *) target="../$to";;
+ *) target=../$to;;
esac
# Do not overwrite unchanged header files to avoid useless
@@ -189,7 +195,7 @@ if test $ret -eq 0; then
# output of all other files to a temporary file so we can
# compare them to existing versions.
if test $from != $parser; then
- realtarget="$target"
+ realtarget=$target
target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
fi
@@ -197,10 +203,11 @@ if test $ret -eq 0; then
# debug information point at an absolute srcdir. Use the real
# output file name, not yy.lex.c for instance. Adjust the
# include guards too.
- FROM=`guard "$from"`
- TARGET=`guard "$to"`
- sed -e "/^#/!b" -e "s|$input_rx|$input_sub_rx|" -e "$rename_sed" \
- -e "s|$FROM|$TARGET|" "$from" >"$target" || ret=$?
+ sed -e "/^#/!b" \
+ -e "s|$input_rx|$input_sub_rx|" \
+ -e "$sed_fix_filenames" \
+ -e "$sed_fix_header_guards" \
+ "$from" >"$target" || ret=$?
# Check whether files must be updated.
if test "$from" != "$parser"; then